@refinedev/core
Version:
Refine is a React meta-framework for building enterprise-level, data-intensive applications rapidly with support for modern UI libraries and headless integrations.
118 lines (109 loc) • 3.7 kB
text/typescript
import type { QueryClient, QueryClientConfig } from "@tanstack/react-query";
import { defaultRefineOptions } from "@contexts/refine";
import type { MutationMode } from "../../../contexts/data/types";
import type { LiveModeProps } from "../../../contexts/live/types";
import type {
IRefineContextOptions,
IRefineOptions,
} from "../../../contexts/refine/types";
type HandleRefineOptionsProps = {
options?: IRefineOptions;
mutationMode?: MutationMode;
syncWithLocation?: boolean;
warnWhenUnsavedChanges?: boolean;
undoableTimeout?: number;
liveMode?: LiveModeProps["liveMode"];
disableTelemetry?: boolean;
reactQueryClientConfig?: QueryClientConfig;
reactQueryDevtoolConfig?: any | false;
};
type HandleRefineOptionsReturnValues = {
optionsWithDefaults: IRefineContextOptions;
disableTelemetryWithDefault: boolean;
reactQueryWithDefaults: {
clientConfig: QueryClientConfig | InstanceType<typeof QueryClient>;
devtoolConfig: false | any;
};
};
export const handleRefineOptions = ({
options,
disableTelemetry,
liveMode,
mutationMode,
reactQueryClientConfig,
reactQueryDevtoolConfig,
syncWithLocation,
undoableTimeout,
warnWhenUnsavedChanges,
}: HandleRefineOptionsProps = {}): HandleRefineOptionsReturnValues => {
const optionsWithDefaults: IRefineContextOptions = {
breadcrumb: options?.breadcrumb,
mutationMode:
options?.mutationMode ??
mutationMode ??
defaultRefineOptions.mutationMode,
undoableTimeout:
options?.undoableTimeout ??
undoableTimeout ??
defaultRefineOptions.undoableTimeout,
syncWithLocation:
options?.syncWithLocation ??
syncWithLocation ??
defaultRefineOptions.syncWithLocation,
warnWhenUnsavedChanges:
options?.warnWhenUnsavedChanges ??
warnWhenUnsavedChanges ??
defaultRefineOptions.warnWhenUnsavedChanges,
liveMode: options?.liveMode ?? liveMode ?? defaultRefineOptions.liveMode,
redirect: {
afterCreate:
options?.redirect?.afterCreate ??
defaultRefineOptions.redirect.afterCreate,
afterClone:
options?.redirect?.afterClone ??
defaultRefineOptions.redirect.afterClone,
afterEdit:
options?.redirect?.afterEdit ?? defaultRefineOptions.redirect.afterEdit,
},
overtime: options?.overtime ?? defaultRefineOptions.overtime,
textTransformers: {
humanize:
options?.textTransformers?.humanize ??
defaultRefineOptions.textTransformers.humanize,
plural:
options?.textTransformers?.plural ??
defaultRefineOptions.textTransformers.plural,
singular:
options?.textTransformers?.singular ??
defaultRefineOptions.textTransformers.singular,
},
disableServerSideValidation:
options?.disableServerSideValidation ??
defaultRefineOptions.disableServerSideValidation,
projectId: options?.projectId,
useNewQueryKeys: options?.useNewQueryKeys,
title: {
icon:
typeof options?.title?.icon === "undefined"
? defaultRefineOptions.title.icon
: options?.title?.icon,
text:
typeof options?.title?.text === "undefined"
? defaultRefineOptions.title.text
: options?.title?.text,
},
};
const disableTelemetryWithDefault =
options?.disableTelemetry ?? disableTelemetry ?? false;
const reactQueryWithDefaults = {
clientConfig:
options?.reactQuery?.clientConfig ?? reactQueryClientConfig ?? {},
devtoolConfig:
options?.reactQuery?.devtoolConfig ?? reactQueryDevtoolConfig ?? {},
};
return {
optionsWithDefaults,
disableTelemetryWithDefault,
reactQueryWithDefaults,
};
};