@refinedev/antd 5.3.13 → 5.3.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../core/src/index.tsx","../../../core/src/components/pages/error/index.tsx","../../../core/src/contexts/auth/index.tsx","../../../core/src/hooks/auth/usePermissions/index.ts","../../../core/src/hooks/auth/useGetIdentity/index.ts","../../../core/src/hooks/auth/useLogout/index.ts","../../../core/src/hooks/auth/useInvalidateAuthStore/index.ts","../../../core/src/hooks/auth/useLogin/index.ts","../../../core/src/hooks/auth/useRegister/index.ts","../../../core/src/hooks/auth/useForgotPassword/index.ts","../../../core/src/hooks/auth/useUpdatePassword/index.ts","../../../core/src/hooks/auth/useIsAuthenticated/index.ts","../../../core/src/hooks/auth/useOnError/index.ts","../../../core/src/hooks/auth/useIsExistAuthentication/index.ts","../../../core/src/hooks/data/useList.ts","../../../core/src/definitions/helpers/userFriendlySeconds/index.ts","../../../core/src/definitions/helpers/importCSVMapper/index.ts","../../../core/src/definitions/helpers/userFriendlyResourceName/index.ts","../../../core/src/definitions/table/index.ts","../../../core/src/definitions/upload/file2Base64/index.ts","../../../core/src/definitions/helpers/handleUseParams/index.tsx","../../../core/src/definitions/helpers/pickNotDeprecated/index.ts","../../../core/src/definitions/helpers/queryKeys/index.ts","../../../core/src/definitions/helpers/hasPermission/index.ts","../../../core/src/definitions/helpers/router/is-parameter.ts","../../../core/src/definitions/helpers/router/split-to-segments.ts","../../../core/src/definitions/helpers/router/is-segment-counts-same.ts","../../../core/src/definitions/helpers/router/remove-leading-trailing-slashes.ts","../../../core/src/definitions/helpers/router/check-by-segments.ts","../../../core/src/definitions/helpers/router/get-default-action-path.ts","../../../core/src/definitions/helpers/router/get-parent-resource.ts","../../../core/src/definitions/helpers/router/get-parent-prefix-for-resource.ts","../../../core/src/definitions/helpers/router/get-action-routes-from-resource.ts","../../../core/src/definitions/helpers/router/pick-matched-route.ts","../../../core/src/definitions/helpers/router/match-resource-from-route.ts","../../../core/src/definitions/helpers/routeGenerator/index.ts","../../../core/src/definitions/helpers/treeView/createTreeView/index.ts","../../../core/src/definitions/helpers/humanizeString/index.ts","../../../core/src/contexts/refine/index.tsx","../../../core/src/components/layoutWrapper/defaultLayout/index.tsx","../../../core/src/definitions/helpers/handleRefineOptions/index.ts","../../../core/src/definitions/helpers/redirectPage/index.ts","../../../core/src/definitions/helpers/sequentialPromises/index.ts","../../../core/src/definitions/helpers/pick-resource/index.ts","../../../core/src/definitions/helpers/pickDataProvider/index.ts","../../../core/src/definitions/helpers/handleMultiple/index.ts","../../../core/src/definitions/helpers/useInfinitePagination/index.ts","../../../core/src/definitions/helpers/legacy-resource-transform/index.ts","../../../core/src/definitions/helpers/router/pick-route-params.ts","../../../core/src/definitions/helpers/router/prepare-route-params.ts","../../../core/src/definitions/helpers/router/compose-route.ts","../../../core/src/definitions/helpers/useActiveAuthProvider/index.ts","../../../core/src/definitions/helpers/handlePaginationParams/index.ts","../../../core/src/definitions/helpers/useMediaQuery/index.ts","../../../core/src/hooks/data/useOne.ts","../../../core/src/hooks/data/useMany.ts","../../../core/src/hooks/data/useUpdate.ts","../../../core/src/contexts/undoableQueue/undoableQueueContext.tsx","../../../core/src/hooks/data/useCreate.ts","../../../core/src/hooks/data/useDelete.ts","../../../core/src/hooks/data/useCreateMany.ts","../../../core/src/hooks/data/useUpdateMany.ts","../../../core/src/hooks/data/useDeleteMany.ts","../../../core/src/hooks/data/useApiUrl.ts","../../../core/src/hooks/data/useCustom.ts","../../../core/src/hooks/data/useCustomMutation.ts","../../../core/src/hooks/data/useDataProvider.tsx","../../../core/src/contexts/data/index.tsx","../../../core/src/hooks/data/useInfiniteList.ts","../../../core/src/hooks/live/useResourceSubscription/index.ts","../../../core/src/contexts/live/index.tsx","../../../core/src/hooks/live/useLiveMode/index.ts","../../../core/src/hooks/live/useSubscription/index.ts","../../../core/src/hooks/live/usePublish/index.ts","../../../core/src/hooks/resource/useResource/index.ts","../../../core/src/contexts/resource/index.tsx","../../../core/src/hooks/deepMemo/index.tsx","../../../core/src/hooks/memoized/index.tsx","../../../core/src/contexts/router-picker/index.tsx","../../../core/src/hooks/router/use-parsed/index.tsx","../../../core/src/contexts/router/index.tsx","../../../core/src/hooks/router/use-parse/index.tsx","../../../core/src/hooks/resource/useResourceWithRoute/index.ts","../../../core/src/hooks/notification/useCancelNotification/index.tsx","../../../core/src/hooks/notification/useNotification/index.ts","../../../core/src/contexts/notification/index.tsx","../../../core/src/hooks/notification/useHandleNotification/index.ts","../../../core/src/hooks/translate/useSetLocale.ts","../../../core/src/contexts/translation/index.tsx","../../../core/src/hooks/translate/useTranslate.ts","../../../core/src/hooks/translate/useGetLocale.ts","../../../core/src/hooks/refine/useMutationMode.ts","../../../core/src/hooks/refine/useWarnAboutChange/index.ts","../../../core/src/contexts/unsavedWarn/index.tsx","../../../core/src/hooks/refine/useSyncWithLocation.ts","../../../core/src/hooks/refine/useTitle.tsx","../../../core/src/hooks/refine/useRefineContext.ts","../../../core/src/hooks/export/index.ts","../../../core/src/hooks/form/useForm.ts","../../../core/src/hooks/redirection/index.ts","../../../core/src/hooks/router/use-go/index.tsx","../../../core/src/hooks/router/use-back/index.tsx","../../../core/src/hooks/navigation/index.ts","../../../core/src/hooks/show/useShow.ts","../../../core/src/hooks/import/index.tsx","../../../core/src/hooks/modal/useModal/index.tsx","../../../core/src/hooks/router/use-get-to-path/index.ts","../../../core/src/hooks/router/use-to-path/index.ts","../../../core/src/hooks/router/use-link/index.tsx","../../../core/src/hooks/legacy-router/useRouterContext.ts","../../../core/src/contexts/legacy-router/index.tsx","../../../core/src/hooks/accessControl/useCan/index.ts","../../../core/src/contexts/accessControl/index.tsx","../../../core/src/definitions/helpers/sanitize-resource/index.ts","../../../core/src/hooks/accessControl/useCanWithoutCache.ts","../../../core/src/hooks/useSelect/index.ts","../../../core/src/hooks/useTable/index.ts","../../../core/src/hooks/auditLog/useLog/index.ts","../../../core/src/contexts/auditLog/index.tsx","../../../core/src/hooks/auditLog/useLogList/index.ts","../../../core/src/hooks/invalidate/index.tsx","../../../core/src/hooks/breadcrumb/index.ts","../../../core/src/hooks/menu/useMenu.tsx","../../../core/src/definitions/helpers/menu/create-resource-key.ts","../../../core/src/definitions/helpers/menu/create-tree.ts","../../../core/src/components/pages/login/index.tsx","../../../core/src/components/pages/auth/index.tsx","../../../core/src/components/pages/auth/components/login/index.tsx","../../../core/src/components/pages/auth/components/register/index.tsx","../../../core/src/components/pages/auth/components/forgotPassword/index.tsx","../../../core/src/components/pages/auth/components/updatePassword/index.tsx","../../../core/src/components/pages/ready/index.tsx","../../../core/src/components/pages/welcome/index.tsx","../../../core/src/components/containers/refine/index.tsx","../../../core/src/components/telemetry/index.tsx","../../../core/src/hooks/useTelemetryData/index.ts","../../../core/src/definitions/helpers/check-router-prop-misuse/index.ts","../../../core/src/hooks/router/use-router-misuse-warning/index.ts","../../../core/src/components/undoableQueue/index.tsx","../../../core/src/components/layoutWrapper/index.tsx","../../../core/src/components/authenticated/index.tsx","../../../core/src/components/routeChangeHandler/index.tsx","../../../core/src/components/canAccess/index.tsx","../../../core/src/components/gh-banner/index.tsx","../../../core/src/components/gh-banner/styles.ts","../../../ui-types/src/index.tsx","../../../ui-types/src/ids.tsx","../../src/hooks/form/useForm.ts","../../src/hooks/form/useModalForm/useModalForm.ts","../../src/hooks/form/useDrawerForm/useDrawerForm.ts","../../src/hooks/form/useStepsForm/useStepsForm.ts","../../src/hooks/table/useTable/useTable.ts","../../src/definitions/table/index.ts","../../src/hooks/table/useTable/paginationLink.tsx","../../src/hooks/table/useEditableTable/useEditableTable.ts","../../src/hooks/fields/useSelect/index.ts","../../src/hooks/fields/useCheckboxGroup/index.ts","../../src/hooks/fields/useRadioGroup/index.ts","../../src/hooks/import/index.tsx","../../src/hooks/list/useSimpleList/useSimpleList.ts","../../src/hooks/useFileUploadState/index.ts","../../src/hooks/modal/useModal/index.tsx","../../src/providers/notificationProvider/index.tsx","../../src/components/undoableNotification/index.tsx","../../src/components/layout/index.tsx","../../src/components/layout/sider/index.tsx","../../src/components/layout/sider/styles.ts","../../src/components/layout/header/index.tsx","../../src/components/layout/title/index.tsx","../../src/components/themedLayout/index.tsx","../../src/components/themedLayout/sider/index.tsx","../../src/components/themedLayout/sider/styles.ts","../../src/components/themedLayout/header/index.tsx","../../src/components/themedLayout/title/index.tsx","../../src/components/buttons/create/index.tsx","../../src/components/buttons/edit/index.tsx","../../src/components/buttons/delete/index.tsx","../../src/components/buttons/refresh/index.tsx","../../src/components/buttons/show/index.tsx","../../src/components/buttons/list/index.tsx","../../src/components/buttons/export/index.tsx","../../src/components/buttons/save/index.tsx","../../src/components/buttons/clone/index.tsx","../../src/components/buttons/import/index.tsx","../../src/components/crud/list/index.tsx","../../src/components/crud/create/index.tsx","../../src/components/crud/edit/index.tsx","../../src/components/crud/show/index.tsx","../../src/components/fields/text/index.tsx","../../src/components/fields/tag/index.tsx","../../src/components/fields/email/index.tsx","../../src/components/fields/image/index.tsx","../../src/components/fields/boolean/index.tsx","../../src/components/fields/date/index.tsx","../../src/components/fields/file/index.tsx","../../src/components/fields/url/index.tsx","../../src/components/fields/number/index.tsx","../../src/components/fields/markdown/index.tsx","../../src/components/table/components/filterDropdown/index.tsx","../../src/components/pages/error/index.tsx","../../src/components/pages/login/index.tsx","../../src/components/pages/login/styles.ts","../../src/components/pages/ready/index.tsx","../../src/components/pages/welcome/index.tsx","../../src/components/pages/auth/index.tsx","../../src/components/pages/auth/components/login/index.tsx","../../src/components/pages/auth/components/styles.ts","../../src/components/pages/auth/components/register/index.tsx","../../src/components/pages/auth/components/forgotPassword/index.tsx","../../src/components/pages/auth/components/updatePassword/index.tsx","../../src/components/breadcrumb/index.tsx","../../src/components/pageHeader/index.tsx","../../src/definitions/upload/index.ts","../../src/definitions/themes/index.ts"],"sourcesContent":["export * from \"./components\";\nexport * from \"./hooks\";\n\nexport {\n Action,\n ActionWithPage,\n AccessControlProvider,\n AuditLogProvider,\n LegacyAuthProvider,\n AuthBindings,\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 MetaQuery,\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 ILegacyAuthContext,\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 AccessControlBindings,\n DataBindings,\n i18nBindings,\n LiveBindings,\n NotificationsBindings,\n ResourceBindings,\n RouterBindings,\n ParseResponse,\n ParsedParams,\n GoConfig,\n BackFunction,\n GoFunction,\n ParseFunction,\n Prettify,\n FormWithSyncWithLocationParams,\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 pickNotDeprecated,\n legacyResourceTransform,\n matchResourceFromRoute,\n useActiveAuthProvider,\n} from \"./definitions/helpers\";\nexport { file2Base64 } from \"./definitions/upload\";\n\nexport { ResourceContext } from \"./contexts/resource/index\";\n","import React, { useEffect, useState } from \"react\";\n\nimport {\n useNavigation,\n useTranslate,\n useResource,\n useGo,\n useRouterType,\n} from \"@hooks\";\n\n/**\n * When the app is navigated to a non-existent route, refine shows a default error page.\n * A custom error component can be used for this error page.\n *\n * @see {@link https://refine.dev/docs/api-references/components/refine-config#catchall} for more details.\n */\nexport const ErrorComponent: React.FC = () => {\n const [errorMessage, setErrorMessage] = useState<string>();\n const translate = useTranslate();\n const { push } = useNavigation();\n const go = useGo();\n const routerType = useRouterType();\n\n const { resource, action } = useResource();\n\n useEffect(() => {\n if (resource && action) {\n setErrorMessage(\n translate(\n \"pages.error.info\",\n {\n action: action,\n resource: resource?.name,\n },\n `You may have forgotten to add the \"${action}\" component to \"${resource?.name}\" resource.`,\n ),\n );\n }\n }, [resource, action]);\n\n return (\n <>\n <h1>\n {translate(\n \"pages.error.404\",\n undefined,\n \"Sorry, the page you visited does not exist.\",\n )}\n </h1>\n {errorMessage && <p>{errorMessage}</p>}\n <button\n onClick={() => {\n if (routerType === \"legacy\") {\n push(\"/\");\n } else {\n go({ to: \"/\" });\n }\n }}\n >\n {translate(\"pages.error.backHome\", undefined, \"Back Home\")}\n </button>\n </>\n );\n};\n","import React, { PropsWithChildren } from \"react\";\n\nimport { useNavigation } from \"@hooks\";\nimport { ILegacyAuthContext, IAuthBindingsContext } from \"../../interfaces\";\n\n/**\n * @deprecated `LegacyAuthContext` is deprecated with refine@4, use `AuthBindingsContext` instead, however, we still support `LegacyAuthContext` for backward compatibility.\n */\nexport const LegacyAuthContext = React.createContext<ILegacyAuthContext>({});\n\n/**\n * @deprecated `LegacyAuthContextProvider` is deprecated with refine@4, use `AuthBindingsContextProvider` instead, however, we still support `LegacyAuthContextProvider` for backward compatibility.\n */\nexport const LegacyAuthContextProvider: React.FC<\n ILegacyAuthContext & {\n children?: React.ReactNode;\n }\n> = ({ children, isProvided, ...authOperations }) => {\n const { replace } = useNavigation();\n\n const loginFunc = async (params: any) => {\n try {\n const result = await authOperations.login?.(params);\n\n return 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 return 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 return 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 <LegacyAuthContext.Provider\n value={{\n ...authOperations,\n login: loginFunc,\n logout: logoutFunc,\n checkAuth: checkAuthFunc,\n register: registerFunc,\n isProvided,\n }}\n >\n {children}\n </LegacyAuthContext.Provider>\n );\n};\n\nexport const AuthBindingsContext = React.createContext<\n Partial<IAuthBindingsContext>\n>({});\n\nexport const AuthBindingsContextProvider: React.FC<\n PropsWithChildren<IAuthBindingsContext>\n> = ({ children, isProvided, ...authBindings }) => {\n const handleLogin = async (params: unknown) => {\n try {\n const result = await authBindings.login?.(params);\n\n return result;\n } catch (error) {\n console.warn(\n \"Unhandled Error in login: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleRegister = async (params: unknown) => {\n try {\n const result = await authBindings.register?.(params);\n\n return result;\n } catch (error) {\n console.warn(\n \"Unhandled Error in register: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleLogout = async (params: unknown) => {\n try {\n const result = await authBindings.logout?.(params);\n\n return result;\n } catch (error) {\n console.warn(\n \"Unhandled Error in logout: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleCheck = async (params: unknown) => {\n try {\n const result = await authBindings.check?.(params);\n\n return Promise.resolve(result);\n } catch (error) {\n console.warn(\n \"Unhandled Error in check: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleForgotPassword = async (params: unknown) => {\n try {\n const result = await authBindings.forgotPassword?.(params);\n\n return Promise.resolve(result);\n } catch (error) {\n console.warn(\n \"Unhandled Error in forgotPassword: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleUpdatePassword = async (params: unknown) => {\n try {\n const result = await authBindings.updatePassword?.(params);\n return Promise.resolve(result);\n } catch (error) {\n console.warn(\n \"Unhandled Error in updatePassword: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n return (\n <AuthBindingsContext.Provider\n value={{\n ...authBindings,\n login: handleLogin as IAuthBindingsContext[\"login\"],\n logout: handleLogout as IAuthBindingsContext[\"logout\"],\n check: handleCheck as IAuthBindingsContext[\"check\"],\n register: handleRegister as IAuthBindingsContext[\"register\"],\n forgotPassword:\n handleForgotPassword as IAuthBindingsContext[\"forgotPassword\"],\n updatePassword:\n handleUpdatePassword as IAuthBindingsContext[\"updatePassword\"],\n isProvided,\n }}\n >\n {children}\n </AuthBindingsContext.Provider>\n );\n};\n\n/**\n * @deprecated `useLegacyAuthContext` is deprecated with refine@4, use `useAuthBindingsContext` instead, however, we still support `useLegacyAuthContext` for backward compatibility.\n */\nexport const useLegacyAuthContext = () => {\n const context = React.useContext(LegacyAuthContext);\n\n return context;\n};\n\nexport const useAuthBindingsContext = () => {\n const context = React.useContext(AuthBindingsContext);\n\n return context;\n};\n","import { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\nimport { PermissionResponse } from \"../../../interfaces\";\nimport {\n useQuery,\n UseQueryResult,\n UseQueryOptions,\n} from \"@tanstack/react-query\";\n\nexport type UsePermissionsLegacyProps<TData = any> = {\n v3LegacyAuthProviderCompatible: true;\n options?: UseQueryOptions<TData>;\n};\n\nexport type UsePermissionsProps<TData = PermissionResponse> = {\n v3LegacyAuthProviderCompatible?: false;\n options?: UseQueryOptions<TData>;\n};\n\nexport type UsePermissionsCombinedProps<TData = any> = {\n v3LegacyAuthProviderCompatible: boolean;\n options?: UseQueryOptions<TData> | UseQueryOptions<PermissionResponse>;\n};\n\nexport type UsePermissionsLegacyReturnType<TData = any> = UseQueryResult<\n TData,\n unknown\n>;\n\nexport type UsePermissionsReturnType<TData = PermissionResponse> =\n UseQueryResult<TData, unknown>;\n\nexport type UsePermissionsCombinedReturnType<TData = any> =\n | UseQueryResult<TData, unknown>\n | UseQueryResult<PermissionResponse, unknown>;\n\nexport function usePermissions<TData = any>(\n props: UsePermissionsLegacyProps<TData>,\n): UsePermissionsLegacyReturnType<TData>;\n\nexport function usePermissions<TData = PermissionResponse>(\n props?: UsePermissionsProps<TData>,\n): UsePermissionsReturnType<TData>;\n\nexport function usePermissions<TData = any>(\n props?: UsePermissionsCombinedProps<TData>,\n): UsePermissionsCombinedReturnType<TData>;\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 function usePermissions<TData = any>({\n v3LegacyAuthProviderCompatible = false,\n options,\n}: UsePermissionsProps<TData> | UsePermissionsLegacyProps<TData> = {}):\n | UsePermissionsReturnType\n | UsePermissionsLegacyReturnType<TData> {\n const { getPermissions: legacyGetPermission } = useLegacyAuthContext();\n const { getPermissions } = useAuthBindingsContext();\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 as (params?: unknown) => Promise<TData>) ??\n (() => Promise.resolve(undefined)),\n {\n enabled: !v3LegacyAuthProviderCompatible && !!getPermissions,\n ...(v3LegacyAuthProviderCompatible ? {} : options),\n },\n );\n\n const legacyQueryResponse = useQuery<TData>(\n [\"usePermissions\", \"v3LegacyAuthProviderCompatible\"],\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 legacyGetPermission ?? (() => Promise.resolve(undefined)),\n {\n enabled: v3LegacyAuthProviderCompatible && !!legacyGetPermission,\n ...(v3LegacyAuthProviderCompatible ? options : {}),\n },\n );\n\n return v3LegacyAuthProviderCompatible ? legacyQueryResponse : queryResponse;\n}\n","import {\n useQuery,\n UseQueryResult,\n UseQueryOptions,\n} from \"@tanstack/react-query\";\n\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\nimport { IdentityResponse } from \"../../../interfaces\";\n\nexport type UseGetIdentityLegacyProps<TData> = {\n v3LegacyAuthProviderCompatible: true;\n queryOptions?: UseQueryOptions<TData>;\n};\n\nexport type UseGetIdentityProps<TData = IdentityResponse> = {\n v3LegacyAuthProviderCompatible?: false;\n queryOptions?: UseQueryOptions<TData>;\n};\n\nexport type UseGetIdentityCombinedProps<TData = any> = {\n v3LegacyAuthProviderCompatible: boolean;\n queryOptions?: UseQueryOptions<TData> | UseQueryOptions<IdentityResponse>;\n};\n\nexport type UseGetIdentityLegacyReturnType<TData> = UseQueryResult<\n TData,\n unknown\n>;\n\nexport type UseGetIdentityReturnType<TData = IdentityResponse> = UseQueryResult<\n TData,\n unknown\n>;\n\nexport type UsePermissionsCombinedReturnType<TData = any> =\n | UseQueryResult<TData, unknown>\n | UseQueryResult<IdentityResponse, unknown>;\n\nexport function useGetIdentity<TData = any>(\n props: UseGetIdentityLegacyProps<TData>,\n): UseGetIdentityLegacyReturnType<TData>;\n\nexport function useGetIdentity<TData = IdentityResponse>(\n props?: UseGetIdentityProps<TData>,\n): UseGetIdentityReturnType<TData>;\n\nexport function useGetIdentity<TData = any>(\n props?: UseGetIdentityCombinedProps<TData>,\n): UsePermissionsCombinedReturnType<TData>;\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 function useGetIdentity<TData = any>({\n v3LegacyAuthProviderCompatible = false,\n queryOptions,\n}: UseGetIdentityProps<TData> | UseGetIdentityLegacyProps<TData> = {}):\n | UseGetIdentityReturnType<TData>\n | UseGetIdentityLegacyReturnType<TData> {\n const { getUserIdentity: legacyGetUserIdentity } = useLegacyAuthContext();\n const { getIdentity } = useAuthBindingsContext();\n\n const queryResponse = useQuery<TData>(\n [\"getUserIdentity\"],\n // Enabled check for `getIdentity` is enough to be sure that it's defined in the query function but TS is not smart enough to know that.\n (getIdentity as (params?: unknown) => Promise<TData>) ??\n (() => Promise.resolve({})),\n {\n enabled: !v3LegacyAuthProviderCompatible && !!getIdentity,\n retry: false,\n ...(v3LegacyAuthProviderCompatible === true ? {} : queryOptions),\n },\n );\n\n const legacyQueryResponse = useQuery<TData>(\n [\"getUserIdentity\", \"v3LegacyAuthProviderCompatible\"],\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 legacyGetUserIdentity ?? (() => Promise.resolve({})),\n {\n enabled: v3LegacyAuthProviderCompatible && !!legacyGetUserIdentity,\n retry: false,\n ...(v3LegacyAuthProviderCompatible ? queryOptions : {}),\n },\n );\n\n return v3LegacyAuthProviderCompatible ? legacyQueryResponse : queryResponse;\n}\n","import {\n useMutation,\n UseMutationOptions,\n UseMutationResult,\n} from \"@tanstack/react-query\";\n\nimport { useGo, useNavigation, useNotification, useRouterType } from \"@hooks\";\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\nimport {\n RefineError,\n OpenNotificationParams,\n TLogoutData,\n} from \"../../../interfaces\";\nimport { AuthActionResponse } from \"src/interfaces/bindings/auth\";\nimport { useInvalidateAuthStore } from \"../useInvalidateAuthStore\";\n\ntype Variables = {\n redirectPath?: string | false;\n};\n\nexport type UseLogoutLegacyProps<TVariables> = {\n v3LegacyAuthProviderCompatible: true;\n mutationOptions?: Omit<\n UseMutationOptions<\n TLogoutData,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n >,\n \"mutationFn\" | \"onError\" | \"onSuccess\"\n >;\n};\n\nexport type UseLogoutProps<TVariables> = {\n v3LegacyAuthProviderCompatible?: false;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseLogoutCombinedProps<TVariables> = {\n v3LegacyAuthProviderCompatible: boolean;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse | TLogoutData,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseLogoutLegacyReturnType<TVariables> = UseMutationResult<\n TLogoutData,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n>;\n\nexport type UseLogoutReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n>;\n\nexport type UseLogoutCombinedReturnType<TVariables> = UseMutationResult<\n AuthActionResponse | TLogoutData,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n>;\n\nexport function useLogout<TVariables = {}>(\n props: UseLogoutLegacyProps<TVariables>,\n): UseLogoutLegacyReturnType<TVariables>;\n\nexport function useLogout<TVariables = {}>(\n props?: UseLogoutProps<TVariables>,\n): UseLogoutReturnType<TVariables>;\n\nexport function useLogout<TVariables = {}>(\n props?: UseLogoutCombinedProps<TVariables>,\n): UseLogoutCombinedReturnType<TVariables>;\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 function useLogout<TVariables = {}>({\n v3LegacyAuthProviderCompatible,\n mutationOptions,\n}: UseLogoutProps<TVariables> | UseLogoutLegacyProps<TVariables> = {}):\n | UseLogoutLegacyReturnType<TVariables>\n | UseLogoutReturnType<TVariables> {\n const invalidateAuthStore = useInvalidateAuthStore();\n const routerType = useRouterType();\n const go = useGo();\n const { push } = useNavigation();\n const { open, close } = useNotification();\n const { logout: legacyLogoutFromContext } = useLegacyAuthContext();\n const { logout: logoutFromContext } = useAuthBindingsContext();\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n >([\"useLogout\"], logoutFromContext, {\n onSuccess: async (data, variables) => {\n const { success, error, redirectTo } = data;\n const { redirectPath } = variables ?? {};\n\n const redirect = redirectPath ?? redirectTo;\n\n if (success) {\n close?.(\"useLogout-error\");\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n await invalidateAuthStore();\n\n if (redirect !== false) {\n if (routerType === \"legacy\") {\n push(redirect ?? \"/login\");\n } else {\n if (redirect) {\n go({ to: redirect });\n }\n }\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible === true ? {} : mutationOptions),\n });\n\n const v3LegacyAuthProviderCompatibleMutation = useMutation<\n TLogoutData,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n >(\n [\"useLogout\", \"v3LegacyAuthProviderCompatible\"],\n legacyLogoutFromContext,\n {\n onSuccess: async (data, variables) => {\n const redirectPath = variables?.redirectPath ?? data;\n\n await invalidateAuthStore();\n\n if (redirectPath === false) {\n return;\n }\n\n if (redirectPath) {\n if (routerType === \"legacy\") {\n push(redirectPath);\n } else {\n go({ to: redirectPath });\n }\n return;\n }\n\n if (routerType === \"legacy\") {\n push(\"/login\");\n } else {\n go({ to: \"/login\" });\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible ? mutationOptions : {}),\n },\n );\n\n return v3LegacyAuthProviderCompatible\n ? v3LegacyAuthProviderCompatibleMutation\n : mutation;\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n key: \"useLogout-error\",\n type: \"error\",\n message: error?.name || \"Logout Error\",\n description: error?.message || \"Something went wrong during logout\",\n };\n};\n","import { useQueryClient } from \"@tanstack/react-query\";\n\nexport const useInvalidateAuthStore = () => {\n const queryClient = useQueryClient();\n\n const invalidate = async () => {\n await Promise.all([\n queryClient.invalidateQueries([\"useAuthenticated\"]),\n queryClient.invalidateQueries([\"getUserIdentity\"]),\n queryClient.invalidateQueries([\"usePermissions\"]),\n ]);\n };\n\n return invalidate;\n};\n","import React from \"react\";\nimport {\n useMutation,\n UseMutationOptions,\n UseMutationResult,\n} from \"@tanstack/react-query\";\nimport qs from \"qs\";\n\nimport {\n useNavigation,\n useRouterContext,\n useNotification,\n useRouterType,\n useParsed,\n useGo,\n} from \"@hooks\";\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\n\nimport {\n RefineError,\n OpenNotificationParams,\n TLoginData,\n} from \"../../../interfaces\";\nimport { AuthActionResponse } from \"src/interfaces/bindings/auth\";\nimport { useInvalidateAuthStore } from \"../useInvalidateAuthStore\";\n\nexport type UseLoginLegacyProps<TVariables> = {\n v3LegacyAuthProviderCompatible: true;\n mutationOptions?: Omit<\n UseMutationOptions<\n TLoginData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\" | \"onError\" | \"onSuccess\"\n >;\n};\n\nexport type UseLoginProps<TVariables> = {\n v3LegacyAuthProviderCompatible?: false;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseLoginCombinedProps<TVariables> = {\n v3LegacyAuthProviderCompatible: boolean;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse | TLoginData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseLoginLegacyReturnType<TVariables> = UseMutationResult<\n TLoginData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseLoginReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseLoginCombinedReturnType<TVariables> = UseMutationResult<\n AuthActionResponse | TLoginData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport function useLogin<TVariables = {}>(\n props: UseLoginLegacyProps<TVariables>,\n): UseLoginLegacyReturnType<TVariables>;\n\nexport function useLogin<TVariables = {}>(\n props?: UseLoginProps<TVariables>,\n): UseLoginReturnType<TVariables>;\n\nexport function useLogin<TVariables = {}>(\n props?: UseLoginCombinedProps<TVariables>,\n): UseLoginCombinedReturnType<TVariables>;\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 function useLogin<TVariables = {}>({\n v3LegacyAuthProviderCompatible,\n mutationOptions,\n}: UseLoginProps<TVariables> | UseLoginLegacyProps<TVariables> = {}):\n | UseLoginLegacyReturnType<TVariables>\n | UseLoginReturnType<TVariables> {\n const invalidateAuthStore = useInvalidateAuthStore();\n const routerType = useRouterType();\n\n const go = useGo();\n const { replace } = useNavigation();\n\n const parsed = useParsed();\n\n const { useLocation } = useRouterContext();\n const { search } = useLocation();\n\n const { close, open } = useNotification();\n const { login: legacyLoginFromContext } = useLegacyAuthContext();\n const { login: loginFromContext } = useAuthBindingsContext();\n\n const to = React.useMemo(() => {\n if (routerType === \"legacy\") {\n const legacySearch = qs.parse(search, {\n ignoreQueryPrefix: true,\n });\n return legacySearch.to;\n } else {\n return parsed.params?.to;\n }\n }, [routerType, parsed.params, search]);\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >([\"useLogin\"], loginFromContext, {\n onSuccess: async ({ success, redirectTo, error }) => {\n if (success) {\n close?.(\"login-error\");\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n await invalidateAuthStore();\n\n if (to && success) {\n if (routerType === \"legacy\") {\n replace(to as string);\n } else {\n go({ to: to as string, type: \"replace\" });\n }\n } else if (redirectTo) {\n if (routerType === \"legacy\") {\n replace(redirectTo);\n } else {\n go({ to: redirectTo, type: \"replace\" });\n }\n } else {\n if (routerType === \"legacy\") {\n replace(\"/\");\n }\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible === true ? {} : mutationOptions),\n });\n\n const v3LegacyAuthProviderCompatibleMutation = useMutation<\n TLoginData,\n Error | RefineError,\n TVariables,\n unknown\n >([\"useLogin\", \"v3LegacyAuthProviderCompatible\"], legacyLoginFromContext, {\n onSuccess: async (redirectPathFromAuth) => {\n await invalidateAuthStore();\n\n if (to) {\n replace(to as string);\n }\n\n if (redirectPathFromAuth !== false && !to) {\n if (typeof redirectPathFromAuth === \"string\") {\n if (routerType === \"legacy\") {\n replace(redirectPathFromAuth);\n } else {\n go({ to: redirectPathFromAuth, type: \"replace\" });\n }\n } else {\n if (routerType === \"legacy\") {\n replace(\"/\");\n } else {\n go({ to: \"/\", type: \"replace\" });\n }\n }\n }\n\n close?.(\"login-error\");\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible ? mutationOptions : {}),\n });\n\n return v3LegacyAuthProviderCompatible\n ? v3LegacyAuthProviderCompatibleMutation\n : mutation;\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Login Error\",\n description: error?.message || \"Invalid credentials\",\n key: \"login-error\",\n type: \"error\",\n };\n};\n","import {\n useMutation,\n UseMutationOptions,\n UseMutationResult,\n} from \"@tanstack/react-query\";\n\nimport { useNavigation, useRouterType, useGo, useNotification } from \"@hooks\";\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\n\nimport {\n AuthActionResponse,\n RefineError,\n OpenNotificationParams,\n TLoginData,\n TRegisterData,\n} from \"../../../interfaces\";\nimport { useInvalidateAuthStore } from \"../useInvalidateAuthStore\";\n\nexport type UseRegisterLegacyProps<TVariables> = {\n v3LegacyAuthProviderCompatible: true;\n mutationOptions?: Omit<\n UseMutationOptions<\n TRegisterData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\" | \"onError\" | \"onSuccess\"\n >;\n};\n\nexport type UseRegisterProps<TVariables> = {\n v3LegacyAuthProviderCompatible?: false;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseRegisterCombinedProps<TVariables> = {\n v3LegacyAuthProviderCompatible: boolean;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse | TRegisterData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseRegisterLegacyReturnType<TVariables> = UseMutationResult<\n TRegisterData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseRegisterReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseRegisterCombinedReturnType<TVariables> = UseMutationResult<\n AuthActionResponse | TLoginData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport function useRegister<TVariables = {}>(\n props: UseRegisterLegacyProps<TVariables>,\n): UseRegisterLegacyReturnType<TVariables>;\n\nexport function useRegister<TVariables = {}>(\n props?: UseRegisterProps<TVariables>,\n): UseRegisterReturnType<TVariables>;\n\nexport function useRegister<TVariables = {}>(\n props?: UseRegisterCombinedProps<TVariables>,\n): UseRegisterCombinedReturnType<TVariables>;\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 function useRegister<TVariables = {}>({\n v3LegacyAuthProviderCompatible,\n mutationOptions,\n}: UseRegisterProps<TVariables> | UseRegisterLegacyProps<TVariables> = {}):\n | UseRegisterReturnType<TVariables>\n | UseRegisterLegacyReturnType<TVariables> {\n const invalidateAuthStore = useInvalidateAuthStore();\n const routerType = useRouterType();\n const go = useGo();\n const { replace } = useNavigation();\n const { register: legacyRegisterFromContext } = useLegacyAuthContext();\n const { register: registerFromContext } = useAuthBindingsContext();\n const { close, open } = useNotification();\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >([\"useRegister\"], registerFromContext, {\n onSuccess: async ({ success, redirectTo, error }) => {\n if (success) {\n close?.(\"register-error\");\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n await invalidateAuthStore();\n\n if (redirectTo) {\n if (routerType === \"legacy\") {\n replace(redirectTo);\n } else {\n go({ to: redirectTo, type: \"replace\" });\n }\n } else {\n if (routerType === \"legacy\") {\n replace(\"/\");\n }\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible === true ? {} : mutationOptions),\n });\n\n const v3LegacyAuthProviderCompatibleMutation = useMutation<\n TRegisterData,\n Error | RefineError,\n TVariables,\n unknown\n >(\n [\"useRegister\", \"v3LegacyAuthProviderCompatible\"],\n legacyRegisterFromContext,\n {\n onSuccess: async (redirectPathFromAuth) => {\n await invalidateAuthStore();\n\n if (redirectPathFromAuth !== false) {\n if (redirectPathFromAuth) {\n if (routerType === \"legacy\") {\n replace(redirectPathFromAuth);\n } else {\n go({ to: redirectPathFromAuth, type: \"replace\" });\n }\n } else {\n if (routerType === \"legacy\") {\n replace(\"/\");\n } else {\n go({ to: \"/\", type: \"replace\" });\n }\n }\n close?.(\"register-error\");\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible ? mutationOptions : {}),\n },\n );\n\n return v3LegacyAuthProviderCompatible\n ? v3LegacyAuthProviderCompatibleMutation\n : mutation;\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Register Error\",\n description: error?.message || \"Error while registering\",\n key: \"register-error\",\n type: \"error\",\n };\n};\n","import {\n useMutation,\n UseMutationOptions,\n UseMutationResult,\n} from \"@tanstack/react-query\";\n\nimport { useGo, useNavigation, useNotification, useRouterType } from \"@hooks\";\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\n\nimport {\n AuthActionResponse,\n RefineError,\n OpenNotificationParams,\n TForgotPasswordData,\n} from \"../../../interfaces\";\n\nexport type UseForgotPasswordLegacyProps<TVariables> = {\n v3LegacyAuthProviderCompatible: true;\n mutationOptions?: Omit<\n UseMutationOptions<\n TForgotPasswordData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\" | \"onError\" | \"onSuccess\"\n >;\n};\n\nexport type UseForgotPasswordProps<TVariables> = {\n v3LegacyAuthProviderCompatible?: false;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseForgotPasswordCombinedProps<TVariables> = {\n v3LegacyAuthProviderCompatible: boolean;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse | TForgotPasswordData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseForgotPasswordLegacyReturnType<TVariables> = UseMutationResult<\n TForgotPasswordData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseForgotPasswordReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseForgotPasswordCombinedReturnType<TVariables> = UseMutationResult<\n AuthActionResponse | TForgotPasswordData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport function useForgotPassword<TVariables = {}>(\n props: UseForgotPasswordLegacyProps<TVariables>,\n): UseForgotPasswordLegacyReturnType<TVariables>;\n\nexport function useForgotPassword<TVariables = {}>(\n props?: UseForgotPasswordProps<TVariables>,\n): UseForgotPasswordReturnType<TVariables>;\n\nexport function useForgotPassword<TVariables = {}>(\n props?: UseForgotPasswordCombinedProps<TVariables>,\n): UseForgotPasswordCombinedReturnType<TVariables>;\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 function useForgotPassword<TVariables = {}>({\n v3LegacyAuthProviderCompatible,\n mutationOptions,\n}:\n | UseForgotPasswordProps<TVariables>\n | UseForgotPasswordLegacyProps<TVariables> = {}):\n | UseForgotPasswordReturnType<TVariables>\n | UseForgotPasswordLegacyReturnType<TVariables> {\n const routerType = useRouterType();\n const go = useGo();\n const { replace } = useNavigation();\n const {\n forgotPassword: v3LegacyAuthProviderCompatibleForgotPasswordFromContext,\n } = useLegacyAuthContext();\n const { forgotPassword: forgotPasswordFromContext } =\n useAuthBindingsContext();\n const { close, open } = useNotification();\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >([\"useForgotPassword\"], forgotPasswordFromContext, {\n onSuccess: ({ success, redirectTo, error }) => {\n if (success) {\n close?.(\"forgot-password-error\");\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n if (redirectTo) {\n if (routerType === \"legacy\") {\n replace(redirectTo);\n } else {\n go({ to: redirectTo, type: \"replace\" });\n }\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible === true ? {} : mutationOptions),\n });\n\n const v3LegacyAuthProviderCompatibleMutation = useMutation<\n TForgotPasswordData,\n Error | RefineError,\n TVariables,\n unknown\n >(\n [\"useForgotPassword\", \"v3LegacyAuthProviderCompatible\"],\n v3LegacyAuthProviderCompatibleForgotPasswordFromContext,\n {\n onSuccess: (redirectPathFromAuth) => {\n if (redirectPathFromAuth !== false) {\n if (redirectPathFromAuth) {\n if (routerType === \"legacy\") {\n replace(redirectPathFromAuth);\n } else {\n go({ to: redirectPathFromAuth, type: \"replace\" });\n }\n }\n }\n close?.(\"forgot-password-error\");\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible ? mutationOptions : {}),\n },\n );\n\n return v3LegacyAuthProviderCompatible\n ? v3LegacyAuthProviderCompatibleMutation\n : mutation;\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Forgot Password Error\",\n description: error?.message || \"Error while resetting password\",\n key: \"forgot-password-error\",\n type: \"error\",\n };\n};\n","import React from \"react\";\nimport {\n useMutation,\n UseMutationOptions,\n UseMutationResult,\n} from \"@tanstack/react-query\";\nimport qs from \"qs\";\n\nimport {\n useNavigation,\n useRouterType,\n useGo,\n useParsed,\n useNotification,\n useRouterContext,\n} from \"@hooks\";\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\nimport {\n AuthActionResponse,\n RefineError,\n OpenNotificationParams,\n TUpdatePasswordData,\n UpdatePasswordFormTypes,\n} from \"../../../interfaces\";\n\nexport type UseUpdatePasswordLegacyProps<\n TVariables extends UpdatePasswordFormTypes,\n> = {\n v3LegacyAuthProviderCompatible: true;\n mutationOptions?: Omit<\n UseMutationOptions<\n TUpdatePasswordData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\" | \"onError\" | \"onSuccess\"\n >;\n};\n\nexport type UseUpdatePasswordProps<TVariables extends UpdatePasswordFormTypes> =\n {\n v3LegacyAuthProviderCompatible?: false;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n };\n\nexport type UseUpdatePasswordCombinedProps<\n TVariables extends UpdatePasswordFormTypes,\n> = {\n v3LegacyAuthProviderCompatible: boolean;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse | TUpdatePasswordData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseUpdatePasswordLegacyReturnType<\n TVariables extends UpdatePasswordFormTypes,\n> = UseMutationResult<\n TUpdatePasswordData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseUpdatePasswordReturnType<\n TVariables extends UpdatePasswordFormTypes,\n> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseUpdatePasswordCombinedReturnType<\n TVariables extends UpdatePasswordFormTypes,\n> = UseMutationResult<\n AuthActionResponse | TUpdatePasswordData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport function useUpdatePassword<TVariables extends UpdatePasswordFormTypes>(\n props: UseUpdatePasswordLegacyProps<TVariables>,\n): UseUpdatePasswordLegacyReturnType<TVariables>;\n\nexport function useUpdatePassword<TVariables extends UpdatePasswordFormTypes>(\n props?: UseUpdatePasswordProps<TVariables>,\n): UseUpdatePasswordReturnType<TVariables>;\n\nexport function useUpdatePassword<TVariables extends UpdatePasswordFormTypes>(\n props?: UseUpdatePasswordCombinedProps<TVariables>,\n): UseUpdatePasswordCombinedReturnType<TVariables>;\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 function useUpdatePassword<\n TVariables extends UpdatePasswordFormTypes = {},\n>({\n v3LegacyAuthProviderCompatible,\n mutationOptions,\n}:\n | UseUpdatePasswordProps<TVariables>\n | UseUpdatePasswordLegacyProps<TVariables> = {}):\n | UseUpdatePasswordReturnType<TVariables>\n | UseUpdatePasswordLegacyReturnType<TVariables> {\n const routerType = useRouterType();\n\n const go = useGo();\n const { replace } = useNavigation();\n const { updatePassword: legacyUpdatePasswordFromContext } =\n useLegacyAuthContext();\n const { updatePassword: updatePasswordFromContext } =\n useAuthBindingsContext();\n const { close, open } = useNotification();\n\n const parsed = useParsed();\n const { useLocation } = useRouterContext();\n const { search } = useLocation();\n\n const params = React.useMemo(() => {\n if (routerType === \"legacy\") {\n const queryStrings = qs.parse(search, {\n ignoreQueryPrefix: true,\n });\n return queryStrings ?? {};\n } else {\n return parsed.params ?? {};\n }\n }, [search, parsed, routerType]);\n\n const mutation = useMutation<\n AuthActionResponse,\n Error,\n TVariables,\n unknown\n >(\n [\"useUpdatePassword\"],\n async (variables) => {\n return updatePasswordFromContext?.({\n ...params,\n ...variables,\n }) as Promise<AuthActionResponse>;\n },\n {\n onSuccess: ({ success, redirectTo, error }) => {\n if (success) {\n close?.(\"update-password-error\");\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n if (redirectTo) {\n if (routerType === \"legacy\") {\n replace(redirectTo);\n } else {\n go({ to: redirectTo, type: \"replace\" });\n }\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible === true ? {} : mutationOptions),\n },\n );\n\n const v3LegacyAuthProviderCompatibleMutation = useMutation<\n TUpdatePasswordData,\n Error | RefineError,\n TVariables,\n unknown\n >(\n [\"useUpdatePassword\", \"v3LegacyAuthProviderCompatible\"],\n async (variables) => {\n return legacyUpdatePasswordFromContext?.({\n ...params,\n ...variables,\n });\n },\n {\n onSuccess: (redirectPathFromAuth) => {\n if (redirectPathFromAuth !== false) {\n if (redirectPathFromAuth) {\n if (routerType === \"legacy\") {\n replace(redirectPathFromAuth);\n } else {\n go({ to: redirectPathFromAuth, type: \"replace\" });\n }\n }\n }\n close?.(\"update-password-error\");\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible ? mutationOptions : {}),\n },\n );\n\n return v3LegacyAuthProviderCompatible\n ? v3LegacyAuthProviderCompatibleMutation\n : mutation;\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Update Password Error\",\n description: error?.message || \"Error while updating password\",\n key: \"update-password-error\",\n type: \"error\",\n };\n};\n","import { useQuery, UseQueryResult } from \"@tanstack/react-query\";\n\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\nimport { CheckResponse } from \"../../../interfaces\";\n\nexport type UseIsAuthenticatedLegacyProps = {\n v3LegacyAuthProviderCompatible: true;\n params?: any;\n};\n\nexport type UseIsAuthenticatedProps = {\n v3LegacyAuthProviderCompatible?: false;\n params?: any;\n};\n\nexport type UseIsAuthenticatedCombinedProps = {\n v3LegacyAuthProviderCompatible: boolean;\n params?: any;\n};\n\nexport type UseIsAuthenticatedLegacyReturnType = UseQueryResult<any, any>;\n\nexport type UseIsAuthenticatedReturnType = UseQueryResult<CheckResponse, any>;\n\nexport type UseIsAuthenticatedCombinedReturnType = UseQueryResult<\n CheckResponse | any,\n any\n>;\n\nexport function useIsAuthenticated(\n props: UseIsAuthenticatedLegacyProps,\n): UseIsAuthenticatedLegacyReturnType;\n\nexport function useIsAuthenticated(\n props?: UseIsAuthenticatedProps,\n): UseIsAuthenticatedReturnType;\n\nexport function useIsAuthenticated(\n props?: UseIsAuthenticatedCombinedProps,\n): UseIsAuthenticatedCombinedReturnType;\n\n/**\n * `useIsAuthenticated` 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 */\nexport function useIsAuthenticated({\n v3LegacyAuthProviderCompatible = false,\n params,\n}: UseIsAuthenticatedProps | UseIsAuthenticatedLegacyProps = {}):\n | UseIsAuthenticatedReturnType\n | UseIsAuthenticatedLegacyReturnType {\n const { checkAuth } = useLegacyAuthContext();\n const { check } = useAuthBindingsContext();\n\n const queryResponse = useQuery(\n [\"useAuthenticated\", params],\n async () => (await check?.(params)) ?? {},\n {\n retry: false,\n enabled: !v3LegacyAuthProviderCompatible,\n },\n );\n\n const legacyQueryResponse = useQuery(\n [\"useAuthenticated\", params, \"v3LegacyAuthProviderCompatible\"],\n async () => (await checkAuth?.(params)) ?? {},\n {\n retry: false,\n enabled: v3LegacyAuthProviderCompatible,\n },\n );\n\n return v3LegacyAuthProviderCompatible ? legacyQueryResponse : queryResponse;\n}\n\n/**\n * @deprecated `useAuthenticated` is deprecated with refine@4, use `useIsAuthenticated` instead, however, we still support `useAuthenticated` for backward compatibility.\n */\nexport const useAuthenticated = useIsAuthenticated;\n","import { useMutation, UseMutationResult } from \"@tanstack/react-query\";\n\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\nimport { OnErrorResponse } from \"../../../interfaces\";\nimport { useGo, useLogout, useNavigation, useRouterType } from \"@hooks\";\n\nexport type UseOnErrorLegacyProps = {\n v3LegacyAuthProviderCompatible: true;\n};\n\nexport type UseOnErrorProps = {\n v3LegacyAuthProviderCompatible?: false;\n};\n\nexport type UseOnErrorCombinedProps = {\n v3LegacyAuthProviderCompatible: boolean;\n};\n\nexport type UseOnErrorLegacyReturnType = UseMutationResult<\n void,\n string | undefined,\n any,\n unknown\n>;\n\nexport type UseOnErrorReturnType = UseMutationResult<\n OnErrorResponse,\n unknown,\n unknown,\n unknown\n>;\nexport type UseOnErrorCombinedReturnType = UseMutationResult<\n OnErrorResponse | void,\n unknown,\n unknown,\n unknown\n>;\n\nexport function useOnError(\n props: UseOnErrorLegacyProps,\n): UseOnErrorLegacyReturnType;\n\nexport function useOnError(props?: UseOnErrorProps): UseOnErrorReturnType;\n\nexport function useOnError(\n props?: UseOnErrorCombinedProps,\n): UseOnErrorCombinedReturnType;\n\n/**\n * `useOnError` calls the `checkError` method from the {@link https://refine.dev/docs/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/core/hooks/auth/useCheckError} for more details.\n *\n */\nexport function useOnError({\n v3LegacyAuthProviderCompatible = false,\n}: UseOnErrorProps | UseOnErrorLegacyProps = {}):\n | UseOnErrorReturnType\n | UseOnErrorLegacyReturnType {\n const routerType = useRouterType();\n const go = useGo();\n const { replace } = useNavigation();\n\n const { checkError: legacyCheckErrorFromContext } = useLegacyAuthContext();\n const { onError: onErrorFromContext } = useAuthBindingsContext();\n\n const { mutate: legacyLogout } = useLogout({\n v3LegacyAuthProviderCompatible: Boolean(v3LegacyAuthProviderCompatible),\n });\n const { mutate: logout } = useLogout({\n v3LegacyAuthProviderCompatible: Boolean(v3LegacyAuthProviderCompatible),\n });\n\n const mutation = useMutation([\"useCheckError\"], onErrorFromContext, {\n onSuccess: ({ logout: shouldLogout, redirectTo }) => {\n if (shouldLogout) {\n logout({ redirectPath: redirectTo });\n return;\n }\n\n if (redirectTo) {\n if (routerType === \"legacy\") {\n replace(redirectTo);\n } else {\n go({ to: redirectTo, type: \"replace\" });\n }\n return;\n }\n },\n });\n\n const v3LegacyAuthProviderCompatibleMutation = useMutation(\n [\"useCheckError\", \"v3LegacyAuthProviderCompatible\"],\n legacyCheckErrorFromContext,\n {\n onError: (redirectPath?: string) => {\n legacyLogout({ redirectPath });\n },\n },\n );\n\n return v3LegacyAuthProviderCompatible\n ? v3LegacyAuthProviderCompatibleMutation\n : mutation;\n}\n\n/**\n * @deprecated `useCheckError` is deprecated with refine@4, use `useOnError` instead, however, we still support `useCheckError` for backward compatibility.\n */\nexport const useCheckError = useOnError;\n","import { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\n\n/**\n * A hook that the UI uses\n * @internal\n */\nexport const useIsExistAuthentication = (): boolean => {\n const { isProvided: legacyIsProvided } = useLegacyAuthContext();\n const { isProvided } = useAuthBindingsContext();\n\n return Boolean(isProvided || legacyIsProvided);\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 MetaQuery,\n SuccessErrorNotification,\n LiveModeProps,\n Prettify,\n} from \"../../interfaces\";\nimport {\n useResource,\n useHandleNotification,\n useResourceSubscription,\n useTranslate,\n useDataProvider,\n useOnError,\n} from \"@hooks\";\nimport {\n queryKeys,\n pickDataProvider,\n pickNotDeprecated,\n useActiveAuthProvider,\n handlePaginationParams,\n} from \"@definitions/helpers\";\n\nexport interface UseListConfig {\n pagination?: Pagination;\n hasPagination?: boolean;\n sort?: CrudSorting;\n filters?: CrudFilters;\n}\n\nexport type BaseListProps = {\n /**\n * Configuration for pagination, sorting and filtering\n * @type [`UseListConfig`](/docs/api-reference/core/hooks/data/useList/#config-parameters)\n * @deprecated `config` property is deprecated. Use `pagination`, `hasPagination`, `sorters` and `filters` instead.\n */\n config?: UseListConfig;\n /**\n * Pagination properties\n */\n pagination?: Pagination;\n /**\n * Whether to use server-side pagination or not\n * @deprecated `hasPagination` property is deprecated. Use `pagination.mode` instead.\n */\n hasPagination?: boolean;\n /**\n * Sorter parameters\n */\n sorters?: CrudSorting;\n /**\n * Filter parameters\n */\n filters?: CrudFilters;\n /**\n * Meta data query for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Meta data query for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use\n */\n dataProviderName?: string;\n};\n\nexport type UseListProps<TData, TError> = {\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n\n /**\n * Tanstack Query's [useQuery](https://tanstack.com/query/v4/docs/reference/useQuery) options\n */\n queryOptions?: UseQueryOptions<GetListResponse<TData>, TError>;\n} & BaseListProps &\n SuccessErrorNotification<\n GetListResponse<TData>,\n TError,\n Prettify<BaseListProps>\n > &\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 filters,\n hasPagination,\n pagination,\n sorters,\n queryOptions,\n successNotification,\n errorNotification,\n meta,\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 translate = useTranslate();\n const authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n const handleNotification = useHandleNotification();\n\n const pickedDataProvider = pickDataProvider(\n resource,\n dataProviderName,\n resources,\n );\n const preferredMeta = pickNotDeprecated(meta, metaData);\n const prefferedFilters = pickNotDeprecated(filters, config?.filters);\n const prefferedSorters = pickNotDeprecated(sorters, config?.sort);\n const prefferedHasPagination = pickNotDeprecated(\n hasPagination,\n config?.hasPagination,\n );\n const prefferedPagination = handlePaginationParams({\n pagination,\n configPagination: config?.pagination,\n hasPagination: prefferedHasPagination,\n });\n const isServerPagination = prefferedPagination.mode === \"server\";\n const notificationValues = {\n meta: preferredMeta,\n metaData: preferredMeta,\n filters: prefferedFilters,\n hasPagination: isServerPagination,\n pagination: prefferedPagination,\n sorters: prefferedSorters,\n config: {\n ...config,\n sort: prefferedSorters,\n },\n };\n\n const isEnabled =\n queryOptions?.enabled === undefined || queryOptions?.enabled === true;\n\n const queryKey = queryKeys(\n resource,\n pickedDataProvider,\n preferredMeta,\n preferredMeta,\n );\n\n const { getList } = dataProvider(pickedDataProvider);\n\n useResourceSubscription({\n resource,\n types: [\"*\"],\n params: {\n meta: preferredMeta,\n metaData: preferredMeta,\n pagination: prefferedPagination,\n hasPagination: isServerPagination,\n sort: prefferedSorters,\n sorters: prefferedSorters,\n filters: prefferedFilters,\n subscriptionType: \"useList\",\n ...liveParams,\n },\n channel: `resources/${resource}`,\n enabled: isEnabled,\n liveMode,\n onLiveEvent,\n });\n\n const queryResponse = useQuery<GetListResponse<TData>, TError>(\n queryKey.list({\n filters: prefferedFilters,\n hasPagination: isServerPagination,\n ...(isServerPagination && {\n pagination: prefferedPagination,\n }),\n ...(sorters && {\n sorters,\n }),\n ...(config?.sort && {\n sort: config?.sort,\n }),\n }),\n ({ queryKey, pageParam, signal }) => {\n return getList<TData>({\n resource: resource!,\n pagination: prefferedPagination,\n hasPagination: isServerPagination,\n filters: prefferedFilters,\n sort: prefferedSorters,\n sorters: prefferedSorters,\n meta: {\n ...(preferredMeta || {}),\n queryContext: {\n queryKey,\n pageParam,\n signal,\n },\n },\n metaData: {\n ...(preferredMeta || {}),\n queryContext: {\n queryKey,\n pageParam,\n signal,\n },\n },\n });\n },\n {\n ...queryOptions,\n enabled:\n typeof queryOptions?.enabled !== \"undefined\"\n ? queryOptions?.enabled\n : !!resource,\n select: (rawData) => {\n let data = rawData;\n\n const { current, mode, pageSize } = prefferedPagination;\n\n if (mode === \"client\") {\n data = {\n ...data,\n data: data.data.slice(\n (current - 1) * pageSize,\n current * pageSize,\n ),\n total: data.total,\n };\n }\n\n if (queryOptions?.select) {\n return queryOptions?.select?.(data);\n }\n\n return data;\n },\n onSuccess: (data) => {\n queryOptions?.onSuccess?.(data);\n\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(\n data,\n notificationValues,\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, notificationValues, 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\";\nimport { pickNotDeprecated } from \"@definitions/helpers\";\n\nexport const parseTableParams = (url: string) => {\n const { current, pageSize, sorter, sorters, 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: (pickNotDeprecated(sorters, 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\n/**\n * @internal This function is used to stringify table params from the useTable hook.\n */\nexport const stringifyTableParams = (params: {\n pagination?: { current?: number; pageSize?: number };\n sorters: 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, sorters, filters, ...rest } = params;\n\n const queryString = qs.stringify(\n {\n ...rest,\n ...(pagination ? pagination : {}),\n sorters: pickNotDeprecated(sorters, sorter),\n filters,\n },\n options,\n );\n\n return queryString;\n};\n\nexport const compareFilters = (\n left: CrudFilter,\n right: CrudFilter,\n): boolean => {\n if (\n left.operator !== \"and\" &&\n left.operator !== \"or\" &&\n right.operator !== \"and\" &&\n right.operator !== \"or\"\n ) {\n return (\n (\"field\" in left ? left.field : undefined) ==\n (\"field\" in right ? right.field : undefined) &&\n left.operator == right.operator\n );\n }\n\n return (\n (\"key\" in left ? left.key : undefined) ==\n (\"key\" in right ? right.key : undefined) &&\n left.operator == right.operator\n );\n};\n\nexport const compareSorters = (left: CrudSort, right: CrudSort): boolean =>\n left.field == right.field;\n// Keep only one CrudFilter per type according to compareFilters\n// Items in the array that is passed first to unionWith have higher priority\n// CrudFilter items with undefined values are necessary to signify no filter\n// After union, don't keep CrudFilter items with undefined value in the result\n// Items in the arrays with higher priority are put at the end.\nexport const unionFilters = (\n permanentFilter: 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","/*\n * Returns first value that is not undefined.\n * @internal This is an internal helper function. Please do not use externally.\n */\nexport const pickNotDeprecated = <T extends unknown[]>(\n ...args: T\n): T[never] => {\n return args.find((arg) => typeof arg !== \"undefined\");\n};\n","import { IQueryKeys } from \"src/interfaces\";\nimport { QueryKey } from \"@tanstack/react-query\";\n\nimport { MetaQuery } from \"src/interfaces\";\nimport { pickNotDeprecated } from \"../pickNotDeprecated\";\n\nexport const queryKeys = (\n resource?: string,\n dataProviderName?: string,\n meta?: MetaQuery,\n /**\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery | 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 {\n ...config,\n ...(pickNotDeprecated(meta, metaData) || {}),\n } as QueryKey,\n ],\n many: (ids) =>\n [\n ...keys.resourceAll,\n \"getMany\",\n (ids && ids.map(String)) as QueryKey,\n { ...(pickNotDeprecated(meta, metaData) || {}) } as QueryKey,\n ].filter((item) => item !== undefined),\n detail: (id) => [\n ...keys.resourceAll,\n \"detail\",\n id?.toString(),\n { ...(pickNotDeprecated(meta, 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","/**\n * Check if a segment is a parameter. (e.g. :id)\n */\nexport const isParameter = (segment: string) => {\n return segment.startsWith(\":\");\n};\n","/**\n * Split a path to segments.\n */\nexport const splitToSegments = (path: string) => {\n const segments = path.split(\"/\").filter((segment) => segment !== \"\");\n return segments;\n};\n","import { splitToSegments } from \"./split-to-segments\";\n\n/**\n * Checks if the both routes have the same number of segments.\n */\nexport const isSegmentCountsSame = (route: string, resourceRoute: string) => {\n const routeSegments = splitToSegments(route);\n const resourceRouteSegments = splitToSegments(resourceRoute);\n\n return routeSegments.length === resourceRouteSegments.length;\n};\n","/**\n * Remove leading and trailing slashes from a route.\n */\nexport const removeLeadingTrailingSlashes = (route: string) => {\n return route.replace(/^\\/|\\/$/g, \"\");\n};\n","import { isParameter } from \"./is-parameter\";\nimport { isSegmentCountsSame } from \"./is-segment-counts-same\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\nimport { splitToSegments } from \"./split-to-segments\";\n\n/**\n * This function if the route and resourceRoute match by segments.\n * - First, trailing and leading slashes are removed\n * - Then, the route and resourceRoute are split to segments and checked if they have the same number of segments\n * - Then, each segment is checked if it is a parameter or if it matches the resourceRoute segment\n * - If all segments match, the function returns true, otherwise false\n */\nexport const checkBySegments = (route: string, resourceRoute: string) => {\n const stdRoute = removeLeadingTrailingSlashes(route);\n const stdResourceRoute = removeLeadingTrailingSlashes(resourceRoute);\n // we need to check if the route and resourceRoute have the same number of segments\n // if not, we can't match them\n if (!isSegmentCountsSame(stdRoute, stdResourceRoute)) {\n return false;\n }\n\n const routeSegments = splitToSegments(stdRoute);\n const resourceRouteSegments = splitToSegments(stdResourceRoute);\n\n return resourceRouteSegments.every((segment, index) => {\n return isParameter(segment) || segment === routeSegments[index];\n });\n};\n","import { Action } from \"src/interfaces\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\n\n/**\n * This helper function returns the default path for a given action and resource.\n * It also applies the parentPrefix if provided.\n * This is used by the legacy router and the new router if the resource doesn't provide a custom path.\n */\nexport const getDefaultActionPath = (\n resourceName: string,\n action: Action,\n parentPrefix?: string,\n): string => {\n const cleanParentPrefix = removeLeadingTrailingSlashes(parentPrefix || \"\");\n\n let path = `${cleanParentPrefix}${\n cleanParentPrefix ? \"/\" : \"\"\n }${resourceName}`;\n\n if (action === \"list\") {\n path = `${path}`;\n } else if (action === \"create\") {\n path = `${path}/create`;\n } else if (action === \"edit\") {\n path = `${path}/edit/:id`;\n } else if (action === \"show\") {\n path = `${path}/show/:id`;\n } else if (action === \"clone\") {\n path = `${path}/clone/:id`;\n }\n\n return `/${path.replace(/^\\//, \"\")}`;\n};\n","import { IResourceItem } from \"src/interfaces\";\nimport { pickNotDeprecated } from \"../pickNotDeprecated\";\n\n/**\n * Returns the parent resource of the given resource.\n * Works both with the deprecated `parentName` and the new `parent` property.\n */\nexport const getParentResource = (\n resource: IResourceItem,\n resources: IResourceItem[],\n): IResourceItem | undefined => {\n const parentName = pickNotDeprecated(\n resource.meta?.parent,\n resource.options?.parent,\n resource.parentName,\n );\n\n if (!parentName) {\n return undefined;\n }\n\n const parentResource = resources.find(\n (resource) => (resource.identifier ?? resource.name) === parentName,\n );\n\n /**\n * If the parent resource is not found, we return a resource object with the name of the parent resource.\n * Because we still want to have nesting and prefixing for the resource even if the parent is not explicitly defined.\n */\n return parentResource ?? { name: parentName };\n};\n","import { ResourceProps } from \"src/interfaces/bindings/resource\";\nimport { getParentResource } from \"./get-parent-resource\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\n\n/**\n * Returns the parent prefix for a resource\n * - If `legacy` is provided, the computation is based on the `route` option of the resource\n */\nexport const getParentPrefixForResource = (\n resource: ResourceProps,\n resources: ResourceProps[],\n /**\n * Uses legacy route if true (`options.route`)\n */\n legacy?: boolean,\n): string | undefined => {\n const parents: ResourceProps[] = [];\n\n let parent = getParentResource(resource, resources);\n\n while (parent) {\n parents.push(parent);\n parent = getParentResource(parent, resources);\n }\n\n if (parents.length === 0) {\n return undefined;\n }\n\n return `/${parents\n .reverse()\n .map((parent) => {\n const v = legacy\n ? parent.options?.route ?? parent.name\n : parent.name;\n return removeLeadingTrailingSlashes(v);\n })\n .join(\"/\")}`;\n};\n","import { Action, IResourceItem } from \"src/interfaces\";\nimport { getDefaultActionPath } from \"./get-default-action-path\";\nimport { getParentPrefixForResource } from \"./get-parent-prefix-for-resource\";\n\nexport type ResourceActionRoute = {\n action: Action;\n resource: IResourceItem;\n route: string;\n};\n\n/**\n * This function returns all the routes for available actions for a resource.\n * - If the action is a function, it means we're fallbacking to default path for the action\n * - If the action is a string, it means we don't have the component, but we have the route\n * - If the action is an object, it means we have the component and the route\n * - It will return an array of objects with the action, the resource and the route\n */\nexport const getActionRoutesFromResource = (\n resource: IResourceItem,\n resources: IResourceItem[],\n /**\n * Uses legacy route if true (`options.route`)\n */\n legacy?: boolean,\n) => {\n const actions: ResourceActionRoute[] = [];\n\n const actionList: Action[] = [\"list\", \"show\", \"edit\", \"create\", \"clone\"];\n\n const parentPrefix = getParentPrefixForResource(\n resource,\n resources,\n legacy,\n );\n\n actionList.forEach((action) => {\n const item =\n legacy && action === \"clone\" ? resource.create : resource[action];\n\n let route: string | undefined = undefined;\n\n if (typeof item === \"function\" || legacy) {\n // means we're fallbacking to default path for the action\n route = getDefaultActionPath(\n legacy\n ? resource.meta?.route ??\n resource.options?.route ??\n resource.name\n : resource.name,\n action,\n legacy ? parentPrefix : undefined,\n );\n } else if (typeof item === \"string\") {\n // means we don't have the component, but we have the route\n route = item;\n } else if (typeof item === \"object\") {\n // means we have the component and the route\n route = item.path;\n }\n\n if (route) {\n actions.push({\n action,\n resource,\n route: `/${route.replace(/^\\//, \"\")}`,\n });\n }\n });\n\n return actions;\n};\n","import { ResourceActionRoute } from \"./get-action-routes-from-resource\";\nimport { isParameter } from \"./is-parameter\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\nimport { splitToSegments } from \"./split-to-segments\";\n\n/**\n * Picks the most eligible route from the given matched routes.\n * - If there's only one route, it returns it.\n * - If there's more than one route, it picks the best non-greedy match.\n */\nexport const pickMatchedRoute = (\n routes: ResourceActionRoute[],\n): ResourceActionRoute | undefined => {\n // these routes are all matched, we should pick the least parametrized one\n\n // no routes, no match\n if (routes.length === 0) {\n return undefined;\n }\n\n // no need to calculate the route segments if there's only one route\n if (routes.length === 1) {\n return routes[0];\n }\n\n // remove trailing and leading slashes\n // split them to segments\n const sanitizedRoutes = routes.map((route) => ({\n ...route,\n splitted: splitToSegments(removeLeadingTrailingSlashes(route.route)),\n }));\n\n // at this point, before calling this function, we already checked for segment lenghts and expect all of them to be the same\n const segmentsCount = sanitizedRoutes[0]?.splitted.length ?? 0;\n\n let eligibleRoutes: Array<(typeof sanitizedRoutes)[number]> = [\n ...sanitizedRoutes,\n ];\n\n // loop through the segments\n for (let i = 0; i < segmentsCount; i++) {\n const nonParametrizedRoutes = eligibleRoutes.filter(\n (route) => !isParameter(route.splitted[i]),\n );\n\n if (nonParametrizedRoutes.length === 0) {\n // keep the eligible routes as they are\n continue;\n }\n if (nonParametrizedRoutes.length === 1) {\n // no need to continue, we found the route\n eligibleRoutes = nonParametrizedRoutes;\n break;\n }\n\n // we have more than one non-parametrized route, we need to check the next segment\n eligibleRoutes = nonParametrizedRoutes;\n }\n\n return eligibleRoutes[0];\n};\n","import { Action, IResourceItem } from \"../../../interfaces\";\nimport { checkBySegments } from \"./check-by-segments\";\nimport { getActionRoutesFromResource } from \"./get-action-routes-from-resource\";\nimport { pickMatchedRoute } from \"./pick-matched-route\";\n\n/**\n * Match the resource from the route\n * - It will calculate all possible routes for resources and their actions\n * - It will check if the route matches any of the possible routes\n * - It will return the most eligible resource and action\n */\nexport const matchResourceFromRoute = (\n route: string,\n resources: IResourceItem[],\n): {\n found: boolean;\n resource?: IResourceItem;\n action?: Action;\n matchedRoute?: string;\n} => {\n const allActionRoutes = resources.flatMap((resource) => {\n return getActionRoutesFromResource(resource, resources);\n });\n\n const allFound = allActionRoutes.filter((actionRoute) => {\n return checkBySegments(route, actionRoute.route);\n });\n\n const mostEligible = pickMatchedRoute(allFound);\n\n return {\n found: !!mostEligible,\n resource: mostEligible?.resource,\n action: mostEligible?.action,\n matchedRoute: mostEligible?.route,\n };\n};\n","import { ResourceProps } from \"src/interfaces/bindings/resource\";\nimport { getParentPrefixForResource } from \"../router\";\nimport { pickNotDeprecated } from \"../pickNotDeprecated\";\n\n/**\n * generates route for the resource based on parents and custom routes\n * @deprecated this is a **legacy** function and works only with the old resource definition\n */\nexport const routeGenerator = (\n item: ResourceProps,\n resourcesFromProps: ResourceProps[],\n): string | undefined => {\n let route;\n\n const parentPrefix = getParentPrefixForResource(\n item,\n resourcesFromProps,\n true,\n );\n\n if (parentPrefix) {\n const meta = pickNotDeprecated(item.meta, item.options);\n route = `${parentPrefix}/${meta?.route ?? item.name}`;\n } else {\n route = item.options?.route ?? item.name;\n }\n\n return `/${route.replace(/^\\//, \"\")}`;\n};\n","import { pickNotDeprecated } from \"@definitions/helpers/pickNotDeprecated\";\nimport { IResourceItem, ITreeMenu, IMenuItem } from \"src/interfaces\";\n\n/**\n * @deprecated This helper is deprecated. Please use `createTree` instead.\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 =\n parent.route ??\n pickNotDeprecated(parent?.meta, parent.options)?.route ??\n \"\";\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 { Action, IRefineContextOptions, RedirectAction } from \"src/interfaces\";\n\ntype RedirectPageProps = {\n redirectFromProps?: RedirectAction;\n action: Action;\n redirectOptions: IRefineContextOptions[\"redirect\"];\n};\n\nexport const redirectPage = ({\n redirectFromProps,\n action,\n redirectOptions,\n}: RedirectPageProps): RedirectAction => {\n if (redirectFromProps || redirectFromProps === false) {\n return redirectFromProps;\n }\n\n switch (action) {\n case \"clone\":\n return redirectOptions.afterClone;\n case \"create\":\n return redirectOptions.afterCreate;\n case \"edit\":\n return redirectOptions.afterEdit;\n default:\n return false;\n }\n};\n","type EachResolve<TResolve, Response> = (\n result: TResolve,\n index: number,\n) => Response;\ntype EachReject<TReject, Response> = (\n error: TReject,\n index: number,\n) => Response;\n\nexport const sequentialPromises = async <\n TResolve = unknown,\n TReject = unknown,\n TResolveResponse = unknown,\n TRejectResponse = unknown,\n>(\n promises: (() => Promise<TResolve>)[],\n onEachResolve: EachResolve<TResolve, TResolveResponse>,\n onEachReject: EachReject<TReject, TRejectResponse>,\n): Promise<(TResolveResponse | TRejectResponse)[]> => {\n const results = [];\n // @ts-expect-error Remove this when we enable `downLevelIterations`\n for (const [index, promise] of promises.entries()) {\n try {\n const result = await promise();\n\n results.push(onEachResolve(result, index));\n } catch (error) {\n results.push(onEachReject(error as TReject, index));\n }\n }\n return results;\n};\n","import { IResourceItem } from \"src/interfaces/bindings/resource\";\nimport { removeLeadingTrailingSlashes } from \"../router/remove-leading-trailing-slashes\";\n\n/**\n * Picks the resource based on the provided identifier.\n * Identifier fallbacks to `name` if `identifier` is not explicitly provided to the resource.\n * If legacy is true, then resource is matched by `route` first and then by `name`.\n */\nexport const pickResource = (\n identifier?: string,\n resources: IResourceItem[] = [],\n /**\n * If true, the identifier will be checked for `route` and `name` properties\n */\n legacy = false,\n): IResourceItem | undefined => {\n if (!identifier) {\n return undefined;\n }\n\n if (legacy) {\n const resourceByRoute = resources.find(\n (r) =>\n removeLeadingTrailingSlashes(r.route ?? \"\") ===\n removeLeadingTrailingSlashes(identifier),\n );\n\n const resource = resourceByRoute\n ? resourceByRoute\n : resources.find((r) => r.name === identifier);\n\n return resource;\n }\n\n const resource = resources.find(\n (r) => (r.identifier ?? r.name) === identifier,\n );\n\n return resource;\n};\n","import { IResourceItem } from \"src/interfaces/bindings/resource\";\nimport { pickResource } from \"../pick-resource\";\nimport { pickNotDeprecated } from \"../pickNotDeprecated\";\n\n/**\n * Picks the data provider name based on the provided name or fallbacks to resource definition, or `default`.\n */\nexport const pickDataProvider = (\n resourceName?: string,\n dataProviderName?: string,\n resources?: IResourceItem[],\n) => {\n if (dataProviderName) {\n return dataProviderName;\n }\n\n /**\n * In this helper, we don't do `route` based matching therefore there's no need to check for `legacy` behaviors.\n */\n const resource = pickResource(resourceName, resources);\n\n const meta = pickNotDeprecated(resource?.meta, resource?.options);\n\n if (meta?.dataProviderName) {\n return meta.dataProviderName;\n }\n\n return \"default\";\n};\n","export const handleMultiple = async <TData = unknown>(\n promises: Promise<{ data: TData }>[],\n): Promise<{ data: TData[] }> => {\n return {\n data: (await Promise.all(promises)).map((res) => res.data),\n };\n};\n","import { 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 IResourceItem,\n ResourceProps,\n} from \"../../../interfaces/bindings/resource\";\n\nimport { routeGenerator } from \"../routeGenerator\";\n\n/**\n * For the legacy definition of resources, we did a basic transformation for provided resources\n * - This is meant to provide an easier way to access properties.\n * - In the new definition, we don't need to do transformations and properties can be accessed via helpers or manually.\n * This is kept for backward compability\n */\nexport const legacyResourceTransform = (resources: ResourceProps[]) => {\n const _resources: IResourceItem[] = [];\n\n resources?.forEach((resource) => {\n _resources.push({\n ...resource,\n label: resource.meta?.label ?? resource.options?.label,\n route: routeGenerator(resource, resources),\n canCreate: !!resource.create,\n canEdit: !!resource.edit,\n canShow: !!resource.show,\n canDelete: resource.canDelete,\n });\n });\n\n return _resources;\n};\n","import { splitToSegments } from \"./split-to-segments\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\nimport { isParameter } from \"./is-parameter\";\n\n/**\n * Picks the route parameters from the given route.\n * (e.g. /users/:id/posts/:postId => ['id', 'postId'])\n */\nexport const pickRouteParams = (route: string) => {\n const segments = splitToSegments(removeLeadingTrailingSlashes(route));\n\n return segments.flatMap((s) => {\n if (isParameter(s)) {\n return [s.slice(1)];\n }\n\n return [];\n });\n};\n","import { MetaDataQuery, ParseResponse } from \"../../../interfaces\";\n\n/**\n * Prepares the route params by checking the existing params and meta data.\n * Meta data is prioritized over params.\n * Params are prioritized over predetermined id, action and resource.\n * This means, we can use `meta` for user supplied params (both manually or from the query string)\n */\nexport const prepareRouteParams = <\n TRouteParams extends Record<\n string,\n string | number | undefined | Symbol\n > = Record<string, string | number | undefined | Symbol>,\n>(\n routeParams: (keyof TRouteParams)[],\n params: ParseResponse = {},\n meta: MetaDataQuery = {},\n): Partial<TRouteParams> => {\n // meta is prioritized over params\n return routeParams.reduce((acc, key) => {\n const value =\n meta[key as string] ||\n params.params?.[key as string] ||\n (key === \"id\" ? params.id : undefined) ||\n (key === \"action\" ? params.action : undefined) ||\n (key === \"resource\" ? params.resource : undefined);\n if (typeof value !== \"undefined\") {\n acc[key] = value;\n }\n return acc;\n }, {} as Partial<TRouteParams>);\n};\n","import { MetaDataQuery, ParseResponse } from \"../../../interfaces\";\n\nimport { pickRouteParams } from \"./pick-route-params\";\nimport { prepareRouteParams } from \"./prepare-route-params\";\n\n/**\n * This function will compose a route with the given params and meta.\n * - A route can have parameters like (eg: /users/:id)\n * - First we pick the route params from the route (eg: [id])\n * - Then we prepare the route params with the given params and meta (eg: { id: 1 })\n * - Then we replace the route params with the prepared route params (eg: /users/1)\n */\nexport const composeRoute = (\n designatedRoute: string,\n params: ParseResponse = {},\n meta: MetaDataQuery = {},\n): string => {\n // pickRouteParams (from the route)\n const routeParams = pickRouteParams(designatedRoute);\n // prepareRouteParams (from route params, params and meta)\n const preparedRouteParams = prepareRouteParams(routeParams, params, meta);\n // replace route params with prepared route params\n return designatedRoute.replace(/:([^\\/]+)/g, (match, key) => {\n const fromParams = preparedRouteParams[key];\n if (typeof fromParams !== \"undefined\") {\n return `${fromParams}`;\n }\n return match;\n });\n};\n","import { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\n\n/**\n * @returns authProvider or legacyAuthProvider if provided, otherwise null\n * @internal\n * NOTE: Will be removed in v5\n */\nexport const useActiveAuthProvider = () => {\n const legacyAuthProvider = useLegacyAuthContext();\n const authProvider = useAuthBindingsContext();\n\n if (authProvider.isProvided) {\n return { isLegacy: false, ...authProvider };\n }\n\n if (legacyAuthProvider.isProvided) {\n // legacyAuthProvider interface is different from authProvider interface\n // we need to convert it to authProvider interface for simple usage\n // in the future, we will remove legacyAuthProvider\n return {\n isLegacy: true,\n ...legacyAuthProvider,\n check: legacyAuthProvider.checkAuth,\n onError: legacyAuthProvider.checkError,\n getIdentity: legacyAuthProvider.getUserIdentity,\n };\n }\n\n return null;\n};\n","import { Pagination } from \"../../../interfaces\";\nimport { pickNotDeprecated } from \"../pickNotDeprecated\";\n\ntype HandlePaginationParamsProps = {\n hasPagination?: boolean;\n pagination?: Pagination;\n configPagination?: Pagination;\n};\n\nexport const handlePaginationParams = ({\n hasPagination,\n pagination,\n configPagination,\n}: HandlePaginationParamsProps = {}): Required<Pagination> => {\n const hasPaginationString = hasPagination === false ? \"off\" : \"server\";\n const mode = pagination?.mode ?? hasPaginationString;\n\n const current =\n pickNotDeprecated(pagination?.current, configPagination?.current) ?? 1;\n\n const pageSize =\n pickNotDeprecated(pagination?.pageSize, configPagination?.pageSize) ??\n 10;\n\n return {\n current,\n pageSize,\n mode,\n };\n};\n","import { useState, useEffect } from \"react\";\n\nexport const useMediaQuery = (query: string) => {\n const [matches, setMatches] = useState(false);\n\n useEffect(() => {\n const media = window.matchMedia(query);\n if (media.matches !== matches) {\n setMatches(media.matches);\n }\n const listener = () => setMatches(media.matches);\n window.addEventListener(\"resize\", listener);\n return () => window.removeEventListener(\"resize\", listener);\n }, [matches, query]);\n\n return matches;\n};\n","import {\n QueryObserverResult,\n useQuery,\n UseQueryOptions,\n} from \"@tanstack/react-query\";\n\nimport {\n GetOneResponse,\n HttpError,\n BaseRecord,\n BaseKey,\n LiveModeProps,\n SuccessErrorNotification,\n MetaQuery,\n Prettify,\n} from \"../../interfaces\";\nimport {\n useResource,\n useTranslate,\n useResourceSubscription,\n useHandleNotification,\n useDataProvider,\n useOnError,\n} from \"@hooks\";\nimport {\n queryKeys,\n pickDataProvider,\n pickNotDeprecated,\n useActiveAuthProvider,\n} 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 meta?: MetaQuery;\n /**\n * Meta data query for `dataProvider`,\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default `\"default\"``\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<\n GetOneResponse<TData>,\n TError,\n Prettify<{ id?: BaseKey } & MetaQuery>\n> &\n LiveModeProps;\n\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 meta,\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 pickNotDeprecated(meta, metaData),\n pickNotDeprecated(meta, metaData),\n );\n\n const { getOne } = dataProvider(\n pickDataProvider(resource, dataProviderName, resources),\n );\n const translate = useTranslate();\n const authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n subscriptionType: \"useOne\",\n ...liveParams,\n },\n enabled:\n typeof queryOptions?.enabled !== \"undefined\"\n ? queryOptions?.enabled\n : typeof resource !== \"undefined\" && typeof id !== \"undefined\",\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: resource!,\n id: id!,\n meta: {\n ...(pickNotDeprecated(meta, metaData) || {}),\n queryContext: {\n queryKey,\n pageParam,\n signal,\n },\n },\n metaData: {\n ...(pickNotDeprecated(meta, metaData) || {}),\n queryContext: {\n queryKey,\n pageParam,\n signal,\n },\n },\n }),\n {\n ...queryOptions,\n enabled:\n typeof queryOptions?.enabled !== \"undefined\"\n ? queryOptions?.enabled\n : typeof id !== \"undefined\",\n onSuccess: (data) => {\n queryOptions?.onSuccess?.(data);\n\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(\n data,\n {\n id,\n ...(pickNotDeprecated(meta, metaData) || {}),\n },\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(\n err,\n {\n id,\n ...(pickNotDeprecated(meta, metaData) || {}),\n },\n resource,\n )\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 LiveModeProps,\n SuccessErrorNotification,\n MetaQuery,\n} from \"../../interfaces\";\nimport {\n useResource,\n useTranslate,\n useResourceSubscription,\n useHandleNotification,\n useDataProvider,\n useOnError,\n} from \"@hooks\";\nimport {\n queryKeys,\n pickDataProvider,\n handleMultiple,\n pickNotDeprecated,\n useActiveAuthProvider,\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 meta?: MetaQuery;\n /**\n * Metadata query for `dataProvider`,\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default \"default\"\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<GetManyResponse<TData>, TError, BaseKey[]> &\n LiveModeProps;\n\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 meta,\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 pickNotDeprecated(meta, metaData),\n pickNotDeprecated(meta, metaData),\n );\n\n const { getMany, getOne } = dataProvider(\n pickDataProvider(resource, dataProviderName, resources),\n );\n\n const translate = useTranslate();\n const authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 ...(pickNotDeprecated(meta, 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 ...(pickNotDeprecated(meta, 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 MetaQuery,\n PreviousQuery,\n GetListResponse,\n IQueryKeys,\n} from \"../../interfaces\";\nimport pluralize from \"pluralize\";\nimport {\n useResource,\n useMutationMode,\n useCancelNotification,\n useTranslate,\n usePublish,\n useHandleNotification,\n useDataProvider,\n useLog,\n useInvalidate,\n useOnError,\n} from \"@hooks\";\nimport {\n queryKeys,\n pickDataProvider,\n pickNotDeprecated,\n useActiveAuthProvider,\n} from \"@definitions/helpers\";\n\nexport type UpdateParams<TData, TError, TVariables> = {\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * id for mutation function\n */\n id: BaseKey;\n /**\n * [Determines when mutations are executed](/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 meta?: MetaQuery;\n /**\n * Metadata query for dataProvider\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default \"default\"\n */\n dataProviderName?: string;\n /**\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 UpdateResponse<TData>,\n TError,\n { id: BaseKey; values: TVariables }\n>;\n\nexport type UseUpdateReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n UpdateResponse<TData>,\n TError,\n UpdateParams<TData, TError, TVariables>,\n UpdateContext<TData>\n>;\n\nexport type UseUpdateProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n UpdateResponse<TData>,\n TError,\n UpdateParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n \"mutationFn\" | \"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 authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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<TData, TError, TVariables>,\n UpdateContext<TData>\n >(\n ({\n id,\n values,\n resource,\n mutationMode,\n undoableTimeout,\n onCancel,\n meta,\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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 meta,\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 pickNotDeprecated(meta, 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 {\n pickDataProvider,\n pickNotDeprecated,\n useActiveAuthProvider,\n} from \"@definitions/helpers\";\n\nimport {\n CreateResponse,\n BaseRecord,\n HttpError,\n SuccessErrorNotification,\n MetaQuery,\n IQueryKeys,\n} from \"../../interfaces\";\nimport {\n useResource,\n useTranslate,\n usePublish,\n useHandleNotification,\n useDataProvider,\n useLog,\n useInvalidate,\n useOnError,\n} from \"@hooks\";\n\ntype useCreateParams<TData, TError, TVariables> = {\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * Values for mutation function\n */\n values: TVariables;\n /**\n * Meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Meta data for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n /**\n * You can use it to manage the invalidations that will occur at the end of the mutation.\n */\n invalidates?: Array<keyof IQueryKeys>;\n} & SuccessErrorNotification<CreateResponse<TData>, TError, TVariables>;\n\nexport type UseCreateReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n CreateResponse<TData>,\n TError,\n useCreateParams<TData, TError, TVariables>,\n unknown\n>;\n\nexport type UseCreateProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n CreateResponse<TData>,\n TError,\n useCreateParams<TData, TError, TVariables>,\n unknown\n >,\n \"mutationFn\" | \"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 authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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<TData, TError, TVariables>,\n unknown\n >(\n ({\n resource,\n values,\n meta,\n metaData,\n dataProviderName,\n }: useCreateParams<TData, TError, TVariables>) => {\n return dataProvider(\n pickDataProvider(resource, dataProviderName, resources),\n ).create<TData, TVariables>({\n resource,\n variables: values,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n });\n },\n {\n onSuccess: (\n data,\n {\n resource,\n successNotification: successNotificationFromProp,\n dataProviderName,\n invalidates = [\"list\", \"many\"],\n values,\n meta,\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 pickNotDeprecated(meta, 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 usePublish,\n useHandleNotification,\n useDataProvider,\n useLog,\n useInvalidate,\n useOnError,\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 PreviousQuery,\n IQueryKeys,\n MetaQuery,\n} from \"../../interfaces\";\nimport {\n queryKeys,\n pickDataProvider,\n pickNotDeprecated,\n useActiveAuthProvider,\n} from \"@definitions/helpers\";\n\nexport type DeleteParams<TData, TError, TVariables> = {\n id: BaseKey;\n resource: string;\n mutationMode?: MutationMode;\n undoableTimeout?: number;\n onCancel?: (cancelMutation: () => void) => void;\n meta?: MetaQuery;\n /**\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n dataProviderName?: string;\n invalidates?: Array<keyof IQueryKeys>;\n values?: TVariables;\n} & SuccessErrorNotification<DeleteOneResponse<TData>, TError, BaseKey>;\n\nexport type UseDeleteReturnType<\n TData extends BaseRecord = BaseRecord,\n TError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n DeleteOneResponse<TData>,\n TError,\n DeleteParams<TData, TError, 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<TData, TError, 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 authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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<TData, TError, TVariables>,\n DeleteContext<TData>\n >(\n ({\n id,\n mutationMode,\n undoableTimeout,\n resource,\n onCancel,\n meta,\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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 meta: pickNotDeprecated(meta, 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 meta,\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 pickNotDeprecated(meta, 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 MetaQuery,\n IQueryKeys,\n} from \"../../interfaces\";\nimport {\n useResource,\n useTranslate,\n usePublish,\n useHandleNotification,\n useDataProvider,\n useInvalidate,\n useLog,\n} from \"@hooks\";\nimport {\n handleMultiple,\n pickDataProvider,\n pickNotDeprecated,\n} from \"@definitions\";\n\ntype useCreateManyParams<TData, TError, TVariables> = {\n resource: string;\n values: TVariables[];\n meta?: MetaQuery;\n metaData?: MetaQuery;\n dataProviderName?: string;\n invalidates?: Array<keyof IQueryKeys>;\n} & SuccessErrorNotification<CreateManyResponse<TData>, TError, TVariables[]>;\n\nexport type UseCreateManyReturnType<\n TData extends BaseRecord = BaseRecord,\n TError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n CreateManyResponse<TData>,\n TError,\n useCreateManyParams<TData, TError, TVariables>,\n unknown\n>;\n\nexport type UseCreateManyProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n CreateManyResponse<TData>,\n TError,\n useCreateManyParams<TData, TError, TVariables>\n >,\n \"mutationFn\" | \"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 const { log } = useLog();\n\n const mutation = useMutation<\n CreateManyResponse<TData>,\n TError,\n useCreateManyParams<TData, TError, TVariables>\n >(\n ({\n resource,\n values,\n meta,\n metaData,\n dataProviderName,\n }: useCreateManyParams<TData, TError, 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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n });\n } else {\n return handleMultiple(\n values.map((val) =>\n selectedDataProvider.create<TData, TVariables>({\n resource,\n variables: val,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 meta,\n metaData,\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 const { fields, operation, variables, ...rest } =\n pickNotDeprecated(meta, metaData) || {};\n\n log?.mutate({\n action: \"createMany\",\n resource,\n data: values,\n meta: {\n dataProviderName: pickDataProvider(\n resource,\n dataProviderName,\n resources,\n ),\n ids,\n ...rest,\n },\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 useMutationMode,\n useTranslate,\n usePublish,\n useHandleNotification,\n useDataProvider,\n useInvalidate,\n useLog,\n useOnError,\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 MetaQuery,\n GetListResponse,\n IQueryKeys,\n} from \"../../interfaces\";\nimport {\n queryKeys,\n pickDataProvider,\n handleMultiple,\n pickNotDeprecated,\n useActiveAuthProvider,\n} from \"@definitions/helpers\";\n\ntype UpdateManyParams<TData, TError, TVariables> = {\n ids: BaseKey[];\n resource: string;\n mutationMode?: MutationMode;\n undoableTimeout?: number;\n onCancel?: (cancelMutation: () => void) => void;\n values: TVariables;\n /**\n * meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * meta data for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n dataProviderName?: string;\n invalidates?: Array<keyof IQueryKeys>;\n} & SuccessErrorNotification<\n UpdateManyResponse<TData>,\n TError,\n { ids: BaseKey[]; values: TVariables }\n>;\n\ntype UseUpdateManyReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n>;\n\nexport type UseUpdateManyProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n \"mutationFn\" | \"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 authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n const { notificationDispatch } = useCancelNotification();\n const publish = usePublish();\n const handleNotification = useHandleNotification();\n const invalidateStore = useInvalidate();\n const { log } = useLog();\n\n const mutation = useMutation<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >(\n ({\n ids,\n values,\n resource,\n onCancel,\n mutationMode,\n undoableTimeout,\n meta,\n metaData,\n dataProviderName,\n }: UpdateManyParams<TData, TError, 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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n });\n } else {\n return handleMultiple(\n ids.map((id) =>\n selectedDataProvider.update<TData, TVariables>({\n resource,\n id,\n variables: values,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 meta,\n metaData,\n }) => {\n const queryKey = queryKeys(\n resource,\n pickDataProvider(resource, dataProviderName, resources),\n pickNotDeprecated(meta, metaData),\n pickNotDeprecated(meta, 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 {\n ids,\n resource,\n meta,\n metaData,\n dataProviderName,\n successNotification,\n values,\n },\n context,\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 const previousData: any[] = [];\n if (context) {\n ids.forEach((id) => {\n const queryData = queryClient.getQueryData<\n UpdateManyResponse<TData>\n >(context.queryKey.detail(id));\n\n previousData.push(\n Object.keys(values || {}).reduce<any>(\n (acc, item: any) => {\n acc[item] = queryData?.data?.[item];\n return acc;\n },\n {},\n ),\n );\n });\n }\n\n const { fields, operation, variables, ...rest } =\n pickNotDeprecated(meta, metaData) || {};\n\n log?.mutate({\n action: \"updateMany\",\n resource,\n data: values,\n previousData,\n meta: {\n ids,\n dataProviderName: pickDataProvider(\n resource,\n dataProviderName,\n resources,\n ),\n ...rest,\n },\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 MetaQuery,\n IQueryKeys,\n} from \"../../interfaces\";\nimport {\n useResource,\n useTranslate,\n useMutationMode,\n useCancelNotification,\n usePublish,\n useHandleNotification,\n useDataProvider,\n useInvalidate,\n useLog,\n useOnError,\n} from \"@hooks\";\nimport { ActionTypes } from \"@contexts/undoableQueue\";\nimport {\n queryKeys,\n pickDataProvider,\n handleMultiple,\n pickNotDeprecated,\n useActiveAuthProvider,\n} from \"@definitions\";\n\nexport type DeleteManyParams<TData, TError, TVariables> = {\n ids: BaseKey[];\n resource: string;\n mutationMode?: MutationMode;\n undoableTimeout?: number;\n onCancel?: (cancelMutation: () => void) => void;\n meta?: MetaQuery;\n /**\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n dataProviderName?: string;\n invalidates?: Array<keyof IQueryKeys>;\n values?: TVariables;\n} & SuccessErrorNotification<DeleteManyResponse<TData>, TError, BaseKey[]>;\n\nexport type UseDeleteManyReturnType<\n TData extends BaseRecord = BaseRecord,\n TError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n DeleteManyResponse<TData>,\n TError,\n DeleteManyParams<TData, TError, 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<TData, TError, 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 authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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 const { log } = useLog();\n\n const { resources } = useResource();\n const queryClient = useQueryClient();\n\n const mutation = useMutation<\n DeleteManyResponse<TData>,\n TError,\n DeleteManyParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >(\n ({\n resource,\n ids,\n mutationMode,\n undoableTimeout,\n onCancel,\n meta,\n metaData,\n dataProviderName,\n values,\n }: DeleteManyParams<TData, TError, 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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n variables: values,\n });\n } else {\n return handleMultiple(\n ids.map((id) =>\n selectedDataProvider.deleteOne<TData, TVariables>({\n resource,\n id,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 {\n ids,\n resource,\n meta,\n metaData,\n dataProviderName,\n successNotification,\n },\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 const { fields, operation, variables, ...rest } =\n pickNotDeprecated(meta, metaData) || {};\n\n log?.mutate({\n action: \"deleteMany\",\n resource,\n meta: {\n ids,\n dataProviderName: pickDataProvider(\n resource,\n dataProviderName,\n resources,\n ),\n ...rest,\n },\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 { pickNotDeprecated, useActiveAuthProvider } from \"@definitions/helpers\";\nimport {\n useDataProvider,\n useHandleNotification,\n useOnError,\n useTranslate,\n} from \"@hooks\";\nimport {\n BaseRecord,\n CrudFilters,\n CrudSorting,\n CustomResponse,\n HttpError,\n MetaQuery,\n Prettify,\n SuccessErrorNotification,\n} from \"../../interfaces\";\n\ninterface UseCustomConfig<TQuery, TPayload> {\n /**\n * @deprecated `sort` is deprecated, use `sorters` instead.\n */\n sort?: CrudSorting;\n sorters?: 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 sorters 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 * meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * meta data for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<\n CustomResponse<TData>,\n TError,\n Prettify<UseCustomConfig<TQuery, TPayload> & MetaQuery>\n>;\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 meta,\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 authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n const translate = useTranslate();\n const handleNotification = useHandleNotification();\n\n if (custom) {\n const queryResponse = useQuery<CustomResponse<TData>, TError>({\n queryKey: [\n dataProviderName,\n \"custom\",\n method,\n url,\n { ...config, ...(pickNotDeprecated(meta, metaData) || {}) },\n ],\n queryFn: ({ queryKey, pageParam, signal }) =>\n custom<TData>({\n url,\n method,\n ...config,\n metaData: {\n ...(pickNotDeprecated(meta, metaData) || {}),\n queryContext: {\n queryKey,\n pageParam,\n signal,\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 ...(pickNotDeprecated(meta, 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, {\n ...config,\n ...(pickNotDeprecated(meta, metaData) || {}),\n })\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 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 useDataProvider,\n useHandleNotification,\n useTranslate,\n useOnError,\n} from \"@hooks\";\nimport {\n CreateResponse,\n BaseRecord,\n HttpError,\n SuccessErrorNotification,\n MetaQuery,\n Prettify,\n} from \"../../interfaces\";\nimport { pickNotDeprecated, useActiveAuthProvider } from \"@definitions/helpers\";\n\ninterface UseCustomMutationConfig {\n headers?: {};\n}\n\ntype useCustomMutationParams<TData, TError, TVariables> = {\n url: string;\n method: \"post\" | \"put\" | \"patch\" | \"delete\";\n values: TVariables;\n /**\n * Meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Meta data for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n dataProviderName?: string;\n config?: UseCustomMutationConfig;\n} & SuccessErrorNotification<\n CreateResponse<TData>,\n TError,\n Prettify<UseCustomMutationConfig & MetaQuery>\n>;\n\nexport type UseCustomMutationReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, TVariables>,\n unknown\n>;\n\nexport type UseCustomMutationProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, 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 authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n const handleNotification = useHandleNotification();\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n\n const mutation = useMutation<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, TVariables>,\n unknown\n >(\n ({\n url,\n method,\n values,\n meta,\n metaData,\n dataProviderName,\n config,\n }: useCustomMutationParams<TData, TError, TVariables>) => {\n const { custom } = dataProvider(dataProviderName);\n\n if (custom) {\n return custom<TData>({\n url,\n method,\n payload: values,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 meta,\n metaData,\n },\n ) => {\n const notificationConfig =\n typeof successNotificationFromProp === \"function\"\n ? successNotificationFromProp(data, {\n ...config,\n ...(pickNotDeprecated(meta, metaData) || {}),\n })\n : successNotificationFromProp;\n\n handleNotification(notificationConfig);\n },\n onError: (\n err: TError,\n {\n errorNotification: errorNotificationFromProp,\n method,\n config,\n meta,\n metaData,\n },\n ) => {\n checkError(err);\n\n const notificationConfig =\n typeof errorNotificationFromProp === \"function\"\n ? errorNotificationFromProp(err, {\n ...config,\n ...(pickNotDeprecated(meta, 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 InfiniteData,\n} from \"@tanstack/react-query\";\nimport {\n CrudFilters,\n Pagination,\n BaseRecord,\n HttpError,\n CrudSorting,\n MetaQuery,\n SuccessErrorNotification,\n LiveModeProps,\n GetListResponse,\n Prettify,\n} from \"../../interfaces\";\nimport {\n useResource,\n useHandleNotification,\n useResourceSubscription,\n useTranslate,\n useDataProvider,\n useOnError,\n} from \"@hooks\";\nimport {\n queryKeys,\n pickDataProvider,\n getNextPageParam,\n getPreviousPageParam,\n pickNotDeprecated,\n useActiveAuthProvider,\n handlePaginationParams,\n} from \"@definitions/helpers\";\n\nexport interface UseInfiniteListConfig {\n pagination?: Pagination;\n hasPagination?: boolean;\n sort?: CrudSorting;\n filters?: CrudFilters;\n}\n\ntype BaseInfiniteListProps = {\n /**\n * Metadata query for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Metadata query for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * Configuration for pagination, sorting and filtering\n * @type [`useInfiniteListConfig`](/docs/api-reference/core/hooks/data/useInfiniteList/#config-parameters)\n * @deprecated `config` property is deprecated. Use `pagination`, `hasPagination`, `sorters` and `filters` instead.\n */\n config?: UseInfiniteListConfig;\n /**\n * Pagination properties\n */\n pagination?: Pagination;\n /**\n * Whether to use server-side pagination or not\n * @deprecated `hasPagination` property is deprecated. Use `pagination.mode` instead.\n */\n hasPagination?: boolean;\n /**\n * Sorter parameters\n */\n sorters?: CrudSorting;\n /**\n * Filter parameters\n */\n filters?: CrudFilters;\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 UseInfiniteListProps<TData, TError> = {\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * Tanstack Query's [useInfiniteQuery](https://tanstack.com/query/v4/docs/react/reference/useInfiniteQuery) options\n */\n queryOptions?: UseInfiniteQueryOptions<GetListResponse<TData>, TError>;\n} & BaseInfiniteListProps &\n SuccessErrorNotification<\n InfiniteData<GetListResponse<TData>>,\n TError,\n Prettify<BaseInfiniteListProps>\n > &\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 filters,\n hasPagination,\n pagination,\n sorters,\n queryOptions,\n successNotification,\n errorNotification,\n meta,\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 translate = useTranslate();\n const authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n const handleNotification = useHandleNotification();\n\n const pickedDataProvider = pickDataProvider(\n resource,\n dataProviderName,\n resources,\n );\n const preferredMeta = pickNotDeprecated(meta, metaData);\n const prefferedFilters = pickNotDeprecated(filters, config?.filters);\n const prefferedSorters = pickNotDeprecated(sorters, config?.sort);\n const prefferedHasPagination = pickNotDeprecated(\n hasPagination,\n config?.hasPagination,\n );\n const prefferedPagination = handlePaginationParams({\n pagination,\n configPagination: config?.pagination,\n hasPagination: prefferedHasPagination,\n });\n const isServerPagination = prefferedPagination.mode === \"server\";\n const notificationValues = {\n meta: preferredMeta,\n metaData: preferredMeta,\n filters: prefferedFilters,\n hasPagination: isServerPagination,\n pagination: prefferedPagination,\n sorters: prefferedSorters,\n config: {\n ...config,\n sort: prefferedSorters,\n },\n };\n\n const isEnabled =\n queryOptions?.enabled === undefined || queryOptions?.enabled === true;\n\n const queryKey = queryKeys(\n resource,\n pickedDataProvider,\n preferredMeta,\n preferredMeta,\n );\n\n const { getList } = dataProvider(pickedDataProvider);\n\n useResourceSubscription({\n resource,\n types: [\"*\"],\n params: {\n meta: preferredMeta,\n metaData: preferredMeta,\n pagination: prefferedPagination,\n hasPagination: isServerPagination,\n sort: prefferedSorters,\n sorters: prefferedSorters,\n filters: prefferedFilters,\n subscriptionType: \"useList\",\n ...liveParams,\n },\n channel: `resources/${resource}`,\n enabled: isEnabled,\n liveMode,\n onLiveEvent,\n });\n\n const queryResponse = useInfiniteQuery<GetListResponse<TData>, TError>(\n queryKey.list({\n filters: prefferedFilters,\n hasPagination: isServerPagination,\n ...(isServerPagination && {\n pagination: prefferedPagination,\n }),\n ...(sorters && {\n sorters,\n }),\n ...(config?.sort && {\n sort: config?.sort,\n }),\n }),\n ({ queryKey, pageParam, signal }) => {\n const paginationProperties = {\n ...prefferedPagination,\n current: pageParam,\n };\n\n return getList<TData>({\n resource,\n pagination: paginationProperties,\n hasPagination: isServerPagination,\n filters: prefferedFilters,\n sort: prefferedSorters,\n sorters: prefferedSorters,\n meta: {\n ...(preferredMeta || {}),\n queryContext: {\n queryKey,\n pageParam,\n signal,\n },\n },\n metaData: {\n ...(preferredMeta || {}),\n queryContext: {\n queryKey,\n pageParam,\n signal,\n },\n },\n }).then(({ data, total, ...rest }) => {\n return {\n data,\n total,\n pagination: paginationProperties,\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 notificationValues,\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, notificationValues, 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 MetaQuery,\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 meta?: MetaQuery;\n /**\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n pagination?: Pagination;\n /**\n * @deprecated `hasPagination` is deprecated, use `pagination.mode` instead.\n */\n hasPagination?: boolean;\n /**\n * @deprecated `sort` is deprecated. Use `sorters` instead.\n */\n sort?: CrudSorting;\n sorters?: 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 MetaQuery,\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 meta?: MetaQuery;\n /**\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n pagination?: Pagination;\n /**\n * @deprecated `hasPagination` is deprecated, use `pagination.mode` instead.\n */\n hasPagination?: boolean;\n /**\n * @deprecated `sort` is deprecated, use `sorters` instead.\n */\n sort?: CrudSorting;\n sorters?: 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 Action,\n BaseKey,\n IResourceItem,\n ResourceRouterParams,\n} from \"../../../interfaces\";\nimport { useRouterContext, useResourceWithRoute } from \"@hooks\";\nimport { useRouterType } from \"../../../contexts/router-picker\";\nimport { useParsed } from \"../../router/use-parsed\";\nimport { pickResource } from \"../../../definitions/helpers/pick-resource\";\n\nexport type UseResourceLegacyProps = {\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\n/**\n * Matches the resource by identifier.\n * If not provided, the resource from the route will be returned.\n * If your resource does not explicitly define an identifier, the resource name will be used.\n */\nexport type UseResourceParam = string | undefined;\n\ntype UseResourceReturnType = {\n resources: IResourceItem[];\n resource?: IResourceItem;\n /**\n * @deprecated Use `resource.name` instead when you need to get the resource name.\n */\n resourceName?: string;\n id?: BaseKey;\n action?: Action;\n};\n\ntype UseResourceReturnTypeWithResource = UseResourceReturnType & {\n resource: IResourceItem;\n};\n\n/**\n * @deprecated Use `useResource` with `identifier` property instead. (`identifier` does not check by route name in new router)\n */\nexport function useResource(\n props: UseResourceLegacyProps,\n): UseResourceReturnType;\nexport function useResource(): UseResourceReturnType;\nexport function useResource<TIdentifier = UseResourceParam>(\n identifier: TIdentifier,\n): TIdentifier extends NonNullable<UseResourceParam>\n ? UseResourceReturnTypeWithResource\n : UseResourceReturnType;\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 function useResource(\n args?: UseResourceLegacyProps | UseResourceParam,\n): UseResourceReturnType {\n const { resources } = useContext(ResourceContext);\n\n const routerType = useRouterType();\n\n const params = useParsed();\n\n const oldProps = {\n resourceName:\n args && typeof args !== \"string\" ? args.resourceName : args,\n resourceNameOrRouteName:\n args && typeof args !== \"string\"\n ? args.resourceNameOrRouteName\n : args,\n recordItemId:\n args && typeof args !== \"string\" ? args.recordItemId : undefined,\n };\n\n /**\n * Legacy Router - Start\n *\n * using `useParams` and `route` to match resource and get params.\n */\n const resourceWithRoute = useResourceWithRoute();\n\n const { useParams } = useRouterContext();\n\n const legacyParams = useParams<Partial<ResourceRouterParams>>();\n\n if (routerType === \"legacy\") {\n const resourceKeyToCheck = oldProps.resourceNameOrRouteName\n ? oldProps.resourceNameOrRouteName\n : legacyParams.resource;\n\n const legacyResource = resourceKeyToCheck\n ? resourceWithRoute(resourceKeyToCheck)\n : undefined;\n const legacyId = oldProps?.recordItemId ?? legacyParams.id;\n const legacyAction = legacyParams.action;\n const legacyResourceName =\n oldProps?.resourceName ?? legacyResource?.name;\n\n return {\n resources,\n resource: legacyResource,\n resourceName: legacyResourceName,\n id: legacyId,\n action: legacyAction,\n };\n }\n /** Legacy Router - End */\n\n /** New Router */\n let resource: IResourceItem | undefined = undefined;\n // we try to pick the resource from props first\n const identifier =\n typeof args === \"string\" ? args : oldProps?.resourceNameOrRouteName;\n if (identifier) {\n const pickedFromProps = pickResource(identifier, resources);\n if (pickedFromProps) {\n resource = pickedFromProps;\n } else {\n resource = {\n name: identifier as string,\n };\n }\n } else if (params?.resource) {\n resource = params.resource;\n }\n\n return {\n resources,\n resource,\n resourceName: resource?.name,\n id: params.id,\n action: params.action,\n };\n}\n","import React from \"react\";\n\nimport { IResourceContext } from \"./IResourceContext\";\nimport {\n IResourceItem,\n ResourceProps,\n} from \"../../interfaces/bindings/resource\";\nimport { useDeepMemo } from \"@hooks/deepMemo\";\nimport { legacyResourceTransform } from \"@definitions/helpers\";\n\nexport {\n IResourceItem,\n IResourceComponents,\n IResourceComponentsProps,\n IResourceContext,\n} from \"../../interfaces/bindings/resource\";\n\nexport const ResourceContext = React.createContext<IResourceContext>({\n resources: [],\n});\n\nexport const ResourceContextProvider: React.FC<\n React.PropsWithChildren<{ resources: ResourceProps[] }>\n> = ({ resources: providedResources, children }) => {\n const resources: IResourceItem[] = useDeepMemo(() => {\n return legacyResourceTransform(providedResources ?? []);\n }, [providedResources]);\n\n return (\n <ResourceContext.Provider value={{ resources }}>\n {children}\n </ResourceContext.Provider>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { useMemoized } from \"@hooks/memoized\";\n\n/**\n * Hook that memoizes the given dependency array and checks the consecutive calls with deep equality and returns the same value as the first call if dependencies are not changed.\n * @internal\n */\nexport const useDeepMemo = <T,>(\n fn: () => T,\n dependencies: React.DependencyList,\n): T => {\n const memoizedDependencies = useMemoized(dependencies);\n\n const value = useMemo(fn, memoizedDependencies);\n\n return value;\n};\n","import { useRef } from \"react\";\nimport isEqual from \"lodash/isEqual\";\n\n/**\n * Hook that memoizes the given value with deep equality.\n * @internal\n */\nexport const useMemoized = <T = unknown,>(value: T): T => {\n const ref = useRef(value);\n\n if (!isEqual(ref.current, value)) {\n ref.current = value;\n }\n\n return ref.current;\n};\n","import React from \"react\";\n\n/**\n * This context is used to determine which router to use.\n *\n * This is a temporary solution until we remove the legacy router.\n */\n\nexport const RouterPickerContext = React.createContext<\"legacy\" | \"new\">(\"new\");\n\nexport const RouterPickerProvider = RouterPickerContext.Provider;\n\n/**\n * This is a temporary hook to determine which router to use.\n * It will be removed once the legacy router is removed.\n * @internal This is an internal hook.\n */\nexport const useRouterType = () => {\n const value = React.useContext(RouterPickerContext);\n return value;\n};\n","import React from \"react\";\nimport { useParse } from \"../use-parse\";\n\nexport const useParsed = () => {\n const parse = useParse();\n\n const parsed = React.useMemo(() => parse(), [parse]);\n\n return parsed;\n};\n","import React, { createContext, PropsWithChildren } from \"react\";\nimport { RouterBindings } from \"src/interfaces\";\n\nconst defaultBindings = {};\n\nexport const RouterBindingsContext =\n createContext<RouterBindings>(defaultBindings);\n\nexport const RouterBindingsProvider: React.FC<\n PropsWithChildren<{ router?: RouterBindings }>\n> = ({ children, router }) => {\n return (\n <RouterBindingsContext.Provider value={router ?? defaultBindings}>\n {children}\n </RouterBindingsContext.Provider>\n );\n};\n","import { RouterBindingsContext } from \"@contexts/router\";\nimport React, { useContext } from \"react\";\nimport { ParseFunction } from \"src/interfaces\";\n\nexport const useParse = () => {\n const bindings = useContext(RouterBindingsContext);\n\n const useParse = React.useMemo(\n () =>\n bindings?.parse ??\n (() =>\n (() => {\n return {};\n }) as ParseFunction),\n [bindings?.parse],\n );\n\n const parse = useParse();\n\n return parse;\n};\n","import { useContext, useCallback } from \"react\";\nimport { ResourceContext } from \"@contexts/resource\";\nimport { IResourceItem } from \"../../../interfaces\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\n\nexport type UseResourceWithRouteReturnType = (route: string) => IResourceItem;\n\n/**\n * @deprecated Use `useResource` hook instead.\n * @internal This hook is for internal use only. And is kept for backward compatibility.\n */\nexport const useResourceWithRoute = (): UseResourceWithRouteReturnType => {\n const { resources } = useContext(ResourceContext);\n\n const resourceWithRoute = useCallback(\n (route: string) => {\n const picked = pickResource(route, resources, true);\n if (picked) {\n return picked;\n }\n return { name: route, route: route } as IResourceItem;\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 { useResource, useDataProvider } from \"@hooks\";\nimport {\n BaseRecord,\n MapDataFn,\n CrudSorting,\n CrudFilters,\n MetaQuery,\n} from \"../../interfaces\";\nimport {\n userFriendlyResourceName,\n pickDataProvider,\n pickNotDeprecated,\n} 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 * @deprecated `resourceName` is deprecated. Use `resource` instead.\n */\n resourceName?: string;\n /**\n * Resource name for API data interactions\n * @default Resource name that it reads from route\n */\n resource?: string;\n /**\n * A mapping function that runs for every record. Mapped data will be included in the file contents\n */\n mapData?: MapDataFn<TData, TVariables>;\n /**\n * Sorts records\n * @deprecated `sorter` is deprecated. Use `sorters` instead.\n */\n sorter?: CrudSorting;\n /**\n * Sorts records\n */\n sorters?: 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 meta?: MetaQuery;\n /**\n * Metadata query for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n /**\n * Callback to handle error events of this hook\n */\n onError?: (error: any) => void;\n};\n\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 resource: resourceFromProps,\n sorter,\n sorters,\n filters,\n maxItemCount,\n pageSize = 20,\n mapData = (item) => item as any,\n exportOptions,\n meta,\n metaData,\n dataProviderName,\n onError,\n}: UseExportOptionsType<TData, TVariables> = {}): UseExportReturnType => {\n const [isLoading, setIsLoading] = useState(false);\n\n const dataProvider = useDataProvider();\n\n const { resource, resources } = useResource();\n\n const filename = `${userFriendlyResourceName(\n resource?.name,\n \"plural\",\n )}-${new Date().toLocaleString()}`;\n\n const { getList } = dataProvider(\n pickDataProvider(\n resource?.identifier ?? resource?.name,\n dataProviderName,\n resources,\n ),\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: resource?.name ?? \"\",\n filters,\n sort: pickNotDeprecated(sorters, sorter),\n sorters: pickNotDeprecated(sorters, sorter),\n pagination: {\n current,\n pageSize,\n mode: \"server\",\n },\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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\";\nimport warnOnce from \"warn-once\";\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 UpdateResponse,\n MutationMode,\n BaseKey,\n IQueryKeys,\n FormAction,\n IResourceItem,\n MetaQuery,\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\";\nimport { useRouterType } from \"@contexts/router-picker\";\nimport { useParsed } from \"@hooks/router/use-parsed\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\nimport { useResource } from \"../resource/useResource\";\nimport { pickNotDeprecated } 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 meta?: MetaQuery;\n /**\n * Metadata query for dataProvider\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\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 UpdateResponse<TData> | CreateResponse<TData>,\n TError,\n { id: BaseKey; values: TVariables } | TVariables\n> &\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 routeParams?: Record<string, string | number>,\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 meta,\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 { resources } = useResource();\n const routerType = useRouterType();\n const {\n resource: resourceFromRouter,\n id: idFromRouter,\n action: actionFromRouter,\n } = useParsed();\n const { useParams } = useRouterContext();\n const {\n resource: legacyResourceFromRoute,\n action: legacyActionFromRoute,\n id: legacyIdFromParams,\n } = useParams<ResourceRouterParams>();\n\n const newResourceNameFromRouter =\n typeof resourceFromRouter === \"string\"\n ? resourceFromRouter\n : resourceFromRouter?.name;\n\n /** We only accept `id` from URL params if `resource` is not explicitly passed. */\n /** This is done to avoid sending wrong requests for custom `resource` and an async `id` */\n const defaultId =\n !resourceFromProps ||\n resourceFromProps ===\n (routerType === \"legacy\"\n ? legacyResourceFromRoute\n : newResourceNameFromRouter)\n ? idFromProps ??\n (routerType === \"legacy\" ? legacyIdFromParams : idFromRouter)\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 /**\n * In some cases, `id` from the router params is not available at the first render.\n *\n * (e.g. when using `Next.js` and client-side-rendering, `router` is not ready to use at the first render)\n *\n * We're watching for `defaultId` changes and setting `id` state if it's not equal to `defaultId`.\n */\n React.useEffect(() => {\n setId(defaultId);\n }, [defaultId]);\n\n /** `resourceName` fallback value depends on the router type */\n const resourceName =\n resourceFromProps ??\n (routerType === \"legacy\"\n ? legacyResourceFromRoute\n : newResourceNameFromRouter);\n /** `action` fallback value depends on the router type */\n /**\n * In earlier versions, we've trivially inferred the action type as `create` in `show` types.\n * This is probably done to cover cases with modals and drawers.\n *\n * This is not right, as we should not do trivial inference of the action type.\n * Users should explicitly pass the action type when needed.\n */\n const fallbackAction =\n routerType === \"legacy\" ? legacyActionFromRoute : actionFromRouter;\n const action =\n actionFromProps ??\n (fallbackAction === \"edit\" || fallbackAction === \"clone\"\n ? fallbackAction\n : \"create\");\n\n const resourceWithRoute = useResourceWithRoute();\n let resource: IResourceItem | undefined;\n\n if (routerType === \"legacy\") {\n if (resourceName) {\n resource = resourceWithRoute(resourceName);\n }\n } else {\n /** If `resource` is provided by the user, then try to pick the resource of create a dummy one */\n if (resourceFromProps) {\n const picked = pickResource(resourceFromProps, resources);\n if (picked) {\n resource = picked;\n } else {\n resource = {\n name: resourceFromProps,\n route: resourceFromProps,\n };\n }\n } else {\n /** If `resource` is not provided, check the resource from the router params */\n if (typeof resourceFromRouter === \"string\") {\n const picked = pickResource(resourceFromRouter, resources);\n if (picked) {\n resource = picked;\n } else {\n resource = {\n name: resourceFromRouter,\n route: resourceFromRouter,\n };\n }\n } else {\n /** If `resource` is passed as an IResourceItem, use it or `resource` is undefined and cannot be inferred. */\n resource = resourceFromRouter;\n }\n }\n }\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 warnOnce(\n (isClone || isEdit) &&\n Boolean(resourceFromProps) &&\n !Boolean(idFromProps),\n `[useForm]: action: \"${action}\", resource: \"${resourceName}\", id: ${id} \\n\\n` +\n `If you don't use the \\`setId\\` method to set the \\`id\\`, you should pass the \\`id\\` prop to \\`useForm\\`. Otherwise, \\`useForm\\` will not be able to infer the \\`id\\` from the current URL. \\n\\n` +\n `See https://refine.dev/docs/api-reference/core/hooks/useForm/#resource`,\n );\n\n /**\n * Designated `redirect` route\n */\n const designatedRedirectAction = 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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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: designatedRedirectAction,\n resource,\n id,\n meta: metaData,\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\n if (!resource) return;\n\n return mutateCreate(\n {\n values,\n resource: resource.name,\n successNotification,\n errorNotification,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 if (!resource) return;\n\n const variables: UpdateParams<TData, TError, TVariables> = {\n id: id ?? \"\",\n values,\n resource: resource.name,\n mutationMode,\n undoableTimeout,\n successNotification,\n errorNotification,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n dataProviderName,\n invalidates,\n };\n\n const onSuccess = () => {\n handleSubmitWithRedirect({\n redirect: designatedRedirectAction,\n resource,\n id,\n meta: metaData,\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 meta: metaData,\n });\n },\n };\n};\n","import { useCallback } from \"react\";\n\nimport {\n BaseKey,\n IResourceItem,\n MetaDataQuery,\n RedirectAction,\n} from \"../../interfaces\";\nimport { useNavigation } from \"@hooks\";\n\nexport type UseRedirectionAfterSubmissionType = () => (options: {\n redirect: RedirectAction;\n resource?: IResourceItem;\n id?: BaseKey;\n meta?: MetaDataQuery;\n}) => void;\n\nexport const useRedirectionAfterSubmission: UseRedirectionAfterSubmissionType =\n () => {\n const { show, edit, list, create } = useNavigation();\n\n const handleSubmitWithRedirect = useCallback(\n ({\n redirect,\n resource,\n id,\n meta = {},\n }: {\n redirect: RedirectAction;\n resource?: IResourceItem;\n id?: BaseKey;\n meta?: MetaDataQuery;\n }) => {\n if (redirect && resource) {\n if (!!resource.show && redirect === \"show\" && id) {\n return show(resource, id, undefined, meta);\n }\n\n if (!!resource.edit && redirect === \"edit\" && id) {\n return edit(resource, id, undefined, meta);\n }\n\n if (!!resource.create && redirect === \"create\") {\n return create(resource, undefined, meta);\n }\n\n return list(resource, \"push\", meta);\n } else {\n return;\n }\n },\n [],\n );\n\n return handleSubmitWithRedirect;\n };\n","import { RouterBindingsContext } from \"@contexts/router\";\nimport React, { useContext } from \"react\";\n\nexport const useGo = () => {\n const bindings = useContext(RouterBindingsContext);\n\n const useGo = React.useMemo(\n () => bindings?.go ?? (() => () => undefined),\n [bindings?.go],\n );\n\n const go = useGo();\n\n return go;\n};\n","import { RouterBindingsContext } from \"@contexts/router\";\nimport React, { useContext } from \"react\";\n\nexport const useBack = () => {\n const bindings = useContext(RouterBindingsContext);\n\n const useBack = React.useMemo(\n () => bindings?.back ?? (() => () => undefined),\n [bindings?.back],\n );\n\n const back = useBack();\n\n return back;\n};\n","import { useRouterContext, useResource } from \"@hooks\";\nimport { BaseKey, IResourceItem, MetaDataQuery } from \"../../interfaces\";\nimport { useGo } from \"@hooks/router/use-go\";\nimport { useParsed } from \"@hooks/router/use-parsed\";\nimport { useRouterType } from \"@contexts/router-picker\";\nimport { getActionRoutesFromResource } from \"@definitions/helpers/router\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\nimport { composeRoute } from \"@definitions/helpers/router/compose-route\";\nimport { useBack } from \"@hooks/router/use-back\";\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 * @internal This is an internal hook of refine. Do not use it directly.\n *\n * @see {@link https://refine.dev/docs/core/hooks/navigation/useNavigation} for more details.\n */\nexport const useNavigation = () => {\n const { resources } = useResource();\n const routerType = useRouterType();\n const { useHistory } = useRouterContext();\n const history = useHistory();\n const parsed = useParsed();\n const go = useGo();\n const back = useBack();\n\n const handleUrl = (url: string, type: HistoryType = \"push\") => {\n if (routerType === \"legacy\") {\n history[type](url);\n } else {\n go({ to: url, type });\n }\n };\n\n const createUrl = (\n resource: string | IResourceItem,\n meta: MetaDataQuery = {},\n ) => {\n if (routerType === \"legacy\") {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources, true) ?? {\n name: resource,\n route: resource,\n }\n : resource;\n\n const createActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n true,\n ).find((r) => r.action === \"create\");\n\n if (!createActionRoute) {\n return \"\";\n }\n\n return composeRoute(createActionRoute.route, parsed, meta);\n } else {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const createActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"create\")?.route;\n\n if (!createActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(createActionRoute, parsed, meta),\n type: \"path\",\n }) as string;\n }\n };\n\n const editUrl = (\n resource: string | IResourceItem,\n id: BaseKey,\n meta: MetaDataQuery = {},\n ) => {\n const encodedId = encodeURIComponent(id);\n if (routerType === \"legacy\") {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources, true) ?? {\n name: resource,\n route: resource,\n }\n : resource;\n\n const editActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n true,\n ).find((r) => r.action === \"edit\");\n\n if (!editActionRoute) {\n return \"\";\n }\n\n return composeRoute(editActionRoute.route, parsed, {\n ...meta,\n id: encodedId,\n });\n } else {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const editActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"edit\")?.route;\n\n if (!editActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(editActionRoute, parsed, {\n ...meta,\n id: encodedId,\n }),\n type: \"path\",\n }) as string;\n }\n };\n\n const cloneUrl = (\n resource: string | IResourceItem,\n id: BaseKey,\n meta: MetaDataQuery = {},\n ) => {\n const encodedId = encodeURIComponent(id);\n\n if (routerType === \"legacy\") {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources, true) ?? {\n name: resource,\n route: resource,\n }\n : resource;\n\n const cloneActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n true,\n ).find((r) => r.action === \"clone\");\n\n if (!cloneActionRoute) {\n return \"\";\n }\n\n return composeRoute(cloneActionRoute.route, parsed, {\n ...meta,\n id: encodedId,\n });\n } else {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const cloneActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"clone\")?.route;\n\n if (!cloneActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(cloneActionRoute, parsed, {\n ...meta,\n id: encodedId,\n }),\n type: \"path\",\n }) as string;\n }\n };\n\n const showUrl = (\n resource: string | IResourceItem,\n id: BaseKey,\n meta: MetaDataQuery = {},\n ) => {\n const encodedId = encodeURIComponent(id);\n if (routerType === \"legacy\") {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources, true) ?? {\n name: resource,\n route: resource,\n }\n : resource;\n\n const showActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n true,\n ).find((r) => r.action === \"show\");\n\n if (!showActionRoute) {\n return \"\";\n }\n\n return composeRoute(showActionRoute.route, parsed, {\n ...meta,\n id: encodedId,\n });\n } else {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const showActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"show\")?.route;\n\n if (!showActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(showActionRoute, parsed, {\n ...meta,\n id: encodedId,\n }),\n type: \"path\",\n }) as string;\n }\n };\n\n const listUrl = (\n resource: string | IResourceItem,\n meta: MetaDataQuery = {},\n ) => {\n if (routerType === \"legacy\") {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources, true) ?? {\n name: resource,\n route: resource,\n }\n : resource;\n\n const listActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n true,\n ).find((r) => r.action === \"list\");\n\n if (!listActionRoute) {\n return \"\";\n }\n\n return composeRoute(listActionRoute.route, parsed, meta);\n } else {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const listActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"list\")?.route;\n\n if (!listActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(listActionRoute, parsed, meta),\n type: \"path\",\n }) as string;\n }\n };\n\n const create = (\n resource: string | IResourceItem,\n type: HistoryType = \"push\",\n meta: MetaDataQuery = {},\n ) => {\n handleUrl(createUrl(resource, meta), type);\n };\n\n const edit = (\n resource: string | IResourceItem,\n id: BaseKey,\n type: HistoryType = \"push\",\n meta: MetaDataQuery = {},\n ) => {\n handleUrl(editUrl(resource, id, meta), type);\n };\n\n const clone = (\n resource: string | IResourceItem,\n id: BaseKey,\n type: HistoryType = \"push\",\n meta: MetaDataQuery = {},\n ) => {\n handleUrl(cloneUrl(resource, id, meta), type);\n };\n\n const show = (\n resource: string | IResourceItem,\n id: BaseKey,\n type: HistoryType = \"push\",\n meta: MetaDataQuery = {},\n ) => {\n handleUrl(showUrl(resource, id, meta), type);\n };\n\n const list = (\n resource: string | IResourceItem,\n type: HistoryType = \"push\",\n meta: MetaDataQuery = {},\n ) => {\n handleUrl(listUrl(resource, meta), type);\n };\n\n /**\n * @deprecated Please use `useGo` hook instead.\n */\n const push = (path: string, ...rest: unknown[]) => {\n if (routerType === \"legacy\") {\n history.push(path, ...rest);\n } else {\n go({ to: path, type: \"push\" });\n }\n };\n\n /**\n * @deprecated Please use `useGo` hook instead.\n */\n const replace = (path: string, ...rest: unknown[]) => {\n if (routerType === \"legacy\") {\n history.replace(path, ...rest);\n } else {\n go({ to: path, type: \"replace\" });\n }\n };\n\n /**\n * @deprecated Please use `useBack` hook instead.\n */\n const goBack = () => {\n if (routerType === \"legacy\") {\n history.goBack();\n } else {\n back();\n }\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\";\nimport warnOnce from \"warn-once\";\n\nimport { useOne, useResourceWithRoute, useRouterContext } from \"@hooks\";\n\nimport {\n ResourceRouterParams,\n BaseRecord,\n GetOneResponse,\n SuccessErrorNotification,\n MetaQuery,\n LiveModeProps,\n BaseKey,\n HttpError,\n IResourceItem,\n Prettify,\n} from \"../../interfaces\";\nimport { useRouterType } from \"@contexts/router-picker\";\nimport { useParsed } from \"@hooks/router/use-parsed\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\nimport { useResource } from \"../resource/useResource\";\nimport { pickNotDeprecated } from \"@definitions/helpers\";\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>, TError>;\n /**\n * Additional meta data to pass to the data provider's `getOne`\n */\n meta?: MetaQuery;\n /**\n * Additional meta data to pass to the data provider's `getOne`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * Target data provider name for API call to be made\n * @default `\"default\"`\n */\n dataProviderName?: string;\n} & LiveModeProps &\n SuccessErrorNotification<\n GetOneResponse<TData>,\n TError,\n Prettify<{ id?: BaseKey } & MetaQuery>\n >;\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 meta,\n metaData,\n liveMode,\n onLiveEvent,\n dataProviderName,\n queryOptions,\n}: useShowProps<TData, TError> = {}): useShowReturnType<TData> => {\n const routerType = useRouterType();\n const { resources } = useResource();\n const { useParams } = useRouterContext();\n const { resource: resourceFromRouter, id: idFromRouter } = useParsed();\n\n const { resource: legacyResourceFromRoute, id: legacyIdFromParams } =\n useParams<ResourceRouterParams>();\n\n const newResourceNameFromRouter = resourceFromRouter?.name;\n\n /** We only accept `id` from URL params if `resource` is not explicitly passed. */\n /** This is done to avoid sending wrong requests for custom `resource` and an async `id` */\n const defaultId =\n !resourceFromProp ||\n resourceFromProp ===\n (routerType === \"legacy\"\n ? legacyResourceFromRoute\n : newResourceNameFromRouter)\n ? id ??\n (routerType === \"legacy\" ? legacyIdFromParams : idFromRouter)\n : id;\n\n const [showId, setShowId] = useState<BaseKey | undefined>(defaultId);\n\n React.useEffect(() => {\n setShowId(defaultId);\n }, [defaultId]);\n\n /** `resourceName` fallback value depends on the router type */\n const resourceName =\n resourceFromProp ??\n (routerType === \"legacy\"\n ? legacyResourceFromRoute\n : newResourceNameFromRouter);\n\n let resource: IResourceItem | undefined;\n\n const resourceWithRoute = useResourceWithRoute();\n\n if (routerType === \"legacy\") {\n if (resourceName) {\n resource = resourceWithRoute(resourceName);\n }\n } else {\n /** If `resource` is provided by the user, then try to pick the resource of create a dummy one */\n if (resourceFromProp) {\n const picked = pickResource(resourceFromProp, resources);\n if (picked) {\n resource = picked;\n } else {\n resource = {\n name: resourceFromProp,\n route: resourceFromProp,\n };\n }\n } else {\n /** If `resource` is not provided, check the resource from the router params */\n if (typeof resourceFromRouter === \"string\") {\n const picked = pickResource(resourceFromRouter, resources);\n if (picked) {\n resource = picked;\n } else {\n resource = {\n name: resourceFromRouter,\n route: resourceFromRouter,\n };\n }\n } else {\n /** If `resource` is passed as an IResourceItem, use it or `resource` is undefined and cannot be inferred. */\n resource = resourceFromRouter;\n }\n }\n }\n\n warnOnce(\n Boolean(resourceFromProp) && !Boolean(id),\n `[useShow]: resource: \"${resourceName}\", id: ${id} \\n\\n` +\n `If you don't use the \\`setShowId\\` method to set the \\`showId\\`, you should pass the \\`id\\` prop to \\`useShow\\`. Otherwise, \\`useShow\\` will not be able to infer the \\`id\\` from the current URL. \\n\\n` +\n `See https://refine.dev/docs/api-reference/core/hooks/show/useShow/#resource`,\n );\n\n const queryResult = useOne<TData, TError>({\n resource: resource?.name,\n id: showId ?? \"\",\n queryOptions: {\n enabled: showId !== undefined,\n ...queryOptions,\n },\n successNotification,\n errorNotification,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 { useCreate, useCreateMany, useResource } from \"@hooks\";\nimport { MapDataFn, BaseRecord, HttpError, MetaQuery } from \"../../interfaces\";\nimport {\n importCSVMapper,\n sequentialPromises,\n pickNotDeprecated,\n} 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 * @deprecated `resourceName` is deprecated. Use `resource` instead.\n */\n resourceName?: string;\n /**\n * Resource name for API data interactions.\n * @default Resource name that it reads from route\n */\n resource?: string;\n /**\n * A mapping function that runs for every record. Mapped data will be included in the file contents.\n */\n mapData?: MapDataFn<TItem, TVariables>;\n /**\n * Custom Papa Parse options.\n * @type [`ParseConfig`](https://www.papaparse.com/docs)\n */\n paparseOptions?: ParseConfig;\n /**\n * Requests batch size. If it is 1, all records are sent one by one. By default, it is [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER) to send all records in one batch. If it is more than 1, `createMany` should be implemented on DataProvider.\n */\n batchSize?: number;\n /**\n * Called with errors and successful responses when all requests are sent.\n */\n onFinish?: (results: OnFinishParams<TVariables, TData>) => void;\n /**\n * Metadata query for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Metadata query for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\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 resource: resourceFromProps,\n mapData = (item) => item as unknown as TVariables,\n paparseOptions,\n batchSize = Number.MAX_SAFE_INTEGER,\n onFinish,\n meta,\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 { resource } = useResource(resourceFromProps ?? resourceName);\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: resource?.name ?? \"\",\n values: value,\n successNotification: false,\n errorNotification: false,\n dataProviderName,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(\n meta,\n metaData,\n ),\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: resource?.name ?? \"\",\n values: chunkedValues,\n successNotification: false,\n errorNotification: false,\n dataProviderName,\n meta: pickNotDeprecated(\n meta,\n metaData,\n ),\n metaData: pickNotDeprecated(\n meta,\n metaData,\n ),\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 React from \"react\";\nimport { useResource } from \"../../resource\";\nimport { Action, IResourceItem } from \"../../../interfaces\";\nimport { getActionRoutesFromResource } from \"../../../definitions/helpers/router\";\nimport { useParsed } from \"../use-parsed\";\nimport { composeRoute } from \"../../../definitions/helpers/router/compose-route\";\nimport { useRouterType } from \"./../../../contexts/router-picker\";\n\ntype UseToPathParams = {\n resource?: IResourceItem;\n action: Action;\n meta?: Record<string, unknown>;\n legacy?: boolean;\n};\n\ntype GetToPathFn = (params: UseToPathParams) => string | undefined;\n\n/**\n * Returns a function to get the route for a given action and resource.\n * If resource is not provided, it will use the resource from the route.\n * If the resource is not found, it will return undefined.\n * If the action is not found, it will return undefined.\n * `meta` can be provided to compose the routes with parameters. (Can be used for nested routes.)\n */\nexport const useGetToPath = (): GetToPathFn => {\n const routerType = useRouterType();\n const { resource: resourceFromRoute, resources } = useResource();\n const parsed = useParsed();\n\n const fn = React.useCallback(\n ({ resource, action, meta }: UseToPathParams): string | undefined => {\n const selectedResource = resource || resourceFromRoute;\n\n if (!selectedResource) {\n return undefined;\n }\n\n const actionRoutes = getActionRoutesFromResource(\n selectedResource,\n resources,\n routerType === \"legacy\",\n );\n\n const actionRoute = actionRoutes.find(\n (item) => item.action === action,\n )?.route;\n\n if (!actionRoute) {\n return undefined;\n }\n\n const composed = composeRoute(actionRoute, parsed, meta);\n\n return composed;\n },\n [resources, resourceFromRoute, parsed],\n );\n\n return fn;\n};\n","import { Action, IResourceItem } from \"../../../interfaces\";\nimport { useGetToPath } from \"../use-get-to-path\";\n\ntype UseToPathParams = {\n resource?: IResourceItem;\n action: Action;\n meta?: Record<string, unknown>;\n legacy?: boolean;\n};\n\n/**\n * Returns the route for a given action and resource.\n * If resource is not provided, it will use the resource from the route.\n * If the resource is not found, it will return undefined.\n * If the action is not found, it will return undefined.\n * `meta` can be provided to compose the routes with parameters. (Can be used for nested routes.)\n */\nexport const useToPath = ({\n resource,\n action,\n meta,\n legacy,\n}: UseToPathParams): string | undefined => {\n const getToPath = useGetToPath();\n\n return getToPath({ resource, action, meta, legacy });\n};\n","import { RouterBindingsContext } from \"@contexts/router\";\nimport React, { useContext } from \"react\";\n\nexport const useLink = () => {\n const bindings = useContext(RouterBindingsContext);\n\n if (bindings?.Link) {\n return bindings.Link;\n }\n\n const FallbackLink: Required<typeof bindings>[\"Link\"] = ({\n to,\n ...rest\n }) => <a href={to} {...rest} />;\n\n return FallbackLink;\n};\n","import { useContext } from \"react\";\nimport { RouterContext, defaultProvider } from \"@contexts/legacy-router\";\n\nexport const useRouterContext = () => {\n const routerContextValues = useContext(RouterContext);\n\n const { useHistory, useLocation, useParams, Prompt, Link, routes } =\n routerContextValues ?? defaultProvider;\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 LegacyRouterContext =\n React.createContext<IRouterContext>(defaultProvider);\n\nexport const RouterContext = LegacyRouterContext;\n\nexport const LegacyRouterContextProvider: React.FC<\n Partial<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: useHistory ?? defaultProvider.useHistory,\n useLocation: useLocation ?? defaultProvider.useLocation,\n useParams: useParams ?? defaultProvider.useParams,\n Prompt: Prompt ?? defaultProvider.Prompt,\n Link: Link ?? defaultProvider.Link,\n routes: routes ?? defaultProvider.routes,\n }}\n >\n {children}\n </RouterContext.Provider>\n );\n};\n","import {\n useQuery,\n UseQueryOptions,\n UseQueryResult,\n} from \"@tanstack/react-query\";\nimport { useContext } from \"react\";\n\nimport { AccessControlContext } from \"@contexts/accessControl\";\nimport { sanitizeResource } from \"@definitions/helpers/sanitize-resource\";\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 sanitizedResource = sanitizeResource(_resource ?? {});\n\n /* eslint-enable @typescript-eslint/no-unused-vars */\n const queryResponse = useQuery<CanReturnType>(\n [\n \"useCan\",\n {\n action,\n resource,\n params: { ...paramsRest, resource: sanitizedResource },\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: paramsRest }) ??\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 { IResourceItem } from \"../../../interfaces/bindings/resource\";\n\n/**\n * Remove all properties that are non-serializable from a resource object.\n */\nexport const sanitizeResource = (\n resource: Partial<IResourceItem> & { children?: unknown },\n): Partial<IResourceItem> => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n icon,\n list,\n edit,\n create,\n show,\n clone,\n children,\n meta,\n options,\n ...restResource\n } = resource;\n\n const { icon: _metaIcon, ...restMeta } = meta ?? {};\n const { icon: _optionsIcon, ...restOptions } = options ?? {};\n\n return {\n ...restResource,\n ...(meta ? { meta: restMeta } : {}),\n ...(options ? { options: restOptions } : {}),\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 LiveModeProps,\n BaseKey,\n Pagination,\n MetaQuery,\n Prettify,\n} from \"../../interfaces\";\nimport { pickNotDeprecated } from \"@definitions/helpers\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\nimport { useResource } from \"../resource/useResource/index\";\nimport { BaseListProps } from \"../data/useList\";\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?: keyof TData extends string ? keyof TData : never;\n /**\n * Set the option's label value\n * @default `\"id\"`\n */\n optionValue?: keyof TData extends string ? keyof TData : never;\n /**\n * Allow us to sort the options\n * @deprecated Use `sorters` instead\n */\n sort?: CrudSorting;\n /**\n * Allow us to sort the options\n */\n sorters?: 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?: Prettify<\n Omit<Pagination, \"mode\"> & {\n /**\n * Whether to use server side pagination or not.\n * @default \"off\"\n */\n mode?: Pagination[\"mode\"];\n }\n >;\n /**\n * Disabling pagination option from [`useList()`](/docs/api-reference/core/hooks/data/useList/)\n * @type boolean\n * @default `false`\n * @deprecated `hasPagination` is deprecated, use `pagination.mode` instead.\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 * Additional meta data to pass to the `useMany` from the data provider\n */\n meta?: MetaQuery;\n /**\n * Additional meta data to pass to the `useMany` from the data provider\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default `default`\n */\n dataProviderName?: string;\n /**\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 GetListResponse<TData>,\n TError,\n Prettify<BaseListProps>\n> &\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: resourceFromProps,\n sort,\n sorters,\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 = false,\n liveMode,\n defaultValue = [],\n onLiveEvent,\n onSearch: onSearchFromProp,\n liveParams,\n meta,\n metaData,\n dataProviderName,\n } = props;\n\n const { resources } = useResource();\n\n /**\n * Since `identifier` is an optional but prioritized way to match resources, users can provide identifier instead of resource name.\n */\n const pickedResource = pickResource(resourceFromProps, resources);\n\n const resource = pickedResource?.name ?? resourceFromProps;\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) as string,\n value: get(item, optionValue) as string,\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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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) as string,\n value: get(item, optionValue) as string,\n })),\n );\n }\n },\n [optionLabel, optionValue],\n );\n\n const queryResult = useList<TData, TError>({\n resource,\n sorters: pickNotDeprecated(sorters, sort),\n filters: filters.concat(search),\n pagination: {\n current: pagination?.current,\n pageSize: pagination?.pageSize ?? fetchSize,\n mode: pagination?.mode,\n },\n hasPagination,\n queryOptions: {\n ...queryOptions,\n onSuccess: (data) => {\n defaultQueryOnSuccess(data);\n queryOptions?.onSuccess?.(data);\n },\n },\n successNotification,\n errorNotification,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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, { 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\";\nimport warnOnce from \"warn-once\";\n\nimport {\n useRouterContext,\n useSyncWithLocation,\n useNavigation,\n useList,\n useLiveMode,\n useRouterType,\n useResource,\n useParsed,\n} from \"@hooks\";\nimport {\n stringifyTableParams,\n parseTableParams,\n unionFilters,\n setInitialFilters,\n setInitialSorters,\n unionSorters,\n} from \"@definitions/table\";\nimport { pickNotDeprecated } from \"@definitions/helpers\";\n\nimport {\n BaseRecord,\n CrudFilters,\n CrudSorting,\n GetListResponse,\n SuccessErrorNotification,\n HttpError,\n MetaQuery,\n LiveModeProps,\n Pagination,\n Prettify,\n} from \"../../interfaces\";\nimport { useGo } from \"@hooks/router/use-go\";\nimport { BaseListProps } from \"../data/useList\";\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 * Configuration for pagination\n */\n pagination?: Pagination;\n /**\n * Initial page index\n * @default 1\n * @deprecated `initialCurrent` property is deprecated. Use `pagination.current` instead.\n */\n initialCurrent?: number;\n /**\n * Initial number of items per page\n * @default 10\n * @deprecated `initialPageSize` property is deprecated. Use `pagination.pageSize` instead.\n */\n initialPageSize?: number;\n /**\n * Sort configs\n */\n sorters?: {\n /**\n * Initial sorter state\n */\n initial?: CrudSorting;\n /**\n * Default and unchangeable sorter state\n * @default `[]`\n */\n permanent?: CrudSorting;\n };\n /**\n * Initial sorter state\n * @deprecated `initialSorter` property is deprecated. Use `sorters.initial` instead.\n */\n initialSorter?: CrudSorting;\n /**\n * Default and unchangeable sorter state\n * @default `[]`\n * @deprecated `permanentSorter` property is deprecated. Use `sorters.permanent` instead.\n */\n permanentSorter?: CrudSorting;\n /**\n * Filter configs\n */\n filters?: {\n /**\n * Initial filter state\n */\n initial?: CrudFilters;\n /**\n * Default and unchangeable filter state\n * @default `[]`\n */\n permanent?: CrudFilters;\n /**\n * Default behavior of the `setFilters` function\n * @default `\"merge\"`\n */\n defaultBehavior?: SetFilterBehavior;\n };\n /**\n * Initial filter state\n * @deprecated `initialFilter` property is deprecated. Use `filters.initial` instead.\n */\n initialFilter?: CrudFilters;\n /**\n * Default and unchangeable filter state\n * @default `[]`\n * @deprecated `permanentFilter` property is deprecated. Use `filters.permanent` instead.\n */\n permanentFilter?: CrudFilters;\n /**\n * Default behavior of the `setFilters` function\n * @default `\"merge\"`\n * @deprecated `defaultSetFilterBehavior` property is deprecated. Use `filters.defaultBehavior` instead.\n */\n defaultSetFilterBehavior?: SetFilterBehavior;\n /**\n * Whether to use server side pagination or not.\n * @default `true`\n * @deprecated `hasPagination` property is deprecated. Use `pagination.mode` instead.\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 meta?: MetaQuery;\n /**\n * Metadata query for dataProvider\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<\n GetListResponse<TData>,\n TError,\n Prettify<BaseListProps>\n> &\n LiveModeProps;\n\ntype ReactSetState<T> = React.Dispatch<React.SetStateAction<T>>;\n\ntype SyncWithLocationParams = {\n pagination: { current?: number; pageSize?: number };\n /**\n * @deprecated `sorter` is deprecated. Use `sorters` instead.\n */\n sorter?: CrudSorting;\n sorters: CrudSorting;\n filters: CrudFilters;\n};\n\nexport type useTableReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n> = {\n tableQueryResult: QueryObserverResult<GetListResponse<TData>, TError>;\n /**\n * @deprecated `sorter` is deprecated. Use `sorters` instead.\n */\n sorter: CrudSorting;\n sorters: CrudSorting;\n /**\n * @deprecated `setSorter` is deprecated. Use `setSorters` instead.\n */\n setSorter: (sorter: CrudSorting) => void;\n setSorters: (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\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\nexport function useTable<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n>({\n initialCurrent,\n initialPageSize,\n hasPagination = true,\n pagination,\n initialSorter,\n permanentSorter = defaultPermanentSorter,\n defaultSetFilterBehavior,\n initialFilter,\n permanentFilter = defaultPermanentFilter,\n filters: filtersFromProp,\n sorters: sortersFromProp,\n syncWithLocation: syncWithLocationProp,\n resource: resourceFromProp,\n successNotification,\n errorNotification,\n queryOptions,\n liveMode: liveModeFromProp,\n onLiveEvent,\n liveParams,\n meta,\n metaData,\n dataProviderName,\n}: useTableProps<TData, TError> = {}): useTableReturnType<TData, TError> {\n const { syncWithLocation: syncWithLocationContext } = useSyncWithLocation();\n\n const syncWithLocation = syncWithLocationProp ?? syncWithLocationContext;\n\n const liveMode = useLiveMode(liveModeFromProp);\n\n const routerType = useRouterType();\n const { useLocation } = useRouterContext();\n const { search, pathname } = useLocation();\n\n const parsedParams = useParsed();\n\n const hasPaginationString = hasPagination === false ? \"off\" : \"server\";\n const isPaginationEnabled =\n (pagination?.mode ?? hasPaginationString) !== \"off\";\n const prefferedCurrent = pickNotDeprecated(\n pagination?.current,\n initialCurrent,\n );\n const prefferedPageSize = pickNotDeprecated(\n pagination?.pageSize,\n initialPageSize,\n );\n const preferredMeta = pickNotDeprecated(meta, metaData);\n\n /** `parseTableParams` is redundant with the new routing */\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 preferredInitialFilters = pickNotDeprecated(\n filtersFromProp?.initial,\n initialFilter,\n );\n const preferredPermanentFilters =\n pickNotDeprecated(filtersFromProp?.permanent, permanentFilter) ??\n defaultPermanentFilter;\n\n const preferredInitialSorters = pickNotDeprecated(\n sortersFromProp?.initial,\n initialSorter,\n );\n const preferredPermanentSorters =\n pickNotDeprecated(sortersFromProp?.permanent, permanentSorter) ??\n defaultPermanentSorter;\n\n const prefferedFilterBehavior =\n pickNotDeprecated(\n filtersFromProp?.defaultBehavior,\n defaultSetFilterBehavior,\n ) ?? \"merge\";\n\n let defaultCurrent: number;\n let defaultPageSize: number;\n let defaultSorter: CrudSorting | undefined;\n let defaultFilter: CrudFilters | undefined;\n\n if (syncWithLocation) {\n defaultCurrent =\n parsedParams?.params?.current ||\n parsedCurrent ||\n prefferedCurrent ||\n 1;\n defaultPageSize =\n parsedParams?.params?.pageSize ||\n parsedPageSize ||\n prefferedPageSize ||\n 10;\n defaultSorter =\n parsedParams?.params?.sorters ||\n (parsedSorter.length ? parsedSorter : preferredInitialSorters);\n defaultFilter =\n parsedParams?.params?.filters ||\n (parsedFilters.length ? parsedFilters : preferredInitialFilters);\n } else {\n defaultCurrent = prefferedCurrent || 1;\n defaultPageSize = prefferedPageSize || 10;\n defaultSorter = preferredInitialSorters;\n defaultFilter = preferredInitialFilters;\n }\n\n const { replace } = useNavigation();\n /** New way of `replace` calls to the router is using `useGo` */\n const go = useGo();\n\n const { resource } = useResource(resourceFromProp);\n\n const resourceInUse = resource?.name;\n\n React.useEffect(() => {\n warnOnce(\n typeof resourceInUse === \"undefined\",\n `useTable: \\`resource\\` is not defined.`,\n );\n }, [resourceInUse]);\n\n const [sorters, setSorters] = useState<CrudSorting>(\n setInitialSorters(preferredPermanentSorters, defaultSorter ?? []),\n );\n const [filters, setFilters] = useState<CrudFilters>(\n setInitialFilters(preferredPermanentFilters, 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 if (routerType === \"new\") {\n return (\n go({\n type: \"path\",\n options: {\n keepHash: true,\n keepQuery: true,\n },\n query: {\n ...(isPaginationEnabled ? { current, pageSize } : {}),\n sorters: sorter,\n filters,\n ...currentQueryParams(),\n },\n }) ?? \"\"\n );\n } else {\n const currentQueryParams = qs.parse(search?.substring(1)); // remove first ? character\n\n const stringifyParams = stringifyTableParams({\n pagination: {\n pageSize,\n current,\n },\n sorters: sorters ?? sorter,\n filters,\n ...currentQueryParams,\n });\n return `${pathname ?? \"\"}?${stringifyParams ?? \"\"}`;\n }\n };\n\n useEffect(() => {\n if (search === \"\") {\n setCurrent(defaultCurrent);\n setPageSize(defaultPageSize);\n setSorters(\n setInitialSorters(\n preferredPermanentSorters,\n defaultSorter ?? [],\n ),\n );\n setFilters(\n setInitialFilters(\n preferredPermanentFilters,\n defaultFilter ?? [],\n ),\n );\n }\n }, [search]);\n\n const currentQueryParams = (): object => {\n if (routerType === \"new\") {\n // We get QueryString parameters that are uncontrolled by refine.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { sorters, filters, pageSize, current, ...rest } =\n parsedParams?.params ?? {};\n\n return rest;\n } else {\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\n useEffect(() => {\n if (syncWithLocation) {\n // Careful! This triggers render\n const queryParams = currentQueryParams();\n\n if (routerType === \"new\") {\n go({\n type: \"replace\",\n options: {\n keepQuery: true,\n },\n query: {\n ...(isPaginationEnabled ? { pageSize, current } : {}),\n sorters: differenceWith(\n sorters,\n preferredPermanentSorters,\n isEqual,\n ),\n filters: differenceWith(\n filters,\n preferredPermanentFilters,\n isEqual,\n ),\n // ...queryParams,\n },\n });\n } else {\n const stringifyParams = stringifyTableParams({\n ...(isPaginationEnabled\n ? {\n pagination: {\n pageSize,\n current,\n },\n }\n : {}),\n sorters: differenceWith(\n sorters,\n preferredPermanentSorters,\n isEqual,\n ),\n filters: differenceWith(\n filters,\n preferredPermanentFilters,\n isEqual,\n ),\n ...queryParams,\n });\n return replace?.(`${pathname}?${stringifyParams}`, undefined, {\n shallow: true,\n });\n }\n }\n }, [syncWithLocation, current, pageSize, sorters, filters]);\n\n const queryResult = useList<TData, TError>({\n resource: resourceInUse,\n hasPagination,\n pagination: { current, pageSize, mode: pagination?.mode },\n filters: unionFilters(preferredPermanentFilters, filters),\n sorters: unionSorters(preferredPermanentSorters, sorters),\n queryOptions,\n successNotification,\n errorNotification,\n meta: preferredMeta,\n metaData: preferredMeta,\n liveMode,\n liveParams,\n onLiveEvent,\n dataProviderName,\n });\n\n const setFiltersAsMerge = (newFilters: CrudFilters) => {\n setFilters((prevFilters) =>\n unionFilters(preferredPermanentFilters, newFilters, prevFilters),\n );\n };\n\n const setFiltersAsReplace = (newFilters: CrudFilters) => {\n setFilters(unionFilters(preferredPermanentFilters, newFilters));\n };\n\n const setFiltersWithSetter = (\n setter: (prevFilters: CrudFilters) => CrudFilters,\n ) => {\n setFilters((prev) =>\n unionFilters(preferredPermanentFilters, setter(prev)),\n );\n };\n\n const setFiltersFn: useTableReturnType<TData>[\"setFilters\"] = (\n setterOrFilters,\n behavior: SetFilterBehavior = prefferedFilterBehavior,\n ) => {\n if (typeof setterOrFilters === \"function\") {\n setFiltersWithSetter(setterOrFilters);\n } else {\n if (behavior === \"replace\") {\n setFiltersAsReplace(setterOrFilters);\n } else {\n setFiltersAsMerge(setterOrFilters);\n }\n }\n };\n\n const setSortWithUnion = (newSorter: CrudSorting) => {\n setSorters(() => unionSorters(preferredPermanentSorters, newSorter));\n };\n\n return {\n tableQueryResult: queryResult,\n sorters,\n setSorters: setSortWithUnion,\n sorter: sorters,\n setSorter: setSortWithUnion,\n filters,\n setFilters: setFiltersFn,\n current,\n setCurrent,\n pageSize,\n setPageSize,\n pageCount: pageSize\n ? Math.ceil((queryResult.data?.total ?? 0) / pageSize)\n : 1,\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 {\n hasPermission,\n pickNotDeprecated,\n queryKeys,\n} from \"@definitions/helpers\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\nimport { useActiveAuthProvider } 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 authProvider = useActiveAuthProvider();\n\n const { resources } = useContext(ResourceContext);\n const {\n data: identityData,\n refetch,\n isLoading,\n } = useGetIdentity({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n queryOptions: {\n enabled: !!auditLogContext,\n },\n });\n\n const log = useMutation<TLogData, Error, LogParams, unknown>(\n async (params) => {\n const resource = pickResource(params.resource, resources);\n const logPermissions = pickNotDeprecated(\n resource?.meta?.audit,\n resource?.options?.audit,\n resource?.options?.auditLog?.permissions,\n );\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, useTranslate } from \"@hooks\";\nimport { TranslationContext } from \"@contexts/translation\";\nimport { humanizeString, pickNotDeprecated } from \"@definitions\";\n\nimport { IResourceItem } from \"../../interfaces\";\nimport { useRouterType } from \"@contexts/router-picker\";\nimport { getActionRoutesFromResource } from \"@definitions/helpers/router\";\nimport { pickResource } from \"../../definitions/helpers/pick-resource/index\";\nimport { composeRoute } from \"@definitions/helpers/router/compose-route\";\nimport { useParsed } from \"@hooks/router/use-parsed\";\n\nexport type BreadcrumbsType = {\n label: string;\n href?: string;\n icon?: React.ReactNode;\n};\n\ntype UseBreadcrumbReturnType = {\n breadcrumbs: BreadcrumbsType[];\n};\n\ntype UseBreadcrumbProps = {\n /**\n * Additional params to be used in the route generation process.\n */\n meta?: Record<string, string | number>;\n};\n\nexport const useBreadcrumb = ({\n meta: metaFromProps = {},\n}: UseBreadcrumbProps = {}): UseBreadcrumbReturnType => {\n const routerType = useRouterType();\n const { i18nProvider } = useContext(TranslationContext);\n const parsed = useParsed();\n\n const translate = useTranslate();\n\n const { resources, resource, action } = useResource();\n\n const breadcrumbs: BreadcrumbsType[] = [];\n\n if (!resource?.name) {\n return { breadcrumbs };\n }\n\n const addBreadcrumb = (parentName: string | IResourceItem) => {\n const parentResource =\n typeof parentName === \"string\"\n ? pickResource(\n parentName,\n resources,\n routerType === \"legacy\",\n ) ?? { name: parentName }\n : parentName;\n\n if (parentResource) {\n const grandParentName = pickNotDeprecated(\n parentResource?.meta?.parent,\n parentResource?.parentName,\n );\n if (grandParentName) {\n addBreadcrumb(grandParentName);\n }\n const listActionOfResource = getActionRoutesFromResource(\n parentResource,\n resources,\n routerType === \"legacy\",\n ).find((r) => r.action === \"list\");\n\n const hrefRaw = listActionOfResource?.resource?.list\n ? listActionOfResource?.route\n : undefined;\n\n const href = hrefRaw\n ? routerType === \"legacy\"\n ? hrefRaw\n : composeRoute(hrefRaw, parsed, metaFromProps)\n : undefined;\n\n breadcrumbs.push({\n label:\n pickNotDeprecated(\n parentResource.meta?.label,\n parentResource.options?.label,\n ) ??\n translate(\n `${parentResource.name}.${parentResource.name}`,\n humanizeString(parentResource.name),\n ),\n href: href,\n icon: pickNotDeprecated(\n parentResource.meta?.icon,\n parentResource.options?.icon,\n parentResource.icon,\n ),\n });\n }\n };\n\n addBreadcrumb(resource);\n\n if (action && action !== \"list\") {\n const key = `actions.${action}`;\n const actionLabel = translate(key);\n if (typeof i18nProvider !== \"undefined\" && actionLabel === key) {\n warnOnce(\n true,\n `[useBreadcrumb]: Breadcrumb missing translate key for the \"${action}\" action. Please add \"actions.${action}\" key to your translation file.\\nFor more information, see https://refine.dev/docs/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 { useTranslate, useResource, useParsed, useRouterContext } from \"..\";\nimport { userFriendlyResourceName, pickNotDeprecated } from \"@definitions\";\nimport { useRouterType } from \"../../contexts/router-picker\";\nimport { createResourceKey } from \"../../definitions/helpers/menu/create-resource-key\";\nimport { useGetToPath } from \"../router/use-get-to-path/index\";\nimport { getParentResource } from \"@definitions/helpers/router\";\nimport {\n FlatTreeItem,\n createTree,\n} from \"@definitions/helpers/menu/create-tree\";\n\ntype UseMenuReturnType = {\n defaultOpenKeys: string[];\n selectedKey: string;\n menuItems: TreeMenuItem[];\n};\n\nexport type UseMenuProps = {\n meta?: Record<string, any>;\n hideOnMissingParameter?: boolean;\n};\n\nexport type TreeMenuItem = FlatTreeItem & {\n route?: string;\n icon?: React.ReactNode;\n label?: string;\n children: TreeMenuItem[];\n};\n\nconst getCleanPath = (pathname: string) => {\n return pathname\n .split(\"?\")[0]\n .split(\"#\")[0]\n .replace(/(.+)(\\/$)/, \"$1\");\n};\n\n/**\n * `useMenu` is used to get menu items of the default sidebar.\n * These items include a link to dashboard page (if it exists) and links to the user defined resources\n * (passed as children to {@link https://refine.dev/docs/core/components/refine-config `<Refine>`}).\n * This hook can also be used to build custom menus, which is also used by default sidebar to show menu items.\n *\n * @see {@link https://refine.dev/docs/core/hooks/ui/useMenu} for more details.\n */\nexport const useMenu = (\n { meta, hideOnMissingParameter }: UseMenuProps = {\n hideOnMissingParameter: true,\n },\n): UseMenuReturnType => {\n const translate = useTranslate();\n\n const getToPath = useGetToPath();\n const routerType = useRouterType();\n const { resource, resources } = useResource();\n const { pathname } = useParsed();\n const { useLocation } = useRouterContext();\n const { pathname: legacyPath } = useLocation();\n\n const cleanPathname =\n routerType === \"legacy\"\n ? getCleanPath(legacyPath)\n : pathname\n ? getCleanPath(pathname)\n : undefined;\n\n const cleanRoute = `/${(cleanPathname ?? \"\").replace(/^\\//, \"\")}`;\n\n const selectedKey = resource\n ? createResourceKey(resource, resources, routerType === \"legacy\")\n : cleanRoute ?? \"\";\n\n const defaultOpenKeys = React.useMemo(() => {\n if (!resource) return [];\n let parent = getParentResource(resource, resources);\n const keys = [createResourceKey(resource, resources)];\n while (parent) {\n keys.push(createResourceKey(parent, resources));\n parent = getParentResource(parent, resources);\n }\n return keys;\n }, []);\n\n const prepareItem = React.useCallback(\n (item: FlatTreeItem): TreeMenuItem | undefined => {\n if (item?.meta?.hide ?? item?.options?.hide) return undefined;\n if (!item?.list && item.children.length === 0) return undefined;\n\n const composed = item.list\n ? getToPath({\n resource: item,\n action: \"list\",\n legacy: routerType === \"legacy\",\n meta,\n })\n : undefined;\n\n if (\n hideOnMissingParameter &&\n composed &&\n composed.match(/(\\/|^):(.+?)(\\/|$){1}/)\n )\n return undefined;\n\n return {\n ...item,\n route: composed,\n icon: pickNotDeprecated(\n item.meta?.icon,\n item.options?.icon,\n item.icon,\n ),\n label:\n pickNotDeprecated(\n item?.meta?.label,\n item?.options?.label,\n ) ??\n translate(\n `${item.name}.${item.name}`,\n userFriendlyResourceName(item.name, \"plural\"),\n ),\n };\n },\n [routerType, meta, translate, hideOnMissingParameter],\n );\n\n const treeItems = React.useMemo(() => {\n const treeMenuItems = createTree(resources, routerType === \"legacy\");\n\n // add paths to items and their nodes recursively\n const prepare = (items: TreeMenuItem[]): TreeMenuItem[] => {\n return items.flatMap((item) => {\n const preparedNodes = prepare(item.children);\n const newItem = prepareItem({\n ...item,\n children: preparedNodes,\n });\n\n if (!newItem) return [];\n\n return [newItem];\n });\n };\n\n return prepare(treeMenuItems);\n }, [resources, routerType, prepareItem]);\n\n return {\n defaultOpenKeys,\n selectedKey,\n menuItems: treeItems,\n };\n};\n","import { IResourceItem } from \"../../../interfaces\";\nimport {\n getParentResource,\n removeLeadingTrailingSlashes,\n} from \"../../helpers/router\";\n\nexport const createResourceKey = (\n resource: IResourceItem,\n resources: IResourceItem[],\n legacy = false,\n) => {\n const parents: IResourceItem[] = [];\n\n let currentParentResource = getParentResource(resource, resources);\n while (currentParentResource) {\n parents.push(currentParentResource);\n currentParentResource = getParentResource(\n currentParentResource,\n resources,\n );\n }\n parents.reverse();\n\n const key = [...parents, resource]\n .map((r) =>\n removeLeadingTrailingSlashes(\n (legacy ? r.route : undefined) ?? r.identifier ?? r.name,\n ),\n )\n .join(\"/\");\n\n return `/${key.replace(/^\\//, \"\")}`;\n};\n","import { IResourceItem } from \"@contexts/resource\";\nimport { getParentResource } from \"../router\";\nimport { createResourceKey } from \"./create-resource-key\";\n\nexport type Tree = {\n item: IResourceItem;\n children: { [key: string]: Tree };\n};\n\nexport type FlatTreeItem = IResourceItem & {\n key: string;\n children: FlatTreeItem[];\n};\n\nexport const createTree = (\n resources: IResourceItem[],\n legacy = false,\n): FlatTreeItem[] => {\n const root: Tree = {\n item: {\n name: \"__root__\",\n },\n children: {},\n };\n\n resources.forEach((resource) => {\n const parents: IResourceItem[] = [];\n\n let currentParent = getParentResource(resource, resources);\n while (currentParent) {\n parents.push(currentParent);\n currentParent = getParentResource(currentParent, resources);\n }\n parents.reverse();\n\n let currentTree = root;\n\n parents.forEach((parent) => {\n const key =\n (legacy ? parent.route : undefined) ??\n parent.identifier ??\n parent.name;\n\n if (!currentTree.children[key]) {\n currentTree.children[key] = {\n item: parent,\n children: {},\n };\n }\n currentTree = currentTree.children[key];\n });\n\n const key =\n (legacy ? resource.route : undefined) ??\n resource.identifier ??\n resource.name;\n\n if (!currentTree.children[key]) {\n currentTree.children[key] = {\n item: resource,\n children: {},\n };\n }\n });\n\n const flatten = (tree: Tree): FlatTreeItem[] => {\n const items: FlatTreeItem[] = [];\n\n Object.keys(tree.children).forEach((key) => {\n const itemKey = createResourceKey(\n tree.children[key].item,\n resources,\n legacy,\n );\n const item: FlatTreeItem = {\n ...tree.children[key].item,\n key: itemKey,\n children: flatten(tree.children[key]),\n };\n items.push(item);\n });\n\n return items;\n };\n\n return flatten(root);\n};\n","import React, { useState } from \"react\";\n\nimport { useLogin, useTranslate } from \"@hooks\";\nimport { useActiveAuthProvider } from \"@definitions/helpers\";\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 authProvider = useActiveAuthProvider();\n const { mutate: login } = useLogin<ILoginForm>({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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 * @param title is not implemented yet.\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, useLink, useRouterType, useLogin } from \"@hooks\";\nimport { useTranslate } from \"@hooks/translate\";\n\nimport { DivPropsType, FormPropsType } from \"../..\";\nimport { useActiveAuthProvider } from \"@definitions/helpers\";\n\ntype LoginProps = LoginPageProps<DivPropsType, DivPropsType, FormPropsType>;\n\nexport const LoginPage: React.FC<LoginProps> = ({\n providers,\n registerLink,\n forgotPasswordLink,\n rememberMe,\n contentProps,\n wrapperProps,\n renderContent,\n formProps,\n title = undefined,\n}) => {\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [remember, setRemember] = useState(false);\n\n const translate = useTranslate();\n\n const authProvider = useActiveAuthProvider();\n const { mutate: login } = useLogin<LoginFormTypes>({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const renderLink = (link: React.ReactNode, text?: string) => {\n if (link) {\n if (typeof link === \"string\") {\n return <ActiveLink to={link}>{text}</ActiveLink>;\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, title) : content}\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport { RegisterPageProps } from \"../../../../../interfaces\";\n\nimport {\n useTranslate,\n useRouterContext,\n useLink,\n useRouterType,\n useRegister,\n} from \"@hooks\";\n\nimport { DivPropsType, FormPropsType } from \"../..\";\nimport { useActiveAuthProvider } from \"@definitions/helpers\";\n\ntype RegisterProps = RegisterPageProps<\n DivPropsType,\n DivPropsType,\n FormPropsType\n>;\n\nexport const RegisterPage: React.FC<RegisterProps> = ({\n providers,\n loginLink,\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title = undefined,\n}) => {\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n\n const translate = useTranslate();\n\n const authProvider = useActiveAuthProvider();\n const { mutate: register, isLoading } = useRegister({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const renderLink = (link: React.ReactNode, text?: string) => {\n if (link) {\n if (typeof link === \"string\") {\n return <ActiveLink to={link}>{text}</ActiveLink>;\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, title) : content}\n </div>\n );\n};\n","import React, { useState } from \"react\";\n\nimport {\n useTranslate,\n useRouterContext,\n useLink,\n useRouterType,\n useForgotPassword,\n} 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 title = undefined,\n}) => {\n const translate = useTranslate();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\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 <ActiveLink to={link}>{text}</ActiveLink>;\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, title) : 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 \"../..\";\nimport { useActiveAuthProvider } from \"@definitions/helpers\";\n\ntype UpdatePasswordProps = UpdatePasswordPageProps<\n DivPropsType,\n DivPropsType,\n FormPropsType\n>;\n\nexport const UpdatePasswordPage: React.FC<UpdatePasswordProps> = ({\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title = undefined,\n}) => {\n const translate = useTranslate();\n\n const authProvider = useActiveAuthProvider();\n const { mutate: updatePassword, isLoading } =\n useUpdatePassword<UpdatePasswordFormTypes>({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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, title) : 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 * @deprecated `ReadyPage` is deprecated and will be removed in the next major release.\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, { useState } from \"react\";\n\nimport { useMediaQuery } from \"@definitions/helpers\";\n\ntype CardInfo = {\n title: string;\n description: string;\n link: string;\n icon: React.ReactNode;\n};\n\nconst CARDS: CardInfo[] = [\n {\n title: \"Documentation\",\n description:\n \"Learn about the technical details of using refine in your projects.\",\n link: \"https://refine.dev/\",\n icon: (\n <svg\n width=\"14\"\n height=\"16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5a1 1 0 0 0-1-1H3a1 1 0 0 1 0-2h10a1 1 0 1 0 0-2H2Z\"\n fill=\"#fff\"\n />\n </svg>\n ),\n },\n {\n title: \"Tutorial\",\n description:\n \"Learn how to use refine by building a fully-functioning CRUD app, from scratch to full launch.\",\n link: \"https://refine.dev/docs/tutorial/introduction/index/\",\n icon: (\n <svg\n width=\"16\"\n height=\"14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0 4.573c0-.475.163-.948.53-1.25a4.57 4.57 0 0 1 .854-.553L5.956.485a4.571 4.571 0 0 1 4.088 0l4.572 2.285c.308.154.594.34.853.553.306.251.47.62.517 1.01.01.055.014.112.014.169v6.5a1 1 0 0 1-2 0V6.684l-3.956 1.978a4.571 4.571 0 0 1-4.088 0L1.384 6.376a4.57 4.57 0 0 1-.853-.553C.163 5.522 0 5.05 0 4.573Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M5.061 13.305 3 12.274V9.42l2.061 1.031a6.571 6.571 0 0 0 5.878 0L13 9.421v2.853l-2.061 1.03a6.571 6.571 0 0 1-5.878 0Z\"\n fill=\"#fff\"\n />\n </svg>\n ),\n },\n {\n title: \"Examples\",\n description:\n \"A collection of reference applications you can use as a starting point.\",\n link: \"https://refine.dev/examples\",\n icon: (\n <svg\n width=\"16\"\n height=\"16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4H0V2Zm3 2a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm4-1a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm2 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M0 14V8h16v6a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2Z\"\n fill=\"#fff\"\n />\n </svg>\n ),\n },\n {\n title: \"Community\",\n description:\n \"Join our Discord community and keep up with the latest news.\",\n link: \"https://discord.gg/refine\",\n icon: (\n <svg\n width=\"16\"\n height=\"12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.553 1.005A13.334 13.334 0 0 0 10.253 0c-.156.276-.298.56-.423.85a12.42 12.42 0 0 0-3.664 0A8.975 8.975 0 0 0 5.744 0 13.43 13.43 0 0 0 2.44 1.007C.351 4.066-.215 7.05.068 9.99A13.36 13.36 0 0 0 4.116 12c.328-.436.618-.9.867-1.384a8.647 8.647 0 0 1-1.365-.645c.115-.082.227-.167.335-.249a9.594 9.594 0 0 0 8.094 0c.11.089.222.173.335.25-.436.254-.894.47-1.368.646.249.484.539.946.867 1.382a13.3 13.3 0 0 0 4.051-2.01c.332-3.41-.568-6.365-2.379-8.985Zm-8.21 7.176c-.79 0-1.442-.709-1.442-1.58 0-.872.63-1.587 1.439-1.587s1.456.715 1.442 1.586c-.014.872-.636 1.58-1.44 1.58Zm5.315 0c-.79 0-1.44-.709-1.44-1.58 0-.872.63-1.587 1.44-1.587.81 0 1.452.715 1.438 1.586-.014.872-.634 1.58-1.438 1.58Z\"\n fill=\"#fff\"\n />\n </svg>\n ),\n },\n];\n\n/**\n * It is a page that welcomes you after the configuration is completed.\n */\nexport const WelcomePage: React.FC = () => {\n const isTablet = useMediaQuery(\"(max-width: 1010px)\");\n const isMobile = useMediaQuery(\"(max-width: 650px)\");\n\n const getGridTemplateColumns = () => {\n if (isMobile) {\n return \"1, 280px\";\n } else if (isTablet) {\n return \"2, 280px\";\n } else {\n return \"4, 208px\";\n }\n };\n\n const getHeaderFontSize = () => {\n if (isMobile) {\n return \"32px\";\n } else if (isTablet) {\n return \"40px\";\n } else {\n return \"48px\";\n }\n };\n\n const getSubHeaderFontSize = () => {\n if (isMobile) {\n return \"16px\";\n } else if (isTablet) {\n return \"20px\";\n } else {\n return \"24px\";\n }\n };\n\n return (\n <div\n style={{\n backgroundImage:\n \"url(https://refine.ams3.cdn.digitaloceanspaces.com/welcome-page/welcome-page.webp)\",\n backgroundPosition: \"center top\",\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\",\n minHeight: \"100vh\",\n backgroundColor: \"#0D0D12\",\n fontFamily: \"Arial\",\n color: \"#FFFFFF\",\n }}\n >\n <div style={{ height: \"89px\" }}></div>\n <div style={{ display: \"flex\", justifyContent: \"center\" }}>\n <img\n src=\"https://refine.ams3.cdn.digitaloceanspaces.com/welcome-page/welcome-logo.webp\"\n width=\"198\"\n height=\"54\"\n />\n </div>\n <div\n style={{\n height: isTablet ? \"270px\" : \"22vw\",\n minHeight: isTablet ? \"270px\" : \"313px\",\n }}\n ></div>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\",\n textAlign: \"center\",\n }}\n >\n <h1\n style={{\n fontSize: getHeaderFontSize(),\n fontWeight: 700,\n margin: \"0px\",\n }}\n >\n Welcome Aboard!\n </h1>\n <h4\n style={{\n fontSize: getSubHeaderFontSize(),\n fontWeight: 400,\n margin: \"0px\",\n }}\n >\n Your configuration is completed.\n </h4>\n </div>\n <div style={{ height: \"64px\" }}></div>\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${getGridTemplateColumns()})`,\n justifyContent: \"center\",\n gap: \"48px\",\n paddingRight: \"16px\",\n paddingLeft: \"16px\",\n maxWidth: \"976px\",\n margin: \"auto\",\n }}\n >\n {CARDS.map((card) => (\n <Card key={`welcome-page-${card.title}`} card={card} />\n ))}\n </div>\n <div style={{ height: \"64px\" }}></div>\n </div>\n );\n};\n\ntype CardProps = {\n card: CardInfo;\n};\n\nconst Card: React.FC<CardProps> = ({ card }) => {\n const { title, description, icon, link } = card;\n\n const [isHover, setIsHover] = useState(false);\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <a\n onPointerEnter={() => setIsHover(true)}\n onPointerLeave={() => setIsHover(false)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n color: \"#fff\",\n textDecoration: \"none\",\n }}\n href={link}\n >\n {icon}\n <span\n style={{\n fontSize: \"16px\",\n fontWeight: 700,\n marginLeft: \"13px\",\n marginRight: \"14px\",\n }}\n >\n {title}\n </span>\n <svg\n style={{\n transition:\n \"transform 0.5s ease-in-out, opacity 0.2s ease-in-out\",\n ...(isHover && {\n transform: \"translateX(4px)\",\n opacity: 1,\n }),\n }}\n width=\"12\"\n height=\"8\"\n fill=\"none\"\n opacity=\"0.5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.293.293a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1 0 1.414l-3 3a1 1 0 0 1-1.414-1.414L8.586 5H1a1 1 0 0 1 0-2h7.586L7.293 1.707a1 1 0 0 1 0-1.414Z\"\n fill=\"#fff\"\n />\n </svg>\n </a>\n </div>\n <span\n style={{\n fontSize: \"12px\",\n opacity: 0.5,\n lineHeight: \"16px\",\n }}\n >\n {description}\n </span>\n </div>\n );\n};\n","import React from \"react\";\nimport { QueryClientProvider, QueryClient } from \"@tanstack/react-query\";\nimport { ReactQueryDevtools } from \"@tanstack/react-query-devtools\";\n\nimport {\n AuthBindingsContextProvider,\n LegacyAuthContextProvider,\n} from \"@contexts/auth\";\nimport { DataContextProvider } from \"@contexts/data\";\nimport { LiveContextProvider } from \"@contexts/live\";\nimport { TranslationContextProvider } from \"@contexts/translation\";\nimport { ResourceContextProvider } from \"@contexts/resource\";\nimport { RefineContextProvider } from \"@contexts/refine\";\nimport { UndoableQueueContextProvider } from \"@contexts/undoableQueue\";\nimport { UnsavedWarnContextProvider } from \"@contexts/unsavedWarn\";\nimport { LegacyRouterContextProvider } from \"@contexts/legacy-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 } from \"@definitions\";\nimport { Telemetry } from \"@components/telemetry\";\nimport { useDeepMemo } from \"@hooks/deepMemo\";\nimport { RouterBindings } from \"src/interfaces/bindings\";\n\nimport {\n IDataContextProvider,\n I18nProvider,\n LayoutProps,\n TitleProps,\n IRouterProvider,\n ILiveContext,\n LiveModeProps,\n IDataMultipleContextProvider,\n LegacyAuthProvider,\n NotificationProvider,\n AccessControlProvider,\n AuditLogProvider,\n DashboardPageProps,\n IRefineOptions,\n INotificationContext,\n AuthBindings,\n} from \"../../../interfaces\";\nimport { RouterBindingsProvider } from \"../../../contexts/router\";\nimport { ResourceProps } from \"../../../interfaces/bindings/resource\";\nimport { RouterPickerProvider } from \"@contexts/router-picker\";\nimport { useRouterMisuseWarning } from \"../../../hooks/router/use-router-misuse-warning/index\";\n\nexport interface RefineProps {\n children?: React.ReactNode;\n /**\n * `resources` is the predefined interaction points for a refine app. A resource represents an entity in an endpoint in the API.\n * While this is not a required property, it is used in resource detection and creation of routes for the app.\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 * @deprecated This property is deprecated and was the legacy way of routing. Please use `routerProvider` with new router bindings instead.\n */\n legacyRouterProvider?: IRouterProvider;\n /**\n * Router bindings for **refine**. A simple interface for **refine** to interact with your router in a flexible way.\n * @type [`RouterBindings`](/docs/api-reference/core/bindings/router/)\n */\n routerProvider?: RouterBindings;\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 [`AuthBindings`](/docs/api-reference/core/providers/auth-provider/)\n */\n authProvider?: AuthBindings;\n /**\n * `legacyAuthProvider` 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 * @deprecated `legacyAuthProvider` is deprecated with refine@4, use `authProvider` instead.\n */\n legacyAuthProvider?: LegacyAuthProvider;\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 * @deprecated Please use the `catchAll` element in your routes instead.\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 * @deprecated Please use the `LoginPage` component in your routes instead.\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 * @deprecated Please use the `DashboardPage` component in your routes instead.\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 * @deprecated This component is only used with the legacy router and will be removed in the future.\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 * @deprecated Please use the `Layout` component as a children instead of a prop.\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 * @deprecated Please pass the `Sider` component to your `Layout` component.\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 * @deprecated Please pass the `Header` component to your `Layout` component.\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 * @deprecated Please pass the `Footer` component to your `Layout` component.\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 * @deprecated Please use your `OffLayoutArea` component as a children instead of a prop.\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 * @deprecated Please pass the `Title` component to your `Layout` component.\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\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 legacyAuthProvider,\n authProvider,\n dataProvider,\n legacyRouterProvider,\n routerProvider,\n notificationProvider,\n accessControlProvider,\n auditLogProvider,\n resources,\n DashboardPage,\n ReadyPage,\n LoginPage,\n catchAll,\n children,\n liveProvider,\n i18nProvider,\n Title,\n Layout,\n Sider,\n Header,\n Footer,\n OffLayoutArea,\n onLiveEvent,\n options,\n}) => {\n const {\n optionsWithDefaults,\n disableTelemetryWithDefault,\n reactQueryWithDefaults,\n } = handleRefineOptions({\n options,\n });\n\n const queryClient = useDeepMemo(() => {\n if (reactQueryWithDefaults.clientConfig instanceof QueryClient) {\n return reactQueryWithDefaults.clientConfig;\n }\n\n return new QueryClient({\n ...reactQueryWithDefaults.clientConfig,\n defaultOptions: {\n ...reactQueryWithDefaults.clientConfig.defaultOptions,\n queries: {\n refetchOnWindowFocus: false,\n 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 /**\n * Warn our users if they are using the old way of routing in the wrong prop.\n */\n useRouterMisuseWarning(routerProvider);\n /** */\n\n /**\n * `<ReadyPage />` is only used in the legacy routing and is not used in the new routing.\n * If `legacyRouterProvider` is provided and `routerProvider` is not, we'll check for the `resources` prop to be empty.\n * If `resources` is empty, then we'll render `<ReadyPage />` component.\n */\n if (\n legacyRouterProvider &&\n !routerProvider &&\n (resources ?? []).length === 0\n ) {\n return ReadyPage ? <ReadyPage /> : <DefaultReadyPage />;\n }\n\n /** Router\n *\n * Handle routing from `RouterBindingsProvider` and `router` prop for the brand new way\n * If `router` is not provided, then we'r checking for `routerProvider` prop\n * If `routerProvider` is provided, then `RouterContextProvider` is used\n * If none of them is provided, then `RouterBindingsProvider` is used because it supports undefined router\n *\n * `RouterContextProvider` is skipped whenever possible and by this way,\n * we can achieve backward compability only when its provided by user\n *\n */\n const { RouterComponent = React.Fragment } = !routerProvider\n ? legacyRouterProvider ?? {}\n : {};\n /** */\n\n return (\n <QueryClientProvider client={queryClient}>\n <NotificationContextProvider {...notificationProviderContextValues}>\n <LegacyAuthContextProvider\n {...(legacyAuthProvider ?? {})}\n isProvided={Boolean(legacyAuthProvider)}\n >\n <AuthBindingsContextProvider\n {...(authProvider ?? {})}\n isProvided={Boolean(authProvider)}\n >\n <DataContextProvider {...dataProvider}>\n <LiveContextProvider liveProvider={liveProvider}>\n <RouterPickerProvider\n value={\n legacyRouterProvider && !routerProvider\n ? \"legacy\"\n : \"new\"\n }\n >\n <RouterBindingsProvider\n router={routerProvider}\n >\n <LegacyRouterContextProvider\n {...legacyRouterProvider}\n >\n <ResourceContextProvider\n resources={resources ?? []}\n >\n <TranslationContextProvider\n i18nProvider={i18nProvider}\n >\n <AccessControlContextProvider\n {...(accessControlProvider ??\n {})}\n >\n <AuditLogContextProvider\n {...(auditLogProvider ??\n {})}\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={\n Title\n }\n undoableTimeout={\n optionsWithDefaults.undoableTimeout\n }\n catchAll={\n catchAll\n }\n DashboardPage={\n DashboardPage\n }\n LoginPage={\n LoginPage\n }\n Layout={\n Layout\n }\n Sider={\n Sider\n }\n Footer={\n Footer\n }\n Header={\n Header\n }\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 {\n children\n }\n {!disableTelemetryWithDefault && (\n <Telemetry />\n )}\n <RouteChangeHandler />\n </RouterComponent>\n </UnsavedWarnContextProvider>\n </RefineContextProvider>\n </UndoableQueueContextProvider>\n </AuditLogContextProvider>\n </AccessControlContextProvider>\n </TranslationContextProvider>\n </ResourceContextProvider>\n </LegacyRouterContextProvider>\n </RouterBindingsProvider>\n </RouterPickerProvider>\n </LiveContextProvider>\n </DataContextProvider>\n </AuthBindingsContextProvider>\n </LegacyAuthContextProvider>\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 { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\nimport { AuditLogContext } from \"@contexts/auditLog\";\nimport { LiveContext } from \"@contexts/live\";\nimport { RouterContext } from \"@contexts/legacy-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\";\nimport { useIsExistAuthentication } from \"..\";\n\n// It reads and updates from package.json during build. ref: tsup.config.ts\nconst REFINE_VERSION = \"4.5.9\";\n\nexport const useTelemetryData = (): ITelemetryData => {\n const auth = useIsExistAuthentication();\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 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 { IRouterProvider, RouterBindings } from \"src/interfaces\";\n\nexport const checkRouterPropMisuse = (\n value: IRouterProvider | RouterBindings,\n) => {\n // check if `routerProvider` prop is passed with legacy properties.\n // If yes, console.warn the user to use `legacyRuterProvider` prop instead.\n const bindings = [\"go\", \"parse\", \"back\", \"Link\"];\n\n // check if `value` contains properties other than `bindings`\n const otherProps = Object.keys(value).filter(\n (key) => !bindings.includes(key),\n );\n\n const hasOtherProps = otherProps.length > 0;\n\n if (hasOtherProps) {\n console.warn(\n `Unsupported properties are found in \\`routerProvider\\` prop. You provided \\`${otherProps.join(\n \", \",\n )}\\`. Supported properties are \\`${bindings.join(\n \", \",\n )}\\`. You may wanted to use \\`legacyRouterProvider\\` prop instead.`,\n );\n\n return true;\n }\n\n return false;\n};\n","import { checkRouterPropMisuse } from \"@definitions/helpers/check-router-prop-misuse\";\nimport React from \"react\";\nimport { RouterBindings } from \"src/interfaces\";\n\nexport const useRouterMisuseWarning = (value?: RouterBindings) => {\n const warned = React.useRef(false);\n\n React.useEffect(() => {\n if (warned.current === false) {\n if (value) {\n const warn = checkRouterPropMisuse(value);\n if (warn) {\n warned.current = true;\n }\n }\n }\n }, [value]);\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { 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 *\n * @deprecated This component is obsolete and only works with the legacy router providers.\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 {\n useGo,\n useNavigation,\n useParsed,\n useRouterContext,\n useRouterType,\n useIsAuthenticated,\n} from \"@hooks\";\nimport { useActiveAuthProvider } from \"@definitions/index\";\nimport { GoConfig } from \"src/interfaces\";\n\n/**\n * This hook is used to avoid React's invalid setState call warning.\n * When `go` is called during the render phase, it's updating the internal router state before the render phase is finished.\n * This causes React to throw an error. This hook is used to defer the `go` call to the effect calls.\n */\nconst useDeferredGo = () => {\n const go = useGo();\n\n const [config, setConfig] = React.useState<GoConfig | undefined>(undefined);\n\n React.useEffect(() => {\n if (config) {\n go(config);\n }\n }, [config]);\n\n const cb = React.useCallback(\n (props: GoConfig) => {\n if (!config) {\n setConfig(props);\n }\n },\n [config],\n );\n\n return cb;\n};\n\nexport type AuthenticatedCommonProps = {\n /**\n * Whether to redirect user if not logged in or not.\n * If not set, user will be redirected to `redirectTo` property of the `check` function's response.\n * This behavior is only available for new auth providers.\n * Legacy auth providers will redirect to `/login` by default if this property is not set.\n * If set to a string, user will be redirected to that string.\n *\n * This property only works if `fallback` is **not set**.\n */\n redirectOnFail?: string | true;\n /**\n * Whether to append current path to search params of the redirect url at `to` property.\n *\n * By default, `to` parameter is used by successful invocations of the `useLogin` hook.\n * If `to` present, it will be used as the redirect url after successful login.\n */\n appendCurrentPathToQuery?: boolean;\n /**\n * Content to show if user is not logged in.\n */\n fallback?: React.ReactNode;\n /**\n * Content to show while checking whether user is logged in or not.\n */\n loading?: React.ReactNode;\n /**\n * Content to show if user is logged in\n */\n children?: React.ReactNode;\n};\n\nexport type LegacyAuthenticatedProps = {\n v3LegacyAuthProviderCompatible: true;\n} & AuthenticatedCommonProps;\n\nexport type AuthenticatedProps = {\n v3LegacyAuthProviderCompatible?: false;\n} & AuthenticatedCommonProps;\n\nexport function Authenticated(\n props: LegacyAuthenticatedProps,\n): JSX.Element | null;\n\nexport function Authenticated(props: AuthenticatedProps): JSX.Element | null;\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 function Authenticated({\n redirectOnFail = true,\n appendCurrentPathToQuery = true,\n children,\n fallback: fallbackContent,\n loading: loadingContent,\n}: AuthenticatedProps | LegacyAuthenticatedProps): JSX.Element | null {\n const activeAuthProvider = useActiveAuthProvider();\n const routerType = useRouterType();\n\n const hasAuthProvider = Boolean(activeAuthProvider?.isProvided);\n const isLegacyAuth = Boolean(activeAuthProvider?.isLegacy);\n const isLegacyRouter = routerType === \"legacy\";\n\n const parsed = useParsed();\n const go = useGo();\n const deferredGo = useDeferredGo();\n const { replace } = useNavigation();\n const { useLocation } = useRouterContext();\n const legacyLocation = useLocation();\n\n const {\n isLoading,\n isFetching,\n // isRefetching,\n isSuccess,\n data: {\n authenticated: isAuthenticatedStatus,\n redirectTo: authenticatedRedirect,\n } = {},\n refetch,\n } = useIsAuthenticated({\n v3LegacyAuthProviderCompatible: isLegacyAuth,\n });\n\n React.useEffect(() => {\n /**\n * Refetch the authentication status if the content is changed (e.g. redirected or updated)\n *\n * This is done to avoid re-rendering the wrappers with the same content.\n */\n\n refetch();\n }, [children, fallbackContent]);\n\n const state = React.useRef<{\n status: \"initial\" | \"pending\" | \"settled\";\n content: React.ReactNode;\n }>({\n status: isLoading ? \"initial\" : \"pending\",\n content: loadingContent ?? null,\n });\n\n /**\n * Update state when fetching the authentication response.\n */\n if (isFetching) {\n state.current.status = \"pending\";\n } else if (!isFetching) {\n state.current.status = \"settled\";\n }\n\n /**\n * Authentication status\n */\n const isAuthenticated = hasAuthProvider\n ? isLegacyAuth\n ? isSuccess\n : isAuthenticatedStatus\n : true;\n\n if (state.current.status === \"settled\") {\n /**\n * If the state is settled, and query is resolved.\n */\n if (isAuthenticated) {\n /**\n * If user is authenticated, show the children.\n */\n state.current.content = <>{children ?? null}</>;\n } else if (typeof fallbackContent !== \"undefined\") {\n /**\n * If user is not authenticated, and `fallback` is present, show the fallback content.\n */\n state.current.content = <>{fallbackContent}</>;\n } else {\n /**\n * If there's no `fallback` content, redirect will be applied.\n */\n\n /**\n * Current pathname to append to the redirect url.\n */\n const pathname = `${\n isLegacyRouter ? legacyLocation?.pathname : parsed.pathname\n }`.replace(/(\\?.*|#.*)$/, \"\");\n\n /**\n * Redirect url to use, if `redirectOnFail` is set to a string,\n * it will be used instead of `redirectTo` property of the `check` function's response.\n */\n const appliedRedirect = isLegacyAuth\n ? typeof redirectOnFail === \"string\"\n ? redirectOnFail\n : \"/login\"\n : typeof redirectOnFail === \"string\"\n ? redirectOnFail\n : (authenticatedRedirect as string | undefined);\n\n /**\n * Redirect if `appliedRedirect` is set.\n */\n if (appliedRedirect) {\n if (isLegacyRouter) {\n const toQuery = appendCurrentPathToQuery\n ? `?to=${encodeURIComponent(pathname)}`\n : \"\";\n replace(`${appliedRedirect}${toQuery}`);\n } else {\n deferredGo({\n to: appliedRedirect,\n query: appendCurrentPathToQuery\n ? {\n to: parsed.params?.to\n ? parsed.params.to\n : go({\n to: pathname,\n options: { keepQuery: true },\n type: \"path\",\n }),\n }\n : undefined,\n type: \"replace\",\n });\n }\n }\n }\n }\n\n /**\n * If there's no `authProvider` set, we don't need to check whether user is logged in or not.\n */\n if (!hasAuthProvider) {\n return <>{children ?? null}</>;\n }\n\n /**\n * Returning the content based on the state, `fallback` or `children`.\n */\n return <>{state.current.content}</>;\n}\n","import { useEffect } from \"react\";\nimport { useRouterContext } from \"@hooks\";\nimport { useLegacyAuthContext } from \"@contexts/auth\";\n\nexport const RouteChangeHandler: React.FC = () => {\n const { useLocation } = useRouterContext();\n\n const { checkAuth } = useLegacyAuthContext();\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 {\n useCan,\n useParsed,\n useResource,\n useResourceWithRoute,\n useRouterContext,\n useRouterType,\n} from \"@hooks\";\nimport {\n BaseKey,\n IResourceItem,\n ITreeMenu,\n ResourceRouterParams,\n} from \"../../interfaces\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\n\ntype CanAccessBaseProps = {\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n /**\n * Intended action on resource\n */\n action: string;\n /**\n * Parameters associated with the resource\n * @type { resource?: [IResourceItem](https://refine.dev/docs/api-reference/core/interfaceReferences/#canparams), id?: [BaseKey](https://refine.dev/docs/api-reference/core/interfaceReferences/#basekey), [key: string]: any }\n */\n params?: {\n resource?: IResourceItem & { children?: ITreeMenu[] };\n id?: BaseKey;\n [key: string]: any;\n };\n /**\n * Content to show if access control returns `false`\n */\n fallback?: React.ReactNode;\n children: React.ReactNode;\n};\n\ntype CanAccessWithoutParamsProps = {\n [key in Exclude<\n keyof CanAccessBaseProps,\n \"fallback\" | \"children\"\n >]?: undefined;\n} & {\n [key in \"fallback\" | \"children\"]?: CanAccessBaseProps[key];\n};\n\nexport type CanAccessProps = CanAccessBaseProps | CanAccessWithoutParamsProps;\n\nexport const CanAccess: React.FC<CanAccessProps> = ({\n resource: resourceFromProp,\n action,\n params,\n fallback,\n children,\n ...rest\n}) => {\n const routerType = useRouterType();\n const { resources } = useResource();\n const { useParams } = useRouterContext();\n const {\n resource: resourceFromRouter,\n id: idFromRouter,\n action: actionFromRouter,\n } = useParsed();\n\n const {\n resource: legacyResourceFromRoute,\n id: legacyIdFromParams,\n action: legacyActionFromParams,\n } = useParams<ResourceRouterParams>();\n\n const newResourceNameFromRouter = resourceFromRouter?.name;\n\n /** We only accept `id` from URL params if `resource` is not explicitly passed. */\n /** This is done to avoid sending wrong requests for custom `resource` and an async `id` */\n const defaultId =\n !resourceFromProp ||\n resourceFromProp ===\n (routerType === \"legacy\"\n ? legacyResourceFromRoute\n : newResourceNameFromRouter)\n ? params?.id ??\n (routerType === \"legacy\" ? legacyIdFromParams : idFromRouter)\n : params?.id;\n\n /** `resourceName` fallback value depends on the router type */\n const resourceName =\n resourceFromProp ??\n (routerType === \"legacy\"\n ? legacyResourceFromRoute\n : newResourceNameFromRouter);\n\n let resource: IResourceItem | undefined;\n\n const resourceWithRoute = useResourceWithRoute();\n\n if (routerType === \"legacy\") {\n if (resourceName) {\n resource = resourceWithRoute(resourceName);\n }\n } else {\n /** If `resource` is provided by the user, then try to pick the resource of create a dummy one */\n if (resourceFromProp) {\n const picked = pickResource(resourceFromProp, resources);\n if (picked) {\n resource = picked;\n } else {\n resource = {\n name: resourceFromProp,\n route: resourceFromProp,\n };\n }\n } else {\n /** If `resource` is not provided, check the resource from the router params */\n if (typeof resourceFromRouter === \"string\") {\n const picked = pickResource(resourceFromRouter, resources);\n if (picked) {\n resource = picked;\n } else {\n resource = {\n name: resourceFromRouter,\n route: resourceFromRouter,\n };\n }\n } else {\n /** If `resource` is passed as an IResourceItem, use it or `resource` is undefined and cannot be inferred. */\n resource = resourceFromRouter;\n }\n }\n }\n\n const { data } = useCan({\n resource: resourceFromProp ?? resource?.name,\n action:\n action ??\n (routerType === \"legacy\"\n ? legacyActionFromParams\n : actionFromRouter) ??\n \"\",\n params: params ?? {\n id: defaultId,\n resource: resource,\n },\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","export type { RefineBreadcrumbProps } from \"./types\";\n\nexport type {\n RefineButtonCommonProps,\n RefineButtonDataProps,\n RefineButtonLinkingProps,\n RefineButtonResourceProps,\n RefineButtonSingleProps,\n RefineCloneButtonProps,\n RefineCreateButtonProps,\n RefineDeleteButtonProps,\n RefineEditButtonProps,\n RefineExportButtonProps,\n RefineImportButtonProps,\n RefineListButtonProps,\n RefineRefreshButtonProps,\n RefineSaveButtonProps,\n RefineShowButtonProps,\n} from \"./types\";\n\nexport type {\n RefineCrudCreateProps,\n RefineCrudEditProps,\n RefineCrudListProps,\n RefineCrudShowProps,\n ActionButtonRenderer,\n} from \"./types\";\n\nexport type { RefineErrorPageProps, RefineReadyPageProps } from \"./types\";\n\nexport type {\n RefineFieldBooleanProps,\n RefineFieldCommonProps,\n RefineFieldDateProps,\n RefineFieldEmailProps,\n RefineFieldFileProps,\n RefineFieldImageProps,\n RefineFieldUrlProps,\n RefineFieldMarkdownProps,\n RefineFieldNumberProps,\n RefineFieldTagProps,\n RefineFieldTextProps,\n RefineFieldTooltipProps,\n} from \"./types\";\n\nexport type {\n RefineLayoutFooterProps,\n RefineLayoutHeaderProps,\n RefineLayoutLayoutProps,\n RefineLayoutSiderProps,\n RefineLayoutTitleProps,\n RefineThemedLayoutSiderProps,\n RefineThemedLayoutHeaderProps,\n RefineThemedLayoutProps,\n RefineLayoutThemedTitleProps,\n} from \"./types\";\n\nexport { RefineButtonTestIds } from \"./ids\";\n","export const RefineButtonTestIds = {\n CloneButton: \"refine-clone-button\",\n DeleteButton: \"refine-delete-button\",\n EditButton: \"refine-edit-button\",\n SaveButton: \"refine-save-button\",\n CreateButton: \"refine-create-button\",\n ImportButton: \"refine-import-button\",\n ExportButton: \"refine-export-button\",\n ListButton: \"refine-list-button\",\n RefreshButton: \"refine-refresh-button\",\n ShowButton: \"refine-show-button\",\n};\n","import React from \"react\";\nimport { FormInstance, FormProps, Form } from \"antd\";\nimport { useForm as useFormSF } from \"sunflower-antd\";\nimport { ButtonProps } from \"antd\";\n\nimport {\n HttpError,\n BaseRecord,\n useForm as useFormCore,\n UseFormReturnType as UseFormReturnTypeCore,\n useWarnAboutChange,\n UseFormProps as UseFormPropsCore,\n CreateResponse,\n UpdateResponse,\n pickNotDeprecated,\n} from \"@refinedev/core\";\n\nexport type UseFormProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseFormPropsCore<TData, TError, TVariables> & {\n submitOnEnter?: boolean;\n /**\n * Shows notification when unsaved changes exist\n */\n warnWhenUnsavedChanges?: boolean;\n};\n\nexport type UseFormReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseFormReturnTypeCore<TData, TError, TVariables> & {\n form: FormInstance<TVariables>;\n formProps: FormProps<TVariables>;\n saveButtonProps: ButtonProps & {\n onClick: () => void;\n };\n onFinish: (\n values?: TVariables,\n ) => Promise<CreateResponse<TData> | UpdateResponse<TData> | 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 action,\n resource,\n onMutationSuccess: onMutationSuccessProp,\n onMutationError,\n submitOnEnter = false,\n warnWhenUnsavedChanges: warnWhenUnsavedChangesProp,\n redirect,\n successNotification,\n errorNotification,\n meta,\n metaData,\n liveMode,\n liveParams,\n mutationMode,\n dataProviderName,\n onLiveEvent,\n invalidates,\n undoableTimeout,\n queryOptions,\n createMutationOptions,\n updateMutationOptions,\n id: idFromProps,\n}: UseFormProps<TData, TError, TVariables> = {}): UseFormReturnType<\n TData,\n TError,\n TVariables\n> => {\n const [formAnt] = Form.useForm();\n const formSF = useFormSF<TData, TVariables>({\n form: formAnt,\n });\n const { form } = formSF;\n\n const useFormCoreResult = useFormCore<TData, TError, TVariables>({\n onMutationSuccess: onMutationSuccessProp\n ? onMutationSuccessProp\n : undefined,\n onMutationError,\n redirect,\n action,\n resource,\n successNotification,\n errorNotification,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n liveMode,\n liveParams,\n mutationMode,\n dataProviderName,\n onLiveEvent,\n invalidates,\n undoableTimeout,\n queryOptions,\n createMutationOptions,\n updateMutationOptions,\n id: idFromProps,\n });\n\n const { formLoading, onFinish, queryResult, id } = useFormCoreResult;\n\n const {\n warnWhenUnsavedChanges: warnWhenUnsavedChangesRefine,\n setWarnWhen,\n } = useWarnAboutChange();\n const warnWhenUnsavedChanges =\n warnWhenUnsavedChangesProp ?? warnWhenUnsavedChangesRefine;\n\n React.useEffect(() => {\n form.resetFields();\n }, [queryResult?.data?.data, id]);\n\n const onKeyUp = (event: React.KeyboardEvent<HTMLFormElement>) => {\n if (submitOnEnter && event.key === \"Enter\") {\n form.submit();\n }\n };\n\n const onValuesChange = (changeValues: object) => {\n if (changeValues && warnWhenUnsavedChanges) {\n setWarnWhen(true);\n }\n return changeValues;\n };\n\n const saveButtonProps = {\n disabled: formLoading,\n onClick: () => {\n form.submit();\n },\n };\n\n return {\n form: formSF.form,\n formProps: {\n ...formSF.formProps,\n onFinish: (values: TVariables) =>\n onFinish(values).catch((error) => error),\n onKeyUp,\n onValuesChange,\n initialValues: queryResult?.data?.data,\n },\n saveButtonProps,\n ...useFormCoreResult,\n onFinish: async (values?: TVariables) => {\n return await onFinish(values ?? formSF.form.getFieldsValue(true));\n },\n };\n};\n","import React, { useCallback } from \"react\";\nimport { FormInstance, FormProps, ModalProps } from \"antd\";\nimport {\n useModalForm as useModalFormSF,\n UseModalFormConfig as UseModalFormConfigSF,\n} from \"sunflower-antd\";\n\nimport {\n useTranslate,\n useWarnAboutChange,\n HttpError,\n UseFormProps as UseFormPropsCore,\n BaseRecord,\n LiveModeProps,\n BaseKey,\n userFriendlyResourceName,\n useResource,\n FormWithSyncWithLocationParams,\n useParsed,\n useGo,\n} from \"@refinedev/core\";\nimport { useForm, UseFormProps, UseFormReturnType } from \"../useForm\";\n\nexport type useModalFormFromSFReturnType<TData, TVariables> = {\n open: boolean;\n form: FormInstance<TVariables>;\n show: (id?: BaseKey) => void;\n close: () => void;\n modalProps: ModalProps;\n formProps: FormProps<TVariables>;\n formLoading: boolean;\n defaultFormValuesLoading: boolean;\n formValues: {};\n initialValues: {};\n formResult: undefined;\n submit: (values?: TVariables) => Promise<TData>;\n /** @deprecated Please use `open` instead. */\n visible: boolean;\n};\n\ntype useModalFormConfig = {\n action: \"show\" | \"edit\" | \"create\" | \"clone\";\n};\n\nexport type UseModalFormReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = Omit<\n UseFormReturnType<TData, TError, TVariables>,\n \"saveButtonProps\" | \"deleteButtonProps\"\n> &\n useModalFormFromSFReturnType<TData, TVariables>;\n\nexport type UseModalFormProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseFormPropsCore<TData, TError, TVariables> &\n UseFormProps<TData, TError, TVariables> &\n UseModalFormConfigSF &\n useModalFormConfig &\n LiveModeProps &\n FormWithSyncWithLocationParams;\n/**\n * `useModalForm` hook allows you to manage a form within a modal. It returns Ant Design {@link https://ant.design/components/form/ Form} and {@link https://ant.design/components/modal/ Modal} components props.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/form/useModalForm} 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 useModalForm = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n syncWithLocation,\n ...rest\n}: UseModalFormProps<TData, TError, TVariables>): UseModalFormReturnType<\n TData,\n TError,\n TVariables\n> => {\n const initiallySynced = React.useRef(false);\n\n const useFormProps = useForm<TData, TError, TVariables>({\n ...rest,\n });\n\n const { form, formProps, id, setId, formLoading, onFinish } = useFormProps;\n\n const { resource, action: actionFromParams } = useResource(rest.resource);\n\n const parsed = useParsed();\n const go = useGo();\n\n const action = rest.action ?? actionFromParams ?? \"\";\n\n const syncingId =\n typeof syncWithLocation === \"object\" && syncWithLocation.syncId;\n\n const syncWithLocationKey =\n typeof syncWithLocation === \"object\" && \"key\" in syncWithLocation\n ? syncWithLocation.key\n : resource && action && syncWithLocation\n ? `modal-${resource?.identifier ?? resource?.name}-${action}`\n : undefined;\n\n const translate = useTranslate();\n\n const { warnWhen, setWarnWhen } = useWarnAboutChange();\n\n const sunflowerUseModal = useModalFormSF<TData, TVariables>({\n ...rest,\n form: form,\n submit: onFinish as any,\n });\n\n const {\n visible,\n show,\n formProps: modalFormProps,\n modalProps,\n } = sunflowerUseModal;\n\n React.useEffect(() => {\n if (initiallySynced.current === false && syncWithLocationKey) {\n const openStatus = parsed?.params?.[syncWithLocationKey]?.open;\n if (typeof openStatus === \"boolean\") {\n if (openStatus) {\n show();\n }\n } else if (typeof openStatus === \"string\") {\n if (openStatus === \"true\") {\n show();\n }\n }\n\n if (syncingId) {\n const idFromParams = parsed?.params?.[syncWithLocationKey]?.id;\n if (idFromParams) {\n setId?.(idFromParams);\n }\n }\n\n initiallySynced.current = true;\n }\n }, [syncWithLocationKey, parsed, syncingId, setId]);\n\n React.useEffect(() => {\n if (initiallySynced.current === true) {\n if (visible && syncWithLocationKey) {\n go({\n query: {\n [syncWithLocationKey]: {\n ...parsed?.params?.[syncWithLocationKey],\n open: true,\n ...(syncingId && id && { id }),\n },\n },\n options: { keepQuery: true },\n type: \"replace\",\n });\n } else if (syncWithLocationKey && !visible) {\n go({\n query: {\n [syncWithLocationKey]: undefined,\n },\n options: { keepQuery: true },\n type: \"replace\",\n });\n }\n }\n }, [id, visible, show, syncWithLocationKey, syncingId]);\n\n const saveButtonPropsSF = {\n disabled: formLoading,\n loading: formLoading,\n };\n\n const handleClose = useCallback(() => {\n if (warnWhen) {\n const warnWhenConfirm = window.confirm(\n translate(\n \"warnWhenUnsavedChanges\",\n \"Are you sure you want to leave? You have unsaved changes.\",\n ),\n );\n\n if (warnWhenConfirm) {\n setWarnWhen(false);\n } else {\n return;\n }\n }\n\n setId?.(undefined);\n sunflowerUseModal.close();\n }, [warnWhen]);\n\n const handleShow = useCallback((id?: BaseKey) => {\n setId?.(id);\n\n sunflowerUseModal.show();\n }, []);\n\n const { visible: _visible, ...otherModalProps } = modalProps;\n const newModalProps = { open: _visible, ...otherModalProps };\n\n return {\n ...useFormProps,\n ...sunflowerUseModal,\n show: handleShow,\n close: handleClose,\n open: visible,\n formProps: {\n ...modalFormProps,\n ...useFormProps.formProps,\n onValuesChange: formProps?.onValuesChange,\n onKeyUp: formProps?.onKeyUp,\n onFinish: formProps.onFinish,\n },\n modalProps: {\n ...newModalProps,\n width: \"1000px\",\n okButtonProps: saveButtonPropsSF,\n title: translate(\n `${resource?.name}.titles.${rest.action}`,\n `${userFriendlyResourceName(\n `${rest.action} ${\n resource?.meta?.label ??\n resource?.options?.label ??\n resource?.label ??\n resource?.name\n }`,\n \"singular\",\n )}`,\n ),\n okText: translate(\"buttons.save\", \"Save\"),\n cancelText: translate(\"buttons.cancel\", \"Cancel\"),\n onCancel: handleClose,\n forceRender: true,\n },\n formLoading,\n };\n};\n","import React, { useCallback } from \"react\";\nimport { UseFormConfig } from \"sunflower-antd\";\nimport { FormInstance, FormProps, DrawerProps, ButtonProps } from \"antd\";\nimport {\n useTranslate,\n useWarnAboutChange,\n UseFormProps as UseFormPropsCore,\n HttpError,\n LiveModeProps,\n BaseRecord,\n FormWithSyncWithLocationParams,\n BaseKey,\n useResource,\n useParsed,\n useGo,\n useModal,\n} from \"@refinedev/core\";\n\nimport { useForm, UseFormProps, UseFormReturnType } from \"../useForm\";\nimport { DeleteButtonProps } from \"../../../components\";\n\nexport interface UseDrawerFormConfig extends UseFormConfig {\n action: \"show\" | \"edit\" | \"create\" | \"clone\";\n}\n\nexport type UseDrawerFormProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseFormPropsCore<TData, TError, TVariables> &\n UseFormProps<TData, TError, TVariables> &\n UseDrawerFormConfig &\n LiveModeProps &\n FormWithSyncWithLocationParams & {\n defaultVisible?: boolean;\n autoSubmitClose?: boolean;\n autoResetForm?: boolean;\n };\n\nexport type UseDrawerFormReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseFormReturnType<TData, TError, TVariables> & {\n formProps: FormProps<TVariables> & {\n form: FormInstance<TVariables>;\n };\n show: (id?: BaseKey) => void;\n close: () => void;\n drawerProps: DrawerProps;\n saveButtonProps: ButtonProps;\n deleteButtonProps: DeleteButtonProps;\n formLoading: boolean;\n};\n\n/**\n * `useDrawerForm` hook allows you to manage a form within a drawer. It returns Ant Design {@link https://ant.design/components/form/ Form} and {@link https://ant.design/components/drawer/ Drawer} components props.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/form/useDrawerForm} 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 */\n\nexport const useDrawerForm = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n syncWithLocation,\n defaultVisible = false,\n autoSubmitClose = true,\n autoResetForm = true,\n ...rest\n}: UseDrawerFormProps<TData, TError, TVariables>): UseDrawerFormReturnType<\n TData,\n TError,\n TVariables\n> => {\n const initiallySynced = React.useRef(false);\n\n const { visible, show, close } = useModal({\n defaultVisible,\n });\n\n const useFormProps = useForm<TData, TError, TVariables>({\n ...rest,\n });\n\n const { form, formProps, formLoading, id, setId, onFinish } = useFormProps;\n\n const { resource, action: actionFromParams } = useResource(rest.resource);\n\n const parsed = useParsed();\n const go = useGo();\n\n const action = rest.action ?? actionFromParams ?? \"\";\n\n const syncingId =\n typeof syncWithLocation === \"object\" && syncWithLocation.syncId;\n\n const syncWithLocationKey =\n typeof syncWithLocation === \"object\" && \"key\" in syncWithLocation\n ? syncWithLocation.key\n : resource && action && syncWithLocation\n ? `drawer-${resource?.identifier ?? resource?.name}-${action}`\n : undefined;\n\n React.useEffect(() => {\n if (initiallySynced.current === false && syncWithLocationKey) {\n const openStatus = parsed?.params?.[syncWithLocationKey]?.open;\n if (typeof openStatus === \"boolean\") {\n openStatus ? show() : close();\n } else if (typeof openStatus === \"string\") {\n if (openStatus === \"true\") {\n show();\n }\n }\n\n if (syncingId) {\n const idFromParams = parsed?.params?.[syncWithLocationKey]?.id;\n if (idFromParams) {\n setId?.(idFromParams);\n }\n }\n\n initiallySynced.current = true;\n }\n }, [syncWithLocationKey, parsed, syncingId, setId]);\n\n React.useEffect(() => {\n if (initiallySynced.current === true) {\n if (visible && syncWithLocationKey) {\n go({\n query: {\n [syncWithLocationKey]: {\n ...parsed?.params?.[syncWithLocationKey],\n open: true,\n ...(syncingId && id && { id }),\n },\n },\n options: { keepQuery: true },\n type: \"replace\",\n });\n } else if (syncWithLocationKey && !visible) {\n go({\n query: {\n [syncWithLocationKey]: undefined,\n },\n options: { keepQuery: true },\n type: \"replace\",\n });\n }\n }\n }, [id, visible, show, close, syncWithLocationKey, syncingId]);\n\n const translate = useTranslate();\n\n const { warnWhen, setWarnWhen } = useWarnAboutChange();\n\n const submit = async () => {\n await onFinish(form.getFieldsValue());\n\n if (autoSubmitClose) {\n close();\n }\n\n if (autoResetForm) {\n form.resetFields();\n }\n };\n\n const saveButtonProps = {\n disabled: formLoading,\n onClick: submit,\n loading: formLoading,\n };\n\n const deleteButtonProps = {\n recordItemId: id,\n onSuccess: () => {\n setId?.(undefined);\n close();\n },\n };\n\n const handleClose = useCallback(() => {\n if (warnWhen) {\n const warnWhenConfirm = window.confirm(\n translate(\n \"warnWhenUnsavedChanges\",\n \"Are you sure you want to leave? You have unsaved changes.\",\n ),\n );\n\n if (warnWhenConfirm) {\n setWarnWhen(false);\n } else {\n return;\n }\n }\n\n close();\n setId?.(undefined);\n }, [warnWhen]);\n\n const handleShow = useCallback((id?: BaseKey) => {\n setId?.(id);\n\n show();\n }, []);\n\n return {\n ...useFormProps,\n show: handleShow,\n close: handleClose,\n formProps: {\n form,\n ...useFormProps.formProps,\n onValuesChange: formProps?.onValuesChange,\n onKeyUp: formProps?.onKeyUp,\n onFinish: formProps.onFinish,\n },\n drawerProps: {\n width: \"500px\",\n onClose: handleClose,\n open: visible,\n forceRender: true,\n },\n saveButtonProps,\n deleteButtonProps,\n formLoading,\n };\n};\n","import {\n useStepsForm as useStepsFormSF,\n UseStepsFormConfig,\n} from \"sunflower-antd\";\nimport { FormInstance, FormProps } from \"antd\";\n\nimport {\n HttpError,\n UseFormProps as UseFormPropsCore,\n BaseRecord,\n} from \"@refinedev/core\";\n\nimport { useForm, UseFormProps, UseFormReturnType } from \"../useForm\";\n\nexport type UseStepsFormFromSFReturnType<TData, TVariables> = {\n current: number;\n gotoStep: (step: number) => void;\n stepsProps: {\n current: number;\n onChange: (currentStep: number) => void;\n };\n formProps: FormProps<TVariables>;\n formLoading: boolean;\n defaultFormValuesLoading: boolean;\n formValues: {};\n initialValues: {};\n formResult: undefined;\n form: FormInstance<TVariables>;\n submit: (values?: TVariables) => Promise<TData>;\n};\n\nexport type UseStepsFormReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseFormReturnType<TData, TError, TVariables> &\n UseStepsFormFromSFReturnType<TData, TVariables>;\n\nexport type UseStepsFormProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseFormPropsCore<TData, TError, TVariables> &\n UseFormProps<TData, TError, TVariables> &\n UseStepsFormConfig;\n\n/**\n * `useStepsForm` hook allows you to split your form under an Ant Design based {@link https://ant.design/components/steps/ Steps} component and provides you with a few useful functionalities that will help you manage your form.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/form/useStepsForm} 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 useStepsForm = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>(\n props: UseStepsFormProps<TData, TError, TVariables> = {},\n): UseStepsFormReturnType<TData, TError, TVariables> => {\n const useFormProps = useForm<TData, TError, TVariables>({ ...props });\n const { form, formProps } = useFormProps;\n\n const stepsPropsSunflower = useStepsFormSF<TData, TVariables>({\n isBackValidate: false,\n form: form,\n submit: (values: any) => {\n formProps?.onFinish?.(values);\n },\n ...props,\n });\n\n return {\n ...useFormProps,\n ...stepsPropsSunflower,\n formProps: {\n ...stepsPropsSunflower.formProps,\n ...useFormProps.formProps,\n onValuesChange: formProps?.onValuesChange,\n onKeyUp: formProps?.onKeyUp,\n },\n saveButtonProps: {\n ...useFormProps.saveButtonProps,\n onClick: () => stepsPropsSunflower.submit(),\n },\n };\n};\n","import React, { Children, createElement, Fragment } from \"react\";\nimport { Grid, FormProps, Form, TablePaginationConfig, TableProps } from \"antd\";\nimport { useForm as useFormSF } from \"sunflower-antd\";\n\nimport { SorterResult } from \"antd/lib/table/interface\";\n\nimport {\n useLiveMode,\n BaseRecord,\n CrudFilters,\n HttpError,\n useTable as useTableCore,\n useTableProps as useTablePropsCore,\n useTableReturnType as useTableCoreReturnType,\n pickNotDeprecated,\n} from \"@refinedev/core\";\n\nimport {\n mapAntdSorterToCrudSorting,\n mapAntdFilterToCrudFilter,\n} from \"@definitions/table\";\nimport { PaginationLink } from \"./paginationLink\";\n\nexport type useTableProps<\n TData,\n TError,\n TSearchVariables = unknown,\n> = useTablePropsCore<TData, TError> & {\n onSearch?: (data: TSearchVariables) => CrudFilters | Promise<CrudFilters>;\n};\n\nexport type useTableReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TSearchVariables = unknown,\n> = useTableCoreReturnType<TData, TError> & {\n searchFormProps: FormProps<TSearchVariables>;\n tableProps: TableProps<TData>;\n};\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\nexport const useTable = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TSearchVariables = unknown,\n>({\n onSearch,\n initialCurrent,\n initialPageSize,\n hasPagination = true,\n pagination,\n initialSorter,\n permanentSorter,\n initialFilter,\n permanentFilter,\n defaultSetFilterBehavior,\n filters: filtersFromProp,\n sorters: sortersFromProp,\n syncWithLocation,\n resource,\n successNotification,\n errorNotification,\n queryOptions,\n liveMode: liveModeFromProp,\n onLiveEvent,\n liveParams,\n meta,\n metaData,\n dataProviderName,\n}: useTableProps<TData, TError, TSearchVariables> = {}): useTableReturnType<\n TData,\n TError,\n TSearchVariables\n> => {\n const {\n tableQueryResult,\n current,\n setCurrent,\n pageSize,\n setPageSize,\n filters,\n setFilters,\n sorters,\n setSorters,\n sorter,\n setSorter,\n createLinkForSyncWithLocation,\n pageCount,\n } = useTableCore<TData, TError>({\n permanentSorter,\n permanentFilter,\n initialCurrent,\n initialPageSize,\n pagination,\n hasPagination,\n filters: filtersFromProp,\n sorters: sortersFromProp,\n initialSorter,\n initialFilter,\n syncWithLocation,\n resource,\n defaultSetFilterBehavior,\n successNotification,\n errorNotification,\n queryOptions,\n liveMode: liveModeFromProp,\n onLiveEvent,\n liveParams,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n dataProviderName,\n });\n const breakpoint = Grid.useBreakpoint();\n const [form] = Form.useForm<TSearchVariables>();\n const formSF = useFormSF<any, TSearchVariables>({\n form: form,\n });\n const liveMode = useLiveMode(liveModeFromProp);\n\n const hasPaginationString = hasPagination === false ? \"off\" : \"server\";\n const isPaginationEnabled =\n (pagination?.mode ?? hasPaginationString) !== \"off\";\n\n const preferredInitialFilters = pickNotDeprecated(\n filtersFromProp?.initial,\n initialFilter,\n );\n\n const { data, isFetched, isLoading } = tableQueryResult;\n\n const onChange = (\n paginationState: TablePaginationConfig,\n tableFilters: Record<\n string,\n (string | number | boolean) | (string | number | boolean)[] | null\n >,\n sorter: SorterResult<any> | SorterResult<any>[],\n ) => {\n if (tableFilters && Object.keys(tableFilters).length > 0) {\n // Map Antd:Filter -> refine:CrudFilter\n const crudFilters = mapAntdFilterToCrudFilter(\n tableFilters,\n filters,\n preferredInitialFilters,\n );\n setFilters(crudFilters);\n }\n\n if (sorter && Object.keys(sorter).length > 0) {\n // Map Antd:Sorter -> refine:CrudSorting\n const crudSorting = mapAntdSorterToCrudSorting(sorter);\n setSorters(crudSorting);\n }\n\n if (isPaginationEnabled) {\n setCurrent?.(paginationState.current || 1);\n setPageSize?.(paginationState.pageSize || 10);\n }\n };\n\n const onFinish = async (value: TSearchVariables) => {\n if (onSearch) {\n const searchFilters = await onSearch(value);\n setFilters(searchFilters);\n\n if (isPaginationEnabled) {\n setCurrent?.(1);\n }\n }\n };\n\n const antdPagination = (): false | TablePaginationConfig => {\n if (isPaginationEnabled) {\n return {\n itemRender: (page, type, element) => {\n const link = createLinkForSyncWithLocation({\n pagination: {\n pageSize,\n current: page,\n },\n sorters,\n filters,\n });\n\n if (type === \"page\") {\n return createElement(PaginationLink, {\n to: link,\n element: `${page}`,\n });\n }\n if (type === \"next\" || type === \"prev\") {\n return createElement(PaginationLink, {\n to: link,\n element: element,\n });\n }\n\n if (type === \"jump-next\" || type === \"jump-prev\") {\n const elementChildren = (element as React.ReactElement)\n ?.props?.children;\n\n return createElement(PaginationLink, {\n to: link,\n element:\n Children.count(elementChildren) > 1\n ? createElement(\n Fragment,\n {},\n elementChildren,\n )\n : elementChildren,\n });\n }\n\n return element;\n },\n pageSize,\n current,\n simple: !breakpoint.sm,\n position: !breakpoint.sm ? [\"bottomCenter\"] : [\"bottomRight\"],\n total: data?.total,\n };\n }\n\n return false;\n };\n\n return {\n searchFormProps: {\n ...formSF.formProps,\n onFinish,\n },\n tableProps: {\n dataSource: data?.data,\n loading: liveMode === \"auto\" ? isLoading : !isFetched,\n onChange,\n pagination: antdPagination(),\n scroll: { x: true },\n },\n tableQueryResult,\n sorters,\n sorter,\n filters,\n setSorters,\n setSorter,\n setFilters,\n current,\n setCurrent,\n pageSize,\n setPageSize,\n pageCount,\n createLinkForSyncWithLocation,\n };\n};\n","import {\n CrudFilters,\n CrudOperators,\n CrudSorting,\n CrudFilter,\n getDefaultFilter as getDefaultFilterCore,\n getDefaultSortOrder as getDefaultSortOrderCore,\n ConditionalFilter,\n LogicalFilter,\n} from \"@refinedev/core\";\nimport { SortOrder, SorterResult } from \"antd/lib/table/interface\";\n\nexport const getDefaultSortOrder = (\n columnName: string,\n sorter?: CrudSorting,\n): SortOrder | undefined => {\n const sort = getDefaultSortOrderCore(columnName, sorter);\n\n if (sort) {\n return `${sort}end`;\n }\n\n return undefined;\n};\n\n/**\n * @deprecated getDefaultFilter moved to `@refinedev/core`. Use from `@refinedev/core`\n */\nexport const getDefaultFilter = (\n columnName: string,\n filters?: CrudFilters,\n operatorType: CrudOperators = \"eq\",\n): CrudFilter[\"value\"] | undefined => {\n return getDefaultFilterCore(columnName, filters, operatorType);\n};\n\nexport const mapAntdSorterToCrudSorting = (\n sorter: SorterResult<any> | SorterResult<any>[],\n): CrudSorting => {\n const crudSorting: CrudSorting = [];\n if (Array.isArray(sorter)) {\n sorter\n .sort((a, b) => {\n return ((a.column?.sorter as { multiple?: number }).multiple ??\n 0) <\n ((b.column?.sorter as { multiple?: number }).multiple ?? 0)\n ? -1\n : 0;\n })\n .map((item) => {\n if (item.field && item.order) {\n const field = Array.isArray(item.field)\n ? item.field.join(\".\")\n : `${item.field}`;\n\n crudSorting.push({\n field: `${item.columnKey ?? field}`,\n order: item.order.replace(\"end\", \"\") as \"asc\" | \"desc\",\n });\n }\n });\n } else {\n if (sorter.field && sorter.order) {\n const field = Array.isArray(sorter.field)\n ? sorter.field.join(\".\")\n : `${sorter.field}`;\n\n crudSorting.push({\n field: `${sorter.columnKey ?? field}`,\n order: sorter.order.replace(\"end\", \"\") as \"asc\" | \"desc\",\n });\n }\n }\n\n return crudSorting;\n};\n\nexport const mapAntdFilterToCrudFilter = (\n tableFilters: Record<\n string,\n (string | number | boolean) | (string | number | boolean)[] | null\n >,\n prevFilters: CrudFilters,\n initialFilters?: CrudFilters,\n): CrudFilters => {\n const crudFilters: CrudFilters = [];\n const mapInitialFilter: Record<string, CrudFilter> = (\n initialFilters ?? []\n ).reduce((acc, item) => {\n const field =\n (item as ConditionalFilter).key || (item as LogicalFilter).field;\n return { ...acc, [field]: item };\n }, {});\n\n Object.keys(tableFilters).map((field) => {\n const value = tableFilters[field];\n const operator =\n prevFilters\n .filter((i) => i.operator !== \"or\")\n .find((p: any) => p.field === field)?.operator ||\n mapInitialFilter[field]?.operator;\n\n if (operator !== \"or\" && operator !== \"and\") {\n crudFilters.push({\n field,\n operator: operator ?? (Array.isArray(value) ? \"in\" : \"eq\"),\n value,\n });\n }\n });\n\n return crudFilters;\n};\n","import { useLink, useRouterContext, useRouterType } from \"@refinedev/core\";\nimport React, { ReactNode } from \"react\";\n\ninterface PaginationLinkProps {\n to: string;\n element: ReactNode;\n}\n\nexport const PaginationLink = ({ to, element }: PaginationLinkProps) => {\n const { Link: LegacyLink } = useRouterContext();\n const routerType = useRouterType();\n const Link = useLink();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n return (\n <ActiveLink\n to={to}\n replace={false}\n onClick={(e: React.PointerEvent<HTMLButtonElement>) => {\n e.preventDefault();\n }}\n >\n {element}\n </ActiveLink>\n );\n};\n","import { useTable } from \"@hooks\";\nimport { BaseKey, BaseRecord, HttpError, UseFormProps } from \"@refinedev/core\";\nimport { ButtonProps } from \"antd\";\n\nimport { useTableProps, useTableReturnType } from \"../useTable\";\nimport { UseFormReturnType, useForm } from \"../../form/useForm\";\n\nexport type useEditableTableReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n TSearchVariables = unknown,\n> = useTableReturnType<TData, TError, TSearchVariables> &\n UseFormReturnType<TData, TError, TVariables> & {\n saveButtonProps: ButtonProps & {\n onClick: () => void;\n };\n cancelButtonProps: ButtonProps & {\n onClick: () => void;\n };\n editButtonProps: (id: BaseKey) => ButtonProps & {\n onClick: () => void;\n };\n isEditing: (id: BaseKey) => boolean;\n };\n\ntype useEditableTableProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n TSearchVariables = unknown,\n> = Omit<\n useTableProps<TData, TError, TSearchVariables>,\n \"successNotification\" | \"errorNotification\"\n> &\n UseFormProps<TData, TError, TVariables>;\n\n/**\n * `useEditeableTable` allows you to implement edit feature on the table with ease,\n * on top of all the features that {@link https://refine.dev/docs/api-references/hooks/table/useTable `useTable`} provides.\n * `useEditableTable` return properties that can be used on Ant Design's {@link https://ant.design/components/table/ `<Table>`}\n * and {@link https://ant.design/components/form/ `<Form>`} components.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/table/useEditableTable} for more details.\n */\nexport const useEditableTable = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n TSearchVariables = unknown,\n>(\n props: useEditableTableProps<\n TData,\n TError,\n TVariables,\n TSearchVariables\n > = {},\n): useEditableTableReturnType<TData, TError, TVariables, TSearchVariables> => {\n const table = useTable<TData, TError, TSearchVariables>({\n ...props,\n successNotification: undefined,\n errorNotification: undefined,\n });\n const edit = useForm<TData, TError, TVariables>({\n ...props,\n action: \"edit\",\n redirect: false,\n });\n\n const { id: editId, setId, saveButtonProps } = edit;\n\n const cancelButtonProps = {\n onClick: () => {\n setId(undefined);\n },\n };\n\n const editButtonProps = (id: BaseKey) => {\n return {\n onClick: () => setId(id),\n };\n };\n\n const isEditing = (id: BaseKey) => id === editId;\n\n return {\n ...table,\n ...edit,\n saveButtonProps,\n cancelButtonProps,\n editButtonProps,\n isEditing,\n };\n};\n","import { SelectProps } from \"antd/lib/select\";\nimport { QueryObserverResult } from \"@tanstack/react-query\";\n\nimport {\n useSelect as useSelectCore,\n BaseRecord,\n GetManyResponse,\n GetListResponse,\n HttpError,\n UseSelectProps,\n} from \"@refinedev/core\";\n\nexport type UseSelectReturnType<TData extends BaseRecord = BaseRecord> = {\n selectProps: SelectProps<{ value: string; label: string }>;\n queryResult: QueryObserverResult<GetListResponse<TData>>;\n defaultValueQueryResult: QueryObserverResult<GetManyResponse<TData>>;\n};\n\n/**\n * `useSelect` hook allows you to manage an Ant Design {@link https://ant.design/components/select/ Select} component when records in a resource needs to be used as select options.\n *\n * @see {@link https://refine.dev/docs/api-references/hooks/field/useSelect} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}\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 { queryResult, defaultValueQueryResult, onSearch, options } =\n useSelectCore(props);\n\n return {\n selectProps: {\n options,\n onSearch,\n loading: defaultValueQueryResult.isFetching,\n showSearch: true,\n filterOption: false,\n },\n queryResult,\n defaultValueQueryResult,\n };\n};\n","import { QueryObserverResult } from \"@tanstack/react-query\";\n\nimport { CheckboxGroupProps } from \"antd/lib/checkbox\";\nimport {\n BaseRecord,\n GetListResponse,\n HttpError,\n UseSelectProps,\n useSelect,\n BaseKey,\n pickNotDeprecated,\n} from \"@refinedev/core\";\n\nexport type UseCheckboxGroupReturnType<TData extends BaseRecord = BaseRecord> =\n {\n checkboxGroupProps: CheckboxGroupProps;\n queryResult: QueryObserverResult<GetListResponse<TData>>;\n };\n\n/**\n * `useCheckboxGroup` hook allows you to manage an Ant Design {@link https://ant.design/components/checkbox/#components-checkbox-demo-group Checkbox.Group} component when records in a resource needs to be used as checkbox options.\n *\n * @see {@link https://refine.dev/docs/ui-framewors/antd/hooks/field/useCheckboxGroup} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}\n *\n */\n\ntype UseCheckboxGroupProps<TData, TError> = Omit<\n UseSelectProps<TData, TError>,\n \"defaultValue\"\n> & {\n /**\n * Sets the default value\n */\n defaultValue?: BaseKey[];\n};\n\nexport const useCheckboxGroup = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n>({\n resource,\n sort,\n sorters,\n filters,\n optionLabel,\n optionValue,\n queryOptions,\n fetchSize,\n pagination,\n liveMode,\n defaultValue,\n onLiveEvent,\n liveParams,\n meta,\n metaData,\n dataProviderName,\n}: UseCheckboxGroupProps<TData, TError>): UseCheckboxGroupReturnType<TData> => {\n const { queryResult, options } = useSelect({\n resource,\n sort,\n sorters,\n filters,\n optionLabel,\n optionValue,\n queryOptions,\n fetchSize,\n pagination,\n liveMode,\n defaultValue,\n onLiveEvent,\n liveParams,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n dataProviderName,\n });\n return {\n checkboxGroupProps: {\n options,\n defaultValue,\n },\n queryResult,\n };\n};\n","import { QueryObserverResult } from \"@tanstack/react-query\";\n\nimport { RadioGroupProps } from \"antd/lib/radio\";\nimport {\n BaseKey,\n BaseRecord,\n GetListResponse,\n HttpError,\n pickNotDeprecated,\n useSelect,\n UseSelectProps,\n} from \"@refinedev/core\";\n\nexport type UseRadioGroupReturnType<TData extends BaseRecord = BaseRecord> = {\n radioGroupProps: RadioGroupProps;\n queryResult: QueryObserverResult<GetListResponse<TData>>;\n};\n\n/**\n * `useRadioGroup` hook allows you to manage an Ant Design {@link https://ant.design/components/radio/#components-radio-demo-radiogroup-with-name Radio.Group} component when records in a resource needs to be used as radio options.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/field/useRadioGroup} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/core/interfaceReferences#baserecord `BaseRecord`}\n *\n */\n\ntype UseRadioGroupProps<TData, TError> = Omit<\n UseSelectProps<TData, TError>,\n \"defaultValue\"\n> & {\n /**\n * Sets the default value\n */\n defaultValue?: BaseKey;\n};\n\nexport const useRadioGroup = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n>({\n resource,\n sort,\n sorters,\n filters,\n optionLabel,\n optionValue,\n queryOptions,\n fetchSize,\n pagination,\n liveMode,\n defaultValue,\n onLiveEvent,\n liveParams,\n meta,\n metaData,\n dataProviderName,\n}: UseRadioGroupProps<TData, TError>): UseRadioGroupReturnType<TData> => {\n const { queryResult, options } = useSelect({\n resource,\n sort,\n sorters,\n filters,\n optionLabel,\n optionValue,\n queryOptions,\n fetchSize,\n pagination,\n liveMode,\n defaultValue,\n onLiveEvent,\n liveParams,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n dataProviderName,\n });\n\n return {\n radioGroupProps: {\n options,\n defaultValue,\n },\n queryResult,\n };\n};\n","import React from \"react\";\nimport { ButtonProps, notification, UploadProps, Progress } from \"antd\";\nimport {\n useTranslate,\n useResource,\n BaseRecord,\n HttpError,\n useImport as useImportCore,\n UseImportReturnType,\n ImportOptions,\n pickNotDeprecated,\n} from \"@refinedev/core\";\n\n/**\n * `useImport` hook allows you to handle your csv import logic easily.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/import/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 resource: resourceFromProp,\n resourceName,\n mapData = (item) => item as unknown as TVariables,\n paparseOptions,\n batchSize = Number.MAX_SAFE_INTEGER,\n onFinish,\n meta,\n metaData,\n dataProviderName,\n onProgress: onProgressFromProp,\n}: ImportOptions<TItem, TVariables, TData> = {}): Omit<\n UseImportReturnType<TData, TVariables, TError>,\n \"handleChange\" | \"inputProps\"\n> & {\n uploadProps: UploadProps;\n buttonProps: ButtonProps;\n} => {\n const t = useTranslate();\n\n const { resource } = useResource(resourceFromProp ?? resourceName);\n\n const { mutationResult, isLoading, handleChange } = useImportCore<\n TItem,\n TData,\n TError,\n TVariables\n >({\n resource: resource?.identifier ?? resource?.name,\n mapData,\n paparseOptions,\n batchSize,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n dataProviderName,\n onFinish,\n onProgress:\n onProgressFromProp ??\n (({ totalAmount, processedAmount }) => {\n if (totalAmount > 0 && processedAmount > 0) {\n const description = (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginTop: \"-7px\",\n }}\n >\n <Progress\n type=\"circle\"\n percent={Math.floor(\n (processedAmount / totalAmount) * 100,\n )}\n width={50}\n strokeColor=\"#1890ff\"\n status=\"normal\"\n />\n <span style={{ marginLeft: 8, width: \"100%\" }}>\n {t(\n \"notifications.importProgress\",\n {\n processed: processedAmount,\n total: totalAmount,\n },\n `Importing: ${processedAmount}/${totalAmount}`,\n )}\n </span>\n </div>\n );\n\n notification.open({\n description,\n message: null,\n key: `${resource}-import`,\n duration: 0,\n });\n\n if (processedAmount >= totalAmount) {\n }\n\n if (processedAmount === totalAmount) {\n setTimeout(() => {\n notification.destroy(`${resource}-import`);\n }, 4500);\n }\n }\n }),\n });\n\n return {\n uploadProps: {\n onChange: handleChange,\n beforeUpload: () => false,\n showUploadList: false,\n accept: \".csv\",\n },\n buttonProps: {\n type: \"default\",\n loading: isLoading,\n },\n mutationResult,\n isLoading,\n };\n};\n","import { Children, createElement, Fragment } from \"react\";\nimport { ListProps, FormProps, Form, Grid } from \"antd\";\n\nimport {\n BaseRecord,\n CrudFilters,\n HttpError,\n useTable as useTableCore,\n useTableProps as useTablePropsCore,\n useTableReturnType,\n pickNotDeprecated,\n} from \"@refinedev/core\";\nimport { useLiveMode } from \"@refinedev/core\";\nimport { PaginationLink } from \"@hooks/table/useTable/paginationLink\";\nimport { PaginationConfig } from \"antd/lib/pagination\";\n\nexport type useSimpleListProps<TData, TError, TSearchVariables> =\n useTablePropsCore<TData, TError> & {\n onSearch?: (\n data: TSearchVariables,\n ) => CrudFilters | Promise<CrudFilters>;\n };\n\nexport type useSimpleListReturnType<\n TData extends BaseRecord = BaseRecord,\n TSearchVariables = unknown,\n> = Omit<useTableReturnType<TData>, \"tableQueryResult\"> & {\n listProps: ListProps<TData>;\n queryResult: useTableReturnType[\"tableQueryResult\"];\n searchFormProps: FormProps<TSearchVariables>;\n};\n\n/**\n * By using `useSimpleList` you get props for your records from API in accordance with Ant Design {@link https://ant.design/components/list/ `<List>`} component.\n * All features such as pagination, sorting come out of the box.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/list/useSimpleList} 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 TSearchVariables - Antd form values\n *\n */\n\nexport const useSimpleList = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TSearchVariables = unknown,\n>({\n resource,\n initialCurrent,\n initialPageSize,\n pagination,\n hasPagination = true,\n initialSorter,\n permanentSorter,\n initialFilter,\n permanentFilter,\n defaultSetFilterBehavior,\n filters: filtersFromProp,\n sorters: sortersFromProp,\n onSearch,\n queryOptions,\n syncWithLocation,\n successNotification,\n errorNotification,\n liveMode: liveModeFromProp,\n onLiveEvent,\n liveParams,\n meta,\n metaData,\n dataProviderName,\n}: useSimpleListProps<\n TData,\n TError,\n TSearchVariables\n> = {}): useSimpleListReturnType<TData, TSearchVariables> => {\n const {\n sorters,\n sorter,\n filters,\n current,\n pageSize,\n pageCount,\n setFilters,\n setCurrent,\n setPageSize,\n setSorter,\n setSorters,\n createLinkForSyncWithLocation,\n tableQueryResult: queryResult,\n } = useTableCore({\n resource,\n initialSorter,\n permanentSorter,\n initialFilter,\n permanentFilter,\n filters: filtersFromProp,\n sorters: sortersFromProp,\n defaultSetFilterBehavior,\n initialCurrent,\n initialPageSize,\n queryOptions,\n successNotification,\n errorNotification,\n liveMode: liveModeFromProp,\n onLiveEvent,\n liveParams,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n syncWithLocation,\n dataProviderName,\n pagination,\n hasPagination,\n });\n\n const hasPaginationString = hasPagination === false ? \"off\" : \"server\";\n const isPaginationEnabled =\n (pagination?.mode ?? hasPaginationString) !== \"off\";\n\n const breakpoint = Grid.useBreakpoint();\n\n const liveMode = useLiveMode(liveModeFromProp);\n\n const [form] = Form.useForm<TSearchVariables>();\n\n const { data, isFetched, isLoading } = queryResult;\n\n const onChange = (page: number, pageSize?: number): void => {\n if (isPaginationEnabled) {\n setCurrent(page);\n setPageSize(pageSize || 10);\n }\n };\n\n const onFinish = async (values: TSearchVariables) => {\n if (onSearch) {\n const searchFilters = await onSearch(values);\n if (isPaginationEnabled) {\n setCurrent?.(1);\n }\n return setFilters(searchFilters);\n }\n };\n\n const antdPagination = (): false | PaginationConfig => {\n if (isPaginationEnabled) {\n return {\n itemRender: (page, type, element) => {\n const link = createLinkForSyncWithLocation({\n pagination: {\n pageSize,\n current: page,\n },\n sorters,\n filters,\n });\n\n if (type === \"page\") {\n return createElement(PaginationLink, {\n to: link,\n element: `${page}`,\n });\n }\n if (type === \"next\" || type === \"prev\") {\n return createElement(PaginationLink, {\n to: link,\n element: element,\n });\n }\n\n if (type === \"jump-next\" || type === \"jump-prev\") {\n const elementChildren = (element as React.ReactElement)\n ?.props?.children;\n\n return createElement(PaginationLink, {\n to: link,\n element:\n Children.count(elementChildren) > 1\n ? createElement(\n Fragment,\n {},\n elementChildren,\n )\n : elementChildren,\n });\n }\n\n return element;\n },\n pageSize,\n current,\n simple: !breakpoint.sm,\n total: data?.total,\n onChange,\n };\n }\n\n return false;\n };\n\n return {\n searchFormProps: {\n form,\n onFinish,\n },\n listProps: {\n dataSource: data?.data,\n loading: liveMode === \"auto\" ? isLoading : !isFetched,\n pagination: antdPagination(),\n },\n queryResult,\n filters,\n setFilters,\n sorter,\n setSorter,\n sorters,\n setSorters,\n current,\n setCurrent,\n pageSize,\n setPageSize,\n pageCount,\n createLinkForSyncWithLocation,\n };\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { UploadChangeParam } from \"antd/lib/upload\";\n\nexport type UseFileUploadStateType = () => {\n isLoading: boolean;\n onChange: (info: UploadChangeParam) => void;\n};\n\nexport const useFileUploadState: UseFileUploadStateType = () => {\n const [isLoading, setIsloading] = useState(false);\n\n const onChange = useCallback((info: UploadChangeParam) => {\n const fileListLoadings = mapStatusToLoading(info.fileList);\n\n if (fileListLoadings.includes(true)) {\n setIsloading(true);\n } else {\n setIsloading(false);\n }\n }, []);\n\n return useMemo(() => ({ isLoading, onChange }), [isLoading]);\n};\n\nconst mapStatusToLoading = (files: UploadChangeParam[\"fileList\"]) => {\n return files.map((file) => {\n switch (file.status) {\n case \"uploading\":\n return true;\n default:\n return false;\n }\n });\n};\n","import { ModalProps } from \"antd\";\nimport {\n useModal as useCoreModal,\n useModalReturnType as useCoreModelReturnType,\n} from \"@refinedev/core\";\n\nexport type useModalReturnType = {\n modalProps: ModalProps;\n} & Omit<useCoreModelReturnType, \"visible\">;\n\nexport type useModalProps = {\n /**\n * Default props for Ant Design {@link https://ant.design/components/modal/ `<Modal>`} component.\n */\n modalProps?: ModalProps;\n};\n\n/**\n * By using `useModal` you get props for your records from API in accordance with Ant Design {@link https://ant.design/components/modal/ `<Modal>`} component.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/ui/useModal} for more details.\n */\nexport const useModal = ({\n modalProps = {},\n}: useModalProps = {}): useModalReturnType => {\n const { show, close, visible } = useCoreModal({\n defaultVisible: modalProps.open,\n });\n\n return {\n modalProps: {\n ...modalProps,\n onCancel: (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n modalProps.onCancel?.(e);\n close();\n },\n open: visible,\n visible,\n },\n show,\n close,\n };\n};\n","import React from \"react\";\nimport { NotificationProvider } from \"@refinedev/core\";\nimport { notification } from \"antd\";\n\nimport { UndoableNotification } from \"@components/undoableNotification\";\n\nexport const notificationProvider: NotificationProvider = {\n open: ({\n key,\n message,\n description,\n type,\n cancelMutation,\n undoableTimeout,\n }) => {\n if (type === \"progress\") {\n notification.open({\n key,\n description: (\n <UndoableNotification\n notificationKey={key}\n message={message}\n cancelMutation={cancelMutation}\n undoableTimeout={undoableTimeout}\n />\n ),\n message: null,\n duration: 0,\n closeIcon: <></>,\n });\n } else {\n notification.open({\n key,\n description: message,\n message: description ?? null,\n type,\n });\n }\n },\n close: (key) => notification.destroy(key),\n};\n","import React from \"react\";\nimport { Button, notification, Progress } from \"antd\";\nimport { OpenNotificationParams } from \"@refinedev/core\";\nimport { UndoOutlined } from \"@ant-design/icons\";\n\nexport type UndoableNotificationProps = {\n notificationKey: OpenNotificationParams[\"key\"];\n message: OpenNotificationParams[\"message\"];\n cancelMutation: OpenNotificationParams[\"cancelMutation\"];\n undoableTimeout: OpenNotificationParams[\"undoableTimeout\"];\n};\n\nexport const UndoableNotification: React.FC<UndoableNotificationProps> = ({\n notificationKey,\n message,\n cancelMutation,\n undoableTimeout,\n}) => (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginTop: \"-7px\",\n }}\n >\n <Progress\n type=\"circle\"\n percent={(undoableTimeout ?? 0) * 20}\n format={(time) => time && time / 20}\n width={50}\n strokeColor=\"#1890ff\"\n status=\"normal\"\n />\n <span style={{ marginLeft: 8, width: \"100%\" }}>{message}</span>\n <Button\n style={{ flexShrink: 0 }}\n onClick={() => {\n cancelMutation?.();\n notification.destroy(notificationKey ?? \"\");\n }}\n disabled={undoableTimeout === 0}\n icon={<UndoOutlined />}\n ></Button>\n </div>\n);\n","import React from \"react\";\nimport { Grid, Layout as AntdLayout } from \"antd\";\n\nimport { Sider as DefaultSider } from \"./sider\";\nimport { Header as DefaultHeader } from \"./header\";\nimport { RefineLayoutLayoutProps } from \"./types\";\n\nexport const Layout: React.FC<RefineLayoutLayoutProps> = ({\n children,\n Header,\n Sider,\n Title,\n Footer,\n OffLayoutArea,\n}) => {\n const breakpoint = Grid.useBreakpoint();\n const SiderToRender = Sider ?? DefaultSider;\n const HeaderToRender = Header ?? DefaultHeader;\n const isSmall = typeof breakpoint.sm === \"undefined\" ? true : breakpoint.sm;\n\n return (\n <AntdLayout style={{ minHeight: \"100vh\" }}>\n <SiderToRender Title={Title} />\n <AntdLayout>\n <HeaderToRender />\n <AntdLayout.Content>\n <div\n style={{\n minHeight: 360,\n padding: isSmall ? 24 : 12,\n }}\n >\n {children}\n </div>\n {OffLayoutArea && <OffLayoutArea />}\n </AntdLayout.Content>\n {Footer && <Footer />}\n </AntdLayout>\n </AntdLayout>\n );\n};\n","import React, { useState } from \"react\";\nimport { Layout, Menu, Grid, ConfigProvider, Drawer, Button } from \"antd\";\nimport {\n DashboardOutlined,\n LogoutOutlined,\n UnorderedListOutlined,\n BarsOutlined,\n} from \"@ant-design/icons\";\nimport {\n useTranslate,\n useLogout,\n useTitle,\n CanAccess,\n ITreeMenu,\n useIsExistAuthentication,\n useRouterContext,\n useMenu,\n useRefineContext,\n useLink,\n useRouterType,\n useActiveAuthProvider,\n pickNotDeprecated,\n useWarnAboutChange,\n} from \"@refinedev/core\";\n\nimport { Title as DefaultTitle } from \"@components\";\n\nimport { drawerButtonStyles } from \"./styles\";\nimport { RefineLayoutSiderProps } from \"../types\";\n\nconst { SubMenu } = Menu;\n\nexport const Sider: React.FC<RefineLayoutSiderProps> = ({\n Title: TitleFromProps,\n render,\n meta,\n}) => {\n const [collapsed, setCollapsed] = useState<boolean>(false);\n const [drawerOpen, setDrawerOpen] = useState<boolean>(false);\n const isExistAuthentication = useIsExistAuthentication();\n const routerType = useRouterType();\n const NewLink = useLink();\n const { warnWhen, setWarnWhen } = useWarnAboutChange();\n const { Link: LegacyLink } = useRouterContext();\n const Link = routerType === \"legacy\" ? LegacyLink : NewLink;\n const TitleFromContext = useTitle();\n const translate = useTranslate();\n const { menuItems, selectedKey, defaultOpenKeys } = useMenu({ meta });\n const breakpoint = Grid.useBreakpoint();\n const { hasDashboard } = useRefineContext();\n const authProvider = useActiveAuthProvider();\n const { mutate: mutateLogout } = useLogout({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const isMobile =\n typeof breakpoint.lg === \"undefined\" ? false : !breakpoint.lg;\n\n const RenderToTitle = TitleFromProps ?? TitleFromContext ?? DefaultTitle;\n\n const renderTreeView = (tree: ITreeMenu[], selectedKey?: string) => {\n return tree.map((item: ITreeMenu) => {\n const {\n icon,\n label,\n route,\n key,\n name,\n children,\n parentName,\n meta,\n options,\n } = item;\n\n if (children.length > 0) {\n return (\n <CanAccess\n key={item.key}\n resource={name.toLowerCase()}\n action=\"list\"\n params={{\n resource: item,\n }}\n >\n <SubMenu\n key={item.key}\n icon={icon ?? <UnorderedListOutlined />}\n title={label}\n >\n {renderTreeView(children, selectedKey)}\n </SubMenu>\n </CanAccess>\n );\n }\n const isSelected = key === selectedKey;\n const isRoute = !(\n pickNotDeprecated(meta?.parent, options?.parent, parentName) !==\n undefined && children.length === 0\n );\n return (\n <CanAccess\n key={item.key}\n resource={name.toLowerCase()}\n action=\"list\"\n params={{\n resource: item,\n }}\n >\n <Menu.Item\n key={item.key}\n style={{\n fontWeight: isSelected ? \"bold\" : \"normal\",\n }}\n icon={icon ?? (isRoute && <UnorderedListOutlined />)}\n >\n <Link to={route ?? \"\"}>{label}</Link>\n {!collapsed && isSelected && (\n <div className=\"ant-menu-tree-arrow\" />\n )}\n </Menu.Item>\n </CanAccess>\n );\n });\n };\n\n const handleLogout = () => {\n if (warnWhen) {\n const confirm = window.confirm(\n translate(\n \"warnWhenUnsavedChanges\",\n \"Are you sure you want to leave? You have unsaved changes.\",\n ),\n );\n\n if (confirm) {\n setWarnWhen(false);\n mutateLogout();\n }\n } else {\n mutateLogout();\n }\n };\n\n const logout = isExistAuthentication && (\n <Menu.Item\n key=\"logout\"\n onClick={handleLogout}\n icon={<LogoutOutlined />}\n >\n {translate(\"buttons.logout\", \"Logout\")}\n </Menu.Item>\n );\n\n const dashboard = hasDashboard ? (\n <Menu.Item\n key=\"dashboard\"\n style={{\n fontWeight: selectedKey === \"/\" ? \"bold\" : \"normal\",\n }}\n icon={<DashboardOutlined />}\n >\n <Link to=\"/\">{translate(\"dashboard.title\", \"Dashboard\")}</Link>\n {!collapsed && selectedKey === \"/\" && (\n <div className=\"ant-menu-tree-arrow\" />\n )}\n </Menu.Item>\n ) : null;\n\n const items = renderTreeView(menuItems, selectedKey);\n\n const renderSider = () => {\n if (render) {\n return render({\n dashboard,\n items,\n logout,\n collapsed,\n });\n }\n return (\n <>\n {dashboard}\n {items}\n {logout}\n </>\n );\n };\n\n const renderMenu = () => {\n return (\n <>\n <Menu\n theme=\"dark\"\n selectedKeys={selectedKey ? [selectedKey] : []}\n defaultOpenKeys={defaultOpenKeys}\n mode=\"inline\"\n onClick={() => {\n setDrawerOpen(false);\n if (!breakpoint.lg) {\n setCollapsed(true);\n }\n }}\n >\n {renderSider()}\n </Menu>\n </>\n );\n };\n\n const renderDrawerSider = () => {\n return (\n <>\n <Drawer\n open={drawerOpen}\n onClose={() => setDrawerOpen(false)}\n placement=\"left\"\n closable={false}\n width={200}\n bodyStyle={{\n padding: 0,\n }}\n maskClosable={true}\n >\n <Layout>\n <Layout.Sider\n style={{ height: \"100vh\", overflow: \"hidden\" }}\n >\n <RenderToTitle collapsed={false} />\n {renderMenu()}\n </Layout.Sider>\n </Layout>\n </Drawer>\n <Button\n style={drawerButtonStyles}\n size=\"large\"\n onClick={() => setDrawerOpen(true)}\n icon={<BarsOutlined />}\n ></Button>\n </>\n );\n };\n\n const renderContent = () => {\n if (isMobile) {\n return renderDrawerSider();\n }\n\n return (\n <Layout.Sider\n collapsible\n collapsed={collapsed}\n onCollapse={(collapsed: boolean): void =>\n setCollapsed(collapsed)\n }\n collapsedWidth={80}\n breakpoint=\"lg\"\n >\n <RenderToTitle collapsed={collapsed} />\n {renderMenu()}\n </Layout.Sider>\n );\n };\n\n return (\n <ConfigProvider\n theme={{\n components: {\n Menu: {\n colorItemBg: \"transparent\",\n colorItemText: \"#fff\",\n colorItemTextSelected: \"#fff\",\n colorItemBgSelected: \"transparent\",\n colorItemTextHover: \"#fff\",\n },\n },\n }}\n >\n {renderContent()}\n </ConfigProvider>\n );\n};\n","import { CSSProperties } from \"react\";\n\nexport const drawerButtonStyles: CSSProperties = {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n position: \"fixed\",\n top: 64,\n zIndex: 999,\n};\n","import { useActiveAuthProvider, useGetIdentity } from \"@refinedev/core\";\nimport { Avatar, Layout as AntdLayout, Space, Typography } from \"antd\";\nimport React from \"react\";\nimport { RefineLayoutHeaderProps } from \"../types\";\nconst { Text } = Typography;\n\nexport const Header: React.FC<RefineLayoutHeaderProps> = () => {\n const authProvider = useActiveAuthProvider();\n const { data: user } = useGetIdentity({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const shouldRenderHeader = user && (user.name || user.avatar);\n\n return shouldRenderHeader ? (\n <AntdLayout.Header\n style={{\n display: \"flex\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n padding: \"0px 24px\",\n height: \"64px\",\n }}\n >\n <Space style={{ marginLeft: \"8px\" }}>\n {user?.name && (\n <Text style={{ color: \"white\" }} strong>\n {user.name}\n </Text>\n )}\n {user?.avatar && <Avatar src={user?.avatar} alt={user?.name} />}\n </Space>\n </AntdLayout.Header>\n ) : null;\n};\n","import React from \"react\";\nimport {\n TitleProps,\n useRouterContext,\n useRouterType,\n useLink,\n} from \"@refinedev/core\";\n\nexport const Title: React.FC<TitleProps> = ({ collapsed }) => {\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n return (\n <ActiveLink to=\"/\">\n {collapsed ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <img\n src=\"https://refine.ams3.cdn.digitaloceanspaces.com/logo/refine-mini.svg\"\n alt=\"Refine\"\n style={{\n margin: \"0 auto\",\n padding: \"12px 0\",\n maxHeight: \"65.5px\",\n }}\n />\n </div>\n ) : (\n <img\n src=\"https://refine.ams3.cdn.digitaloceanspaces.com/logo/refine.svg\"\n alt=\"Refine\"\n style={{\n width: \"200px\",\n padding: \"12px 24px\",\n }}\n />\n )}\n </ActiveLink>\n );\n};\n","import React from \"react\";\nimport { Grid, Layout as AntdLayout } from \"antd\";\n\nimport { ThemedSider as DefaultSider } from \"./sider\";\nimport { ThemedHeader as DefaultHeader } from \"./header\";\nimport { RefineThemedLayoutProps } from \"./types\";\n\nexport const ThemedLayout: React.FC<RefineThemedLayoutProps> = ({\n children,\n Header,\n Sider,\n Title,\n Footer,\n OffLayoutArea,\n}) => {\n const breakpoint = Grid.useBreakpoint();\n const SiderToRender = Sider ?? DefaultSider;\n const HeaderToRender = Header ?? DefaultHeader;\n const isSmall = typeof breakpoint.sm === \"undefined\" ? true : breakpoint.sm;\n\n return (\n <AntdLayout style={{ minHeight: \"100vh\" }}>\n <SiderToRender Title={Title} />\n <AntdLayout>\n <HeaderToRender />\n <AntdLayout.Content>\n <div\n style={{\n minHeight: 360,\n padding: isSmall ? 24 : 12,\n }}\n >\n {children}\n </div>\n {OffLayoutArea && <OffLayoutArea />}\n </AntdLayout.Content>\n {Footer && <Footer />}\n </AntdLayout>\n </AntdLayout>\n );\n};\n","import React, { useState } from \"react\";\nimport { Layout, Menu, Grid, Drawer, Button, theme } from \"antd\";\nimport {\n DashboardOutlined,\n LogoutOutlined,\n UnorderedListOutlined,\n BarsOutlined,\n LeftOutlined,\n RightOutlined,\n} from \"@ant-design/icons\";\nimport {\n useTranslate,\n useLogout,\n useTitle,\n CanAccess,\n ITreeMenu,\n useIsExistAuthentication,\n useRouterContext,\n useMenu,\n useRefineContext,\n useLink,\n useRouterType,\n useActiveAuthProvider,\n pickNotDeprecated,\n useWarnAboutChange,\n} from \"@refinedev/core\";\n\nimport { drawerButtonStyles } from \"./styles\";\nimport { RefineThemedLayoutSiderProps } from \"../types\";\nimport { ThemedTitle } from \"@components\";\n\nconst { SubMenu } = Menu;\nconst { useToken } = theme;\n\nexport const ThemedSider: React.FC<RefineThemedLayoutSiderProps> = ({\n Title: TitleFromProps,\n render,\n meta,\n}) => {\n const { token } = useToken();\n\n const [collapsed, setCollapsed] = useState<boolean>(false);\n const [drawerOpen, setDrawerOpen] = useState<boolean>(false);\n const isExistAuthentication = useIsExistAuthentication();\n const routerType = useRouterType();\n const NewLink = useLink();\n const { warnWhen, setWarnWhen } = useWarnAboutChange();\n const { Link: LegacyLink } = useRouterContext();\n const Link = routerType === \"legacy\" ? LegacyLink : NewLink;\n const TitleFromContext = useTitle();\n const translate = useTranslate();\n const { menuItems, selectedKey, defaultOpenKeys } = useMenu({ meta });\n const breakpoint = Grid.useBreakpoint();\n const { hasDashboard } = useRefineContext();\n const authProvider = useActiveAuthProvider();\n const { mutate: mutateLogout } = useLogout({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const isMobile =\n typeof breakpoint.lg === \"undefined\" ? false : !breakpoint.lg;\n\n const RenderToTitle = TitleFromProps ?? TitleFromContext ?? ThemedTitle;\n\n const renderTreeView = (tree: ITreeMenu[], selectedKey?: string) => {\n return tree.map((item: ITreeMenu) => {\n const {\n icon,\n label,\n route,\n key,\n name,\n children,\n parentName,\n meta,\n options,\n } = item;\n\n if (children.length > 0) {\n return (\n <CanAccess\n key={item.key}\n resource={name.toLowerCase()}\n action=\"list\"\n params={{\n resource: item,\n }}\n >\n <SubMenu\n key={item.key}\n icon={icon ?? <UnorderedListOutlined />}\n title={label}\n >\n {renderTreeView(children, selectedKey)}\n </SubMenu>\n </CanAccess>\n );\n }\n const isSelected = key === selectedKey;\n const isRoute = !(\n pickNotDeprecated(meta?.parent, options?.parent, parentName) !==\n undefined && children.length === 0\n );\n\n return (\n <CanAccess\n key={item.key}\n resource={name.toLowerCase()}\n action=\"list\"\n params={{\n resource: item,\n }}\n >\n <Menu.Item\n key={item.key}\n icon={icon ?? (isRoute && <UnorderedListOutlined />)}\n >\n <Link to={route ?? \"\"}>{label}</Link>\n {!collapsed && isSelected && (\n <div className=\"ant-menu-tree-arrow\" />\n )}\n </Menu.Item>\n </CanAccess>\n );\n });\n };\n\n const handleLogout = () => {\n if (warnWhen) {\n const confirm = window.confirm(\n translate(\n \"warnWhenUnsavedChanges\",\n \"Are you sure you want to leave? You have unsaved changes.\",\n ),\n );\n\n if (confirm) {\n setWarnWhen(false);\n mutateLogout();\n }\n } else {\n mutateLogout();\n }\n };\n\n const logout = isExistAuthentication && (\n <Menu.Item\n key=\"logout\"\n onClick={() => handleLogout()}\n icon={<LogoutOutlined />}\n >\n {translate(\"buttons.logout\", \"Logout\")}\n </Menu.Item>\n );\n\n const dashboard = hasDashboard ? (\n <Menu.Item key=\"dashboard\" icon={<DashboardOutlined />}>\n <Link to=\"/\">{translate(\"dashboard.title\", \"Dashboard\")}</Link>\n {!collapsed && selectedKey === \"/\" && (\n <div className=\"ant-menu-tree-arrow\" />\n )}\n </Menu.Item>\n ) : null;\n\n const items = renderTreeView(menuItems, selectedKey);\n\n const renderSider = () => {\n if (render) {\n return render({\n dashboard,\n items,\n logout,\n collapsed,\n });\n }\n return (\n <>\n {dashboard}\n {items}\n {logout}\n </>\n );\n };\n\n const renderMenu = () => {\n return (\n <>\n <Menu\n selectedKeys={selectedKey ? [selectedKey] : []}\n defaultOpenKeys={defaultOpenKeys}\n mode=\"inline\"\n style={{\n marginTop: \"8px\",\n border: \"none\",\n }}\n onClick={() => {\n setDrawerOpen(false);\n if (!breakpoint.lg) {\n setCollapsed(true);\n }\n }}\n >\n {renderSider()}\n </Menu>\n </>\n );\n };\n\n const renderDrawerSider = () => {\n return (\n <>\n <Drawer\n open={drawerOpen}\n onClose={() => setDrawerOpen(false)}\n placement=\"left\"\n closable={false}\n width={200}\n bodyStyle={{\n padding: 0,\n }}\n maskClosable={true}\n >\n <Layout>\n <Layout.Sider\n style={{\n height: \"100vh\",\n overflow: \"hidden\",\n backgroundColor: token.colorBgContainer,\n borderRight: `1px solid ${token.colorBgElevated}`,\n }}\n >\n <div\n style={{\n width: \"200px\",\n padding: \"0 16px\",\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n height: \"64px\",\n backgroundColor: token.colorBgElevated,\n }}\n >\n <RenderToTitle collapsed={false} />\n </div>\n {renderMenu()}\n </Layout.Sider>\n </Layout>\n </Drawer>\n <Button\n style={drawerButtonStyles}\n size=\"large\"\n onClick={() => setDrawerOpen(true)}\n icon={<BarsOutlined />}\n ></Button>\n </>\n );\n };\n\n if (isMobile) {\n return renderDrawerSider();\n }\n\n return (\n <Layout.Sider\n style={{\n backgroundColor: token.colorBgContainer,\n borderRight: `1px solid ${token.colorBgElevated}`,\n }}\n collapsible\n collapsed={collapsed}\n onCollapse={(collapsed) => setCollapsed(collapsed)}\n collapsedWidth={80}\n breakpoint=\"lg\"\n trigger={\n <Button\n type=\"text\"\n style={{\n borderRadius: 0,\n height: \"100%\",\n width: \"100%\",\n backgroundColor: token.colorBgElevated,\n }}\n >\n {collapsed ? (\n <RightOutlined\n style={{\n color: token.colorPrimary,\n }}\n />\n ) : (\n <LeftOutlined\n style={{\n color: token.colorPrimary,\n }}\n />\n )}\n </Button>\n }\n >\n <div\n style={{\n width: collapsed ? \"80px\" : \"200px\",\n padding: collapsed ? \"0\" : \"0 16px\",\n display: \"flex\",\n justifyContent: collapsed ? \"center\" : \"flex-start\",\n alignItems: \"center\",\n height: \"64px\",\n backgroundColor: token.colorBgElevated,\n fontSize: \"14px\",\n }}\n >\n <RenderToTitle collapsed={collapsed} />\n </div>\n {renderMenu()}\n </Layout.Sider>\n );\n};\n","import { CSSProperties } from \"react\";\n\nexport const drawerButtonStyles: CSSProperties = {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n position: \"fixed\",\n top: 64,\n zIndex: 999,\n};\n","import React from \"react\";\nimport { Layout as AntdLayout, Typography, Avatar, Space, theme } from \"antd\";\nimport { useActiveAuthProvider, useGetIdentity } from \"@refinedev/core\";\nimport { RefineThemedLayoutHeaderProps } from \"../types\";\n\nconst { Text } = Typography;\nconst { useToken } = theme;\n\nexport const ThemedHeader: React.FC<RefineThemedLayoutHeaderProps> = () => {\n const { token } = useToken();\n\n const authProvider = useActiveAuthProvider();\n const { data: user } = useGetIdentity({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const shouldRenderHeader = user && (user.name || user.avatar);\n\n if (!shouldRenderHeader) {\n return null;\n }\n\n return (\n <AntdLayout.Header\n style={{\n backgroundColor: token.colorBgElevated,\n display: \"flex\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n padding: \"0px 24px\",\n height: \"64px\",\n }}\n >\n <Space>\n <Space size=\"middle\">\n {user?.name && <Text strong>{user.name}</Text>}\n {user?.avatar && (\n <Avatar src={user?.avatar} alt={user?.name} />\n )}\n </Space>\n </Space>\n </AntdLayout.Header>\n );\n};\n","import React from \"react\";\nimport { useRouterContext, useRouterType, useLink } from \"@refinedev/core\";\nimport { Typography, theme, Space } from \"antd\";\nimport { RefineLayoutThemedTitleProps } from \"../types\";\n\nconst { useToken } = theme;\n\nconst defaultText = \"refine Project\";\n\nconst defaultIcon = (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n data-testid=\"refine-logo\"\n >\n <path\n d=\"M12 9C13.6569 9 15 7.65685 15 6C15 4.34315 13.6569 3 12 3C10.3431 3 9 4.34315 9 6C9 7.65685 10.3431 9 12 9Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM8 6C8 3.79086 9.79086 2 12 2C14.2091 2 16 3.79086 16 6V18C16 20.2091 14.2091 22 12 22C9.79086 22 8 20.2091 8 18V6Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport const ThemedTitle: React.FC<RefineLayoutThemedTitleProps> = ({\n collapsed,\n icon = defaultIcon,\n text = defaultText,\n wrapperStyles,\n}) => {\n const { token } = useToken();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n return (\n <ActiveLink\n to=\"/\"\n style={{\n display: \"inline-block\",\n textDecoration: \"none\",\n }}\n >\n <Space\n style={{\n display: \"flex\",\n alignItems: \"center\",\n fontSize: \"inherit\",\n ...wrapperStyles,\n }}\n >\n <div\n style={{\n height: \"24px\",\n width: \"24px\",\n color: token.colorPrimary,\n }}\n >\n {icon}\n </div>\n\n {!collapsed && (\n <Typography.Title\n style={{\n fontSize: \"inherit\",\n marginBottom: 0,\n fontWeight: 700,\n }}\n >\n {text}\n </Typography.Title>\n )}\n </Space>\n </ActiveLink>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { PlusSquareOutlined } from \"@ant-design/icons\";\nimport {\n useNavigation,\n useTranslate,\n useCan,\n useResource,\n useRouterContext,\n useRouterType,\n useLink,\n} from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { CreateButtonProps } from \"../types\";\n\n/**\n * <CreateButton> uses Ant Design's {@link https://ant.design/components/button/ `<Button> component`}.\n * It uses the {@link https://refine.dev/docs/core/hooks/navigation/useNavigation#create `create`} method from {@link https://refine.dev/docs/core/hooks/navigation/useNavigation `useNavigation`} under the hood.\n * It can be useful to redirect the app to the create page route of resource}.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/create-button} for more details.\n */\nexport const CreateButton: React.FC<CreateButtonProps> = ({\n resource: resourceNameFromProps,\n resourceNameOrRouteName: propResourceNameOrRouteName,\n hideText = false,\n accessControl,\n meta,\n children,\n onClick,\n ...rest\n}) => {\n const accessControlEnabled = accessControl?.enabled ?? true;\n const hideIfUnauthorized = accessControl?.hideIfUnauthorized ?? false;\n const translate = useTranslate();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const { createUrl: generateCreateUrl } = useNavigation();\n\n const { resource } = useResource(\n resourceNameFromProps ?? propResourceNameOrRouteName,\n );\n\n const { data } = useCan({\n resource: resource?.name,\n action: \"create\",\n queryOptions: {\n enabled: accessControlEnabled,\n },\n params: {\n resource,\n },\n });\n\n const createButtonDisabledTitle = () => {\n if (data?.can) return \"\";\n else if (data?.reason) return data.reason;\n else\n return translate(\n \"buttons.notAccessTitle\",\n \"You don't have permission to access\",\n );\n };\n\n const createUrl = resource ? generateCreateUrl(resource, meta) : \"\";\n\n if (accessControlEnabled && hideIfUnauthorized && !data?.can) {\n return null;\n }\n\n return (\n <ActiveLink\n to={createUrl}\n replace={false}\n onClick={(e: React.PointerEvent<HTMLButtonElement>) => {\n if (data?.can === false) {\n e.preventDefault();\n return;\n }\n if (onClick) {\n e.preventDefault();\n onClick(e);\n }\n }}\n >\n <Button\n icon={<PlusSquareOutlined />}\n disabled={data?.can === false}\n title={createButtonDisabledTitle()}\n data-testid={RefineButtonTestIds.CreateButton}\n type=\"primary\"\n {...rest}\n >\n {!hideText &&\n (children ?? translate(\"buttons.create\", \"Create\"))}\n </Button>\n </ActiveLink>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { EditOutlined } from \"@ant-design/icons\";\nimport {\n useCan,\n useNavigation,\n useTranslate,\n useResource,\n useRouterContext,\n useRouterType,\n useLink,\n} from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { EditButtonProps } from \"../types\";\n\n/**\n * `<EditButton>` uses Ant Design's {@link https://ant.design/components/button/ `<Button>`} component.\n * It uses the {@link https://refine.dev/docs/core/hooks/navigation/useNavigation#edit `edit`} method from {@link https://refine.dev/docs/core/hooks/navigation/useNavigation `useNavigation`} under the hood.\n * It can be useful when redirecting the app to the edit page with the record id route of resource}.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/edit-button} for more details.\n */\nexport const EditButton: React.FC<EditButtonProps> = ({\n resource: resourceNameFromProps,\n resourceNameOrRouteName: propResourceNameOrRouteName,\n recordItemId,\n hideText = false,\n accessControl,\n meta,\n children,\n onClick,\n ...rest\n}) => {\n const accessControlEnabled = accessControl?.enabled ?? true;\n const hideIfUnauthorized = accessControl?.hideIfUnauthorized ?? false;\n const translate = useTranslate();\n\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const { editUrl: generateEditUrl } = useNavigation();\n\n const { id, resource } = useResource(\n resourceNameFromProps ?? propResourceNameOrRouteName,\n );\n\n const { data } = useCan({\n resource: resource?.name,\n action: \"edit\",\n params: { id: recordItemId ?? id, resource },\n queryOptions: {\n enabled: accessControlEnabled,\n },\n });\n\n const createButtonDisabledTitle = () => {\n if (data?.can) return \"\";\n else if (data?.reason) return data.reason;\n else\n return translate(\n \"buttons.notAccessTitle\",\n \"You don't have permission to access\",\n );\n };\n\n const editUrl =\n resource && (recordItemId ?? id)\n ? generateEditUrl(resource, recordItemId! ?? id!, meta)\n : \"\";\n\n if (accessControlEnabled && hideIfUnauthorized && !data?.can) {\n return null;\n }\n\n return (\n <ActiveLink\n to={editUrl}\n replace={false}\n onClick={(e: React.PointerEvent<HTMLButtonElement>) => {\n if (data?.can === false) {\n e.preventDefault();\n return;\n }\n if (onClick) {\n e.preventDefault();\n onClick(e);\n }\n }}\n >\n <Button\n icon={<EditOutlined />}\n disabled={data?.can === false}\n title={createButtonDisabledTitle()}\n data-testid={RefineButtonTestIds.EditButton}\n {...rest}\n >\n {!hideText && (children ?? translate(\"buttons.edit\", \"Edit\"))}\n </Button>\n </ActiveLink>\n );\n};\n","import React from \"react\";\nimport { Button, Popconfirm } from \"antd\";\nimport { DeleteOutlined } from \"@ant-design/icons\";\nimport {\n useDelete,\n useTranslate,\n useMutationMode,\n useCan,\n useResource,\n pickNotDeprecated,\n useWarnAboutChange,\n} from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { DeleteButtonProps } from \"../types\";\n\n/**\n * `<DeleteButton>` uses Ant Design's {@link https://ant.design/components/button/ `<Button>`} and {@link https://ant.design/components/button/ `<Popconfirm>`} components.\n * When you try to delete something, a pop-up shows up and asks for confirmation. When confirmed it executes the `useDelete` method provided by your `dataProvider`.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/delete-button} for more details.\n */\nexport const DeleteButton: React.FC<DeleteButtonProps> = ({\n resource: resourceNameFromProps,\n resourceNameOrRouteName: propResourceNameOrRouteName,\n recordItemId,\n onSuccess,\n mutationMode: mutationModeProp,\n children,\n successNotification,\n errorNotification,\n hideText = false,\n accessControl,\n metaData,\n meta,\n dataProviderName,\n confirmTitle,\n confirmOkText,\n confirmCancelText,\n invalidates,\n ...rest\n}) => {\n const accessControlEnabled = accessControl?.enabled ?? true;\n const hideIfUnauthorized = accessControl?.hideIfUnauthorized ?? false;\n const translate = useTranslate();\n\n const { id, resource } = useResource(\n resourceNameFromProps ?? propResourceNameOrRouteName,\n );\n\n const { mutationMode: mutationModeContext } = useMutationMode();\n\n const mutationMode = mutationModeProp ?? mutationModeContext;\n\n const { mutate, isLoading, variables } = useDelete();\n\n const { data } = useCan({\n resource: resource?.name,\n action: \"delete\",\n params: { id: recordItemId ?? id, resource },\n queryOptions: {\n enabled: accessControlEnabled,\n },\n });\n\n const { setWarnWhen } = useWarnAboutChange();\n\n if (accessControlEnabled && hideIfUnauthorized && !data?.can) {\n return null;\n }\n\n return (\n <Popconfirm\n key=\"delete\"\n okText={confirmOkText ?? translate(\"buttons.delete\", \"Delete\")}\n cancelText={\n confirmCancelText ?? translate(\"buttons.cancel\", \"Cancel\")\n }\n okType=\"danger\"\n title={\n confirmTitle ?? translate(\"buttons.confirm\", \"Are you sure?\")\n }\n okButtonProps={{ disabled: isLoading }}\n onConfirm={(): void => {\n if ((recordItemId ?? id) && resource?.name) {\n setWarnWhen(false);\n mutate(\n {\n id: recordItemId ?? id ?? \"\",\n resource: resource?.name,\n mutationMode,\n successNotification,\n errorNotification,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n dataProviderName,\n invalidates,\n },\n {\n onSuccess: (value) => {\n onSuccess && onSuccess(value);\n },\n },\n );\n }\n }}\n disabled={\n typeof rest?.disabled !== \"undefined\"\n ? rest.disabled\n : data?.can === false\n }\n >\n <Button\n danger\n loading={(recordItemId ?? id) === variables?.id && isLoading}\n icon={<DeleteOutlined />}\n disabled={data?.can === false}\n data-testid={RefineButtonTestIds.DeleteButton}\n {...rest}\n >\n {!hideText &&\n (children ?? translate(\"buttons.delete\", \"Delete\"))}\n </Button>\n </Popconfirm>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { RedoOutlined } from \"@ant-design/icons\";\nimport {\n useOne,\n useTranslate,\n useResource,\n pickNotDeprecated,\n} from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { RefreshButtonProps } from \"../types\";\n\n/**\n * `<RefreshButton>` uses Ant Design's {@link https://ant.design/components/button/ `<Button>`} component\n * to update the data shown on the page via the {@link https://refine.dev/docs/core/hooks/data/useOne `useOne`} method provided by your dataProvider.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/refresh-button} for more details.\n */\nexport const RefreshButton: React.FC<RefreshButtonProps> = ({\n resource: resourceNameFromProps,\n resourceNameOrRouteName: propResourceNameOrRouteName,\n recordItemId,\n hideText = false,\n meta,\n metaData,\n dataProviderName,\n children,\n onClick,\n ...rest\n}) => {\n const translate = useTranslate();\n\n const { resource, id } = useResource(\n resourceNameFromProps ?? propResourceNameOrRouteName,\n );\n\n const { refetch, isFetching } = useOne({\n resource: resource?.name,\n id: recordItemId ?? id,\n queryOptions: {\n enabled: false,\n },\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n liveMode: \"off\",\n dataProviderName,\n });\n\n return (\n <Button\n // TODO: fix any type\n onClick={(e) => (onClick ? onClick(e as any) : refetch())}\n icon={<RedoOutlined spin={isFetching} />}\n data-testid={RefineButtonTestIds.RefreshButton}\n {...rest}\n >\n {!hideText && (children ?? translate(\"buttons.refresh\", \"Refresh\"))}\n </Button>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { EyeOutlined } from \"@ant-design/icons\";\nimport {\n useCan,\n useNavigation,\n useTranslate,\n useResource,\n useRouterContext,\n useRouterType,\n useLink,\n} from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { ShowButtonProps } from \"../types\";\n\n/**\n * `<ShowButton>` uses Ant Design's {@link https://ant.design/components/button/ `<Button>`} component.\n * It uses the {@link https://refine.dev/docs/core/hooks/navigation/useNavigation#show `show`} method from {@link https://refine.dev/docs/core/hooks/navigation/useNavigation `useNavigation`} under the hood.\n * It can be useful when redirecting the app to the show page with the record id route of resource.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/show-button} for more details.\n */\nexport const ShowButton: React.FC<ShowButtonProps> = ({\n resource: resourceNameFromProps,\n resourceNameOrRouteName: propResourceNameOrRouteName,\n recordItemId,\n hideText = false,\n accessControl,\n meta,\n children,\n onClick,\n ...rest\n}) => {\n const accessControlEnabled = accessControl?.enabled ?? true;\n const hideIfUnauthorized = accessControl?.hideIfUnauthorized ?? false;\n const { showUrl: generateShowUrl } = useNavigation();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const translate = useTranslate();\n\n const { id, resource } = useResource(\n resourceNameFromProps ?? propResourceNameOrRouteName,\n );\n\n const { data } = useCan({\n resource: resource?.name,\n action: \"show\",\n params: { id: recordItemId ?? id, resource },\n queryOptions: {\n enabled: accessControlEnabled,\n },\n });\n\n const createButtonDisabledTitle = () => {\n if (data?.can) return \"\";\n else if (data?.reason) return data.reason;\n else\n return translate(\n \"buttons.notAccessTitle\",\n \"You don't have permission to access\",\n );\n };\n\n const showUrl =\n resource && (recordItemId || id)\n ? generateShowUrl(resource, recordItemId! ?? id!, meta)\n : \"\";\n\n if (accessControlEnabled && hideIfUnauthorized && !data?.can) {\n return null;\n }\n\n return (\n <ActiveLink\n to={showUrl}\n replace={false}\n onClick={(e: React.PointerEvent<HTMLButtonElement>) => {\n if (data?.can === false) {\n e.preventDefault();\n return;\n }\n if (onClick) {\n e.preventDefault();\n onClick(e);\n }\n }}\n >\n <Button\n icon={<EyeOutlined />}\n disabled={data?.can === false}\n title={createButtonDisabledTitle()}\n data-testid={RefineButtonTestIds.ShowButton}\n {...rest}\n >\n {!hideText && (children ?? translate(\"buttons.show\", \"Show\"))}\n </Button>\n </ActiveLink>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { BarsOutlined } from \"@ant-design/icons\";\nimport {\n useCan,\n useNavigation,\n useTranslate,\n userFriendlyResourceName,\n useResource,\n useRouterContext,\n useRouterType,\n useLink,\n pickNotDeprecated,\n} from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { ListButtonProps } from \"../types\";\n\n/**\n * `<ListButton>` is using Ant Design's {@link https://ant.design/components/button/ `<Button>`} component.\n * It uses the {@link https://refine.dev/docs/core/hooks/navigation/useNavigation#list `list`} method from {@link https://refine.dev/docs/core/hooks/navigation/useNavigation `useNavigation`} under the hood.\n * It can be useful when redirecting the app to the list page route of resource}.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/list-button} for more details.\n */\nexport const ListButton: React.FC<ListButtonProps> = ({\n resource: resourceNameFromProps,\n resourceNameOrRouteName: propResourceNameOrRouteName,\n hideText = false,\n accessControl,\n meta,\n children,\n onClick,\n ...rest\n}) => {\n const accessControlEnabled = accessControl?.enabled ?? true;\n const hideIfUnauthorized = accessControl?.hideIfUnauthorized ?? false;\n const { listUrl: generateListUrl } = useNavigation();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const translate = useTranslate();\n\n const { resource } = useResource(\n resourceNameFromProps ?? propResourceNameOrRouteName,\n );\n\n const { data } = useCan({\n resource: resource?.name,\n action: \"list\",\n queryOptions: {\n enabled: accessControlEnabled,\n },\n params: {\n resource,\n },\n });\n\n const createButtonDisabledTitle = () => {\n if (data?.can) return \"\";\n else if (data?.reason) return data.reason;\n else\n return translate(\n \"buttons.notAccessTitle\",\n \"You don't have permission to access\",\n );\n };\n\n const listUrl = resource ? generateListUrl(resource, meta) : \"\";\n\n if (accessControlEnabled && hideIfUnauthorized && !data?.can) {\n return null;\n }\n\n return (\n <ActiveLink\n to={listUrl}\n replace={false}\n onClick={(e: React.PointerEvent<HTMLButtonElement>) => {\n if (data?.can === false) {\n e.preventDefault();\n return;\n }\n if (onClick) {\n e.preventDefault();\n onClick(e);\n }\n }}\n >\n <Button\n icon={<BarsOutlined />}\n disabled={data?.can === false}\n title={createButtonDisabledTitle()}\n data-testid={RefineButtonTestIds.ListButton}\n {...rest}\n >\n {!hideText &&\n (children ??\n translate(\n `${\n resource?.name ??\n resourceNameFromProps ??\n propResourceNameOrRouteName\n }.titles.list`,\n userFriendlyResourceName(\n resource?.meta?.label ??\n resource?.label ??\n resource?.name ??\n pickNotDeprecated(\n resourceNameFromProps,\n propResourceNameOrRouteName,\n ),\n \"plural\",\n ),\n ))}\n </Button>\n </ActiveLink>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { ExportOutlined } from \"@ant-design/icons\";\nimport { useTranslate } from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { ExportButtonProps } from \"../types\";\n\n/**\n * `<ExportButton>` is an Ant Design {@link https://ant.design/components/button/ `<Button>`} with a default export icon and a default text with \"Export\".\n * It only has presentational value.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/export-button} for more details.\n */\nexport const ExportButton: React.FC<ExportButtonProps> = ({\n hideText = false,\n children,\n ...rest\n}) => {\n const translate = useTranslate();\n\n return (\n <Button\n type=\"default\"\n icon={<ExportOutlined />}\n data-testid={RefineButtonTestIds.ExportButton}\n {...rest}\n >\n {!hideText && (children ?? translate(\"buttons.export\", \"Export\"))}\n </Button>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { SaveOutlined } from \"@ant-design/icons\";\nimport { useTranslate } from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { SaveButtonProps } from \"../types\";\n\n/**\n * `<SaveButton>` uses Ant Design's {@link https://ant.design/components/button/ `<Button>`} component.\n * It uses it for presantation purposes only. Some of the hooks that refine has adds features to this button.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/save-button} for more details.\n */\nexport const SaveButton: React.FC<SaveButtonProps> = ({\n hideText = false,\n children,\n ...rest\n}) => {\n const translate = useTranslate();\n\n return (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n data-testid={RefineButtonTestIds.SaveButton}\n {...rest}\n >\n {!hideText && (children ?? translate(\"buttons.save\", \"Save\"))}\n </Button>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { PlusSquareOutlined } from \"@ant-design/icons\";\nimport {\n useCan,\n useNavigation,\n useTranslate,\n useResource,\n useRouterContext,\n useRouterType,\n useLink,\n} from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { CloneButtonProps } from \"../types\";\n\n/**\n * `<CloneButton>` uses Ant Design's {@link https://ant.design/components/button/ `<Button> component`}.\n * It uses the {@link https://refine.dev/docs/core/hooks/navigation/useNavigation#clone `clone`} method from {@link https://refine.dev/docs/core/hooks/navigation/useNavigation useNavigation} under the hood.\n * It can be useful when redirecting the app to the create page with the record id route of resource.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/clone-button} for more details.\n */\nexport const CloneButton: React.FC<CloneButtonProps> = ({\n resourceNameOrRouteName: propResourceNameOrRouteName,\n resource: resourceNameFromProps,\n recordItemId,\n hideText = false,\n accessControl,\n meta,\n children,\n onClick,\n ...rest\n}) => {\n const accessControlEnabled = accessControl?.enabled ?? true;\n const hideIfUnauthorized = accessControl?.hideIfUnauthorized ?? false;\n const { cloneUrl: generateCloneUrl } = useNavigation();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const translate = useTranslate();\n\n const { id, resource } = useResource(\n resourceNameFromProps ?? propResourceNameOrRouteName,\n );\n\n const { data } = useCan({\n resource: resource?.name,\n action: \"create\",\n params: { id: recordItemId ?? id, resource },\n queryOptions: {\n enabled: accessControlEnabled,\n },\n });\n\n const createButtonDisabledTitle = () => {\n if (data?.can) return \"\";\n else if (data?.reason) return data.reason;\n else\n return translate(\n \"buttons.notAccessTitle\",\n \"You don't have permission to access\",\n );\n };\n\n const cloneUrl =\n resource && (recordItemId || id)\n ? generateCloneUrl(resource, recordItemId! ?? id!, meta)\n : \"\";\n\n if (accessControlEnabled && hideIfUnauthorized && !data?.can) {\n return null;\n }\n\n return (\n <ActiveLink\n to={cloneUrl}\n replace={false}\n onClick={(e: React.PointerEvent<HTMLButtonElement>) => {\n if (data?.can === false) {\n e.preventDefault();\n return;\n }\n if (onClick) {\n e.preventDefault();\n onClick(e);\n }\n }}\n >\n <Button\n icon={<PlusSquareOutlined />}\n disabled={data?.can === false}\n title={createButtonDisabledTitle()}\n data-testid={RefineButtonTestIds.CloneButton}\n {...rest}\n >\n {!hideText && (children ?? translate(\"buttons.clone\", \"Clone\"))}\n </Button>\n </ActiveLink>\n );\n};\n","import React from \"react\";\nimport { Button, Upload } from \"antd\";\nimport { ImportOutlined } from \"@ant-design/icons\";\nimport { useTranslate } from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { ImportButtonProps } from \"../types\";\n\n/**\n * `<ImportButton>` is compatible with the {@link https://refine.dev/docs/ui-frameworks/antd/hooks/import/useImport `useImport`} hook and is meant to be used as it's upload button.\n * It uses Ant Design's {@link https://ant.design/components/button/ `<Button>`} and {@link https://ant.design/components/upload/ `<Upload>`} components.\n * It wraps a `<Button>` component with an `<Upload>` component and accepts properties for `<Button>` and `<Upload>` components separately.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/import-button} for more details.\n */\nexport const ImportButton: React.FC<ImportButtonProps> = ({\n uploadProps,\n buttonProps,\n hideText = false,\n children,\n}) => {\n const translate = useTranslate();\n\n return (\n <Upload {...uploadProps}>\n <Button\n icon={<ImportOutlined />}\n data-testid={RefineButtonTestIds.ImportButton}\n {...buttonProps}\n >\n {!hideText &&\n (children ?? translate(\"buttons.import\", \"Import\"))}\n </Button>\n </Upload>\n );\n};\n","import React from \"react\";\nimport { Space } from \"antd\";\nimport {\n useTranslate,\n userFriendlyResourceName,\n useRefineContext,\n useRouterType,\n useResource,\n} from \"@refinedev/core\";\n\nimport { Breadcrumb, CreateButton, PageHeader } from \"@components\";\nimport { ListProps } from \"../types\";\n\n/**\n * `<List>` provides us a layout for displaying the page.\n * It does not contain any logic but adds extra functionalities like a refresh button.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/list} for more details.\n */\nexport const List: React.FC<ListProps> = ({\n canCreate,\n title,\n children,\n createButtonProps,\n resource: resourceFromProps,\n wrapperProps,\n contentProps,\n headerProps,\n breadcrumb: breadcrumbFromProps,\n headerButtonProps,\n headerButtons,\n}) => {\n const translate = useTranslate();\n const { options: { breadcrumb: globalBreadcrumb } = {} } =\n useRefineContext();\n\n const routerType = useRouterType();\n\n const { resource } = useResource(resourceFromProps);\n\n const isCreateButtonVisible =\n canCreate ??\n ((resource?.canCreate ?? !!resource?.create) || createButtonProps);\n\n const breadcrumb =\n typeof breadcrumbFromProps === \"undefined\"\n ? globalBreadcrumb\n : breadcrumbFromProps;\n\n const defaultExtra = isCreateButtonVisible ? (\n <CreateButton\n size=\"middle\"\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n {...createButtonProps}\n />\n ) : null;\n\n return (\n <div {...(wrapperProps ?? {})}>\n <PageHeader\n ghost={false}\n title={\n title ??\n translate(\n `${resource?.name}.titles.list`,\n userFriendlyResourceName(\n resource?.meta?.label ??\n resource?.options?.label ??\n resource?.label ??\n resource?.name,\n \"plural\",\n ),\n )\n }\n extra={\n headerButtons ? (\n <Space wrap {...headerButtonProps}>\n {typeof headerButtons === \"function\"\n ? headerButtons({\n defaultButtons: defaultExtra,\n })\n : headerButtons}\n </Space>\n ) : (\n defaultExtra\n )\n }\n breadcrumb={\n typeof breadcrumb !== \"undefined\" ? (\n <>{breadcrumb}</> ?? undefined\n ) : (\n <Breadcrumb />\n )\n }\n {...(headerProps ?? {})}\n >\n <div {...(contentProps ?? {})}>{children}</div>\n </PageHeader>\n </div>\n );\n};\n","import React from \"react\";\nimport { Card, Space, Spin } from \"antd\";\nimport {\n useNavigation,\n useTranslate,\n userFriendlyResourceName,\n useRefineContext,\n useRouterType,\n useResource,\n useBack,\n} from \"@refinedev/core\";\n\nimport { Breadcrumb, SaveButton, PageHeader } from \"@components\";\nimport { CreateProps } from \"../types\";\n\n/**\n * `<Create>` provides us a layout to display the page.\n * It does not contain any logic but adds extra functionalities like action buttons and giving titles to the page.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/create} for more details.\n */\nexport const Create: React.FC<CreateProps> = ({\n title,\n saveButtonProps,\n children,\n resource: resourceFromProps,\n isLoading = false,\n breadcrumb: breadcrumbFromProps,\n wrapperProps,\n headerProps,\n contentProps,\n headerButtonProps,\n headerButtons,\n footerButtonProps,\n footerButtons,\n goBack: goBackFromProps,\n}) => {\n const translate = useTranslate();\n const { options: { breadcrumb: globalBreadcrumb } = {} } =\n useRefineContext();\n\n const routerType = useRouterType();\n const back = useBack();\n const { goBack } = useNavigation();\n\n const { resource, action } = useResource(resourceFromProps);\n\n const breadcrumb =\n typeof breadcrumbFromProps === \"undefined\"\n ? globalBreadcrumb\n : breadcrumbFromProps;\n\n const defaultFooterButtons = (\n <>\n <SaveButton\n {...(isLoading ? { disabled: true } : {})}\n {...saveButtonProps}\n htmlType=\"submit\"\n />\n </>\n );\n\n return (\n <div {...(wrapperProps ?? {})}>\n <PageHeader\n ghost={false}\n backIcon={goBackFromProps}\n onBack={\n action !== \"list\" || typeof action !== \"undefined\"\n ? routerType === \"legacy\"\n ? goBack\n : back\n : undefined\n }\n title={\n title ??\n translate(\n `${resource?.name}.titles.create`,\n `Create ${userFriendlyResourceName(\n resource?.meta?.label ??\n resource?.options?.label ??\n resource?.label ??\n resource?.name,\n \"singular\",\n )}`,\n )\n }\n breadcrumb={\n typeof breadcrumb !== \"undefined\" ? (\n <>{breadcrumb}</> ?? undefined\n ) : (\n <Breadcrumb />\n )\n }\n extra={\n <Space wrap {...(headerButtonProps ?? {})}>\n {headerButtons\n ? typeof headerButtons === \"function\"\n ? headerButtons({\n defaultButtons: null,\n })\n : headerButtons\n : null}\n </Space>\n }\n {...(headerProps ?? {})}\n >\n <Spin spinning={isLoading}>\n <Card\n bordered={false}\n actions={[\n <Space\n key=\"action-buttons\"\n style={{ float: \"right\", marginRight: 24 }}\n {...(footerButtonProps ?? {})}\n >\n {footerButtons\n ? typeof footerButtons === \"function\"\n ? footerButtons({\n defaultButtons:\n defaultFooterButtons,\n })\n : footerButtons\n : defaultFooterButtons}\n </Space>,\n ]}\n {...(contentProps ?? {})}\n >\n {children}\n </Card>\n </Spin>\n </PageHeader>\n </div>\n );\n};\n","import React from \"react\";\n\nimport { Card, Space, Spin } from \"antd\";\nimport {\n useMutationMode,\n useNavigation,\n useTranslate,\n userFriendlyResourceName,\n useRefineContext,\n useRouterType,\n useBack,\n useResource,\n useGo,\n useToPath,\n} from \"@refinedev/core\";\n\nimport {\n DeleteButton,\n RefreshButton,\n ListButton,\n SaveButton,\n Breadcrumb,\n PageHeader,\n} from \"@components\";\nimport { EditProps } from \"../types\";\n\n/**\n * `<Edit>` provides us a layout for displaying the page.\n * It does not contain any logic but adds extra functionalities like a refresh button.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/edit} for more details.\n */\nexport const Edit: React.FC<EditProps> = ({\n title,\n saveButtonProps,\n mutationMode: mutationModeProp,\n recordItemId,\n children,\n deleteButtonProps,\n canDelete,\n resource: resourceFromProps,\n isLoading = false,\n dataProviderName,\n breadcrumb: breadcrumbFromProps,\n wrapperProps,\n headerProps,\n contentProps,\n headerButtonProps,\n headerButtons,\n footerButtonProps,\n footerButtons,\n goBack: goBackFromProps,\n}) => {\n const translate = useTranslate();\n const { options: { breadcrumb: globalBreadcrumb } = {} } =\n useRefineContext();\n const { mutationMode: mutationModeContext } = useMutationMode();\n const mutationMode = mutationModeProp ?? mutationModeContext;\n\n const routerType = useRouterType();\n const back = useBack();\n const go = useGo();\n const { goBack, list: legacyGoList } = useNavigation();\n\n const {\n resource,\n action,\n id: idFromParams,\n } = useResource(resourceFromProps);\n\n const goListPath = useToPath({\n resource,\n action: \"list\",\n });\n\n const id = recordItemId ?? idFromParams;\n\n const breadcrumb =\n typeof breadcrumbFromProps === \"undefined\"\n ? globalBreadcrumb\n : breadcrumbFromProps;\n\n const isDeleteButtonVisible =\n canDelete ??\n ((resource?.meta?.canDelete ?? resource?.canDelete) ||\n deleteButtonProps);\n\n const defaultHeaderButtons = (\n <>\n {!recordItemId && (\n <ListButton\n {...(isLoading ? { disabled: true } : {})}\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n />\n )}\n <RefreshButton\n {...(isLoading ? { disabled: true } : {})}\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n recordItemId={id}\n dataProviderName={dataProviderName}\n />\n </>\n );\n\n const defaultFooterButtons = (\n <>\n {isDeleteButtonVisible && (\n <DeleteButton\n {...(isLoading ? { disabled: true } : {})}\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n mutationMode={mutationMode}\n onSuccess={() => {\n if (routerType === \"legacy\") {\n legacyGoList(\n resource?.route ?? resource?.name ?? \"\",\n );\n } else {\n go({ to: goListPath });\n }\n }}\n recordItemId={id}\n dataProviderName={dataProviderName}\n {...deleteButtonProps}\n />\n )}\n <SaveButton\n {...(isLoading ? { disabled: true } : {})}\n {...saveButtonProps}\n />\n </>\n );\n\n return (\n <div {...(wrapperProps ?? {})}>\n <PageHeader\n ghost={false}\n backIcon={goBackFromProps}\n onBack={\n action !== \"list\" && typeof action !== \"undefined\"\n ? routerType === \"legacy\"\n ? goBack\n : back\n : undefined\n }\n title={\n title ??\n translate(\n `${resource?.name}.titles.edit`,\n `Edit ${userFriendlyResourceName(\n resource?.meta?.label ??\n resource?.options?.label ??\n resource?.label ??\n resource?.name,\n \"singular\",\n )}`,\n )\n }\n extra={\n <Space wrap {...(headerButtonProps ?? {})}>\n {headerButtons\n ? typeof headerButtons === \"function\"\n ? headerButtons({\n defaultButtons: defaultHeaderButtons,\n })\n : headerButtons\n : defaultHeaderButtons}\n </Space>\n }\n breadcrumb={\n typeof breadcrumb !== \"undefined\" ? (\n <>{breadcrumb}</> ?? undefined\n ) : (\n <Breadcrumb />\n )\n }\n {...(headerProps ?? {})}\n >\n <Spin spinning={isLoading}>\n <Card\n bordered={false}\n actions={[\n <Space\n key=\"footer-buttons\"\n wrap\n style={{\n float: \"right\",\n marginRight: 24,\n }}\n {...(footerButtonProps ?? {})}\n >\n {footerButtons\n ? typeof footerButtons === \"function\"\n ? footerButtons({\n defaultButtons:\n defaultFooterButtons,\n })\n : footerButtons\n : defaultFooterButtons}\n </Space>,\n ]}\n {...(contentProps ?? {})}\n >\n {children}\n </Card>\n </Spin>\n </PageHeader>\n </div>\n );\n};\n","import React from \"react\";\nimport { Card, Space, Spin } from \"antd\";\nimport {\n useNavigation,\n useTranslate,\n userFriendlyResourceName,\n useRefineContext,\n useResource,\n useToPath,\n useRouterType,\n useBack,\n useGo,\n} from \"@refinedev/core\";\n\nimport {\n EditButton,\n DeleteButton,\n RefreshButton,\n ListButton,\n Breadcrumb,\n PageHeader,\n} from \"@components\";\nimport { ShowProps } from \"../types\";\n\n/**\n * `<Show>` provides us a layout for displaying the page.\n * It does not contain any logic but adds extra functionalities like a refresh button.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/show} for more details.\n */\nexport const Show: React.FC<ShowProps> = ({\n title,\n canEdit,\n canDelete,\n isLoading = false,\n children,\n resource: resourceFromProps,\n recordItemId,\n dataProviderName,\n breadcrumb: breadcrumbFromProps,\n contentProps,\n headerProps,\n wrapperProps,\n headerButtons,\n footerButtons,\n footerButtonProps,\n headerButtonProps,\n goBack: goBackFromProps,\n}) => {\n const translate = useTranslate();\n const { options: { breadcrumb: globalBreadcrumb } = {} } =\n useRefineContext();\n\n const routerType = useRouterType();\n const back = useBack();\n const go = useGo();\n const { goBack, list: legacyGoList } = useNavigation();\n\n const {\n resource,\n action,\n id: idFromParams,\n } = useResource(resourceFromProps);\n\n const goListPath = useToPath({\n resource,\n action: \"list\",\n });\n\n const id = recordItemId ?? idFromParams;\n\n const breadcrumb =\n typeof breadcrumbFromProps === \"undefined\"\n ? globalBreadcrumb\n : breadcrumbFromProps;\n\n const isDeleteButtonVisible =\n canDelete ?? resource?.meta?.canDelete ?? resource?.canDelete;\n const isEditButtonVisible =\n canEdit ?? resource?.canEdit ?? !!resource?.edit;\n\n const defaultHeaderButtons = (\n <>\n {!recordItemId && (\n <ListButton\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n />\n )}\n {isEditButtonVisible && (\n <EditButton\n {...(isLoading ? { disabled: true } : {})}\n type=\"primary\"\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n recordItemId={id}\n />\n )}\n {isDeleteButtonVisible && (\n <DeleteButton\n {...(isLoading ? { disabled: true } : {})}\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n recordItemId={id}\n onSuccess={() => {\n if (routerType === \"legacy\") {\n legacyGoList(\n resource?.route ?? resource?.name ?? \"\",\n );\n } else {\n go({ to: goListPath });\n }\n }}\n dataProviderName={dataProviderName}\n />\n )}\n <RefreshButton\n {...(isLoading ? { disabled: true } : {})}\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n recordItemId={id}\n dataProviderName={dataProviderName}\n />\n </>\n );\n\n return (\n <div {...(wrapperProps ?? {})}>\n <PageHeader\n ghost={false}\n backIcon={goBackFromProps}\n onBack={\n action !== \"list\" && typeof action !== \"undefined\"\n ? routerType === \"legacy\"\n ? goBack\n : back\n : undefined\n }\n title={\n title ??\n translate(\n `${resource?.name}.titles.show`,\n `Show ${userFriendlyResourceName(\n resource?.meta?.label ??\n resource?.options?.label ??\n resource?.label ??\n resource?.name,\n \"singular\",\n )}`,\n )\n }\n extra={\n <Space\n key=\"extra-buttons\"\n wrap\n {...(headerButtonProps ?? {})}\n >\n {headerButtons\n ? typeof headerButtons === \"function\"\n ? headerButtons({\n defaultButtons: defaultHeaderButtons,\n })\n : headerButtons\n : defaultHeaderButtons}\n </Space>\n }\n breadcrumb={\n typeof breadcrumb !== \"undefined\" ? (\n <>{breadcrumb}</> ?? undefined\n ) : (\n <Breadcrumb />\n )\n }\n {...(headerProps ?? {})}\n >\n <Spin spinning={isLoading}>\n <Card\n bordered={false}\n actions={\n footerButtons\n ? [\n <Space\n key=\"footer-buttons\"\n wrap\n {...footerButtonProps}\n >\n {typeof footerButtons === \"function\"\n ? footerButtons({\n defaultButtons: null,\n })\n : footerButtons}\n </Space>,\n ]\n : undefined\n }\n {...(contentProps ?? {})}\n >\n {children}\n </Card>\n </Spin>\n </PageHeader>\n </div>\n );\n};\n","import React from \"react\";\nimport { Typography } from \"antd\";\n\nconst { Text } = Typography;\n\nimport { TextFieldProps } from \"../types\";\n\n/**\n * This field lets you show basic text. It uses Ant Design's {@link https://ant.design/components/typography/#Typography.Text `<Typography.Text>`} component.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/text} for more details.\n */\nexport const TextField: React.FC<TextFieldProps> = ({ value, ...rest }) => {\n return <Text {...rest}>{value}</Text>;\n};\n","import React from \"react\";\nimport { Tag } from \"antd\";\n\nimport { TagFieldProps } from \"../types\";\n\n/**\n * This field lets you display a value in a tag. It uses Ant Design's {@link https://ant.design/components/tag/ `<Tag>`} component.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/tag} for more details.\n */\nexport const TagField: React.FC<TagFieldProps> = ({ value, ...rest }) => {\n return <Tag {...rest}>{value?.toString()}</Tag>;\n};\n","import React from \"react\";\nimport { Typography } from \"antd\";\n\nconst { Link } = Typography;\n\nimport { EmailFieldProps } from \"../types\";\n\n/**\n * This field is used to display email values. It uses the {@link https://ant.design/components/typography/#FAQ `<Link>`} component\n * of {@link https://ant.design/components/typography `<Typography>`} from Ant Design.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/email} for more details.\n */\nexport const EmailField: React.FC<EmailFieldProps> = ({ value, ...rest }) => {\n return (\n <Link href={`mailto:${value}`} {...rest}>\n {value}\n </Link>\n );\n};\n","import React from \"react\";\nimport { Image } from \"antd\";\n\nimport { ImageFieldProps } from \"../types\";\n\n/**\n * This field is used to display images and uses {@link https://ant.design/components/image/#header `<Image>`} from Ant Design.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/image} for more details.\n */\nexport const ImageField: React.FC<ImageFieldProps> = ({\n value,\n imageTitle,\n ...rest\n}) => {\n return <Image {...rest} src={value} title={imageTitle} />;\n};\n","import React from \"react\";\nimport { Tooltip } from \"antd\";\n\nimport { CheckOutlined, CloseOutlined } from \"@ant-design/icons\";\n\nimport { BooleanFieldProps } from \"../types\";\n\n/**\n * This field is used to display boolean values. It uses the {@link https://ant.design/components/tooltip/#header `<Tooltip>`} values from Ant Design.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/boolean} for more details.\n */\nexport const BooleanField: React.FC<BooleanFieldProps> = ({\n value,\n valueLabelTrue = \"true\",\n valueLabelFalse = \"false\",\n trueIcon = <CheckOutlined />,\n falseIcon = <CloseOutlined />,\n ...rest\n}) => {\n return (\n <Tooltip title={value ? valueLabelTrue : valueLabelFalse} {...rest}>\n {value ? <span>{trueIcon}</span> : <span>{falseIcon}</span>}\n </Tooltip>\n );\n};\n","import React from \"react\";\nimport dayjs from \"dayjs\";\nimport { Typography } from \"antd\";\n\nimport LocalizedFormat from \"dayjs/plugin/localizedFormat\";\n\ndayjs.extend(LocalizedFormat);\n\nconst defaultLocale = dayjs.locale();\n\nimport { DateFieldProps } from \"../types\";\n\n/**\n * This field is used to display dates. It uses {@link https://day.js.org/docs/en/display/format `Day.js`} to display date format.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/date} for more details.\n */\nexport const DateField: React.FC<DateFieldProps> = ({\n value,\n locales,\n format: dateFormat = \"L\",\n ...rest\n}) => {\n const { Text } = Typography;\n\n return (\n <Text {...rest}>\n {dayjs(value)\n .locale(locales || defaultLocale)\n .format(dateFormat)}\n </Text>\n );\n};\n","import React from \"react\";\n\nimport { UrlField } from \"@components\";\nimport { FileFieldProps } from \"../types\";\n\n/**\n * This field is used to display files and uses {@link https://ant.design/components/typography `<Typography.Link>`} from Ant Design.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/file} for more details.\n */\nexport const FileField: React.FC<FileFieldProps> = ({\n title,\n src,\n ...rest\n}) => {\n return (\n <UrlField value={src} title={title} {...rest}>\n {title ?? src}\n </UrlField>\n );\n};\n","import React from \"react\";\nimport { Typography } from \"antd\";\n\nconst { Link } = Typography;\n\nimport { UrlFieldProps } from \"../types\";\n\n/**\n * This field lets you embed a link. It uses Ant Design's {@link https://ant.design/components/typography/ `<Typography.Link>`} component.\n * You can pass a URL in its `value` property and you can show a text in its place by passing any `children`.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/url} for more details.\n */\nexport const UrlField: React.FC<UrlFieldProps> = ({\n children,\n value,\n ...rest\n}) => {\n return (\n <Link href={value} {...rest}>\n {children ?? value}\n </Link>\n );\n};\n","import React from \"react\";\nimport { Typography } from \"antd\";\n\nconst { Text } = Typography;\n\nfunction toLocaleStringSupportsOptions() {\n return !!(\n typeof Intl == \"object\" &&\n Intl &&\n typeof Intl.NumberFormat == \"function\"\n );\n}\n\nimport { NumberFieldProps } from \"../types\";\n\n/**\n * This field is used to display a number formatted according to the browser locale, right aligned. and uses {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl `Intl`} to display date format.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/number} for more details.\n */\nexport const NumberField: React.FC<NumberFieldProps> = ({\n value,\n locale,\n options,\n ...rest\n}) => {\n const number = Number(value);\n\n return (\n <Text {...rest}>\n {toLocaleStringSupportsOptions()\n ? number.toLocaleString(locale, options)\n : number}\n </Text>\n );\n};\n","import React from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport gfm from \"remark-gfm\";\n\nimport { RefineFieldMarkdownProps } from \"../types\";\n\n/**\n * This field lets you display markdown content. It supports {@link https://github.github.com/gfm/ GitHub Flavored Markdown}.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/markdown} for more details.\n */\nexport const MarkdownField: React.FC<RefineFieldMarkdownProps> = ({\n value = \"\",\n}) => {\n return <ReactMarkdown plugins={[gfm]}>{value}</ReactMarkdown>;\n};\n","import React, { ReactNode, useState } from \"react\";\nimport { Button, Space } from \"antd\";\nimport type { FilterDropdownProps as AntdFilterDropdownProps } from \"antd/lib/table/interface\";\nimport dayjs from \"dayjs\";\nimport { FilterOutlined } from \"@ant-design/icons\";\nimport { useTranslate } from \"@refinedev/core\";\n\nexport type FilterDropdownProps = AntdFilterDropdownProps & {\n mapValue?: (selectedKeys: React.Key[]) => any;\n children: ReactNode;\n};\n\n/**\n * `<FilterDropdown>` is a helper component for {@link https://ant.design/components/table/#components-table-demo-custom-filter-panel filter dropdowns in Ant Design `<Table>` components.}\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/filter-dropdown} for more details.\n */\nexport const FilterDropdown: React.FC<FilterDropdownProps> = (props) => {\n const {\n setSelectedKeys,\n confirm,\n clearFilters,\n mapValue,\n selectedKeys,\n children,\n } = props;\n\n const [value, setValue] = useState<any[] | undefined>(selectedKeys);\n const translate = useTranslate();\n\n const clearFilter = () => {\n if (clearFilters) {\n setValue([]);\n clearFilters();\n }\n };\n\n const onFilter = () => {\n const _mappedValue = mappedValue(value);\n\n let keys;\n if (typeof _mappedValue === \"number\") {\n keys = `${_mappedValue}`;\n } else if (dayjs.isDayjs(_mappedValue)) {\n keys = [_mappedValue.toISOString()];\n } else {\n keys = _mappedValue;\n }\n\n setSelectedKeys(keys);\n\n confirm?.();\n };\n\n const mappedValue = (value: any) => (mapValue ? mapValue(value) : value);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const onChange = (e: any) => {\n if (typeof e === \"object\") {\n if (Array.isArray(e)) {\n const _mappedValue = mappedValue(e);\n\n setValue(_mappedValue);\n return setSelectedKeys(_mappedValue);\n }\n\n const changeEvent =\n !e || !e.target || dayjs.isDayjs(e)\n ? { target: { value: e } }\n : e;\n\n const { target }: React.ChangeEvent<HTMLInputElement> = changeEvent;\n const _mappedValue = mappedValue(target.value);\n setValue(_mappedValue);\n return;\n }\n\n const _mappedValue = mappedValue(e);\n\n setValue(_mappedValue);\n };\n\n const childrenWithProps = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n onChange,\n value: mappedValue(value),\n });\n }\n return child;\n });\n return (\n <div\n style={{\n padding: 10,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-end\",\n }}\n >\n <div style={{ marginBottom: 15 }}>{childrenWithProps}</div>\n <Space>\n <Button type=\"primary\" size=\"small\" onClick={() => onFilter()}>\n <FilterOutlined /> {translate(\"buttons.filter\", \"Filter\")}\n </Button>\n <Button danger size=\"small\" onClick={() => clearFilter()}>\n {translate(\"buttons.clear\", \"Clear\")}\n </Button>\n </Space>\n </div>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { useGo, useResource, useRouterType } from \"@refinedev/core\";\nimport { RefineErrorPageProps } from \"@refinedev/ui-types\";\nimport { Button, Result, Typography, Space, Tooltip } from \"antd\";\nimport { InfoCircleOutlined } from \"@ant-design/icons\";\nimport { useNavigation, useTranslate } from \"@refinedev/core\";\n\nconst { Text } = Typography;\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<RefineErrorPageProps> = () => {\n const [errorMessage, setErrorMessage] = useState<string>();\n const translate = useTranslate();\n const { push } = useNavigation();\n const go = useGo();\n const routerType = useRouterType();\n\n const { resource, action } = useResource();\n\n useEffect(() => {\n if (resource) {\n if (action) {\n setErrorMessage(\n translate(\n \"pages.error.info\",\n {\n action: action,\n resource: resource?.name,\n },\n `You may have forgotten to add the \"${action}\" component to \"${resource?.name}\" resource.`,\n ),\n );\n }\n }\n }, [resource, action]);\n\n return (\n <Result\n status=\"404\"\n title=\"404\"\n extra={\n <Space direction=\"vertical\" size=\"large\">\n <Space>\n <Text>\n {translate(\n \"pages.error.404\",\n \"Sorry, the page you visited does not exist.\",\n )}\n </Text>\n {errorMessage && (\n <Tooltip title={errorMessage}>\n <InfoCircleOutlined data-testid=\"error-component-tooltip\" />\n </Tooltip>\n )}\n </Space>\n <Button\n type=\"primary\"\n onClick={() => {\n if (routerType === \"legacy\") {\n push(\"/\");\n } else {\n go({ to: \"/\" });\n }\n }}\n >\n {translate(\"pages.error.backHome\", \"Back Home\")}\n </Button>\n </Space>\n }\n />\n );\n};\n","import React from \"react\";\nimport { LoginPageProps, useActiveAuthProvider } from \"@refinedev/core\";\nimport {\n Row,\n Col,\n Layout,\n Card,\n Typography,\n Form,\n Input,\n Button,\n Checkbox,\n} from \"antd\";\nimport { useLogin, useTranslate } from \"@refinedev/core\";\n\nimport {\n layoutStyles,\n containerStyles,\n titleStyles,\n imageContainer,\n} from \"./styles\";\n\nconst { Text, Title } = Typography;\nexport interface ILoginForm {\n username: string;\n password: string;\n remember: boolean;\n}\n\n/**\n * @deprecated LoginPage is deprecated. Use AuthPage instead. @see {@link https://refine.dev/docs/api-reference/antd/components/antd-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<LoginPageProps> = () => {\n const [form] = Form.useForm<ILoginForm>();\n const translate = useTranslate();\n\n const authProvider = useActiveAuthProvider();\n const { mutate: login, isLoading } = useLogin<ILoginForm>({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const CardTitle = (\n <Title level={3} style={titleStyles}>\n {translate(\"pages.login.title\", \"Sign in your account\")}\n </Title>\n );\n\n return (\n <Layout style={layoutStyles}>\n <Row\n justify=\"center\"\n align=\"middle\"\n style={{\n height: \"100vh\",\n }}\n >\n <Col xs={22}>\n <div style={containerStyles}>\n <div style={imageContainer}>\n <img\n src=\"https://refine.ams3.cdn.digitaloceanspaces.com/logo/refine.svg\"\n alt=\"Refine Logo\"\n />\n </div>\n <Card title={CardTitle} headStyle={{ borderBottom: 0 }}>\n <Form<ILoginForm>\n layout=\"vertical\"\n form={form}\n onFinish={(values) => {\n login(values);\n }}\n requiredMark={false}\n initialValues={{\n remember: false,\n }}\n >\n <Form.Item\n name=\"username\"\n label={translate(\n \"pages.login.username\",\n \"Username\",\n )}\n rules={[{ required: true }]}\n >\n <Input\n size=\"large\"\n placeholder={translate(\n \"pages.login.username\",\n \"Username\",\n )}\n />\n </Form.Item>\n <Form.Item\n name=\"password\"\n label={translate(\n \"pages.login.password\",\n \"Password\",\n )}\n rules={[{ required: true }]}\n style={{ marginBottom: \"12px\" }}\n >\n <Input\n type=\"password\"\n placeholder=\"●●●●●●●●\"\n size=\"large\"\n />\n </Form.Item>\n <div style={{ marginBottom: \"12px\" }}>\n <Form.Item\n name=\"remember\"\n valuePropName=\"checked\"\n noStyle\n >\n <Checkbox\n style={{\n fontSize: \"12px\",\n }}\n >\n {translate(\n \"pages.login.remember\",\n \"Remember me\",\n )}\n </Checkbox>\n </Form.Item>\n\n <a\n style={{\n float: \"right\",\n fontSize: \"12px\",\n }}\n href=\"#\"\n >\n {translate(\n \"pages.login.forgotPassword\",\n \"Forgot password?\",\n )}\n </a>\n </div>\n <Button\n type=\"primary\"\n size=\"large\"\n htmlType=\"submit\"\n loading={isLoading}\n block\n >\n {translate(\"pages.login.signin\", \"Sign in\")}\n </Button>\n </Form>\n <div style={{ marginTop: 8 }}>\n <Text style={{ fontSize: 12 }}>\n {translate(\n \"pages.login.noAccount\",\n \"Don’t have an account?\",\n )}{\" \"}\n <a href=\"#\" style={{ fontWeight: \"bold\" }}>\n {translate(\n \"pages.login.signup\",\n \"Sign up\",\n )}\n </a>\n </Text>\n </div>\n </Card>\n </div>\n </Col>\n </Row>\n </Layout>\n );\n};\n","import { CSSProperties } from \"react\";\n\nexport const layoutStyles: CSSProperties = {\n background: `radial-gradient(50% 50% at 50% 50%, #63386A 0%, #310438 100%)`,\n backgroundSize: \"cover\",\n};\n\nexport const containerStyles: CSSProperties = {\n maxWidth: \"408px\",\n margin: \"auto\",\n};\n\nexport const titleStyles: CSSProperties = {\n textAlign: \"center\",\n color: \"#626262\",\n fontSize: \"30px\",\n letterSpacing: \"-0.04em\",\n};\n\nexport const imageContainer: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: \"28px\",\n};\n","import * as React from \"react\";\nimport { RefineReadyPageProps } from \"@refinedev/ui-types\";\nimport { Row, Col, Typography, Space, Button } from \"antd\";\nimport { ReadOutlined, FolderOutlined, TeamOutlined } from \"@ant-design/icons\";\n\nconst styles: { [key: string]: React.CSSProperties } = {\n root: {\n height: \"100vh\",\n backgroundImage:\n \"url('https://refine.ams3.cdn.digitaloceanspaces.com/login-background/background.png')\",\n backgroundSize: \"cover\",\n backgroundColor: \"#331049\",\n },\n title: {\n color: \"white\",\n fontWeight: 800,\n fontSize: \"64px\",\n marginBottom: \"8px\",\n },\n p1: {\n color: \"white\",\n marginBottom: 0,\n fontSize: \"20px\",\n fontWeight: \"bold\",\n },\n p2: {\n color: \"white\",\n fontSize: \"20px\",\n },\n code: {\n backgroundColor: \"white\",\n color: \"#331049\",\n },\n};\n\nconst { Title } = Typography;\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 * @deprecated `ReadyPage` is deprecated and will be removed in the next major release.\n */\nexport const ReadyPage: React.FC<RefineReadyPageProps> = () => {\n return (\n <Row align=\"middle\" justify=\"center\" style={styles.root}>\n <Col style={{ textAlign: \"center\" }}>\n <img\n style={{ marginBottom: \"48px\" }}\n src=\"https://refine.ams3.cdn.digitaloceanspaces.com/logo/refine.svg\"\n alt=\"Refine Logo\"\n />\n <Title style={styles.title}>Welcome on board</Title>\n <p style={styles.p1}>Your configuration is completed.</p>\n <p style={styles.p2}>\n Now you can get started by adding your resources to the{\" \"}\n <code style={styles.code}>{`resources`}</code> property of{\" \"}\n <code style={styles.code}>{`<Refine>`}</code>\n </p>\n <Space\n size=\"large\"\n wrap\n style={{ marginTop: \"70px\", justifyContent: \"center\" }}\n >\n <a\n href=\"https://refine.dev\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <Button size=\"large\" icon={<ReadOutlined />}>\n Documentation\n </Button>\n </a>\n <a\n href=\"https://refine.dev/examples\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <Button size=\"large\" icon={<FolderOutlined />}>\n Examples\n </Button>\n </a>\n <a\n href=\"https://discord.gg/refine\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <Button size=\"large\" icon={<TeamOutlined />}>\n Community\n </Button>\n </a>\n </Space>\n </Col>\n </Row>\n );\n};\n","import React from \"react\";\nimport { WelcomePage as WelcomePageFromCore } from \"@refinedev/core\";\n\n/**\n * It is a page that welcomes you after the configuration is completed.\n * @deprecated `WelcomePage` is deprecated. Use `WelcomePage` from `@refinedev/core` instead.\n */\nexport const WelcomePage: React.FC = () => {\n return <WelcomePageFromCore />;\n};\n","import React from \"react\";\nimport { CardProps, FormProps, LayoutProps } from \"antd\";\nimport { AuthPageProps } from \"@refinedev/core\";\n\nimport {\n LoginPage,\n RegisterPage,\n ForgotPasswordPage,\n UpdatePasswordPage,\n} from \"./components\";\n\nexport type AuthProps = AuthPageProps<LayoutProps, CardProps, FormProps> & {\n renderContent?: (\n content: React.ReactNode,\n title: React.ReactNode,\n ) => React.ReactNode;\n title?: React.ReactNode;\n};\n\n/**\n * **refine** has a default auth page form served on the `/login` route when the `authProvider` configuration is provided.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/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 from \"react\";\nimport {\n LoginPageProps,\n LoginFormTypes,\n useLink,\n useRouterType,\n useActiveAuthProvider,\n} from \"@refinedev/core\";\nimport {\n Row,\n Col,\n Layout,\n Card,\n Typography,\n Form,\n Input,\n Button,\n Checkbox,\n CardProps,\n LayoutProps,\n Divider,\n FormProps,\n theme,\n} from \"antd\";\nimport { useLogin, useTranslate, useRouterContext } from \"@refinedev/core\";\n\nimport {\n bodyStyles,\n containerStyles,\n headStyles,\n layoutStyles,\n titleStyles,\n} from \"../styles\";\nimport { ThemedTitle } from \"@components\";\n\nconst { Text, Title } = Typography;\nconst { useToken } = theme;\n\ntype LoginProps = LoginPageProps<LayoutProps, CardProps, FormProps>;\n/**\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/ui-frameworks/antd/components/antd-auth-page/#login} for more details.\n */\nexport const LoginPage: React.FC<LoginProps> = ({\n providers,\n registerLink,\n forgotPasswordLink,\n rememberMe,\n contentProps,\n wrapperProps,\n renderContent,\n formProps,\n title,\n}) => {\n const { token } = useToken();\n const [form] = Form.useForm<LoginFormTypes>();\n const translate = useTranslate();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const authProvider = useActiveAuthProvider();\n const { mutate: login, isLoading } = useLogin<LoginFormTypes>({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const PageTitle =\n title === false ? null : (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: \"32px\",\n fontSize: \"20px\",\n }}\n >\n {title ?? <ThemedTitle collapsed={false} />}\n </div>\n );\n\n const CardTitle = (\n <Title\n level={3}\n style={{\n color: token.colorPrimaryTextHover,\n ...titleStyles,\n }}\n >\n {translate(\"pages.login.title\", \"Sign in to your account\")}\n </Title>\n );\n\n const renderProviders = () => {\n if (providers && providers.length > 0) {\n return (\n <>\n {providers.map((provider) => {\n return (\n <Button\n key={provider.name}\n type=\"default\"\n block\n icon={provider.icon}\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n width: \"100%\",\n marginBottom: \"8px\",\n }}\n onClick={() =>\n login({\n providerName: provider.name,\n })\n }\n >\n {provider.label}\n </Button>\n );\n })}\n <Divider>\n <Text\n style={{\n color: token.colorTextLabel,\n }}\n >\n {translate(\"pages.login.divider\", \"or\")}\n </Text>\n </Divider>\n </>\n );\n }\n return null;\n };\n\n const CardContent = (\n <Card\n title={CardTitle}\n headStyle={headStyles}\n bodyStyle={bodyStyles}\n style={{\n ...containerStyles,\n backgroundColor: token.colorBgElevated,\n }}\n {...(contentProps ?? {})}\n >\n {renderProviders()}\n <Form<LoginFormTypes>\n layout=\"vertical\"\n form={form}\n onFinish={(values) => login(values)}\n requiredMark={false}\n initialValues={{\n remember: false,\n }}\n {...formProps}\n >\n <Form.Item\n name=\"email\"\n label={translate(\"pages.login.fields.email\", \"Email\")}\n rules={[\n { required: true },\n {\n type: \"email\",\n message: translate(\n \"pages.login.errors.validEmail\",\n \"Invalid email address\",\n ),\n },\n ]}\n >\n <Input\n size=\"large\"\n placeholder={translate(\n \"pages.login.fields.email\",\n \"Email\",\n )}\n />\n </Form.Item>\n <Form.Item\n name=\"password\"\n label={translate(\"pages.login.fields.password\", \"Password\")}\n rules={[{ required: true }]}\n >\n <Input\n type=\"password\"\n placeholder=\"●●●●●●●●\"\n size=\"large\"\n />\n </Form.Item>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n marginBottom: \"24px\",\n }}\n >\n {rememberMe ?? (\n <Form.Item\n name=\"remember\"\n valuePropName=\"checked\"\n noStyle\n >\n <Checkbox\n style={{\n fontSize: \"12px\",\n }}\n >\n {translate(\n \"pages.login.buttons.rememberMe\",\n \"Remember me\",\n )}\n </Checkbox>\n </Form.Item>\n )}\n {forgotPasswordLink ?? (\n <ActiveLink\n style={{\n color: token.colorPrimaryTextHover,\n fontSize: \"12px\",\n marginLeft: \"auto\",\n }}\n to=\"/forgot-password\"\n >\n {translate(\n \"pages.login.buttons.forgotPassword\",\n \"Forgot password?\",\n )}\n </ActiveLink>\n )}\n </div>\n <Form.Item>\n <Button\n type=\"primary\"\n size=\"large\"\n htmlType=\"submit\"\n loading={isLoading}\n block\n >\n {translate(\"pages.login.signin\", \"Sign in\")}\n </Button>\n </Form.Item>\n </Form>\n <div style={{ marginTop: 8 }}>\n {registerLink ?? (\n <Text style={{ fontSize: 12 }}>\n {translate(\n \"pages.login.buttons.noAccount\",\n \"Don’t have an account?\",\n )}{\" \"}\n <ActiveLink\n to=\"/register\"\n style={{\n fontWeight: \"bold\",\n color: token.colorPrimaryTextHover,\n }}\n >\n {translate(\"pages.login.signup\", \"Sign up\")}\n </ActiveLink>\n </Text>\n )}\n </div>\n </Card>\n );\n\n return (\n <Layout style={layoutStyles} {...(wrapperProps ?? {})}>\n <Row\n justify=\"center\"\n align=\"middle\"\n style={{\n height: \"100vh\",\n }}\n >\n <Col xs={22}>\n {renderContent ? (\n renderContent(CardContent, PageTitle)\n ) : (\n <>\n {PageTitle}\n {CardContent}\n </>\n )}\n </Col>\n </Row>\n </Layout>\n );\n};\n","import { CSSProperties } from \"react\";\n\nexport const layoutStyles: CSSProperties = {};\n\nexport const containerStyles: CSSProperties = {\n maxWidth: \"400px\",\n margin: \"auto\",\n padding: \"32px\",\n boxShadow:\n \"0px 2px 4px rgba(0, 0, 0, 0.02), 0px 1px 6px -1px rgba(0, 0, 0, 0.02), 0px 1px 2px rgba(0, 0, 0, 0.03)\",\n};\n\nexport const headStyles: CSSProperties = {\n borderBottom: 0,\n padding: 0,\n};\n\nexport const bodyStyles: CSSProperties = { padding: 0, marginTop: \"32px\" };\n\nexport const titleStyles: CSSProperties = {\n textAlign: \"center\",\n marginBottom: 0,\n fontSize: \"24px\",\n lineHeight: \"32px\",\n fontWeight: 700,\n overflowWrap: \"break-word\",\n hyphens: \"manual\",\n textOverflow: \"unset\",\n whiteSpace: \"pre-wrap\",\n};\n","import React from \"react\";\nimport {\n RegisterPageProps,\n RegisterFormTypes,\n useRouterType,\n useLink,\n useActiveAuthProvider,\n} from \"@refinedev/core\";\nimport {\n Row,\n Col,\n Layout,\n Card,\n Typography,\n Form,\n Input,\n Button,\n LayoutProps,\n CardProps,\n FormProps,\n Divider,\n theme,\n} from \"antd\";\nimport { useTranslate, useRouterContext, useRegister } from \"@refinedev/core\";\n\nimport {\n layoutStyles,\n containerStyles,\n titleStyles,\n headStyles,\n bodyStyles,\n} from \"../styles\";\nimport { ThemedTitle } from \"@components\";\n\nconst { Text, Title } = Typography;\nconst { useToken } = theme;\n\ntype RegisterProps = RegisterPageProps<LayoutProps, CardProps, FormProps>;\n/**\n * **refine** has register page form which is served on `/register` route when the `authProvider` configuration is provided.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/antd-auth-page/#register} for more details.\n */\nexport const RegisterPage: React.FC<RegisterProps> = ({\n providers,\n loginLink,\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title,\n}) => {\n const { token } = useToken();\n const [form] = Form.useForm<RegisterFormTypes>();\n const translate = useTranslate();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const authProvider = useActiveAuthProvider();\n const { mutate: register, isLoading } = useRegister<RegisterFormTypes>({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const PageTitle =\n title === false ? null : (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: \"32px\",\n fontSize: \"20px\",\n }}\n >\n {title ?? <ThemedTitle collapsed={false} />}\n </div>\n );\n\n const CardTitle = (\n <Title\n level={3}\n style={{\n color: token.colorPrimaryTextHover,\n ...titleStyles,\n }}\n >\n {translate(\"pages.register.title\", \"Sign up for your account\")}\n </Title>\n );\n\n const renderProviders = () => {\n if (providers && providers.length > 0) {\n return (\n <>\n {providers.map((provider) => {\n return (\n <Button\n key={provider.name}\n type=\"default\"\n block\n icon={provider.icon}\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n width: \"100%\",\n marginBottom: \"8px\",\n }}\n onClick={() =>\n register({\n providerName: provider.name,\n })\n }\n >\n {provider.label}\n </Button>\n );\n })}\n <Divider>\n <Text\n style={{\n color: token.colorTextLabel,\n }}\n >\n {translate(\"pages.login.divider\", \"or\")}\n </Text>\n </Divider>\n </>\n );\n }\n return null;\n };\n\n const CardContent = (\n <Card\n title={CardTitle}\n headStyle={headStyles}\n bodyStyle={bodyStyles}\n style={{\n ...containerStyles,\n backgroundColor: token.colorBgElevated,\n }}\n {...(contentProps ?? {})}\n >\n {renderProviders()}\n <Form<RegisterFormTypes>\n layout=\"vertical\"\n form={form}\n onFinish={(values) => register(values)}\n requiredMark={false}\n {...formProps}\n >\n <Form.Item\n name=\"email\"\n label={translate(\"pages.register.email\", \"Email\")}\n rules={[\n { required: true },\n {\n type: \"email\",\n message: translate(\n \"pages.register.errors.validEmail\",\n \"Invalid email address\",\n ),\n },\n ]}\n >\n <Input\n size=\"large\"\n placeholder={translate(\n \"pages.register.fields.email\",\n \"Email\",\n )}\n />\n </Form.Item>\n <Form.Item\n name=\"password\"\n label={translate(\n \"pages.register.fields.password\",\n \"Password\",\n )}\n rules={[{ required: true }]}\n >\n <Input\n type=\"password\"\n placeholder=\"●●●●●●●●\"\n size=\"large\"\n />\n </Form.Item>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n marginBottom: \"24px\",\n }}\n >\n {loginLink ?? (\n <Text\n style={{\n fontSize: 12,\n marginLeft: \"auto\",\n }}\n >\n {translate(\n \"pages.login.buttons.haveAccount\",\n \"Have an account?\",\n )}{\" \"}\n <ActiveLink\n style={{\n fontWeight: \"bold\",\n color: token.colorPrimaryTextHover,\n }}\n to=\"/login\"\n >\n {translate(\"pages.login.signin\", \"Sign in\")}\n </ActiveLink>\n </Text>\n )}\n </div>\n\n <Form.Item\n style={{\n marginBottom: 0,\n }}\n >\n <Button\n type=\"primary\"\n size=\"large\"\n htmlType=\"submit\"\n loading={isLoading}\n block\n >\n {translate(\"pages.register.buttons.submit\", \"Sign up\")}\n </Button>\n </Form.Item>\n </Form>\n </Card>\n );\n\n return (\n <Layout style={layoutStyles} {...(wrapperProps ?? {})}>\n <Row\n justify=\"center\"\n align=\"middle\"\n style={{\n height: \"100vh\",\n }}\n >\n <Col xs={22}>\n {renderContent ? (\n renderContent(CardContent, PageTitle)\n ) : (\n <>\n {PageTitle}\n {CardContent}\n </>\n )}\n </Col>\n </Row>\n </Layout>\n );\n};\n","import React from \"react\";\nimport {\n ForgotPasswordPageProps,\n ForgotPasswordFormTypes,\n useRouterType,\n useLink,\n} from \"@refinedev/core\";\nimport {\n Row,\n Col,\n Layout,\n Card,\n Typography,\n Form,\n Input,\n Button,\n LayoutProps,\n CardProps,\n FormProps,\n theme,\n} from \"antd\";\nimport {\n useTranslate,\n useRouterContext,\n useForgotPassword,\n} from \"@refinedev/core\";\n\nimport {\n layoutStyles,\n containerStyles,\n titleStyles,\n headStyles,\n bodyStyles,\n} from \"../styles\";\nimport { ThemedTitle } from \"@components\";\n\ntype ResetPassworProps = ForgotPasswordPageProps<\n LayoutProps,\n CardProps,\n FormProps\n>;\n\nconst { Text, Title } = Typography;\nconst { useToken } = theme;\n\n/**\n * **refine** has forgot password page form which is served on `/forgot-password` route when the `authProvider` configuration is provided.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/antd-auth-page/#forgot-password} for more details.\n */\nexport const ForgotPasswordPage: React.FC<ResetPassworProps> = ({\n loginLink,\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title,\n}) => {\n const { token } = useToken();\n const [form] = Form.useForm<ForgotPasswordFormTypes>();\n const translate = useTranslate();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const { mutate: forgotPassword, isLoading } =\n useForgotPassword<ForgotPasswordFormTypes>();\n\n const PageTitle =\n title === false ? null : (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: \"32px\",\n fontSize: \"20px\",\n }}\n >\n {title ?? <ThemedTitle collapsed={false} />}\n </div>\n );\n\n const CardTitle = (\n <Title\n level={3}\n style={{\n color: token.colorPrimaryTextHover,\n ...titleStyles,\n }}\n >\n {translate(\"pages.forgotPassword.title\", \"Forgot your password?\")}\n </Title>\n );\n const CardContent = (\n <Card\n title={CardTitle}\n headStyle={headStyles}\n bodyStyle={bodyStyles}\n style={{\n ...containerStyles,\n backgroundColor: token.colorBgElevated,\n }}\n {...(contentProps ?? {})}\n >\n <Form<ForgotPasswordFormTypes>\n layout=\"vertical\"\n form={form}\n onFinish={(values) => forgotPassword(values)}\n requiredMark={false}\n {...formProps}\n >\n <Form.Item\n name=\"email\"\n label={translate(\n \"pages.forgotPassword.fields.email\",\n \"Email\",\n )}\n rules={[\n { required: true },\n {\n type: \"email\",\n message: translate(\n \"pages.forgotPassword.errors.validEmail\",\n \"Invalid email address\",\n ),\n },\n ]}\n >\n <Input\n type=\"email\"\n size=\"large\"\n placeholder={translate(\n \"pages.forgotPassword.fields.email\",\n \"Email\",\n )}\n />\n </Form.Item>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n {loginLink ?? (\n <Text\n style={{\n fontSize: 12,\n marginLeft: \"auto\",\n }}\n >\n {translate(\n \"pages.register.buttons.haveAccount\",\n \"Have an account? \",\n )}{\" \"}\n <ActiveLink\n style={{\n fontWeight: \"bold\",\n color: token.colorPrimaryTextHover,\n }}\n to=\"/login\"\n >\n {translate(\"pages.login.signin\", \"Sign in\")}\n </ActiveLink>\n </Text>\n )}\n </div>\n <Form.Item\n style={{\n marginTop: \"24px\",\n marginBottom: 0,\n }}\n >\n <Button\n type=\"primary\"\n size=\"large\"\n htmlType=\"submit\"\n loading={isLoading}\n block\n >\n {translate(\n \"pages.forgotPassword.buttons.submit\",\n \"Send reset instructions\",\n )}\n </Button>\n </Form.Item>\n </Form>\n </Card>\n );\n\n return (\n <Layout style={layoutStyles} {...(wrapperProps ?? {})}>\n <Row\n justify=\"center\"\n align=\"middle\"\n style={{\n height: \"100vh\",\n }}\n >\n <Col xs={22}>\n {renderContent ? (\n renderContent(CardContent, PageTitle)\n ) : (\n <>\n {PageTitle}\n {CardContent}\n </>\n )}\n </Col>\n </Row>\n </Layout>\n );\n};\n","import React from \"react\";\nimport {\n UpdatePasswordPageProps,\n UpdatePasswordFormTypes,\n useActiveAuthProvider,\n} from \"@refinedev/core\";\nimport {\n Row,\n Col,\n Layout,\n Card,\n Typography,\n Form,\n Input,\n Button,\n LayoutProps,\n CardProps,\n FormProps,\n theme,\n} from \"antd\";\nimport { useTranslate, useUpdatePassword } from \"@refinedev/core\";\n\nimport {\n layoutStyles,\n containerStyles,\n titleStyles,\n headStyles,\n bodyStyles,\n} from \"../styles\";\nimport { ThemedTitle } from \"@components\";\n\nconst { Title } = Typography;\nconst { useToken } = theme;\n\ntype UpdatePasswordProps = UpdatePasswordPageProps<\n LayoutProps,\n CardProps,\n FormProps\n>;\n\n/**\n * **refine** has update password page form which is served on `/update-password` route when the `authProvider` configuration is provided.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/antd-auth-page/#update-password} for more details.\n */\nexport const UpdatePasswordPage: React.FC<UpdatePasswordProps> = ({\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title,\n}) => {\n const { token } = useToken();\n const [form] = Form.useForm<UpdatePasswordFormTypes>();\n const translate = useTranslate();\n const authProvider = useActiveAuthProvider();\n const { mutate: updatePassword, isLoading } =\n useUpdatePassword<UpdatePasswordFormTypes>({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const PageTitle =\n title === false ? null : (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: \"32px\",\n fontSize: \"20px\",\n }}\n >\n {title ?? <ThemedTitle collapsed={false} />}\n </div>\n );\n\n const CardTitle = (\n <Title\n level={3}\n style={{\n color: token.colorPrimaryTextHover,\n ...titleStyles,\n }}\n >\n {translate(\"pages.updatePassword.title\", \"Set New Password\")}\n </Title>\n );\n\n const CardContent = (\n <Card\n title={CardTitle}\n headStyle={headStyles}\n bodyStyle={bodyStyles}\n style={{\n ...containerStyles,\n backgroundColor: token.colorBgElevated,\n }}\n {...(contentProps ?? {})}\n >\n <Form<UpdatePasswordFormTypes>\n layout=\"vertical\"\n form={form}\n onFinish={(values) => updatePassword(values)}\n requiredMark={false}\n {...formProps}\n >\n <Form.Item\n name=\"password\"\n label={translate(\n \"pages.updatePassword.fields.password\",\n \"New Password\",\n )}\n rules={[{ required: true }]}\n style={{ marginBottom: \"12px\" }}\n >\n <Input\n type=\"password\"\n placeholder=\"●●●●●●●●\"\n size=\"large\"\n />\n </Form.Item>\n <Form.Item\n name=\"confirmPassword\"\n label={translate(\n \"pages.updatePassword.fields.confirmPassword\",\n \"Confirm New Password\",\n )}\n hasFeedback\n dependencies={[\"password\"]}\n rules={[\n {\n required: true,\n },\n ({ getFieldValue }) => ({\n validator(_, value) {\n if (\n !value ||\n getFieldValue(\"password\") === value\n ) {\n return Promise.resolve();\n }\n return Promise.reject(\n new Error(\n translate(\n \"pages.updatePassword.errors.confirmPasswordNotMatch\",\n \"Passwords do not match\",\n ),\n ),\n );\n },\n }),\n ]}\n >\n <Input\n type=\"password\"\n placeholder=\"●●●●●●●●\"\n size=\"large\"\n />\n </Form.Item>\n <Form.Item\n style={{\n marginBottom: 0,\n }}\n >\n <Button\n type=\"primary\"\n size=\"large\"\n htmlType=\"submit\"\n loading={isLoading}\n block\n >\n {translate(\n \"pages.updatePassword.buttons.submit\",\n \"Update\",\n )}\n </Button>\n </Form.Item>\n </Form>\n </Card>\n );\n\n return (\n <Layout style={layoutStyles} {...(wrapperProps ?? {})}>\n <Row\n justify=\"center\"\n align=\"middle\"\n style={{\n height: \"100vh\",\n }}\n >\n <Col xs={22}>\n {renderContent ? (\n renderContent(CardContent, PageTitle)\n ) : (\n <>\n {PageTitle}\n {CardContent}\n </>\n )}\n </Col>\n </Row>\n </Layout>\n );\n};\n","import React from \"react\";\nimport {\n useBreadcrumb,\n useLink,\n useRefineContext,\n useRouterContext,\n useRouterType,\n useResource,\n matchResourceFromRoute,\n} from \"@refinedev/core\";\nimport { RefineBreadcrumbProps } from \"@refinedev/ui-types\";\n\nimport {\n Breadcrumb as AntdBreadcrumb,\n BreadcrumbProps as AntdBreadcrumbProps,\n} from \"antd\";\nimport { HomeOutlined } from \"@ant-design/icons\";\n\nexport type BreadcrumbProps = RefineBreadcrumbProps<AntdBreadcrumbProps>;\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n breadcrumbProps,\n showHome = true,\n hideIcons = false,\n meta,\n}) => {\n const routerType = useRouterType();\n const { breadcrumbs } = useBreadcrumb({\n meta,\n });\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n const { hasDashboard } = useRefineContext();\n\n const { resources } = useResource();\n\n const rootRouteResource = matchResourceFromRoute(\"/\", resources);\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n if (breadcrumbs.length === 1) {\n return null;\n }\n\n const breadCrumbItems = breadcrumbs.map(({ label, icon, href }) => ({\n key: `breadcrumb-item-${label}`,\n title: (\n <>\n {!hideIcons && icon}\n {href ? (\n <ActiveLink to={href}>{label}</ActiveLink>\n ) : (\n <span>{label}</span>\n )}\n </>\n ),\n }));\n\n const getBreadcrumbItems = () => {\n if (showHome && (hasDashboard || rootRouteResource.found)) {\n return [\n {\n key: \"breadcrumb-item-home\",\n title: (\n <ActiveLink to=\"/\">\n {rootRouteResource?.resource?.meta?.icon ?? (\n <HomeOutlined />\n )}\n </ActiveLink>\n ),\n },\n ...breadCrumbItems,\n ];\n }\n\n return breadCrumbItems;\n };\n\n return <AntdBreadcrumb items={getBreadcrumbItems()} {...breadcrumbProps} />;\n};\n","import React, { FC } from \"react\";\nimport {\n PageHeader as AntdPageHeader,\n PageHeaderProps as AntdPageHeaderProps,\n} from \"@ant-design/pro-layout\";\nimport { Button, Typography } from \"antd\";\nimport { ArrowLeftOutlined } from \"@ant-design/icons\";\n\nexport type PageHeaderProps = AntdPageHeaderProps;\n\nexport const PageHeader: FC<AntdPageHeaderProps> = ({ children, ...props }) => {\n const backIcon =\n typeof props.backIcon === \"undefined\" ? (\n <Button type=\"text\" icon={<ArrowLeftOutlined />} />\n ) : (\n props.backIcon\n );\n\n const title =\n typeof props.title === \"string\" ? (\n <Typography.Title level={4} style={{ marginBottom: 0 }}>\n {props.title}\n </Typography.Title>\n ) : (\n props.title\n );\n\n const subtitle =\n typeof props.title === \"string\" ? (\n <Typography.Title\n level={5}\n type=\"secondary\"\n style={{ marginBottom: 0 }}\n >\n {props.subTitle}\n </Typography.Title>\n ) : (\n props.subTitle\n );\n\n return (\n <AntdPageHeader\n {...props}\n backIcon={backIcon}\n title={title}\n subTitle={subtitle}\n style={{ padding: 0, ...props.style }}\n >\n {children}\n </AntdPageHeader>\n );\n};\n","import type { UploadFile, UploadChangeParam } from \"antd/lib/upload/interface\";\n\nexport const getValueFromEvent = (event: UploadChangeParam): UploadFile[] => {\n const { fileList } = event;\n\n return [...fileList];\n};\n\nexport function file2Base64(file: UploadFile): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n const resultHandler = () => {\n if (reader.result) {\n reader.removeEventListener(\"load\", resultHandler, false);\n\n resolve(reader.result as string);\n }\n };\n\n reader.addEventListener(\"load\", resultHandler, false);\n\n reader.readAsDataURL(file.originFileObj as Blob);\n reader.onerror = (error) => {\n reader.removeEventListener(\"load\", resultHandler, false);\n return reject(error);\n };\n });\n}\n","import { ThemeConfig } from \"antd\";\n\ntype ThemeNames =\n | \"Blue\"\n | \"Purple\"\n | \"Magenta\"\n | \"Red\"\n | \"Orange\"\n | \"Yellow\"\n | \"Green\";\n\ntype RefineThemes = Record<ThemeNames, ThemeConfig>;\n\nexport const RefineThemes: RefineThemes = {\n Blue: {\n token: {\n colorPrimary: \"#1677FF\",\n },\n },\n Purple: {\n token: {\n colorPrimary: \"#722ED1\",\n },\n },\n Magenta: {\n token: {\n colorPrimary: \"#EB2F96\",\n },\n },\n Red: {\n token: {\n colorPrimary: \"#F5222D\",\n },\n },\n Orange: {\n token: {\n colorPrimary: \"#FA541C\",\n },\n },\n Yellow: {\n token: {\n colorPrimary: \"#FAAD14\",\n },\n },\n Green: {\n token: {\n colorPrimary: \"#52C41A\",\n },\n },\n};\n"],"mappings":"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","names":["src_exports","__export","AuthPage","Authenticated","CanAccess","ErrorComponent","GitHubBanner","LayoutWrapper","LoginPage","ReadyPage","Refine","ResourceContext","RouteChangeHandler","UndoableQueue","WelcomePage","createTreeView","file2Base64","getDefaultFilter","getDefaultSortOrder","getNextPageParam","getPreviousPageParam","handleUseParams","importCSVMapper","legacyResourceTransform","matchResourceFromRoute","parseTableParams","parseTableParamsFromQuery","pickNotDeprecated","routeGenerator","setInitialFilters","setInitialSorters","stringifyTableParams","unionFilters","unionSorters","useActiveAuthProvider","useApiUrl","useAuthenticated","useBack","useBreadcrumb","useCan","useCanWithoutCache","useCancelNotification","useCheckError","useCreate","useCreateMany","useCustom","useCustomMutation","useDataProvider","useDelete","useDeleteMany","useExport","useForgotPassword","useForm","useGetIdentity","useGetLocale","useGetToPath","useGo","useHandleNotification","useImport","useInfiniteList","useInvalidate","useIsAuthenticated","useIsExistAuthentication","useLink","useList","useLiveMode","useLog","useLogList","useLogin","useLogout","useMany","useMenu","useModal","useMutationMode","useNavigation","useNotification","useOnError","useOne","useParse","useParsed","usePermissions","usePublish","useRedirectionAfterSubmission","useRefineContext","useRegister","useResource","useResourceSubscription","useResourceWithRoute","useRouterContext","useRouterType","useSelect","useSetLocale","useShow","useSubscription","useSyncWithLocation","useTable","useTitle","useToPath","useTranslate","useUpdate","useUpdateMany","useUpdatePassword","useWarnAboutChange","userFriendlyResourceName","module","__toCommonJS","import_react","LegacyAuthContext","it","React","LegacyAuthContextProvider","children","isProvided","authOperations","replace","loginFunc","params","_a","error","registerFunc","logoutFunc","checkAuthFunc","AuthBindingsContext","AuthBindingsContextProvider","authBindings","handleLogin","handleRegister","handleLogout","handleCheck","result","handleForgotPassword","handleUpdatePassword","useLegacyAuthContext","useAuthBindingsContext","import_react_query","v3LegacyAuthProviderCompatible","options","legacyGetPermission","getPermissions","queryResponse","so","legacyQueryResponse","queryOptions","legacyGetUserIdentity","getIdentity","ao","useInvalidateAuthStore","queryClient","Tn","mutationOptions","invalidateAuthStore","routerType","go","push","open","close","legacyLogoutFromContext","logoutFromContext","mutation","uo","data","variables","success","redirectTo","redirectPath","redirect","buildNotification","v3LegacyAuthProviderCompatibleMutation","import_qs","parsed","useLocation","search","legacyLoginFromContext","loginFromContext","to","xn","Pn","qs","co","redirectPathFromAuth","legacyRegisterFromContext","registerFromContext","mo","v3LegacyAuthProviderCompatibleForgotPasswordFromContext","forgotPasswordFromContext","yo","legacyUpdatePasswordFromContext","updatePasswordFromContext","Cn","queryStrings","bn","Ro","checkAuth","check","To","legacyCheckErrorFromContext","onErrorFromContext","legacyLogout","logout","xo","shouldLogout","legacyIsProvided","userFriendlySecond","miliseconds","import_zip","import_fromPairs","mapData","item","headers","body","entry","En","fromPairs","Dn","zip","index","array","import_pluralize","import_unionWith","import_differenceWith","import_warn_once","url","current","pageSize","sorter","sorters","filters","Pr","pagination","rest","compareFilters","left","right","compareSorters","permanentFilter","newFilters","prevFilters","f","Ln","warnOnce","Po","unionWith","crudFilter","permanentSorter","newSorters","crudSorter","defaultFilter","Co","differenceWith","defaultSorter","columnName","sortItem","operatorType","filter","operator","field","file","resolve","reject","reader","resultHandler","resource","type","humanizeResource","humanizeString","bo","pluralize","args","arg","queryKeys","dataProviderName","meta","metaData","providerName","keys","config","ids","id","hasPermission","permissions","action","i","isParameter","segment","splitToSegments","path","isSegmentCountsSame","route","resourceRoute","routeSegments","resourceRouteSegments","removeLeadingTrailingSlashes","checkBySegments","stdRoute","stdResourceRoute","getDefaultActionPath","resourceName","parentPrefix","cleanParentPrefix","getParentResource","resources","_b","parentName","parentResource","getParentPrefixForResource","legacy","parents","parent","v","getActionRoutesFromResource","actions","actionList","_c","_d","pickMatchedRoute","routes","sanitizedRoutes","segmentsCount","eligibleRoutes","nonParametrizedRoutes","allFound","actionRoute","mostEligible","resourcesFromProps","tree","resourcesRouteObject","resourcesNameObject","child","name","text","DefaultLayout","Qn","defaultRefineOptions","RefineContext","Uo","RefineContextProvider","hasDashboard","mutationMode","warnWhenUnsavedChanges","syncWithLocation","undoableTimeout","DashboardPage","Title","Layout","Header","Sider","Footer","OffLayoutArea","catchAll","liveMode","onLiveEvent","handleRefineOptions","disableTelemetry","reactQueryClientConfig","reactQueryDevtoolConfig","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","optionsWithDefaults","disableTelemetryWithDefault","reactQueryWithDefaults","redirectPage","redirectFromProps","redirectOptions","sequentialPromises","promises","onEachResolve","onEachReject","results","promise","pickResource","identifier","r","pickDataProvider","handleMultiple","res","lastPage","cursor","totalPages","_resources","pickRouteParams","s","prepareRouteParams","routeParams","acc","key","value","composeRoute","designatedRoute","preparedRouteParams","match","fromParams","legacyAuthProvider","authProvider","handlePaginationParams","hasPagination","configPagination","hasPaginationString","mode","useMediaQuery","query","matches","setMatches","vr","media","listener","successNotification","errorNotification","liveParams","dataProvider","translate","checkError","handleNotification","pickedDataProvider","preferredMeta","prefferedFilters","prefferedSorters","prefferedHasPagination","prefferedPagination","isServerPagination","notificationValues","isEnabled","queryKey","getList","Fn","pageParam","signal","rawData","notificationConfig","err","getOne","On","getMany","Kn","import_isEqual","UndoableQueueContext","Dt","initialState","undoableQueueReducer","state","notificationItem","Lr","isEqual","UndoableQueueContextProvider","notifications","notificationDispatch","notificationData","notification","Ir","mutationModeContext","undoableTimeoutContext","publish","log","invalidateStore","values","onCancel","mutationModePropOrContext","undoableTimeoutPropOrContext","doMutation","cancelMutation","previousQueries","previous","record","_data","_error","invalidates","context","resourceSingular","Qo","previousData","queryData","fields","operation","Hn","successNotificationFromProp","Bo","errorNotificationFromProp","wr","Vo","$n","selectedDataProvider","val","response","resourcePlural","Gn","Sr","mutationFn","No","kr","jn","getApiUrl","method","custom","Yn","Xn","defaultDataProvider","DataContext","Fo","DataContextProvider","dataProviders","Qr","ts","paginationProperties","total","LiveContext","Oo","LiveContextProvider","liveProvider","channel","types","enabled","liveModeFromProp","ns","liveDataContext","qt","liveModeFromContext","onLiveEventContextCallback","subscription","event","ss","Br","liveContext","as","useMemoized","ref","is","us","useDeepMemo","fn","dependencies","memoizedDependencies","cs","Ho","ResourceContextProvider","providedResources","RouterPickerContext","Wo","RouterPickerProvider","defaultBindings","RouterBindingsContext","Nr","RouterBindingsProvider","router","bindings","Fr","parse","gs","Rs","oldProps","resourceWithRoute","useParams","legacyParams","resourceKeyToCheck","legacyResource","legacyId","legacyAction","legacyResourceName","pickedFromProps","Kr","Ts","NotificationContext","Hr","NotificationContextProvider","Ps","Cs","fallbackNotification","TranslationContext","$o","TranslationContextProvider","i18nProvider","Wr","lang","$r","defaultMessage","Gr","Ds","UnsavedWarnContext","tr","UnsavedWarnContextProvider","warnWhen","setWarnWhen","zo","Ls","Ms","Us","import_export_to_csv_fix_source_map","resourceFromProps","maxItemCount","exportOptions","onError","isLoading","setIsLoading","ws","filename","preparingData","As","actionFromProps","idFromProps","onMutationSuccess","onMutationError","mutationModeProp","createMutationOptions","updateMutationOptions","resourceFromRouter","idFromRouter","actionFromRouter","legacyResourceFromRoute","legacyActionFromRoute","legacyIdFromParams","newResourceNameFromRouter","defaultId","setId","jo","fallbackAction","picked","isCreate","isEdit","isClone","Ss","designatedRedirectAction","enableQuery","queryResult","isFetchingQuery","mutationResultCreate","mutateCreate","isLoadingCreate","mutationResultUpdate","mutateUpdate","isLoadingUpdate","handleSubmitWithRedirect","onSuccess","_","responseId","idFromFunction","show","edit","list","create","ks","jr","useHistory","history","back","handleUrl","createUrl","resourceItem","createActionRoute","editUrl","encodedId","editActionRoute","cloneUrl","cloneActionRoute","showUrl","showActionRoute","listUrl","listActionRoute","resourceFromProp","showId","setShowId","Yr","Qs","import_papaparse","import_chunk","paparseOptions","batchSize","onFinish","onProgress","processedAmount","setProcessedAmount","Ut","totalAmount","setTotalAmount","createMany","mutationResult","handleCleanup","handleFinish","createdValues","handleChange","Bs","valueFns","currentAmount","chunks","Vs","chunk","chunkedFns","chunkedValues","currentBatchLength","defaultVisible","visible","setVisible","rr","resourceFromRoute","Ns","selectedResource","Jr","defaultProvider","LegacyRouterContext","Zo","RouterContext","LegacyRouterContextProvider","Prompt","Link","routerContextValues","Ks","AccessControlContext","Yo","AccessControlContextProvider","can","sanitizeResource","icon","clone","restResource","_metaIcon","restMeta","_optionsIcon","restOptions","Gs","_resource","paramsRest","sanitizedResource","$s","zs","import_uniqBy","import_debounce","import_get","props","setSearch","Ze","setOptions","selectedOptions","setSelectedOptions","sort","optionLabel","optionValue","debounceValue","defaultValueQueryOptionsFromProps","fetchSize","defaultValue","onSearchFromProp","pickedResource","defaultValues","defaultValueQueryOnSuccess","nr","get","defaultValueQueryOptions","defaultValueQueryResult","defaultQueryOnSuccess","onSearch","js","uniqBy","debounce","defaultPermanentFilter","defaultPermanentSorter","initialCurrent","initialPageSize","initialSorter","defaultSetFilterBehavior","initialFilter","filtersFromProp","sortersFromProp","syncWithLocationProp","syncWithLocationContext","pathname","parsedParams","isPaginationEnabled","prefferedCurrent","prefferedPageSize","parsedCurrent","parsedPageSize","parsedSorter","parsedFilters","preferredInitialFilters","preferredPermanentFilters","preferredInitialSorters","preferredPermanentSorters","prefferedFilterBehavior","defaultCurrent","defaultPageSize","resourceInUse","Ne","Js","setSorters","setFilters","setCurrent","setPageSize","createLinkForSyncWithLocation","currentQueryParams","Xo","stringifyParams","queryParams","sr","ar","setFiltersAsMerge","setFiltersAsReplace","setFiltersWithSetter","setter","prev","setFiltersFn","setterOrFilters","behavior","setSortWithUnion","newSorter","AuditLogContext","qo","AuditLogContextProvider","update","logMutationOptions","renameMutationOptions","ir","auditLogContext","en","identityData","refetch","logPermissions","authorData","rename","author","ea","ra","ta","metaFromProps","oa","breadcrumbs","addBreadcrumb","grandParentName","listActionOfResource","hrefRaw","href","actionLabel","na","createResourceKey","currentParentResource","createTree","root","currentParent","currentTree","flatten","items","itemKey","getCleanPath","hideOnMissingParameter","getToPath","legacyPath","cleanPathname","cleanRoute","selectedKey","defaultOpenKeys","Xr","prepareItem","composed","treeItems","treeMenuItems","prepare","preparedNodes","newItem","errorMessage","setErrorMessage","Fe","username","setUsername","ue","password","setPassword","login","e","providers","registerLink","forgotPasswordLink","rememberMe","contentProps","wrapperProps","renderContent","formProps","title","LegacyLink","ActiveLink","email","setEmail","Y","remember","setRemember","renderLink","link","renderProviders","provider","content","RegisterPage","loginLink","ae","register","ForgotPasswordPage","Re","forgotPassword","UpdatePasswordPage","updatePassword","newPassword","setNewPassword","Te","confirmPassword","setConfirmPassword","ft","xe","CARDS","G","isTablet","isMobile","getGridTemplateColumns","getHeaderFontSize","getSubHeaderFontSize","card","Card","description","isHover","setIsHover","import_react_query_devtools","REFINE_VERSION","useTelemetryData","auth","ot","routerContext","dataContext","notificationContext","accessControlContext","auditLog","live","i18n","accessControl","encode","payload","stringifyedPayload","Telemetry","ga","img","checkRouterPropMisuse","otherProps","useRouterMisuseWarning","warned","tn","legacyRouterProvider","routerProvider","notificationProvider","accessControlProvider","auditLogProvider","ur","notificationProviderContextValues","ee","RouterComponent","Pa","timeoutId","setTimeoutId","cancelNotification","newTimeoutId","LayoutFromProps","SiderFromProps","HeaderFromProps","TitleFromProps","FooterFromProps","OffLayoutAreaFromProps","LayoutToRender","St","UnsavedPrompt","warnWhenListener","useDeferredGo","setConfig","Ce","redirectOnFail","appendCurrentPathToQuery","fallbackContent","loadingContent","activeAuthProvider","hasAuthProvider","isLegacyAuth","isLegacyRouter","deferredGo","legacyLocation","isFetching","isSuccess","isAuthenticatedStatus","authenticatedRedirect","isAuthenticated","appliedRedirect","toQuery","location","va","fallback","legacyActionFromParams","yt","CSSRules","nt","styleTag","rule","src_exports","__export","RefineButtonTestIds","module","__toCommonJS","import_react","import_antd","import_sunflower_antd","import_core","useForm","action","resource","onMutationSuccessProp","onMutationError","submitOnEnter","warnWhenUnsavedChangesProp","redirect","successNotification","errorNotification","meta","metaData","liveMode","liveParams","mutationMode","dataProviderName","onLiveEvent","invalidates","undoableTimeout","queryOptions","createMutationOptions","updateMutationOptions","idFromProps","_a","_b","formAnt","formSF","useFormSF","form","useFormCoreResult","useFormCore","formLoading","onFinish","queryResult","id","warnWhenUnsavedChangesRefine","setWarnWhen","warnWhenUnsavedChanges","React","onKeyUp","event","onValuesChange","changeValues","saveButtonProps","values","error","import_react","import_sunflower_antd","import_core","useModalForm","syncWithLocation","rest","_a","_b","_c","_d","_e","_f","_g","_h","initiallySynced","React","useFormProps","useForm","form","formProps","id","setId","formLoading","onFinish","resource","actionFromParams","parsed","go","action","syncingId","syncWithLocationKey","translate","warnWhen","setWarnWhen","sunflowerUseModal","useModalFormSF","visible","show","modalFormProps","modalProps","openStatus","idFromParams","saveButtonPropsSF","handleClose","handleShow","_visible","otherModalProps","newModalProps","import_react","import_core","useDrawerForm","syncWithLocation","defaultVisible","autoSubmitClose","autoResetForm","rest","_a","_b","_c","initiallySynced","React","visible","show","close","useFormProps","useForm","form","formProps","formLoading","id","setId","onFinish","resource","actionFromParams","parsed","go","action","syncingId","syncWithLocationKey","_d","openStatus","idFromParams","translate","warnWhen","setWarnWhen","saveButtonProps","deleteButtonProps","handleClose","handleShow","import_sunflower_antd","useStepsForm","props","useFormProps","useForm","form","formProps","stepsPropsSunflower","useStepsFormSF","values","_a","import_react","import_antd","import_sunflower_antd","import_core","import_core","getDefaultSortOrder","columnName","sorter","sort","getDefaultSortOrderCore","getDefaultFilter","filters","operatorType","getDefaultFilterCore","mapAntdSorterToCrudSorting","_a","crudSorting","a","b","_b","_c","_d","item","field","mapAntdFilterToCrudFilter","tableFilters","prevFilters","initialFilters","crudFilters","mapInitialFilter","acc","value","operator","i","import_core","import_react","PaginationLink","to","element","LegacyLink","routerType","Link","React","e","useTable","onSearch","initialCurrent","initialPageSize","hasPagination","pagination","initialSorter","permanentSorter","initialFilter","permanentFilter","defaultSetFilterBehavior","filtersFromProp","sortersFromProp","syncWithLocation","resource","successNotification","errorNotification","queryOptions","liveModeFromProp","onLiveEvent","liveParams","meta","metaData","dataProviderName","_a","tableQueryResult","current","setCurrent","pageSize","setPageSize","filters","setFilters","sorters","setSorters","sorter","setSorter","createLinkForSyncWithLocation","pageCount","useTableCore","breakpoint","form","formSF","useFormSF","liveMode","hasPaginationString","isPaginationEnabled","preferredInitialFilters","data","isFetched","isLoading","onChange","paginationState","tableFilters","crudFilters","mapAntdFilterToCrudFilter","crudSorting","mapAntdSorterToCrudSorting","onFinish","value","searchFilters","antdPagination","page","type","element","link","PaginationLink","elementChildren","useEditableTable","props","table","useTable","edit","useForm","editId","setId","saveButtonProps","id","import_core","useSelect","props","queryResult","defaultValueQueryResult","onSearch","options","useSelectCore","import_core","useCheckboxGroup","resource","sort","sorters","filters","optionLabel","optionValue","queryOptions","fetchSize","pagination","liveMode","defaultValue","onLiveEvent","liveParams","meta","metaData","dataProviderName","queryResult","options","import_core","useRadioGroup","resource","sort","sorters","filters","optionLabel","optionValue","queryOptions","fetchSize","pagination","liveMode","defaultValue","onLiveEvent","liveParams","meta","metaData","dataProviderName","queryResult","options","import_react","import_antd","import_core","useImport","resourceFromProp","resourceName","mapData","item","paparseOptions","batchSize","onFinish","meta","metaData","dataProviderName","onProgressFromProp","_a","t","resource","mutationResult","isLoading","handleChange","useImportCore","totalAmount","processedAmount","description","React","import_react","import_antd","import_core","useSimpleList","resource","initialCurrent","initialPageSize","pagination","hasPagination","initialSorter","permanentSorter","initialFilter","permanentFilter","defaultSetFilterBehavior","filtersFromProp","sortersFromProp","onSearch","queryOptions","syncWithLocation","successNotification","errorNotification","liveModeFromProp","onLiveEvent","liveParams","meta","metaData","dataProviderName","_a","sorters","sorter","filters","current","pageSize","pageCount","setFilters","setCurrent","setPageSize","setSorter","setSorters","createLinkForSyncWithLocation","queryResult","useTableCore","hasPaginationString","isPaginationEnabled","breakpoint","liveMode","form","data","isFetched","isLoading","onChange","page","onFinish","values","searchFilters","antdPagination","type","element","link","PaginationLink","elementChildren","import_react","useFileUploadState","isLoading","setIsloading","onChange","info","mapStatusToLoading","files","file","import_core","useModal","modalProps","show","close","visible","useCoreModal","e","_a","import_react","import_antd","import_react","import_antd","import_icons","UndoableNotification","notificationKey","message","cancelMutation","undoableTimeout","React","time","notificationProvider","key","message","description","type","cancelMutation","undoableTimeout","React","UndoableNotification","import_react","import_antd","import_react","import_antd","import_icons","import_core","drawerButtonStyles","SubMenu","Sider","TitleFromProps","render","meta","_a","collapsed","setCollapsed","drawerOpen","setDrawerOpen","isExistAuthentication","routerType","NewLink","warnWhen","setWarnWhen","LegacyLink","Link","TitleFromContext","translate","menuItems","selectedKey","defaultOpenKeys","breakpoint","hasDashboard","authProvider","mutateLogout","isMobile","RenderToTitle","Title","renderTreeView","tree","item","icon","label","route","key","name","children","parentName","options","React","isSelected","isRoute","handleLogout","logout","dashboard","items","renderSider","renderMenu","renderDrawerSider","drawerButtonStyles","import_core","import_antd","import_react","Text","Header","authProvider","user","React","AntdLayout","Layout","children","Header","Sider","Title","Footer","OffLayoutArea","breakpoint","SiderToRender","HeaderToRender","isSmall","React","AntdLayout","import_react","import_core","Title","collapsed","routerType","Link","LegacyLink","React","import_react","import_antd","import_react","import_antd","import_icons","import_core","drawerButtonStyles","SubMenu","useToken","ThemedSider","TitleFromProps","render","meta","_a","token","collapsed","setCollapsed","drawerOpen","setDrawerOpen","isExistAuthentication","routerType","NewLink","warnWhen","setWarnWhen","LegacyLink","Link","TitleFromContext","translate","menuItems","selectedKey","defaultOpenKeys","breakpoint","hasDashboard","authProvider","mutateLogout","isMobile","RenderToTitle","ThemedTitle","renderTreeView","tree","item","icon","label","route","key","name","children","parentName","options","React","isSelected","isRoute","handleLogout","logout","dashboard","items","renderSider","renderMenu","renderDrawerSider","drawerButtonStyles","import_react","import_antd","import_core","Text","useToken","ThemedHeader","token","authProvider","user","React","AntdLayout","ThemedLayout","children","Header","Sider","Title","Footer","OffLayoutArea","breakpoint","SiderToRender","ThemedSider","HeaderToRender","ThemedHeader","isSmall","React","AntdLayout","import_react","import_core","import_antd","useToken","defaultText","defaultIcon","React","ThemedTitle","collapsed","icon","text","wrapperStyles","token","routerType","Link","LegacyLink","import_react","import_antd","import_icons","import_core","import_ui_types","CreateButton","resourceNameFromProps","propResourceNameOrRouteName","hideText","accessControl","meta","children","onClick","rest","_a","_b","accessControlEnabled","hideIfUnauthorized","translate","routerType","Link","LegacyLink","ActiveLink","generateCreateUrl","resource","data","createButtonDisabledTitle","createUrl","React","e","import_react","import_antd","import_icons","import_core","import_ui_types","EditButton","resourceNameFromProps","propResourceNameOrRouteName","recordItemId","hideText","accessControl","meta","children","onClick","rest","_a","_b","accessControlEnabled","hideIfUnauthorized","translate","routerType","Link","LegacyLink","ActiveLink","generateEditUrl","id","resource","data","createButtonDisabledTitle","editUrl","React","e","import_react","import_antd","import_icons","import_core","import_ui_types","DeleteButton","resourceNameFromProps","propResourceNameOrRouteName","recordItemId","onSuccess","mutationModeProp","children","successNotification","errorNotification","hideText","accessControl","metaData","meta","dataProviderName","confirmTitle","confirmOkText","confirmCancelText","invalidates","rest","_a","_b","accessControlEnabled","hideIfUnauthorized","translate","id","resource","mutationModeContext","mutationMode","mutate","isLoading","variables","data","setWarnWhen","React","value","import_react","import_antd","import_icons","import_core","import_ui_types","RefreshButton","resourceNameFromProps","propResourceNameOrRouteName","recordItemId","hideText","meta","metaData","dataProviderName","children","onClick","rest","translate","resource","id","refetch","isFetching","React","e","import_react","import_antd","import_icons","import_core","import_ui_types","ShowButton","resourceNameFromProps","propResourceNameOrRouteName","recordItemId","hideText","accessControl","meta","children","onClick","rest","_a","_b","accessControlEnabled","hideIfUnauthorized","generateShowUrl","routerType","Link","LegacyLink","ActiveLink","translate","id","resource","data","createButtonDisabledTitle","showUrl","React","e","import_react","import_antd","import_icons","import_core","import_ui_types","ListButton","resourceNameFromProps","propResourceNameOrRouteName","hideText","accessControl","meta","children","onClick","rest","_a","_b","_c","_d","_e","_f","_g","_h","accessControlEnabled","hideIfUnauthorized","generateListUrl","routerType","Link","LegacyLink","ActiveLink","translate","resource","data","createButtonDisabledTitle","listUrl","React","e","import_react","import_antd","import_icons","import_core","import_ui_types","ExportButton","hideText","children","rest","translate","React","import_react","import_antd","import_icons","import_core","import_ui_types","SaveButton","hideText","children","rest","translate","React","import_react","import_antd","import_icons","import_core","import_ui_types","CloneButton","propResourceNameOrRouteName","resourceNameFromProps","recordItemId","hideText","accessControl","meta","children","onClick","rest","_a","_b","accessControlEnabled","hideIfUnauthorized","generateCloneUrl","routerType","Link","LegacyLink","ActiveLink","translate","id","resource","data","createButtonDisabledTitle","cloneUrl","React","e","import_react","import_antd","import_icons","import_core","import_ui_types","ImportButton","uploadProps","buttonProps","hideText","children","translate","React","import_react","import_antd","import_core","List","canCreate","title","children","createButtonProps","resourceFromProps","wrapperProps","contentProps","headerProps","breadcrumbFromProps","headerButtonProps","headerButtons","_a","_b","_c","_d","_e","_f","_g","_h","translate","globalBreadcrumb","routerType","resource","isCreateButtonVisible","breadcrumb","defaultExtra","React","CreateButton","PageHeader","Breadcrumb","import_react","import_antd","import_core","Create","title","saveButtonProps","children","resourceFromProps","isLoading","breadcrumbFromProps","wrapperProps","headerProps","contentProps","headerButtonProps","headerButtons","footerButtonProps","footerButtons","goBackFromProps","_a","_b","_c","_d","_e","_f","translate","globalBreadcrumb","routerType","back","goBack","resource","action","breadcrumb","defaultFooterButtons","React","SaveButton","PageHeader","Breadcrumb","import_react","import_antd","import_core","Edit","title","saveButtonProps","mutationModeProp","recordItemId","children","deleteButtonProps","canDelete","resourceFromProps","isLoading","dataProviderName","breadcrumbFromProps","wrapperProps","headerProps","contentProps","headerButtonProps","headerButtons","footerButtonProps","footerButtons","goBackFromProps","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","translate","globalBreadcrumb","mutationModeContext","mutationMode","routerType","back","go","goBack","legacyGoList","resource","action","idFromParams","goListPath","id","breadcrumb","isDeleteButtonVisible","defaultHeaderButtons","React","ListButton","RefreshButton","defaultFooterButtons","DeleteButton","SaveButton","PageHeader","Breadcrumb","import_react","import_antd","import_core","Show","title","canEdit","canDelete","isLoading","children","resourceFromProps","recordItemId","dataProviderName","breadcrumbFromProps","contentProps","headerProps","wrapperProps","headerButtons","footerButtons","footerButtonProps","headerButtonProps","goBackFromProps","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","translate","globalBreadcrumb","routerType","back","go","goBack","legacyGoList","resource","action","idFromParams","goListPath","id","breadcrumb","isDeleteButtonVisible","isEditButtonVisible","defaultHeaderButtons","React","ListButton","EditButton","DeleteButton","RefreshButton","PageHeader","Breadcrumb","import_react","import_antd","Text","TextField","value","rest","React","import_react","import_antd","TagField","value","rest","React","import_react","import_antd","Link","EmailField","value","rest","React","import_react","import_antd","ImageField","value","imageTitle","rest","React","import_react","import_antd","import_icons","BooleanField","value","valueLabelTrue","valueLabelFalse","trueIcon","React","falseIcon","rest","import_react","import_dayjs","import_antd","import_localizedFormat","dayjs","LocalizedFormat","defaultLocale","DateField","value","locales","dateFormat","rest","Text","React","import_react","FileField","title","src","rest","React","UrlField","import_react","import_antd","Link","UrlField","children","value","rest","React","import_react","import_antd","Text","toLocaleStringSupportsOptions","NumberField","value","locale","options","rest","number","React","import_react","import_react_markdown","import_remark_gfm","MarkdownField","value","React","ReactMarkdown","gfm","import_react","import_antd","import_dayjs","import_icons","import_core","FilterDropdown","props","setSelectedKeys","confirm","clearFilters","mapValue","selectedKeys","children","value","setValue","translate","clearFilter","onFilter","_mappedValue","mappedValue","keys","dayjs","onChange","e","changeEvent","target","childrenWithProps","React","child","import_react","import_core","import_antd","import_icons","Text","ErrorComponent","errorMessage","setErrorMessage","translate","push","go","routerType","resource","action","React","import_react","import_core","import_antd","layoutStyles","containerStyles","titleStyles","imageContainer","Text","Title","LoginPage","form","translate","authProvider","login","isLoading","CardTitle","React","titleStyles","layoutStyles","containerStyles","imageContainer","values","React","import_antd","import_icons","styles","Title","ReadyPage","import_react","import_core","WelcomePage","React","WelcomePageFromCore","import_react","import_react","import_core","import_antd","layoutStyles","containerStyles","headStyles","bodyStyles","titleStyles","Text","Title","useToken","LoginPage","providers","registerLink","forgotPasswordLink","rememberMe","contentProps","wrapperProps","renderContent","formProps","title","token","form","translate","routerType","Link","LegacyLink","ActiveLink","authProvider","login","isLoading","PageTitle","React","ThemedTitle","CardTitle","titleStyles","renderProviders","provider","CardContent","headStyles","bodyStyles","containerStyles","values","layoutStyles","import_react","import_core","import_antd","Text","Title","useToken","RegisterPage","providers","loginLink","wrapperProps","contentProps","renderContent","formProps","title","token","form","translate","routerType","Link","LegacyLink","ActiveLink","authProvider","register","isLoading","PageTitle","React","ThemedTitle","CardTitle","titleStyles","renderProviders","provider","CardContent","headStyles","bodyStyles","containerStyles","values","layoutStyles","import_react","import_core","import_antd","Text","Title","useToken","ForgotPasswordPage","loginLink","wrapperProps","contentProps","renderContent","formProps","title","token","form","translate","routerType","Link","LegacyLink","ActiveLink","forgotPassword","isLoading","PageTitle","React","ThemedTitle","CardTitle","titleStyles","CardContent","headStyles","bodyStyles","containerStyles","values","layoutStyles","import_react","import_core","import_antd","Title","useToken","UpdatePasswordPage","wrapperProps","contentProps","renderContent","formProps","title","token","form","translate","authProvider","updatePassword","isLoading","PageTitle","React","ThemedTitle","CardTitle","titleStyles","CardContent","headStyles","bodyStyles","containerStyles","values","getFieldValue","_","value","layoutStyles","AuthPage","props","type","React","RegisterPage","ForgotPasswordPage","UpdatePasswordPage","LoginPage","import_react","import_core","import_antd","import_icons","Breadcrumb","breadcrumbProps","showHome","hideIcons","meta","routerType","breadcrumbs","Link","LegacyLink","hasDashboard","resources","rootRouteResource","ActiveLink","breadCrumbItems","label","icon","href","React","AntdBreadcrumb","_a","_b","_c","import_react","import_pro_layout","import_antd","import_icons","PageHeader","children","props","backIcon","React","title","subtitle","AntdPageHeader","getValueFromEvent","event","fileList","RefineThemes"]}
1
+ {"version":3,"sources":["../../../core/src/index.tsx","../../../core/src/components/pages/error/index.tsx","../../../core/src/contexts/auth/index.tsx","../../../core/src/hooks/auth/usePermissions/index.ts","../../../core/src/hooks/auth/useGetIdentity/index.ts","../../../core/src/hooks/auth/useLogout/index.ts","../../../core/src/hooks/auth/useInvalidateAuthStore/index.ts","../../../core/src/hooks/auth/useLogin/index.ts","../../../core/src/hooks/auth/useRegister/index.ts","../../../core/src/hooks/auth/useForgotPassword/index.ts","../../../core/src/hooks/auth/useUpdatePassword/index.ts","../../../core/src/hooks/auth/useIsAuthenticated/index.ts","../../../core/src/hooks/auth/useOnError/index.ts","../../../core/src/hooks/auth/useIsExistAuthentication/index.ts","../../../core/src/hooks/data/useList.ts","../../../core/src/definitions/helpers/userFriendlySeconds/index.ts","../../../core/src/definitions/helpers/importCSVMapper/index.ts","../../../core/src/definitions/helpers/userFriendlyResourceName/index.ts","../../../core/src/definitions/table/index.ts","../../../core/src/definitions/upload/file2Base64/index.ts","../../../core/src/definitions/helpers/handleUseParams/index.tsx","../../../core/src/definitions/helpers/pickNotDeprecated/index.ts","../../../core/src/definitions/helpers/queryKeys/index.ts","../../../core/src/definitions/helpers/hasPermission/index.ts","../../../core/src/definitions/helpers/router/is-parameter.ts","../../../core/src/definitions/helpers/router/split-to-segments.ts","../../../core/src/definitions/helpers/router/is-segment-counts-same.ts","../../../core/src/definitions/helpers/router/remove-leading-trailing-slashes.ts","../../../core/src/definitions/helpers/router/check-by-segments.ts","../../../core/src/definitions/helpers/router/get-default-action-path.ts","../../../core/src/definitions/helpers/router/get-parent-resource.ts","../../../core/src/definitions/helpers/router/get-parent-prefix-for-resource.ts","../../../core/src/definitions/helpers/router/get-action-routes-from-resource.ts","../../../core/src/definitions/helpers/router/pick-matched-route.ts","../../../core/src/definitions/helpers/router/match-resource-from-route.ts","../../../core/src/definitions/helpers/routeGenerator/index.ts","../../../core/src/definitions/helpers/treeView/createTreeView/index.ts","../../../core/src/definitions/helpers/humanizeString/index.ts","../../../core/src/contexts/refine/index.tsx","../../../core/src/components/layoutWrapper/defaultLayout/index.tsx","../../../core/src/definitions/helpers/handleRefineOptions/index.ts","../../../core/src/definitions/helpers/redirectPage/index.ts","../../../core/src/definitions/helpers/sequentialPromises/index.ts","../../../core/src/definitions/helpers/pick-resource/index.ts","../../../core/src/definitions/helpers/pickDataProvider/index.ts","../../../core/src/definitions/helpers/handleMultiple/index.ts","../../../core/src/definitions/helpers/useInfinitePagination/index.ts","../../../core/src/definitions/helpers/legacy-resource-transform/index.ts","../../../core/src/definitions/helpers/router/pick-route-params.ts","../../../core/src/definitions/helpers/router/prepare-route-params.ts","../../../core/src/definitions/helpers/router/compose-route.ts","../../../core/src/definitions/helpers/useActiveAuthProvider/index.ts","../../../core/src/definitions/helpers/handlePaginationParams/index.ts","../../../core/src/definitions/helpers/useMediaQuery/index.ts","../../../core/src/hooks/data/useOne.ts","../../../core/src/hooks/data/useMany.ts","../../../core/src/hooks/data/useUpdate.ts","../../../core/src/contexts/undoableQueue/undoableQueueContext.tsx","../../../core/src/hooks/data/useCreate.ts","../../../core/src/hooks/data/useDelete.ts","../../../core/src/hooks/data/useCreateMany.ts","../../../core/src/hooks/data/useUpdateMany.ts","../../../core/src/hooks/data/useDeleteMany.ts","../../../core/src/hooks/data/useApiUrl.ts","../../../core/src/hooks/data/useCustom.ts","../../../core/src/hooks/data/useCustomMutation.ts","../../../core/src/hooks/data/useDataProvider.tsx","../../../core/src/contexts/data/index.tsx","../../../core/src/hooks/data/useInfiniteList.ts","../../../core/src/hooks/live/useResourceSubscription/index.ts","../../../core/src/contexts/live/index.tsx","../../../core/src/hooks/live/useLiveMode/index.ts","../../../core/src/hooks/live/useSubscription/index.ts","../../../core/src/hooks/live/usePublish/index.ts","../../../core/src/hooks/resource/useResource/index.ts","../../../core/src/contexts/resource/index.tsx","../../../core/src/hooks/deepMemo/index.tsx","../../../core/src/hooks/memoized/index.tsx","../../../core/src/contexts/router-picker/index.tsx","../../../core/src/hooks/router/use-parsed/index.tsx","../../../core/src/contexts/router/index.tsx","../../../core/src/hooks/router/use-parse/index.tsx","../../../core/src/hooks/resource/useResourceWithRoute/index.ts","../../../core/src/hooks/notification/useCancelNotification/index.tsx","../../../core/src/hooks/notification/useNotification/index.ts","../../../core/src/contexts/notification/index.tsx","../../../core/src/hooks/notification/useHandleNotification/index.ts","../../../core/src/hooks/translate/useSetLocale.ts","../../../core/src/contexts/translation/index.tsx","../../../core/src/hooks/translate/useTranslate.ts","../../../core/src/hooks/translate/useGetLocale.ts","../../../core/src/hooks/refine/useMutationMode.ts","../../../core/src/hooks/refine/useWarnAboutChange/index.ts","../../../core/src/contexts/unsavedWarn/index.tsx","../../../core/src/hooks/refine/useSyncWithLocation.ts","../../../core/src/hooks/refine/useTitle.tsx","../../../core/src/hooks/refine/useRefineContext.ts","../../../core/src/hooks/export/index.ts","../../../core/src/hooks/form/useForm.ts","../../../core/src/hooks/redirection/index.ts","../../../core/src/hooks/router/use-go/index.tsx","../../../core/src/hooks/router/use-back/index.tsx","../../../core/src/hooks/navigation/index.ts","../../../core/src/hooks/show/useShow.ts","../../../core/src/hooks/import/index.tsx","../../../core/src/hooks/modal/useModal/index.tsx","../../../core/src/hooks/router/use-get-to-path/index.ts","../../../core/src/hooks/router/use-to-path/index.ts","../../../core/src/hooks/router/use-link/index.tsx","../../../core/src/hooks/legacy-router/useRouterContext.ts","../../../core/src/contexts/legacy-router/index.tsx","../../../core/src/hooks/accessControl/useCan/index.ts","../../../core/src/contexts/accessControl/index.tsx","../../../core/src/definitions/helpers/sanitize-resource/index.ts","../../../core/src/hooks/accessControl/useCanWithoutCache.ts","../../../core/src/hooks/useSelect/index.ts","../../../core/src/hooks/useTable/index.ts","../../../core/src/hooks/auditLog/useLog/index.ts","../../../core/src/contexts/auditLog/index.tsx","../../../core/src/hooks/auditLog/useLogList/index.ts","../../../core/src/hooks/invalidate/index.tsx","../../../core/src/hooks/breadcrumb/index.ts","../../../core/src/hooks/menu/useMenu.tsx","../../../core/src/definitions/helpers/menu/create-resource-key.ts","../../../core/src/definitions/helpers/menu/create-tree.ts","../../../core/src/components/pages/login/index.tsx","../../../core/src/components/pages/auth/index.tsx","../../../core/src/components/pages/auth/components/login/index.tsx","../../../core/src/components/pages/auth/components/register/index.tsx","../../../core/src/components/pages/auth/components/forgotPassword/index.tsx","../../../core/src/components/pages/auth/components/updatePassword/index.tsx","../../../core/src/components/pages/ready/index.tsx","../../../core/src/components/pages/welcome/index.tsx","../../../core/src/components/containers/refine/index.tsx","../../../core/src/components/telemetry/index.tsx","../../../core/src/hooks/useTelemetryData/index.ts","../../../core/src/definitions/helpers/check-router-prop-misuse/index.ts","../../../core/src/hooks/router/use-router-misuse-warning/index.ts","../../../core/src/components/undoableQueue/index.tsx","../../../core/src/components/layoutWrapper/index.tsx","../../../core/src/components/authenticated/index.tsx","../../../core/src/components/routeChangeHandler/index.tsx","../../../core/src/components/canAccess/index.tsx","../../../core/src/components/gh-banner/index.tsx","../../../core/src/components/gh-banner/styles.ts","../../../ui-types/src/index.tsx","../../../ui-types/src/ids.tsx","../../src/hooks/form/useForm.ts","../../src/hooks/form/useModalForm/useModalForm.ts","../../src/hooks/form/useDrawerForm/useDrawerForm.ts","../../src/hooks/form/useStepsForm/useStepsForm.ts","../../src/hooks/table/useTable/useTable.ts","../../src/definitions/table/index.ts","../../src/hooks/table/useTable/paginationLink.tsx","../../src/hooks/table/useEditableTable/useEditableTable.ts","../../src/hooks/fields/useSelect/index.ts","../../src/hooks/fields/useCheckboxGroup/index.ts","../../src/hooks/fields/useRadioGroup/index.ts","../../src/hooks/import/index.tsx","../../src/hooks/list/useSimpleList/useSimpleList.ts","../../src/hooks/useFileUploadState/index.ts","../../src/hooks/modal/useModal/index.tsx","../../src/providers/notificationProvider/index.tsx","../../src/components/undoableNotification/index.tsx","../../src/components/layout/index.tsx","../../src/components/layout/sider/index.tsx","../../src/components/layout/sider/styles.ts","../../src/components/layout/header/index.tsx","../../src/components/layout/title/index.tsx","../../src/components/themedLayout/index.tsx","../../src/components/themedLayout/sider/index.tsx","../../src/components/themedLayout/sider/styles.ts","../../src/components/themedLayout/header/index.tsx","../../src/components/themedLayout/title/index.tsx","../../src/components/buttons/create/index.tsx","../../src/components/buttons/edit/index.tsx","../../src/components/buttons/delete/index.tsx","../../src/components/buttons/refresh/index.tsx","../../src/components/buttons/show/index.tsx","../../src/components/buttons/list/index.tsx","../../src/components/buttons/export/index.tsx","../../src/components/buttons/save/index.tsx","../../src/components/buttons/clone/index.tsx","../../src/components/buttons/import/index.tsx","../../src/components/crud/list/index.tsx","../../src/components/crud/create/index.tsx","../../src/components/crud/edit/index.tsx","../../src/components/crud/show/index.tsx","../../src/components/fields/text/index.tsx","../../src/components/fields/tag/index.tsx","../../src/components/fields/email/index.tsx","../../src/components/fields/image/index.tsx","../../src/components/fields/boolean/index.tsx","../../src/components/fields/date/index.tsx","../../src/components/fields/file/index.tsx","../../src/components/fields/url/index.tsx","../../src/components/fields/number/index.tsx","../../src/components/fields/markdown/index.tsx","../../src/components/table/components/filterDropdown/index.tsx","../../src/components/pages/error/index.tsx","../../src/components/pages/login/index.tsx","../../src/components/pages/login/styles.ts","../../src/components/pages/ready/index.tsx","../../src/components/pages/welcome/index.tsx","../../src/components/pages/auth/index.tsx","../../src/components/pages/auth/components/login/index.tsx","../../src/components/pages/auth/components/styles.ts","../../src/components/pages/auth/components/register/index.tsx","../../src/components/pages/auth/components/forgotPassword/index.tsx","../../src/components/pages/auth/components/updatePassword/index.tsx","../../src/components/breadcrumb/index.tsx","../../src/components/pageHeader/index.tsx","../../src/definitions/upload/index.ts","../../src/definitions/themes/index.ts"],"sourcesContent":["export * from \"./components\";\nexport * from \"./hooks\";\n\nexport {\n Action,\n ActionWithPage,\n AccessControlProvider,\n AuditLogProvider,\n LegacyAuthProvider,\n AuthBindings,\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 MetaQuery,\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 ILegacyAuthContext,\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 AccessControlBindings,\n DataBindings,\n i18nBindings,\n LiveBindings,\n NotificationsBindings,\n ResourceBindings,\n RouterBindings,\n ParseResponse,\n ParsedParams,\n GoConfig,\n BackFunction,\n GoFunction,\n ParseFunction,\n Prettify,\n FormWithSyncWithLocationParams,\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 pickNotDeprecated,\n legacyResourceTransform,\n matchResourceFromRoute,\n useActiveAuthProvider,\n} from \"./definitions/helpers\";\nexport { file2Base64 } from \"./definitions/upload\";\n\nexport { ResourceContext } from \"./contexts/resource/index\";\n","import React, { useEffect, useState } from \"react\";\n\nimport {\n useNavigation,\n useTranslate,\n useResource,\n useGo,\n useRouterType,\n} from \"@hooks\";\n\n/**\n * When the app is navigated to a non-existent route, refine shows a default error page.\n * A custom error component can be used for this error page.\n *\n * @see {@link https://refine.dev/docs/api-references/components/refine-config#catchall} for more details.\n */\nexport const ErrorComponent: React.FC = () => {\n const [errorMessage, setErrorMessage] = useState<string>();\n const translate = useTranslate();\n const { push } = useNavigation();\n const go = useGo();\n const routerType = useRouterType();\n\n const { resource, action } = useResource();\n\n useEffect(() => {\n if (resource && action) {\n setErrorMessage(\n translate(\n \"pages.error.info\",\n {\n action: action,\n resource: resource?.name,\n },\n `You may have forgotten to add the \"${action}\" component to \"${resource?.name}\" resource.`,\n ),\n );\n }\n }, [resource, action]);\n\n return (\n <>\n <h1>\n {translate(\n \"pages.error.404\",\n undefined,\n \"Sorry, the page you visited does not exist.\",\n )}\n </h1>\n {errorMessage && <p>{errorMessage}</p>}\n <button\n onClick={() => {\n if (routerType === \"legacy\") {\n push(\"/\");\n } else {\n go({ to: \"/\" });\n }\n }}\n >\n {translate(\"pages.error.backHome\", undefined, \"Back Home\")}\n </button>\n </>\n );\n};\n","import React, { PropsWithChildren } from \"react\";\n\nimport { useNavigation } from \"@hooks\";\nimport { ILegacyAuthContext, IAuthBindingsContext } from \"../../interfaces\";\n\n/**\n * @deprecated `LegacyAuthContext` is deprecated with refine@4, use `AuthBindingsContext` instead, however, we still support `LegacyAuthContext` for backward compatibility.\n */\nexport const LegacyAuthContext = React.createContext<ILegacyAuthContext>({});\n\n/**\n * @deprecated `LegacyAuthContextProvider` is deprecated with refine@4, use `AuthBindingsContextProvider` instead, however, we still support `LegacyAuthContextProvider` for backward compatibility.\n */\nexport const LegacyAuthContextProvider: React.FC<\n ILegacyAuthContext & {\n children?: React.ReactNode;\n }\n> = ({ children, isProvided, ...authOperations }) => {\n const { replace } = useNavigation();\n\n const loginFunc = async (params: any) => {\n try {\n const result = await authOperations.login?.(params);\n\n return 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 return 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 return 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 <LegacyAuthContext.Provider\n value={{\n ...authOperations,\n login: loginFunc,\n logout: logoutFunc,\n checkAuth: checkAuthFunc,\n register: registerFunc,\n isProvided,\n }}\n >\n {children}\n </LegacyAuthContext.Provider>\n );\n};\n\nexport const AuthBindingsContext = React.createContext<\n Partial<IAuthBindingsContext>\n>({});\n\nexport const AuthBindingsContextProvider: React.FC<\n PropsWithChildren<IAuthBindingsContext>\n> = ({ children, isProvided, ...authBindings }) => {\n const handleLogin = async (params: unknown) => {\n try {\n const result = await authBindings.login?.(params);\n\n return result;\n } catch (error) {\n console.warn(\n \"Unhandled Error in login: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleRegister = async (params: unknown) => {\n try {\n const result = await authBindings.register?.(params);\n\n return result;\n } catch (error) {\n console.warn(\n \"Unhandled Error in register: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleLogout = async (params: unknown) => {\n try {\n const result = await authBindings.logout?.(params);\n\n return result;\n } catch (error) {\n console.warn(\n \"Unhandled Error in logout: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleCheck = async (params: unknown) => {\n try {\n const result = await authBindings.check?.(params);\n\n return Promise.resolve(result);\n } catch (error) {\n console.warn(\n \"Unhandled Error in check: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleForgotPassword = async (params: unknown) => {\n try {\n const result = await authBindings.forgotPassword?.(params);\n\n return Promise.resolve(result);\n } catch (error) {\n console.warn(\n \"Unhandled Error in forgotPassword: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleUpdatePassword = async (params: unknown) => {\n try {\n const result = await authBindings.updatePassword?.(params);\n return Promise.resolve(result);\n } catch (error) {\n console.warn(\n \"Unhandled Error in updatePassword: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n return (\n <AuthBindingsContext.Provider\n value={{\n ...authBindings,\n login: handleLogin as IAuthBindingsContext[\"login\"],\n logout: handleLogout as IAuthBindingsContext[\"logout\"],\n check: handleCheck as IAuthBindingsContext[\"check\"],\n register: handleRegister as IAuthBindingsContext[\"register\"],\n forgotPassword:\n handleForgotPassword as IAuthBindingsContext[\"forgotPassword\"],\n updatePassword:\n handleUpdatePassword as IAuthBindingsContext[\"updatePassword\"],\n isProvided,\n }}\n >\n {children}\n </AuthBindingsContext.Provider>\n );\n};\n\n/**\n * @deprecated `useLegacyAuthContext` is deprecated with refine@4, use `useAuthBindingsContext` instead, however, we still support `useLegacyAuthContext` for backward compatibility.\n */\nexport const useLegacyAuthContext = () => {\n const context = React.useContext(LegacyAuthContext);\n\n return context;\n};\n\nexport const useAuthBindingsContext = () => {\n const context = React.useContext(AuthBindingsContext);\n\n return context;\n};\n","import { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\nimport { PermissionResponse } from \"../../../interfaces\";\nimport {\n useQuery,\n UseQueryResult,\n UseQueryOptions,\n} from \"@tanstack/react-query\";\n\nexport type UsePermissionsLegacyProps<TData = any> = {\n v3LegacyAuthProviderCompatible: true;\n options?: UseQueryOptions<TData>;\n};\n\nexport type UsePermissionsProps<TData = PermissionResponse> = {\n v3LegacyAuthProviderCompatible?: false;\n options?: UseQueryOptions<TData>;\n};\n\nexport type UsePermissionsCombinedProps<TData = any> = {\n v3LegacyAuthProviderCompatible: boolean;\n options?: UseQueryOptions<TData> | UseQueryOptions<PermissionResponse>;\n};\n\nexport type UsePermissionsLegacyReturnType<TData = any> = UseQueryResult<\n TData,\n unknown\n>;\n\nexport type UsePermissionsReturnType<TData = PermissionResponse> =\n UseQueryResult<TData, unknown>;\n\nexport type UsePermissionsCombinedReturnType<TData = any> =\n | UseQueryResult<TData, unknown>\n | UseQueryResult<PermissionResponse, unknown>;\n\nexport function usePermissions<TData = any>(\n props: UsePermissionsLegacyProps<TData>,\n): UsePermissionsLegacyReturnType<TData>;\n\nexport function usePermissions<TData = PermissionResponse>(\n props?: UsePermissionsProps<TData>,\n): UsePermissionsReturnType<TData>;\n\nexport function usePermissions<TData = any>(\n props?: UsePermissionsCombinedProps<TData>,\n): UsePermissionsCombinedReturnType<TData>;\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 function usePermissions<TData = any>({\n v3LegacyAuthProviderCompatible = false,\n options,\n}: UsePermissionsProps<TData> | UsePermissionsLegacyProps<TData> = {}):\n | UsePermissionsReturnType\n | UsePermissionsLegacyReturnType<TData> {\n const { getPermissions: legacyGetPermission } = useLegacyAuthContext();\n const { getPermissions } = useAuthBindingsContext();\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 as (params?: unknown) => Promise<TData>) ??\n (() => Promise.resolve(undefined)),\n {\n enabled: !v3LegacyAuthProviderCompatible && !!getPermissions,\n ...(v3LegacyAuthProviderCompatible ? {} : options),\n },\n );\n\n const legacyQueryResponse = useQuery<TData>(\n [\"usePermissions\", \"v3LegacyAuthProviderCompatible\"],\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 legacyGetPermission ?? (() => Promise.resolve(undefined)),\n {\n enabled: v3LegacyAuthProviderCompatible && !!legacyGetPermission,\n ...(v3LegacyAuthProviderCompatible ? options : {}),\n },\n );\n\n return v3LegacyAuthProviderCompatible ? legacyQueryResponse : queryResponse;\n}\n","import {\n useQuery,\n UseQueryResult,\n UseQueryOptions,\n} from \"@tanstack/react-query\";\n\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\nimport { IdentityResponse } from \"../../../interfaces\";\n\nexport type UseGetIdentityLegacyProps<TData> = {\n v3LegacyAuthProviderCompatible: true;\n queryOptions?: UseQueryOptions<TData>;\n};\n\nexport type UseGetIdentityProps<TData = IdentityResponse> = {\n v3LegacyAuthProviderCompatible?: false;\n queryOptions?: UseQueryOptions<TData>;\n};\n\nexport type UseGetIdentityCombinedProps<TData = any> = {\n v3LegacyAuthProviderCompatible: boolean;\n queryOptions?: UseQueryOptions<TData> | UseQueryOptions<IdentityResponse>;\n};\n\nexport type UseGetIdentityLegacyReturnType<TData> = UseQueryResult<\n TData,\n unknown\n>;\n\nexport type UseGetIdentityReturnType<TData = IdentityResponse> = UseQueryResult<\n TData,\n unknown\n>;\n\nexport type UsePermissionsCombinedReturnType<TData = any> =\n | UseQueryResult<TData, unknown>\n | UseQueryResult<IdentityResponse, unknown>;\n\nexport function useGetIdentity<TData = any>(\n props: UseGetIdentityLegacyProps<TData>,\n): UseGetIdentityLegacyReturnType<TData>;\n\nexport function useGetIdentity<TData = IdentityResponse>(\n props?: UseGetIdentityProps<TData>,\n): UseGetIdentityReturnType<TData>;\n\nexport function useGetIdentity<TData = any>(\n props?: UseGetIdentityCombinedProps<TData>,\n): UsePermissionsCombinedReturnType<TData>;\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 function useGetIdentity<TData = any>({\n v3LegacyAuthProviderCompatible = false,\n queryOptions,\n}: UseGetIdentityProps<TData> | UseGetIdentityLegacyProps<TData> = {}):\n | UseGetIdentityReturnType<TData>\n | UseGetIdentityLegacyReturnType<TData> {\n const { getUserIdentity: legacyGetUserIdentity } = useLegacyAuthContext();\n const { getIdentity } = useAuthBindingsContext();\n\n const queryResponse = useQuery<TData>(\n [\"getUserIdentity\"],\n // Enabled check for `getIdentity` is enough to be sure that it's defined in the query function but TS is not smart enough to know that.\n (getIdentity as (params?: unknown) => Promise<TData>) ??\n (() => Promise.resolve({})),\n {\n enabled: !v3LegacyAuthProviderCompatible && !!getIdentity,\n retry: false,\n ...(v3LegacyAuthProviderCompatible === true ? {} : queryOptions),\n },\n );\n\n const legacyQueryResponse = useQuery<TData>(\n [\"getUserIdentity\", \"v3LegacyAuthProviderCompatible\"],\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 legacyGetUserIdentity ?? (() => Promise.resolve({})),\n {\n enabled: v3LegacyAuthProviderCompatible && !!legacyGetUserIdentity,\n retry: false,\n ...(v3LegacyAuthProviderCompatible ? queryOptions : {}),\n },\n );\n\n return v3LegacyAuthProviderCompatible ? legacyQueryResponse : queryResponse;\n}\n","import {\n useMutation,\n UseMutationOptions,\n UseMutationResult,\n} from \"@tanstack/react-query\";\n\nimport { useGo, useNavigation, useNotification, useRouterType } from \"@hooks\";\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\nimport {\n RefineError,\n OpenNotificationParams,\n TLogoutData,\n} from \"../../../interfaces\";\nimport { AuthActionResponse } from \"src/interfaces/bindings/auth\";\nimport { useInvalidateAuthStore } from \"../useInvalidateAuthStore\";\n\ntype Variables = {\n redirectPath?: string | false;\n};\n\nexport type UseLogoutLegacyProps<TVariables> = {\n v3LegacyAuthProviderCompatible: true;\n mutationOptions?: Omit<\n UseMutationOptions<\n TLogoutData,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n >,\n \"mutationFn\" | \"onError\" | \"onSuccess\"\n >;\n};\n\nexport type UseLogoutProps<TVariables> = {\n v3LegacyAuthProviderCompatible?: false;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseLogoutCombinedProps<TVariables> = {\n v3LegacyAuthProviderCompatible: boolean;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse | TLogoutData,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseLogoutLegacyReturnType<TVariables> = UseMutationResult<\n TLogoutData,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n>;\n\nexport type UseLogoutReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n>;\n\nexport type UseLogoutCombinedReturnType<TVariables> = UseMutationResult<\n AuthActionResponse | TLogoutData,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n>;\n\nexport function useLogout<TVariables = {}>(\n props: UseLogoutLegacyProps<TVariables>,\n): UseLogoutLegacyReturnType<TVariables>;\n\nexport function useLogout<TVariables = {}>(\n props?: UseLogoutProps<TVariables>,\n): UseLogoutReturnType<TVariables>;\n\nexport function useLogout<TVariables = {}>(\n props?: UseLogoutCombinedProps<TVariables>,\n): UseLogoutCombinedReturnType<TVariables>;\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 function useLogout<TVariables = {}>({\n v3LegacyAuthProviderCompatible,\n mutationOptions,\n}: UseLogoutProps<TVariables> | UseLogoutLegacyProps<TVariables> = {}):\n | UseLogoutLegacyReturnType<TVariables>\n | UseLogoutReturnType<TVariables> {\n const invalidateAuthStore = useInvalidateAuthStore();\n const routerType = useRouterType();\n const go = useGo();\n const { push } = useNavigation();\n const { open, close } = useNotification();\n const { logout: legacyLogoutFromContext } = useLegacyAuthContext();\n const { logout: logoutFromContext } = useAuthBindingsContext();\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n >([\"useLogout\"], logoutFromContext, {\n onSuccess: async (data, variables) => {\n const { success, error, redirectTo } = data;\n const { redirectPath } = variables ?? {};\n\n const redirect = redirectPath ?? redirectTo;\n\n if (success) {\n close?.(\"useLogout-error\");\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n await invalidateAuthStore();\n\n if (redirect !== false) {\n if (routerType === \"legacy\") {\n push(redirect ?? \"/login\");\n } else {\n if (redirect) {\n go({ to: redirect });\n }\n }\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible === true ? {} : mutationOptions),\n });\n\n const v3LegacyAuthProviderCompatibleMutation = useMutation<\n TLogoutData,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n >(\n [\"useLogout\", \"v3LegacyAuthProviderCompatible\"],\n legacyLogoutFromContext,\n {\n onSuccess: async (data, variables) => {\n const redirectPath = variables?.redirectPath ?? data;\n\n await invalidateAuthStore();\n\n if (redirectPath === false) {\n return;\n }\n\n if (redirectPath) {\n if (routerType === \"legacy\") {\n push(redirectPath);\n } else {\n go({ to: redirectPath });\n }\n return;\n }\n\n if (routerType === \"legacy\") {\n push(\"/login\");\n } else {\n go({ to: \"/login\" });\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible ? mutationOptions : {}),\n },\n );\n\n return v3LegacyAuthProviderCompatible\n ? v3LegacyAuthProviderCompatibleMutation\n : mutation;\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n key: \"useLogout-error\",\n type: \"error\",\n message: error?.name || \"Logout Error\",\n description: error?.message || \"Something went wrong during logout\",\n };\n};\n","import { useQueryClient } from \"@tanstack/react-query\";\n\nexport const useInvalidateAuthStore = () => {\n const queryClient = useQueryClient();\n\n const invalidate = async () => {\n await Promise.all([\n queryClient.invalidateQueries([\"useAuthenticated\"]),\n queryClient.invalidateQueries([\"getUserIdentity\"]),\n queryClient.invalidateQueries([\"usePermissions\"]),\n ]);\n };\n\n return invalidate;\n};\n","import React from \"react\";\nimport {\n useMutation,\n UseMutationOptions,\n UseMutationResult,\n} from \"@tanstack/react-query\";\nimport qs from \"qs\";\n\nimport {\n useNavigation,\n useRouterContext,\n useNotification,\n useRouterType,\n useParsed,\n useGo,\n} from \"@hooks\";\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\n\nimport {\n RefineError,\n OpenNotificationParams,\n TLoginData,\n} from \"../../../interfaces\";\nimport { AuthActionResponse } from \"src/interfaces/bindings/auth\";\nimport { useInvalidateAuthStore } from \"../useInvalidateAuthStore\";\n\nexport type UseLoginLegacyProps<TVariables> = {\n v3LegacyAuthProviderCompatible: true;\n mutationOptions?: Omit<\n UseMutationOptions<\n TLoginData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\" | \"onError\" | \"onSuccess\"\n >;\n};\n\nexport type UseLoginProps<TVariables> = {\n v3LegacyAuthProviderCompatible?: false;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseLoginCombinedProps<TVariables> = {\n v3LegacyAuthProviderCompatible: boolean;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse | TLoginData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseLoginLegacyReturnType<TVariables> = UseMutationResult<\n TLoginData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseLoginReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseLoginCombinedReturnType<TVariables> = UseMutationResult<\n AuthActionResponse | TLoginData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport function useLogin<TVariables = {}>(\n props: UseLoginLegacyProps<TVariables>,\n): UseLoginLegacyReturnType<TVariables>;\n\nexport function useLogin<TVariables = {}>(\n props?: UseLoginProps<TVariables>,\n): UseLoginReturnType<TVariables>;\n\nexport function useLogin<TVariables = {}>(\n props?: UseLoginCombinedProps<TVariables>,\n): UseLoginCombinedReturnType<TVariables>;\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 function useLogin<TVariables = {}>({\n v3LegacyAuthProviderCompatible,\n mutationOptions,\n}: UseLoginProps<TVariables> | UseLoginLegacyProps<TVariables> = {}):\n | UseLoginLegacyReturnType<TVariables>\n | UseLoginReturnType<TVariables> {\n const invalidateAuthStore = useInvalidateAuthStore();\n const routerType = useRouterType();\n\n const go = useGo();\n const { replace } = useNavigation();\n\n const parsed = useParsed();\n\n const { useLocation } = useRouterContext();\n const { search } = useLocation();\n\n const { close, open } = useNotification();\n const { login: legacyLoginFromContext } = useLegacyAuthContext();\n const { login: loginFromContext } = useAuthBindingsContext();\n\n const to = React.useMemo(() => {\n if (routerType === \"legacy\") {\n const legacySearch = qs.parse(search, {\n ignoreQueryPrefix: true,\n });\n return legacySearch.to;\n } else {\n return parsed.params?.to;\n }\n }, [routerType, parsed.params, search]);\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >([\"useLogin\"], loginFromContext, {\n onSuccess: async ({ success, redirectTo, error }) => {\n if (success) {\n close?.(\"login-error\");\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n await invalidateAuthStore();\n\n if (to && success) {\n if (routerType === \"legacy\") {\n replace(to as string);\n } else {\n go({ to: to as string, type: \"replace\" });\n }\n } else if (redirectTo) {\n if (routerType === \"legacy\") {\n replace(redirectTo);\n } else {\n go({ to: redirectTo, type: \"replace\" });\n }\n } else {\n if (routerType === \"legacy\") {\n replace(\"/\");\n }\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible === true ? {} : mutationOptions),\n });\n\n const v3LegacyAuthProviderCompatibleMutation = useMutation<\n TLoginData,\n Error | RefineError,\n TVariables,\n unknown\n >([\"useLogin\", \"v3LegacyAuthProviderCompatible\"], legacyLoginFromContext, {\n onSuccess: async (redirectPathFromAuth) => {\n await invalidateAuthStore();\n\n if (to) {\n replace(to as string);\n }\n\n if (redirectPathFromAuth !== false && !to) {\n if (typeof redirectPathFromAuth === \"string\") {\n if (routerType === \"legacy\") {\n replace(redirectPathFromAuth);\n } else {\n go({ to: redirectPathFromAuth, type: \"replace\" });\n }\n } else {\n if (routerType === \"legacy\") {\n replace(\"/\");\n } else {\n go({ to: \"/\", type: \"replace\" });\n }\n }\n }\n\n close?.(\"login-error\");\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible ? mutationOptions : {}),\n });\n\n return v3LegacyAuthProviderCompatible\n ? v3LegacyAuthProviderCompatibleMutation\n : mutation;\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Login Error\",\n description: error?.message || \"Invalid credentials\",\n key: \"login-error\",\n type: \"error\",\n };\n};\n","import {\n useMutation,\n UseMutationOptions,\n UseMutationResult,\n} from \"@tanstack/react-query\";\n\nimport { useNavigation, useRouterType, useGo, useNotification } from \"@hooks\";\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\n\nimport {\n AuthActionResponse,\n RefineError,\n OpenNotificationParams,\n TLoginData,\n TRegisterData,\n} from \"../../../interfaces\";\nimport { useInvalidateAuthStore } from \"../useInvalidateAuthStore\";\n\nexport type UseRegisterLegacyProps<TVariables> = {\n v3LegacyAuthProviderCompatible: true;\n mutationOptions?: Omit<\n UseMutationOptions<\n TRegisterData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\" | \"onError\" | \"onSuccess\"\n >;\n};\n\nexport type UseRegisterProps<TVariables> = {\n v3LegacyAuthProviderCompatible?: false;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseRegisterCombinedProps<TVariables> = {\n v3LegacyAuthProviderCompatible: boolean;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse | TRegisterData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseRegisterLegacyReturnType<TVariables> = UseMutationResult<\n TRegisterData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseRegisterReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseRegisterCombinedReturnType<TVariables> = UseMutationResult<\n AuthActionResponse | TLoginData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport function useRegister<TVariables = {}>(\n props: UseRegisterLegacyProps<TVariables>,\n): UseRegisterLegacyReturnType<TVariables>;\n\nexport function useRegister<TVariables = {}>(\n props?: UseRegisterProps<TVariables>,\n): UseRegisterReturnType<TVariables>;\n\nexport function useRegister<TVariables = {}>(\n props?: UseRegisterCombinedProps<TVariables>,\n): UseRegisterCombinedReturnType<TVariables>;\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 function useRegister<TVariables = {}>({\n v3LegacyAuthProviderCompatible,\n mutationOptions,\n}: UseRegisterProps<TVariables> | UseRegisterLegacyProps<TVariables> = {}):\n | UseRegisterReturnType<TVariables>\n | UseRegisterLegacyReturnType<TVariables> {\n const invalidateAuthStore = useInvalidateAuthStore();\n const routerType = useRouterType();\n const go = useGo();\n const { replace } = useNavigation();\n const { register: legacyRegisterFromContext } = useLegacyAuthContext();\n const { register: registerFromContext } = useAuthBindingsContext();\n const { close, open } = useNotification();\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >([\"useRegister\"], registerFromContext, {\n onSuccess: async ({ success, redirectTo, error }) => {\n if (success) {\n close?.(\"register-error\");\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n await invalidateAuthStore();\n\n if (redirectTo) {\n if (routerType === \"legacy\") {\n replace(redirectTo);\n } else {\n go({ to: redirectTo, type: \"replace\" });\n }\n } else {\n if (routerType === \"legacy\") {\n replace(\"/\");\n }\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible === true ? {} : mutationOptions),\n });\n\n const v3LegacyAuthProviderCompatibleMutation = useMutation<\n TRegisterData,\n Error | RefineError,\n TVariables,\n unknown\n >(\n [\"useRegister\", \"v3LegacyAuthProviderCompatible\"],\n legacyRegisterFromContext,\n {\n onSuccess: async (redirectPathFromAuth) => {\n await invalidateAuthStore();\n\n if (redirectPathFromAuth !== false) {\n if (redirectPathFromAuth) {\n if (routerType === \"legacy\") {\n replace(redirectPathFromAuth);\n } else {\n go({ to: redirectPathFromAuth, type: \"replace\" });\n }\n } else {\n if (routerType === \"legacy\") {\n replace(\"/\");\n } else {\n go({ to: \"/\", type: \"replace\" });\n }\n }\n close?.(\"register-error\");\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible ? mutationOptions : {}),\n },\n );\n\n return v3LegacyAuthProviderCompatible\n ? v3LegacyAuthProviderCompatibleMutation\n : mutation;\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Register Error\",\n description: error?.message || \"Error while registering\",\n key: \"register-error\",\n type: \"error\",\n };\n};\n","import {\n useMutation,\n UseMutationOptions,\n UseMutationResult,\n} from \"@tanstack/react-query\";\n\nimport { useGo, useNavigation, useNotification, useRouterType } from \"@hooks\";\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\n\nimport {\n AuthActionResponse,\n RefineError,\n OpenNotificationParams,\n TForgotPasswordData,\n} from \"../../../interfaces\";\n\nexport type UseForgotPasswordLegacyProps<TVariables> = {\n v3LegacyAuthProviderCompatible: true;\n mutationOptions?: Omit<\n UseMutationOptions<\n TForgotPasswordData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\" | \"onError\" | \"onSuccess\"\n >;\n};\n\nexport type UseForgotPasswordProps<TVariables> = {\n v3LegacyAuthProviderCompatible?: false;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseForgotPasswordCombinedProps<TVariables> = {\n v3LegacyAuthProviderCompatible: boolean;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse | TForgotPasswordData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseForgotPasswordLegacyReturnType<TVariables> = UseMutationResult<\n TForgotPasswordData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseForgotPasswordReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseForgotPasswordCombinedReturnType<TVariables> = UseMutationResult<\n AuthActionResponse | TForgotPasswordData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport function useForgotPassword<TVariables = {}>(\n props: UseForgotPasswordLegacyProps<TVariables>,\n): UseForgotPasswordLegacyReturnType<TVariables>;\n\nexport function useForgotPassword<TVariables = {}>(\n props?: UseForgotPasswordProps<TVariables>,\n): UseForgotPasswordReturnType<TVariables>;\n\nexport function useForgotPassword<TVariables = {}>(\n props?: UseForgotPasswordCombinedProps<TVariables>,\n): UseForgotPasswordCombinedReturnType<TVariables>;\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 function useForgotPassword<TVariables = {}>({\n v3LegacyAuthProviderCompatible,\n mutationOptions,\n}:\n | UseForgotPasswordProps<TVariables>\n | UseForgotPasswordLegacyProps<TVariables> = {}):\n | UseForgotPasswordReturnType<TVariables>\n | UseForgotPasswordLegacyReturnType<TVariables> {\n const routerType = useRouterType();\n const go = useGo();\n const { replace } = useNavigation();\n const {\n forgotPassword: v3LegacyAuthProviderCompatibleForgotPasswordFromContext,\n } = useLegacyAuthContext();\n const { forgotPassword: forgotPasswordFromContext } =\n useAuthBindingsContext();\n const { close, open } = useNotification();\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >([\"useForgotPassword\"], forgotPasswordFromContext, {\n onSuccess: ({ success, redirectTo, error }) => {\n if (success) {\n close?.(\"forgot-password-error\");\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n if (redirectTo) {\n if (routerType === \"legacy\") {\n replace(redirectTo);\n } else {\n go({ to: redirectTo, type: \"replace\" });\n }\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible === true ? {} : mutationOptions),\n });\n\n const v3LegacyAuthProviderCompatibleMutation = useMutation<\n TForgotPasswordData,\n Error | RefineError,\n TVariables,\n unknown\n >(\n [\"useForgotPassword\", \"v3LegacyAuthProviderCompatible\"],\n v3LegacyAuthProviderCompatibleForgotPasswordFromContext,\n {\n onSuccess: (redirectPathFromAuth) => {\n if (redirectPathFromAuth !== false) {\n if (redirectPathFromAuth) {\n if (routerType === \"legacy\") {\n replace(redirectPathFromAuth);\n } else {\n go({ to: redirectPathFromAuth, type: \"replace\" });\n }\n }\n }\n close?.(\"forgot-password-error\");\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible ? mutationOptions : {}),\n },\n );\n\n return v3LegacyAuthProviderCompatible\n ? v3LegacyAuthProviderCompatibleMutation\n : mutation;\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Forgot Password Error\",\n description: error?.message || \"Error while resetting password\",\n key: \"forgot-password-error\",\n type: \"error\",\n };\n};\n","import React from \"react\";\nimport {\n useMutation,\n UseMutationOptions,\n UseMutationResult,\n} from \"@tanstack/react-query\";\nimport qs from \"qs\";\n\nimport {\n useNavigation,\n useRouterType,\n useGo,\n useParsed,\n useNotification,\n useRouterContext,\n} from \"@hooks\";\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\nimport {\n AuthActionResponse,\n RefineError,\n OpenNotificationParams,\n TUpdatePasswordData,\n UpdatePasswordFormTypes,\n} from \"../../../interfaces\";\n\nexport type UseUpdatePasswordLegacyProps<\n TVariables extends UpdatePasswordFormTypes,\n> = {\n v3LegacyAuthProviderCompatible: true;\n mutationOptions?: Omit<\n UseMutationOptions<\n TUpdatePasswordData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\" | \"onError\" | \"onSuccess\"\n >;\n};\n\nexport type UseUpdatePasswordProps<TVariables extends UpdatePasswordFormTypes> =\n {\n v3LegacyAuthProviderCompatible?: false;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n };\n\nexport type UseUpdatePasswordCombinedProps<\n TVariables extends UpdatePasswordFormTypes,\n> = {\n v3LegacyAuthProviderCompatible: boolean;\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse | TUpdatePasswordData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseUpdatePasswordLegacyReturnType<\n TVariables extends UpdatePasswordFormTypes,\n> = UseMutationResult<\n TUpdatePasswordData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseUpdatePasswordReturnType<\n TVariables extends UpdatePasswordFormTypes,\n> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport type UseUpdatePasswordCombinedReturnType<\n TVariables extends UpdatePasswordFormTypes,\n> = UseMutationResult<\n AuthActionResponse | TUpdatePasswordData,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\nexport function useUpdatePassword<TVariables extends UpdatePasswordFormTypes>(\n props: UseUpdatePasswordLegacyProps<TVariables>,\n): UseUpdatePasswordLegacyReturnType<TVariables>;\n\nexport function useUpdatePassword<TVariables extends UpdatePasswordFormTypes>(\n props?: UseUpdatePasswordProps<TVariables>,\n): UseUpdatePasswordReturnType<TVariables>;\n\nexport function useUpdatePassword<TVariables extends UpdatePasswordFormTypes>(\n props?: UseUpdatePasswordCombinedProps<TVariables>,\n): UseUpdatePasswordCombinedReturnType<TVariables>;\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 function useUpdatePassword<\n TVariables extends UpdatePasswordFormTypes = {},\n>({\n v3LegacyAuthProviderCompatible,\n mutationOptions,\n}:\n | UseUpdatePasswordProps<TVariables>\n | UseUpdatePasswordLegacyProps<TVariables> = {}):\n | UseUpdatePasswordReturnType<TVariables>\n | UseUpdatePasswordLegacyReturnType<TVariables> {\n const routerType = useRouterType();\n\n const go = useGo();\n const { replace } = useNavigation();\n const { updatePassword: legacyUpdatePasswordFromContext } =\n useLegacyAuthContext();\n const { updatePassword: updatePasswordFromContext } =\n useAuthBindingsContext();\n const { close, open } = useNotification();\n\n const parsed = useParsed();\n const { useLocation } = useRouterContext();\n const { search } = useLocation();\n\n const params = React.useMemo(() => {\n if (routerType === \"legacy\") {\n const queryStrings = qs.parse(search, {\n ignoreQueryPrefix: true,\n });\n return queryStrings ?? {};\n } else {\n return parsed.params ?? {};\n }\n }, [search, parsed, routerType]);\n\n const mutation = useMutation<\n AuthActionResponse,\n Error,\n TVariables,\n unknown\n >(\n [\"useUpdatePassword\"],\n async (variables) => {\n return updatePasswordFromContext?.({\n ...params,\n ...variables,\n }) as Promise<AuthActionResponse>;\n },\n {\n onSuccess: ({ success, redirectTo, error }) => {\n if (success) {\n close?.(\"update-password-error\");\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n if (redirectTo) {\n if (routerType === \"legacy\") {\n replace(redirectTo);\n } else {\n go({ to: redirectTo, type: \"replace\" });\n }\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible === true ? {} : mutationOptions),\n },\n );\n\n const v3LegacyAuthProviderCompatibleMutation = useMutation<\n TUpdatePasswordData,\n Error | RefineError,\n TVariables,\n unknown\n >(\n [\"useUpdatePassword\", \"v3LegacyAuthProviderCompatible\"],\n async (variables) => {\n return legacyUpdatePasswordFromContext?.({\n ...params,\n ...variables,\n });\n },\n {\n onSuccess: (redirectPathFromAuth) => {\n if (redirectPathFromAuth !== false) {\n if (redirectPathFromAuth) {\n if (routerType === \"legacy\") {\n replace(redirectPathFromAuth);\n } else {\n go({ to: redirectPathFromAuth, type: \"replace\" });\n }\n }\n }\n close?.(\"update-password-error\");\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...(v3LegacyAuthProviderCompatible ? mutationOptions : {}),\n },\n );\n\n return v3LegacyAuthProviderCompatible\n ? v3LegacyAuthProviderCompatibleMutation\n : mutation;\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Update Password Error\",\n description: error?.message || \"Error while updating password\",\n key: \"update-password-error\",\n type: \"error\",\n };\n};\n","import { useQuery, UseQueryResult } from \"@tanstack/react-query\";\n\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\nimport { CheckResponse } from \"../../../interfaces\";\n\nexport type UseIsAuthenticatedLegacyProps = {\n v3LegacyAuthProviderCompatible: true;\n params?: any;\n};\n\nexport type UseIsAuthenticatedProps = {\n v3LegacyAuthProviderCompatible?: false;\n params?: any;\n};\n\nexport type UseIsAuthenticatedCombinedProps = {\n v3LegacyAuthProviderCompatible: boolean;\n params?: any;\n};\n\nexport type UseIsAuthenticatedLegacyReturnType = UseQueryResult<any, any>;\n\nexport type UseIsAuthenticatedReturnType = UseQueryResult<CheckResponse, any>;\n\nexport type UseIsAuthenticatedCombinedReturnType = UseQueryResult<\n CheckResponse | any,\n any\n>;\n\nexport function useIsAuthenticated(\n props: UseIsAuthenticatedLegacyProps,\n): UseIsAuthenticatedLegacyReturnType;\n\nexport function useIsAuthenticated(\n props?: UseIsAuthenticatedProps,\n): UseIsAuthenticatedReturnType;\n\nexport function useIsAuthenticated(\n props?: UseIsAuthenticatedCombinedProps,\n): UseIsAuthenticatedCombinedReturnType;\n\n/**\n * `useIsAuthenticated` 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 */\nexport function useIsAuthenticated({\n v3LegacyAuthProviderCompatible = false,\n params,\n}: UseIsAuthenticatedProps | UseIsAuthenticatedLegacyProps = {}):\n | UseIsAuthenticatedReturnType\n | UseIsAuthenticatedLegacyReturnType {\n const { checkAuth } = useLegacyAuthContext();\n const { check } = useAuthBindingsContext();\n\n const queryResponse = useQuery(\n [\"useAuthenticated\", params],\n async () => (await check?.(params)) ?? {},\n {\n retry: false,\n enabled: !v3LegacyAuthProviderCompatible,\n },\n );\n\n const legacyQueryResponse = useQuery(\n [\"useAuthenticated\", params, \"v3LegacyAuthProviderCompatible\"],\n async () => (await checkAuth?.(params)) ?? {},\n {\n retry: false,\n enabled: v3LegacyAuthProviderCompatible,\n },\n );\n\n return v3LegacyAuthProviderCompatible ? legacyQueryResponse : queryResponse;\n}\n\n/**\n * @deprecated `useAuthenticated` is deprecated with refine@4, use `useIsAuthenticated` instead, however, we still support `useAuthenticated` for backward compatibility.\n */\nexport const useAuthenticated = useIsAuthenticated;\n","import { useMutation, UseMutationResult } from \"@tanstack/react-query\";\n\nimport { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\nimport { OnErrorResponse } from \"../../../interfaces\";\nimport { useGo, useLogout, useNavigation, useRouterType } from \"@hooks\";\n\nexport type UseOnErrorLegacyProps = {\n v3LegacyAuthProviderCompatible: true;\n};\n\nexport type UseOnErrorProps = {\n v3LegacyAuthProviderCompatible?: false;\n};\n\nexport type UseOnErrorCombinedProps = {\n v3LegacyAuthProviderCompatible: boolean;\n};\n\nexport type UseOnErrorLegacyReturnType = UseMutationResult<\n void,\n string | undefined,\n any,\n unknown\n>;\n\nexport type UseOnErrorReturnType = UseMutationResult<\n OnErrorResponse,\n unknown,\n unknown,\n unknown\n>;\nexport type UseOnErrorCombinedReturnType = UseMutationResult<\n OnErrorResponse | void,\n unknown,\n unknown,\n unknown\n>;\n\nexport function useOnError(\n props: UseOnErrorLegacyProps,\n): UseOnErrorLegacyReturnType;\n\nexport function useOnError(props?: UseOnErrorProps): UseOnErrorReturnType;\n\nexport function useOnError(\n props?: UseOnErrorCombinedProps,\n): UseOnErrorCombinedReturnType;\n\n/**\n * `useOnError` calls the `checkError` method from the {@link https://refine.dev/docs/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/core/hooks/auth/useCheckError} for more details.\n *\n */\nexport function useOnError({\n v3LegacyAuthProviderCompatible = false,\n}: UseOnErrorProps | UseOnErrorLegacyProps = {}):\n | UseOnErrorReturnType\n | UseOnErrorLegacyReturnType {\n const routerType = useRouterType();\n const go = useGo();\n const { replace } = useNavigation();\n\n const { checkError: legacyCheckErrorFromContext } = useLegacyAuthContext();\n const { onError: onErrorFromContext } = useAuthBindingsContext();\n\n const { mutate: legacyLogout } = useLogout({\n v3LegacyAuthProviderCompatible: Boolean(v3LegacyAuthProviderCompatible),\n });\n const { mutate: logout } = useLogout({\n v3LegacyAuthProviderCompatible: Boolean(v3LegacyAuthProviderCompatible),\n });\n\n const mutation = useMutation([\"useCheckError\"], onErrorFromContext, {\n onSuccess: ({ logout: shouldLogout, redirectTo }) => {\n if (shouldLogout) {\n logout({ redirectPath: redirectTo });\n return;\n }\n\n if (redirectTo) {\n if (routerType === \"legacy\") {\n replace(redirectTo);\n } else {\n go({ to: redirectTo, type: \"replace\" });\n }\n return;\n }\n },\n });\n\n const v3LegacyAuthProviderCompatibleMutation = useMutation(\n [\"useCheckError\", \"v3LegacyAuthProviderCompatible\"],\n legacyCheckErrorFromContext,\n {\n onError: (redirectPath?: string) => {\n legacyLogout({ redirectPath });\n },\n },\n );\n\n return v3LegacyAuthProviderCompatible\n ? v3LegacyAuthProviderCompatibleMutation\n : mutation;\n}\n\n/**\n * @deprecated `useCheckError` is deprecated with refine@4, use `useOnError` instead, however, we still support `useCheckError` for backward compatibility.\n */\nexport const useCheckError = useOnError;\n","import { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\n\n/**\n * A hook that the UI uses\n * @internal\n */\nexport const useIsExistAuthentication = (): boolean => {\n const { isProvided: legacyIsProvided } = useLegacyAuthContext();\n const { isProvided } = useAuthBindingsContext();\n\n return Boolean(isProvided || legacyIsProvided);\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 MetaQuery,\n SuccessErrorNotification,\n LiveModeProps,\n Prettify,\n} from \"../../interfaces\";\nimport {\n useResource,\n useHandleNotification,\n useResourceSubscription,\n useTranslate,\n useDataProvider,\n useOnError,\n} from \"@hooks\";\nimport {\n queryKeys,\n pickDataProvider,\n pickNotDeprecated,\n useActiveAuthProvider,\n handlePaginationParams,\n} from \"@definitions/helpers\";\n\nexport interface UseListConfig {\n pagination?: Pagination;\n hasPagination?: boolean;\n sort?: CrudSorting;\n filters?: CrudFilters;\n}\n\nexport type BaseListProps = {\n /**\n * Configuration for pagination, sorting and filtering\n * @type [`UseListConfig`](/docs/api-reference/core/hooks/data/useList/#config-parameters)\n * @deprecated `config` property is deprecated. Use `pagination`, `hasPagination`, `sorters` and `filters` instead.\n */\n config?: UseListConfig;\n /**\n * Pagination properties\n */\n pagination?: Pagination;\n /**\n * Whether to use server-side pagination or not\n * @deprecated `hasPagination` property is deprecated. Use `pagination.mode` instead.\n */\n hasPagination?: boolean;\n /**\n * Sorter parameters\n */\n sorters?: CrudSorting;\n /**\n * Filter parameters\n */\n filters?: CrudFilters;\n /**\n * Meta data query for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Meta data query for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use\n */\n dataProviderName?: string;\n};\n\nexport type UseListProps<TData, TError> = {\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n\n /**\n * Tanstack Query's [useQuery](https://tanstack.com/query/v4/docs/reference/useQuery) options\n */\n queryOptions?: UseQueryOptions<GetListResponse<TData>, TError>;\n} & BaseListProps &\n SuccessErrorNotification<\n GetListResponse<TData>,\n TError,\n Prettify<BaseListProps>\n > &\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 filters,\n hasPagination,\n pagination,\n sorters,\n queryOptions,\n successNotification,\n errorNotification,\n meta,\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 translate = useTranslate();\n const authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n const handleNotification = useHandleNotification();\n\n const pickedDataProvider = pickDataProvider(\n resource,\n dataProviderName,\n resources,\n );\n const preferredMeta = pickNotDeprecated(meta, metaData);\n const prefferedFilters = pickNotDeprecated(filters, config?.filters);\n const prefferedSorters = pickNotDeprecated(sorters, config?.sort);\n const prefferedHasPagination = pickNotDeprecated(\n hasPagination,\n config?.hasPagination,\n );\n const prefferedPagination = handlePaginationParams({\n pagination,\n configPagination: config?.pagination,\n hasPagination: prefferedHasPagination,\n });\n const isServerPagination = prefferedPagination.mode === \"server\";\n const notificationValues = {\n meta: preferredMeta,\n metaData: preferredMeta,\n filters: prefferedFilters,\n hasPagination: isServerPagination,\n pagination: prefferedPagination,\n sorters: prefferedSorters,\n config: {\n ...config,\n sort: prefferedSorters,\n },\n };\n\n const isEnabled =\n queryOptions?.enabled === undefined || queryOptions?.enabled === true;\n\n const queryKey = queryKeys(\n resource,\n pickedDataProvider,\n preferredMeta,\n preferredMeta,\n );\n\n const { getList } = dataProvider(pickedDataProvider);\n\n useResourceSubscription({\n resource,\n types: [\"*\"],\n params: {\n meta: preferredMeta,\n metaData: preferredMeta,\n pagination: prefferedPagination,\n hasPagination: isServerPagination,\n sort: prefferedSorters,\n sorters: prefferedSorters,\n filters: prefferedFilters,\n subscriptionType: \"useList\",\n ...liveParams,\n },\n channel: `resources/${resource}`,\n enabled: isEnabled,\n liveMode,\n onLiveEvent,\n });\n\n const queryResponse = useQuery<GetListResponse<TData>, TError>(\n queryKey.list({\n filters: prefferedFilters,\n hasPagination: isServerPagination,\n ...(isServerPagination && {\n pagination: prefferedPagination,\n }),\n ...(sorters && {\n sorters,\n }),\n ...(config?.sort && {\n sort: config?.sort,\n }),\n }),\n ({ queryKey, pageParam, signal }) => {\n return getList<TData>({\n resource: resource!,\n pagination: prefferedPagination,\n hasPagination: isServerPagination,\n filters: prefferedFilters,\n sort: prefferedSorters,\n sorters: prefferedSorters,\n meta: {\n ...(preferredMeta || {}),\n queryContext: {\n queryKey,\n pageParam,\n signal,\n },\n },\n metaData: {\n ...(preferredMeta || {}),\n queryContext: {\n queryKey,\n pageParam,\n signal,\n },\n },\n });\n },\n {\n ...queryOptions,\n enabled:\n typeof queryOptions?.enabled !== \"undefined\"\n ? queryOptions?.enabled\n : !!resource,\n select: (rawData) => {\n let data = rawData;\n\n const { current, mode, pageSize } = prefferedPagination;\n\n if (mode === \"client\") {\n data = {\n ...data,\n data: data.data.slice(\n (current - 1) * pageSize,\n current * pageSize,\n ),\n total: data.total,\n };\n }\n\n if (queryOptions?.select) {\n return queryOptions?.select?.(data);\n }\n\n return data;\n },\n onSuccess: (data) => {\n queryOptions?.onSuccess?.(data);\n\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(\n data,\n notificationValues,\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, notificationValues, 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\";\nimport { pickNotDeprecated } from \"@definitions/helpers\";\n\nexport const parseTableParams = (url: string) => {\n const { current, pageSize, sorter, sorters, 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: (pickNotDeprecated(sorters, 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\n/**\n * @internal This function is used to stringify table params from the useTable hook.\n */\nexport const stringifyTableParams = (params: {\n pagination?: { current?: number; pageSize?: number };\n sorters: 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, sorters, filters, ...rest } = params;\n\n const queryString = qs.stringify(\n {\n ...rest,\n ...(pagination ? pagination : {}),\n sorters: pickNotDeprecated(sorters, sorter),\n filters,\n },\n options,\n );\n\n return queryString;\n};\n\nexport const compareFilters = (\n left: CrudFilter,\n right: CrudFilter,\n): boolean => {\n if (\n left.operator !== \"and\" &&\n left.operator !== \"or\" &&\n right.operator !== \"and\" &&\n right.operator !== \"or\"\n ) {\n return (\n (\"field\" in left ? left.field : undefined) ==\n (\"field\" in right ? right.field : undefined) &&\n left.operator == right.operator\n );\n }\n\n return (\n (\"key\" in left ? left.key : undefined) ==\n (\"key\" in right ? right.key : undefined) &&\n left.operator == right.operator\n );\n};\n\nexport const compareSorters = (left: CrudSort, right: CrudSort): boolean =>\n left.field == right.field;\n// Keep only one CrudFilter per type according to compareFilters\n// Items in the array that is passed first to unionWith have higher priority\n// CrudFilter items with undefined values are necessary to signify no filter\n// After union, don't keep CrudFilter items with undefined value in the result\n// Items in the arrays with higher priority are put at the end.\nexport const unionFilters = (\n permanentFilter: 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","/*\n * Returns first value that is not undefined.\n * @internal This is an internal helper function. Please do not use externally.\n */\nexport const pickNotDeprecated = <T extends unknown[]>(\n ...args: T\n): T[never] => {\n return args.find((arg) => typeof arg !== \"undefined\");\n};\n","import { IQueryKeys } from \"src/interfaces\";\nimport { QueryKey } from \"@tanstack/react-query\";\n\nimport { MetaQuery } from \"src/interfaces\";\nimport { pickNotDeprecated } from \"../pickNotDeprecated\";\n\nexport const queryKeys = (\n resource?: string,\n dataProviderName?: string,\n meta?: MetaQuery,\n /**\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery | 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 {\n ...config,\n ...(pickNotDeprecated(meta, metaData) || {}),\n } as QueryKey,\n ],\n many: (ids) =>\n [\n ...keys.resourceAll,\n \"getMany\",\n (ids && ids.map(String)) as QueryKey,\n { ...(pickNotDeprecated(meta, metaData) || {}) } as QueryKey,\n ].filter((item) => item !== undefined),\n detail: (id) => [\n ...keys.resourceAll,\n \"detail\",\n id?.toString(),\n { ...(pickNotDeprecated(meta, 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","/**\n * Check if a segment is a parameter. (e.g. :id)\n */\nexport const isParameter = (segment: string) => {\n return segment.startsWith(\":\");\n};\n","/**\n * Split a path to segments.\n */\nexport const splitToSegments = (path: string) => {\n const segments = path.split(\"/\").filter((segment) => segment !== \"\");\n return segments;\n};\n","import { splitToSegments } from \"./split-to-segments\";\n\n/**\n * Checks if the both routes have the same number of segments.\n */\nexport const isSegmentCountsSame = (route: string, resourceRoute: string) => {\n const routeSegments = splitToSegments(route);\n const resourceRouteSegments = splitToSegments(resourceRoute);\n\n return routeSegments.length === resourceRouteSegments.length;\n};\n","/**\n * Remove leading and trailing slashes from a route.\n */\nexport const removeLeadingTrailingSlashes = (route: string) => {\n return route.replace(/^\\/|\\/$/g, \"\");\n};\n","import { isParameter } from \"./is-parameter\";\nimport { isSegmentCountsSame } from \"./is-segment-counts-same\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\nimport { splitToSegments } from \"./split-to-segments\";\n\n/**\n * This function if the route and resourceRoute match by segments.\n * - First, trailing and leading slashes are removed\n * - Then, the route and resourceRoute are split to segments and checked if they have the same number of segments\n * - Then, each segment is checked if it is a parameter or if it matches the resourceRoute segment\n * - If all segments match, the function returns true, otherwise false\n */\nexport const checkBySegments = (route: string, resourceRoute: string) => {\n const stdRoute = removeLeadingTrailingSlashes(route);\n const stdResourceRoute = removeLeadingTrailingSlashes(resourceRoute);\n // we need to check if the route and resourceRoute have the same number of segments\n // if not, we can't match them\n if (!isSegmentCountsSame(stdRoute, stdResourceRoute)) {\n return false;\n }\n\n const routeSegments = splitToSegments(stdRoute);\n const resourceRouteSegments = splitToSegments(stdResourceRoute);\n\n return resourceRouteSegments.every((segment, index) => {\n return isParameter(segment) || segment === routeSegments[index];\n });\n};\n","import { Action } from \"src/interfaces\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\n\n/**\n * This helper function returns the default path for a given action and resource.\n * It also applies the parentPrefix if provided.\n * This is used by the legacy router and the new router if the resource doesn't provide a custom path.\n */\nexport const getDefaultActionPath = (\n resourceName: string,\n action: Action,\n parentPrefix?: string,\n): string => {\n const cleanParentPrefix = removeLeadingTrailingSlashes(parentPrefix || \"\");\n\n let path = `${cleanParentPrefix}${\n cleanParentPrefix ? \"/\" : \"\"\n }${resourceName}`;\n\n if (action === \"list\") {\n path = `${path}`;\n } else if (action === \"create\") {\n path = `${path}/create`;\n } else if (action === \"edit\") {\n path = `${path}/edit/:id`;\n } else if (action === \"show\") {\n path = `${path}/show/:id`;\n } else if (action === \"clone\") {\n path = `${path}/clone/:id`;\n }\n\n return `/${path.replace(/^\\//, \"\")}`;\n};\n","import { IResourceItem } from \"src/interfaces\";\nimport { pickNotDeprecated } from \"../pickNotDeprecated\";\n\n/**\n * Returns the parent resource of the given resource.\n * Works both with the deprecated `parentName` and the new `parent` property.\n */\nexport const getParentResource = (\n resource: IResourceItem,\n resources: IResourceItem[],\n): IResourceItem | undefined => {\n const parentName = pickNotDeprecated(\n resource.meta?.parent,\n resource.options?.parent,\n resource.parentName,\n );\n\n if (!parentName) {\n return undefined;\n }\n\n const parentResource = resources.find(\n (resource) => (resource.identifier ?? resource.name) === parentName,\n );\n\n /**\n * If the parent resource is not found, we return a resource object with the name of the parent resource.\n * Because we still want to have nesting and prefixing for the resource even if the parent is not explicitly defined.\n */\n return parentResource ?? { name: parentName };\n};\n","import { ResourceProps } from \"src/interfaces/bindings/resource\";\nimport { getParentResource } from \"./get-parent-resource\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\n\n/**\n * Returns the parent prefix for a resource\n * - If `legacy` is provided, the computation is based on the `route` option of the resource\n */\nexport const getParentPrefixForResource = (\n resource: ResourceProps,\n resources: ResourceProps[],\n /**\n * Uses legacy route if true (`options.route`)\n */\n legacy?: boolean,\n): string | undefined => {\n const parents: ResourceProps[] = [];\n\n let parent = getParentResource(resource, resources);\n\n while (parent) {\n parents.push(parent);\n parent = getParentResource(parent, resources);\n }\n\n if (parents.length === 0) {\n return undefined;\n }\n\n return `/${parents\n .reverse()\n .map((parent) => {\n const v = legacy\n ? parent.options?.route ?? parent.name\n : parent.name;\n return removeLeadingTrailingSlashes(v);\n })\n .join(\"/\")}`;\n};\n","import { Action, IResourceItem } from \"src/interfaces\";\nimport { getDefaultActionPath } from \"./get-default-action-path\";\nimport { getParentPrefixForResource } from \"./get-parent-prefix-for-resource\";\n\nexport type ResourceActionRoute = {\n action: Action;\n resource: IResourceItem;\n route: string;\n};\n\n/**\n * This function returns all the routes for available actions for a resource.\n * - If the action is a function, it means we're fallbacking to default path for the action\n * - If the action is a string, it means we don't have the component, but we have the route\n * - If the action is an object, it means we have the component and the route\n * - It will return an array of objects with the action, the resource and the route\n */\nexport const getActionRoutesFromResource = (\n resource: IResourceItem,\n resources: IResourceItem[],\n /**\n * Uses legacy route if true (`options.route`)\n */\n legacy?: boolean,\n) => {\n const actions: ResourceActionRoute[] = [];\n\n const actionList: Action[] = [\"list\", \"show\", \"edit\", \"create\", \"clone\"];\n\n const parentPrefix = getParentPrefixForResource(\n resource,\n resources,\n legacy,\n );\n\n actionList.forEach((action) => {\n const item =\n legacy && action === \"clone\" ? resource.create : resource[action];\n\n let route: string | undefined = undefined;\n\n if (typeof item === \"function\" || legacy) {\n // means we're fallbacking to default path for the action\n route = getDefaultActionPath(\n legacy\n ? resource.meta?.route ??\n resource.options?.route ??\n resource.name\n : resource.name,\n action,\n legacy ? parentPrefix : undefined,\n );\n } else if (typeof item === \"string\") {\n // means we don't have the component, but we have the route\n route = item;\n } else if (typeof item === \"object\") {\n // means we have the component and the route\n route = item.path;\n }\n\n if (route) {\n actions.push({\n action,\n resource,\n route: `/${route.replace(/^\\//, \"\")}`,\n });\n }\n });\n\n return actions;\n};\n","import { ResourceActionRoute } from \"./get-action-routes-from-resource\";\nimport { isParameter } from \"./is-parameter\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\nimport { splitToSegments } from \"./split-to-segments\";\n\n/**\n * Picks the most eligible route from the given matched routes.\n * - If there's only one route, it returns it.\n * - If there's more than one route, it picks the best non-greedy match.\n */\nexport const pickMatchedRoute = (\n routes: ResourceActionRoute[],\n): ResourceActionRoute | undefined => {\n // these routes are all matched, we should pick the least parametrized one\n\n // no routes, no match\n if (routes.length === 0) {\n return undefined;\n }\n\n // no need to calculate the route segments if there's only one route\n if (routes.length === 1) {\n return routes[0];\n }\n\n // remove trailing and leading slashes\n // split them to segments\n const sanitizedRoutes = routes.map((route) => ({\n ...route,\n splitted: splitToSegments(removeLeadingTrailingSlashes(route.route)),\n }));\n\n // at this point, before calling this function, we already checked for segment lenghts and expect all of them to be the same\n const segmentsCount = sanitizedRoutes[0]?.splitted.length ?? 0;\n\n let eligibleRoutes: Array<(typeof sanitizedRoutes)[number]> = [\n ...sanitizedRoutes,\n ];\n\n // loop through the segments\n for (let i = 0; i < segmentsCount; i++) {\n const nonParametrizedRoutes = eligibleRoutes.filter(\n (route) => !isParameter(route.splitted[i]),\n );\n\n if (nonParametrizedRoutes.length === 0) {\n // keep the eligible routes as they are\n continue;\n }\n if (nonParametrizedRoutes.length === 1) {\n // no need to continue, we found the route\n eligibleRoutes = nonParametrizedRoutes;\n break;\n }\n\n // we have more than one non-parametrized route, we need to check the next segment\n eligibleRoutes = nonParametrizedRoutes;\n }\n\n return eligibleRoutes[0];\n};\n","import { Action, IResourceItem } from \"../../../interfaces\";\nimport { checkBySegments } from \"./check-by-segments\";\nimport { getActionRoutesFromResource } from \"./get-action-routes-from-resource\";\nimport { pickMatchedRoute } from \"./pick-matched-route\";\n\n/**\n * Match the resource from the route\n * - It will calculate all possible routes for resources and their actions\n * - It will check if the route matches any of the possible routes\n * - It will return the most eligible resource and action\n */\nexport const matchResourceFromRoute = (\n route: string,\n resources: IResourceItem[],\n): {\n found: boolean;\n resource?: IResourceItem;\n action?: Action;\n matchedRoute?: string;\n} => {\n const allActionRoutes = resources.flatMap((resource) => {\n return getActionRoutesFromResource(resource, resources);\n });\n\n const allFound = allActionRoutes.filter((actionRoute) => {\n return checkBySegments(route, actionRoute.route);\n });\n\n const mostEligible = pickMatchedRoute(allFound);\n\n return {\n found: !!mostEligible,\n resource: mostEligible?.resource,\n action: mostEligible?.action,\n matchedRoute: mostEligible?.route,\n };\n};\n","import { ResourceProps } from \"src/interfaces/bindings/resource\";\nimport { getParentPrefixForResource } from \"../router\";\nimport { pickNotDeprecated } from \"../pickNotDeprecated\";\n\n/**\n * generates route for the resource based on parents and custom routes\n * @deprecated this is a **legacy** function and works only with the old resource definition\n */\nexport const routeGenerator = (\n item: ResourceProps,\n resourcesFromProps: ResourceProps[],\n): string | undefined => {\n let route;\n\n const parentPrefix = getParentPrefixForResource(\n item,\n resourcesFromProps,\n true,\n );\n\n if (parentPrefix) {\n const meta = pickNotDeprecated(item.meta, item.options);\n route = `${parentPrefix}/${meta?.route ?? item.name}`;\n } else {\n route = item.options?.route ?? item.name;\n }\n\n return `/${route.replace(/^\\//, \"\")}`;\n};\n","import { pickNotDeprecated } from \"@definitions/helpers/pickNotDeprecated\";\nimport { IResourceItem, ITreeMenu, IMenuItem } from \"src/interfaces\";\n\n/**\n * @deprecated This helper is deprecated. Please use `createTree` instead.\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 =\n parent.route ??\n pickNotDeprecated(parent?.meta, parent.options)?.route ??\n \"\";\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 { Action, IRefineContextOptions, RedirectAction } from \"src/interfaces\";\n\ntype RedirectPageProps = {\n redirectFromProps?: RedirectAction;\n action: Action;\n redirectOptions: IRefineContextOptions[\"redirect\"];\n};\n\nexport const redirectPage = ({\n redirectFromProps,\n action,\n redirectOptions,\n}: RedirectPageProps): RedirectAction => {\n if (redirectFromProps || redirectFromProps === false) {\n return redirectFromProps;\n }\n\n switch (action) {\n case \"clone\":\n return redirectOptions.afterClone;\n case \"create\":\n return redirectOptions.afterCreate;\n case \"edit\":\n return redirectOptions.afterEdit;\n default:\n return false;\n }\n};\n","type EachResolve<TResolve, Response> = (\n result: TResolve,\n index: number,\n) => Response;\ntype EachReject<TReject, Response> = (\n error: TReject,\n index: number,\n) => Response;\n\nexport const sequentialPromises = async <\n TResolve = unknown,\n TReject = unknown,\n TResolveResponse = unknown,\n TRejectResponse = unknown,\n>(\n promises: (() => Promise<TResolve>)[],\n onEachResolve: EachResolve<TResolve, TResolveResponse>,\n onEachReject: EachReject<TReject, TRejectResponse>,\n): Promise<(TResolveResponse | TRejectResponse)[]> => {\n const results = [];\n // @ts-expect-error Remove this when we enable `downLevelIterations`\n for (const [index, promise] of promises.entries()) {\n try {\n const result = await promise();\n\n results.push(onEachResolve(result, index));\n } catch (error) {\n results.push(onEachReject(error as TReject, index));\n }\n }\n return results;\n};\n","import { IResourceItem } from \"src/interfaces/bindings/resource\";\nimport { removeLeadingTrailingSlashes } from \"../router/remove-leading-trailing-slashes\";\n\n/**\n * Picks the resource based on the provided identifier.\n * Identifier fallbacks to `name` if `identifier` is not explicitly provided to the resource.\n * If legacy is true, then resource is matched by `route` first and then by `name`.\n */\nexport const pickResource = (\n identifier?: string,\n resources: IResourceItem[] = [],\n /**\n * If true, the identifier will be checked for `route` and `name` properties\n */\n legacy = false,\n): IResourceItem | undefined => {\n if (!identifier) {\n return undefined;\n }\n\n if (legacy) {\n const resourceByRoute = resources.find(\n (r) =>\n removeLeadingTrailingSlashes(r.route ?? \"\") ===\n removeLeadingTrailingSlashes(identifier),\n );\n\n const resource = resourceByRoute\n ? resourceByRoute\n : resources.find((r) => r.name === identifier);\n\n return resource;\n }\n\n const resource = resources.find(\n (r) => (r.identifier ?? r.name) === identifier,\n );\n\n return resource;\n};\n","import { IResourceItem } from \"src/interfaces/bindings/resource\";\nimport { pickResource } from \"../pick-resource\";\nimport { pickNotDeprecated } from \"../pickNotDeprecated\";\n\n/**\n * Picks the data provider name based on the provided name or fallbacks to resource definition, or `default`.\n */\nexport const pickDataProvider = (\n resourceName?: string,\n dataProviderName?: string,\n resources?: IResourceItem[],\n) => {\n if (dataProviderName) {\n return dataProviderName;\n }\n\n /**\n * In this helper, we don't do `route` based matching therefore there's no need to check for `legacy` behaviors.\n */\n const resource = pickResource(resourceName, resources);\n\n const meta = pickNotDeprecated(resource?.meta, resource?.options);\n\n if (meta?.dataProviderName) {\n return meta.dataProviderName;\n }\n\n return \"default\";\n};\n","export const handleMultiple = async <TData = unknown>(\n promises: Promise<{ data: TData }>[],\n): Promise<{ data: TData[] }> => {\n return {\n data: (await Promise.all(promises)).map((res) => res.data),\n };\n};\n","import { 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 IResourceItem,\n ResourceProps,\n} from \"../../../interfaces/bindings/resource\";\n\nimport { routeGenerator } from \"../routeGenerator\";\n\n/**\n * For the legacy definition of resources, we did a basic transformation for provided resources\n * - This is meant to provide an easier way to access properties.\n * - In the new definition, we don't need to do transformations and properties can be accessed via helpers or manually.\n * This is kept for backward compability\n */\nexport const legacyResourceTransform = (resources: ResourceProps[]) => {\n const _resources: IResourceItem[] = [];\n\n resources?.forEach((resource) => {\n _resources.push({\n ...resource,\n label: resource.meta?.label ?? resource.options?.label,\n route: routeGenerator(resource, resources),\n canCreate: !!resource.create,\n canEdit: !!resource.edit,\n canShow: !!resource.show,\n canDelete: resource.canDelete,\n });\n });\n\n return _resources;\n};\n","import { splitToSegments } from \"./split-to-segments\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\nimport { isParameter } from \"./is-parameter\";\n\n/**\n * Picks the route parameters from the given route.\n * (e.g. /users/:id/posts/:postId => ['id', 'postId'])\n */\nexport const pickRouteParams = (route: string) => {\n const segments = splitToSegments(removeLeadingTrailingSlashes(route));\n\n return segments.flatMap((s) => {\n if (isParameter(s)) {\n return [s.slice(1)];\n }\n\n return [];\n });\n};\n","import { MetaDataQuery, ParseResponse } from \"../../../interfaces\";\n\n/**\n * Prepares the route params by checking the existing params and meta data.\n * Meta data is prioritized over params.\n * Params are prioritized over predetermined id, action and resource.\n * This means, we can use `meta` for user supplied params (both manually or from the query string)\n */\nexport const prepareRouteParams = <\n TRouteParams extends Record<\n string,\n string | number | undefined | Symbol\n > = Record<string, string | number | undefined | Symbol>,\n>(\n routeParams: (keyof TRouteParams)[],\n params: ParseResponse = {},\n meta: MetaDataQuery = {},\n): Partial<TRouteParams> => {\n // meta is prioritized over params\n return routeParams.reduce((acc, key) => {\n const value =\n meta[key as string] ||\n params.params?.[key as string] ||\n (key === \"id\" ? params.id : undefined) ||\n (key === \"action\" ? params.action : undefined) ||\n (key === \"resource\" ? params.resource : undefined);\n if (typeof value !== \"undefined\") {\n acc[key] = value;\n }\n return acc;\n }, {} as Partial<TRouteParams>);\n};\n","import { MetaDataQuery, ParseResponse } from \"../../../interfaces\";\n\nimport { pickRouteParams } from \"./pick-route-params\";\nimport { prepareRouteParams } from \"./prepare-route-params\";\n\n/**\n * This function will compose a route with the given params and meta.\n * - A route can have parameters like (eg: /users/:id)\n * - First we pick the route params from the route (eg: [id])\n * - Then we prepare the route params with the given params and meta (eg: { id: 1 })\n * - Then we replace the route params with the prepared route params (eg: /users/1)\n */\nexport const composeRoute = (\n designatedRoute: string,\n params: ParseResponse = {},\n meta: MetaDataQuery = {},\n): string => {\n // pickRouteParams (from the route)\n const routeParams = pickRouteParams(designatedRoute);\n // prepareRouteParams (from route params, params and meta)\n const preparedRouteParams = prepareRouteParams(routeParams, params, meta);\n // replace route params with prepared route params\n return designatedRoute.replace(/:([^\\/]+)/g, (match, key) => {\n const fromParams = preparedRouteParams[key];\n if (typeof fromParams !== \"undefined\") {\n return `${fromParams}`;\n }\n return match;\n });\n};\n","import { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\n\n/**\n * @returns authProvider or legacyAuthProvider if provided, otherwise null\n * @internal\n * NOTE: Will be removed in v5\n */\nexport const useActiveAuthProvider = () => {\n const legacyAuthProvider = useLegacyAuthContext();\n const authProvider = useAuthBindingsContext();\n\n if (authProvider.isProvided) {\n return { isLegacy: false, ...authProvider };\n }\n\n if (legacyAuthProvider.isProvided) {\n // legacyAuthProvider interface is different from authProvider interface\n // we need to convert it to authProvider interface for simple usage\n // in the future, we will remove legacyAuthProvider\n return {\n isLegacy: true,\n ...legacyAuthProvider,\n check: legacyAuthProvider.checkAuth,\n onError: legacyAuthProvider.checkError,\n getIdentity: legacyAuthProvider.getUserIdentity,\n };\n }\n\n return null;\n};\n","import { Pagination } from \"../../../interfaces\";\nimport { pickNotDeprecated } from \"../pickNotDeprecated\";\n\ntype HandlePaginationParamsProps = {\n hasPagination?: boolean;\n pagination?: Pagination;\n configPagination?: Pagination;\n};\n\nexport const handlePaginationParams = ({\n hasPagination,\n pagination,\n configPagination,\n}: HandlePaginationParamsProps = {}): Required<Pagination> => {\n const hasPaginationString = hasPagination === false ? \"off\" : \"server\";\n const mode = pagination?.mode ?? hasPaginationString;\n\n const current =\n pickNotDeprecated(pagination?.current, configPagination?.current) ?? 1;\n\n const pageSize =\n pickNotDeprecated(pagination?.pageSize, configPagination?.pageSize) ??\n 10;\n\n return {\n current,\n pageSize,\n mode,\n };\n};\n","import { useState, useEffect } from \"react\";\n\nexport const useMediaQuery = (query: string) => {\n const [matches, setMatches] = useState(false);\n\n useEffect(() => {\n const media = window.matchMedia(query);\n if (media.matches !== matches) {\n setMatches(media.matches);\n }\n const listener = () => setMatches(media.matches);\n window.addEventListener(\"resize\", listener);\n return () => window.removeEventListener(\"resize\", listener);\n }, [matches, query]);\n\n return matches;\n};\n","import {\n QueryObserverResult,\n useQuery,\n UseQueryOptions,\n} from \"@tanstack/react-query\";\n\nimport {\n GetOneResponse,\n HttpError,\n BaseRecord,\n BaseKey,\n LiveModeProps,\n SuccessErrorNotification,\n MetaQuery,\n Prettify,\n} from \"../../interfaces\";\nimport {\n useResource,\n useTranslate,\n useResourceSubscription,\n useHandleNotification,\n useDataProvider,\n useOnError,\n} from \"@hooks\";\nimport {\n queryKeys,\n pickDataProvider,\n pickNotDeprecated,\n useActiveAuthProvider,\n} 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 meta?: MetaQuery;\n /**\n * Meta data query for `dataProvider`,\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default `\"default\"``\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<\n GetOneResponse<TData>,\n TError,\n Prettify<{ id?: BaseKey } & MetaQuery>\n> &\n LiveModeProps;\n\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 meta,\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 pickNotDeprecated(meta, metaData),\n pickNotDeprecated(meta, metaData),\n );\n\n const { getOne } = dataProvider(\n pickDataProvider(resource, dataProviderName, resources),\n );\n const translate = useTranslate();\n const authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n subscriptionType: \"useOne\",\n ...liveParams,\n },\n enabled:\n typeof queryOptions?.enabled !== \"undefined\"\n ? queryOptions?.enabled\n : typeof resource !== \"undefined\" && typeof id !== \"undefined\",\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: resource!,\n id: id!,\n meta: {\n ...(pickNotDeprecated(meta, metaData) || {}),\n queryContext: {\n queryKey,\n pageParam,\n signal,\n },\n },\n metaData: {\n ...(pickNotDeprecated(meta, metaData) || {}),\n queryContext: {\n queryKey,\n pageParam,\n signal,\n },\n },\n }),\n {\n ...queryOptions,\n enabled:\n typeof queryOptions?.enabled !== \"undefined\"\n ? queryOptions?.enabled\n : typeof id !== \"undefined\",\n onSuccess: (data) => {\n queryOptions?.onSuccess?.(data);\n\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(\n data,\n {\n id,\n ...(pickNotDeprecated(meta, metaData) || {}),\n },\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(\n err,\n {\n id,\n ...(pickNotDeprecated(meta, metaData) || {}),\n },\n resource,\n )\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 LiveModeProps,\n SuccessErrorNotification,\n MetaQuery,\n} from \"../../interfaces\";\nimport {\n useResource,\n useTranslate,\n useResourceSubscription,\n useHandleNotification,\n useDataProvider,\n useOnError,\n} from \"@hooks\";\nimport {\n queryKeys,\n pickDataProvider,\n handleMultiple,\n pickNotDeprecated,\n useActiveAuthProvider,\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 meta?: MetaQuery;\n /**\n * Metadata query for `dataProvider`,\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default \"default\"\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<GetManyResponse<TData>, TError, BaseKey[]> &\n LiveModeProps;\n\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 meta,\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 pickNotDeprecated(meta, metaData),\n pickNotDeprecated(meta, metaData),\n );\n\n const { getMany, getOne } = dataProvider(\n pickDataProvider(resource, dataProviderName, resources),\n );\n\n const translate = useTranslate();\n const authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 ...(pickNotDeprecated(meta, 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 ...(pickNotDeprecated(meta, 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 MetaQuery,\n PreviousQuery,\n GetListResponse,\n IQueryKeys,\n} from \"../../interfaces\";\nimport pluralize from \"pluralize\";\nimport {\n useResource,\n useMutationMode,\n useCancelNotification,\n useTranslate,\n usePublish,\n useHandleNotification,\n useDataProvider,\n useLog,\n useInvalidate,\n useOnError,\n} from \"@hooks\";\nimport {\n queryKeys,\n pickDataProvider,\n pickNotDeprecated,\n useActiveAuthProvider,\n} from \"@definitions/helpers\";\n\nexport type UpdateParams<TData, TError, TVariables> = {\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * id for mutation function\n */\n id: BaseKey;\n /**\n * [Determines when mutations are executed](/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 meta?: MetaQuery;\n /**\n * Metadata query for dataProvider\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default \"default\"\n */\n dataProviderName?: string;\n /**\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 UpdateResponse<TData>,\n TError,\n { id: BaseKey; values: TVariables }\n>;\n\nexport type UseUpdateReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n UpdateResponse<TData>,\n TError,\n UpdateParams<TData, TError, TVariables>,\n UpdateContext<TData>\n>;\n\nexport type UseUpdateProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n UpdateResponse<TData>,\n TError,\n UpdateParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n \"mutationFn\" | \"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 authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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<TData, TError, TVariables>,\n UpdateContext<TData>\n >(\n ({\n id,\n values,\n resource,\n mutationMode,\n undoableTimeout,\n onCancel,\n meta,\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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 meta,\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 pickNotDeprecated(meta, 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 {\n pickDataProvider,\n pickNotDeprecated,\n useActiveAuthProvider,\n} from \"@definitions/helpers\";\n\nimport {\n CreateResponse,\n BaseRecord,\n HttpError,\n SuccessErrorNotification,\n MetaQuery,\n IQueryKeys,\n} from \"../../interfaces\";\nimport {\n useResource,\n useTranslate,\n usePublish,\n useHandleNotification,\n useDataProvider,\n useLog,\n useInvalidate,\n useOnError,\n} from \"@hooks\";\n\ntype useCreateParams<TData, TError, TVariables> = {\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * Values for mutation function\n */\n values: TVariables;\n /**\n * Meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Meta data for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n /**\n * You can use it to manage the invalidations that will occur at the end of the mutation.\n */\n invalidates?: Array<keyof IQueryKeys>;\n} & SuccessErrorNotification<CreateResponse<TData>, TError, TVariables>;\n\nexport type UseCreateReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n CreateResponse<TData>,\n TError,\n useCreateParams<TData, TError, TVariables>,\n unknown\n>;\n\nexport type UseCreateProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n CreateResponse<TData>,\n TError,\n useCreateParams<TData, TError, TVariables>,\n unknown\n >,\n \"mutationFn\" | \"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 authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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<TData, TError, TVariables>,\n unknown\n >(\n ({\n resource,\n values,\n meta,\n metaData,\n dataProviderName,\n }: useCreateParams<TData, TError, TVariables>) => {\n return dataProvider(\n pickDataProvider(resource, dataProviderName, resources),\n ).create<TData, TVariables>({\n resource,\n variables: values,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n });\n },\n {\n onSuccess: (\n data,\n {\n resource,\n successNotification: successNotificationFromProp,\n dataProviderName,\n invalidates = [\"list\", \"many\"],\n values,\n meta,\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 pickNotDeprecated(meta, 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 usePublish,\n useHandleNotification,\n useDataProvider,\n useLog,\n useInvalidate,\n useOnError,\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 PreviousQuery,\n IQueryKeys,\n MetaQuery,\n} from \"../../interfaces\";\nimport {\n queryKeys,\n pickDataProvider,\n pickNotDeprecated,\n useActiveAuthProvider,\n} from \"@definitions/helpers\";\n\nexport type DeleteParams<TData, TError, TVariables> = {\n id: BaseKey;\n resource: string;\n mutationMode?: MutationMode;\n undoableTimeout?: number;\n onCancel?: (cancelMutation: () => void) => void;\n meta?: MetaQuery;\n /**\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n dataProviderName?: string;\n invalidates?: Array<keyof IQueryKeys>;\n values?: TVariables;\n} & SuccessErrorNotification<DeleteOneResponse<TData>, TError, BaseKey>;\n\nexport type UseDeleteReturnType<\n TData extends BaseRecord = BaseRecord,\n TError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n DeleteOneResponse<TData>,\n TError,\n DeleteParams<TData, TError, 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<TData, TError, 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 authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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<TData, TError, TVariables>,\n DeleteContext<TData>\n >(\n ({\n id,\n mutationMode,\n undoableTimeout,\n resource,\n onCancel,\n meta,\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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 meta: pickNotDeprecated(meta, 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 meta,\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 pickNotDeprecated(meta, 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 MetaQuery,\n IQueryKeys,\n} from \"../../interfaces\";\nimport {\n useResource,\n useTranslate,\n usePublish,\n useHandleNotification,\n useDataProvider,\n useInvalidate,\n useLog,\n} from \"@hooks\";\nimport {\n handleMultiple,\n pickDataProvider,\n pickNotDeprecated,\n} from \"@definitions\";\n\ntype useCreateManyParams<TData, TError, TVariables> = {\n resource: string;\n values: TVariables[];\n meta?: MetaQuery;\n metaData?: MetaQuery;\n dataProviderName?: string;\n invalidates?: Array<keyof IQueryKeys>;\n} & SuccessErrorNotification<CreateManyResponse<TData>, TError, TVariables[]>;\n\nexport type UseCreateManyReturnType<\n TData extends BaseRecord = BaseRecord,\n TError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n CreateManyResponse<TData>,\n TError,\n useCreateManyParams<TData, TError, TVariables>,\n unknown\n>;\n\nexport type UseCreateManyProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n CreateManyResponse<TData>,\n TError,\n useCreateManyParams<TData, TError, TVariables>\n >,\n \"mutationFn\" | \"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 const { log } = useLog();\n\n const mutation = useMutation<\n CreateManyResponse<TData>,\n TError,\n useCreateManyParams<TData, TError, TVariables>\n >(\n ({\n resource,\n values,\n meta,\n metaData,\n dataProviderName,\n }: useCreateManyParams<TData, TError, 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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n });\n } else {\n return handleMultiple(\n values.map((val) =>\n selectedDataProvider.create<TData, TVariables>({\n resource,\n variables: val,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 meta,\n metaData,\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 const { fields, operation, variables, ...rest } =\n pickNotDeprecated(meta, metaData) || {};\n\n log?.mutate({\n action: \"createMany\",\n resource,\n data: values,\n meta: {\n dataProviderName: pickDataProvider(\n resource,\n dataProviderName,\n resources,\n ),\n ids,\n ...rest,\n },\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 useMutationMode,\n useTranslate,\n usePublish,\n useHandleNotification,\n useDataProvider,\n useInvalidate,\n useLog,\n useOnError,\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 MetaQuery,\n GetListResponse,\n IQueryKeys,\n} from \"../../interfaces\";\nimport {\n queryKeys,\n pickDataProvider,\n handleMultiple,\n pickNotDeprecated,\n useActiveAuthProvider,\n} from \"@definitions/helpers\";\n\ntype UpdateManyParams<TData, TError, TVariables> = {\n ids: BaseKey[];\n resource: string;\n mutationMode?: MutationMode;\n undoableTimeout?: number;\n onCancel?: (cancelMutation: () => void) => void;\n values: TVariables;\n /**\n * meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * meta data for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n dataProviderName?: string;\n invalidates?: Array<keyof IQueryKeys>;\n} & SuccessErrorNotification<\n UpdateManyResponse<TData>,\n TError,\n { ids: BaseKey[]; values: TVariables }\n>;\n\ntype UseUpdateManyReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n>;\n\nexport type UseUpdateManyProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n \"mutationFn\" | \"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 authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n const { notificationDispatch } = useCancelNotification();\n const publish = usePublish();\n const handleNotification = useHandleNotification();\n const invalidateStore = useInvalidate();\n const { log } = useLog();\n\n const mutation = useMutation<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >(\n ({\n ids,\n values,\n resource,\n onCancel,\n mutationMode,\n undoableTimeout,\n meta,\n metaData,\n dataProviderName,\n }: UpdateManyParams<TData, TError, 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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n });\n } else {\n return handleMultiple(\n ids.map((id) =>\n selectedDataProvider.update<TData, TVariables>({\n resource,\n id,\n variables: values,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 meta,\n metaData,\n }) => {\n const queryKey = queryKeys(\n resource,\n pickDataProvider(resource, dataProviderName, resources),\n pickNotDeprecated(meta, metaData),\n pickNotDeprecated(meta, 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 {\n ids,\n resource,\n meta,\n metaData,\n dataProviderName,\n successNotification,\n values,\n },\n context,\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 const previousData: any[] = [];\n if (context) {\n ids.forEach((id) => {\n const queryData = queryClient.getQueryData<\n UpdateManyResponse<TData>\n >(context.queryKey.detail(id));\n\n previousData.push(\n Object.keys(values || {}).reduce<any>(\n (acc, item: any) => {\n acc[item] = queryData?.data?.[item];\n return acc;\n },\n {},\n ),\n );\n });\n }\n\n const { fields, operation, variables, ...rest } =\n pickNotDeprecated(meta, metaData) || {};\n\n log?.mutate({\n action: \"updateMany\",\n resource,\n data: values,\n previousData,\n meta: {\n ids,\n dataProviderName: pickDataProvider(\n resource,\n dataProviderName,\n resources,\n ),\n ...rest,\n },\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 MetaQuery,\n IQueryKeys,\n} from \"../../interfaces\";\nimport {\n useResource,\n useTranslate,\n useMutationMode,\n useCancelNotification,\n usePublish,\n useHandleNotification,\n useDataProvider,\n useInvalidate,\n useLog,\n useOnError,\n} from \"@hooks\";\nimport { ActionTypes } from \"@contexts/undoableQueue\";\nimport {\n queryKeys,\n pickDataProvider,\n handleMultiple,\n pickNotDeprecated,\n useActiveAuthProvider,\n} from \"@definitions\";\n\nexport type DeleteManyParams<TData, TError, TVariables> = {\n ids: BaseKey[];\n resource: string;\n mutationMode?: MutationMode;\n undoableTimeout?: number;\n onCancel?: (cancelMutation: () => void) => void;\n meta?: MetaQuery;\n /**\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n dataProviderName?: string;\n invalidates?: Array<keyof IQueryKeys>;\n values?: TVariables;\n} & SuccessErrorNotification<DeleteManyResponse<TData>, TError, BaseKey[]>;\n\nexport type UseDeleteManyReturnType<\n TData extends BaseRecord = BaseRecord,\n TError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n DeleteManyResponse<TData>,\n TError,\n DeleteManyParams<TData, TError, 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<TData, TError, 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 authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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 const { log } = useLog();\n\n const { resources } = useResource();\n const queryClient = useQueryClient();\n\n const mutation = useMutation<\n DeleteManyResponse<TData>,\n TError,\n DeleteManyParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >(\n ({\n resource,\n ids,\n mutationMode,\n undoableTimeout,\n onCancel,\n meta,\n metaData,\n dataProviderName,\n values,\n }: DeleteManyParams<TData, TError, 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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n variables: values,\n });\n } else {\n return handleMultiple(\n ids.map((id) =>\n selectedDataProvider.deleteOne<TData, TVariables>({\n resource,\n id,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 {\n ids,\n resource,\n meta,\n metaData,\n dataProviderName,\n successNotification,\n },\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 const { fields, operation, variables, ...rest } =\n pickNotDeprecated(meta, metaData) || {};\n\n log?.mutate({\n action: \"deleteMany\",\n resource,\n meta: {\n ids,\n dataProviderName: pickDataProvider(\n resource,\n dataProviderName,\n resources,\n ),\n ...rest,\n },\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 { pickNotDeprecated, useActiveAuthProvider } from \"@definitions/helpers\";\nimport {\n useDataProvider,\n useHandleNotification,\n useOnError,\n useTranslate,\n} from \"@hooks\";\nimport {\n BaseRecord,\n CrudFilters,\n CrudSorting,\n CustomResponse,\n HttpError,\n MetaQuery,\n Prettify,\n SuccessErrorNotification,\n} from \"../../interfaces\";\n\ninterface UseCustomConfig<TQuery, TPayload> {\n /**\n * @deprecated `sort` is deprecated, use `sorters` instead.\n */\n sort?: CrudSorting;\n sorters?: 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 sorters 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 * meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * meta data for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<\n CustomResponse<TData>,\n TError,\n Prettify<UseCustomConfig<TQuery, TPayload> & MetaQuery>\n>;\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 meta,\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 authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n const translate = useTranslate();\n const handleNotification = useHandleNotification();\n\n if (custom) {\n const queryResponse = useQuery<CustomResponse<TData>, TError>({\n queryKey: [\n dataProviderName,\n \"custom\",\n method,\n url,\n { ...config, ...(pickNotDeprecated(meta, metaData) || {}) },\n ],\n queryFn: ({ queryKey, pageParam, signal }) =>\n custom<TData>({\n url,\n method,\n ...config,\n metaData: {\n ...(pickNotDeprecated(meta, metaData) || {}),\n queryContext: {\n queryKey,\n pageParam,\n signal,\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 ...(pickNotDeprecated(meta, 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, {\n ...config,\n ...(pickNotDeprecated(meta, metaData) || {}),\n })\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 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 useDataProvider,\n useHandleNotification,\n useTranslate,\n useOnError,\n} from \"@hooks\";\nimport {\n CreateResponse,\n BaseRecord,\n HttpError,\n SuccessErrorNotification,\n MetaQuery,\n Prettify,\n} from \"../../interfaces\";\nimport { pickNotDeprecated, useActiveAuthProvider } from \"@definitions/helpers\";\n\ninterface UseCustomMutationConfig {\n headers?: {};\n}\n\ntype useCustomMutationParams<TData, TError, TVariables> = {\n url: string;\n method: \"post\" | \"put\" | \"patch\" | \"delete\";\n values: TVariables;\n /**\n * Meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Meta data for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n dataProviderName?: string;\n config?: UseCustomMutationConfig;\n} & SuccessErrorNotification<\n CreateResponse<TData>,\n TError,\n Prettify<UseCustomMutationConfig & MetaQuery>\n>;\n\nexport type UseCustomMutationReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, TVariables>,\n unknown\n>;\n\nexport type UseCustomMutationProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, 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 authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n const handleNotification = useHandleNotification();\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n\n const mutation = useMutation<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, TVariables>,\n unknown\n >(\n ({\n url,\n method,\n values,\n meta,\n metaData,\n dataProviderName,\n config,\n }: useCustomMutationParams<TData, TError, TVariables>) => {\n const { custom } = dataProvider(dataProviderName);\n\n if (custom) {\n return custom<TData>({\n url,\n method,\n payload: values,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 meta,\n metaData,\n },\n ) => {\n const notificationConfig =\n typeof successNotificationFromProp === \"function\"\n ? successNotificationFromProp(data, {\n ...config,\n ...(pickNotDeprecated(meta, metaData) || {}),\n })\n : successNotificationFromProp;\n\n handleNotification(notificationConfig);\n },\n onError: (\n err: TError,\n {\n errorNotification: errorNotificationFromProp,\n method,\n config,\n meta,\n metaData,\n },\n ) => {\n checkError(err);\n\n const notificationConfig =\n typeof errorNotificationFromProp === \"function\"\n ? errorNotificationFromProp(err, {\n ...config,\n ...(pickNotDeprecated(meta, 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 InfiniteData,\n} from \"@tanstack/react-query\";\nimport {\n CrudFilters,\n Pagination,\n BaseRecord,\n HttpError,\n CrudSorting,\n MetaQuery,\n SuccessErrorNotification,\n LiveModeProps,\n GetListResponse,\n Prettify,\n} from \"../../interfaces\";\nimport {\n useResource,\n useHandleNotification,\n useResourceSubscription,\n useTranslate,\n useDataProvider,\n useOnError,\n} from \"@hooks\";\nimport {\n queryKeys,\n pickDataProvider,\n getNextPageParam,\n getPreviousPageParam,\n pickNotDeprecated,\n useActiveAuthProvider,\n handlePaginationParams,\n} from \"@definitions/helpers\";\n\nexport interface UseInfiniteListConfig {\n pagination?: Pagination;\n hasPagination?: boolean;\n sort?: CrudSorting;\n filters?: CrudFilters;\n}\n\ntype BaseInfiniteListProps = {\n /**\n * Metadata query for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Metadata query for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * Configuration for pagination, sorting and filtering\n * @type [`useInfiniteListConfig`](/docs/api-reference/core/hooks/data/useInfiniteList/#config-parameters)\n * @deprecated `config` property is deprecated. Use `pagination`, `hasPagination`, `sorters` and `filters` instead.\n */\n config?: UseInfiniteListConfig;\n /**\n * Pagination properties\n */\n pagination?: Pagination;\n /**\n * Whether to use server-side pagination or not\n * @deprecated `hasPagination` property is deprecated. Use `pagination.mode` instead.\n */\n hasPagination?: boolean;\n /**\n * Sorter parameters\n */\n sorters?: CrudSorting;\n /**\n * Filter parameters\n */\n filters?: CrudFilters;\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 UseInfiniteListProps<TData, TError> = {\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * Tanstack Query's [useInfiniteQuery](https://tanstack.com/query/v4/docs/react/reference/useInfiniteQuery) options\n */\n queryOptions?: UseInfiniteQueryOptions<GetListResponse<TData>, TError>;\n} & BaseInfiniteListProps &\n SuccessErrorNotification<\n InfiniteData<GetListResponse<TData>>,\n TError,\n Prettify<BaseInfiniteListProps>\n > &\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 filters,\n hasPagination,\n pagination,\n sorters,\n queryOptions,\n successNotification,\n errorNotification,\n meta,\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 translate = useTranslate();\n const authProvider = useActiveAuthProvider();\n const { mutate: checkError } = useOnError({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n const handleNotification = useHandleNotification();\n\n const pickedDataProvider = pickDataProvider(\n resource,\n dataProviderName,\n resources,\n );\n const preferredMeta = pickNotDeprecated(meta, metaData);\n const prefferedFilters = pickNotDeprecated(filters, config?.filters);\n const prefferedSorters = pickNotDeprecated(sorters, config?.sort);\n const prefferedHasPagination = pickNotDeprecated(\n hasPagination,\n config?.hasPagination,\n );\n const prefferedPagination = handlePaginationParams({\n pagination,\n configPagination: config?.pagination,\n hasPagination: prefferedHasPagination,\n });\n const isServerPagination = prefferedPagination.mode === \"server\";\n const notificationValues = {\n meta: preferredMeta,\n metaData: preferredMeta,\n filters: prefferedFilters,\n hasPagination: isServerPagination,\n pagination: prefferedPagination,\n sorters: prefferedSorters,\n config: {\n ...config,\n sort: prefferedSorters,\n },\n };\n\n const isEnabled =\n queryOptions?.enabled === undefined || queryOptions?.enabled === true;\n\n const queryKey = queryKeys(\n resource,\n pickedDataProvider,\n preferredMeta,\n preferredMeta,\n );\n\n const { getList } = dataProvider(pickedDataProvider);\n\n useResourceSubscription({\n resource,\n types: [\"*\"],\n params: {\n meta: preferredMeta,\n metaData: preferredMeta,\n pagination: prefferedPagination,\n hasPagination: isServerPagination,\n sort: prefferedSorters,\n sorters: prefferedSorters,\n filters: prefferedFilters,\n subscriptionType: \"useList\",\n ...liveParams,\n },\n channel: `resources/${resource}`,\n enabled: isEnabled,\n liveMode,\n onLiveEvent,\n });\n\n const queryResponse = useInfiniteQuery<GetListResponse<TData>, TError>(\n queryKey.list({\n filters: prefferedFilters,\n hasPagination: isServerPagination,\n ...(isServerPagination && {\n pagination: prefferedPagination,\n }),\n ...(sorters && {\n sorters,\n }),\n ...(config?.sort && {\n sort: config?.sort,\n }),\n }),\n ({ queryKey, pageParam, signal }) => {\n const paginationProperties = {\n ...prefferedPagination,\n current: pageParam,\n };\n\n return getList<TData>({\n resource,\n pagination: paginationProperties,\n hasPagination: isServerPagination,\n filters: prefferedFilters,\n sort: prefferedSorters,\n sorters: prefferedSorters,\n meta: {\n ...(preferredMeta || {}),\n queryContext: {\n queryKey,\n pageParam,\n signal,\n },\n },\n metaData: {\n ...(preferredMeta || {}),\n queryContext: {\n queryKey,\n pageParam,\n signal,\n },\n },\n }).then(({ data, total, ...rest }) => {\n return {\n data,\n total,\n pagination: paginationProperties,\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 notificationValues,\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, notificationValues, 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 MetaQuery,\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 meta?: MetaQuery;\n /**\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n pagination?: Pagination;\n /**\n * @deprecated `hasPagination` is deprecated, use `pagination.mode` instead.\n */\n hasPagination?: boolean;\n /**\n * @deprecated `sort` is deprecated. Use `sorters` instead.\n */\n sort?: CrudSorting;\n sorters?: 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 MetaQuery,\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 meta?: MetaQuery;\n /**\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n pagination?: Pagination;\n /**\n * @deprecated `hasPagination` is deprecated, use `pagination.mode` instead.\n */\n hasPagination?: boolean;\n /**\n * @deprecated `sort` is deprecated, use `sorters` instead.\n */\n sort?: CrudSorting;\n sorters?: 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 Action,\n BaseKey,\n IResourceItem,\n ResourceRouterParams,\n} from \"../../../interfaces\";\nimport { useRouterContext, useResourceWithRoute } from \"@hooks\";\nimport { useRouterType } from \"../../../contexts/router-picker\";\nimport { useParsed } from \"../../router/use-parsed\";\nimport { pickResource } from \"../../../definitions/helpers/pick-resource\";\n\nexport type UseResourceLegacyProps = {\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\n/**\n * Matches the resource by identifier.\n * If not provided, the resource from the route will be returned.\n * If your resource does not explicitly define an identifier, the resource name will be used.\n */\nexport type UseResourceParam = string | undefined;\n\ntype UseResourceReturnType = {\n resources: IResourceItem[];\n resource?: IResourceItem;\n /**\n * @deprecated Use `resource.name` instead when you need to get the resource name.\n */\n resourceName?: string;\n id?: BaseKey;\n action?: Action;\n};\n\ntype UseResourceReturnTypeWithResource = UseResourceReturnType & {\n resource: IResourceItem;\n};\n\n/**\n * @deprecated Use `useResource` with `identifier` property instead. (`identifier` does not check by route name in new router)\n */\nexport function useResource(\n props: UseResourceLegacyProps,\n): UseResourceReturnType;\nexport function useResource(): UseResourceReturnType;\nexport function useResource<TIdentifier = UseResourceParam>(\n identifier: TIdentifier,\n): TIdentifier extends NonNullable<UseResourceParam>\n ? UseResourceReturnTypeWithResource\n : UseResourceReturnType;\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 function useResource(\n args?: UseResourceLegacyProps | UseResourceParam,\n): UseResourceReturnType {\n const { resources } = useContext(ResourceContext);\n\n const routerType = useRouterType();\n\n const params = useParsed();\n\n const oldProps = {\n resourceName:\n args && typeof args !== \"string\" ? args.resourceName : args,\n resourceNameOrRouteName:\n args && typeof args !== \"string\"\n ? args.resourceNameOrRouteName\n : args,\n recordItemId:\n args && typeof args !== \"string\" ? args.recordItemId : undefined,\n };\n\n /**\n * Legacy Router - Start\n *\n * using `useParams` and `route` to match resource and get params.\n */\n const resourceWithRoute = useResourceWithRoute();\n\n const { useParams } = useRouterContext();\n\n const legacyParams = useParams<Partial<ResourceRouterParams>>();\n\n if (routerType === \"legacy\") {\n const resourceKeyToCheck = oldProps.resourceNameOrRouteName\n ? oldProps.resourceNameOrRouteName\n : legacyParams.resource;\n\n const legacyResource = resourceKeyToCheck\n ? resourceWithRoute(resourceKeyToCheck)\n : undefined;\n const legacyId = oldProps?.recordItemId ?? legacyParams.id;\n const legacyAction = legacyParams.action;\n const legacyResourceName =\n oldProps?.resourceName ?? legacyResource?.name;\n\n return {\n resources,\n resource: legacyResource,\n resourceName: legacyResourceName,\n id: legacyId,\n action: legacyAction,\n };\n }\n /** Legacy Router - End */\n\n /** New Router */\n let resource: IResourceItem | undefined = undefined;\n // we try to pick the resource from props first\n const identifier =\n typeof args === \"string\" ? args : oldProps?.resourceNameOrRouteName;\n if (identifier) {\n const pickedFromProps = pickResource(identifier, resources);\n if (pickedFromProps) {\n resource = pickedFromProps;\n } else {\n resource = {\n name: identifier as string,\n };\n }\n } else if (params?.resource) {\n resource = params.resource;\n }\n\n return {\n resources,\n resource,\n resourceName: resource?.name,\n id: params.id,\n action: params.action,\n };\n}\n","import React from \"react\";\n\nimport { IResourceContext } from \"./IResourceContext\";\nimport {\n IResourceItem,\n ResourceProps,\n} from \"../../interfaces/bindings/resource\";\nimport { useDeepMemo } from \"@hooks/deepMemo\";\nimport { legacyResourceTransform } from \"@definitions/helpers\";\n\nexport {\n IResourceItem,\n IResourceComponents,\n IResourceComponentsProps,\n IResourceContext,\n} from \"../../interfaces/bindings/resource\";\n\nexport const ResourceContext = React.createContext<IResourceContext>({\n resources: [],\n});\n\nexport const ResourceContextProvider: React.FC<\n React.PropsWithChildren<{ resources: ResourceProps[] }>\n> = ({ resources: providedResources, children }) => {\n const resources: IResourceItem[] = useDeepMemo(() => {\n return legacyResourceTransform(providedResources ?? []);\n }, [providedResources]);\n\n return (\n <ResourceContext.Provider value={{ resources }}>\n {children}\n </ResourceContext.Provider>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { useMemoized } from \"@hooks/memoized\";\n\n/**\n * Hook that memoizes the given dependency array and checks the consecutive calls with deep equality and returns the same value as the first call if dependencies are not changed.\n * @internal\n */\nexport const useDeepMemo = <T,>(\n fn: () => T,\n dependencies: React.DependencyList,\n): T => {\n const memoizedDependencies = useMemoized(dependencies);\n\n const value = useMemo(fn, memoizedDependencies);\n\n return value;\n};\n","import { useRef } from \"react\";\nimport isEqual from \"lodash/isEqual\";\n\n/**\n * Hook that memoizes the given value with deep equality.\n * @internal\n */\nexport const useMemoized = <T = unknown,>(value: T): T => {\n const ref = useRef(value);\n\n if (!isEqual(ref.current, value)) {\n ref.current = value;\n }\n\n return ref.current;\n};\n","import React from \"react\";\n\n/**\n * This context is used to determine which router to use.\n *\n * This is a temporary solution until we remove the legacy router.\n */\n\nexport const RouterPickerContext = React.createContext<\"legacy\" | \"new\">(\"new\");\n\nexport const RouterPickerProvider = RouterPickerContext.Provider;\n\n/**\n * This is a temporary hook to determine which router to use.\n * It will be removed once the legacy router is removed.\n * @internal This is an internal hook.\n */\nexport const useRouterType = () => {\n const value = React.useContext(RouterPickerContext);\n return value;\n};\n","import React from \"react\";\nimport { useParse } from \"../use-parse\";\n\nexport const useParsed = () => {\n const parse = useParse();\n\n const parsed = React.useMemo(() => parse(), [parse]);\n\n return parsed;\n};\n","import React, { createContext, PropsWithChildren } from \"react\";\nimport { RouterBindings } from \"src/interfaces\";\n\nconst defaultBindings = {};\n\nexport const RouterBindingsContext =\n createContext<RouterBindings>(defaultBindings);\n\nexport const RouterBindingsProvider: React.FC<\n PropsWithChildren<{ router?: RouterBindings }>\n> = ({ children, router }) => {\n return (\n <RouterBindingsContext.Provider value={router ?? defaultBindings}>\n {children}\n </RouterBindingsContext.Provider>\n );\n};\n","import { RouterBindingsContext } from \"@contexts/router\";\nimport React, { useContext } from \"react\";\nimport { ParseFunction } from \"src/interfaces\";\n\nexport const useParse = () => {\n const bindings = useContext(RouterBindingsContext);\n\n const useParse = React.useMemo(\n () =>\n bindings?.parse ??\n (() =>\n (() => {\n return {};\n }) as ParseFunction),\n [bindings?.parse],\n );\n\n const parse = useParse();\n\n return parse;\n};\n","import { useContext, useCallback } from \"react\";\nimport { ResourceContext } from \"@contexts/resource\";\nimport { IResourceItem } from \"../../../interfaces\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\n\nexport type UseResourceWithRouteReturnType = (route: string) => IResourceItem;\n\n/**\n * @deprecated Use `useResource` hook instead.\n * @internal This hook is for internal use only. And is kept for backward compatibility.\n */\nexport const useResourceWithRoute = (): UseResourceWithRouteReturnType => {\n const { resources } = useContext(ResourceContext);\n\n const resourceWithRoute = useCallback(\n (route: string) => {\n const picked = pickResource(route, resources, true);\n if (picked) {\n return picked;\n }\n return { name: route, route: route } as IResourceItem;\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 { useResource, useDataProvider } from \"@hooks\";\nimport {\n BaseRecord,\n MapDataFn,\n CrudSorting,\n CrudFilters,\n MetaQuery,\n} from \"../../interfaces\";\nimport {\n userFriendlyResourceName,\n pickDataProvider,\n pickNotDeprecated,\n} 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 * @deprecated `resourceName` is deprecated. Use `resource` instead.\n */\n resourceName?: string;\n /**\n * Resource name for API data interactions\n * @default Resource name that it reads from route\n */\n resource?: string;\n /**\n * A mapping function that runs for every record. Mapped data will be included in the file contents\n */\n mapData?: MapDataFn<TData, TVariables>;\n /**\n * Sorts records\n * @deprecated `sorter` is deprecated. Use `sorters` instead.\n */\n sorter?: CrudSorting;\n /**\n * Sorts records\n */\n sorters?: 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 meta?: MetaQuery;\n /**\n * Metadata query for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n /**\n * Callback to handle error events of this hook\n */\n onError?: (error: any) => void;\n};\n\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 resource: resourceFromProps,\n sorter,\n sorters,\n filters,\n maxItemCount,\n pageSize = 20,\n mapData = (item) => item as any,\n exportOptions,\n meta,\n metaData,\n dataProviderName,\n onError,\n}: UseExportOptionsType<TData, TVariables> = {}): UseExportReturnType => {\n const [isLoading, setIsLoading] = useState(false);\n\n const dataProvider = useDataProvider();\n\n const { resource, resources } = useResource();\n\n const filename = `${userFriendlyResourceName(\n resource?.name,\n \"plural\",\n )}-${new Date().toLocaleString()}`;\n\n const { getList } = dataProvider(\n pickDataProvider(\n resource?.identifier ?? resource?.name,\n dataProviderName,\n resources,\n ),\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: resource?.name ?? \"\",\n filters,\n sort: pickNotDeprecated(sorters, sorter),\n sorters: pickNotDeprecated(sorters, sorter),\n pagination: {\n current,\n pageSize,\n mode: \"server\",\n },\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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\";\nimport warnOnce from \"warn-once\";\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 UpdateResponse,\n MutationMode,\n BaseKey,\n IQueryKeys,\n FormAction,\n IResourceItem,\n MetaQuery,\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\";\nimport { useRouterType } from \"@contexts/router-picker\";\nimport { useParsed } from \"@hooks/router/use-parsed\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\nimport { useResource } from \"../resource/useResource\";\nimport { pickNotDeprecated } 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 meta?: MetaQuery;\n /**\n * Metadata query for dataProvider\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\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 UpdateResponse<TData> | CreateResponse<TData>,\n TError,\n { id: BaseKey; values: TVariables } | TVariables\n> &\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 routeParams?: Record<string, string | number>,\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 meta,\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 { resources } = useResource();\n const routerType = useRouterType();\n const {\n resource: resourceFromRouter,\n id: idFromRouter,\n action: actionFromRouter,\n } = useParsed();\n const { useParams } = useRouterContext();\n const {\n resource: legacyResourceFromRoute,\n action: legacyActionFromRoute,\n id: legacyIdFromParams,\n } = useParams<ResourceRouterParams>();\n\n const newResourceNameFromRouter =\n typeof resourceFromRouter === \"string\"\n ? resourceFromRouter\n : resourceFromRouter?.name;\n\n /** We only accept `id` from URL params if `resource` is not explicitly passed. */\n /** This is done to avoid sending wrong requests for custom `resource` and an async `id` */\n const defaultId =\n !resourceFromProps ||\n resourceFromProps ===\n (routerType === \"legacy\"\n ? legacyResourceFromRoute\n : newResourceNameFromRouter)\n ? idFromProps ??\n (routerType === \"legacy\" ? legacyIdFromParams : idFromRouter)\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 /**\n * In some cases, `id` from the router params is not available at the first render.\n *\n * (e.g. when using `Next.js` and client-side-rendering, `router` is not ready to use at the first render)\n *\n * We're watching for `defaultId` changes and setting `id` state if it's not equal to `defaultId`.\n */\n React.useEffect(() => {\n setId(defaultId);\n }, [defaultId]);\n\n /** `resourceName` fallback value depends on the router type */\n const resourceName =\n resourceFromProps ??\n (routerType === \"legacy\"\n ? legacyResourceFromRoute\n : newResourceNameFromRouter);\n /** `action` fallback value depends on the router type */\n /**\n * In earlier versions, we've trivially inferred the action type as `create` in `show` types.\n * This is probably done to cover cases with modals and drawers.\n *\n * This is not right, as we should not do trivial inference of the action type.\n * Users should explicitly pass the action type when needed.\n */\n const fallbackAction =\n routerType === \"legacy\" ? legacyActionFromRoute : actionFromRouter;\n const action =\n actionFromProps ??\n (fallbackAction === \"edit\" || fallbackAction === \"clone\"\n ? fallbackAction\n : \"create\");\n\n const resourceWithRoute = useResourceWithRoute();\n let resource: IResourceItem | undefined;\n\n if (routerType === \"legacy\") {\n if (resourceName) {\n resource = resourceWithRoute(resourceName);\n }\n } else {\n /** If `resource` is provided by the user, then try to pick the resource of create a dummy one */\n if (resourceFromProps) {\n const picked = pickResource(resourceFromProps, resources);\n if (picked) {\n resource = picked;\n } else {\n resource = {\n name: resourceFromProps,\n route: resourceFromProps,\n };\n }\n } else {\n /** If `resource` is not provided, check the resource from the router params */\n if (typeof resourceFromRouter === \"string\") {\n const picked = pickResource(resourceFromRouter, resources);\n if (picked) {\n resource = picked;\n } else {\n resource = {\n name: resourceFromRouter,\n route: resourceFromRouter,\n };\n }\n } else {\n /** If `resource` is passed as an IResourceItem, use it or `resource` is undefined and cannot be inferred. */\n resource = resourceFromRouter;\n }\n }\n }\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 warnOnce(\n (isClone || isEdit) &&\n Boolean(resourceFromProps) &&\n !Boolean(idFromProps),\n `[useForm]: action: \"${action}\", resource: \"${resourceName}\", id: ${id} \\n\\n` +\n `If you don't use the \\`setId\\` method to set the \\`id\\`, you should pass the \\`id\\` prop to \\`useForm\\`. Otherwise, \\`useForm\\` will not be able to infer the \\`id\\` from the current URL. \\n\\n` +\n `See https://refine.dev/docs/api-reference/core/hooks/useForm/#resource`,\n );\n\n /**\n * Designated `redirect` route\n */\n const designatedRedirectAction = 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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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: designatedRedirectAction,\n resource,\n id,\n meta: metaData,\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\n if (!resource) return;\n\n return mutateCreate(\n {\n values,\n resource: resource.name,\n successNotification,\n errorNotification,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 if (!resource) return;\n\n const variables: UpdateParams<TData, TError, TVariables> = {\n id: id ?? \"\",\n values,\n resource: resource.name,\n mutationMode,\n undoableTimeout,\n successNotification,\n errorNotification,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n dataProviderName,\n invalidates,\n };\n\n const onSuccess = () => {\n handleSubmitWithRedirect({\n redirect: designatedRedirectAction,\n resource,\n id,\n meta: metaData,\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 meta: metaData,\n });\n },\n };\n};\n","import { useCallback } from \"react\";\n\nimport {\n BaseKey,\n IResourceItem,\n MetaDataQuery,\n RedirectAction,\n} from \"../../interfaces\";\nimport { useNavigation } from \"@hooks\";\n\nexport type UseRedirectionAfterSubmissionType = () => (options: {\n redirect: RedirectAction;\n resource?: IResourceItem;\n id?: BaseKey;\n meta?: MetaDataQuery;\n}) => void;\n\nexport const useRedirectionAfterSubmission: UseRedirectionAfterSubmissionType =\n () => {\n const { show, edit, list, create } = useNavigation();\n\n const handleSubmitWithRedirect = useCallback(\n ({\n redirect,\n resource,\n id,\n meta = {},\n }: {\n redirect: RedirectAction;\n resource?: IResourceItem;\n id?: BaseKey;\n meta?: MetaDataQuery;\n }) => {\n if (redirect && resource) {\n if (!!resource.show && redirect === \"show\" && id) {\n return show(resource, id, undefined, meta);\n }\n\n if (!!resource.edit && redirect === \"edit\" && id) {\n return edit(resource, id, undefined, meta);\n }\n\n if (!!resource.create && redirect === \"create\") {\n return create(resource, undefined, meta);\n }\n\n return list(resource, \"push\", meta);\n } else {\n return;\n }\n },\n [],\n );\n\n return handleSubmitWithRedirect;\n };\n","import { RouterBindingsContext } from \"@contexts/router\";\nimport React, { useContext } from \"react\";\n\nexport const useGo = () => {\n const bindings = useContext(RouterBindingsContext);\n\n const useGo = React.useMemo(\n () => bindings?.go ?? (() => () => undefined),\n [bindings?.go],\n );\n\n const go = useGo();\n\n return go;\n};\n","import { RouterBindingsContext } from \"@contexts/router\";\nimport React, { useContext } from \"react\";\n\nexport const useBack = () => {\n const bindings = useContext(RouterBindingsContext);\n\n const useBack = React.useMemo(\n () => bindings?.back ?? (() => () => undefined),\n [bindings?.back],\n );\n\n const back = useBack();\n\n return back;\n};\n","import { useRouterContext, useResource } from \"@hooks\";\nimport { BaseKey, IResourceItem, MetaDataQuery } from \"../../interfaces\";\nimport { useGo } from \"@hooks/router/use-go\";\nimport { useParsed } from \"@hooks/router/use-parsed\";\nimport { useRouterType } from \"@contexts/router-picker\";\nimport { getActionRoutesFromResource } from \"@definitions/helpers/router\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\nimport { composeRoute } from \"@definitions/helpers/router/compose-route\";\nimport { useBack } from \"@hooks/router/use-back\";\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 * @internal This is an internal hook of refine. Do not use it directly.\n *\n * @see {@link https://refine.dev/docs/core/hooks/navigation/useNavigation} for more details.\n */\nexport const useNavigation = () => {\n const { resources } = useResource();\n const routerType = useRouterType();\n const { useHistory } = useRouterContext();\n const history = useHistory();\n const parsed = useParsed();\n const go = useGo();\n const back = useBack();\n\n const handleUrl = (url: string, type: HistoryType = \"push\") => {\n if (routerType === \"legacy\") {\n history[type](url);\n } else {\n go({ to: url, type });\n }\n };\n\n const createUrl = (\n resource: string | IResourceItem,\n meta: MetaDataQuery = {},\n ) => {\n if (routerType === \"legacy\") {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources, true) ?? {\n name: resource,\n route: resource,\n }\n : resource;\n\n const createActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n true,\n ).find((r) => r.action === \"create\");\n\n if (!createActionRoute) {\n return \"\";\n }\n\n return composeRoute(createActionRoute.route, parsed, meta);\n } else {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const createActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"create\")?.route;\n\n if (!createActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(createActionRoute, parsed, meta),\n type: \"path\",\n }) as string;\n }\n };\n\n const editUrl = (\n resource: string | IResourceItem,\n id: BaseKey,\n meta: MetaDataQuery = {},\n ) => {\n const encodedId = encodeURIComponent(id);\n if (routerType === \"legacy\") {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources, true) ?? {\n name: resource,\n route: resource,\n }\n : resource;\n\n const editActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n true,\n ).find((r) => r.action === \"edit\");\n\n if (!editActionRoute) {\n return \"\";\n }\n\n return composeRoute(editActionRoute.route, parsed, {\n ...meta,\n id: encodedId,\n });\n } else {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const editActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"edit\")?.route;\n\n if (!editActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(editActionRoute, parsed, {\n ...meta,\n id: encodedId,\n }),\n type: \"path\",\n }) as string;\n }\n };\n\n const cloneUrl = (\n resource: string | IResourceItem,\n id: BaseKey,\n meta: MetaDataQuery = {},\n ) => {\n const encodedId = encodeURIComponent(id);\n\n if (routerType === \"legacy\") {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources, true) ?? {\n name: resource,\n route: resource,\n }\n : resource;\n\n const cloneActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n true,\n ).find((r) => r.action === \"clone\");\n\n if (!cloneActionRoute) {\n return \"\";\n }\n\n return composeRoute(cloneActionRoute.route, parsed, {\n ...meta,\n id: encodedId,\n });\n } else {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const cloneActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"clone\")?.route;\n\n if (!cloneActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(cloneActionRoute, parsed, {\n ...meta,\n id: encodedId,\n }),\n type: \"path\",\n }) as string;\n }\n };\n\n const showUrl = (\n resource: string | IResourceItem,\n id: BaseKey,\n meta: MetaDataQuery = {},\n ) => {\n const encodedId = encodeURIComponent(id);\n if (routerType === \"legacy\") {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources, true) ?? {\n name: resource,\n route: resource,\n }\n : resource;\n\n const showActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n true,\n ).find((r) => r.action === \"show\");\n\n if (!showActionRoute) {\n return \"\";\n }\n\n return composeRoute(showActionRoute.route, parsed, {\n ...meta,\n id: encodedId,\n });\n } else {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const showActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"show\")?.route;\n\n if (!showActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(showActionRoute, parsed, {\n ...meta,\n id: encodedId,\n }),\n type: \"path\",\n }) as string;\n }\n };\n\n const listUrl = (\n resource: string | IResourceItem,\n meta: MetaDataQuery = {},\n ) => {\n if (routerType === \"legacy\") {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources, true) ?? {\n name: resource,\n route: resource,\n }\n : resource;\n\n const listActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n true,\n ).find((r) => r.action === \"list\");\n\n if (!listActionRoute) {\n return \"\";\n }\n\n return composeRoute(listActionRoute.route, parsed, meta);\n } else {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const listActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"list\")?.route;\n\n if (!listActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(listActionRoute, parsed, meta),\n type: \"path\",\n }) as string;\n }\n };\n\n const create = (\n resource: string | IResourceItem,\n type: HistoryType = \"push\",\n meta: MetaDataQuery = {},\n ) => {\n handleUrl(createUrl(resource, meta), type);\n };\n\n const edit = (\n resource: string | IResourceItem,\n id: BaseKey,\n type: HistoryType = \"push\",\n meta: MetaDataQuery = {},\n ) => {\n handleUrl(editUrl(resource, id, meta), type);\n };\n\n const clone = (\n resource: string | IResourceItem,\n id: BaseKey,\n type: HistoryType = \"push\",\n meta: MetaDataQuery = {},\n ) => {\n handleUrl(cloneUrl(resource, id, meta), type);\n };\n\n const show = (\n resource: string | IResourceItem,\n id: BaseKey,\n type: HistoryType = \"push\",\n meta: MetaDataQuery = {},\n ) => {\n handleUrl(showUrl(resource, id, meta), type);\n };\n\n const list = (\n resource: string | IResourceItem,\n type: HistoryType = \"push\",\n meta: MetaDataQuery = {},\n ) => {\n handleUrl(listUrl(resource, meta), type);\n };\n\n /**\n * @deprecated Please use `useGo` hook instead.\n */\n const push = (path: string, ...rest: unknown[]) => {\n if (routerType === \"legacy\") {\n history.push(path, ...rest);\n } else {\n go({ to: path, type: \"push\" });\n }\n };\n\n /**\n * @deprecated Please use `useGo` hook instead.\n */\n const replace = (path: string, ...rest: unknown[]) => {\n if (routerType === \"legacy\") {\n history.replace(path, ...rest);\n } else {\n go({ to: path, type: \"replace\" });\n }\n };\n\n /**\n * @deprecated Please use `useBack` hook instead.\n */\n const goBack = () => {\n if (routerType === \"legacy\") {\n history.goBack();\n } else {\n back();\n }\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\";\nimport warnOnce from \"warn-once\";\n\nimport { useOne, useResourceWithRoute, useRouterContext } from \"@hooks\";\n\nimport {\n ResourceRouterParams,\n BaseRecord,\n GetOneResponse,\n SuccessErrorNotification,\n MetaQuery,\n LiveModeProps,\n BaseKey,\n HttpError,\n IResourceItem,\n Prettify,\n} from \"../../interfaces\";\nimport { useRouterType } from \"@contexts/router-picker\";\nimport { useParsed } from \"@hooks/router/use-parsed\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\nimport { useResource } from \"../resource/useResource\";\nimport { pickNotDeprecated } from \"@definitions/helpers\";\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>, TError>;\n /**\n * Additional meta data to pass to the data provider's `getOne`\n */\n meta?: MetaQuery;\n /**\n * Additional meta data to pass to the data provider's `getOne`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * Target data provider name for API call to be made\n * @default `\"default\"`\n */\n dataProviderName?: string;\n} & LiveModeProps &\n SuccessErrorNotification<\n GetOneResponse<TData>,\n TError,\n Prettify<{ id?: BaseKey } & MetaQuery>\n >;\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 meta,\n metaData,\n liveMode,\n onLiveEvent,\n dataProviderName,\n queryOptions,\n}: useShowProps<TData, TError> = {}): useShowReturnType<TData> => {\n const routerType = useRouterType();\n const { resources } = useResource();\n const { useParams } = useRouterContext();\n const { resource: resourceFromRouter, id: idFromRouter } = useParsed();\n\n const { resource: legacyResourceFromRoute, id: legacyIdFromParams } =\n useParams<ResourceRouterParams>();\n\n const newResourceNameFromRouter = resourceFromRouter?.name;\n\n /** We only accept `id` from URL params if `resource` is not explicitly passed. */\n /** This is done to avoid sending wrong requests for custom `resource` and an async `id` */\n const defaultId =\n !resourceFromProp ||\n resourceFromProp ===\n (routerType === \"legacy\"\n ? legacyResourceFromRoute\n : newResourceNameFromRouter)\n ? id ??\n (routerType === \"legacy\" ? legacyIdFromParams : idFromRouter)\n : id;\n\n const [showId, setShowId] = useState<BaseKey | undefined>(defaultId);\n\n React.useEffect(() => {\n setShowId(defaultId);\n }, [defaultId]);\n\n /** `resourceName` fallback value depends on the router type */\n const resourceName =\n resourceFromProp ??\n (routerType === \"legacy\"\n ? legacyResourceFromRoute\n : newResourceNameFromRouter);\n\n let resource: IResourceItem | undefined;\n\n const resourceWithRoute = useResourceWithRoute();\n\n if (routerType === \"legacy\") {\n if (resourceName) {\n resource = resourceWithRoute(resourceName);\n }\n } else {\n /** If `resource` is provided by the user, then try to pick the resource of create a dummy one */\n if (resourceFromProp) {\n const picked = pickResource(resourceFromProp, resources);\n if (picked) {\n resource = picked;\n } else {\n resource = {\n name: resourceFromProp,\n route: resourceFromProp,\n };\n }\n } else {\n /** If `resource` is not provided, check the resource from the router params */\n if (typeof resourceFromRouter === \"string\") {\n const picked = pickResource(resourceFromRouter, resources);\n if (picked) {\n resource = picked;\n } else {\n resource = {\n name: resourceFromRouter,\n route: resourceFromRouter,\n };\n }\n } else {\n /** If `resource` is passed as an IResourceItem, use it or `resource` is undefined and cannot be inferred. */\n resource = resourceFromRouter;\n }\n }\n }\n\n warnOnce(\n Boolean(resourceFromProp) && !Boolean(id),\n `[useShow]: resource: \"${resourceName}\", id: ${id} \\n\\n` +\n `If you don't use the \\`setShowId\\` method to set the \\`showId\\`, you should pass the \\`id\\` prop to \\`useShow\\`. Otherwise, \\`useShow\\` will not be able to infer the \\`id\\` from the current URL. \\n\\n` +\n `See https://refine.dev/docs/api-reference/core/hooks/show/useShow/#resource`,\n );\n\n const queryResult = useOne<TData, TError>({\n resource: resource?.name,\n id: showId ?? \"\",\n queryOptions: {\n enabled: showId !== undefined,\n ...queryOptions,\n },\n successNotification,\n errorNotification,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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 { useCreate, useCreateMany, useResource } from \"@hooks\";\nimport { MapDataFn, BaseRecord, HttpError, MetaQuery } from \"../../interfaces\";\nimport {\n importCSVMapper,\n sequentialPromises,\n pickNotDeprecated,\n} 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 * @deprecated `resourceName` is deprecated. Use `resource` instead.\n */\n resourceName?: string;\n /**\n * Resource name for API data interactions.\n * @default Resource name that it reads from route\n */\n resource?: string;\n /**\n * A mapping function that runs for every record. Mapped data will be included in the file contents.\n */\n mapData?: MapDataFn<TItem, TVariables>;\n /**\n * Custom Papa Parse options.\n * @type [`ParseConfig`](https://www.papaparse.com/docs)\n */\n paparseOptions?: ParseConfig;\n /**\n * Requests batch size. If it is 1, all records are sent one by one. By default, it is [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER) to send all records in one batch. If it is more than 1, `createMany` should be implemented on DataProvider.\n */\n batchSize?: number;\n /**\n * Called with errors and successful responses when all requests are sent.\n */\n onFinish?: (results: OnFinishParams<TVariables, TData>) => void;\n /**\n * Metadata query for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Metadata query for `dataProvider`\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\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 resource: resourceFromProps,\n mapData = (item) => item as unknown as TVariables,\n paparseOptions,\n batchSize = Number.MAX_SAFE_INTEGER,\n onFinish,\n meta,\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 { resource } = useResource(resourceFromProps ?? resourceName);\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: resource?.name ?? \"\",\n values: value,\n successNotification: false,\n errorNotification: false,\n dataProviderName,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(\n meta,\n metaData,\n ),\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: resource?.name ?? \"\",\n values: chunkedValues,\n successNotification: false,\n errorNotification: false,\n dataProviderName,\n meta: pickNotDeprecated(\n meta,\n metaData,\n ),\n metaData: pickNotDeprecated(\n meta,\n metaData,\n ),\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 React from \"react\";\nimport { useResource } from \"../../resource\";\nimport { Action, IResourceItem } from \"../../../interfaces\";\nimport { getActionRoutesFromResource } from \"../../../definitions/helpers/router\";\nimport { useParsed } from \"../use-parsed\";\nimport { composeRoute } from \"../../../definitions/helpers/router/compose-route\";\nimport { useRouterType } from \"./../../../contexts/router-picker\";\n\ntype UseToPathParams = {\n resource?: IResourceItem;\n action: Action;\n meta?: Record<string, unknown>;\n legacy?: boolean;\n};\n\ntype GetToPathFn = (params: UseToPathParams) => string | undefined;\n\n/**\n * Returns a function to get the route for a given action and resource.\n * If resource is not provided, it will use the resource from the route.\n * If the resource is not found, it will return undefined.\n * If the action is not found, it will return undefined.\n * `meta` can be provided to compose the routes with parameters. (Can be used for nested routes.)\n */\nexport const useGetToPath = (): GetToPathFn => {\n const routerType = useRouterType();\n const { resource: resourceFromRoute, resources } = useResource();\n const parsed = useParsed();\n\n const fn = React.useCallback(\n ({ resource, action, meta }: UseToPathParams): string | undefined => {\n const selectedResource = resource || resourceFromRoute;\n\n if (!selectedResource) {\n return undefined;\n }\n\n const actionRoutes = getActionRoutesFromResource(\n selectedResource,\n resources,\n routerType === \"legacy\",\n );\n\n const actionRoute = actionRoutes.find(\n (item) => item.action === action,\n )?.route;\n\n if (!actionRoute) {\n return undefined;\n }\n\n const composed = composeRoute(actionRoute, parsed, meta);\n\n return composed;\n },\n [resources, resourceFromRoute, parsed],\n );\n\n return fn;\n};\n","import { Action, IResourceItem } from \"../../../interfaces\";\nimport { useGetToPath } from \"../use-get-to-path\";\n\ntype UseToPathParams = {\n resource?: IResourceItem;\n action: Action;\n meta?: Record<string, unknown>;\n legacy?: boolean;\n};\n\n/**\n * Returns the route for a given action and resource.\n * If resource is not provided, it will use the resource from the route.\n * If the resource is not found, it will return undefined.\n * If the action is not found, it will return undefined.\n * `meta` can be provided to compose the routes with parameters. (Can be used for nested routes.)\n */\nexport const useToPath = ({\n resource,\n action,\n meta,\n legacy,\n}: UseToPathParams): string | undefined => {\n const getToPath = useGetToPath();\n\n return getToPath({ resource, action, meta, legacy });\n};\n","import { RouterBindingsContext } from \"@contexts/router\";\nimport React, { useContext } from \"react\";\n\nexport const useLink = () => {\n const bindings = useContext(RouterBindingsContext);\n\n if (bindings?.Link) {\n return bindings.Link;\n }\n\n const FallbackLink: Required<typeof bindings>[\"Link\"] = ({\n to,\n ...rest\n }) => <a href={to} {...rest} />;\n\n return FallbackLink;\n};\n","import { useContext } from \"react\";\nimport { RouterContext, defaultProvider } from \"@contexts/legacy-router\";\n\nexport const useRouterContext = () => {\n const routerContextValues = useContext(RouterContext);\n\n const { useHistory, useLocation, useParams, Prompt, Link, routes } =\n routerContextValues ?? defaultProvider;\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 LegacyRouterContext =\n React.createContext<IRouterContext>(defaultProvider);\n\nexport const RouterContext = LegacyRouterContext;\n\nexport const LegacyRouterContextProvider: React.FC<\n Partial<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: useHistory ?? defaultProvider.useHistory,\n useLocation: useLocation ?? defaultProvider.useLocation,\n useParams: useParams ?? defaultProvider.useParams,\n Prompt: Prompt ?? defaultProvider.Prompt,\n Link: Link ?? defaultProvider.Link,\n routes: routes ?? defaultProvider.routes,\n }}\n >\n {children}\n </RouterContext.Provider>\n );\n};\n","import {\n useQuery,\n UseQueryOptions,\n UseQueryResult,\n} from \"@tanstack/react-query\";\nimport { useContext } from \"react\";\n\nimport { AccessControlContext } from \"@contexts/accessControl\";\nimport { sanitizeResource } from \"@definitions/helpers/sanitize-resource\";\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 sanitizedResource = sanitizeResource(_resource ?? {});\n\n /* eslint-enable @typescript-eslint/no-unused-vars */\n const queryResponse = useQuery<CanReturnType>(\n [\n \"useCan\",\n {\n action,\n resource,\n params: { ...paramsRest, resource: sanitizedResource },\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: paramsRest }) ??\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 { IResourceItem } from \"../../../interfaces/bindings/resource\";\n\n/**\n * Remove all properties that are non-serializable from a resource object.\n */\nexport const sanitizeResource = (\n resource: Partial<IResourceItem> & { children?: unknown },\n): Partial<IResourceItem> => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n icon,\n list,\n edit,\n create,\n show,\n clone,\n children,\n meta,\n options,\n ...restResource\n } = resource;\n\n const { icon: _metaIcon, ...restMeta } = meta ?? {};\n const { icon: _optionsIcon, ...restOptions } = options ?? {};\n\n return {\n ...restResource,\n ...(meta ? { meta: restMeta } : {}),\n ...(options ? { options: restOptions } : {}),\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 LiveModeProps,\n BaseKey,\n Pagination,\n MetaQuery,\n Prettify,\n} from \"../../interfaces\";\nimport { pickNotDeprecated } from \"@definitions/helpers\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\nimport { useResource } from \"../resource/useResource/index\";\nimport { BaseListProps } from \"../data/useList\";\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?: keyof TData extends string ? keyof TData : never;\n /**\n * Set the option's label value\n * @default `\"id\"`\n */\n optionValue?: keyof TData extends string ? keyof TData : never;\n /**\n * Allow us to sort the options\n * @deprecated Use `sorters` instead\n */\n sort?: CrudSorting;\n /**\n * Allow us to sort the options\n */\n sorters?: 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?: Prettify<\n Omit<Pagination, \"mode\"> & {\n /**\n * Whether to use server side pagination or not.\n * @default \"off\"\n */\n mode?: Pagination[\"mode\"];\n }\n >;\n /**\n * Disabling pagination option from [`useList()`](/docs/api-reference/core/hooks/data/useList/)\n * @type boolean\n * @default `false`\n * @deprecated `hasPagination` is deprecated, use `pagination.mode` instead.\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 * Additional meta data to pass to the `useMany` from the data provider\n */\n meta?: MetaQuery;\n /**\n * Additional meta data to pass to the `useMany` from the data provider\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default `default`\n */\n dataProviderName?: string;\n /**\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 GetListResponse<TData>,\n TError,\n Prettify<BaseListProps>\n> &\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: resourceFromProps,\n sort,\n sorters,\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 = false,\n liveMode,\n defaultValue = [],\n onLiveEvent,\n onSearch: onSearchFromProp,\n liveParams,\n meta,\n metaData,\n dataProviderName,\n } = props;\n\n const { resources } = useResource();\n\n /**\n * Since `identifier` is an optional but prioritized way to match resources, users can provide identifier instead of resource name.\n */\n const pickedResource = pickResource(resourceFromProps, resources);\n\n const resource = pickedResource?.name ?? resourceFromProps;\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) as string,\n value: get(item, optionValue) as string,\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 meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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) as string,\n value: get(item, optionValue) as string,\n })),\n );\n }\n },\n [optionLabel, optionValue],\n );\n\n const queryResult = useList<TData, TError>({\n resource,\n sorters: pickNotDeprecated(sorters, sort),\n filters: filters.concat(search),\n pagination: {\n current: pagination?.current,\n pageSize: pagination?.pageSize ?? fetchSize,\n mode: pagination?.mode,\n },\n hasPagination,\n queryOptions: {\n ...queryOptions,\n onSuccess: (data) => {\n defaultQueryOnSuccess(data);\n queryOptions?.onSuccess?.(data);\n },\n },\n successNotification,\n errorNotification,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, 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, { 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\";\nimport warnOnce from \"warn-once\";\n\nimport {\n useRouterContext,\n useSyncWithLocation,\n useNavigation,\n useList,\n useLiveMode,\n useRouterType,\n useResource,\n useParsed,\n} from \"@hooks\";\nimport {\n stringifyTableParams,\n parseTableParams,\n unionFilters,\n setInitialFilters,\n setInitialSorters,\n unionSorters,\n} from \"@definitions/table\";\nimport { pickNotDeprecated } from \"@definitions/helpers\";\n\nimport {\n BaseRecord,\n CrudFilters,\n CrudSorting,\n GetListResponse,\n SuccessErrorNotification,\n HttpError,\n MetaQuery,\n LiveModeProps,\n Pagination,\n Prettify,\n} from \"../../interfaces\";\nimport { useGo } from \"@hooks/router/use-go\";\nimport { BaseListProps } from \"../data/useList\";\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 * Configuration for pagination\n */\n pagination?: Pagination;\n /**\n * Initial page index\n * @default 1\n * @deprecated `initialCurrent` property is deprecated. Use `pagination.current` instead.\n */\n initialCurrent?: number;\n /**\n * Initial number of items per page\n * @default 10\n * @deprecated `initialPageSize` property is deprecated. Use `pagination.pageSize` instead.\n */\n initialPageSize?: number;\n /**\n * Sort configs\n */\n sorters?: {\n /**\n * Initial sorter state\n */\n initial?: CrudSorting;\n /**\n * Default and unchangeable sorter state\n * @default `[]`\n */\n permanent?: CrudSorting;\n };\n /**\n * Initial sorter state\n * @deprecated `initialSorter` property is deprecated. Use `sorters.initial` instead.\n */\n initialSorter?: CrudSorting;\n /**\n * Default and unchangeable sorter state\n * @default `[]`\n * @deprecated `permanentSorter` property is deprecated. Use `sorters.permanent` instead.\n */\n permanentSorter?: CrudSorting;\n /**\n * Filter configs\n */\n filters?: {\n /**\n * Initial filter state\n */\n initial?: CrudFilters;\n /**\n * Default and unchangeable filter state\n * @default `[]`\n */\n permanent?: CrudFilters;\n /**\n * Default behavior of the `setFilters` function\n * @default `\"merge\"`\n */\n defaultBehavior?: SetFilterBehavior;\n };\n /**\n * Initial filter state\n * @deprecated `initialFilter` property is deprecated. Use `filters.initial` instead.\n */\n initialFilter?: CrudFilters;\n /**\n * Default and unchangeable filter state\n * @default `[]`\n * @deprecated `permanentFilter` property is deprecated. Use `filters.permanent` instead.\n */\n permanentFilter?: CrudFilters;\n /**\n * Default behavior of the `setFilters` function\n * @default `\"merge\"`\n * @deprecated `defaultSetFilterBehavior` property is deprecated. Use `filters.defaultBehavior` instead.\n */\n defaultSetFilterBehavior?: SetFilterBehavior;\n /**\n * Whether to use server side pagination or not.\n * @default `true`\n * @deprecated `hasPagination` property is deprecated. Use `pagination.mode` instead.\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 meta?: MetaQuery;\n /**\n * Metadata query for dataProvider\n * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.\n */\n metaData?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<\n GetListResponse<TData>,\n TError,\n Prettify<BaseListProps>\n> &\n LiveModeProps;\n\ntype ReactSetState<T> = React.Dispatch<React.SetStateAction<T>>;\n\ntype SyncWithLocationParams = {\n pagination: { current?: number; pageSize?: number };\n /**\n * @deprecated `sorter` is deprecated. Use `sorters` instead.\n */\n sorter?: CrudSorting;\n sorters: CrudSorting;\n filters: CrudFilters;\n};\n\nexport type useTableReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n> = {\n tableQueryResult: QueryObserverResult<GetListResponse<TData>, TError>;\n /**\n * @deprecated `sorter` is deprecated. Use `sorters` instead.\n */\n sorter: CrudSorting;\n sorters: CrudSorting;\n /**\n * @deprecated `setSorter` is deprecated. Use `setSorters` instead.\n */\n setSorter: (sorter: CrudSorting) => void;\n setSorters: (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\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\nexport function useTable<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n>({\n initialCurrent,\n initialPageSize,\n hasPagination = true,\n pagination,\n initialSorter,\n permanentSorter = defaultPermanentSorter,\n defaultSetFilterBehavior,\n initialFilter,\n permanentFilter = defaultPermanentFilter,\n filters: filtersFromProp,\n sorters: sortersFromProp,\n syncWithLocation: syncWithLocationProp,\n resource: resourceFromProp,\n successNotification,\n errorNotification,\n queryOptions,\n liveMode: liveModeFromProp,\n onLiveEvent,\n liveParams,\n meta,\n metaData,\n dataProviderName,\n}: useTableProps<TData, TError> = {}): useTableReturnType<TData, TError> {\n const { syncWithLocation: syncWithLocationContext } = useSyncWithLocation();\n\n const syncWithLocation = syncWithLocationProp ?? syncWithLocationContext;\n\n const liveMode = useLiveMode(liveModeFromProp);\n\n const routerType = useRouterType();\n const { useLocation } = useRouterContext();\n const { search, pathname } = useLocation();\n\n const parsedParams = useParsed();\n\n const hasPaginationString = hasPagination === false ? \"off\" : \"server\";\n const isPaginationEnabled =\n (pagination?.mode ?? hasPaginationString) !== \"off\";\n const prefferedCurrent = pickNotDeprecated(\n pagination?.current,\n initialCurrent,\n );\n const prefferedPageSize = pickNotDeprecated(\n pagination?.pageSize,\n initialPageSize,\n );\n const preferredMeta = pickNotDeprecated(meta, metaData);\n\n /** `parseTableParams` is redundant with the new routing */\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 preferredInitialFilters = pickNotDeprecated(\n filtersFromProp?.initial,\n initialFilter,\n );\n const preferredPermanentFilters =\n pickNotDeprecated(filtersFromProp?.permanent, permanentFilter) ??\n defaultPermanentFilter;\n\n const preferredInitialSorters = pickNotDeprecated(\n sortersFromProp?.initial,\n initialSorter,\n );\n const preferredPermanentSorters =\n pickNotDeprecated(sortersFromProp?.permanent, permanentSorter) ??\n defaultPermanentSorter;\n\n const prefferedFilterBehavior =\n pickNotDeprecated(\n filtersFromProp?.defaultBehavior,\n defaultSetFilterBehavior,\n ) ?? \"merge\";\n\n let defaultCurrent: number;\n let defaultPageSize: number;\n let defaultSorter: CrudSorting | undefined;\n let defaultFilter: CrudFilters | undefined;\n\n if (syncWithLocation) {\n defaultCurrent =\n parsedParams?.params?.current ||\n parsedCurrent ||\n prefferedCurrent ||\n 1;\n defaultPageSize =\n parsedParams?.params?.pageSize ||\n parsedPageSize ||\n prefferedPageSize ||\n 10;\n defaultSorter =\n parsedParams?.params?.sorters ||\n (parsedSorter.length ? parsedSorter : preferredInitialSorters);\n defaultFilter =\n parsedParams?.params?.filters ||\n (parsedFilters.length ? parsedFilters : preferredInitialFilters);\n } else {\n defaultCurrent = prefferedCurrent || 1;\n defaultPageSize = prefferedPageSize || 10;\n defaultSorter = preferredInitialSorters;\n defaultFilter = preferredInitialFilters;\n }\n\n const { replace } = useNavigation();\n /** New way of `replace` calls to the router is using `useGo` */\n const go = useGo();\n\n const { resource } = useResource(resourceFromProp);\n\n const resourceInUse = resource?.name;\n\n React.useEffect(() => {\n warnOnce(\n typeof resourceInUse === \"undefined\",\n `useTable: \\`resource\\` is not defined.`,\n );\n }, [resourceInUse]);\n\n const [sorters, setSorters] = useState<CrudSorting>(\n setInitialSorters(preferredPermanentSorters, defaultSorter ?? []),\n );\n const [filters, setFilters] = useState<CrudFilters>(\n setInitialFilters(preferredPermanentFilters, 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 if (routerType === \"new\") {\n return (\n go({\n type: \"path\",\n options: {\n keepHash: true,\n keepQuery: true,\n },\n query: {\n ...(isPaginationEnabled ? { current, pageSize } : {}),\n sorters: sorter,\n filters,\n ...currentQueryParams(),\n },\n }) ?? \"\"\n );\n } else {\n const currentQueryParams = qs.parse(search?.substring(1)); // remove first ? character\n\n const stringifyParams = stringifyTableParams({\n pagination: {\n pageSize,\n current,\n },\n sorters: sorters ?? sorter,\n filters,\n ...currentQueryParams,\n });\n return `${pathname ?? \"\"}?${stringifyParams ?? \"\"}`;\n }\n };\n\n useEffect(() => {\n if (search === \"\") {\n setCurrent(defaultCurrent);\n setPageSize(defaultPageSize);\n setSorters(\n setInitialSorters(\n preferredPermanentSorters,\n defaultSorter ?? [],\n ),\n );\n setFilters(\n setInitialFilters(\n preferredPermanentFilters,\n defaultFilter ?? [],\n ),\n );\n }\n }, [search]);\n\n const currentQueryParams = (): object => {\n if (routerType === \"new\") {\n // We get QueryString parameters that are uncontrolled by refine.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { sorters, filters, pageSize, current, ...rest } =\n parsedParams?.params ?? {};\n\n return rest;\n } else {\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\n useEffect(() => {\n if (syncWithLocation) {\n // Careful! This triggers render\n const queryParams = currentQueryParams();\n\n if (routerType === \"new\") {\n go({\n type: \"replace\",\n options: {\n keepQuery: true,\n },\n query: {\n ...(isPaginationEnabled ? { pageSize, current } : {}),\n sorters: differenceWith(\n sorters,\n preferredPermanentSorters,\n isEqual,\n ),\n filters: differenceWith(\n filters,\n preferredPermanentFilters,\n isEqual,\n ),\n // ...queryParams,\n },\n });\n } else {\n const stringifyParams = stringifyTableParams({\n ...(isPaginationEnabled\n ? {\n pagination: {\n pageSize,\n current,\n },\n }\n : {}),\n sorters: differenceWith(\n sorters,\n preferredPermanentSorters,\n isEqual,\n ),\n filters: differenceWith(\n filters,\n preferredPermanentFilters,\n isEqual,\n ),\n ...queryParams,\n });\n return replace?.(`${pathname}?${stringifyParams}`, undefined, {\n shallow: true,\n });\n }\n }\n }, [syncWithLocation, current, pageSize, sorters, filters]);\n\n const queryResult = useList<TData, TError>({\n resource: resourceInUse,\n hasPagination,\n pagination: { current, pageSize, mode: pagination?.mode },\n filters: unionFilters(preferredPermanentFilters, filters),\n sorters: unionSorters(preferredPermanentSorters, sorters),\n queryOptions,\n successNotification,\n errorNotification,\n meta: preferredMeta,\n metaData: preferredMeta,\n liveMode,\n liveParams,\n onLiveEvent,\n dataProviderName,\n });\n\n const setFiltersAsMerge = (newFilters: CrudFilters) => {\n setFilters((prevFilters) =>\n unionFilters(preferredPermanentFilters, newFilters, prevFilters),\n );\n };\n\n const setFiltersAsReplace = (newFilters: CrudFilters) => {\n setFilters(unionFilters(preferredPermanentFilters, newFilters));\n };\n\n const setFiltersWithSetter = (\n setter: (prevFilters: CrudFilters) => CrudFilters,\n ) => {\n setFilters((prev) =>\n unionFilters(preferredPermanentFilters, setter(prev)),\n );\n };\n\n const setFiltersFn: useTableReturnType<TData>[\"setFilters\"] = (\n setterOrFilters,\n behavior: SetFilterBehavior = prefferedFilterBehavior,\n ) => {\n if (typeof setterOrFilters === \"function\") {\n setFiltersWithSetter(setterOrFilters);\n } else {\n if (behavior === \"replace\") {\n setFiltersAsReplace(setterOrFilters);\n } else {\n setFiltersAsMerge(setterOrFilters);\n }\n }\n };\n\n const setSortWithUnion = (newSorter: CrudSorting) => {\n setSorters(() => unionSorters(preferredPermanentSorters, newSorter));\n };\n\n return {\n tableQueryResult: queryResult,\n sorters,\n setSorters: setSortWithUnion,\n sorter: sorters,\n setSorter: setSortWithUnion,\n filters,\n setFilters: setFiltersFn,\n current,\n setCurrent,\n pageSize,\n setPageSize,\n pageCount: pageSize\n ? Math.ceil((queryResult.data?.total ?? 0) / pageSize)\n : 1,\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 {\n hasPermission,\n pickNotDeprecated,\n queryKeys,\n} from \"@definitions/helpers\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\nimport { useActiveAuthProvider } 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 authProvider = useActiveAuthProvider();\n\n const { resources } = useContext(ResourceContext);\n const {\n data: identityData,\n refetch,\n isLoading,\n } = useGetIdentity({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n queryOptions: {\n enabled: !!auditLogContext,\n },\n });\n\n const log = useMutation<TLogData, Error, LogParams, unknown>(\n async (params) => {\n const resource = pickResource(params.resource, resources);\n const logPermissions = pickNotDeprecated(\n resource?.meta?.audit,\n resource?.options?.audit,\n resource?.options?.auditLog?.permissions,\n );\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, useTranslate } from \"@hooks\";\nimport { TranslationContext } from \"@contexts/translation\";\nimport { humanizeString, pickNotDeprecated } from \"@definitions\";\n\nimport { IResourceItem } from \"../../interfaces\";\nimport { useRouterType } from \"@contexts/router-picker\";\nimport { getActionRoutesFromResource } from \"@definitions/helpers/router\";\nimport { pickResource } from \"../../definitions/helpers/pick-resource/index\";\nimport { composeRoute } from \"@definitions/helpers/router/compose-route\";\nimport { useParsed } from \"@hooks/router/use-parsed\";\n\nexport type BreadcrumbsType = {\n label: string;\n href?: string;\n icon?: React.ReactNode;\n};\n\ntype UseBreadcrumbReturnType = {\n breadcrumbs: BreadcrumbsType[];\n};\n\ntype UseBreadcrumbProps = {\n /**\n * Additional params to be used in the route generation process.\n */\n meta?: Record<string, string | number>;\n};\n\nexport const useBreadcrumb = ({\n meta: metaFromProps = {},\n}: UseBreadcrumbProps = {}): UseBreadcrumbReturnType => {\n const routerType = useRouterType();\n const { i18nProvider } = useContext(TranslationContext);\n const parsed = useParsed();\n\n const translate = useTranslate();\n\n const { resources, resource, action } = useResource();\n\n const breadcrumbs: BreadcrumbsType[] = [];\n\n if (!resource?.name) {\n return { breadcrumbs };\n }\n\n const addBreadcrumb = (parentName: string | IResourceItem) => {\n const parentResource =\n typeof parentName === \"string\"\n ? pickResource(\n parentName,\n resources,\n routerType === \"legacy\",\n ) ?? { name: parentName }\n : parentName;\n\n if (parentResource) {\n const grandParentName = pickNotDeprecated(\n parentResource?.meta?.parent,\n parentResource?.parentName,\n );\n if (grandParentName) {\n addBreadcrumb(grandParentName);\n }\n const listActionOfResource = getActionRoutesFromResource(\n parentResource,\n resources,\n routerType === \"legacy\",\n ).find((r) => r.action === \"list\");\n\n const hrefRaw = listActionOfResource?.resource?.list\n ? listActionOfResource?.route\n : undefined;\n\n const href = hrefRaw\n ? routerType === \"legacy\"\n ? hrefRaw\n : composeRoute(hrefRaw, parsed, metaFromProps)\n : undefined;\n\n breadcrumbs.push({\n label:\n pickNotDeprecated(\n parentResource.meta?.label,\n parentResource.options?.label,\n ) ??\n translate(\n `${parentResource.name}.${parentResource.name}`,\n humanizeString(parentResource.name),\n ),\n href: href,\n icon: pickNotDeprecated(\n parentResource.meta?.icon,\n parentResource.options?.icon,\n parentResource.icon,\n ),\n });\n }\n };\n\n addBreadcrumb(resource);\n\n if (action && action !== \"list\") {\n const key = `actions.${action}`;\n const actionLabel = translate(key);\n if (typeof i18nProvider !== \"undefined\" && actionLabel === key) {\n warnOnce(\n true,\n `[useBreadcrumb]: Breadcrumb missing translate key for the \"${action}\" action. Please add \"actions.${action}\" key to your translation file.\\nFor more information, see https://refine.dev/docs/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 { useTranslate, useResource, useParsed, useRouterContext } from \"..\";\nimport { userFriendlyResourceName, pickNotDeprecated } from \"@definitions\";\nimport { useRouterType } from \"../../contexts/router-picker\";\nimport { createResourceKey } from \"../../definitions/helpers/menu/create-resource-key\";\nimport { useGetToPath } from \"../router/use-get-to-path/index\";\nimport { getParentResource } from \"@definitions/helpers/router\";\nimport {\n FlatTreeItem,\n createTree,\n} from \"@definitions/helpers/menu/create-tree\";\n\ntype UseMenuReturnType = {\n defaultOpenKeys: string[];\n selectedKey: string;\n menuItems: TreeMenuItem[];\n};\n\nexport type UseMenuProps = {\n meta?: Record<string, any>;\n hideOnMissingParameter?: boolean;\n};\n\nexport type TreeMenuItem = FlatTreeItem & {\n route?: string;\n icon?: React.ReactNode;\n label?: string;\n children: TreeMenuItem[];\n};\n\nconst getCleanPath = (pathname: string) => {\n return pathname\n .split(\"?\")[0]\n .split(\"#\")[0]\n .replace(/(.+)(\\/$)/, \"$1\");\n};\n\n/**\n * `useMenu` is used to get menu items of the default sidebar.\n * These items include a link to dashboard page (if it exists) and links to the user defined resources\n * (passed as children to {@link https://refine.dev/docs/core/components/refine-config `<Refine>`}).\n * This hook can also be used to build custom menus, which is also used by default sidebar to show menu items.\n *\n * @see {@link https://refine.dev/docs/core/hooks/ui/useMenu} for more details.\n */\nexport const useMenu = (\n { meta, hideOnMissingParameter }: UseMenuProps = {\n hideOnMissingParameter: true,\n },\n): UseMenuReturnType => {\n const translate = useTranslate();\n\n const getToPath = useGetToPath();\n const routerType = useRouterType();\n const { resource, resources } = useResource();\n const { pathname } = useParsed();\n const { useLocation } = useRouterContext();\n const { pathname: legacyPath } = useLocation();\n\n const cleanPathname =\n routerType === \"legacy\"\n ? getCleanPath(legacyPath)\n : pathname\n ? getCleanPath(pathname)\n : undefined;\n\n const cleanRoute = `/${(cleanPathname ?? \"\").replace(/^\\//, \"\")}`;\n\n const selectedKey = resource\n ? createResourceKey(resource, resources, routerType === \"legacy\")\n : cleanRoute ?? \"\";\n\n const defaultOpenKeys = React.useMemo(() => {\n if (!resource) return [];\n let parent = getParentResource(resource, resources);\n const keys = [createResourceKey(resource, resources)];\n while (parent) {\n keys.push(createResourceKey(parent, resources));\n parent = getParentResource(parent, resources);\n }\n return keys;\n }, []);\n\n const prepareItem = React.useCallback(\n (item: FlatTreeItem): TreeMenuItem | undefined => {\n if (item?.meta?.hide ?? item?.options?.hide) return undefined;\n if (!item?.list && item.children.length === 0) return undefined;\n\n const composed = item.list\n ? getToPath({\n resource: item,\n action: \"list\",\n legacy: routerType === \"legacy\",\n meta,\n })\n : undefined;\n\n if (\n hideOnMissingParameter &&\n composed &&\n composed.match(/(\\/|^):(.+?)(\\/|$){1}/)\n )\n return undefined;\n\n return {\n ...item,\n route: composed,\n icon: pickNotDeprecated(\n item.meta?.icon,\n item.options?.icon,\n item.icon,\n ),\n label:\n pickNotDeprecated(\n item?.meta?.label,\n item?.options?.label,\n ) ??\n translate(\n `${item.name}.${item.name}`,\n userFriendlyResourceName(item.name, \"plural\"),\n ),\n };\n },\n [routerType, meta, translate, hideOnMissingParameter],\n );\n\n const treeItems = React.useMemo(() => {\n const treeMenuItems = createTree(resources, routerType === \"legacy\");\n\n // add paths to items and their nodes recursively\n const prepare = (items: TreeMenuItem[]): TreeMenuItem[] => {\n return items.flatMap((item) => {\n const preparedNodes = prepare(item.children);\n const newItem = prepareItem({\n ...item,\n children: preparedNodes,\n });\n\n if (!newItem) return [];\n\n return [newItem];\n });\n };\n\n return prepare(treeMenuItems);\n }, [resources, routerType, prepareItem]);\n\n return {\n defaultOpenKeys,\n selectedKey,\n menuItems: treeItems,\n };\n};\n","import { IResourceItem } from \"../../../interfaces\";\nimport {\n getParentResource,\n removeLeadingTrailingSlashes,\n} from \"../../helpers/router\";\n\nexport const createResourceKey = (\n resource: IResourceItem,\n resources: IResourceItem[],\n legacy = false,\n) => {\n const parents: IResourceItem[] = [];\n\n let currentParentResource = getParentResource(resource, resources);\n while (currentParentResource) {\n parents.push(currentParentResource);\n currentParentResource = getParentResource(\n currentParentResource,\n resources,\n );\n }\n parents.reverse();\n\n const key = [...parents, resource]\n .map((r) =>\n removeLeadingTrailingSlashes(\n (legacy ? r.route : undefined) ?? r.identifier ?? r.name,\n ),\n )\n .join(\"/\");\n\n return `/${key.replace(/^\\//, \"\")}`;\n};\n","import { IResourceItem } from \"@contexts/resource\";\nimport { getParentResource } from \"../router\";\nimport { createResourceKey } from \"./create-resource-key\";\n\nexport type Tree = {\n item: IResourceItem;\n children: { [key: string]: Tree };\n};\n\nexport type FlatTreeItem = IResourceItem & {\n key: string;\n children: FlatTreeItem[];\n};\n\nexport const createTree = (\n resources: IResourceItem[],\n legacy = false,\n): FlatTreeItem[] => {\n const root: Tree = {\n item: {\n name: \"__root__\",\n },\n children: {},\n };\n\n resources.forEach((resource) => {\n const parents: IResourceItem[] = [];\n\n let currentParent = getParentResource(resource, resources);\n while (currentParent) {\n parents.push(currentParent);\n currentParent = getParentResource(currentParent, resources);\n }\n parents.reverse();\n\n let currentTree = root;\n\n parents.forEach((parent) => {\n const key =\n (legacy ? parent.route : undefined) ??\n parent.identifier ??\n parent.name;\n\n if (!currentTree.children[key]) {\n currentTree.children[key] = {\n item: parent,\n children: {},\n };\n }\n currentTree = currentTree.children[key];\n });\n\n const key =\n (legacy ? resource.route : undefined) ??\n resource.identifier ??\n resource.name;\n\n if (!currentTree.children[key]) {\n currentTree.children[key] = {\n item: resource,\n children: {},\n };\n }\n });\n\n const flatten = (tree: Tree): FlatTreeItem[] => {\n const items: FlatTreeItem[] = [];\n\n Object.keys(tree.children).forEach((key) => {\n const itemKey = createResourceKey(\n tree.children[key].item,\n resources,\n legacy,\n );\n const item: FlatTreeItem = {\n ...tree.children[key].item,\n key: itemKey,\n children: flatten(tree.children[key]),\n };\n items.push(item);\n });\n\n return items;\n };\n\n return flatten(root);\n};\n","import React, { useState } from \"react\";\n\nimport { useLogin, useTranslate } from \"@hooks\";\nimport { useActiveAuthProvider } from \"@definitions/helpers\";\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 authProvider = useActiveAuthProvider();\n const { mutate: login } = useLogin<ILoginForm>({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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 * @param title is not implemented yet.\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, useLink, useRouterType, useLogin } from \"@hooks\";\nimport { useTranslate } from \"@hooks/translate\";\n\nimport { DivPropsType, FormPropsType } from \"../..\";\nimport { useActiveAuthProvider } from \"@definitions/helpers\";\n\ntype LoginProps = LoginPageProps<DivPropsType, DivPropsType, FormPropsType>;\n\nexport const LoginPage: React.FC<LoginProps> = ({\n providers,\n registerLink,\n forgotPasswordLink,\n rememberMe,\n contentProps,\n wrapperProps,\n renderContent,\n formProps,\n title = undefined,\n}) => {\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [remember, setRemember] = useState(false);\n\n const translate = useTranslate();\n\n const authProvider = useActiveAuthProvider();\n const { mutate: login } = useLogin<LoginFormTypes>({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const renderLink = (link: React.ReactNode, text?: string) => {\n if (link) {\n if (typeof link === \"string\") {\n return <ActiveLink to={link}>{text}</ActiveLink>;\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, title) : content}\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport { RegisterPageProps } from \"../../../../../interfaces\";\n\nimport {\n useTranslate,\n useRouterContext,\n useLink,\n useRouterType,\n useRegister,\n} from \"@hooks\";\n\nimport { DivPropsType, FormPropsType } from \"../..\";\nimport { useActiveAuthProvider } from \"@definitions/helpers\";\n\ntype RegisterProps = RegisterPageProps<\n DivPropsType,\n DivPropsType,\n FormPropsType\n>;\n\nexport const RegisterPage: React.FC<RegisterProps> = ({\n providers,\n loginLink,\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title = undefined,\n}) => {\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n\n const translate = useTranslate();\n\n const authProvider = useActiveAuthProvider();\n const { mutate: register, isLoading } = useRegister({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const renderLink = (link: React.ReactNode, text?: string) => {\n if (link) {\n if (typeof link === \"string\") {\n return <ActiveLink to={link}>{text}</ActiveLink>;\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, title) : content}\n </div>\n );\n};\n","import React, { useState } from \"react\";\n\nimport {\n useTranslate,\n useRouterContext,\n useLink,\n useRouterType,\n useForgotPassword,\n} 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 title = undefined,\n}) => {\n const translate = useTranslate();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\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 <ActiveLink to={link}>{text}</ActiveLink>;\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, title) : 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 \"../..\";\nimport { useActiveAuthProvider } from \"@definitions/helpers\";\n\ntype UpdatePasswordProps = UpdatePasswordPageProps<\n DivPropsType,\n DivPropsType,\n FormPropsType\n>;\n\nexport const UpdatePasswordPage: React.FC<UpdatePasswordProps> = ({\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title = undefined,\n}) => {\n const translate = useTranslate();\n\n const authProvider = useActiveAuthProvider();\n const { mutate: updatePassword, isLoading } =\n useUpdatePassword<UpdatePasswordFormTypes>({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\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, title) : 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 * @deprecated `ReadyPage` is deprecated and will be removed in the next major release.\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, { useState } from \"react\";\n\nimport { useMediaQuery } from \"@definitions/helpers\";\n\ntype CardInfo = {\n title: string;\n description: string;\n link: string;\n icon: React.ReactNode;\n};\n\nconst CARDS: CardInfo[] = [\n {\n title: \"Documentation\",\n description:\n \"Learn about the technical details of using refine in your projects.\",\n link: \"https://refine.dev/\",\n icon: (\n <svg\n width=\"14\"\n height=\"16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5a1 1 0 0 0-1-1H3a1 1 0 0 1 0-2h10a1 1 0 1 0 0-2H2Z\"\n fill=\"#fff\"\n />\n </svg>\n ),\n },\n {\n title: \"Tutorial\",\n description:\n \"Learn how to use refine by building a fully-functioning CRUD app, from scratch to full launch.\",\n link: \"https://refine.dev/docs/tutorial/introduction/index/\",\n icon: (\n <svg\n width=\"16\"\n height=\"14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0 4.573c0-.475.163-.948.53-1.25a4.57 4.57 0 0 1 .854-.553L5.956.485a4.571 4.571 0 0 1 4.088 0l4.572 2.285c.308.154.594.34.853.553.306.251.47.62.517 1.01.01.055.014.112.014.169v6.5a1 1 0 0 1-2 0V6.684l-3.956 1.978a4.571 4.571 0 0 1-4.088 0L1.384 6.376a4.57 4.57 0 0 1-.853-.553C.163 5.522 0 5.05 0 4.573Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M5.061 13.305 3 12.274V9.42l2.061 1.031a6.571 6.571 0 0 0 5.878 0L13 9.421v2.853l-2.061 1.03a6.571 6.571 0 0 1-5.878 0Z\"\n fill=\"#fff\"\n />\n </svg>\n ),\n },\n {\n title: \"Examples\",\n description:\n \"A collection of reference applications you can use as a starting point.\",\n link: \"https://refine.dev/examples\",\n icon: (\n <svg\n width=\"16\"\n height=\"16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4H0V2Zm3 2a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm4-1a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm2 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\"\n fill=\"#fff\"\n />\n <path\n d=\"M0 14V8h16v6a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2Z\"\n fill=\"#fff\"\n />\n </svg>\n ),\n },\n {\n title: \"Community\",\n description:\n \"Join our Discord community and keep up with the latest news.\",\n link: \"https://discord.gg/refine\",\n icon: (\n <svg\n width=\"16\"\n height=\"12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.553 1.005A13.334 13.334 0 0 0 10.253 0c-.156.276-.298.56-.423.85a12.42 12.42 0 0 0-3.664 0A8.975 8.975 0 0 0 5.744 0 13.43 13.43 0 0 0 2.44 1.007C.351 4.066-.215 7.05.068 9.99A13.36 13.36 0 0 0 4.116 12c.328-.436.618-.9.867-1.384a8.647 8.647 0 0 1-1.365-.645c.115-.082.227-.167.335-.249a9.594 9.594 0 0 0 8.094 0c.11.089.222.173.335.25-.436.254-.894.47-1.368.646.249.484.539.946.867 1.382a13.3 13.3 0 0 0 4.051-2.01c.332-3.41-.568-6.365-2.379-8.985Zm-8.21 7.176c-.79 0-1.442-.709-1.442-1.58 0-.872.63-1.587 1.439-1.587s1.456.715 1.442 1.586c-.014.872-.636 1.58-1.44 1.58Zm5.315 0c-.79 0-1.44-.709-1.44-1.58 0-.872.63-1.587 1.44-1.587.81 0 1.452.715 1.438 1.586-.014.872-.634 1.58-1.438 1.58Z\"\n fill=\"#fff\"\n />\n </svg>\n ),\n },\n];\n\n/**\n * It is a page that welcomes you after the configuration is completed.\n */\nexport const WelcomePage: React.FC = () => {\n const isTablet = useMediaQuery(\"(max-width: 1010px)\");\n const isMobile = useMediaQuery(\"(max-width: 650px)\");\n\n const getGridTemplateColumns = () => {\n if (isMobile) {\n return \"1, 280px\";\n } else if (isTablet) {\n return \"2, 280px\";\n } else {\n return \"4, 208px\";\n }\n };\n\n const getHeaderFontSize = () => {\n if (isMobile) {\n return \"32px\";\n } else if (isTablet) {\n return \"40px\";\n } else {\n return \"48px\";\n }\n };\n\n const getSubHeaderFontSize = () => {\n if (isMobile) {\n return \"16px\";\n } else if (isTablet) {\n return \"20px\";\n } else {\n return \"24px\";\n }\n };\n\n return (\n <div\n style={{\n backgroundImage:\n \"url(https://refine.ams3.cdn.digitaloceanspaces.com/welcome-page/welcome-page.webp)\",\n backgroundPosition: \"center top\",\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\",\n minHeight: \"100vh\",\n backgroundColor: \"#0D0D12\",\n fontFamily: \"Arial\",\n color: \"#FFFFFF\",\n }}\n >\n <div style={{ height: \"89px\" }}></div>\n <div style={{ display: \"flex\", justifyContent: \"center\" }}>\n <img\n src=\"https://refine.ams3.cdn.digitaloceanspaces.com/welcome-page/welcome-logo.webp\"\n width=\"198\"\n height=\"54\"\n />\n </div>\n <div\n style={{\n height: isTablet ? \"270px\" : \"22vw\",\n minHeight: isTablet ? \"270px\" : \"313px\",\n }}\n ></div>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\",\n textAlign: \"center\",\n }}\n >\n <h1\n style={{\n fontSize: getHeaderFontSize(),\n fontWeight: 700,\n margin: \"0px\",\n }}\n >\n Welcome Aboard!\n </h1>\n <h4\n style={{\n fontSize: getSubHeaderFontSize(),\n fontWeight: 400,\n margin: \"0px\",\n }}\n >\n Your configuration is completed.\n </h4>\n </div>\n <div style={{ height: \"64px\" }}></div>\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${getGridTemplateColumns()})`,\n justifyContent: \"center\",\n gap: \"48px\",\n paddingRight: \"16px\",\n paddingLeft: \"16px\",\n maxWidth: \"976px\",\n margin: \"auto\",\n }}\n >\n {CARDS.map((card) => (\n <Card key={`welcome-page-${card.title}`} card={card} />\n ))}\n </div>\n <div style={{ height: \"64px\" }}></div>\n </div>\n );\n};\n\ntype CardProps = {\n card: CardInfo;\n};\n\nconst Card: React.FC<CardProps> = ({ card }) => {\n const { title, description, icon, link } = card;\n\n const [isHover, setIsHover] = useState(false);\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <a\n onPointerEnter={() => setIsHover(true)}\n onPointerLeave={() => setIsHover(false)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n color: \"#fff\",\n textDecoration: \"none\",\n }}\n href={link}\n >\n {icon}\n <span\n style={{\n fontSize: \"16px\",\n fontWeight: 700,\n marginLeft: \"13px\",\n marginRight: \"14px\",\n }}\n >\n {title}\n </span>\n <svg\n style={{\n transition:\n \"transform 0.5s ease-in-out, opacity 0.2s ease-in-out\",\n ...(isHover && {\n transform: \"translateX(4px)\",\n opacity: 1,\n }),\n }}\n width=\"12\"\n height=\"8\"\n fill=\"none\"\n opacity=\"0.5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.293.293a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1 0 1.414l-3 3a1 1 0 0 1-1.414-1.414L8.586 5H1a1 1 0 0 1 0-2h7.586L7.293 1.707a1 1 0 0 1 0-1.414Z\"\n fill=\"#fff\"\n />\n </svg>\n </a>\n </div>\n <span\n style={{\n fontSize: \"12px\",\n opacity: 0.5,\n lineHeight: \"16px\",\n }}\n >\n {description}\n </span>\n </div>\n );\n};\n","import React from \"react\";\nimport { QueryClientProvider, QueryClient } from \"@tanstack/react-query\";\nimport { ReactQueryDevtools } from \"@tanstack/react-query-devtools\";\n\nimport {\n AuthBindingsContextProvider,\n LegacyAuthContextProvider,\n} from \"@contexts/auth\";\nimport { DataContextProvider } from \"@contexts/data\";\nimport { LiveContextProvider } from \"@contexts/live\";\nimport { TranslationContextProvider } from \"@contexts/translation\";\nimport { ResourceContextProvider } from \"@contexts/resource\";\nimport { RefineContextProvider } from \"@contexts/refine\";\nimport { UndoableQueueContextProvider } from \"@contexts/undoableQueue\";\nimport { UnsavedWarnContextProvider } from \"@contexts/unsavedWarn\";\nimport { LegacyRouterContextProvider } from \"@contexts/legacy-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 } from \"@definitions\";\nimport { Telemetry } from \"@components/telemetry\";\nimport { useDeepMemo } from \"@hooks/deepMemo\";\nimport { RouterBindings } from \"src/interfaces/bindings\";\n\nimport {\n IDataContextProvider,\n I18nProvider,\n LayoutProps,\n TitleProps,\n IRouterProvider,\n ILiveContext,\n LiveModeProps,\n IDataMultipleContextProvider,\n LegacyAuthProvider,\n NotificationProvider,\n AccessControlProvider,\n AuditLogProvider,\n DashboardPageProps,\n IRefineOptions,\n INotificationContext,\n AuthBindings,\n} from \"../../../interfaces\";\nimport { RouterBindingsProvider } from \"../../../contexts/router\";\nimport { ResourceProps } from \"../../../interfaces/bindings/resource\";\nimport { RouterPickerProvider } from \"@contexts/router-picker\";\nimport { useRouterMisuseWarning } from \"../../../hooks/router/use-router-misuse-warning/index\";\n\nexport interface RefineProps {\n children?: React.ReactNode;\n /**\n * `resources` is the predefined interaction points for a refine app. A resource represents an entity in an endpoint in the API.\n * While this is not a required property, it is used in resource detection and creation of routes for the app.\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 * @deprecated This property is deprecated and was the legacy way of routing. Please use `routerProvider` with new router bindings instead.\n */\n legacyRouterProvider?: IRouterProvider;\n /**\n * Router bindings for **refine**. A simple interface for **refine** to interact with your router in a flexible way.\n * @type [`RouterBindings`](/docs/api-reference/core/bindings/router/)\n */\n routerProvider?: RouterBindings;\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 [`AuthBindings`](/docs/api-reference/core/providers/auth-provider/)\n */\n authProvider?: AuthBindings;\n /**\n * `legacyAuthProvider` 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 * @deprecated `legacyAuthProvider` is deprecated with refine@4, use `authProvider` instead.\n */\n legacyAuthProvider?: LegacyAuthProvider;\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 * @deprecated Please use the `catchAll` element in your routes instead.\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 * @deprecated Please use the `LoginPage` component in your routes instead.\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 * @deprecated Please use the `DashboardPage` component in your routes instead.\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 * @deprecated This component is only used with the legacy router and will be removed in the future.\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 * @deprecated Please use the `Layout` component as a children instead of a prop.\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 * @deprecated Please pass the `Sider` component to your `Layout` component.\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 * @deprecated Please pass the `Header` component to your `Layout` component.\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 * @deprecated Please pass the `Footer` component to your `Layout` component.\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 * @deprecated Please use your `OffLayoutArea` component as a children instead of a prop.\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 * @deprecated Please pass the `Title` component to your `Layout` component.\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\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 legacyAuthProvider,\n authProvider,\n dataProvider,\n legacyRouterProvider,\n routerProvider,\n notificationProvider,\n accessControlProvider,\n auditLogProvider,\n resources,\n DashboardPage,\n ReadyPage,\n LoginPage,\n catchAll,\n children,\n liveProvider,\n i18nProvider,\n Title,\n Layout,\n Sider,\n Header,\n Footer,\n OffLayoutArea,\n onLiveEvent,\n options,\n}) => {\n const {\n optionsWithDefaults,\n disableTelemetryWithDefault,\n reactQueryWithDefaults,\n } = handleRefineOptions({\n options,\n });\n\n const queryClient = useDeepMemo(() => {\n if (reactQueryWithDefaults.clientConfig instanceof QueryClient) {\n return reactQueryWithDefaults.clientConfig;\n }\n\n return new QueryClient({\n ...reactQueryWithDefaults.clientConfig,\n defaultOptions: {\n ...reactQueryWithDefaults.clientConfig.defaultOptions,\n queries: {\n refetchOnWindowFocus: false,\n 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 /**\n * Warn our users if they are using the old way of routing in the wrong prop.\n */\n useRouterMisuseWarning(routerProvider);\n /** */\n\n /**\n * `<ReadyPage />` is only used in the legacy routing and is not used in the new routing.\n * If `legacyRouterProvider` is provided and `routerProvider` is not, we'll check for the `resources` prop to be empty.\n * If `resources` is empty, then we'll render `<ReadyPage />` component.\n */\n if (\n legacyRouterProvider &&\n !routerProvider &&\n (resources ?? []).length === 0\n ) {\n return ReadyPage ? <ReadyPage /> : <DefaultReadyPage />;\n }\n\n /** Router\n *\n * Handle routing from `RouterBindingsProvider` and `router` prop for the brand new way\n * If `router` is not provided, then we'r checking for `routerProvider` prop\n * If `routerProvider` is provided, then `RouterContextProvider` is used\n * If none of them is provided, then `RouterBindingsProvider` is used because it supports undefined router\n *\n * `RouterContextProvider` is skipped whenever possible and by this way,\n * we can achieve backward compability only when its provided by user\n *\n */\n const { RouterComponent = React.Fragment } = !routerProvider\n ? legacyRouterProvider ?? {}\n : {};\n /** */\n\n return (\n <QueryClientProvider client={queryClient}>\n <NotificationContextProvider {...notificationProviderContextValues}>\n <LegacyAuthContextProvider\n {...(legacyAuthProvider ?? {})}\n isProvided={Boolean(legacyAuthProvider)}\n >\n <AuthBindingsContextProvider\n {...(authProvider ?? {})}\n isProvided={Boolean(authProvider)}\n >\n <DataContextProvider {...dataProvider}>\n <LiveContextProvider liveProvider={liveProvider}>\n <RouterPickerProvider\n value={\n legacyRouterProvider && !routerProvider\n ? \"legacy\"\n : \"new\"\n }\n >\n <RouterBindingsProvider\n router={routerProvider}\n >\n <LegacyRouterContextProvider\n {...legacyRouterProvider}\n >\n <ResourceContextProvider\n resources={resources ?? []}\n >\n <TranslationContextProvider\n i18nProvider={i18nProvider}\n >\n <AccessControlContextProvider\n {...(accessControlProvider ??\n {})}\n >\n <AuditLogContextProvider\n {...(auditLogProvider ??\n {})}\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={\n Title\n }\n undoableTimeout={\n optionsWithDefaults.undoableTimeout\n }\n catchAll={\n catchAll\n }\n DashboardPage={\n DashboardPage\n }\n LoginPage={\n LoginPage\n }\n Layout={\n Layout\n }\n Sider={\n Sider\n }\n Footer={\n Footer\n }\n Header={\n Header\n }\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 {\n children\n }\n {!disableTelemetryWithDefault && (\n <Telemetry />\n )}\n <RouteChangeHandler />\n </RouterComponent>\n </UnsavedWarnContextProvider>\n </RefineContextProvider>\n </UndoableQueueContextProvider>\n </AuditLogContextProvider>\n </AccessControlContextProvider>\n </TranslationContextProvider>\n </ResourceContextProvider>\n </LegacyRouterContextProvider>\n </RouterBindingsProvider>\n </RouterPickerProvider>\n </LiveContextProvider>\n </DataContextProvider>\n </AuthBindingsContextProvider>\n </LegacyAuthContextProvider>\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 { useAuthBindingsContext, useLegacyAuthContext } from \"@contexts/auth\";\nimport { AuditLogContext } from \"@contexts/auditLog\";\nimport { LiveContext } from \"@contexts/live\";\nimport { RouterContext } from \"@contexts/legacy-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\";\nimport { useIsExistAuthentication } from \"..\";\n\n// It reads and updates from package.json during build. ref: tsup.config.ts\nconst REFINE_VERSION = \"4.5.10\";\n\nexport const useTelemetryData = (): ITelemetryData => {\n const auth = useIsExistAuthentication();\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 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 { IRouterProvider, RouterBindings } from \"src/interfaces\";\n\nexport const checkRouterPropMisuse = (\n value: IRouterProvider | RouterBindings,\n) => {\n // check if `routerProvider` prop is passed with legacy properties.\n // If yes, console.warn the user to use `legacyRuterProvider` prop instead.\n const bindings = [\"go\", \"parse\", \"back\", \"Link\"];\n\n // check if `value` contains properties other than `bindings`\n const otherProps = Object.keys(value).filter(\n (key) => !bindings.includes(key),\n );\n\n const hasOtherProps = otherProps.length > 0;\n\n if (hasOtherProps) {\n console.warn(\n `Unsupported properties are found in \\`routerProvider\\` prop. You provided \\`${otherProps.join(\n \", \",\n )}\\`. Supported properties are \\`${bindings.join(\n \", \",\n )}\\`. You may wanted to use \\`legacyRouterProvider\\` prop instead.`,\n );\n\n return true;\n }\n\n return false;\n};\n","import { checkRouterPropMisuse } from \"@definitions/helpers/check-router-prop-misuse\";\nimport React from \"react\";\nimport { RouterBindings } from \"src/interfaces\";\n\nexport const useRouterMisuseWarning = (value?: RouterBindings) => {\n const warned = React.useRef(false);\n\n React.useEffect(() => {\n if (warned.current === false) {\n if (value) {\n const warn = checkRouterPropMisuse(value);\n if (warn) {\n warned.current = true;\n }\n }\n }\n }, [value]);\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { 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 *\n * @deprecated This component is obsolete and only works with the legacy router providers.\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 {\n useGo,\n useNavigation,\n useParsed,\n useRouterContext,\n useRouterType,\n useIsAuthenticated,\n} from \"@hooks\";\nimport { useActiveAuthProvider } from \"@definitions/index\";\nimport { GoConfig } from \"src/interfaces\";\n\n/**\n * This hook is used to avoid React's invalid setState call warning.\n * When `go` is called during the render phase, it's updating the internal router state before the render phase is finished.\n * This causes React to throw an error. This hook is used to defer the `go` call to the effect calls.\n */\nconst useDeferredGo = () => {\n const go = useGo();\n\n const [config, setConfig] = React.useState<GoConfig | undefined>(undefined);\n\n React.useEffect(() => {\n if (config) {\n go(config);\n }\n }, [config]);\n\n const cb = React.useCallback(\n (props: GoConfig) => {\n if (!config) {\n setConfig(props);\n }\n },\n [config],\n );\n\n return cb;\n};\n\nexport type AuthenticatedCommonProps = {\n /**\n * Whether to redirect user if not logged in or not.\n * If not set, user will be redirected to `redirectTo` property of the `check` function's response.\n * This behavior is only available for new auth providers.\n * Legacy auth providers will redirect to `/login` by default if this property is not set.\n * If set to a string, user will be redirected to that string.\n *\n * This property only works if `fallback` is **not set**.\n */\n redirectOnFail?: string | true;\n /**\n * Whether to append current path to search params of the redirect url at `to` property.\n *\n * By default, `to` parameter is used by successful invocations of the `useLogin` hook.\n * If `to` present, it will be used as the redirect url after successful login.\n */\n appendCurrentPathToQuery?: boolean;\n /**\n * Content to show if user is not logged in.\n */\n fallback?: React.ReactNode;\n /**\n * Content to show while checking whether user is logged in or not.\n */\n loading?: React.ReactNode;\n /**\n * Content to show if user is logged in\n */\n children?: React.ReactNode;\n};\n\nexport type LegacyAuthenticatedProps = {\n v3LegacyAuthProviderCompatible: true;\n} & AuthenticatedCommonProps;\n\nexport type AuthenticatedProps = {\n v3LegacyAuthProviderCompatible?: false;\n} & AuthenticatedCommonProps;\n\nexport function Authenticated(\n props: LegacyAuthenticatedProps,\n): JSX.Element | null;\n\nexport function Authenticated(props: AuthenticatedProps): JSX.Element | null;\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 function Authenticated({\n redirectOnFail = true,\n appendCurrentPathToQuery = true,\n children,\n fallback: fallbackContent,\n loading: loadingContent,\n}: AuthenticatedProps | LegacyAuthenticatedProps): JSX.Element | null {\n const activeAuthProvider = useActiveAuthProvider();\n const routerType = useRouterType();\n\n const hasAuthProvider = Boolean(activeAuthProvider?.isProvided);\n const isLegacyAuth = Boolean(activeAuthProvider?.isLegacy);\n const isLegacyRouter = routerType === \"legacy\";\n\n const parsed = useParsed();\n const go = useGo();\n const deferredGo = useDeferredGo();\n const { replace } = useNavigation();\n const { useLocation } = useRouterContext();\n const legacyLocation = useLocation();\n\n const {\n isLoading,\n isFetching,\n // isRefetching,\n isSuccess,\n data: {\n authenticated: isAuthenticatedStatus,\n redirectTo: authenticatedRedirect,\n } = {},\n refetch,\n } = useIsAuthenticated({\n v3LegacyAuthProviderCompatible: isLegacyAuth,\n });\n\n React.useEffect(() => {\n /**\n * Refetch the authentication status if the content is changed (e.g. redirected or updated)\n *\n * This is done to avoid re-rendering the wrappers with the same content.\n */\n\n refetch();\n }, [children, fallbackContent]);\n\n const state = React.useRef<{\n status: \"initial\" | \"pending\" | \"settled\";\n content: React.ReactNode;\n }>({\n status: isLoading ? \"initial\" : \"pending\",\n content: loadingContent ?? null,\n });\n\n /**\n * Update state when fetching the authentication response.\n */\n if (isFetching) {\n state.current.status = \"pending\";\n } else if (!isFetching) {\n state.current.status = \"settled\";\n }\n\n /**\n * Authentication status\n */\n const isAuthenticated = hasAuthProvider\n ? isLegacyAuth\n ? isSuccess\n : isAuthenticatedStatus\n : true;\n\n if (state.current.status === \"settled\") {\n /**\n * If the state is settled, and query is resolved.\n */\n if (isAuthenticated) {\n /**\n * If user is authenticated, show the children.\n */\n state.current.content = <>{children ?? null}</>;\n } else if (typeof fallbackContent !== \"undefined\") {\n /**\n * If user is not authenticated, and `fallback` is present, show the fallback content.\n */\n state.current.content = <>{fallbackContent}</>;\n } else {\n /**\n * If there's no `fallback` content, redirect will be applied.\n */\n\n /**\n * Current pathname to append to the redirect url.\n */\n const pathname = `${\n isLegacyRouter ? legacyLocation?.pathname : parsed.pathname\n }`.replace(/(\\?.*|#.*)$/, \"\");\n\n /**\n * Redirect url to use, if `redirectOnFail` is set to a string,\n * it will be used instead of `redirectTo` property of the `check` function's response.\n */\n const appliedRedirect = isLegacyAuth\n ? typeof redirectOnFail === \"string\"\n ? redirectOnFail\n : \"/login\"\n : typeof redirectOnFail === \"string\"\n ? redirectOnFail\n : (authenticatedRedirect as string | undefined);\n\n /**\n * Redirect if `appliedRedirect` is set.\n */\n if (appliedRedirect) {\n if (isLegacyRouter) {\n const toQuery = appendCurrentPathToQuery\n ? `?to=${encodeURIComponent(pathname)}`\n : \"\";\n replace(`${appliedRedirect}${toQuery}`);\n } else {\n deferredGo({\n to: appliedRedirect,\n query: appendCurrentPathToQuery\n ? {\n to: parsed.params?.to\n ? parsed.params.to\n : go({\n to: pathname,\n options: { keepQuery: true },\n type: \"path\",\n }),\n }\n : undefined,\n type: \"replace\",\n });\n }\n }\n }\n }\n\n /**\n * If there's no `authProvider` set, we don't need to check whether user is logged in or not.\n */\n if (!hasAuthProvider) {\n return <>{children ?? null}</>;\n }\n\n /**\n * Returning the content based on the state, `fallback` or `children`.\n */\n return <>{state.current.content}</>;\n}\n","import { useEffect } from \"react\";\nimport { useRouterContext } from \"@hooks\";\nimport { useLegacyAuthContext } from \"@contexts/auth\";\n\nexport const RouteChangeHandler: React.FC = () => {\n const { useLocation } = useRouterContext();\n\n const { checkAuth } = useLegacyAuthContext();\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 {\n useCan,\n useParsed,\n useResource,\n useResourceWithRoute,\n useRouterContext,\n useRouterType,\n} from \"@hooks\";\nimport {\n BaseKey,\n IResourceItem,\n ITreeMenu,\n ResourceRouterParams,\n} from \"../../interfaces\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\n\ntype CanAccessBaseProps = {\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n /**\n * Intended action on resource\n */\n action: string;\n /**\n * Parameters associated with the resource\n * @type { resource?: [IResourceItem](https://refine.dev/docs/api-reference/core/interfaceReferences/#canparams), id?: [BaseKey](https://refine.dev/docs/api-reference/core/interfaceReferences/#basekey), [key: string]: any }\n */\n params?: {\n resource?: IResourceItem & { children?: ITreeMenu[] };\n id?: BaseKey;\n [key: string]: any;\n };\n /**\n * Content to show if access control returns `false`\n */\n fallback?: React.ReactNode;\n children: React.ReactNode;\n};\n\ntype CanAccessWithoutParamsProps = {\n [key in Exclude<\n keyof CanAccessBaseProps,\n \"fallback\" | \"children\"\n >]?: undefined;\n} & {\n [key in \"fallback\" | \"children\"]?: CanAccessBaseProps[key];\n};\n\nexport type CanAccessProps = CanAccessBaseProps | CanAccessWithoutParamsProps;\n\nexport const CanAccess: React.FC<CanAccessProps> = ({\n resource: resourceFromProp,\n action,\n params,\n fallback,\n children,\n ...rest\n}) => {\n const routerType = useRouterType();\n const { resources } = useResource();\n const { useParams } = useRouterContext();\n const {\n resource: resourceFromRouter,\n id: idFromRouter,\n action: actionFromRouter,\n } = useParsed();\n\n const {\n resource: legacyResourceFromRoute,\n id: legacyIdFromParams,\n action: legacyActionFromParams,\n } = useParams<ResourceRouterParams>();\n\n const newResourceNameFromRouter = resourceFromRouter?.name;\n\n /** We only accept `id` from URL params if `resource` is not explicitly passed. */\n /** This is done to avoid sending wrong requests for custom `resource` and an async `id` */\n const defaultId =\n !resourceFromProp ||\n resourceFromProp ===\n (routerType === \"legacy\"\n ? legacyResourceFromRoute\n : newResourceNameFromRouter)\n ? params?.id ??\n (routerType === \"legacy\" ? legacyIdFromParams : idFromRouter)\n : params?.id;\n\n /** `resourceName` fallback value depends on the router type */\n const resourceName =\n resourceFromProp ??\n (routerType === \"legacy\"\n ? legacyResourceFromRoute\n : newResourceNameFromRouter);\n\n let resource: IResourceItem | undefined;\n\n const resourceWithRoute = useResourceWithRoute();\n\n if (routerType === \"legacy\") {\n if (resourceName) {\n resource = resourceWithRoute(resourceName);\n }\n } else {\n /** If `resource` is provided by the user, then try to pick the resource of create a dummy one */\n if (resourceFromProp) {\n const picked = pickResource(resourceFromProp, resources);\n if (picked) {\n resource = picked;\n } else {\n resource = {\n name: resourceFromProp,\n route: resourceFromProp,\n };\n }\n } else {\n /** If `resource` is not provided, check the resource from the router params */\n if (typeof resourceFromRouter === \"string\") {\n const picked = pickResource(resourceFromRouter, resources);\n if (picked) {\n resource = picked;\n } else {\n resource = {\n name: resourceFromRouter,\n route: resourceFromRouter,\n };\n }\n } else {\n /** If `resource` is passed as an IResourceItem, use it or `resource` is undefined and cannot be inferred. */\n resource = resourceFromRouter;\n }\n }\n }\n\n const { data } = useCan({\n resource: resourceFromProp ?? resource?.name,\n action:\n action ??\n (routerType === \"legacy\"\n ? legacyActionFromParams\n : actionFromRouter) ??\n \"\",\n params: params ?? {\n id: defaultId,\n resource: resource,\n },\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","export type { RefineBreadcrumbProps } from \"./types\";\n\nexport type {\n RefineButtonCommonProps,\n RefineButtonDataProps,\n RefineButtonLinkingProps,\n RefineButtonResourceProps,\n RefineButtonSingleProps,\n RefineCloneButtonProps,\n RefineCreateButtonProps,\n RefineDeleteButtonProps,\n RefineEditButtonProps,\n RefineExportButtonProps,\n RefineImportButtonProps,\n RefineListButtonProps,\n RefineRefreshButtonProps,\n RefineSaveButtonProps,\n RefineShowButtonProps,\n} from \"./types\";\n\nexport type {\n RefineCrudCreateProps,\n RefineCrudEditProps,\n RefineCrudListProps,\n RefineCrudShowProps,\n ActionButtonRenderer,\n} from \"./types\";\n\nexport type { RefineErrorPageProps, RefineReadyPageProps } from \"./types\";\n\nexport type {\n RefineFieldBooleanProps,\n RefineFieldCommonProps,\n RefineFieldDateProps,\n RefineFieldEmailProps,\n RefineFieldFileProps,\n RefineFieldImageProps,\n RefineFieldUrlProps,\n RefineFieldMarkdownProps,\n RefineFieldNumberProps,\n RefineFieldTagProps,\n RefineFieldTextProps,\n RefineFieldTooltipProps,\n} from \"./types\";\n\nexport type {\n RefineLayoutFooterProps,\n RefineLayoutHeaderProps,\n RefineLayoutLayoutProps,\n RefineLayoutSiderProps,\n RefineLayoutTitleProps,\n RefineThemedLayoutSiderProps,\n RefineThemedLayoutHeaderProps,\n RefineThemedLayoutProps,\n RefineLayoutThemedTitleProps,\n} from \"./types\";\n\nexport { RefineButtonTestIds } from \"./ids\";\n","export const RefineButtonTestIds = {\n CloneButton: \"refine-clone-button\",\n DeleteButton: \"refine-delete-button\",\n EditButton: \"refine-edit-button\",\n SaveButton: \"refine-save-button\",\n CreateButton: \"refine-create-button\",\n ImportButton: \"refine-import-button\",\n ExportButton: \"refine-export-button\",\n ListButton: \"refine-list-button\",\n RefreshButton: \"refine-refresh-button\",\n ShowButton: \"refine-show-button\",\n};\n","import React from \"react\";\nimport { FormInstance, FormProps, Form } from \"antd\";\nimport { useForm as useFormSF } from \"sunflower-antd\";\nimport { ButtonProps } from \"antd\";\n\nimport {\n HttpError,\n BaseRecord,\n useForm as useFormCore,\n UseFormReturnType as UseFormReturnTypeCore,\n useWarnAboutChange,\n UseFormProps as UseFormPropsCore,\n CreateResponse,\n UpdateResponse,\n pickNotDeprecated,\n} from \"@refinedev/core\";\n\nexport type UseFormProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseFormPropsCore<TData, TError, TVariables> & {\n submitOnEnter?: boolean;\n /**\n * Shows notification when unsaved changes exist\n */\n warnWhenUnsavedChanges?: boolean;\n};\n\nexport type UseFormReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseFormReturnTypeCore<TData, TError, TVariables> & {\n form: FormInstance<TVariables>;\n formProps: FormProps<TVariables>;\n saveButtonProps: ButtonProps & {\n onClick: () => void;\n };\n onFinish: (\n values?: TVariables,\n ) => Promise<CreateResponse<TData> | UpdateResponse<TData> | 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 action,\n resource,\n onMutationSuccess: onMutationSuccessProp,\n onMutationError,\n submitOnEnter = false,\n warnWhenUnsavedChanges: warnWhenUnsavedChangesProp,\n redirect,\n successNotification,\n errorNotification,\n meta,\n metaData,\n liveMode,\n liveParams,\n mutationMode,\n dataProviderName,\n onLiveEvent,\n invalidates,\n undoableTimeout,\n queryOptions,\n createMutationOptions,\n updateMutationOptions,\n id: idFromProps,\n}: UseFormProps<TData, TError, TVariables> = {}): UseFormReturnType<\n TData,\n TError,\n TVariables\n> => {\n const [formAnt] = Form.useForm();\n const formSF = useFormSF<TData, TVariables>({\n form: formAnt,\n });\n const { form } = formSF;\n\n const useFormCoreResult = useFormCore<TData, TError, TVariables>({\n onMutationSuccess: onMutationSuccessProp\n ? onMutationSuccessProp\n : undefined,\n onMutationError,\n redirect,\n action,\n resource,\n successNotification,\n errorNotification,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n liveMode,\n liveParams,\n mutationMode,\n dataProviderName,\n onLiveEvent,\n invalidates,\n undoableTimeout,\n queryOptions,\n createMutationOptions,\n updateMutationOptions,\n id: idFromProps,\n });\n\n const { formLoading, onFinish, queryResult, id } = useFormCoreResult;\n\n const {\n warnWhenUnsavedChanges: warnWhenUnsavedChangesRefine,\n setWarnWhen,\n } = useWarnAboutChange();\n const warnWhenUnsavedChanges =\n warnWhenUnsavedChangesProp ?? warnWhenUnsavedChangesRefine;\n\n React.useEffect(() => {\n form.resetFields();\n }, [queryResult?.data?.data, id]);\n\n const onKeyUp = (event: React.KeyboardEvent<HTMLFormElement>) => {\n if (submitOnEnter && event.key === \"Enter\") {\n form.submit();\n }\n };\n\n const onValuesChange = (changeValues: object) => {\n if (changeValues && warnWhenUnsavedChanges) {\n setWarnWhen(true);\n }\n return changeValues;\n };\n\n const saveButtonProps = {\n disabled: formLoading,\n onClick: () => {\n form.submit();\n },\n };\n\n return {\n form: formSF.form,\n formProps: {\n ...formSF.formProps,\n onFinish: (values: TVariables) =>\n onFinish(values).catch((error) => error),\n onKeyUp,\n onValuesChange,\n initialValues: queryResult?.data?.data,\n },\n saveButtonProps,\n ...useFormCoreResult,\n onFinish: async (values?: TVariables) => {\n return await onFinish(values ?? formSF.form.getFieldsValue(true));\n },\n };\n};\n","import React, { useCallback } from \"react\";\nimport { FormInstance, FormProps, ModalProps } from \"antd\";\nimport {\n useModalForm as useModalFormSF,\n UseModalFormConfig as UseModalFormConfigSF,\n} from \"sunflower-antd\";\n\nimport {\n useTranslate,\n useWarnAboutChange,\n HttpError,\n UseFormProps as UseFormPropsCore,\n BaseRecord,\n LiveModeProps,\n BaseKey,\n userFriendlyResourceName,\n useResource,\n FormWithSyncWithLocationParams,\n useParsed,\n useGo,\n} from \"@refinedev/core\";\nimport { useForm, UseFormProps, UseFormReturnType } from \"../useForm\";\n\nexport type useModalFormFromSFReturnType<TData, TVariables> = {\n open: boolean;\n form: FormInstance<TVariables>;\n show: (id?: BaseKey) => void;\n close: () => void;\n modalProps: ModalProps;\n formProps: FormProps<TVariables>;\n formLoading: boolean;\n defaultFormValuesLoading: boolean;\n formValues: {};\n initialValues: {};\n formResult: undefined;\n submit: (values?: TVariables) => Promise<TData>;\n /** @deprecated Please use `open` instead. */\n visible: boolean;\n};\n\ntype useModalFormConfig = {\n action: \"show\" | \"edit\" | \"create\" | \"clone\";\n};\n\nexport type UseModalFormReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = Omit<\n UseFormReturnType<TData, TError, TVariables>,\n \"saveButtonProps\" | \"deleteButtonProps\"\n> &\n useModalFormFromSFReturnType<TData, TVariables>;\n\nexport type UseModalFormProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseFormPropsCore<TData, TError, TVariables> &\n UseFormProps<TData, TError, TVariables> &\n UseModalFormConfigSF &\n useModalFormConfig &\n LiveModeProps &\n FormWithSyncWithLocationParams;\n/**\n * `useModalForm` hook allows you to manage a form within a modal. It returns Ant Design {@link https://ant.design/components/form/ Form} and {@link https://ant.design/components/modal/ Modal} components props.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/form/useModalForm} 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 useModalForm = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n syncWithLocation,\n ...rest\n}: UseModalFormProps<TData, TError, TVariables>): UseModalFormReturnType<\n TData,\n TError,\n TVariables\n> => {\n const initiallySynced = React.useRef(false);\n\n const useFormProps = useForm<TData, TError, TVariables>({\n ...rest,\n });\n\n const { form, formProps, id, setId, formLoading, onFinish } = useFormProps;\n\n const { resource, action: actionFromParams } = useResource(rest.resource);\n\n const parsed = useParsed();\n const go = useGo();\n\n const action = rest.action ?? actionFromParams ?? \"\";\n\n const syncingId =\n typeof syncWithLocation === \"object\" && syncWithLocation.syncId;\n\n const syncWithLocationKey =\n typeof syncWithLocation === \"object\" && \"key\" in syncWithLocation\n ? syncWithLocation.key\n : resource && action && syncWithLocation\n ? `modal-${resource?.identifier ?? resource?.name}-${action}`\n : undefined;\n\n const translate = useTranslate();\n\n const { warnWhen, setWarnWhen } = useWarnAboutChange();\n\n const sunflowerUseModal = useModalFormSF<TData, TVariables>({\n ...rest,\n form: form,\n submit: onFinish as any,\n });\n\n const {\n visible,\n show,\n formProps: modalFormProps,\n modalProps,\n } = sunflowerUseModal;\n\n React.useEffect(() => {\n if (initiallySynced.current === false && syncWithLocationKey) {\n const openStatus = parsed?.params?.[syncWithLocationKey]?.open;\n if (typeof openStatus === \"boolean\") {\n if (openStatus) {\n show();\n }\n } else if (typeof openStatus === \"string\") {\n if (openStatus === \"true\") {\n show();\n }\n }\n\n if (syncingId) {\n const idFromParams = parsed?.params?.[syncWithLocationKey]?.id;\n if (idFromParams) {\n setId?.(idFromParams);\n }\n }\n\n initiallySynced.current = true;\n }\n }, [syncWithLocationKey, parsed, syncingId, setId]);\n\n React.useEffect(() => {\n if (initiallySynced.current === true) {\n if (visible && syncWithLocationKey) {\n go({\n query: {\n [syncWithLocationKey]: {\n ...parsed?.params?.[syncWithLocationKey],\n open: true,\n ...(syncingId && id && { id }),\n },\n },\n options: { keepQuery: true },\n type: \"replace\",\n });\n } else if (syncWithLocationKey && !visible) {\n go({\n query: {\n [syncWithLocationKey]: undefined,\n },\n options: { keepQuery: true },\n type: \"replace\",\n });\n }\n }\n }, [id, visible, show, syncWithLocationKey, syncingId]);\n\n const saveButtonPropsSF = {\n disabled: formLoading,\n loading: formLoading,\n };\n\n const handleClose = useCallback(() => {\n if (warnWhen) {\n const warnWhenConfirm = window.confirm(\n translate(\n \"warnWhenUnsavedChanges\",\n \"Are you sure you want to leave? You have unsaved changes.\",\n ),\n );\n\n if (warnWhenConfirm) {\n setWarnWhen(false);\n } else {\n return;\n }\n }\n\n setId?.(undefined);\n sunflowerUseModal.close();\n }, [warnWhen]);\n\n const handleShow = useCallback((id?: BaseKey) => {\n setId?.(id);\n\n sunflowerUseModal.show();\n }, []);\n\n const { visible: _visible, ...otherModalProps } = modalProps;\n const newModalProps = { open: _visible, ...otherModalProps };\n\n return {\n ...useFormProps,\n ...sunflowerUseModal,\n show: handleShow,\n close: handleClose,\n open: visible,\n formProps: {\n ...modalFormProps,\n ...useFormProps.formProps,\n onValuesChange: formProps?.onValuesChange,\n onKeyUp: formProps?.onKeyUp,\n onFinish: formProps.onFinish,\n },\n modalProps: {\n ...newModalProps,\n width: \"1000px\",\n okButtonProps: saveButtonPropsSF,\n title: translate(\n `${resource?.name}.titles.${rest.action}`,\n `${userFriendlyResourceName(\n `${rest.action} ${\n resource?.meta?.label ??\n resource?.options?.label ??\n resource?.label ??\n resource?.name\n }`,\n \"singular\",\n )}`,\n ),\n okText: translate(\"buttons.save\", \"Save\"),\n cancelText: translate(\"buttons.cancel\", \"Cancel\"),\n onCancel: handleClose,\n forceRender: true,\n },\n formLoading,\n };\n};\n","import React, { useCallback } from \"react\";\nimport { UseFormConfig } from \"sunflower-antd\";\nimport { FormInstance, FormProps, DrawerProps, ButtonProps } from \"antd\";\nimport {\n useTranslate,\n useWarnAboutChange,\n UseFormProps as UseFormPropsCore,\n HttpError,\n LiveModeProps,\n BaseRecord,\n FormWithSyncWithLocationParams,\n BaseKey,\n useResource,\n useParsed,\n useGo,\n useModal,\n} from \"@refinedev/core\";\n\nimport { useForm, UseFormProps, UseFormReturnType } from \"../useForm\";\nimport { DeleteButtonProps } from \"../../../components\";\n\nexport interface UseDrawerFormConfig extends UseFormConfig {\n action: \"show\" | \"edit\" | \"create\" | \"clone\";\n}\n\nexport type UseDrawerFormProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseFormPropsCore<TData, TError, TVariables> &\n UseFormProps<TData, TError, TVariables> &\n UseDrawerFormConfig &\n LiveModeProps &\n FormWithSyncWithLocationParams & {\n defaultVisible?: boolean;\n autoSubmitClose?: boolean;\n autoResetForm?: boolean;\n };\n\nexport type UseDrawerFormReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseFormReturnType<TData, TError, TVariables> & {\n formProps: FormProps<TVariables> & {\n form: FormInstance<TVariables>;\n };\n show: (id?: BaseKey) => void;\n close: () => void;\n drawerProps: DrawerProps;\n saveButtonProps: ButtonProps;\n deleteButtonProps: DeleteButtonProps;\n formLoading: boolean;\n};\n\n/**\n * `useDrawerForm` hook allows you to manage a form within a drawer. It returns Ant Design {@link https://ant.design/components/form/ Form} and {@link https://ant.design/components/drawer/ Drawer} components props.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/form/useDrawerForm} 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 */\n\nexport const useDrawerForm = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n syncWithLocation,\n defaultVisible = false,\n autoSubmitClose = true,\n autoResetForm = true,\n ...rest\n}: UseDrawerFormProps<TData, TError, TVariables>): UseDrawerFormReturnType<\n TData,\n TError,\n TVariables\n> => {\n const initiallySynced = React.useRef(false);\n\n const { visible, show, close } = useModal({\n defaultVisible,\n });\n\n const useFormProps = useForm<TData, TError, TVariables>({\n ...rest,\n });\n\n const { form, formProps, formLoading, id, setId, onFinish } = useFormProps;\n\n const { resource, action: actionFromParams } = useResource(rest.resource);\n\n const parsed = useParsed();\n const go = useGo();\n\n const action = rest.action ?? actionFromParams ?? \"\";\n\n const syncingId =\n typeof syncWithLocation === \"object\" && syncWithLocation.syncId;\n\n const syncWithLocationKey =\n typeof syncWithLocation === \"object\" && \"key\" in syncWithLocation\n ? syncWithLocation.key\n : resource && action && syncWithLocation\n ? `drawer-${resource?.identifier ?? resource?.name}-${action}`\n : undefined;\n\n React.useEffect(() => {\n if (initiallySynced.current === false && syncWithLocationKey) {\n const openStatus = parsed?.params?.[syncWithLocationKey]?.open;\n if (typeof openStatus === \"boolean\") {\n openStatus ? show() : close();\n } else if (typeof openStatus === \"string\") {\n if (openStatus === \"true\") {\n show();\n }\n }\n\n if (syncingId) {\n const idFromParams = parsed?.params?.[syncWithLocationKey]?.id;\n if (idFromParams) {\n setId?.(idFromParams);\n }\n }\n\n initiallySynced.current = true;\n }\n }, [syncWithLocationKey, parsed, syncingId, setId]);\n\n React.useEffect(() => {\n if (initiallySynced.current === true) {\n if (visible && syncWithLocationKey) {\n go({\n query: {\n [syncWithLocationKey]: {\n ...parsed?.params?.[syncWithLocationKey],\n open: true,\n ...(syncingId && id && { id }),\n },\n },\n options: { keepQuery: true },\n type: \"replace\",\n });\n } else if (syncWithLocationKey && !visible) {\n go({\n query: {\n [syncWithLocationKey]: undefined,\n },\n options: { keepQuery: true },\n type: \"replace\",\n });\n }\n }\n }, [id, visible, show, close, syncWithLocationKey, syncingId]);\n\n const translate = useTranslate();\n\n const { warnWhen, setWarnWhen } = useWarnAboutChange();\n\n const submit = async () => {\n await onFinish(form.getFieldsValue());\n\n if (autoSubmitClose) {\n close();\n }\n\n if (autoResetForm) {\n form.resetFields();\n }\n };\n\n const saveButtonProps = {\n disabled: formLoading,\n onClick: submit,\n loading: formLoading,\n };\n\n const deleteButtonProps = {\n recordItemId: id,\n onSuccess: () => {\n setId?.(undefined);\n close();\n },\n };\n\n const handleClose = useCallback(() => {\n if (warnWhen) {\n const warnWhenConfirm = window.confirm(\n translate(\n \"warnWhenUnsavedChanges\",\n \"Are you sure you want to leave? You have unsaved changes.\",\n ),\n );\n\n if (warnWhenConfirm) {\n setWarnWhen(false);\n } else {\n return;\n }\n }\n\n close();\n setId?.(undefined);\n }, [warnWhen]);\n\n const handleShow = useCallback((id?: BaseKey) => {\n setId?.(id);\n\n show();\n }, []);\n\n return {\n ...useFormProps,\n show: handleShow,\n close: handleClose,\n formProps: {\n form,\n ...useFormProps.formProps,\n onValuesChange: formProps?.onValuesChange,\n onKeyUp: formProps?.onKeyUp,\n onFinish: formProps.onFinish,\n },\n drawerProps: {\n width: \"500px\",\n onClose: handleClose,\n open: visible,\n forceRender: true,\n },\n saveButtonProps,\n deleteButtonProps,\n formLoading,\n };\n};\n","import {\n useStepsForm as useStepsFormSF,\n UseStepsFormConfig,\n} from \"sunflower-antd\";\nimport { FormInstance, FormProps } from \"antd\";\n\nimport {\n HttpError,\n UseFormProps as UseFormPropsCore,\n BaseRecord,\n} from \"@refinedev/core\";\n\nimport { useForm, UseFormProps, UseFormReturnType } from \"../useForm\";\n\nexport type UseStepsFormFromSFReturnType<TData, TVariables> = {\n current: number;\n gotoStep: (step: number) => void;\n stepsProps: {\n current: number;\n onChange: (currentStep: number) => void;\n };\n formProps: FormProps<TVariables>;\n formLoading: boolean;\n defaultFormValuesLoading: boolean;\n formValues: {};\n initialValues: {};\n formResult: undefined;\n form: FormInstance<TVariables>;\n submit: (values?: TVariables) => Promise<TData>;\n};\n\nexport type UseStepsFormReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseFormReturnType<TData, TError, TVariables> &\n UseStepsFormFromSFReturnType<TData, TVariables>;\n\nexport type UseStepsFormProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseFormPropsCore<TData, TError, TVariables> &\n UseFormProps<TData, TError, TVariables> &\n UseStepsFormConfig;\n\n/**\n * `useStepsForm` hook allows you to split your form under an Ant Design based {@link https://ant.design/components/steps/ Steps} component and provides you with a few useful functionalities that will help you manage your form.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/form/useStepsForm} 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 useStepsForm = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>(\n props: UseStepsFormProps<TData, TError, TVariables> = {},\n): UseStepsFormReturnType<TData, TError, TVariables> => {\n const useFormProps = useForm<TData, TError, TVariables>({ ...props });\n const { form, formProps } = useFormProps;\n\n const stepsPropsSunflower = useStepsFormSF<TData, TVariables>({\n isBackValidate: false,\n form: form,\n submit: (values: any) => {\n formProps?.onFinish?.(values);\n },\n ...props,\n });\n\n return {\n ...useFormProps,\n ...stepsPropsSunflower,\n formProps: {\n ...stepsPropsSunflower.formProps,\n ...useFormProps.formProps,\n onValuesChange: formProps?.onValuesChange,\n onKeyUp: formProps?.onKeyUp,\n },\n saveButtonProps: {\n ...useFormProps.saveButtonProps,\n onClick: () => stepsPropsSunflower.submit(),\n },\n };\n};\n","import React, { Children, createElement, Fragment } from \"react\";\nimport { Grid, FormProps, Form, TablePaginationConfig, TableProps } from \"antd\";\nimport { useForm as useFormSF } from \"sunflower-antd\";\n\nimport { SorterResult } from \"antd/lib/table/interface\";\n\nimport {\n useLiveMode,\n BaseRecord,\n CrudFilters,\n HttpError,\n useTable as useTableCore,\n useTableProps as useTablePropsCore,\n useTableReturnType as useTableCoreReturnType,\n pickNotDeprecated,\n} from \"@refinedev/core\";\n\nimport {\n mapAntdSorterToCrudSorting,\n mapAntdFilterToCrudFilter,\n} from \"@definitions/table\";\nimport { PaginationLink } from \"./paginationLink\";\n\nexport type useTableProps<\n TData,\n TError,\n TSearchVariables = unknown,\n> = useTablePropsCore<TData, TError> & {\n onSearch?: (data: TSearchVariables) => CrudFilters | Promise<CrudFilters>;\n};\n\nexport type useTableReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TSearchVariables = unknown,\n> = useTableCoreReturnType<TData, TError> & {\n searchFormProps: FormProps<TSearchVariables>;\n tableProps: TableProps<TData>;\n};\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\nexport const useTable = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TSearchVariables = unknown,\n>({\n onSearch,\n initialCurrent,\n initialPageSize,\n hasPagination = true,\n pagination,\n initialSorter,\n permanentSorter,\n initialFilter,\n permanentFilter,\n defaultSetFilterBehavior,\n filters: filtersFromProp,\n sorters: sortersFromProp,\n syncWithLocation,\n resource,\n successNotification,\n errorNotification,\n queryOptions,\n liveMode: liveModeFromProp,\n onLiveEvent,\n liveParams,\n meta,\n metaData,\n dataProviderName,\n}: useTableProps<TData, TError, TSearchVariables> = {}): useTableReturnType<\n TData,\n TError,\n TSearchVariables\n> => {\n const {\n tableQueryResult,\n current,\n setCurrent,\n pageSize,\n setPageSize,\n filters,\n setFilters,\n sorters,\n setSorters,\n sorter,\n setSorter,\n createLinkForSyncWithLocation,\n pageCount,\n } = useTableCore<TData, TError>({\n permanentSorter,\n permanentFilter,\n initialCurrent,\n initialPageSize,\n pagination,\n hasPagination,\n filters: filtersFromProp,\n sorters: sortersFromProp,\n initialSorter,\n initialFilter,\n syncWithLocation,\n resource,\n defaultSetFilterBehavior,\n successNotification,\n errorNotification,\n queryOptions,\n liveMode: liveModeFromProp,\n onLiveEvent,\n liveParams,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n dataProviderName,\n });\n const breakpoint = Grid.useBreakpoint();\n const [form] = Form.useForm<TSearchVariables>();\n const formSF = useFormSF<any, TSearchVariables>({\n form: form,\n });\n const liveMode = useLiveMode(liveModeFromProp);\n\n const hasPaginationString = hasPagination === false ? \"off\" : \"server\";\n const isPaginationEnabled =\n (pagination?.mode ?? hasPaginationString) !== \"off\";\n\n const preferredInitialFilters = pickNotDeprecated(\n filtersFromProp?.initial,\n initialFilter,\n );\n\n const { data, isFetched, isLoading } = tableQueryResult;\n\n const onChange = (\n paginationState: TablePaginationConfig,\n tableFilters: Record<\n string,\n (string | number | boolean) | (string | number | boolean)[] | null\n >,\n sorter: SorterResult<any> | SorterResult<any>[],\n ) => {\n if (tableFilters && Object.keys(tableFilters).length > 0) {\n // Map Antd:Filter -> refine:CrudFilter\n const crudFilters = mapAntdFilterToCrudFilter(\n tableFilters,\n filters,\n preferredInitialFilters,\n );\n setFilters(crudFilters);\n }\n\n if (sorter && Object.keys(sorter).length > 0) {\n // Map Antd:Sorter -> refine:CrudSorting\n const crudSorting = mapAntdSorterToCrudSorting(sorter);\n setSorters(crudSorting);\n }\n\n if (isPaginationEnabled) {\n setCurrent?.(paginationState.current || 1);\n setPageSize?.(paginationState.pageSize || 10);\n }\n };\n\n const onFinish = async (value: TSearchVariables) => {\n if (onSearch) {\n const searchFilters = await onSearch(value);\n setFilters(searchFilters);\n\n if (isPaginationEnabled) {\n setCurrent?.(1);\n }\n }\n };\n\n const antdPagination = (): false | TablePaginationConfig => {\n if (isPaginationEnabled) {\n return {\n itemRender: (page, type, element) => {\n const link = createLinkForSyncWithLocation({\n pagination: {\n pageSize,\n current: page,\n },\n sorters,\n filters,\n });\n\n if (type === \"page\") {\n return createElement(PaginationLink, {\n to: link,\n element: `${page}`,\n });\n }\n if (type === \"next\" || type === \"prev\") {\n return createElement(PaginationLink, {\n to: link,\n element: element,\n });\n }\n\n if (type === \"jump-next\" || type === \"jump-prev\") {\n const elementChildren = (element as React.ReactElement)\n ?.props?.children;\n\n return createElement(PaginationLink, {\n to: link,\n element:\n Children.count(elementChildren) > 1\n ? createElement(\n Fragment,\n {},\n elementChildren,\n )\n : elementChildren,\n });\n }\n\n return element;\n },\n pageSize,\n current,\n simple: !breakpoint.sm,\n position: !breakpoint.sm ? [\"bottomCenter\"] : [\"bottomRight\"],\n total: data?.total,\n };\n }\n\n return false;\n };\n\n return {\n searchFormProps: {\n ...formSF.formProps,\n onFinish,\n },\n tableProps: {\n dataSource: data?.data,\n loading: liveMode === \"auto\" ? isLoading : !isFetched,\n onChange,\n pagination: antdPagination(),\n scroll: { x: true },\n },\n tableQueryResult,\n sorters,\n sorter,\n filters,\n setSorters,\n setSorter,\n setFilters,\n current,\n setCurrent,\n pageSize,\n setPageSize,\n pageCount,\n createLinkForSyncWithLocation,\n };\n};\n","import {\n CrudFilters,\n CrudOperators,\n CrudSorting,\n CrudFilter,\n getDefaultFilter as getDefaultFilterCore,\n getDefaultSortOrder as getDefaultSortOrderCore,\n ConditionalFilter,\n LogicalFilter,\n} from \"@refinedev/core\";\nimport { SortOrder, SorterResult } from \"antd/lib/table/interface\";\n\nexport const getDefaultSortOrder = (\n columnName: string,\n sorter?: CrudSorting,\n): SortOrder | undefined => {\n const sort = getDefaultSortOrderCore(columnName, sorter);\n\n if (sort) {\n return `${sort}end`;\n }\n\n return undefined;\n};\n\n/**\n * @deprecated getDefaultFilter moved to `@refinedev/core`. Use from `@refinedev/core`\n */\nexport const getDefaultFilter = (\n columnName: string,\n filters?: CrudFilters,\n operatorType: CrudOperators = \"eq\",\n): CrudFilter[\"value\"] | undefined => {\n return getDefaultFilterCore(columnName, filters, operatorType);\n};\n\nexport const mapAntdSorterToCrudSorting = (\n sorter: SorterResult<any> | SorterResult<any>[],\n): CrudSorting => {\n const crudSorting: CrudSorting = [];\n if (Array.isArray(sorter)) {\n sorter\n .sort((a, b) => {\n return ((a.column?.sorter as { multiple?: number }).multiple ??\n 0) <\n ((b.column?.sorter as { multiple?: number }).multiple ?? 0)\n ? -1\n : 0;\n })\n .map((item) => {\n if (item.field && item.order) {\n const field = Array.isArray(item.field)\n ? item.field.join(\".\")\n : `${item.field}`;\n\n crudSorting.push({\n field: `${item.columnKey ?? field}`,\n order: item.order.replace(\"end\", \"\") as \"asc\" | \"desc\",\n });\n }\n });\n } else {\n if (sorter.field && sorter.order) {\n const field = Array.isArray(sorter.field)\n ? sorter.field.join(\".\")\n : `${sorter.field}`;\n\n crudSorting.push({\n field: `${sorter.columnKey ?? field}`,\n order: sorter.order.replace(\"end\", \"\") as \"asc\" | \"desc\",\n });\n }\n }\n\n return crudSorting;\n};\n\nexport const mapAntdFilterToCrudFilter = (\n tableFilters: Record<\n string,\n (string | number | boolean) | (string | number | boolean)[] | null\n >,\n prevFilters: CrudFilters,\n initialFilters?: CrudFilters,\n): CrudFilters => {\n const crudFilters: CrudFilters = [];\n const mapInitialFilter: Record<string, CrudFilter> = (\n initialFilters ?? []\n ).reduce((acc, item) => {\n const field =\n (item as ConditionalFilter).key || (item as LogicalFilter).field;\n return { ...acc, [field]: item };\n }, {});\n\n Object.keys(tableFilters).map((field) => {\n const value = tableFilters[field];\n const operator =\n prevFilters\n .filter((i) => i.operator !== \"or\")\n .find((p: any) => p.field === field)?.operator ||\n mapInitialFilter[field]?.operator;\n\n if (operator !== \"or\" && operator !== \"and\") {\n crudFilters.push({\n field,\n operator: operator ?? (Array.isArray(value) ? \"in\" : \"eq\"),\n value,\n });\n }\n });\n\n return crudFilters;\n};\n","import { useLink, useRouterContext, useRouterType } from \"@refinedev/core\";\nimport React, { ReactNode } from \"react\";\n\ninterface PaginationLinkProps {\n to: string;\n element: ReactNode;\n}\n\nexport const PaginationLink = ({ to, element }: PaginationLinkProps) => {\n const { Link: LegacyLink } = useRouterContext();\n const routerType = useRouterType();\n const Link = useLink();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n return (\n <ActiveLink\n to={to}\n replace={false}\n onClick={(e: React.PointerEvent<HTMLButtonElement>) => {\n e.preventDefault();\n }}\n >\n {element}\n </ActiveLink>\n );\n};\n","import { useTable } from \"@hooks\";\nimport { BaseKey, BaseRecord, HttpError, UseFormProps } from \"@refinedev/core\";\nimport { ButtonProps } from \"antd\";\n\nimport { useTableProps, useTableReturnType } from \"../useTable\";\nimport { UseFormReturnType, useForm } from \"../../form/useForm\";\n\nexport type useEditableTableReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n TSearchVariables = unknown,\n> = useTableReturnType<TData, TError, TSearchVariables> &\n UseFormReturnType<TData, TError, TVariables> & {\n saveButtonProps: ButtonProps & {\n onClick: () => void;\n };\n cancelButtonProps: ButtonProps & {\n onClick: () => void;\n };\n editButtonProps: (id: BaseKey) => ButtonProps & {\n onClick: () => void;\n };\n isEditing: (id: BaseKey) => boolean;\n };\n\ntype useEditableTableProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n TSearchVariables = unknown,\n> = Omit<\n useTableProps<TData, TError, TSearchVariables>,\n \"successNotification\" | \"errorNotification\"\n> &\n UseFormProps<TData, TError, TVariables>;\n\n/**\n * `useEditeableTable` allows you to implement edit feature on the table with ease,\n * on top of all the features that {@link https://refine.dev/docs/api-references/hooks/table/useTable `useTable`} provides.\n * `useEditableTable` return properties that can be used on Ant Design's {@link https://ant.design/components/table/ `<Table>`}\n * and {@link https://ant.design/components/form/ `<Form>`} components.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/table/useEditableTable} for more details.\n */\nexport const useEditableTable = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n TSearchVariables = unknown,\n>(\n props: useEditableTableProps<\n TData,\n TError,\n TVariables,\n TSearchVariables\n > = {},\n): useEditableTableReturnType<TData, TError, TVariables, TSearchVariables> => {\n const table = useTable<TData, TError, TSearchVariables>({\n ...props,\n successNotification: undefined,\n errorNotification: undefined,\n });\n const edit = useForm<TData, TError, TVariables>({\n ...props,\n action: \"edit\",\n redirect: false,\n });\n\n const { id: editId, setId, saveButtonProps } = edit;\n\n const cancelButtonProps = {\n onClick: () => {\n setId(undefined);\n },\n };\n\n const editButtonProps = (id: BaseKey) => {\n return {\n onClick: () => setId(id),\n };\n };\n\n const isEditing = (id: BaseKey) => id === editId;\n\n return {\n ...table,\n ...edit,\n saveButtonProps,\n cancelButtonProps,\n editButtonProps,\n isEditing,\n };\n};\n","import { SelectProps } from \"antd/lib/select\";\nimport { QueryObserverResult } from \"@tanstack/react-query\";\n\nimport {\n useSelect as useSelectCore,\n BaseRecord,\n GetManyResponse,\n GetListResponse,\n HttpError,\n UseSelectProps,\n} from \"@refinedev/core\";\n\nexport type UseSelectReturnType<TData extends BaseRecord = BaseRecord> = {\n selectProps: SelectProps<{ value: string; label: string }>;\n queryResult: QueryObserverResult<GetListResponse<TData>>;\n defaultValueQueryResult: QueryObserverResult<GetManyResponse<TData>>;\n};\n\n/**\n * `useSelect` hook allows you to manage an Ant Design {@link https://ant.design/components/select/ Select} component when records in a resource needs to be used as select options.\n *\n * @see {@link https://refine.dev/docs/api-references/hooks/field/useSelect} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}\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 { queryResult, defaultValueQueryResult, onSearch, options } =\n useSelectCore(props);\n\n return {\n selectProps: {\n options,\n onSearch,\n loading: defaultValueQueryResult.isFetching,\n showSearch: true,\n filterOption: false,\n },\n queryResult,\n defaultValueQueryResult,\n };\n};\n","import { QueryObserverResult } from \"@tanstack/react-query\";\n\nimport { CheckboxGroupProps } from \"antd/lib/checkbox\";\nimport {\n BaseRecord,\n GetListResponse,\n HttpError,\n UseSelectProps,\n useSelect,\n BaseKey,\n pickNotDeprecated,\n} from \"@refinedev/core\";\n\nexport type UseCheckboxGroupReturnType<TData extends BaseRecord = BaseRecord> =\n {\n checkboxGroupProps: CheckboxGroupProps;\n queryResult: QueryObserverResult<GetListResponse<TData>>;\n };\n\n/**\n * `useCheckboxGroup` hook allows you to manage an Ant Design {@link https://ant.design/components/checkbox/#components-checkbox-demo-group Checkbox.Group} component when records in a resource needs to be used as checkbox options.\n *\n * @see {@link https://refine.dev/docs/ui-framewors/antd/hooks/field/useCheckboxGroup} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}\n *\n */\n\ntype UseCheckboxGroupProps<TData, TError> = Omit<\n UseSelectProps<TData, TError>,\n \"defaultValue\"\n> & {\n /**\n * Sets the default value\n */\n defaultValue?: BaseKey[];\n};\n\nexport const useCheckboxGroup = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n>({\n resource,\n sort,\n sorters,\n filters,\n optionLabel,\n optionValue,\n queryOptions,\n fetchSize,\n pagination,\n liveMode,\n defaultValue,\n onLiveEvent,\n liveParams,\n meta,\n metaData,\n dataProviderName,\n}: UseCheckboxGroupProps<TData, TError>): UseCheckboxGroupReturnType<TData> => {\n const { queryResult, options } = useSelect({\n resource,\n sort,\n sorters,\n filters,\n optionLabel,\n optionValue,\n queryOptions,\n fetchSize,\n pagination,\n liveMode,\n defaultValue,\n onLiveEvent,\n liveParams,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n dataProviderName,\n });\n return {\n checkboxGroupProps: {\n options,\n defaultValue,\n },\n queryResult,\n };\n};\n","import { QueryObserverResult } from \"@tanstack/react-query\";\n\nimport { RadioGroupProps } from \"antd/lib/radio\";\nimport {\n BaseKey,\n BaseRecord,\n GetListResponse,\n HttpError,\n pickNotDeprecated,\n useSelect,\n UseSelectProps,\n} from \"@refinedev/core\";\n\nexport type UseRadioGroupReturnType<TData extends BaseRecord = BaseRecord> = {\n radioGroupProps: RadioGroupProps;\n queryResult: QueryObserverResult<GetListResponse<TData>>;\n};\n\n/**\n * `useRadioGroup` hook allows you to manage an Ant Design {@link https://ant.design/components/radio/#components-radio-demo-radiogroup-with-name Radio.Group} component when records in a resource needs to be used as radio options.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/field/useRadioGroup} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/core/interfaceReferences#baserecord `BaseRecord`}\n *\n */\n\ntype UseRadioGroupProps<TData, TError> = Omit<\n UseSelectProps<TData, TError>,\n \"defaultValue\"\n> & {\n /**\n * Sets the default value\n */\n defaultValue?: BaseKey;\n};\n\nexport const useRadioGroup = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n>({\n resource,\n sort,\n sorters,\n filters,\n optionLabel,\n optionValue,\n queryOptions,\n fetchSize,\n pagination,\n liveMode,\n defaultValue,\n onLiveEvent,\n liveParams,\n meta,\n metaData,\n dataProviderName,\n}: UseRadioGroupProps<TData, TError>): UseRadioGroupReturnType<TData> => {\n const { queryResult, options } = useSelect({\n resource,\n sort,\n sorters,\n filters,\n optionLabel,\n optionValue,\n queryOptions,\n fetchSize,\n pagination,\n liveMode,\n defaultValue,\n onLiveEvent,\n liveParams,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n dataProviderName,\n });\n\n return {\n radioGroupProps: {\n options,\n defaultValue,\n },\n queryResult,\n };\n};\n","import React from \"react\";\nimport { ButtonProps, notification, UploadProps, Progress } from \"antd\";\nimport {\n useTranslate,\n useResource,\n BaseRecord,\n HttpError,\n useImport as useImportCore,\n UseImportReturnType,\n ImportOptions,\n pickNotDeprecated,\n} from \"@refinedev/core\";\n\n/**\n * `useImport` hook allows you to handle your csv import logic easily.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/import/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 resource: resourceFromProp,\n resourceName,\n mapData = (item) => item as unknown as TVariables,\n paparseOptions,\n batchSize = Number.MAX_SAFE_INTEGER,\n onFinish,\n meta,\n metaData,\n dataProviderName,\n onProgress: onProgressFromProp,\n}: ImportOptions<TItem, TVariables, TData> = {}): Omit<\n UseImportReturnType<TData, TVariables, TError>,\n \"handleChange\" | \"inputProps\"\n> & {\n uploadProps: UploadProps;\n buttonProps: ButtonProps;\n} => {\n const t = useTranslate();\n\n const { resource } = useResource(resourceFromProp ?? resourceName);\n\n const { mutationResult, isLoading, handleChange } = useImportCore<\n TItem,\n TData,\n TError,\n TVariables\n >({\n resource: resource?.identifier ?? resource?.name,\n mapData,\n paparseOptions,\n batchSize,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n dataProviderName,\n onFinish,\n onProgress:\n onProgressFromProp ??\n (({ totalAmount, processedAmount }) => {\n if (totalAmount > 0 && processedAmount > 0) {\n const description = (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginTop: \"-7px\",\n }}\n >\n <Progress\n type=\"circle\"\n percent={Math.floor(\n (processedAmount / totalAmount) * 100,\n )}\n width={50}\n strokeColor=\"#1890ff\"\n status=\"normal\"\n />\n <span style={{ marginLeft: 8, width: \"100%\" }}>\n {t(\n \"notifications.importProgress\",\n {\n processed: processedAmount,\n total: totalAmount,\n },\n `Importing: ${processedAmount}/${totalAmount}`,\n )}\n </span>\n </div>\n );\n\n notification.open({\n description,\n message: null,\n key: `${resource}-import`,\n duration: 0,\n });\n\n if (processedAmount >= totalAmount) {\n }\n\n if (processedAmount === totalAmount) {\n setTimeout(() => {\n notification.destroy(`${resource}-import`);\n }, 4500);\n }\n }\n }),\n });\n\n return {\n uploadProps: {\n onChange: handleChange,\n beforeUpload: () => false,\n showUploadList: false,\n accept: \".csv\",\n },\n buttonProps: {\n type: \"default\",\n loading: isLoading,\n },\n mutationResult,\n isLoading,\n };\n};\n","import { Children, createElement, Fragment } from \"react\";\nimport { ListProps, FormProps, Form, Grid } from \"antd\";\n\nimport {\n BaseRecord,\n CrudFilters,\n HttpError,\n useTable as useTableCore,\n useTableProps as useTablePropsCore,\n useTableReturnType,\n pickNotDeprecated,\n} from \"@refinedev/core\";\nimport { useLiveMode } from \"@refinedev/core\";\nimport { PaginationLink } from \"@hooks/table/useTable/paginationLink\";\nimport { PaginationConfig } from \"antd/lib/pagination\";\n\nexport type useSimpleListProps<TData, TError, TSearchVariables> =\n useTablePropsCore<TData, TError> & {\n onSearch?: (\n data: TSearchVariables,\n ) => CrudFilters | Promise<CrudFilters>;\n };\n\nexport type useSimpleListReturnType<\n TData extends BaseRecord = BaseRecord,\n TSearchVariables = unknown,\n> = Omit<useTableReturnType<TData>, \"tableQueryResult\"> & {\n listProps: ListProps<TData>;\n queryResult: useTableReturnType[\"tableQueryResult\"];\n searchFormProps: FormProps<TSearchVariables>;\n};\n\n/**\n * By using `useSimpleList` you get props for your records from API in accordance with Ant Design {@link https://ant.design/components/list/ `<List>`} component.\n * All features such as pagination, sorting come out of the box.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/list/useSimpleList} 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 TSearchVariables - Antd form values\n *\n */\n\nexport const useSimpleList = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TSearchVariables = unknown,\n>({\n resource,\n initialCurrent,\n initialPageSize,\n pagination,\n hasPagination = true,\n initialSorter,\n permanentSorter,\n initialFilter,\n permanentFilter,\n defaultSetFilterBehavior,\n filters: filtersFromProp,\n sorters: sortersFromProp,\n onSearch,\n queryOptions,\n syncWithLocation,\n successNotification,\n errorNotification,\n liveMode: liveModeFromProp,\n onLiveEvent,\n liveParams,\n meta,\n metaData,\n dataProviderName,\n}: useSimpleListProps<\n TData,\n TError,\n TSearchVariables\n> = {}): useSimpleListReturnType<TData, TSearchVariables> => {\n const {\n sorters,\n sorter,\n filters,\n current,\n pageSize,\n pageCount,\n setFilters,\n setCurrent,\n setPageSize,\n setSorter,\n setSorters,\n createLinkForSyncWithLocation,\n tableQueryResult: queryResult,\n } = useTableCore({\n resource,\n initialSorter,\n permanentSorter,\n initialFilter,\n permanentFilter,\n filters: filtersFromProp,\n sorters: sortersFromProp,\n defaultSetFilterBehavior,\n initialCurrent,\n initialPageSize,\n queryOptions,\n successNotification,\n errorNotification,\n liveMode: liveModeFromProp,\n onLiveEvent,\n liveParams,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n syncWithLocation,\n dataProviderName,\n pagination,\n hasPagination,\n });\n\n const hasPaginationString = hasPagination === false ? \"off\" : \"server\";\n const isPaginationEnabled =\n (pagination?.mode ?? hasPaginationString) !== \"off\";\n\n const breakpoint = Grid.useBreakpoint();\n\n const liveMode = useLiveMode(liveModeFromProp);\n\n const [form] = Form.useForm<TSearchVariables>();\n\n const { data, isFetched, isLoading } = queryResult;\n\n const onChange = (page: number, pageSize?: number): void => {\n if (isPaginationEnabled) {\n setCurrent(page);\n setPageSize(pageSize || 10);\n }\n };\n\n const onFinish = async (values: TSearchVariables) => {\n if (onSearch) {\n const searchFilters = await onSearch(values);\n if (isPaginationEnabled) {\n setCurrent?.(1);\n }\n return setFilters(searchFilters);\n }\n };\n\n const antdPagination = (): false | PaginationConfig => {\n if (isPaginationEnabled) {\n return {\n itemRender: (page, type, element) => {\n const link = createLinkForSyncWithLocation({\n pagination: {\n pageSize,\n current: page,\n },\n sorters,\n filters,\n });\n\n if (type === \"page\") {\n return createElement(PaginationLink, {\n to: link,\n element: `${page}`,\n });\n }\n if (type === \"next\" || type === \"prev\") {\n return createElement(PaginationLink, {\n to: link,\n element: element,\n });\n }\n\n if (type === \"jump-next\" || type === \"jump-prev\") {\n const elementChildren = (element as React.ReactElement)\n ?.props?.children;\n\n return createElement(PaginationLink, {\n to: link,\n element:\n Children.count(elementChildren) > 1\n ? createElement(\n Fragment,\n {},\n elementChildren,\n )\n : elementChildren,\n });\n }\n\n return element;\n },\n pageSize,\n current,\n simple: !breakpoint.sm,\n total: data?.total,\n onChange,\n };\n }\n\n return false;\n };\n\n return {\n searchFormProps: {\n form,\n onFinish,\n },\n listProps: {\n dataSource: data?.data,\n loading: liveMode === \"auto\" ? isLoading : !isFetched,\n pagination: antdPagination(),\n },\n queryResult,\n filters,\n setFilters,\n sorter,\n setSorter,\n sorters,\n setSorters,\n current,\n setCurrent,\n pageSize,\n setPageSize,\n pageCount,\n createLinkForSyncWithLocation,\n };\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { UploadChangeParam } from \"antd/lib/upload\";\n\nexport type UseFileUploadStateType = () => {\n isLoading: boolean;\n onChange: (info: UploadChangeParam) => void;\n};\n\nexport const useFileUploadState: UseFileUploadStateType = () => {\n const [isLoading, setIsloading] = useState(false);\n\n const onChange = useCallback((info: UploadChangeParam) => {\n const fileListLoadings = mapStatusToLoading(info.fileList);\n\n if (fileListLoadings.includes(true)) {\n setIsloading(true);\n } else {\n setIsloading(false);\n }\n }, []);\n\n return useMemo(() => ({ isLoading, onChange }), [isLoading]);\n};\n\nconst mapStatusToLoading = (files: UploadChangeParam[\"fileList\"]) => {\n return files.map((file) => {\n switch (file.status) {\n case \"uploading\":\n return true;\n default:\n return false;\n }\n });\n};\n","import { ModalProps } from \"antd\";\nimport {\n useModal as useCoreModal,\n useModalReturnType as useCoreModelReturnType,\n} from \"@refinedev/core\";\n\nexport type useModalReturnType = {\n modalProps: ModalProps;\n} & Omit<useCoreModelReturnType, \"visible\">;\n\nexport type useModalProps = {\n /**\n * Default props for Ant Design {@link https://ant.design/components/modal/ `<Modal>`} component.\n */\n modalProps?: ModalProps;\n};\n\n/**\n * By using `useModal` you get props for your records from API in accordance with Ant Design {@link https://ant.design/components/modal/ `<Modal>`} component.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/ui/useModal} for more details.\n */\nexport const useModal = ({\n modalProps = {},\n}: useModalProps = {}): useModalReturnType => {\n const { show, close, visible } = useCoreModal({\n defaultVisible: modalProps.open,\n });\n\n return {\n modalProps: {\n ...modalProps,\n onCancel: (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n modalProps.onCancel?.(e);\n close();\n },\n open: visible,\n visible,\n },\n show,\n close,\n };\n};\n","import React from \"react\";\nimport { NotificationProvider } from \"@refinedev/core\";\nimport { notification } from \"antd\";\n\nimport { UndoableNotification } from \"@components/undoableNotification\";\n\nexport const notificationProvider: NotificationProvider = {\n open: ({\n key,\n message,\n description,\n type,\n cancelMutation,\n undoableTimeout,\n }) => {\n if (type === \"progress\") {\n notification.open({\n key,\n description: (\n <UndoableNotification\n notificationKey={key}\n message={message}\n cancelMutation={cancelMutation}\n undoableTimeout={undoableTimeout}\n />\n ),\n message: null,\n duration: 0,\n closeIcon: <></>,\n });\n } else {\n notification.open({\n key,\n description: message,\n message: description ?? null,\n type,\n });\n }\n },\n close: (key) => notification.destroy(key),\n};\n","import React from \"react\";\nimport { Button, notification, Progress } from \"antd\";\nimport { OpenNotificationParams } from \"@refinedev/core\";\nimport { UndoOutlined } from \"@ant-design/icons\";\n\nexport type UndoableNotificationProps = {\n notificationKey: OpenNotificationParams[\"key\"];\n message: OpenNotificationParams[\"message\"];\n cancelMutation: OpenNotificationParams[\"cancelMutation\"];\n undoableTimeout: OpenNotificationParams[\"undoableTimeout\"];\n};\n\nexport const UndoableNotification: React.FC<UndoableNotificationProps> = ({\n notificationKey,\n message,\n cancelMutation,\n undoableTimeout,\n}) => (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginTop: \"-7px\",\n }}\n >\n <Progress\n type=\"circle\"\n percent={(undoableTimeout ?? 0) * 20}\n format={(time) => time && time / 20}\n width={50}\n strokeColor=\"#1890ff\"\n status=\"normal\"\n />\n <span style={{ marginLeft: 8, width: \"100%\" }}>{message}</span>\n <Button\n style={{ flexShrink: 0 }}\n onClick={() => {\n cancelMutation?.();\n notification.destroy(notificationKey ?? \"\");\n }}\n disabled={undoableTimeout === 0}\n icon={<UndoOutlined />}\n ></Button>\n </div>\n);\n","import React from \"react\";\nimport { Grid, Layout as AntdLayout } from \"antd\";\n\nimport { Sider as DefaultSider } from \"./sider\";\nimport { Header as DefaultHeader } from \"./header\";\nimport { RefineLayoutLayoutProps } from \"./types\";\n\nexport const Layout: React.FC<RefineLayoutLayoutProps> = ({\n children,\n Header,\n Sider,\n Title,\n Footer,\n OffLayoutArea,\n}) => {\n const breakpoint = Grid.useBreakpoint();\n const SiderToRender = Sider ?? DefaultSider;\n const HeaderToRender = Header ?? DefaultHeader;\n const isSmall = typeof breakpoint.sm === \"undefined\" ? true : breakpoint.sm;\n\n return (\n <AntdLayout style={{ minHeight: \"100vh\" }}>\n <SiderToRender Title={Title} />\n <AntdLayout>\n <HeaderToRender />\n <AntdLayout.Content>\n <div\n style={{\n minHeight: 360,\n padding: isSmall ? 24 : 12,\n }}\n >\n {children}\n </div>\n {OffLayoutArea && <OffLayoutArea />}\n </AntdLayout.Content>\n {Footer && <Footer />}\n </AntdLayout>\n </AntdLayout>\n );\n};\n","import React, { useState } from \"react\";\nimport { Layout, Menu, Grid, ConfigProvider, Drawer, Button } from \"antd\";\nimport {\n DashboardOutlined,\n LogoutOutlined,\n UnorderedListOutlined,\n BarsOutlined,\n} from \"@ant-design/icons\";\nimport {\n useTranslate,\n useLogout,\n useTitle,\n CanAccess,\n ITreeMenu,\n useIsExistAuthentication,\n useRouterContext,\n useMenu,\n useRefineContext,\n useLink,\n useRouterType,\n useActiveAuthProvider,\n pickNotDeprecated,\n useWarnAboutChange,\n} from \"@refinedev/core\";\n\nimport { Title as DefaultTitle } from \"@components\";\n\nimport { drawerButtonStyles } from \"./styles\";\nimport { RefineLayoutSiderProps } from \"../types\";\n\nconst { SubMenu } = Menu;\n\nexport const Sider: React.FC<RefineLayoutSiderProps> = ({\n Title: TitleFromProps,\n render,\n meta,\n}) => {\n const [collapsed, setCollapsed] = useState<boolean>(false);\n const [drawerOpen, setDrawerOpen] = useState<boolean>(false);\n const isExistAuthentication = useIsExistAuthentication();\n const routerType = useRouterType();\n const NewLink = useLink();\n const { warnWhen, setWarnWhen } = useWarnAboutChange();\n const { Link: LegacyLink } = useRouterContext();\n const Link = routerType === \"legacy\" ? LegacyLink : NewLink;\n const TitleFromContext = useTitle();\n const translate = useTranslate();\n const { menuItems, selectedKey, defaultOpenKeys } = useMenu({ meta });\n const breakpoint = Grid.useBreakpoint();\n const { hasDashboard } = useRefineContext();\n const authProvider = useActiveAuthProvider();\n const { mutate: mutateLogout } = useLogout({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const isMobile =\n typeof breakpoint.lg === \"undefined\" ? false : !breakpoint.lg;\n\n const RenderToTitle = TitleFromProps ?? TitleFromContext ?? DefaultTitle;\n\n const renderTreeView = (tree: ITreeMenu[], selectedKey?: string) => {\n return tree.map((item: ITreeMenu) => {\n const {\n icon,\n label,\n route,\n key,\n name,\n children,\n parentName,\n meta,\n options,\n } = item;\n\n if (children.length > 0) {\n return (\n <CanAccess\n key={item.key}\n resource={name.toLowerCase()}\n action=\"list\"\n params={{\n resource: item,\n }}\n >\n <SubMenu\n key={item.key}\n icon={icon ?? <UnorderedListOutlined />}\n title={label}\n >\n {renderTreeView(children, selectedKey)}\n </SubMenu>\n </CanAccess>\n );\n }\n const isSelected = key === selectedKey;\n const isRoute = !(\n pickNotDeprecated(meta?.parent, options?.parent, parentName) !==\n undefined && children.length === 0\n );\n return (\n <CanAccess\n key={item.key}\n resource={name.toLowerCase()}\n action=\"list\"\n params={{\n resource: item,\n }}\n >\n <Menu.Item\n key={item.key}\n style={{\n fontWeight: isSelected ? \"bold\" : \"normal\",\n }}\n icon={icon ?? (isRoute && <UnorderedListOutlined />)}\n >\n <Link to={route ?? \"\"}>{label}</Link>\n {!collapsed && isSelected && (\n <div className=\"ant-menu-tree-arrow\" />\n )}\n </Menu.Item>\n </CanAccess>\n );\n });\n };\n\n const handleLogout = () => {\n if (warnWhen) {\n const confirm = window.confirm(\n translate(\n \"warnWhenUnsavedChanges\",\n \"Are you sure you want to leave? You have unsaved changes.\",\n ),\n );\n\n if (confirm) {\n setWarnWhen(false);\n mutateLogout();\n }\n } else {\n mutateLogout();\n }\n };\n\n const logout = isExistAuthentication && (\n <Menu.Item\n key=\"logout\"\n onClick={handleLogout}\n icon={<LogoutOutlined />}\n >\n {translate(\"buttons.logout\", \"Logout\")}\n </Menu.Item>\n );\n\n const dashboard = hasDashboard ? (\n <Menu.Item\n key=\"dashboard\"\n style={{\n fontWeight: selectedKey === \"/\" ? \"bold\" : \"normal\",\n }}\n icon={<DashboardOutlined />}\n >\n <Link to=\"/\">{translate(\"dashboard.title\", \"Dashboard\")}</Link>\n {!collapsed && selectedKey === \"/\" && (\n <div className=\"ant-menu-tree-arrow\" />\n )}\n </Menu.Item>\n ) : null;\n\n const items = renderTreeView(menuItems, selectedKey);\n\n const renderSider = () => {\n if (render) {\n return render({\n dashboard,\n items,\n logout,\n collapsed,\n });\n }\n return (\n <>\n {dashboard}\n {items}\n {logout}\n </>\n );\n };\n\n const renderMenu = () => {\n return (\n <>\n <Menu\n theme=\"dark\"\n selectedKeys={selectedKey ? [selectedKey] : []}\n defaultOpenKeys={defaultOpenKeys}\n mode=\"inline\"\n onClick={() => {\n setDrawerOpen(false);\n if (!breakpoint.lg) {\n setCollapsed(true);\n }\n }}\n >\n {renderSider()}\n </Menu>\n </>\n );\n };\n\n const renderDrawerSider = () => {\n return (\n <>\n <Drawer\n open={drawerOpen}\n onClose={() => setDrawerOpen(false)}\n placement=\"left\"\n closable={false}\n width={200}\n bodyStyle={{\n padding: 0,\n }}\n maskClosable={true}\n >\n <Layout>\n <Layout.Sider\n style={{ height: \"100vh\", overflow: \"hidden\" }}\n >\n <RenderToTitle collapsed={false} />\n {renderMenu()}\n </Layout.Sider>\n </Layout>\n </Drawer>\n <Button\n style={drawerButtonStyles}\n size=\"large\"\n onClick={() => setDrawerOpen(true)}\n icon={<BarsOutlined />}\n ></Button>\n </>\n );\n };\n\n const renderContent = () => {\n if (isMobile) {\n return renderDrawerSider();\n }\n\n return (\n <Layout.Sider\n collapsible\n collapsed={collapsed}\n onCollapse={(collapsed: boolean): void =>\n setCollapsed(collapsed)\n }\n collapsedWidth={80}\n breakpoint=\"lg\"\n >\n <RenderToTitle collapsed={collapsed} />\n {renderMenu()}\n </Layout.Sider>\n );\n };\n\n return (\n <ConfigProvider\n theme={{\n components: {\n Menu: {\n colorItemBg: \"transparent\",\n colorItemText: \"#fff\",\n colorItemTextSelected: \"#fff\",\n colorItemBgSelected: \"transparent\",\n colorItemTextHover: \"#fff\",\n },\n },\n }}\n >\n {renderContent()}\n </ConfigProvider>\n );\n};\n","import { CSSProperties } from \"react\";\n\nexport const drawerButtonStyles: CSSProperties = {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n position: \"fixed\",\n top: 64,\n zIndex: 999,\n};\n","import { useActiveAuthProvider, useGetIdentity } from \"@refinedev/core\";\nimport { Avatar, Layout as AntdLayout, Space, Typography } from \"antd\";\nimport React from \"react\";\nimport { RefineLayoutHeaderProps } from \"../types\";\nconst { Text } = Typography;\n\nexport const Header: React.FC<RefineLayoutHeaderProps> = () => {\n const authProvider = useActiveAuthProvider();\n const { data: user } = useGetIdentity({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const shouldRenderHeader = user && (user.name || user.avatar);\n\n return shouldRenderHeader ? (\n <AntdLayout.Header\n style={{\n display: \"flex\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n padding: \"0px 24px\",\n height: \"64px\",\n }}\n >\n <Space style={{ marginLeft: \"8px\" }}>\n {user?.name && (\n <Text style={{ color: \"white\" }} strong>\n {user.name}\n </Text>\n )}\n {user?.avatar && <Avatar src={user?.avatar} alt={user?.name} />}\n </Space>\n </AntdLayout.Header>\n ) : null;\n};\n","import React from \"react\";\nimport {\n TitleProps,\n useRouterContext,\n useRouterType,\n useLink,\n} from \"@refinedev/core\";\n\nexport const Title: React.FC<TitleProps> = ({ collapsed }) => {\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n return (\n <ActiveLink to=\"/\">\n {collapsed ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <img\n src=\"https://refine.ams3.cdn.digitaloceanspaces.com/logo/refine-mini.svg\"\n alt=\"Refine\"\n style={{\n margin: \"0 auto\",\n padding: \"12px 0\",\n maxHeight: \"65.5px\",\n }}\n />\n </div>\n ) : (\n <img\n src=\"https://refine.ams3.cdn.digitaloceanspaces.com/logo/refine.svg\"\n alt=\"Refine\"\n style={{\n width: \"200px\",\n padding: \"12px 24px\",\n }}\n />\n )}\n </ActiveLink>\n );\n};\n","import React from \"react\";\nimport { Grid, Layout as AntdLayout } from \"antd\";\n\nimport { ThemedSider as DefaultSider } from \"./sider\";\nimport { ThemedHeader as DefaultHeader } from \"./header\";\nimport { RefineThemedLayoutProps } from \"./types\";\n\nexport const ThemedLayout: React.FC<RefineThemedLayoutProps> = ({\n children,\n Header,\n Sider,\n Title,\n Footer,\n OffLayoutArea,\n}) => {\n const breakpoint = Grid.useBreakpoint();\n const SiderToRender = Sider ?? DefaultSider;\n const HeaderToRender = Header ?? DefaultHeader;\n const isSmall = typeof breakpoint.sm === \"undefined\" ? true : breakpoint.sm;\n\n return (\n <AntdLayout style={{ minHeight: \"100vh\" }}>\n <SiderToRender Title={Title} />\n <AntdLayout>\n <HeaderToRender />\n <AntdLayout.Content>\n <div\n style={{\n minHeight: 360,\n padding: isSmall ? 24 : 12,\n }}\n >\n {children}\n </div>\n {OffLayoutArea && <OffLayoutArea />}\n </AntdLayout.Content>\n {Footer && <Footer />}\n </AntdLayout>\n </AntdLayout>\n );\n};\n","import React, { useState } from \"react\";\nimport { Layout, Menu, Grid, Drawer, Button, theme } from \"antd\";\nimport {\n DashboardOutlined,\n LogoutOutlined,\n UnorderedListOutlined,\n BarsOutlined,\n LeftOutlined,\n RightOutlined,\n} from \"@ant-design/icons\";\nimport {\n useTranslate,\n useLogout,\n useTitle,\n CanAccess,\n ITreeMenu,\n useIsExistAuthentication,\n useRouterContext,\n useMenu,\n useRefineContext,\n useLink,\n useRouterType,\n useActiveAuthProvider,\n pickNotDeprecated,\n useWarnAboutChange,\n} from \"@refinedev/core\";\n\nimport { drawerButtonStyles } from \"./styles\";\nimport { RefineThemedLayoutSiderProps } from \"../types\";\nimport { ThemedTitle } from \"@components\";\n\nconst { SubMenu } = Menu;\nconst { useToken } = theme;\n\nexport const ThemedSider: React.FC<RefineThemedLayoutSiderProps> = ({\n Title: TitleFromProps,\n render,\n meta,\n}) => {\n const { token } = useToken();\n\n const [collapsed, setCollapsed] = useState<boolean>(false);\n const [drawerOpen, setDrawerOpen] = useState<boolean>(false);\n const isExistAuthentication = useIsExistAuthentication();\n const routerType = useRouterType();\n const NewLink = useLink();\n const { warnWhen, setWarnWhen } = useWarnAboutChange();\n const { Link: LegacyLink } = useRouterContext();\n const Link = routerType === \"legacy\" ? LegacyLink : NewLink;\n const TitleFromContext = useTitle();\n const translate = useTranslate();\n const { menuItems, selectedKey, defaultOpenKeys } = useMenu({ meta });\n const breakpoint = Grid.useBreakpoint();\n const { hasDashboard } = useRefineContext();\n const authProvider = useActiveAuthProvider();\n const { mutate: mutateLogout } = useLogout({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const isMobile =\n typeof breakpoint.lg === \"undefined\" ? false : !breakpoint.lg;\n\n const RenderToTitle = TitleFromProps ?? TitleFromContext ?? ThemedTitle;\n\n const renderTreeView = (tree: ITreeMenu[], selectedKey?: string) => {\n return tree.map((item: ITreeMenu) => {\n const {\n icon,\n label,\n route,\n key,\n name,\n children,\n parentName,\n meta,\n options,\n } = item;\n\n if (children.length > 0) {\n return (\n <CanAccess\n key={item.key}\n resource={name.toLowerCase()}\n action=\"list\"\n params={{\n resource: item,\n }}\n >\n <SubMenu\n key={item.key}\n icon={icon ?? <UnorderedListOutlined />}\n title={label}\n >\n {renderTreeView(children, selectedKey)}\n </SubMenu>\n </CanAccess>\n );\n }\n const isSelected = key === selectedKey;\n const isRoute = !(\n pickNotDeprecated(meta?.parent, options?.parent, parentName) !==\n undefined && children.length === 0\n );\n\n return (\n <CanAccess\n key={item.key}\n resource={name.toLowerCase()}\n action=\"list\"\n params={{\n resource: item,\n }}\n >\n <Menu.Item\n key={item.key}\n icon={icon ?? (isRoute && <UnorderedListOutlined />)}\n >\n <Link to={route ?? \"\"}>{label}</Link>\n {!collapsed && isSelected && (\n <div className=\"ant-menu-tree-arrow\" />\n )}\n </Menu.Item>\n </CanAccess>\n );\n });\n };\n\n const handleLogout = () => {\n if (warnWhen) {\n const confirm = window.confirm(\n translate(\n \"warnWhenUnsavedChanges\",\n \"Are you sure you want to leave? You have unsaved changes.\",\n ),\n );\n\n if (confirm) {\n setWarnWhen(false);\n mutateLogout();\n }\n } else {\n mutateLogout();\n }\n };\n\n const logout = isExistAuthentication && (\n <Menu.Item\n key=\"logout\"\n onClick={() => handleLogout()}\n icon={<LogoutOutlined />}\n >\n {translate(\"buttons.logout\", \"Logout\")}\n </Menu.Item>\n );\n\n const dashboard = hasDashboard ? (\n <Menu.Item key=\"dashboard\" icon={<DashboardOutlined />}>\n <Link to=\"/\">{translate(\"dashboard.title\", \"Dashboard\")}</Link>\n {!collapsed && selectedKey === \"/\" && (\n <div className=\"ant-menu-tree-arrow\" />\n )}\n </Menu.Item>\n ) : null;\n\n const items = renderTreeView(menuItems, selectedKey);\n\n const renderSider = () => {\n if (render) {\n return render({\n dashboard,\n items,\n logout,\n collapsed,\n });\n }\n return (\n <>\n {dashboard}\n {items}\n {logout}\n </>\n );\n };\n\n const renderMenu = () => {\n return (\n <>\n <Menu\n selectedKeys={selectedKey ? [selectedKey] : []}\n defaultOpenKeys={defaultOpenKeys}\n mode=\"inline\"\n style={{\n marginTop: \"8px\",\n border: \"none\",\n }}\n onClick={() => {\n setDrawerOpen(false);\n if (!breakpoint.lg) {\n setCollapsed(true);\n }\n }}\n >\n {renderSider()}\n </Menu>\n </>\n );\n };\n\n const renderDrawerSider = () => {\n return (\n <>\n <Drawer\n open={drawerOpen}\n onClose={() => setDrawerOpen(false)}\n placement=\"left\"\n closable={false}\n width={200}\n bodyStyle={{\n padding: 0,\n }}\n maskClosable={true}\n >\n <Layout>\n <Layout.Sider\n style={{\n height: \"100vh\",\n overflow: \"hidden\",\n backgroundColor: token.colorBgContainer,\n borderRight: `1px solid ${token.colorBgElevated}`,\n }}\n >\n <div\n style={{\n width: \"200px\",\n padding: \"0 16px\",\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n height: \"64px\",\n backgroundColor: token.colorBgElevated,\n }}\n >\n <RenderToTitle collapsed={false} />\n </div>\n {renderMenu()}\n </Layout.Sider>\n </Layout>\n </Drawer>\n <Button\n style={drawerButtonStyles}\n size=\"large\"\n onClick={() => setDrawerOpen(true)}\n icon={<BarsOutlined />}\n ></Button>\n </>\n );\n };\n\n if (isMobile) {\n return renderDrawerSider();\n }\n\n return (\n <Layout.Sider\n style={{\n backgroundColor: token.colorBgContainer,\n borderRight: `1px solid ${token.colorBgElevated}`,\n }}\n collapsible\n collapsed={collapsed}\n onCollapse={(collapsed) => setCollapsed(collapsed)}\n collapsedWidth={80}\n breakpoint=\"lg\"\n trigger={\n <Button\n type=\"text\"\n style={{\n borderRadius: 0,\n height: \"100%\",\n width: \"100%\",\n backgroundColor: token.colorBgElevated,\n }}\n >\n {collapsed ? (\n <RightOutlined\n style={{\n color: token.colorPrimary,\n }}\n />\n ) : (\n <LeftOutlined\n style={{\n color: token.colorPrimary,\n }}\n />\n )}\n </Button>\n }\n >\n <div\n style={{\n width: collapsed ? \"80px\" : \"200px\",\n padding: collapsed ? \"0\" : \"0 16px\",\n display: \"flex\",\n justifyContent: collapsed ? \"center\" : \"flex-start\",\n alignItems: \"center\",\n height: \"64px\",\n backgroundColor: token.colorBgElevated,\n fontSize: \"14px\",\n }}\n >\n <RenderToTitle collapsed={collapsed} />\n </div>\n {renderMenu()}\n </Layout.Sider>\n );\n};\n","import { CSSProperties } from \"react\";\n\nexport const drawerButtonStyles: CSSProperties = {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n position: \"fixed\",\n top: 64,\n zIndex: 999,\n};\n","import React from \"react\";\nimport { Layout as AntdLayout, Typography, Avatar, Space, theme } from \"antd\";\nimport { useActiveAuthProvider, useGetIdentity } from \"@refinedev/core\";\nimport { RefineThemedLayoutHeaderProps } from \"../types\";\n\nconst { Text } = Typography;\nconst { useToken } = theme;\n\nexport const ThemedHeader: React.FC<RefineThemedLayoutHeaderProps> = () => {\n const { token } = useToken();\n\n const authProvider = useActiveAuthProvider();\n const { data: user } = useGetIdentity({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const shouldRenderHeader = user && (user.name || user.avatar);\n\n if (!shouldRenderHeader) {\n return null;\n }\n\n return (\n <AntdLayout.Header\n style={{\n backgroundColor: token.colorBgElevated,\n display: \"flex\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n padding: \"0px 24px\",\n height: \"64px\",\n }}\n >\n <Space>\n <Space size=\"middle\">\n {user?.name && <Text strong>{user.name}</Text>}\n {user?.avatar && (\n <Avatar src={user?.avatar} alt={user?.name} />\n )}\n </Space>\n </Space>\n </AntdLayout.Header>\n );\n};\n","import React from \"react\";\nimport { useRouterContext, useRouterType, useLink } from \"@refinedev/core\";\nimport { Typography, theme, Space } from \"antd\";\nimport { RefineLayoutThemedTitleProps } from \"../types\";\n\nconst { useToken } = theme;\n\nconst defaultText = \"refine Project\";\n\nconst defaultIcon = (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n data-testid=\"refine-logo\"\n >\n <path\n d=\"M12 9C13.6569 9 15 7.65685 15 6C15 4.34315 13.6569 3 12 3C10.3431 3 9 4.34315 9 6C9 7.65685 10.3431 9 12 9Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM8 6C8 3.79086 9.79086 2 12 2C14.2091 2 16 3.79086 16 6V18C16 20.2091 14.2091 22 12 22C9.79086 22 8 20.2091 8 18V6Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport const ThemedTitle: React.FC<RefineLayoutThemedTitleProps> = ({\n collapsed,\n icon = defaultIcon,\n text = defaultText,\n wrapperStyles,\n}) => {\n const { token } = useToken();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n return (\n <ActiveLink\n to=\"/\"\n style={{\n display: \"inline-block\",\n textDecoration: \"none\",\n }}\n >\n <Space\n style={{\n display: \"flex\",\n alignItems: \"center\",\n fontSize: \"inherit\",\n ...wrapperStyles,\n }}\n >\n <div\n style={{\n height: \"24px\",\n width: \"24px\",\n color: token.colorPrimary,\n }}\n >\n {icon}\n </div>\n\n {!collapsed && (\n <Typography.Title\n style={{\n fontSize: \"inherit\",\n marginBottom: 0,\n fontWeight: 700,\n }}\n >\n {text}\n </Typography.Title>\n )}\n </Space>\n </ActiveLink>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { PlusSquareOutlined } from \"@ant-design/icons\";\nimport {\n useNavigation,\n useTranslate,\n useCan,\n useResource,\n useRouterContext,\n useRouterType,\n useLink,\n} from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { CreateButtonProps } from \"../types\";\n\n/**\n * <CreateButton> uses Ant Design's {@link https://ant.design/components/button/ `<Button> component`}.\n * It uses the {@link https://refine.dev/docs/core/hooks/navigation/useNavigation#create `create`} method from {@link https://refine.dev/docs/core/hooks/navigation/useNavigation `useNavigation`} under the hood.\n * It can be useful to redirect the app to the create page route of resource}.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/create-button} for more details.\n */\nexport const CreateButton: React.FC<CreateButtonProps> = ({\n resource: resourceNameFromProps,\n resourceNameOrRouteName: propResourceNameOrRouteName,\n hideText = false,\n accessControl,\n meta,\n children,\n onClick,\n ...rest\n}) => {\n const accessControlEnabled = accessControl?.enabled ?? true;\n const hideIfUnauthorized = accessControl?.hideIfUnauthorized ?? false;\n const translate = useTranslate();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const { createUrl: generateCreateUrl } = useNavigation();\n\n const { resource } = useResource(\n resourceNameFromProps ?? propResourceNameOrRouteName,\n );\n\n const { data } = useCan({\n resource: resource?.name,\n action: \"create\",\n queryOptions: {\n enabled: accessControlEnabled,\n },\n params: {\n resource,\n },\n });\n\n const createButtonDisabledTitle = () => {\n if (data?.can) return \"\";\n else if (data?.reason) return data.reason;\n else\n return translate(\n \"buttons.notAccessTitle\",\n \"You don't have permission to access\",\n );\n };\n\n const createUrl = resource ? generateCreateUrl(resource, meta) : \"\";\n\n if (accessControlEnabled && hideIfUnauthorized && !data?.can) {\n return null;\n }\n\n return (\n <ActiveLink\n to={createUrl}\n replace={false}\n onClick={(e: React.PointerEvent<HTMLButtonElement>) => {\n if (data?.can === false) {\n e.preventDefault();\n return;\n }\n if (onClick) {\n e.preventDefault();\n onClick(e);\n }\n }}\n >\n <Button\n icon={<PlusSquareOutlined />}\n disabled={data?.can === false}\n title={createButtonDisabledTitle()}\n data-testid={RefineButtonTestIds.CreateButton}\n type=\"primary\"\n {...rest}\n >\n {!hideText &&\n (children ?? translate(\"buttons.create\", \"Create\"))}\n </Button>\n </ActiveLink>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { EditOutlined } from \"@ant-design/icons\";\nimport {\n useCan,\n useNavigation,\n useTranslate,\n useResource,\n useRouterContext,\n useRouterType,\n useLink,\n} from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { EditButtonProps } from \"../types\";\n\n/**\n * `<EditButton>` uses Ant Design's {@link https://ant.design/components/button/ `<Button>`} component.\n * It uses the {@link https://refine.dev/docs/core/hooks/navigation/useNavigation#edit `edit`} method from {@link https://refine.dev/docs/core/hooks/navigation/useNavigation `useNavigation`} under the hood.\n * It can be useful when redirecting the app to the edit page with the record id route of resource}.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/edit-button} for more details.\n */\nexport const EditButton: React.FC<EditButtonProps> = ({\n resource: resourceNameFromProps,\n resourceNameOrRouteName: propResourceNameOrRouteName,\n recordItemId,\n hideText = false,\n accessControl,\n meta,\n children,\n onClick,\n ...rest\n}) => {\n const accessControlEnabled = accessControl?.enabled ?? true;\n const hideIfUnauthorized = accessControl?.hideIfUnauthorized ?? false;\n const translate = useTranslate();\n\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const { editUrl: generateEditUrl } = useNavigation();\n\n const { id, resource } = useResource(\n resourceNameFromProps ?? propResourceNameOrRouteName,\n );\n\n const { data } = useCan({\n resource: resource?.name,\n action: \"edit\",\n params: { id: recordItemId ?? id, resource },\n queryOptions: {\n enabled: accessControlEnabled,\n },\n });\n\n const createButtonDisabledTitle = () => {\n if (data?.can) return \"\";\n else if (data?.reason) return data.reason;\n else\n return translate(\n \"buttons.notAccessTitle\",\n \"You don't have permission to access\",\n );\n };\n\n const editUrl =\n resource && (recordItemId ?? id)\n ? generateEditUrl(resource, recordItemId! ?? id!, meta)\n : \"\";\n\n if (accessControlEnabled && hideIfUnauthorized && !data?.can) {\n return null;\n }\n\n return (\n <ActiveLink\n to={editUrl}\n replace={false}\n onClick={(e: React.PointerEvent<HTMLButtonElement>) => {\n if (data?.can === false) {\n e.preventDefault();\n return;\n }\n if (onClick) {\n e.preventDefault();\n onClick(e);\n }\n }}\n >\n <Button\n icon={<EditOutlined />}\n disabled={data?.can === false}\n title={createButtonDisabledTitle()}\n data-testid={RefineButtonTestIds.EditButton}\n {...rest}\n >\n {!hideText && (children ?? translate(\"buttons.edit\", \"Edit\"))}\n </Button>\n </ActiveLink>\n );\n};\n","import React from \"react\";\nimport { Button, Popconfirm } from \"antd\";\nimport { DeleteOutlined } from \"@ant-design/icons\";\nimport {\n useDelete,\n useTranslate,\n useMutationMode,\n useCan,\n useResource,\n pickNotDeprecated,\n useWarnAboutChange,\n} from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { DeleteButtonProps } from \"../types\";\n\n/**\n * `<DeleteButton>` uses Ant Design's {@link https://ant.design/components/button/ `<Button>`} and {@link https://ant.design/components/button/ `<Popconfirm>`} components.\n * When you try to delete something, a pop-up shows up and asks for confirmation. When confirmed it executes the `useDelete` method provided by your `dataProvider`.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/delete-button} for more details.\n */\nexport const DeleteButton: React.FC<DeleteButtonProps> = ({\n resource: resourceNameFromProps,\n resourceNameOrRouteName: propResourceNameOrRouteName,\n recordItemId,\n onSuccess,\n mutationMode: mutationModeProp,\n children,\n successNotification,\n errorNotification,\n hideText = false,\n accessControl,\n metaData,\n meta,\n dataProviderName,\n confirmTitle,\n confirmOkText,\n confirmCancelText,\n invalidates,\n ...rest\n}) => {\n const accessControlEnabled = accessControl?.enabled ?? true;\n const hideIfUnauthorized = accessControl?.hideIfUnauthorized ?? false;\n const translate = useTranslate();\n\n const { id, resource } = useResource(\n resourceNameFromProps ?? propResourceNameOrRouteName,\n );\n\n const { mutationMode: mutationModeContext } = useMutationMode();\n\n const mutationMode = mutationModeProp ?? mutationModeContext;\n\n const { mutate, isLoading, variables } = useDelete();\n\n const { data } = useCan({\n resource: resource?.name,\n action: \"delete\",\n params: { id: recordItemId ?? id, resource },\n queryOptions: {\n enabled: accessControlEnabled,\n },\n });\n\n const { setWarnWhen } = useWarnAboutChange();\n\n if (accessControlEnabled && hideIfUnauthorized && !data?.can) {\n return null;\n }\n\n return (\n <Popconfirm\n key=\"delete\"\n okText={confirmOkText ?? translate(\"buttons.delete\", \"Delete\")}\n cancelText={\n confirmCancelText ?? translate(\"buttons.cancel\", \"Cancel\")\n }\n okType=\"danger\"\n title={\n confirmTitle ?? translate(\"buttons.confirm\", \"Are you sure?\")\n }\n okButtonProps={{ disabled: isLoading }}\n onConfirm={(): void => {\n if ((recordItemId ?? id) && resource?.name) {\n setWarnWhen(false);\n mutate(\n {\n id: recordItemId ?? id ?? \"\",\n resource: resource?.name,\n mutationMode,\n successNotification,\n errorNotification,\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n dataProviderName,\n invalidates,\n },\n {\n onSuccess: (value) => {\n onSuccess && onSuccess(value);\n },\n },\n );\n }\n }}\n disabled={\n typeof rest?.disabled !== \"undefined\"\n ? rest.disabled\n : data?.can === false\n }\n >\n <Button\n danger\n loading={(recordItemId ?? id) === variables?.id && isLoading}\n icon={<DeleteOutlined />}\n disabled={data?.can === false}\n data-testid={RefineButtonTestIds.DeleteButton}\n {...rest}\n >\n {!hideText &&\n (children ?? translate(\"buttons.delete\", \"Delete\"))}\n </Button>\n </Popconfirm>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { RedoOutlined } from \"@ant-design/icons\";\nimport {\n useOne,\n useTranslate,\n useResource,\n pickNotDeprecated,\n} from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { RefreshButtonProps } from \"../types\";\n\n/**\n * `<RefreshButton>` uses Ant Design's {@link https://ant.design/components/button/ `<Button>`} component\n * to update the data shown on the page via the {@link https://refine.dev/docs/core/hooks/data/useOne `useOne`} method provided by your dataProvider.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/refresh-button} for more details.\n */\nexport const RefreshButton: React.FC<RefreshButtonProps> = ({\n resource: resourceNameFromProps,\n resourceNameOrRouteName: propResourceNameOrRouteName,\n recordItemId,\n hideText = false,\n meta,\n metaData,\n dataProviderName,\n children,\n onClick,\n ...rest\n}) => {\n const translate = useTranslate();\n\n const { resource, id } = useResource(\n resourceNameFromProps ?? propResourceNameOrRouteName,\n );\n\n const { refetch, isFetching } = useOne({\n resource: resource?.name,\n id: recordItemId ?? id,\n queryOptions: {\n enabled: false,\n },\n meta: pickNotDeprecated(meta, metaData),\n metaData: pickNotDeprecated(meta, metaData),\n liveMode: \"off\",\n dataProviderName,\n });\n\n return (\n <Button\n // TODO: fix any type\n onClick={(e) => (onClick ? onClick(e as any) : refetch())}\n icon={<RedoOutlined spin={isFetching} />}\n data-testid={RefineButtonTestIds.RefreshButton}\n {...rest}\n >\n {!hideText && (children ?? translate(\"buttons.refresh\", \"Refresh\"))}\n </Button>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { EyeOutlined } from \"@ant-design/icons\";\nimport {\n useCan,\n useNavigation,\n useTranslate,\n useResource,\n useRouterContext,\n useRouterType,\n useLink,\n} from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { ShowButtonProps } from \"../types\";\n\n/**\n * `<ShowButton>` uses Ant Design's {@link https://ant.design/components/button/ `<Button>`} component.\n * It uses the {@link https://refine.dev/docs/core/hooks/navigation/useNavigation#show `show`} method from {@link https://refine.dev/docs/core/hooks/navigation/useNavigation `useNavigation`} under the hood.\n * It can be useful when redirecting the app to the show page with the record id route of resource.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/show-button} for more details.\n */\nexport const ShowButton: React.FC<ShowButtonProps> = ({\n resource: resourceNameFromProps,\n resourceNameOrRouteName: propResourceNameOrRouteName,\n recordItemId,\n hideText = false,\n accessControl,\n meta,\n children,\n onClick,\n ...rest\n}) => {\n const accessControlEnabled = accessControl?.enabled ?? true;\n const hideIfUnauthorized = accessControl?.hideIfUnauthorized ?? false;\n const { showUrl: generateShowUrl } = useNavigation();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const translate = useTranslate();\n\n const { id, resource } = useResource(\n resourceNameFromProps ?? propResourceNameOrRouteName,\n );\n\n const { data } = useCan({\n resource: resource?.name,\n action: \"show\",\n params: { id: recordItemId ?? id, resource },\n queryOptions: {\n enabled: accessControlEnabled,\n },\n });\n\n const createButtonDisabledTitle = () => {\n if (data?.can) return \"\";\n else if (data?.reason) return data.reason;\n else\n return translate(\n \"buttons.notAccessTitle\",\n \"You don't have permission to access\",\n );\n };\n\n const showUrl =\n resource && (recordItemId || id)\n ? generateShowUrl(resource, recordItemId! ?? id!, meta)\n : \"\";\n\n if (accessControlEnabled && hideIfUnauthorized && !data?.can) {\n return null;\n }\n\n return (\n <ActiveLink\n to={showUrl}\n replace={false}\n onClick={(e: React.PointerEvent<HTMLButtonElement>) => {\n if (data?.can === false) {\n e.preventDefault();\n return;\n }\n if (onClick) {\n e.preventDefault();\n onClick(e);\n }\n }}\n >\n <Button\n icon={<EyeOutlined />}\n disabled={data?.can === false}\n title={createButtonDisabledTitle()}\n data-testid={RefineButtonTestIds.ShowButton}\n {...rest}\n >\n {!hideText && (children ?? translate(\"buttons.show\", \"Show\"))}\n </Button>\n </ActiveLink>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { BarsOutlined } from \"@ant-design/icons\";\nimport {\n useCan,\n useNavigation,\n useTranslate,\n userFriendlyResourceName,\n useResource,\n useRouterContext,\n useRouterType,\n useLink,\n pickNotDeprecated,\n} from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { ListButtonProps } from \"../types\";\n\n/**\n * `<ListButton>` is using Ant Design's {@link https://ant.design/components/button/ `<Button>`} component.\n * It uses the {@link https://refine.dev/docs/core/hooks/navigation/useNavigation#list `list`} method from {@link https://refine.dev/docs/core/hooks/navigation/useNavigation `useNavigation`} under the hood.\n * It can be useful when redirecting the app to the list page route of resource}.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/list-button} for more details.\n */\nexport const ListButton: React.FC<ListButtonProps> = ({\n resource: resourceNameFromProps,\n resourceNameOrRouteName: propResourceNameOrRouteName,\n hideText = false,\n accessControl,\n meta,\n children,\n onClick,\n ...rest\n}) => {\n const accessControlEnabled = accessControl?.enabled ?? true;\n const hideIfUnauthorized = accessControl?.hideIfUnauthorized ?? false;\n const { listUrl: generateListUrl } = useNavigation();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const translate = useTranslate();\n\n const { resource } = useResource(\n resourceNameFromProps ?? propResourceNameOrRouteName,\n );\n\n const { data } = useCan({\n resource: resource?.name,\n action: \"list\",\n queryOptions: {\n enabled: accessControlEnabled,\n },\n params: {\n resource,\n },\n });\n\n const createButtonDisabledTitle = () => {\n if (data?.can) return \"\";\n else if (data?.reason) return data.reason;\n else\n return translate(\n \"buttons.notAccessTitle\",\n \"You don't have permission to access\",\n );\n };\n\n const listUrl = resource ? generateListUrl(resource, meta) : \"\";\n\n if (accessControlEnabled && hideIfUnauthorized && !data?.can) {\n return null;\n }\n\n return (\n <ActiveLink\n to={listUrl}\n replace={false}\n onClick={(e: React.PointerEvent<HTMLButtonElement>) => {\n if (data?.can === false) {\n e.preventDefault();\n return;\n }\n if (onClick) {\n e.preventDefault();\n onClick(e);\n }\n }}\n >\n <Button\n icon={<BarsOutlined />}\n disabled={data?.can === false}\n title={createButtonDisabledTitle()}\n data-testid={RefineButtonTestIds.ListButton}\n {...rest}\n >\n {!hideText &&\n (children ??\n translate(\n `${\n resource?.name ??\n resourceNameFromProps ??\n propResourceNameOrRouteName\n }.titles.list`,\n userFriendlyResourceName(\n resource?.meta?.label ??\n resource?.label ??\n resource?.name ??\n pickNotDeprecated(\n resourceNameFromProps,\n propResourceNameOrRouteName,\n ),\n \"plural\",\n ),\n ))}\n </Button>\n </ActiveLink>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { ExportOutlined } from \"@ant-design/icons\";\nimport { useTranslate } from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { ExportButtonProps } from \"../types\";\n\n/**\n * `<ExportButton>` is an Ant Design {@link https://ant.design/components/button/ `<Button>`} with a default export icon and a default text with \"Export\".\n * It only has presentational value.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/export-button} for more details.\n */\nexport const ExportButton: React.FC<ExportButtonProps> = ({\n hideText = false,\n children,\n ...rest\n}) => {\n const translate = useTranslate();\n\n return (\n <Button\n type=\"default\"\n icon={<ExportOutlined />}\n data-testid={RefineButtonTestIds.ExportButton}\n {...rest}\n >\n {!hideText && (children ?? translate(\"buttons.export\", \"Export\"))}\n </Button>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { SaveOutlined } from \"@ant-design/icons\";\nimport { useTranslate } from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { SaveButtonProps } from \"../types\";\n\n/**\n * `<SaveButton>` uses Ant Design's {@link https://ant.design/components/button/ `<Button>`} component.\n * It uses it for presantation purposes only. Some of the hooks that refine has adds features to this button.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/save-button} for more details.\n */\nexport const SaveButton: React.FC<SaveButtonProps> = ({\n hideText = false,\n children,\n ...rest\n}) => {\n const translate = useTranslate();\n\n return (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n data-testid={RefineButtonTestIds.SaveButton}\n {...rest}\n >\n {!hideText && (children ?? translate(\"buttons.save\", \"Save\"))}\n </Button>\n );\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { PlusSquareOutlined } from \"@ant-design/icons\";\nimport {\n useCan,\n useNavigation,\n useTranslate,\n useResource,\n useRouterContext,\n useRouterType,\n useLink,\n} from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { CloneButtonProps } from \"../types\";\n\n/**\n * `<CloneButton>` uses Ant Design's {@link https://ant.design/components/button/ `<Button> component`}.\n * It uses the {@link https://refine.dev/docs/core/hooks/navigation/useNavigation#clone `clone`} method from {@link https://refine.dev/docs/core/hooks/navigation/useNavigation useNavigation} under the hood.\n * It can be useful when redirecting the app to the create page with the record id route of resource.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/clone-button} for more details.\n */\nexport const CloneButton: React.FC<CloneButtonProps> = ({\n resourceNameOrRouteName: propResourceNameOrRouteName,\n resource: resourceNameFromProps,\n recordItemId,\n hideText = false,\n accessControl,\n meta,\n children,\n onClick,\n ...rest\n}) => {\n const accessControlEnabled = accessControl?.enabled ?? true;\n const hideIfUnauthorized = accessControl?.hideIfUnauthorized ?? false;\n const { cloneUrl: generateCloneUrl } = useNavigation();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const translate = useTranslate();\n\n const { id, resource } = useResource(\n resourceNameFromProps ?? propResourceNameOrRouteName,\n );\n\n const { data } = useCan({\n resource: resource?.name,\n action: \"create\",\n params: { id: recordItemId ?? id, resource },\n queryOptions: {\n enabled: accessControlEnabled,\n },\n });\n\n const createButtonDisabledTitle = () => {\n if (data?.can) return \"\";\n else if (data?.reason) return data.reason;\n else\n return translate(\n \"buttons.notAccessTitle\",\n \"You don't have permission to access\",\n );\n };\n\n const cloneUrl =\n resource && (recordItemId || id)\n ? generateCloneUrl(resource, recordItemId! ?? id!, meta)\n : \"\";\n\n if (accessControlEnabled && hideIfUnauthorized && !data?.can) {\n return null;\n }\n\n return (\n <ActiveLink\n to={cloneUrl}\n replace={false}\n onClick={(e: React.PointerEvent<HTMLButtonElement>) => {\n if (data?.can === false) {\n e.preventDefault();\n return;\n }\n if (onClick) {\n e.preventDefault();\n onClick(e);\n }\n }}\n >\n <Button\n icon={<PlusSquareOutlined />}\n disabled={data?.can === false}\n title={createButtonDisabledTitle()}\n data-testid={RefineButtonTestIds.CloneButton}\n {...rest}\n >\n {!hideText && (children ?? translate(\"buttons.clone\", \"Clone\"))}\n </Button>\n </ActiveLink>\n );\n};\n","import React from \"react\";\nimport { Button, Upload } from \"antd\";\nimport { ImportOutlined } from \"@ant-design/icons\";\nimport { useTranslate } from \"@refinedev/core\";\nimport { RefineButtonTestIds } from \"@refinedev/ui-types\";\n\nimport { ImportButtonProps } from \"../types\";\n\n/**\n * `<ImportButton>` is compatible with the {@link https://refine.dev/docs/ui-frameworks/antd/hooks/import/useImport `useImport`} hook and is meant to be used as it's upload button.\n * It uses Ant Design's {@link https://ant.design/components/button/ `<Button>`} and {@link https://ant.design/components/upload/ `<Upload>`} components.\n * It wraps a `<Button>` component with an `<Upload>` component and accepts properties for `<Button>` and `<Upload>` components separately.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/buttons/import-button} for more details.\n */\nexport const ImportButton: React.FC<ImportButtonProps> = ({\n uploadProps,\n buttonProps,\n hideText = false,\n children,\n}) => {\n const translate = useTranslate();\n\n return (\n <Upload {...uploadProps}>\n <Button\n icon={<ImportOutlined />}\n data-testid={RefineButtonTestIds.ImportButton}\n {...buttonProps}\n >\n {!hideText &&\n (children ?? translate(\"buttons.import\", \"Import\"))}\n </Button>\n </Upload>\n );\n};\n","import React from \"react\";\nimport { Space } from \"antd\";\nimport {\n useTranslate,\n userFriendlyResourceName,\n useRefineContext,\n useRouterType,\n useResource,\n} from \"@refinedev/core\";\n\nimport { Breadcrumb, CreateButton, PageHeader } from \"@components\";\nimport { ListProps } from \"../types\";\n\n/**\n * `<List>` provides us a layout for displaying the page.\n * It does not contain any logic but adds extra functionalities like a refresh button.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/list} for more details.\n */\nexport const List: React.FC<ListProps> = ({\n canCreate,\n title,\n children,\n createButtonProps,\n resource: resourceFromProps,\n wrapperProps,\n contentProps,\n headerProps,\n breadcrumb: breadcrumbFromProps,\n headerButtonProps,\n headerButtons,\n}) => {\n const translate = useTranslate();\n const { options: { breadcrumb: globalBreadcrumb } = {} } =\n useRefineContext();\n\n const routerType = useRouterType();\n\n const { resource } = useResource(resourceFromProps);\n\n const isCreateButtonVisible =\n canCreate ??\n ((resource?.canCreate ?? !!resource?.create) || createButtonProps);\n\n const breadcrumb =\n typeof breadcrumbFromProps === \"undefined\"\n ? globalBreadcrumb\n : breadcrumbFromProps;\n\n const defaultExtra = isCreateButtonVisible ? (\n <CreateButton\n size=\"middle\"\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n {...createButtonProps}\n />\n ) : null;\n\n return (\n <div {...(wrapperProps ?? {})}>\n <PageHeader\n ghost={false}\n title={\n title ??\n translate(\n `${resource?.name}.titles.list`,\n userFriendlyResourceName(\n resource?.meta?.label ??\n resource?.options?.label ??\n resource?.label ??\n resource?.name,\n \"plural\",\n ),\n )\n }\n extra={\n headerButtons ? (\n <Space wrap {...headerButtonProps}>\n {typeof headerButtons === \"function\"\n ? headerButtons({\n defaultButtons: defaultExtra,\n })\n : headerButtons}\n </Space>\n ) : (\n defaultExtra\n )\n }\n breadcrumb={\n typeof breadcrumb !== \"undefined\" ? (\n <>{breadcrumb}</> ?? undefined\n ) : (\n <Breadcrumb />\n )\n }\n {...(headerProps ?? {})}\n >\n <div {...(contentProps ?? {})}>{children}</div>\n </PageHeader>\n </div>\n );\n};\n","import React from \"react\";\nimport { Card, Space, Spin } from \"antd\";\nimport {\n useNavigation,\n useTranslate,\n userFriendlyResourceName,\n useRefineContext,\n useRouterType,\n useResource,\n useBack,\n} from \"@refinedev/core\";\n\nimport { Breadcrumb, SaveButton, PageHeader } from \"@components\";\nimport { CreateProps } from \"../types\";\n\n/**\n * `<Create>` provides us a layout to display the page.\n * It does not contain any logic but adds extra functionalities like action buttons and giving titles to the page.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/create} for more details.\n */\nexport const Create: React.FC<CreateProps> = ({\n title,\n saveButtonProps,\n children,\n resource: resourceFromProps,\n isLoading = false,\n breadcrumb: breadcrumbFromProps,\n wrapperProps,\n headerProps,\n contentProps,\n headerButtonProps,\n headerButtons,\n footerButtonProps,\n footerButtons,\n goBack: goBackFromProps,\n}) => {\n const translate = useTranslate();\n const { options: { breadcrumb: globalBreadcrumb } = {} } =\n useRefineContext();\n\n const routerType = useRouterType();\n const back = useBack();\n const { goBack } = useNavigation();\n\n const { resource, action } = useResource(resourceFromProps);\n\n const breadcrumb =\n typeof breadcrumbFromProps === \"undefined\"\n ? globalBreadcrumb\n : breadcrumbFromProps;\n\n const defaultFooterButtons = (\n <>\n <SaveButton\n {...(isLoading ? { disabled: true } : {})}\n {...saveButtonProps}\n htmlType=\"submit\"\n />\n </>\n );\n\n return (\n <div {...(wrapperProps ?? {})}>\n <PageHeader\n ghost={false}\n backIcon={goBackFromProps}\n onBack={\n action !== \"list\" || typeof action !== \"undefined\"\n ? routerType === \"legacy\"\n ? goBack\n : back\n : undefined\n }\n title={\n title ??\n translate(\n `${resource?.name}.titles.create`,\n `Create ${userFriendlyResourceName(\n resource?.meta?.label ??\n resource?.options?.label ??\n resource?.label ??\n resource?.name,\n \"singular\",\n )}`,\n )\n }\n breadcrumb={\n typeof breadcrumb !== \"undefined\" ? (\n <>{breadcrumb}</> ?? undefined\n ) : (\n <Breadcrumb />\n )\n }\n extra={\n <Space wrap {...(headerButtonProps ?? {})}>\n {headerButtons\n ? typeof headerButtons === \"function\"\n ? headerButtons({\n defaultButtons: null,\n })\n : headerButtons\n : null}\n </Space>\n }\n {...(headerProps ?? {})}\n >\n <Spin spinning={isLoading}>\n <Card\n bordered={false}\n actions={[\n <Space\n key=\"action-buttons\"\n style={{ float: \"right\", marginRight: 24 }}\n {...(footerButtonProps ?? {})}\n >\n {footerButtons\n ? typeof footerButtons === \"function\"\n ? footerButtons({\n defaultButtons:\n defaultFooterButtons,\n })\n : footerButtons\n : defaultFooterButtons}\n </Space>,\n ]}\n {...(contentProps ?? {})}\n >\n {children}\n </Card>\n </Spin>\n </PageHeader>\n </div>\n );\n};\n","import React from \"react\";\n\nimport { Card, Space, Spin } from \"antd\";\nimport {\n useMutationMode,\n useNavigation,\n useTranslate,\n userFriendlyResourceName,\n useRefineContext,\n useRouterType,\n useBack,\n useResource,\n useGo,\n useToPath,\n} from \"@refinedev/core\";\n\nimport {\n DeleteButton,\n RefreshButton,\n ListButton,\n SaveButton,\n Breadcrumb,\n PageHeader,\n} from \"@components\";\nimport { EditProps } from \"../types\";\n\n/**\n * `<Edit>` provides us a layout for displaying the page.\n * It does not contain any logic but adds extra functionalities like a refresh button.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/edit} for more details.\n */\nexport const Edit: React.FC<EditProps> = ({\n title,\n saveButtonProps,\n mutationMode: mutationModeProp,\n recordItemId,\n children,\n deleteButtonProps,\n canDelete,\n resource: resourceFromProps,\n isLoading = false,\n dataProviderName,\n breadcrumb: breadcrumbFromProps,\n wrapperProps,\n headerProps,\n contentProps,\n headerButtonProps,\n headerButtons,\n footerButtonProps,\n footerButtons,\n goBack: goBackFromProps,\n}) => {\n const translate = useTranslate();\n const { options: { breadcrumb: globalBreadcrumb } = {} } =\n useRefineContext();\n const { mutationMode: mutationModeContext } = useMutationMode();\n const mutationMode = mutationModeProp ?? mutationModeContext;\n\n const routerType = useRouterType();\n const back = useBack();\n const go = useGo();\n const { goBack, list: legacyGoList } = useNavigation();\n\n const {\n resource,\n action,\n id: idFromParams,\n } = useResource(resourceFromProps);\n\n const goListPath = useToPath({\n resource,\n action: \"list\",\n });\n\n const id = recordItemId ?? idFromParams;\n\n const breadcrumb =\n typeof breadcrumbFromProps === \"undefined\"\n ? globalBreadcrumb\n : breadcrumbFromProps;\n\n const isDeleteButtonVisible =\n canDelete ??\n ((resource?.meta?.canDelete ?? resource?.canDelete) ||\n deleteButtonProps);\n\n const defaultHeaderButtons = (\n <>\n {!recordItemId && (\n <ListButton\n {...(isLoading ? { disabled: true } : {})}\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n />\n )}\n <RefreshButton\n {...(isLoading ? { disabled: true } : {})}\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n recordItemId={id}\n dataProviderName={dataProviderName}\n />\n </>\n );\n\n const defaultFooterButtons = (\n <>\n {isDeleteButtonVisible && (\n <DeleteButton\n {...(isLoading ? { disabled: true } : {})}\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n mutationMode={mutationMode}\n onSuccess={() => {\n if (routerType === \"legacy\") {\n legacyGoList(\n resource?.route ?? resource?.name ?? \"\",\n );\n } else {\n go({ to: goListPath });\n }\n }}\n recordItemId={id}\n dataProviderName={dataProviderName}\n {...deleteButtonProps}\n />\n )}\n <SaveButton\n {...(isLoading ? { disabled: true } : {})}\n {...saveButtonProps}\n />\n </>\n );\n\n return (\n <div {...(wrapperProps ?? {})}>\n <PageHeader\n ghost={false}\n backIcon={goBackFromProps}\n onBack={\n action !== \"list\" && typeof action !== \"undefined\"\n ? routerType === \"legacy\"\n ? goBack\n : back\n : undefined\n }\n title={\n title ??\n translate(\n `${resource?.name}.titles.edit`,\n `Edit ${userFriendlyResourceName(\n resource?.meta?.label ??\n resource?.options?.label ??\n resource?.label ??\n resource?.name,\n \"singular\",\n )}`,\n )\n }\n extra={\n <Space wrap {...(headerButtonProps ?? {})}>\n {headerButtons\n ? typeof headerButtons === \"function\"\n ? headerButtons({\n defaultButtons: defaultHeaderButtons,\n })\n : headerButtons\n : defaultHeaderButtons}\n </Space>\n }\n breadcrumb={\n typeof breadcrumb !== \"undefined\" ? (\n <>{breadcrumb}</> ?? undefined\n ) : (\n <Breadcrumb />\n )\n }\n {...(headerProps ?? {})}\n >\n <Spin spinning={isLoading}>\n <Card\n bordered={false}\n actions={[\n <Space\n key=\"footer-buttons\"\n wrap\n style={{\n float: \"right\",\n marginRight: 24,\n }}\n {...(footerButtonProps ?? {})}\n >\n {footerButtons\n ? typeof footerButtons === \"function\"\n ? footerButtons({\n defaultButtons:\n defaultFooterButtons,\n })\n : footerButtons\n : defaultFooterButtons}\n </Space>,\n ]}\n {...(contentProps ?? {})}\n >\n {children}\n </Card>\n </Spin>\n </PageHeader>\n </div>\n );\n};\n","import React from \"react\";\nimport { Card, Space, Spin } from \"antd\";\nimport {\n useNavigation,\n useTranslate,\n userFriendlyResourceName,\n useRefineContext,\n useResource,\n useToPath,\n useRouterType,\n useBack,\n useGo,\n} from \"@refinedev/core\";\n\nimport {\n EditButton,\n DeleteButton,\n RefreshButton,\n ListButton,\n Breadcrumb,\n PageHeader,\n} from \"@components\";\nimport { ShowProps } from \"../types\";\n\n/**\n * `<Show>` provides us a layout for displaying the page.\n * It does not contain any logic but adds extra functionalities like a refresh button.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/show} for more details.\n */\nexport const Show: React.FC<ShowProps> = ({\n title,\n canEdit,\n canDelete,\n isLoading = false,\n children,\n resource: resourceFromProps,\n recordItemId,\n dataProviderName,\n breadcrumb: breadcrumbFromProps,\n contentProps,\n headerProps,\n wrapperProps,\n headerButtons,\n footerButtons,\n footerButtonProps,\n headerButtonProps,\n goBack: goBackFromProps,\n}) => {\n const translate = useTranslate();\n const { options: { breadcrumb: globalBreadcrumb } = {} } =\n useRefineContext();\n\n const routerType = useRouterType();\n const back = useBack();\n const go = useGo();\n const { goBack, list: legacyGoList } = useNavigation();\n\n const {\n resource,\n action,\n id: idFromParams,\n } = useResource(resourceFromProps);\n\n const goListPath = useToPath({\n resource,\n action: \"list\",\n });\n\n const id = recordItemId ?? idFromParams;\n\n const breadcrumb =\n typeof breadcrumbFromProps === \"undefined\"\n ? globalBreadcrumb\n : breadcrumbFromProps;\n\n const isDeleteButtonVisible =\n canDelete ?? resource?.meta?.canDelete ?? resource?.canDelete;\n const isEditButtonVisible =\n canEdit ?? resource?.canEdit ?? !!resource?.edit;\n\n const defaultHeaderButtons = (\n <>\n {!recordItemId && (\n <ListButton\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n />\n )}\n {isEditButtonVisible && (\n <EditButton\n {...(isLoading ? { disabled: true } : {})}\n type=\"primary\"\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n recordItemId={id}\n />\n )}\n {isDeleteButtonVisible && (\n <DeleteButton\n {...(isLoading ? { disabled: true } : {})}\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n recordItemId={id}\n onSuccess={() => {\n if (routerType === \"legacy\") {\n legacyGoList(\n resource?.route ?? resource?.name ?? \"\",\n );\n } else {\n go({ to: goListPath });\n }\n }}\n dataProviderName={dataProviderName}\n />\n )}\n <RefreshButton\n {...(isLoading ? { disabled: true } : {})}\n resource={\n routerType === \"legacy\"\n ? resource?.route\n : resource?.identifier ?? resource?.name\n }\n recordItemId={id}\n dataProviderName={dataProviderName}\n />\n </>\n );\n\n return (\n <div {...(wrapperProps ?? {})}>\n <PageHeader\n ghost={false}\n backIcon={goBackFromProps}\n onBack={\n action !== \"list\" && typeof action !== \"undefined\"\n ? routerType === \"legacy\"\n ? goBack\n : back\n : undefined\n }\n title={\n title ??\n translate(\n `${resource?.name}.titles.show`,\n `Show ${userFriendlyResourceName(\n resource?.meta?.label ??\n resource?.options?.label ??\n resource?.label ??\n resource?.name,\n \"singular\",\n )}`,\n )\n }\n extra={\n <Space\n key=\"extra-buttons\"\n wrap\n {...(headerButtonProps ?? {})}\n >\n {headerButtons\n ? typeof headerButtons === \"function\"\n ? headerButtons({\n defaultButtons: defaultHeaderButtons,\n })\n : headerButtons\n : defaultHeaderButtons}\n </Space>\n }\n breadcrumb={\n typeof breadcrumb !== \"undefined\" ? (\n <>{breadcrumb}</> ?? undefined\n ) : (\n <Breadcrumb />\n )\n }\n {...(headerProps ?? {})}\n >\n <Spin spinning={isLoading}>\n <Card\n bordered={false}\n actions={\n footerButtons\n ? [\n <Space\n key=\"footer-buttons\"\n wrap\n {...footerButtonProps}\n >\n {typeof footerButtons === \"function\"\n ? footerButtons({\n defaultButtons: null,\n })\n : footerButtons}\n </Space>,\n ]\n : undefined\n }\n {...(contentProps ?? {})}\n >\n {children}\n </Card>\n </Spin>\n </PageHeader>\n </div>\n );\n};\n","import React from \"react\";\nimport { Typography } from \"antd\";\n\nconst { Text } = Typography;\n\nimport { TextFieldProps } from \"../types\";\n\n/**\n * This field lets you show basic text. It uses Ant Design's {@link https://ant.design/components/typography/#Typography.Text `<Typography.Text>`} component.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/text} for more details.\n */\nexport const TextField: React.FC<TextFieldProps> = ({ value, ...rest }) => {\n return <Text {...rest}>{value}</Text>;\n};\n","import React from \"react\";\nimport { Tag } from \"antd\";\n\nimport { TagFieldProps } from \"../types\";\n\n/**\n * This field lets you display a value in a tag. It uses Ant Design's {@link https://ant.design/components/tag/ `<Tag>`} component.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/tag} for more details.\n */\nexport const TagField: React.FC<TagFieldProps> = ({ value, ...rest }) => {\n return <Tag {...rest}>{value?.toString()}</Tag>;\n};\n","import React from \"react\";\nimport { Typography } from \"antd\";\n\nconst { Link } = Typography;\n\nimport { EmailFieldProps } from \"../types\";\n\n/**\n * This field is used to display email values. It uses the {@link https://ant.design/components/typography/#FAQ `<Link>`} component\n * of {@link https://ant.design/components/typography `<Typography>`} from Ant Design.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/email} for more details.\n */\nexport const EmailField: React.FC<EmailFieldProps> = ({ value, ...rest }) => {\n return (\n <Link href={`mailto:${value}`} {...rest}>\n {value}\n </Link>\n );\n};\n","import React from \"react\";\nimport { Image } from \"antd\";\n\nimport { ImageFieldProps } from \"../types\";\n\n/**\n * This field is used to display images and uses {@link https://ant.design/components/image/#header `<Image>`} from Ant Design.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/image} for more details.\n */\nexport const ImageField: React.FC<ImageFieldProps> = ({\n value,\n imageTitle,\n ...rest\n}) => {\n return <Image {...rest} src={value} title={imageTitle} />;\n};\n","import React from \"react\";\nimport { Tooltip } from \"antd\";\n\nimport { CheckOutlined, CloseOutlined } from \"@ant-design/icons\";\n\nimport { BooleanFieldProps } from \"../types\";\n\n/**\n * This field is used to display boolean values. It uses the {@link https://ant.design/components/tooltip/#header `<Tooltip>`} values from Ant Design.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/boolean} for more details.\n */\nexport const BooleanField: React.FC<BooleanFieldProps> = ({\n value,\n valueLabelTrue = \"true\",\n valueLabelFalse = \"false\",\n trueIcon = <CheckOutlined />,\n falseIcon = <CloseOutlined />,\n ...rest\n}) => {\n return (\n <Tooltip title={value ? valueLabelTrue : valueLabelFalse} {...rest}>\n {value ? <span>{trueIcon}</span> : <span>{falseIcon}</span>}\n </Tooltip>\n );\n};\n","import React from \"react\";\nimport dayjs from \"dayjs\";\nimport { Typography } from \"antd\";\n\nimport LocalizedFormat from \"dayjs/plugin/localizedFormat\";\n\ndayjs.extend(LocalizedFormat);\n\nconst defaultLocale = dayjs.locale();\n\nimport { DateFieldProps } from \"../types\";\n\n/**\n * This field is used to display dates. It uses {@link https://day.js.org/docs/en/display/format `Day.js`} to display date format.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/date} for more details.\n */\nexport const DateField: React.FC<DateFieldProps> = ({\n value,\n locales,\n format: dateFormat = \"L\",\n ...rest\n}) => {\n const { Text } = Typography;\n\n return (\n <Text {...rest}>\n {dayjs(value)\n .locale(locales || defaultLocale)\n .format(dateFormat)}\n </Text>\n );\n};\n","import React from \"react\";\n\nimport { UrlField } from \"@components\";\nimport { FileFieldProps } from \"../types\";\n\n/**\n * This field is used to display files and uses {@link https://ant.design/components/typography `<Typography.Link>`} from Ant Design.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/file} for more details.\n */\nexport const FileField: React.FC<FileFieldProps> = ({\n title,\n src,\n ...rest\n}) => {\n return (\n <UrlField value={src} title={title} {...rest}>\n {title ?? src}\n </UrlField>\n );\n};\n","import React from \"react\";\nimport { Typography } from \"antd\";\n\nconst { Link } = Typography;\n\nimport { UrlFieldProps } from \"../types\";\n\n/**\n * This field lets you embed a link. It uses Ant Design's {@link https://ant.design/components/typography/ `<Typography.Link>`} component.\n * You can pass a URL in its `value` property and you can show a text in its place by passing any `children`.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/url} for more details.\n */\nexport const UrlField: React.FC<UrlFieldProps> = ({\n children,\n value,\n ...rest\n}) => {\n return (\n <Link href={value} {...rest}>\n {children ?? value}\n </Link>\n );\n};\n","import React from \"react\";\nimport { Typography } from \"antd\";\n\nconst { Text } = Typography;\n\nfunction toLocaleStringSupportsOptions() {\n return !!(\n typeof Intl == \"object\" &&\n Intl &&\n typeof Intl.NumberFormat == \"function\"\n );\n}\n\nimport { NumberFieldProps } from \"../types\";\n\n/**\n * This field is used to display a number formatted according to the browser locale, right aligned. and uses {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl `Intl`} to display date format.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/number} for more details.\n */\nexport const NumberField: React.FC<NumberFieldProps> = ({\n value,\n locale,\n options,\n ...rest\n}) => {\n const number = Number(value);\n\n return (\n <Text {...rest}>\n {toLocaleStringSupportsOptions()\n ? number.toLocaleString(locale, options)\n : number}\n </Text>\n );\n};\n","import React from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport gfm from \"remark-gfm\";\n\nimport { RefineFieldMarkdownProps } from \"../types\";\n\n/**\n * This field lets you display markdown content. It supports {@link https://github.github.com/gfm/ GitHub Flavored Markdown}.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/markdown} for more details.\n */\nexport const MarkdownField: React.FC<RefineFieldMarkdownProps> = ({\n value = \"\",\n}) => {\n return <ReactMarkdown plugins={[gfm]}>{value}</ReactMarkdown>;\n};\n","import React, { ReactNode, useState } from \"react\";\nimport { Button, Space } from \"antd\";\nimport type { FilterDropdownProps as AntdFilterDropdownProps } from \"antd/lib/table/interface\";\nimport dayjs from \"dayjs\";\nimport { FilterOutlined } from \"@ant-design/icons\";\nimport { useTranslate } from \"@refinedev/core\";\n\nexport type FilterDropdownProps = AntdFilterDropdownProps & {\n mapValue?: (selectedKeys: React.Key[]) => any;\n children: ReactNode;\n};\n\n/**\n * `<FilterDropdown>` is a helper component for {@link https://ant.design/components/table/#components-table-demo-custom-filter-panel filter dropdowns in Ant Design `<Table>` components.}\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/filter-dropdown} for more details.\n */\nexport const FilterDropdown: React.FC<FilterDropdownProps> = (props) => {\n const {\n setSelectedKeys,\n confirm,\n clearFilters,\n mapValue,\n selectedKeys,\n children,\n } = props;\n\n const [value, setValue] = useState<any[] | undefined>(selectedKeys);\n const translate = useTranslate();\n\n const clearFilter = () => {\n if (clearFilters) {\n setValue([]);\n clearFilters();\n }\n };\n\n const onFilter = () => {\n const _mappedValue = mappedValue(value);\n\n let keys;\n if (typeof _mappedValue === \"number\") {\n keys = `${_mappedValue}`;\n } else if (dayjs.isDayjs(_mappedValue)) {\n keys = [_mappedValue.toISOString()];\n } else {\n keys = _mappedValue;\n }\n\n setSelectedKeys(keys);\n\n confirm?.();\n };\n\n const mappedValue = (value: any) => (mapValue ? mapValue(value) : value);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const onChange = (e: any) => {\n if (typeof e === \"object\") {\n if (Array.isArray(e)) {\n const _mappedValue = mappedValue(e);\n\n setValue(_mappedValue);\n return setSelectedKeys(_mappedValue);\n }\n\n const changeEvent =\n !e || !e.target || dayjs.isDayjs(e)\n ? { target: { value: e } }\n : e;\n\n const { target }: React.ChangeEvent<HTMLInputElement> = changeEvent;\n const _mappedValue = mappedValue(target.value);\n setValue(_mappedValue);\n return;\n }\n\n const _mappedValue = mappedValue(e);\n\n setValue(_mappedValue);\n };\n\n const childrenWithProps = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n onChange,\n value: mappedValue(value),\n });\n }\n return child;\n });\n return (\n <div\n style={{\n padding: 10,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-end\",\n }}\n >\n <div style={{ marginBottom: 15 }}>{childrenWithProps}</div>\n <Space>\n <Button type=\"primary\" size=\"small\" onClick={() => onFilter()}>\n <FilterOutlined /> {translate(\"buttons.filter\", \"Filter\")}\n </Button>\n <Button danger size=\"small\" onClick={() => clearFilter()}>\n {translate(\"buttons.clear\", \"Clear\")}\n </Button>\n </Space>\n </div>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { useGo, useResource, useRouterType } from \"@refinedev/core\";\nimport { RefineErrorPageProps } from \"@refinedev/ui-types\";\nimport { Button, Result, Typography, Space, Tooltip } from \"antd\";\nimport { InfoCircleOutlined } from \"@ant-design/icons\";\nimport { useNavigation, useTranslate } from \"@refinedev/core\";\n\nconst { Text } = Typography;\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<RefineErrorPageProps> = () => {\n const [errorMessage, setErrorMessage] = useState<string>();\n const translate = useTranslate();\n const { push } = useNavigation();\n const go = useGo();\n const routerType = useRouterType();\n\n const { resource, action } = useResource();\n\n useEffect(() => {\n if (resource) {\n if (action) {\n setErrorMessage(\n translate(\n \"pages.error.info\",\n {\n action: action,\n resource: resource?.name,\n },\n `You may have forgotten to add the \"${action}\" component to \"${resource?.name}\" resource.`,\n ),\n );\n }\n }\n }, [resource, action]);\n\n return (\n <Result\n status=\"404\"\n title=\"404\"\n extra={\n <Space direction=\"vertical\" size=\"large\">\n <Space>\n <Text>\n {translate(\n \"pages.error.404\",\n \"Sorry, the page you visited does not exist.\",\n )}\n </Text>\n {errorMessage && (\n <Tooltip title={errorMessage}>\n <InfoCircleOutlined data-testid=\"error-component-tooltip\" />\n </Tooltip>\n )}\n </Space>\n <Button\n type=\"primary\"\n onClick={() => {\n if (routerType === \"legacy\") {\n push(\"/\");\n } else {\n go({ to: \"/\" });\n }\n }}\n >\n {translate(\"pages.error.backHome\", \"Back Home\")}\n </Button>\n </Space>\n }\n />\n );\n};\n","import React from \"react\";\nimport { LoginPageProps, useActiveAuthProvider } from \"@refinedev/core\";\nimport {\n Row,\n Col,\n Layout,\n Card,\n Typography,\n Form,\n Input,\n Button,\n Checkbox,\n} from \"antd\";\nimport { useLogin, useTranslate } from \"@refinedev/core\";\n\nimport {\n layoutStyles,\n containerStyles,\n titleStyles,\n imageContainer,\n} from \"./styles\";\n\nconst { Text, Title } = Typography;\nexport interface ILoginForm {\n username: string;\n password: string;\n remember: boolean;\n}\n\n/**\n * @deprecated LoginPage is deprecated. Use AuthPage instead. @see {@link https://refine.dev/docs/api-reference/antd/components/antd-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<LoginPageProps> = () => {\n const [form] = Form.useForm<ILoginForm>();\n const translate = useTranslate();\n\n const authProvider = useActiveAuthProvider();\n const { mutate: login, isLoading } = useLogin<ILoginForm>({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const CardTitle = (\n <Title level={3} style={titleStyles}>\n {translate(\"pages.login.title\", \"Sign in your account\")}\n </Title>\n );\n\n return (\n <Layout style={layoutStyles}>\n <Row\n justify=\"center\"\n align=\"middle\"\n style={{\n height: \"100vh\",\n }}\n >\n <Col xs={22}>\n <div style={containerStyles}>\n <div style={imageContainer}>\n <img\n src=\"https://refine.ams3.cdn.digitaloceanspaces.com/logo/refine.svg\"\n alt=\"Refine Logo\"\n />\n </div>\n <Card title={CardTitle} headStyle={{ borderBottom: 0 }}>\n <Form<ILoginForm>\n layout=\"vertical\"\n form={form}\n onFinish={(values) => {\n login(values);\n }}\n requiredMark={false}\n initialValues={{\n remember: false,\n }}\n >\n <Form.Item\n name=\"username\"\n label={translate(\n \"pages.login.username\",\n \"Username\",\n )}\n rules={[{ required: true }]}\n >\n <Input\n size=\"large\"\n placeholder={translate(\n \"pages.login.username\",\n \"Username\",\n )}\n />\n </Form.Item>\n <Form.Item\n name=\"password\"\n label={translate(\n \"pages.login.password\",\n \"Password\",\n )}\n rules={[{ required: true }]}\n style={{ marginBottom: \"12px\" }}\n >\n <Input\n type=\"password\"\n placeholder=\"●●●●●●●●\"\n size=\"large\"\n />\n </Form.Item>\n <div style={{ marginBottom: \"12px\" }}>\n <Form.Item\n name=\"remember\"\n valuePropName=\"checked\"\n noStyle\n >\n <Checkbox\n style={{\n fontSize: \"12px\",\n }}\n >\n {translate(\n \"pages.login.remember\",\n \"Remember me\",\n )}\n </Checkbox>\n </Form.Item>\n\n <a\n style={{\n float: \"right\",\n fontSize: \"12px\",\n }}\n href=\"#\"\n >\n {translate(\n \"pages.login.forgotPassword\",\n \"Forgot password?\",\n )}\n </a>\n </div>\n <Button\n type=\"primary\"\n size=\"large\"\n htmlType=\"submit\"\n loading={isLoading}\n block\n >\n {translate(\"pages.login.signin\", \"Sign in\")}\n </Button>\n </Form>\n <div style={{ marginTop: 8 }}>\n <Text style={{ fontSize: 12 }}>\n {translate(\n \"pages.login.noAccount\",\n \"Don’t have an account?\",\n )}{\" \"}\n <a href=\"#\" style={{ fontWeight: \"bold\" }}>\n {translate(\n \"pages.login.signup\",\n \"Sign up\",\n )}\n </a>\n </Text>\n </div>\n </Card>\n </div>\n </Col>\n </Row>\n </Layout>\n );\n};\n","import { CSSProperties } from \"react\";\n\nexport const layoutStyles: CSSProperties = {\n background: `radial-gradient(50% 50% at 50% 50%, #63386A 0%, #310438 100%)`,\n backgroundSize: \"cover\",\n};\n\nexport const containerStyles: CSSProperties = {\n maxWidth: \"408px\",\n margin: \"auto\",\n};\n\nexport const titleStyles: CSSProperties = {\n textAlign: \"center\",\n color: \"#626262\",\n fontSize: \"30px\",\n letterSpacing: \"-0.04em\",\n};\n\nexport const imageContainer: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: \"28px\",\n};\n","import * as React from \"react\";\nimport { RefineReadyPageProps } from \"@refinedev/ui-types\";\nimport { Row, Col, Typography, Space, Button } from \"antd\";\nimport { ReadOutlined, FolderOutlined, TeamOutlined } from \"@ant-design/icons\";\n\nconst styles: { [key: string]: React.CSSProperties } = {\n root: {\n height: \"100vh\",\n backgroundImage:\n \"url('https://refine.ams3.cdn.digitaloceanspaces.com/login-background/background.png')\",\n backgroundSize: \"cover\",\n backgroundColor: \"#331049\",\n },\n title: {\n color: \"white\",\n fontWeight: 800,\n fontSize: \"64px\",\n marginBottom: \"8px\",\n },\n p1: {\n color: \"white\",\n marginBottom: 0,\n fontSize: \"20px\",\n fontWeight: \"bold\",\n },\n p2: {\n color: \"white\",\n fontSize: \"20px\",\n },\n code: {\n backgroundColor: \"white\",\n color: \"#331049\",\n },\n};\n\nconst { Title } = Typography;\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 * @deprecated `ReadyPage` is deprecated and will be removed in the next major release.\n */\nexport const ReadyPage: React.FC<RefineReadyPageProps> = () => {\n return (\n <Row align=\"middle\" justify=\"center\" style={styles.root}>\n <Col style={{ textAlign: \"center\" }}>\n <img\n style={{ marginBottom: \"48px\" }}\n src=\"https://refine.ams3.cdn.digitaloceanspaces.com/logo/refine.svg\"\n alt=\"Refine Logo\"\n />\n <Title style={styles.title}>Welcome on board</Title>\n <p style={styles.p1}>Your configuration is completed.</p>\n <p style={styles.p2}>\n Now you can get started by adding your resources to the{\" \"}\n <code style={styles.code}>{`resources`}</code> property of{\" \"}\n <code style={styles.code}>{`<Refine>`}</code>\n </p>\n <Space\n size=\"large\"\n wrap\n style={{ marginTop: \"70px\", justifyContent: \"center\" }}\n >\n <a\n href=\"https://refine.dev\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <Button size=\"large\" icon={<ReadOutlined />}>\n Documentation\n </Button>\n </a>\n <a\n href=\"https://refine.dev/examples\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <Button size=\"large\" icon={<FolderOutlined />}>\n Examples\n </Button>\n </a>\n <a\n href=\"https://discord.gg/refine\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <Button size=\"large\" icon={<TeamOutlined />}>\n Community\n </Button>\n </a>\n </Space>\n </Col>\n </Row>\n );\n};\n","import React from \"react\";\nimport { WelcomePage as WelcomePageFromCore } from \"@refinedev/core\";\n\n/**\n * It is a page that welcomes you after the configuration is completed.\n * @deprecated `WelcomePage` is deprecated. Use `WelcomePage` from `@refinedev/core` instead.\n */\nexport const WelcomePage: React.FC = () => {\n return <WelcomePageFromCore />;\n};\n","import React from \"react\";\nimport { CardProps, FormProps, LayoutProps } from \"antd\";\nimport { AuthPageProps } from \"@refinedev/core\";\n\nimport {\n LoginPage,\n RegisterPage,\n ForgotPasswordPage,\n UpdatePasswordPage,\n} from \"./components\";\n\nexport type AuthProps = AuthPageProps<LayoutProps, CardProps, FormProps> & {\n renderContent?: (\n content: React.ReactNode,\n title: React.ReactNode,\n ) => React.ReactNode;\n title?: React.ReactNode;\n};\n\n/**\n * **refine** has a default auth page form served on the `/login` route when the `authProvider` configuration is provided.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/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 from \"react\";\nimport {\n LoginPageProps,\n LoginFormTypes,\n useLink,\n useRouterType,\n useActiveAuthProvider,\n} from \"@refinedev/core\";\nimport {\n Row,\n Col,\n Layout,\n Card,\n Typography,\n Form,\n Input,\n Button,\n Checkbox,\n CardProps,\n LayoutProps,\n Divider,\n FormProps,\n theme,\n} from \"antd\";\nimport { useLogin, useTranslate, useRouterContext } from \"@refinedev/core\";\n\nimport {\n bodyStyles,\n containerStyles,\n headStyles,\n layoutStyles,\n titleStyles,\n} from \"../styles\";\nimport { ThemedTitle } from \"@components\";\n\nconst { Text, Title } = Typography;\nconst { useToken } = theme;\n\ntype LoginProps = LoginPageProps<LayoutProps, CardProps, FormProps>;\n/**\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/ui-frameworks/antd/components/antd-auth-page/#login} for more details.\n */\nexport const LoginPage: React.FC<LoginProps> = ({\n providers,\n registerLink,\n forgotPasswordLink,\n rememberMe,\n contentProps,\n wrapperProps,\n renderContent,\n formProps,\n title,\n}) => {\n const { token } = useToken();\n const [form] = Form.useForm<LoginFormTypes>();\n const translate = useTranslate();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const authProvider = useActiveAuthProvider();\n const { mutate: login, isLoading } = useLogin<LoginFormTypes>({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const PageTitle =\n title === false ? null : (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: \"32px\",\n fontSize: \"20px\",\n }}\n >\n {title ?? <ThemedTitle collapsed={false} />}\n </div>\n );\n\n const CardTitle = (\n <Title\n level={3}\n style={{\n color: token.colorPrimaryTextHover,\n ...titleStyles,\n }}\n >\n {translate(\"pages.login.title\", \"Sign in to your account\")}\n </Title>\n );\n\n const renderProviders = () => {\n if (providers && providers.length > 0) {\n return (\n <>\n {providers.map((provider) => {\n return (\n <Button\n key={provider.name}\n type=\"default\"\n block\n icon={provider.icon}\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n width: \"100%\",\n marginBottom: \"8px\",\n }}\n onClick={() =>\n login({\n providerName: provider.name,\n })\n }\n >\n {provider.label}\n </Button>\n );\n })}\n <Divider>\n <Text\n style={{\n color: token.colorTextLabel,\n }}\n >\n {translate(\"pages.login.divider\", \"or\")}\n </Text>\n </Divider>\n </>\n );\n }\n return null;\n };\n\n const CardContent = (\n <Card\n title={CardTitle}\n headStyle={headStyles}\n bodyStyle={bodyStyles}\n style={{\n ...containerStyles,\n backgroundColor: token.colorBgElevated,\n }}\n {...(contentProps ?? {})}\n >\n {renderProviders()}\n <Form<LoginFormTypes>\n layout=\"vertical\"\n form={form}\n onFinish={(values) => login(values)}\n requiredMark={false}\n initialValues={{\n remember: false,\n }}\n {...formProps}\n >\n <Form.Item\n name=\"email\"\n label={translate(\"pages.login.fields.email\", \"Email\")}\n rules={[\n { required: true },\n {\n type: \"email\",\n message: translate(\n \"pages.login.errors.validEmail\",\n \"Invalid email address\",\n ),\n },\n ]}\n >\n <Input\n size=\"large\"\n placeholder={translate(\n \"pages.login.fields.email\",\n \"Email\",\n )}\n />\n </Form.Item>\n <Form.Item\n name=\"password\"\n label={translate(\"pages.login.fields.password\", \"Password\")}\n rules={[{ required: true }]}\n >\n <Input\n type=\"password\"\n placeholder=\"●●●●●●●●\"\n size=\"large\"\n />\n </Form.Item>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n marginBottom: \"24px\",\n }}\n >\n {rememberMe ?? (\n <Form.Item\n name=\"remember\"\n valuePropName=\"checked\"\n noStyle\n >\n <Checkbox\n style={{\n fontSize: \"12px\",\n }}\n >\n {translate(\n \"pages.login.buttons.rememberMe\",\n \"Remember me\",\n )}\n </Checkbox>\n </Form.Item>\n )}\n {forgotPasswordLink ?? (\n <ActiveLink\n style={{\n color: token.colorPrimaryTextHover,\n fontSize: \"12px\",\n marginLeft: \"auto\",\n }}\n to=\"/forgot-password\"\n >\n {translate(\n \"pages.login.buttons.forgotPassword\",\n \"Forgot password?\",\n )}\n </ActiveLink>\n )}\n </div>\n <Form.Item>\n <Button\n type=\"primary\"\n size=\"large\"\n htmlType=\"submit\"\n loading={isLoading}\n block\n >\n {translate(\"pages.login.signin\", \"Sign in\")}\n </Button>\n </Form.Item>\n </Form>\n <div style={{ marginTop: 8 }}>\n {registerLink ?? (\n <Text style={{ fontSize: 12 }}>\n {translate(\n \"pages.login.buttons.noAccount\",\n \"Don’t have an account?\",\n )}{\" \"}\n <ActiveLink\n to=\"/register\"\n style={{\n fontWeight: \"bold\",\n color: token.colorPrimaryTextHover,\n }}\n >\n {translate(\"pages.login.signup\", \"Sign up\")}\n </ActiveLink>\n </Text>\n )}\n </div>\n </Card>\n );\n\n return (\n <Layout style={layoutStyles} {...(wrapperProps ?? {})}>\n <Row\n justify=\"center\"\n align=\"middle\"\n style={{\n height: \"100vh\",\n }}\n >\n <Col xs={22}>\n {renderContent ? (\n renderContent(CardContent, PageTitle)\n ) : (\n <>\n {PageTitle}\n {CardContent}\n </>\n )}\n </Col>\n </Row>\n </Layout>\n );\n};\n","import { CSSProperties } from \"react\";\n\nexport const layoutStyles: CSSProperties = {};\n\nexport const containerStyles: CSSProperties = {\n maxWidth: \"400px\",\n margin: \"auto\",\n padding: \"32px\",\n boxShadow:\n \"0px 2px 4px rgba(0, 0, 0, 0.02), 0px 1px 6px -1px rgba(0, 0, 0, 0.02), 0px 1px 2px rgba(0, 0, 0, 0.03)\",\n};\n\nexport const headStyles: CSSProperties = {\n borderBottom: 0,\n padding: 0,\n};\n\nexport const bodyStyles: CSSProperties = { padding: 0, marginTop: \"32px\" };\n\nexport const titleStyles: CSSProperties = {\n textAlign: \"center\",\n marginBottom: 0,\n fontSize: \"24px\",\n lineHeight: \"32px\",\n fontWeight: 700,\n overflowWrap: \"break-word\",\n hyphens: \"manual\",\n textOverflow: \"unset\",\n whiteSpace: \"pre-wrap\",\n};\n","import React from \"react\";\nimport {\n RegisterPageProps,\n RegisterFormTypes,\n useRouterType,\n useLink,\n useActiveAuthProvider,\n} from \"@refinedev/core\";\nimport {\n Row,\n Col,\n Layout,\n Card,\n Typography,\n Form,\n Input,\n Button,\n LayoutProps,\n CardProps,\n FormProps,\n Divider,\n theme,\n} from \"antd\";\nimport { useTranslate, useRouterContext, useRegister } from \"@refinedev/core\";\n\nimport {\n layoutStyles,\n containerStyles,\n titleStyles,\n headStyles,\n bodyStyles,\n} from \"../styles\";\nimport { ThemedTitle } from \"@components\";\n\nconst { Text, Title } = Typography;\nconst { useToken } = theme;\n\ntype RegisterProps = RegisterPageProps<LayoutProps, CardProps, FormProps>;\n/**\n * **refine** has register page form which is served on `/register` route when the `authProvider` configuration is provided.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/antd-auth-page/#register} for more details.\n */\nexport const RegisterPage: React.FC<RegisterProps> = ({\n providers,\n loginLink,\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title,\n}) => {\n const { token } = useToken();\n const [form] = Form.useForm<RegisterFormTypes>();\n const translate = useTranslate();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const authProvider = useActiveAuthProvider();\n const { mutate: register, isLoading } = useRegister<RegisterFormTypes>({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const PageTitle =\n title === false ? null : (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: \"32px\",\n fontSize: \"20px\",\n }}\n >\n {title ?? <ThemedTitle collapsed={false} />}\n </div>\n );\n\n const CardTitle = (\n <Title\n level={3}\n style={{\n color: token.colorPrimaryTextHover,\n ...titleStyles,\n }}\n >\n {translate(\"pages.register.title\", \"Sign up for your account\")}\n </Title>\n );\n\n const renderProviders = () => {\n if (providers && providers.length > 0) {\n return (\n <>\n {providers.map((provider) => {\n return (\n <Button\n key={provider.name}\n type=\"default\"\n block\n icon={provider.icon}\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n width: \"100%\",\n marginBottom: \"8px\",\n }}\n onClick={() =>\n register({\n providerName: provider.name,\n })\n }\n >\n {provider.label}\n </Button>\n );\n })}\n <Divider>\n <Text\n style={{\n color: token.colorTextLabel,\n }}\n >\n {translate(\"pages.login.divider\", \"or\")}\n </Text>\n </Divider>\n </>\n );\n }\n return null;\n };\n\n const CardContent = (\n <Card\n title={CardTitle}\n headStyle={headStyles}\n bodyStyle={bodyStyles}\n style={{\n ...containerStyles,\n backgroundColor: token.colorBgElevated,\n }}\n {...(contentProps ?? {})}\n >\n {renderProviders()}\n <Form<RegisterFormTypes>\n layout=\"vertical\"\n form={form}\n onFinish={(values) => register(values)}\n requiredMark={false}\n {...formProps}\n >\n <Form.Item\n name=\"email\"\n label={translate(\"pages.register.email\", \"Email\")}\n rules={[\n { required: true },\n {\n type: \"email\",\n message: translate(\n \"pages.register.errors.validEmail\",\n \"Invalid email address\",\n ),\n },\n ]}\n >\n <Input\n size=\"large\"\n placeholder={translate(\n \"pages.register.fields.email\",\n \"Email\",\n )}\n />\n </Form.Item>\n <Form.Item\n name=\"password\"\n label={translate(\n \"pages.register.fields.password\",\n \"Password\",\n )}\n rules={[{ required: true }]}\n >\n <Input\n type=\"password\"\n placeholder=\"●●●●●●●●\"\n size=\"large\"\n />\n </Form.Item>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n marginBottom: \"24px\",\n }}\n >\n {loginLink ?? (\n <Text\n style={{\n fontSize: 12,\n marginLeft: \"auto\",\n }}\n >\n {translate(\n \"pages.login.buttons.haveAccount\",\n \"Have an account?\",\n )}{\" \"}\n <ActiveLink\n style={{\n fontWeight: \"bold\",\n color: token.colorPrimaryTextHover,\n }}\n to=\"/login\"\n >\n {translate(\"pages.login.signin\", \"Sign in\")}\n </ActiveLink>\n </Text>\n )}\n </div>\n\n <Form.Item\n style={{\n marginBottom: 0,\n }}\n >\n <Button\n type=\"primary\"\n size=\"large\"\n htmlType=\"submit\"\n loading={isLoading}\n block\n >\n {translate(\"pages.register.buttons.submit\", \"Sign up\")}\n </Button>\n </Form.Item>\n </Form>\n </Card>\n );\n\n return (\n <Layout style={layoutStyles} {...(wrapperProps ?? {})}>\n <Row\n justify=\"center\"\n align=\"middle\"\n style={{\n height: \"100vh\",\n }}\n >\n <Col xs={22}>\n {renderContent ? (\n renderContent(CardContent, PageTitle)\n ) : (\n <>\n {PageTitle}\n {CardContent}\n </>\n )}\n </Col>\n </Row>\n </Layout>\n );\n};\n","import React from \"react\";\nimport {\n ForgotPasswordPageProps,\n ForgotPasswordFormTypes,\n useRouterType,\n useLink,\n} from \"@refinedev/core\";\nimport {\n Row,\n Col,\n Layout,\n Card,\n Typography,\n Form,\n Input,\n Button,\n LayoutProps,\n CardProps,\n FormProps,\n theme,\n} from \"antd\";\nimport {\n useTranslate,\n useRouterContext,\n useForgotPassword,\n} from \"@refinedev/core\";\n\nimport {\n layoutStyles,\n containerStyles,\n titleStyles,\n headStyles,\n bodyStyles,\n} from \"../styles\";\nimport { ThemedTitle } from \"@components\";\n\ntype ResetPassworProps = ForgotPasswordPageProps<\n LayoutProps,\n CardProps,\n FormProps\n>;\n\nconst { Text, Title } = Typography;\nconst { useToken } = theme;\n\n/**\n * **refine** has forgot password page form which is served on `/forgot-password` route when the `authProvider` configuration is provided.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/antd-auth-page/#forgot-password} for more details.\n */\nexport const ForgotPasswordPage: React.FC<ResetPassworProps> = ({\n loginLink,\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title,\n}) => {\n const { token } = useToken();\n const [form] = Form.useForm<ForgotPasswordFormTypes>();\n const translate = useTranslate();\n const routerType = useRouterType();\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n const { mutate: forgotPassword, isLoading } =\n useForgotPassword<ForgotPasswordFormTypes>();\n\n const PageTitle =\n title === false ? null : (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: \"32px\",\n fontSize: \"20px\",\n }}\n >\n {title ?? <ThemedTitle collapsed={false} />}\n </div>\n );\n\n const CardTitle = (\n <Title\n level={3}\n style={{\n color: token.colorPrimaryTextHover,\n ...titleStyles,\n }}\n >\n {translate(\"pages.forgotPassword.title\", \"Forgot your password?\")}\n </Title>\n );\n const CardContent = (\n <Card\n title={CardTitle}\n headStyle={headStyles}\n bodyStyle={bodyStyles}\n style={{\n ...containerStyles,\n backgroundColor: token.colorBgElevated,\n }}\n {...(contentProps ?? {})}\n >\n <Form<ForgotPasswordFormTypes>\n layout=\"vertical\"\n form={form}\n onFinish={(values) => forgotPassword(values)}\n requiredMark={false}\n {...formProps}\n >\n <Form.Item\n name=\"email\"\n label={translate(\n \"pages.forgotPassword.fields.email\",\n \"Email\",\n )}\n rules={[\n { required: true },\n {\n type: \"email\",\n message: translate(\n \"pages.forgotPassword.errors.validEmail\",\n \"Invalid email address\",\n ),\n },\n ]}\n >\n <Input\n type=\"email\"\n size=\"large\"\n placeholder={translate(\n \"pages.forgotPassword.fields.email\",\n \"Email\",\n )}\n />\n </Form.Item>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n {loginLink ?? (\n <Text\n style={{\n fontSize: 12,\n marginLeft: \"auto\",\n }}\n >\n {translate(\n \"pages.register.buttons.haveAccount\",\n \"Have an account? \",\n )}{\" \"}\n <ActiveLink\n style={{\n fontWeight: \"bold\",\n color: token.colorPrimaryTextHover,\n }}\n to=\"/login\"\n >\n {translate(\"pages.login.signin\", \"Sign in\")}\n </ActiveLink>\n </Text>\n )}\n </div>\n <Form.Item\n style={{\n marginTop: \"24px\",\n marginBottom: 0,\n }}\n >\n <Button\n type=\"primary\"\n size=\"large\"\n htmlType=\"submit\"\n loading={isLoading}\n block\n >\n {translate(\n \"pages.forgotPassword.buttons.submit\",\n \"Send reset instructions\",\n )}\n </Button>\n </Form.Item>\n </Form>\n </Card>\n );\n\n return (\n <Layout style={layoutStyles} {...(wrapperProps ?? {})}>\n <Row\n justify=\"center\"\n align=\"middle\"\n style={{\n height: \"100vh\",\n }}\n >\n <Col xs={22}>\n {renderContent ? (\n renderContent(CardContent, PageTitle)\n ) : (\n <>\n {PageTitle}\n {CardContent}\n </>\n )}\n </Col>\n </Row>\n </Layout>\n );\n};\n","import React from \"react\";\nimport {\n UpdatePasswordPageProps,\n UpdatePasswordFormTypes,\n useActiveAuthProvider,\n} from \"@refinedev/core\";\nimport {\n Row,\n Col,\n Layout,\n Card,\n Typography,\n Form,\n Input,\n Button,\n LayoutProps,\n CardProps,\n FormProps,\n theme,\n} from \"antd\";\nimport { useTranslate, useUpdatePassword } from \"@refinedev/core\";\n\nimport {\n layoutStyles,\n containerStyles,\n titleStyles,\n headStyles,\n bodyStyles,\n} from \"../styles\";\nimport { ThemedTitle } from \"@components\";\n\nconst { Title } = Typography;\nconst { useToken } = theme;\n\ntype UpdatePasswordProps = UpdatePasswordPageProps<\n LayoutProps,\n CardProps,\n FormProps\n>;\n\n/**\n * **refine** has update password page form which is served on `/update-password` route when the `authProvider` configuration is provided.\n *\n * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/antd-auth-page/#update-password} for more details.\n */\nexport const UpdatePasswordPage: React.FC<UpdatePasswordProps> = ({\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title,\n}) => {\n const { token } = useToken();\n const [form] = Form.useForm<UpdatePasswordFormTypes>();\n const translate = useTranslate();\n const authProvider = useActiveAuthProvider();\n const { mutate: updatePassword, isLoading } =\n useUpdatePassword<UpdatePasswordFormTypes>({\n v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),\n });\n\n const PageTitle =\n title === false ? null : (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: \"32px\",\n fontSize: \"20px\",\n }}\n >\n {title ?? <ThemedTitle collapsed={false} />}\n </div>\n );\n\n const CardTitle = (\n <Title\n level={3}\n style={{\n color: token.colorPrimaryTextHover,\n ...titleStyles,\n }}\n >\n {translate(\"pages.updatePassword.title\", \"Set New Password\")}\n </Title>\n );\n\n const CardContent = (\n <Card\n title={CardTitle}\n headStyle={headStyles}\n bodyStyle={bodyStyles}\n style={{\n ...containerStyles,\n backgroundColor: token.colorBgElevated,\n }}\n {...(contentProps ?? {})}\n >\n <Form<UpdatePasswordFormTypes>\n layout=\"vertical\"\n form={form}\n onFinish={(values) => updatePassword(values)}\n requiredMark={false}\n {...formProps}\n >\n <Form.Item\n name=\"password\"\n label={translate(\n \"pages.updatePassword.fields.password\",\n \"New Password\",\n )}\n rules={[{ required: true }]}\n style={{ marginBottom: \"12px\" }}\n >\n <Input\n type=\"password\"\n placeholder=\"●●●●●●●●\"\n size=\"large\"\n />\n </Form.Item>\n <Form.Item\n name=\"confirmPassword\"\n label={translate(\n \"pages.updatePassword.fields.confirmPassword\",\n \"Confirm New Password\",\n )}\n hasFeedback\n dependencies={[\"password\"]}\n rules={[\n {\n required: true,\n },\n ({ getFieldValue }) => ({\n validator(_, value) {\n if (\n !value ||\n getFieldValue(\"password\") === value\n ) {\n return Promise.resolve();\n }\n return Promise.reject(\n new Error(\n translate(\n \"pages.updatePassword.errors.confirmPasswordNotMatch\",\n \"Passwords do not match\",\n ),\n ),\n );\n },\n }),\n ]}\n >\n <Input\n type=\"password\"\n placeholder=\"●●●●●●●●\"\n size=\"large\"\n />\n </Form.Item>\n <Form.Item\n style={{\n marginBottom: 0,\n }}\n >\n <Button\n type=\"primary\"\n size=\"large\"\n htmlType=\"submit\"\n loading={isLoading}\n block\n >\n {translate(\n \"pages.updatePassword.buttons.submit\",\n \"Update\",\n )}\n </Button>\n </Form.Item>\n </Form>\n </Card>\n );\n\n return (\n <Layout style={layoutStyles} {...(wrapperProps ?? {})}>\n <Row\n justify=\"center\"\n align=\"middle\"\n style={{\n height: \"100vh\",\n }}\n >\n <Col xs={22}>\n {renderContent ? (\n renderContent(CardContent, PageTitle)\n ) : (\n <>\n {PageTitle}\n {CardContent}\n </>\n )}\n </Col>\n </Row>\n </Layout>\n );\n};\n","import React from \"react\";\nimport {\n useBreadcrumb,\n useLink,\n useRefineContext,\n useRouterContext,\n useRouterType,\n useResource,\n matchResourceFromRoute,\n} from \"@refinedev/core\";\nimport { RefineBreadcrumbProps } from \"@refinedev/ui-types\";\n\nimport {\n Breadcrumb as AntdBreadcrumb,\n BreadcrumbProps as AntdBreadcrumbProps,\n} from \"antd\";\nimport { HomeOutlined } from \"@ant-design/icons\";\n\nexport type BreadcrumbProps = RefineBreadcrumbProps<AntdBreadcrumbProps>;\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n breadcrumbProps,\n showHome = true,\n hideIcons = false,\n meta,\n}) => {\n const routerType = useRouterType();\n const { breadcrumbs } = useBreadcrumb({\n meta,\n });\n const Link = useLink();\n const { Link: LegacyLink } = useRouterContext();\n const { hasDashboard } = useRefineContext();\n\n const { resources } = useResource();\n\n const rootRouteResource = matchResourceFromRoute(\"/\", resources);\n\n const ActiveLink = routerType === \"legacy\" ? LegacyLink : Link;\n\n if (breadcrumbs.length === 1) {\n return null;\n }\n\n const breadCrumbItems = breadcrumbs.map(({ label, icon, href }) => ({\n key: `breadcrumb-item-${label}`,\n title: (\n <>\n {!hideIcons && icon}\n {href ? (\n <ActiveLink to={href}>{label}</ActiveLink>\n ) : (\n <span>{label}</span>\n )}\n </>\n ),\n }));\n\n const getBreadcrumbItems = () => {\n if (showHome && (hasDashboard || rootRouteResource.found)) {\n return [\n {\n key: \"breadcrumb-item-home\",\n title: (\n <ActiveLink to=\"/\">\n {rootRouteResource?.resource?.meta?.icon ?? (\n <HomeOutlined />\n )}\n </ActiveLink>\n ),\n },\n ...breadCrumbItems,\n ];\n }\n\n return breadCrumbItems;\n };\n\n return <AntdBreadcrumb items={getBreadcrumbItems()} {...breadcrumbProps} />;\n};\n","import React, { FC } from \"react\";\nimport {\n PageHeader as AntdPageHeader,\n PageHeaderProps as AntdPageHeaderProps,\n} from \"@ant-design/pro-layout\";\nimport { Button, Typography } from \"antd\";\nimport { ArrowLeftOutlined } from \"@ant-design/icons\";\n\nexport type PageHeaderProps = AntdPageHeaderProps;\n\nexport const PageHeader: FC<AntdPageHeaderProps> = ({ children, ...props }) => {\n const backIcon =\n typeof props.backIcon === \"undefined\" ? (\n <Button type=\"text\" icon={<ArrowLeftOutlined />} />\n ) : (\n props.backIcon\n );\n\n const title =\n typeof props.title === \"string\" ? (\n <Typography.Title level={4} style={{ marginBottom: 0 }}>\n {props.title}\n </Typography.Title>\n ) : (\n props.title\n );\n\n const subtitle =\n typeof props.title === \"string\" ? (\n <Typography.Title\n level={5}\n type=\"secondary\"\n style={{ marginBottom: 0 }}\n >\n {props.subTitle}\n </Typography.Title>\n ) : (\n props.subTitle\n );\n\n return (\n <AntdPageHeader\n {...props}\n backIcon={backIcon}\n title={title}\n subTitle={subtitle}\n style={{ padding: 0, ...props.style }}\n >\n {children}\n </AntdPageHeader>\n );\n};\n","import type { UploadFile, UploadChangeParam } from \"antd/lib/upload/interface\";\n\nexport const getValueFromEvent = (event: UploadChangeParam): UploadFile[] => {\n const { fileList } = event;\n\n return [...fileList];\n};\n\nexport function file2Base64(file: UploadFile): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n const resultHandler = () => {\n if (reader.result) {\n reader.removeEventListener(\"load\", resultHandler, false);\n\n resolve(reader.result as string);\n }\n };\n\n reader.addEventListener(\"load\", resultHandler, false);\n\n reader.readAsDataURL(file.originFileObj as Blob);\n reader.onerror = (error) => {\n reader.removeEventListener(\"load\", resultHandler, false);\n return reject(error);\n };\n });\n}\n","import { ThemeConfig } from \"antd\";\n\ntype ThemeNames =\n | \"Blue\"\n | \"Purple\"\n | \"Magenta\"\n | \"Red\"\n | \"Orange\"\n | \"Yellow\"\n | \"Green\";\n\ntype RefineThemes = Record<ThemeNames, ThemeConfig>;\n\nexport const RefineThemes: RefineThemes = {\n Blue: {\n token: {\n colorPrimary: \"#1677FF\",\n },\n },\n Purple: {\n token: {\n colorPrimary: \"#722ED1\",\n },\n },\n Magenta: {\n token: {\n colorPrimary: \"#EB2F96\",\n },\n },\n Red: {\n token: {\n colorPrimary: \"#F5222D\",\n },\n },\n Orange: {\n token: {\n colorPrimary: \"#FA541C\",\n },\n },\n Yellow: {\n token: {\n colorPrimary: \"#FAAD14\",\n },\n },\n Green: {\n token: {\n colorPrimary: \"#52C41A\",\n },\n },\n};\n"],"mappings":"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","names":["src_exports","__export","AuthPage","Authenticated","CanAccess","ErrorComponent","GitHubBanner","LayoutWrapper","LoginPage","ReadyPage","Refine","ResourceContext","RouteChangeHandler","UndoableQueue","WelcomePage","createTreeView","file2Base64","getDefaultFilter","getDefaultSortOrder","getNextPageParam","getPreviousPageParam","handleUseParams","importCSVMapper","legacyResourceTransform","matchResourceFromRoute","parseTableParams","parseTableParamsFromQuery","pickNotDeprecated","routeGenerator","setInitialFilters","setInitialSorters","stringifyTableParams","unionFilters","unionSorters","useActiveAuthProvider","useApiUrl","useAuthenticated","useBack","useBreadcrumb","useCan","useCanWithoutCache","useCancelNotification","useCheckError","useCreate","useCreateMany","useCustom","useCustomMutation","useDataProvider","useDelete","useDeleteMany","useExport","useForgotPassword","useForm","useGetIdentity","useGetLocale","useGetToPath","useGo","useHandleNotification","useImport","useInfiniteList","useInvalidate","useIsAuthenticated","useIsExistAuthentication","useLink","useList","useLiveMode","useLog","useLogList","useLogin","useLogout","useMany","useMenu","useModal","useMutationMode","useNavigation","useNotification","useOnError","useOne","useParse","useParsed","usePermissions","usePublish","useRedirectionAfterSubmission","useRefineContext","useRegister","useResource","useResourceSubscription","useResourceWithRoute","useRouterContext","useRouterType","useSelect","useSetLocale","useShow","useSubscription","useSyncWithLocation","useTable","useTitle","useToPath","useTranslate","useUpdate","useUpdateMany","useUpdatePassword","useWarnAboutChange","userFriendlyResourceName","module","__toCommonJS","import_react","LegacyAuthContext","it","React","LegacyAuthContextProvider","children","isProvided","authOperations","replace","loginFunc","params","_a","error","registerFunc","logoutFunc","checkAuthFunc","AuthBindingsContext","AuthBindingsContextProvider","authBindings","handleLogin","handleRegister","handleLogout","handleCheck","result","handleForgotPassword","handleUpdatePassword","useLegacyAuthContext","useAuthBindingsContext","import_react_query","v3LegacyAuthProviderCompatible","options","legacyGetPermission","getPermissions","queryResponse","so","legacyQueryResponse","queryOptions","legacyGetUserIdentity","getIdentity","ao","useInvalidateAuthStore","queryClient","Tn","mutationOptions","invalidateAuthStore","routerType","go","push","open","close","legacyLogoutFromContext","logoutFromContext","mutation","uo","data","variables","success","redirectTo","redirectPath","redirect","buildNotification","v3LegacyAuthProviderCompatibleMutation","import_qs","parsed","useLocation","search","legacyLoginFromContext","loginFromContext","to","xn","Pn","qs","co","redirectPathFromAuth","legacyRegisterFromContext","registerFromContext","mo","v3LegacyAuthProviderCompatibleForgotPasswordFromContext","forgotPasswordFromContext","yo","legacyUpdatePasswordFromContext","updatePasswordFromContext","Cn","queryStrings","bn","Ro","checkAuth","check","To","legacyCheckErrorFromContext","onErrorFromContext","legacyLogout","logout","xo","shouldLogout","legacyIsProvided","userFriendlySecond","miliseconds","import_zip","import_fromPairs","mapData","item","headers","body","entry","En","fromPairs","Dn","zip","index","array","import_pluralize","import_unionWith","import_differenceWith","import_warn_once","url","current","pageSize","sorter","sorters","filters","Pr","pagination","rest","compareFilters","left","right","compareSorters","permanentFilter","newFilters","prevFilters","f","Ln","warnOnce","Po","unionWith","crudFilter","permanentSorter","newSorters","crudSorter","defaultFilter","Co","differenceWith","defaultSorter","columnName","sortItem","operatorType","filter","operator","field","file","resolve","reject","reader","resultHandler","resource","type","humanizeResource","humanizeString","bo","pluralize","args","arg","queryKeys","dataProviderName","meta","metaData","providerName","keys","config","ids","id","hasPermission","permissions","action","i","isParameter","segment","splitToSegments","path","isSegmentCountsSame","route","resourceRoute","routeSegments","resourceRouteSegments","removeLeadingTrailingSlashes","checkBySegments","stdRoute","stdResourceRoute","getDefaultActionPath","resourceName","parentPrefix","cleanParentPrefix","getParentResource","resources","_b","parentName","parentResource","getParentPrefixForResource","legacy","parents","parent","v","getActionRoutesFromResource","actions","actionList","_c","_d","pickMatchedRoute","routes","sanitizedRoutes","segmentsCount","eligibleRoutes","nonParametrizedRoutes","allFound","actionRoute","mostEligible","resourcesFromProps","tree","resourcesRouteObject","resourcesNameObject","child","name","text","DefaultLayout","Qn","defaultRefineOptions","RefineContext","Uo","RefineContextProvider","hasDashboard","mutationMode","warnWhenUnsavedChanges","syncWithLocation","undoableTimeout","DashboardPage","Title","Layout","Header","Sider","Footer","OffLayoutArea","catchAll","liveMode","onLiveEvent","handleRefineOptions","disableTelemetry","reactQueryClientConfig","reactQueryDevtoolConfig","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","optionsWithDefaults","disableTelemetryWithDefault","reactQueryWithDefaults","redirectPage","redirectFromProps","redirectOptions","sequentialPromises","promises","onEachResolve","onEachReject","results","promise","pickResource","identifier","r","pickDataProvider","handleMultiple","res","lastPage","cursor","totalPages","_resources","pickRouteParams","s","prepareRouteParams","routeParams","acc","key","value","composeRoute","designatedRoute","preparedRouteParams","match","fromParams","legacyAuthProvider","authProvider","handlePaginationParams","hasPagination","configPagination","hasPaginationString","mode","useMediaQuery","query","matches","setMatches","vr","media","listener","successNotification","errorNotification","liveParams","dataProvider","translate","checkError","handleNotification","pickedDataProvider","preferredMeta","prefferedFilters","prefferedSorters","prefferedHasPagination","prefferedPagination","isServerPagination","notificationValues","isEnabled","queryKey","getList","Fn","pageParam","signal","rawData","notificationConfig","err","getOne","On","getMany","Kn","import_isEqual","UndoableQueueContext","Dt","initialState","undoableQueueReducer","state","notificationItem","Lr","isEqual","UndoableQueueContextProvider","notifications","notificationDispatch","notificationData","notification","Ir","mutationModeContext","undoableTimeoutContext","publish","log","invalidateStore","values","onCancel","mutationModePropOrContext","undoableTimeoutPropOrContext","doMutation","cancelMutation","previousQueries","previous","record","_data","_error","invalidates","context","resourceSingular","Qo","previousData","queryData","fields","operation","Hn","successNotificationFromProp","Bo","errorNotificationFromProp","wr","Vo","$n","selectedDataProvider","val","response","resourcePlural","Gn","Sr","mutationFn","No","kr","jn","getApiUrl","method","custom","Yn","Xn","defaultDataProvider","DataContext","Fo","DataContextProvider","dataProviders","Qr","ts","paginationProperties","total","LiveContext","Oo","LiveContextProvider","liveProvider","channel","types","enabled","liveModeFromProp","ns","liveDataContext","qt","liveModeFromContext","onLiveEventContextCallback","subscription","event","ss","Br","liveContext","as","useMemoized","ref","is","us","useDeepMemo","fn","dependencies","memoizedDependencies","cs","Ho","ResourceContextProvider","providedResources","RouterPickerContext","Wo","RouterPickerProvider","defaultBindings","RouterBindingsContext","Nr","RouterBindingsProvider","router","bindings","Fr","parse","gs","Rs","oldProps","resourceWithRoute","useParams","legacyParams","resourceKeyToCheck","legacyResource","legacyId","legacyAction","legacyResourceName","pickedFromProps","Kr","Ts","NotificationContext","Hr","NotificationContextProvider","Ps","Cs","fallbackNotification","TranslationContext","$o","TranslationContextProvider","i18nProvider","Wr","lang","$r","defaultMessage","Gr","Ds","UnsavedWarnContext","tr","UnsavedWarnContextProvider","warnWhen","setWarnWhen","zo","Ls","Ms","Us","import_export_to_csv_fix_source_map","resourceFromProps","maxItemCount","exportOptions","onError","isLoading","setIsLoading","ws","filename","preparingData","As","actionFromProps","idFromProps","onMutationSuccess","onMutationError","mutationModeProp","createMutationOptions","updateMutationOptions","resourceFromRouter","idFromRouter","actionFromRouter","legacyResourceFromRoute","legacyActionFromRoute","legacyIdFromParams","newResourceNameFromRouter","defaultId","setId","jo","fallbackAction","picked","isCreate","isEdit","isClone","Ss","designatedRedirectAction","enableQuery","queryResult","isFetchingQuery","mutationResultCreate","mutateCreate","isLoadingCreate","mutationResultUpdate","mutateUpdate","isLoadingUpdate","handleSubmitWithRedirect","onSuccess","_","responseId","idFromFunction","show","edit","list","create","ks","jr","useHistory","history","back","handleUrl","createUrl","resourceItem","createActionRoute","editUrl","encodedId","editActionRoute","cloneUrl","cloneActionRoute","showUrl","showActionRoute","listUrl","listActionRoute","resourceFromProp","showId","setShowId","Yr","Qs","import_papaparse","import_chunk","paparseOptions","batchSize","onFinish","onProgress","processedAmount","setProcessedAmount","Ut","totalAmount","setTotalAmount","createMany","mutationResult","handleCleanup","handleFinish","createdValues","handleChange","Bs","valueFns","currentAmount","chunks","Vs","chunk","chunkedFns","chunkedValues","currentBatchLength","defaultVisible","visible","setVisible","rr","resourceFromRoute","Ns","selectedResource","Jr","defaultProvider","LegacyRouterContext","Zo","RouterContext","LegacyRouterContextProvider","Prompt","Link","routerContextValues","Ks","AccessControlContext","Yo","AccessControlContextProvider","can","sanitizeResource","icon","clone","restResource","_metaIcon","restMeta","_optionsIcon","restOptions","Gs","_resource","paramsRest","sanitizedResource","$s","zs","import_uniqBy","import_debounce","import_get","props","setSearch","Ze","setOptions","selectedOptions","setSelectedOptions","sort","optionLabel","optionValue","debounceValue","defaultValueQueryOptionsFromProps","fetchSize","defaultValue","onSearchFromProp","pickedResource","defaultValues","defaultValueQueryOnSuccess","nr","get","defaultValueQueryOptions","defaultValueQueryResult","defaultQueryOnSuccess","onSearch","js","uniqBy","debounce","defaultPermanentFilter","defaultPermanentSorter","initialCurrent","initialPageSize","initialSorter","defaultSetFilterBehavior","initialFilter","filtersFromProp","sortersFromProp","syncWithLocationProp","syncWithLocationContext","pathname","parsedParams","isPaginationEnabled","prefferedCurrent","prefferedPageSize","parsedCurrent","parsedPageSize","parsedSorter","parsedFilters","preferredInitialFilters","preferredPermanentFilters","preferredInitialSorters","preferredPermanentSorters","prefferedFilterBehavior","defaultCurrent","defaultPageSize","resourceInUse","Ne","Js","setSorters","setFilters","setCurrent","setPageSize","createLinkForSyncWithLocation","currentQueryParams","Xo","stringifyParams","queryParams","sr","ar","setFiltersAsMerge","setFiltersAsReplace","setFiltersWithSetter","setter","prev","setFiltersFn","setterOrFilters","behavior","setSortWithUnion","newSorter","AuditLogContext","qo","AuditLogContextProvider","update","logMutationOptions","renameMutationOptions","ir","auditLogContext","en","identityData","refetch","logPermissions","authorData","rename","author","ea","ra","ta","metaFromProps","oa","breadcrumbs","addBreadcrumb","grandParentName","listActionOfResource","hrefRaw","href","actionLabel","na","createResourceKey","currentParentResource","createTree","root","currentParent","currentTree","flatten","items","itemKey","getCleanPath","hideOnMissingParameter","getToPath","legacyPath","cleanPathname","cleanRoute","selectedKey","defaultOpenKeys","Xr","prepareItem","composed","treeItems","treeMenuItems","prepare","preparedNodes","newItem","errorMessage","setErrorMessage","Fe","username","setUsername","ue","password","setPassword","login","e","providers","registerLink","forgotPasswordLink","rememberMe","contentProps","wrapperProps","renderContent","formProps","title","LegacyLink","ActiveLink","email","setEmail","Y","remember","setRemember","renderLink","link","renderProviders","provider","content","RegisterPage","loginLink","ae","register","ForgotPasswordPage","Re","forgotPassword","UpdatePasswordPage","updatePassword","newPassword","setNewPassword","Te","confirmPassword","setConfirmPassword","ft","xe","CARDS","G","isTablet","isMobile","getGridTemplateColumns","getHeaderFontSize","getSubHeaderFontSize","card","Card","description","isHover","setIsHover","import_react_query_devtools","REFINE_VERSION","useTelemetryData","auth","ot","routerContext","dataContext","notificationContext","accessControlContext","auditLog","live","i18n","accessControl","encode","payload","stringifyedPayload","Telemetry","ga","img","checkRouterPropMisuse","otherProps","useRouterMisuseWarning","warned","tn","legacyRouterProvider","routerProvider","notificationProvider","accessControlProvider","auditLogProvider","ur","notificationProviderContextValues","ee","RouterComponent","Pa","timeoutId","setTimeoutId","cancelNotification","newTimeoutId","LayoutFromProps","SiderFromProps","HeaderFromProps","TitleFromProps","FooterFromProps","OffLayoutAreaFromProps","LayoutToRender","St","UnsavedPrompt","warnWhenListener","useDeferredGo","setConfig","Ce","redirectOnFail","appendCurrentPathToQuery","fallbackContent","loadingContent","activeAuthProvider","hasAuthProvider","isLegacyAuth","isLegacyRouter","deferredGo","legacyLocation","isFetching","isSuccess","isAuthenticatedStatus","authenticatedRedirect","isAuthenticated","appliedRedirect","toQuery","location","va","fallback","legacyActionFromParams","yt","CSSRules","nt","styleTag","rule","src_exports","__export","RefineButtonTestIds","module","__toCommonJS","import_react","import_antd","import_sunflower_antd","import_core","useForm","action","resource","onMutationSuccessProp","onMutationError","submitOnEnter","warnWhenUnsavedChangesProp","redirect","successNotification","errorNotification","meta","metaData","liveMode","liveParams","mutationMode","dataProviderName","onLiveEvent","invalidates","undoableTimeout","queryOptions","createMutationOptions","updateMutationOptions","idFromProps","_a","_b","formAnt","formSF","useFormSF","form","useFormCoreResult","useFormCore","formLoading","onFinish","queryResult","id","warnWhenUnsavedChangesRefine","setWarnWhen","warnWhenUnsavedChanges","React","onKeyUp","event","onValuesChange","changeValues","saveButtonProps","values","error","import_react","import_sunflower_antd","import_core","useModalForm","syncWithLocation","rest","_a","_b","_c","_d","_e","_f","_g","_h","initiallySynced","React","useFormProps","useForm","form","formProps","id","setId","formLoading","onFinish","resource","actionFromParams","parsed","go","action","syncingId","syncWithLocationKey","translate","warnWhen","setWarnWhen","sunflowerUseModal","useModalFormSF","visible","show","modalFormProps","modalProps","openStatus","idFromParams","saveButtonPropsSF","handleClose","handleShow","_visible","otherModalProps","newModalProps","import_react","import_core","useDrawerForm","syncWithLocation","defaultVisible","autoSubmitClose","autoResetForm","rest","_a","_b","_c","initiallySynced","React","visible","show","close","useFormProps","useForm","form","formProps","formLoading","id","setId","onFinish","resource","actionFromParams","parsed","go","action","syncingId","syncWithLocationKey","_d","openStatus","idFromParams","translate","warnWhen","setWarnWhen","saveButtonProps","deleteButtonProps","handleClose","handleShow","import_sunflower_antd","useStepsForm","props","useFormProps","useForm","form","formProps","stepsPropsSunflower","useStepsFormSF","values","_a","import_react","import_antd","import_sunflower_antd","import_core","import_core","getDefaultSortOrder","columnName","sorter","sort","getDefaultSortOrderCore","getDefaultFilter","filters","operatorType","getDefaultFilterCore","mapAntdSorterToCrudSorting","_a","crudSorting","a","b","_b","_c","_d","item","field","mapAntdFilterToCrudFilter","tableFilters","prevFilters","initialFilters","crudFilters","mapInitialFilter","acc","value","operator","i","import_core","import_react","PaginationLink","to","element","LegacyLink","routerType","Link","React","e","useTable","onSearch","initialCurrent","initialPageSize","hasPagination","pagination","initialSorter","permanentSorter","initialFilter","permanentFilter","defaultSetFilterBehavior","filtersFromProp","sortersFromProp","syncWithLocation","resource","successNotification","errorNotification","queryOptions","liveModeFromProp","onLiveEvent","liveParams","meta","metaData","dataProviderName","_a","tableQueryResult","current","setCurrent","pageSize","setPageSize","filters","setFilters","sorters","setSorters","sorter","setSorter","createLinkForSyncWithLocation","pageCount","useTableCore","breakpoint","form","formSF","useFormSF","liveMode","hasPaginationString","isPaginationEnabled","preferredInitialFilters","data","isFetched","isLoading","onChange","paginationState","tableFilters","crudFilters","mapAntdFilterToCrudFilter","crudSorting","mapAntdSorterToCrudSorting","onFinish","value","searchFilters","antdPagination","page","type","element","link","PaginationLink","elementChildren","useEditableTable","props","table","useTable","edit","useForm","editId","setId","saveButtonProps","id","import_core","useSelect","props","queryResult","defaultValueQueryResult","onSearch","options","useSelectCore","import_core","useCheckboxGroup","resource","sort","sorters","filters","optionLabel","optionValue","queryOptions","fetchSize","pagination","liveMode","defaultValue","onLiveEvent","liveParams","meta","metaData","dataProviderName","queryResult","options","import_core","useRadioGroup","resource","sort","sorters","filters","optionLabel","optionValue","queryOptions","fetchSize","pagination","liveMode","defaultValue","onLiveEvent","liveParams","meta","metaData","dataProviderName","queryResult","options","import_react","import_antd","import_core","useImport","resourceFromProp","resourceName","mapData","item","paparseOptions","batchSize","onFinish","meta","metaData","dataProviderName","onProgressFromProp","_a","t","resource","mutationResult","isLoading","handleChange","useImportCore","totalAmount","processedAmount","description","React","import_react","import_antd","import_core","useSimpleList","resource","initialCurrent","initialPageSize","pagination","hasPagination","initialSorter","permanentSorter","initialFilter","permanentFilter","defaultSetFilterBehavior","filtersFromProp","sortersFromProp","onSearch","queryOptions","syncWithLocation","successNotification","errorNotification","liveModeFromProp","onLiveEvent","liveParams","meta","metaData","dataProviderName","_a","sorters","sorter","filters","current","pageSize","pageCount","setFilters","setCurrent","setPageSize","setSorter","setSorters","createLinkForSyncWithLocation","queryResult","useTableCore","hasPaginationString","isPaginationEnabled","breakpoint","liveMode","form","data","isFetched","isLoading","onChange","page","onFinish","values","searchFilters","antdPagination","type","element","link","PaginationLink","elementChildren","import_react","useFileUploadState","isLoading","setIsloading","onChange","info","mapStatusToLoading","files","file","import_core","useModal","modalProps","show","close","visible","useCoreModal","e","_a","import_react","import_antd","import_react","import_antd","import_icons","UndoableNotification","notificationKey","message","cancelMutation","undoableTimeout","React","time","notificationProvider","key","message","description","type","cancelMutation","undoableTimeout","React","UndoableNotification","import_react","import_antd","import_react","import_antd","import_icons","import_core","drawerButtonStyles","SubMenu","Sider","TitleFromProps","render","meta","_a","collapsed","setCollapsed","drawerOpen","setDrawerOpen","isExistAuthentication","routerType","NewLink","warnWhen","setWarnWhen","LegacyLink","Link","TitleFromContext","translate","menuItems","selectedKey","defaultOpenKeys","breakpoint","hasDashboard","authProvider","mutateLogout","isMobile","RenderToTitle","Title","renderTreeView","tree","item","icon","label","route","key","name","children","parentName","options","React","isSelected","isRoute","handleLogout","logout","dashboard","items","renderSider","renderMenu","renderDrawerSider","drawerButtonStyles","import_core","import_antd","import_react","Text","Header","authProvider","user","React","AntdLayout","Layout","children","Header","Sider","Title","Footer","OffLayoutArea","breakpoint","SiderToRender","HeaderToRender","isSmall","React","AntdLayout","import_react","import_core","Title","collapsed","routerType","Link","LegacyLink","React","import_react","import_antd","import_react","import_antd","import_icons","import_core","drawerButtonStyles","SubMenu","useToken","ThemedSider","TitleFromProps","render","meta","_a","token","collapsed","setCollapsed","drawerOpen","setDrawerOpen","isExistAuthentication","routerType","NewLink","warnWhen","setWarnWhen","LegacyLink","Link","TitleFromContext","translate","menuItems","selectedKey","defaultOpenKeys","breakpoint","hasDashboard","authProvider","mutateLogout","isMobile","RenderToTitle","ThemedTitle","renderTreeView","tree","item","icon","label","route","key","name","children","parentName","options","React","isSelected","isRoute","handleLogout","logout","dashboard","items","renderSider","renderMenu","renderDrawerSider","drawerButtonStyles","import_react","import_antd","import_core","Text","useToken","ThemedHeader","token","authProvider","user","React","AntdLayout","ThemedLayout","children","Header","Sider","Title","Footer","OffLayoutArea","breakpoint","SiderToRender","ThemedSider","HeaderToRender","ThemedHeader","isSmall","React","AntdLayout","import_react","import_core","import_antd","useToken","defaultText","defaultIcon","React","ThemedTitle","collapsed","icon","text","wrapperStyles","token","routerType","Link","LegacyLink","import_react","import_antd","import_icons","import_core","import_ui_types","CreateButton","resourceNameFromProps","propResourceNameOrRouteName","hideText","accessControl","meta","children","onClick","rest","_a","_b","accessControlEnabled","hideIfUnauthorized","translate","routerType","Link","LegacyLink","ActiveLink","generateCreateUrl","resource","data","createButtonDisabledTitle","createUrl","React","e","import_react","import_antd","import_icons","import_core","import_ui_types","EditButton","resourceNameFromProps","propResourceNameOrRouteName","recordItemId","hideText","accessControl","meta","children","onClick","rest","_a","_b","accessControlEnabled","hideIfUnauthorized","translate","routerType","Link","LegacyLink","ActiveLink","generateEditUrl","id","resource","data","createButtonDisabledTitle","editUrl","React","e","import_react","import_antd","import_icons","import_core","import_ui_types","DeleteButton","resourceNameFromProps","propResourceNameOrRouteName","recordItemId","onSuccess","mutationModeProp","children","successNotification","errorNotification","hideText","accessControl","metaData","meta","dataProviderName","confirmTitle","confirmOkText","confirmCancelText","invalidates","rest","_a","_b","accessControlEnabled","hideIfUnauthorized","translate","id","resource","mutationModeContext","mutationMode","mutate","isLoading","variables","data","setWarnWhen","React","value","import_react","import_antd","import_icons","import_core","import_ui_types","RefreshButton","resourceNameFromProps","propResourceNameOrRouteName","recordItemId","hideText","meta","metaData","dataProviderName","children","onClick","rest","translate","resource","id","refetch","isFetching","React","e","import_react","import_antd","import_icons","import_core","import_ui_types","ShowButton","resourceNameFromProps","propResourceNameOrRouteName","recordItemId","hideText","accessControl","meta","children","onClick","rest","_a","_b","accessControlEnabled","hideIfUnauthorized","generateShowUrl","routerType","Link","LegacyLink","ActiveLink","translate","id","resource","data","createButtonDisabledTitle","showUrl","React","e","import_react","import_antd","import_icons","import_core","import_ui_types","ListButton","resourceNameFromProps","propResourceNameOrRouteName","hideText","accessControl","meta","children","onClick","rest","_a","_b","_c","_d","_e","_f","_g","_h","accessControlEnabled","hideIfUnauthorized","generateListUrl","routerType","Link","LegacyLink","ActiveLink","translate","resource","data","createButtonDisabledTitle","listUrl","React","e","import_react","import_antd","import_icons","import_core","import_ui_types","ExportButton","hideText","children","rest","translate","React","import_react","import_antd","import_icons","import_core","import_ui_types","SaveButton","hideText","children","rest","translate","React","import_react","import_antd","import_icons","import_core","import_ui_types","CloneButton","propResourceNameOrRouteName","resourceNameFromProps","recordItemId","hideText","accessControl","meta","children","onClick","rest","_a","_b","accessControlEnabled","hideIfUnauthorized","generateCloneUrl","routerType","Link","LegacyLink","ActiveLink","translate","id","resource","data","createButtonDisabledTitle","cloneUrl","React","e","import_react","import_antd","import_icons","import_core","import_ui_types","ImportButton","uploadProps","buttonProps","hideText","children","translate","React","import_react","import_antd","import_core","List","canCreate","title","children","createButtonProps","resourceFromProps","wrapperProps","contentProps","headerProps","breadcrumbFromProps","headerButtonProps","headerButtons","_a","_b","_c","_d","_e","_f","_g","_h","translate","globalBreadcrumb","routerType","resource","isCreateButtonVisible","breadcrumb","defaultExtra","React","CreateButton","PageHeader","Breadcrumb","import_react","import_antd","import_core","Create","title","saveButtonProps","children","resourceFromProps","isLoading","breadcrumbFromProps","wrapperProps","headerProps","contentProps","headerButtonProps","headerButtons","footerButtonProps","footerButtons","goBackFromProps","_a","_b","_c","_d","_e","_f","translate","globalBreadcrumb","routerType","back","goBack","resource","action","breadcrumb","defaultFooterButtons","React","SaveButton","PageHeader","Breadcrumb","import_react","import_antd","import_core","Edit","title","saveButtonProps","mutationModeProp","recordItemId","children","deleteButtonProps","canDelete","resourceFromProps","isLoading","dataProviderName","breadcrumbFromProps","wrapperProps","headerProps","contentProps","headerButtonProps","headerButtons","footerButtonProps","footerButtons","goBackFromProps","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","translate","globalBreadcrumb","mutationModeContext","mutationMode","routerType","back","go","goBack","legacyGoList","resource","action","idFromParams","goListPath","id","breadcrumb","isDeleteButtonVisible","defaultHeaderButtons","React","ListButton","RefreshButton","defaultFooterButtons","DeleteButton","SaveButton","PageHeader","Breadcrumb","import_react","import_antd","import_core","Show","title","canEdit","canDelete","isLoading","children","resourceFromProps","recordItemId","dataProviderName","breadcrumbFromProps","contentProps","headerProps","wrapperProps","headerButtons","footerButtons","footerButtonProps","headerButtonProps","goBackFromProps","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","translate","globalBreadcrumb","routerType","back","go","goBack","legacyGoList","resource","action","idFromParams","goListPath","id","breadcrumb","isDeleteButtonVisible","isEditButtonVisible","defaultHeaderButtons","React","ListButton","EditButton","DeleteButton","RefreshButton","PageHeader","Breadcrumb","import_react","import_antd","Text","TextField","value","rest","React","import_react","import_antd","TagField","value","rest","React","import_react","import_antd","Link","EmailField","value","rest","React","import_react","import_antd","ImageField","value","imageTitle","rest","React","import_react","import_antd","import_icons","BooleanField","value","valueLabelTrue","valueLabelFalse","trueIcon","React","falseIcon","rest","import_react","import_dayjs","import_antd","import_localizedFormat","dayjs","LocalizedFormat","defaultLocale","DateField","value","locales","dateFormat","rest","Text","React","import_react","FileField","title","src","rest","React","UrlField","import_react","import_antd","Link","UrlField","children","value","rest","React","import_react","import_antd","Text","toLocaleStringSupportsOptions","NumberField","value","locale","options","rest","number","React","import_react","import_react_markdown","import_remark_gfm","MarkdownField","value","React","ReactMarkdown","gfm","import_react","import_antd","import_dayjs","import_icons","import_core","FilterDropdown","props","setSelectedKeys","confirm","clearFilters","mapValue","selectedKeys","children","value","setValue","translate","clearFilter","onFilter","_mappedValue","mappedValue","keys","dayjs","onChange","e","changeEvent","target","childrenWithProps","React","child","import_react","import_core","import_antd","import_icons","Text","ErrorComponent","errorMessage","setErrorMessage","translate","push","go","routerType","resource","action","React","import_react","import_core","import_antd","layoutStyles","containerStyles","titleStyles","imageContainer","Text","Title","LoginPage","form","translate","authProvider","login","isLoading","CardTitle","React","titleStyles","layoutStyles","containerStyles","imageContainer","values","React","import_antd","import_icons","styles","Title","ReadyPage","import_react","import_core","WelcomePage","React","WelcomePageFromCore","import_react","import_react","import_core","import_antd","layoutStyles","containerStyles","headStyles","bodyStyles","titleStyles","Text","Title","useToken","LoginPage","providers","registerLink","forgotPasswordLink","rememberMe","contentProps","wrapperProps","renderContent","formProps","title","token","form","translate","routerType","Link","LegacyLink","ActiveLink","authProvider","login","isLoading","PageTitle","React","ThemedTitle","CardTitle","titleStyles","renderProviders","provider","CardContent","headStyles","bodyStyles","containerStyles","values","layoutStyles","import_react","import_core","import_antd","Text","Title","useToken","RegisterPage","providers","loginLink","wrapperProps","contentProps","renderContent","formProps","title","token","form","translate","routerType","Link","LegacyLink","ActiveLink","authProvider","register","isLoading","PageTitle","React","ThemedTitle","CardTitle","titleStyles","renderProviders","provider","CardContent","headStyles","bodyStyles","containerStyles","values","layoutStyles","import_react","import_core","import_antd","Text","Title","useToken","ForgotPasswordPage","loginLink","wrapperProps","contentProps","renderContent","formProps","title","token","form","translate","routerType","Link","LegacyLink","ActiveLink","forgotPassword","isLoading","PageTitle","React","ThemedTitle","CardTitle","titleStyles","CardContent","headStyles","bodyStyles","containerStyles","values","layoutStyles","import_react","import_core","import_antd","Title","useToken","UpdatePasswordPage","wrapperProps","contentProps","renderContent","formProps","title","token","form","translate","authProvider","updatePassword","isLoading","PageTitle","React","ThemedTitle","CardTitle","titleStyles","CardContent","headStyles","bodyStyles","containerStyles","values","getFieldValue","_","value","layoutStyles","AuthPage","props","type","React","RegisterPage","ForgotPasswordPage","UpdatePasswordPage","LoginPage","import_react","import_core","import_antd","import_icons","Breadcrumb","breadcrumbProps","showHome","hideIcons","meta","routerType","breadcrumbs","Link","LegacyLink","hasDashboard","resources","rootRouteResource","ActiveLink","breadCrumbItems","label","icon","href","React","AntdBreadcrumb","_a","_b","_c","import_react","import_pro_layout","import_antd","import_icons","PageHeader","children","props","backIcon","React","title","subtitle","AntdPageHeader","getValueFromEvent","event","fileList","RefineThemes"]}