@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.
1,446 lines (1,387 loc) • 297 kB
JavaScript
"use client"
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
// src/components/pages/error/index.tsx
import React30, { useEffect as useEffect13, useState as useState9 } from "react";
// src/hooks/auth/usePermissions/index.ts
import { getXRay } from "@refinedev/devtools-internal";
import {
useQuery
} from "@tanstack/react-query";
// src/contexts/auth/index.tsx
import React from "react";
import { useQueryClient } from "@tanstack/react-query";
var AuthProviderContext = React.createContext(
{}
);
var AuthProviderContextProvider = /* @__PURE__ */ __name(({ children, isProvided, ...authProvider }) => {
const queryClient = useQueryClient();
const handleLogin = /* @__PURE__ */ __name(async (params) => {
var _a;
try {
const result = await ((_a = authProvider.login) == null ? void 0 : _a.call(authProvider, params));
return result;
} catch (error) {
console.warn(
"Unhandled Error in login: refine always expects a resolved promise.",
error
);
return Promise.reject(error);
}
}, "handleLogin");
const handleRegister = /* @__PURE__ */ __name(async (params) => {
var _a;
try {
const result = await ((_a = authProvider.register) == null ? void 0 : _a.call(authProvider, params));
return result;
} catch (error) {
console.warn(
"Unhandled Error in register: refine always expects a resolved promise.",
error
);
return Promise.reject(error);
}
}, "handleRegister");
const handleLogout = /* @__PURE__ */ __name(async (params) => {
var _a;
try {
const result = await ((_a = authProvider.logout) == null ? void 0 : _a.call(authProvider, params));
queryClient.invalidateQueries();
return result;
} catch (error) {
console.warn(
"Unhandled Error in logout: refine always expects a resolved promise.",
error
);
return Promise.reject(error);
}
}, "handleLogout");
const handleCheck = /* @__PURE__ */ __name(async (params) => {
var _a;
try {
const result = await ((_a = authProvider.check) == null ? void 0 : _a.call(authProvider, params));
return Promise.resolve(result);
} catch (error) {
console.warn(
"Unhandled Error in check: refine always expects a resolved promise.",
error
);
return Promise.reject(error);
}
}, "handleCheck");
const handleForgotPassword = /* @__PURE__ */ __name(async (params) => {
var _a;
try {
const result = await ((_a = authProvider.forgotPassword) == null ? void 0 : _a.call(authProvider, params));
return Promise.resolve(result);
} catch (error) {
console.warn(
"Unhandled Error in forgotPassword: refine always expects a resolved promise.",
error
);
return Promise.reject(error);
}
}, "handleForgotPassword");
const handleUpdatePassword = /* @__PURE__ */ __name(async (params) => {
var _a;
try {
const result = await ((_a = authProvider.updatePassword) == null ? void 0 : _a.call(authProvider, params));
return Promise.resolve(result);
} catch (error) {
console.warn(
"Unhandled Error in updatePassword: refine always expects a resolved promise.",
error
);
return Promise.reject(error);
}
}, "handleUpdatePassword");
return /* @__PURE__ */ React.createElement(
AuthProviderContext.Provider,
{
value: {
...authProvider,
login: handleLogin,
logout: handleLogout,
check: handleCheck,
register: handleRegister,
forgotPassword: handleForgotPassword,
updatePassword: handleUpdatePassword,
isProvided
}
},
children
);
}, "AuthProviderContextProvider");
var useAuthProviderContext = /* @__PURE__ */ __name(() => {
const context = React.useContext(AuthProviderContext);
return context;
}, "useAuthProviderContext");
// src/definitions/table/index.ts
import differenceWith from "lodash-es/differenceWith.js";
import unionWith from "lodash-es/unionWith.js";
import qs from "qs";
import warnOnce from "warn-once";
var QS_PARSE_DEPTH = 10;
var parseTableParams = /* @__PURE__ */ __name((url) => {
const { currentPage, pageSize, sorters, sorter, filters } = qs.parse(
url.substring(1),
// remove first ? character
{ depth: QS_PARSE_DEPTH }
);
return {
parsedCurrentPage: currentPage && Number(currentPage),
parsedPageSize: pageSize && Number(pageSize),
parsedSorter: sorters || sorter || [],
parsedFilters: filters ?? []
};
}, "parseTableParams");
var parseTableParamsFromQuery = /* @__PURE__ */ __name((params) => {
const { currentPage, pageSize, sorters, sorter, filters } = params;
return {
parsedCurrentPage: currentPage && Number(currentPage),
parsedPageSize: pageSize && Number(pageSize),
parsedSorter: sorters || sorter || [],
parsedFilters: filters ?? []
};
}, "parseTableParamsFromQuery");
var stringifyTableParams = /* @__PURE__ */ __name((params) => {
const options = {
skipNulls: true,
arrayFormat: "indices",
encode: false
};
const { pagination, sorters, sorter, filters, ...rest } = params;
const finalSorters = sorters && sorters.length > 0 ? sorters : sorter;
const queryString = qs.stringify(
{
...rest,
...pagination ? pagination : {},
sorters: finalSorters,
filters
},
options
);
return queryString;
}, "stringifyTableParams");
var compareFilters = /* @__PURE__ */ __name((left, right) => {
if (left.operator !== "and" && left.operator !== "or" && right.operator !== "and" && right.operator !== "or") {
return ("field" in left ? left.field : void 0) === ("field" in right ? right.field : void 0) && left.operator === right.operator;
}
return ("key" in left ? left.key : void 0) === ("key" in right ? right.key : void 0) && left.operator === right.operator;
}, "compareFilters");
var compareSorters = /* @__PURE__ */ __name((left, right) => left.field === right.field, "compareSorters");
var unionFilters = /* @__PURE__ */ __name((permanentFilter, newFilters, prevFilters = []) => {
const isKeyRequired = newFilters.filter(
(f) => (f.operator === "or" || f.operator === "and") && !f.key
);
if (isKeyRequired.length > 1) {
warnOnce(
true,
"[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"
);
}
return unionWith(
permanentFilter,
newFilters,
prevFilters,
compareFilters
).filter(
(crudFilter) => crudFilter.value !== void 0 && crudFilter.value !== null && (crudFilter.operator !== "or" || crudFilter.operator === "or" && crudFilter.value.length !== 0) && (crudFilter.operator !== "and" || crudFilter.operator === "and" && crudFilter.value.length !== 0)
);
}, "unionFilters");
var unionSorters = /* @__PURE__ */ __name((permanentSorter, newSorters) => unionWith(permanentSorter, newSorters, compareSorters).filter(
(crudSorter) => crudSorter.order !== void 0 && crudSorter.order !== null
), "unionSorters");
var setInitialFilters = /* @__PURE__ */ __name((permanentFilter, defaultFilter) => [
...differenceWith(defaultFilter, permanentFilter, compareFilters),
...permanentFilter
], "setInitialFilters");
var setInitialSorters = /* @__PURE__ */ __name((permanentSorter, defaultSorter) => [
...differenceWith(defaultSorter, permanentSorter, compareSorters),
...permanentSorter
], "setInitialSorters");
var getDefaultSortOrder = /* @__PURE__ */ __name((columnName, sorter) => {
if (!sorter) {
return void 0;
}
const sortItem = sorter.find((item) => item.field === columnName);
if (sortItem) {
return sortItem.order;
}
return void 0;
}, "getDefaultSortOrder");
var getDefaultFilter = /* @__PURE__ */ __name((columnName, filters, operatorType = "eq") => {
const filter = filters == null ? void 0 : filters.find((filter2) => {
if (filter2.operator !== "or" && filter2.operator !== "and" && "field" in filter2) {
const { operator, field } = filter2;
return field === columnName && operator === operatorType;
}
return void 0;
});
if (filter) {
return filter.value || [];
}
return void 0;
}, "getDefaultFilter");
// src/definitions/helpers/userFriendlySeconds/index.ts
var userFriendlySecond = /* @__PURE__ */ __name((miliseconds) => {
return miliseconds / 1e3;
}, "userFriendlySecond");
// src/definitions/helpers/importCSVMapper/index.ts
import fromPairs from "lodash-es/fromPairs.js";
import zip from "lodash-es/zip.js";
var importCSVMapper = /* @__PURE__ */ __name((data, mapData = (item) => item) => {
const [headers, ...body] = data;
return body.map((entry) => fromPairs(zip(headers, entry))).map(
(item, index, array) => mapData.call(void 0, item, index, array)
);
}, "importCSVMapper");
// src/definitions/helpers/handleUseParams/index.tsx
var handleUseParams = /* @__PURE__ */ __name((params = {}) => {
if (params == null ? void 0 : params.id) {
return {
...params,
id: decodeURIComponent(params.id)
};
}
return params;
}, "handleUseParams");
// src/definitions/helpers/hasPermission/index.ts
var hasPermission = /* @__PURE__ */ __name((permissions, action) => {
if (!permissions || !action) {
return false;
}
return !!permissions.find((i) => i === action);
}, "hasPermission");
// src/definitions/helpers/humanizeString/index.ts
var humanizeString = /* @__PURE__ */ __name((text2) => {
text2 = text2.replace(/([a-z]{1})([A-Z]{1})/g, "$1-$2");
text2 = text2.replace(/([A-Z]{1})([A-Z]{1})([a-z]{1})/g, "$1-$2$3");
text2 = text2.toLowerCase().replace(/[_-]+/g, " ").replace(/\s{2,}/g, " ").trim();
text2 = text2.charAt(0).toUpperCase() + text2.slice(1);
return text2;
}, "humanizeString");
// src/contexts/refine/index.tsx
import React2 from "react";
import pluralize from "pluralize";
var defaultTitle = {
icon: /* @__PURE__ */ React2.createElement(
"svg",
{
width: 24,
height: 24,
viewBox: "0 0 24 24",
fill: "none",
xmlns: "http://www.w3.org/2000/svg",
"data-testid": "refine-logo",
id: "refine-default-logo"
},
/* @__PURE__ */ React2.createElement(
"path",
{
fillRule: "evenodd",
clipRule: "evenodd",
d: "M13.7889 0.422291C12.6627 -0.140764 11.3373 -0.140764 10.2111 0.422291L2.21115 4.42229C0.85601 5.09986 0 6.48491 0 8V16C0 17.5151 0.85601 18.9001 2.21115 19.5777L10.2111 23.5777C11.3373 24.1408 12.6627 24.1408 13.7889 23.5777L21.7889 19.5777C23.144 18.9001 24 17.5151 24 16V8C24 6.48491 23.144 5.09986 21.7889 4.42229L13.7889 0.422291ZM8 8C8 5.79086 9.79086 4 12 4C14.2091 4 16 5.79086 16 8V16C16 18.2091 14.2091 20 12 20C9.79086 20 8 18.2091 8 16V8Z",
fill: "currentColor"
}
),
/* @__PURE__ */ React2.createElement(
"path",
{
d: "M14 8C14 9.10457 13.1046 10 12 10C10.8954 10 10 9.10457 10 8C10 6.89543 10.8954 6 12 6C13.1046 6 14 6.89543 14 8Z",
fill: "currentColor"
}
)
),
text: "Refine Project"
};
var defaultRefineOptions = {
mutationMode: "pessimistic",
syncWithLocation: false,
undoableTimeout: 5e3,
warnWhenUnsavedChanges: false,
liveMode: "off",
redirect: {
afterCreate: "list",
afterClone: "list",
afterEdit: "list"
},
overtime: {
enabled: true,
interval: 1e3
},
textTransformers: {
humanize: humanizeString,
plural: pluralize.plural,
singular: pluralize.singular
},
disableServerSideValidation: false,
disableRouteChangeHandler: false,
title: defaultTitle
};
var RefineContext = React2.createContext({
mutationMode: "pessimistic",
warnWhenUnsavedChanges: false,
syncWithLocation: false,
undoableTimeout: 5e3,
liveMode: "off",
onLiveEvent: void 0,
options: defaultRefineOptions
});
var RefineContextProvider = /* @__PURE__ */ __name(({
mutationMode,
warnWhenUnsavedChanges,
syncWithLocation,
undoableTimeout,
children,
liveMode = "off",
onLiveEvent,
options
}) => {
return /* @__PURE__ */ React2.createElement(
RefineContext.Provider,
{
value: {
__initialized: true,
mutationMode,
warnWhenUnsavedChanges,
syncWithLocation,
undoableTimeout,
liveMode,
onLiveEvent,
options
}
},
children
);
}, "RefineContextProvider");
// src/definitions/helpers/handleRefineOptions/index.ts
var handleRefineOptions = /* @__PURE__ */ __name(({
options,
disableTelemetry,
liveMode,
mutationMode,
reactQueryClientConfig,
reactQueryDevtoolConfig,
syncWithLocation,
undoableTimeout,
warnWhenUnsavedChanges,
disableRouteChangeHandler
} = {}) => {
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
const optionsWithDefaults = {
breadcrumb: options == null ? void 0 : options.breadcrumb,
mutationMode: (options == null ? void 0 : options.mutationMode) ?? mutationMode ?? defaultRefineOptions.mutationMode,
undoableTimeout: (options == null ? void 0 : options.undoableTimeout) ?? undoableTimeout ?? defaultRefineOptions.undoableTimeout,
syncWithLocation: (options == null ? void 0 : options.syncWithLocation) ?? syncWithLocation ?? defaultRefineOptions.syncWithLocation,
warnWhenUnsavedChanges: (options == null ? void 0 : options.warnWhenUnsavedChanges) ?? warnWhenUnsavedChanges ?? defaultRefineOptions.warnWhenUnsavedChanges,
liveMode: (options == null ? void 0 : options.liveMode) ?? liveMode ?? defaultRefineOptions.liveMode,
redirect: {
afterCreate: ((_a = options == null ? void 0 : options.redirect) == null ? void 0 : _a.afterCreate) ?? defaultRefineOptions.redirect.afterCreate,
afterClone: ((_b = options == null ? void 0 : options.redirect) == null ? void 0 : _b.afterClone) ?? defaultRefineOptions.redirect.afterClone,
afterEdit: ((_c = options == null ? void 0 : options.redirect) == null ? void 0 : _c.afterEdit) ?? defaultRefineOptions.redirect.afterEdit
},
overtime: (options == null ? void 0 : options.overtime) ?? defaultRefineOptions.overtime,
textTransformers: {
humanize: ((_d = options == null ? void 0 : options.textTransformers) == null ? void 0 : _d.humanize) ?? defaultRefineOptions.textTransformers.humanize,
plural: ((_e = options == null ? void 0 : options.textTransformers) == null ? void 0 : _e.plural) ?? defaultRefineOptions.textTransformers.plural,
singular: ((_f = options == null ? void 0 : options.textTransformers) == null ? void 0 : _f.singular) ?? defaultRefineOptions.textTransformers.singular
},
disableServerSideValidation: (options == null ? void 0 : options.disableServerSideValidation) ?? defaultRefineOptions.disableServerSideValidation,
projectId: options == null ? void 0 : options.projectId,
title: {
icon: typeof ((_g = options == null ? void 0 : options.title) == null ? void 0 : _g.icon) === "undefined" ? defaultRefineOptions.title.icon : (_h = options == null ? void 0 : options.title) == null ? void 0 : _h.icon,
text: typeof ((_i = options == null ? void 0 : options.title) == null ? void 0 : _i.text) === "undefined" ? defaultRefineOptions.title.text : (_j = options == null ? void 0 : options.title) == null ? void 0 : _j.text
},
disableRouteChangeHandler: (options == null ? void 0 : options.disableRouteChangeHandler) ?? disableRouteChangeHandler ?? defaultRefineOptions.disableRouteChangeHandler
};
const disableTelemetryWithDefault = (options == null ? void 0 : options.disableTelemetry) ?? disableTelemetry ?? false;
const reactQueryWithDefaults = {
clientConfig: ((_k = options == null ? void 0 : options.reactQuery) == null ? void 0 : _k.clientConfig) ?? reactQueryClientConfig ?? {},
devtoolConfig: reactQueryDevtoolConfig ?? {}
};
return {
optionsWithDefaults,
disableTelemetryWithDefault,
reactQueryWithDefaults
};
}, "handleRefineOptions");
// src/definitions/helpers/redirectPage/index.ts
var redirectPage = /* @__PURE__ */ __name(({
redirectFromProps,
action,
redirectOptions
}) => {
if (redirectFromProps || redirectFromProps === false) {
return redirectFromProps;
}
switch (action) {
case "clone":
return redirectOptions.afterClone;
case "create":
return redirectOptions.afterCreate;
case "edit":
return redirectOptions.afterEdit;
default:
return false;
}
}, "redirectPage");
// src/definitions/helpers/sequentialPromises/index.ts
var sequentialPromises = /* @__PURE__ */ __name(async (promises, onEachResolve, onEachReject) => {
const results = [];
for (const [index, promise] of promises.entries()) {
try {
const result = await promise();
results.push(onEachResolve(result, index));
} catch (error) {
results.push(onEachReject(error, index));
}
}
return results;
}, "sequentialPromises");
// src/definitions/helpers/pick-resource/index.ts
var pickResource = /* @__PURE__ */ __name((identifier, resources = []) => {
if (!identifier) {
return void 0;
}
let resource = resources.find((r) => r.identifier === identifier);
if (!resource) {
resource = resources.find((r) => r.name === identifier);
}
return resource;
}, "pickResource");
// src/definitions/helpers/pickDataProvider/index.ts
var pickDataProvider = /* @__PURE__ */ __name((resourceName, dataProviderName, resources) => {
if (dataProviderName) {
return dataProviderName;
}
const resource = pickResource(resourceName, resources);
const meta = resource == null ? void 0 : resource.meta;
if (meta == null ? void 0 : meta.dataProviderName) {
return meta.dataProviderName;
}
return "default";
}, "pickDataProvider");
// src/definitions/helpers/handleMultiple/index.ts
var handleMultiple = /* @__PURE__ */ __name(async (promises) => {
return {
data: (await Promise.all(promises)).map((res) => res.data)
};
}, "handleMultiple");
// src/definitions/helpers/useInfinitePagination/index.ts
var getNextPageParam = /* @__PURE__ */ __name((lastPage) => {
const { pagination, cursor } = lastPage;
if (cursor == null ? void 0 : cursor.next) {
return cursor.next;
}
const current = (pagination == null ? void 0 : pagination.currentPage) || 1;
const pageSize = (pagination == null ? void 0 : pagination.pageSize) || 10;
const totalPages = Math.ceil((lastPage.total || 0) / pageSize);
return current < totalPages ? Number(current) + 1 : void 0;
}, "getNextPageParam");
var getPreviousPageParam = /* @__PURE__ */ __name((lastPage) => {
const { pagination, cursor } = lastPage;
if (cursor == null ? void 0 : cursor.prev) {
return cursor.prev;
}
const current = (pagination == null ? void 0 : pagination.currentPage) || 1;
return current === 1 ? void 0 : current - 1;
}, "getPreviousPageParam");
// src/definitions/helpers/router/is-parameter.ts
var isParameter = /* @__PURE__ */ __name((segment) => {
return segment.startsWith(":");
}, "isParameter");
// src/definitions/helpers/router/split-to-segments.ts
var splitToSegments = /* @__PURE__ */ __name((path) => {
const segments = path.split("/").filter((segment) => segment !== "");
return segments;
}, "splitToSegments");
// src/definitions/helpers/router/is-segment-counts-same.ts
var isSegmentCountsSame = /* @__PURE__ */ __name((route, resourceRoute) => {
const routeSegments = splitToSegments(route);
const resourceRouteSegments = splitToSegments(resourceRoute);
return routeSegments.length === resourceRouteSegments.length;
}, "isSegmentCountsSame");
// src/definitions/helpers/router/remove-leading-trailing-slashes.ts
var removeLeadingTrailingSlashes = /* @__PURE__ */ __name((route) => {
return route.replace(/^\/|\/$/g, "");
}, "removeLeadingTrailingSlashes");
// src/definitions/helpers/router/check-by-segments.ts
var checkBySegments = /* @__PURE__ */ __name((route, resourceRoute) => {
const stdRoute = removeLeadingTrailingSlashes(route);
const stdResourceRoute = removeLeadingTrailingSlashes(resourceRoute);
if (!isSegmentCountsSame(stdRoute, stdResourceRoute)) {
return false;
}
const routeSegments = splitToSegments(stdRoute);
const resourceRouteSegments = splitToSegments(stdResourceRoute);
return resourceRouteSegments.every((segment, index) => {
return isParameter(segment) || segment === routeSegments[index];
});
}, "checkBySegments");
// src/definitions/helpers/router/get-action-routes-from-resource.ts
var getActionRoutesFromResource = /* @__PURE__ */ __name((resource, resources) => {
const actions = [];
const actionList = ["list", "show", "edit", "create", "clone"];
actionList.forEach((action) => {
const route = resource[action];
if (route) {
actions.push({
action,
resource,
route: `/${route.replace(/^\//, "")}`
});
}
});
return actions;
}, "getActionRoutesFromResource");
// src/definitions/helpers/router/pick-matched-route.ts
var pickMatchedRoute = /* @__PURE__ */ __name((routes) => {
var _a;
if (routes.length === 0) {
return void 0;
}
if (routes.length === 1) {
return routes[0];
}
const sanitizedRoutes = routes.map((route) => ({
...route,
splitted: splitToSegments(removeLeadingTrailingSlashes(route.route))
}));
const segmentsCount = ((_a = sanitizedRoutes[0]) == null ? void 0 : _a.splitted.length) ?? 0;
let eligibleRoutes = [
...sanitizedRoutes
];
for (let i = 0; i < segmentsCount; i++) {
const nonParametrizedRoutes = eligibleRoutes.filter(
(route) => !isParameter(route.splitted[i])
);
if (nonParametrizedRoutes.length === 0) {
continue;
}
if (nonParametrizedRoutes.length === 1) {
eligibleRoutes = nonParametrizedRoutes;
break;
}
eligibleRoutes = nonParametrizedRoutes;
}
return eligibleRoutes[0];
}, "pickMatchedRoute");
// src/definitions/helpers/router/match-resource-from-route.ts
var matchResourceFromRoute = /* @__PURE__ */ __name((route, resources) => {
const allActionRoutes = resources.flatMap((resource) => {
return getActionRoutesFromResource(resource, resources);
});
const allFound = allActionRoutes.filter((actionRoute) => {
return checkBySegments(route, actionRoute.route);
});
const mostEligible = pickMatchedRoute(allFound);
return {
found: !!mostEligible,
resource: mostEligible == null ? void 0 : mostEligible.resource,
action: mostEligible == null ? void 0 : mostEligible.action,
matchedRoute: mostEligible == null ? void 0 : mostEligible.route
};
}, "matchResourceFromRoute");
// src/definitions/helpers/router/get-parent-resource.ts
var getParentResource = /* @__PURE__ */ __name((resource, resources) => {
var _a;
const parentName = (_a = resource.meta) == null ? void 0 : _a.parent;
if (!parentName) {
return void 0;
}
const parentResource = resources.find(
(resource2) => (resource2.identifier ?? resource2.name) === parentName
);
return parentResource ?? { name: parentName };
}, "getParentResource");
// src/definitions/helpers/router/pick-route-params.ts
var pickRouteParams = /* @__PURE__ */ __name((route) => {
const segments = splitToSegments(removeLeadingTrailingSlashes(route));
return segments.flatMap((s) => {
if (isParameter(s)) {
return [s.slice(1)];
}
return [];
});
}, "pickRouteParams");
// src/definitions/helpers/router/prepare-route-params.ts
var prepareRouteParams = /* @__PURE__ */ __name((routeParams, meta = {}) => {
return routeParams.reduce(
(acc, key) => {
const value = meta[key];
if (typeof value !== "undefined") {
acc[key] = value;
}
return acc;
},
{}
);
}, "prepareRouteParams");
// src/definitions/helpers/router/compose-route.ts
var composeRoute = /* @__PURE__ */ __name((designatedRoute, resourceMeta = {}, parsed = {}, meta = {}) => {
const routeParams = pickRouteParams(designatedRoute);
const preparedRouteParams = prepareRouteParams(routeParams, {
...resourceMeta,
...typeof (parsed == null ? void 0 : parsed.id) !== "undefined" ? { id: parsed.id } : {},
...typeof (parsed == null ? void 0 : parsed.action) !== "undefined" ? { action: parsed.action } : {},
...typeof (parsed == null ? void 0 : parsed.resource) !== "undefined" ? { resource: parsed.resource } : {},
...parsed == null ? void 0 : parsed.params,
...meta
});
return designatedRoute.replace(/:([^\/]+)/g, (match, key) => {
const fromParams = preparedRouteParams[key];
if (typeof fromParams !== "undefined") {
return `${fromParams}`;
}
return match;
});
}, "composeRoute");
// src/definitions/helpers/useActiveAuthProvider/index.ts
var useActiveAuthProvider = /* @__PURE__ */ __name(() => {
const authProvider = useAuthProviderContext();
if (authProvider.isProvided) {
return authProvider;
}
return null;
}, "useActiveAuthProvider");
// src/definitions/helpers/handlePaginationParams/index.ts
var handlePaginationParams = /* @__PURE__ */ __name(({
pagination
} = {}) => {
const mode = (pagination == null ? void 0 : pagination.mode) ?? "server";
const currentPage = (pagination == null ? void 0 : pagination.currentPage) ?? 1;
const pageSize = (pagination == null ? void 0 : pagination.pageSize) ?? 10;
return {
currentPage,
pageSize,
mode
};
}, "handlePaginationParams");
// src/definitions/helpers/useMediaQuery/index.ts
import { useState, useEffect } from "react";
var useMediaQuery = /* @__PURE__ */ __name((query) => {
const [matches, setMatches] = useState(false);
useEffect(() => {
const media = window.matchMedia(query);
if (media.matches !== matches) {
setMatches(media.matches);
}
const listener = /* @__PURE__ */ __name(() => setMatches(media.matches), "listener");
window.addEventListener("resize", listener);
return () => window.removeEventListener("resize", listener);
}, [matches, query]);
return matches;
}, "useMediaQuery");
// src/definitions/helpers/safe-translate/index.ts
var safeTranslate = /* @__PURE__ */ __name((translate, key, defaultMessage, options) => {
const translated = options ? translate(key, options, defaultMessage) : translate(key, defaultMessage);
const fallback = defaultMessage ?? key;
if (translated === key || typeof translated === "undefined") {
return fallback;
}
return translated;
}, "safeTranslate");
// src/hooks/refine/useMutationMode.ts
import { useContext } from "react";
var useMutationMode = /* @__PURE__ */ __name((preferredMutationMode, preferredUndoableTimeout) => {
const { mutationMode, undoableTimeout } = useContext(RefineContext);
return {
mutationMode: preferredMutationMode ?? mutationMode,
undoableTimeout: preferredUndoableTimeout ?? undoableTimeout
};
}, "useMutationMode");
// src/hooks/refine/useWarnAboutChange/index.ts
import { useContext as useContext2 } from "react";
// src/contexts/unsavedWarn/index.tsx
import React3, { useState as useState2 } from "react";
var UnsavedWarnContext = React3.createContext({});
var UnsavedWarnContextProvider = /* @__PURE__ */ __name(({
children
}) => {
const [warnWhen, setWarnWhen] = useState2(false);
return /* @__PURE__ */ React3.createElement(UnsavedWarnContext.Provider, { value: { warnWhen, setWarnWhen } }, children);
}, "UnsavedWarnContextProvider");
// src/hooks/refine/useWarnAboutChange/index.ts
var useWarnAboutChange = /* @__PURE__ */ __name(() => {
const { warnWhenUnsavedChanges } = useContext2(RefineContext);
const { warnWhen, setWarnWhen } = useContext2(UnsavedWarnContext);
return {
warnWhenUnsavedChanges,
warnWhen: Boolean(warnWhen),
setWarnWhen: setWarnWhen ?? (() => void 0)
};
}, "useWarnAboutChange");
// src/hooks/refine/useSyncWithLocation.ts
import { useContext as useContext3 } from "react";
var useSyncWithLocation = /* @__PURE__ */ __name(() => {
const { syncWithLocation } = useContext3(RefineContext);
return { syncWithLocation };
}, "useSyncWithLocation");
// src/hooks/refine/useRefineContext.ts
import { useContext as useContext4 } from "react";
var useRefineContext = /* @__PURE__ */ __name(() => {
const {
mutationMode,
syncWithLocation,
undoableTimeout,
warnWhenUnsavedChanges,
liveMode,
onLiveEvent,
options,
__initialized
} = useContext4(RefineContext);
return {
__initialized,
mutationMode,
syncWithLocation,
undoableTimeout,
warnWhenUnsavedChanges,
liveMode,
onLiveEvent,
options
};
}, "useRefineContext");
// src/definitions/helpers/useUserFriendlyName/index.ts
var useUserFriendlyName = /* @__PURE__ */ __name(() => {
const {
options: { textTransformers }
} = useRefineContext();
const getFriendlyName = /* @__PURE__ */ __name((name = "", type) => {
const humanizeName = textTransformers.humanize(name);
if (type === "singular") {
return textTransformers.singular(humanizeName);
}
return textTransformers.plural(humanizeName);
}, "getFriendlyName");
return getFriendlyName;
}, "useUserFriendlyName");
// src/definitions/helpers/generateDocumentTitle/index.ts
function generateDefaultDocumentTitle(translate, resource, action, id, resourceName, getUserFriendlyName) {
var _a;
const getFriendlyName = getUserFriendlyName || useUserFriendlyName();
const actionPrefixMatcher = {
create: "Create new ",
clone: `#${id ?? ""} Clone `,
edit: `#${id ?? ""} Edit `,
show: `#${id ?? ""} Show `,
list: ""
};
const identifier = (resource == null ? void 0 : resource.identifier) ?? (resource == null ? void 0 : resource.name);
const resourceNameFallback = ((_a = resource == null ? void 0 : resource.meta) == null ? void 0 : _a.label) ?? (identifier ? getFriendlyName(identifier, action === "list" ? "plural" : "singular") : identifier);
const resourceNameWithFallback = resourceName ?? resourceNameFallback;
const defaultTitle2 = safeTranslate(
translate,
"documentTitle.default",
"Refine"
);
const suffix = safeTranslate(translate, "documentTitle.suffix", " | Refine");
let autoGeneratedTitle = defaultTitle2;
if (action && identifier) {
autoGeneratedTitle = safeTranslate(
translate,
`documentTitle.${identifier}.${action}`,
`${actionPrefixMatcher[action] ?? ""}${resourceNameWithFallback}${suffix}`,
{ id }
);
}
return autoGeneratedTitle;
}
__name(generateDefaultDocumentTitle, "generateDefaultDocumentTitle");
// src/definitions/helpers/keys/index.ts
var BaseKeyBuilder = class {
constructor(segments = []) {
this.segments = [];
this.segments = segments;
}
key() {
return this.segments;
}
get() {
return this.segments;
}
};
__name(BaseKeyBuilder, "BaseKeyBuilder");
var ParamsKeyBuilder = class extends BaseKeyBuilder {
params(paramsValue) {
return new BaseKeyBuilder([...this.segments, paramsValue]);
}
};
__name(ParamsKeyBuilder, "ParamsKeyBuilder");
var DataIdRequiringKeyBuilder = class extends BaseKeyBuilder {
id(idValue) {
return new ParamsKeyBuilder([
...this.segments,
idValue ? String(idValue) : void 0
]);
}
};
__name(DataIdRequiringKeyBuilder, "DataIdRequiringKeyBuilder");
var DataIdsRequiringKeyBuilder = class extends BaseKeyBuilder {
ids(...idsValue) {
return new ParamsKeyBuilder([
...this.segments,
...idsValue.length ? [idsValue.map((el) => String(el))] : []
]);
}
};
__name(DataIdsRequiringKeyBuilder, "DataIdsRequiringKeyBuilder");
var DataResourceKeyBuilder = class extends BaseKeyBuilder {
action(actionType) {
if (actionType === "one") {
return new DataIdRequiringKeyBuilder([...this.segments, actionType]);
}
if (actionType === "many") {
return new DataIdsRequiringKeyBuilder([...this.segments, actionType]);
}
if (["list", "infinite"].includes(actionType)) {
return new ParamsKeyBuilder([...this.segments, actionType]);
}
throw new Error("Invalid action type");
}
};
__name(DataResourceKeyBuilder, "DataResourceKeyBuilder");
var DataKeyBuilder = class extends BaseKeyBuilder {
resource(resourceName) {
return new DataResourceKeyBuilder([...this.segments, resourceName]);
}
mutation(mutationName) {
return new ParamsKeyBuilder([
...mutationName === "custom" ? this.segments : [this.segments[0]],
mutationName
]);
}
};
__name(DataKeyBuilder, "DataKeyBuilder");
var AuthKeyBuilder = class extends BaseKeyBuilder {
action(actionType) {
return new ParamsKeyBuilder([...this.segments, actionType]);
}
};
__name(AuthKeyBuilder, "AuthKeyBuilder");
var AccessResourceKeyBuilder = class extends BaseKeyBuilder {
action(resourceName) {
return new ParamsKeyBuilder([...this.segments, resourceName]);
}
};
__name(AccessResourceKeyBuilder, "AccessResourceKeyBuilder");
var AccessKeyBuilder = class extends BaseKeyBuilder {
resource(resourceName) {
return new AccessResourceKeyBuilder([...this.segments, resourceName]);
}
};
__name(AccessKeyBuilder, "AccessKeyBuilder");
var AuditActionKeyBuilder = class extends BaseKeyBuilder {
action(actionType) {
return new ParamsKeyBuilder([...this.segments, actionType]);
}
};
__name(AuditActionKeyBuilder, "AuditActionKeyBuilder");
var AuditKeyBuilder = class extends BaseKeyBuilder {
resource(resourceName) {
return new AuditActionKeyBuilder([...this.segments, resourceName]);
}
action(actionType) {
return new ParamsKeyBuilder([...this.segments, actionType]);
}
};
__name(AuditKeyBuilder, "AuditKeyBuilder");
var KeyBuilder = class extends BaseKeyBuilder {
data(name) {
return new DataKeyBuilder(["data", name || "default"]);
}
auth() {
return new AuthKeyBuilder(["auth"]);
}
access() {
return new AccessKeyBuilder(["access"]);
}
audit() {
return new AuditKeyBuilder(["audit"]);
}
};
__name(KeyBuilder, "KeyBuilder");
var keys = /* @__PURE__ */ __name(() => new KeyBuilder([]), "keys");
// src/definitions/helpers/flatten-object-keys/index.ts
var isNested = /* @__PURE__ */ __name((obj) => typeof obj === "object" && obj !== null, "isNested");
var isArray = /* @__PURE__ */ __name((obj) => Array.isArray(obj), "isArray");
var flattenObjectKeys = /* @__PURE__ */ __name((obj, prefix = "") => {
if (!isNested(obj)) {
return {
[prefix]: obj
};
}
return Object.keys(obj).reduce(
(acc, key) => {
const currentPrefix = prefix.length ? `${prefix}.` : "";
if (isNested(obj[key]) && Object.keys(obj[key]).length) {
if (isArray(obj[key]) && obj[key].length) {
obj[key].forEach((item, index) => {
Object.assign(
acc,
flattenObjectKeys(item, `${currentPrefix + key}.${index}`)
);
});
} else {
Object.assign(acc, flattenObjectKeys(obj[key], currentPrefix + key));
}
acc[currentPrefix + key] = obj[key];
} else {
acc[currentPrefix + key] = obj[key];
}
return acc;
},
{}
);
}, "flattenObjectKeys");
// src/definitions/helpers/property-path-to-array/index.ts
var propertyPathToArray = /* @__PURE__ */ __name((propertyPath) => {
return propertyPath.split(".").map((item) => !Number.isNaN(Number(item)) ? Number(item) : item);
}, "propertyPathToArray");
// src/definitions/helpers/downloadInBrowser/index.ts
var downloadInBrowser = /* @__PURE__ */ __name((filename, content, type) => {
if (typeof window === "undefined") {
return;
}
const blob = new Blob([content], { type });
const link = document.createElement("a");
link.setAttribute("visibility", "hidden");
link.download = filename;
const blobUrl = URL.createObjectURL(blob);
link.href = blobUrl;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
setTimeout(() => {
URL.revokeObjectURL(blobUrl);
});
}, "downloadInBrowser");
// src/definitions/helpers/defer-execution/index.ts
var deferExecution = /* @__PURE__ */ __name((fn) => {
setTimeout(fn, 0);
}, "deferExecution");
// src/definitions/helpers/async-debounce/index.ts
import debounce from "lodash-es/debounce.js";
var asyncDebounce = /* @__PURE__ */ __name((func, wait = 1e3, cancelReason) => {
let callbacks = [];
const cancelPrevious = /* @__PURE__ */ __name(() => {
callbacks.forEach((cb) => {
var _a;
return (_a = cb.reject) == null ? void 0 : _a.call(cb, cancelReason);
});
callbacks = [];
}, "cancelPrevious");
const debouncedFunc = debounce((...args) => {
const { resolve, reject } = callbacks.pop() || {};
Promise.resolve(func(...args)).then(resolve).catch(reject);
}, wait);
const runner = /* @__PURE__ */ __name((...args) => {
return new Promise((resolve, reject) => {
cancelPrevious();
callbacks.push({
resolve,
reject
});
debouncedFunc(...args);
});
}, "runner");
runner.flush = () => debouncedFunc.flush();
runner.cancel = () => {
debouncedFunc.cancel();
cancelPrevious();
};
return runner;
}, "asyncDebounce");
// src/definitions/helpers/prepare-query-context/index.ts
var prepareQueryContext = /* @__PURE__ */ __name((context) => {
const queryContext = {
queryKey: context.queryKey,
signal: void 0
};
Object.defineProperty(queryContext, "signal", {
enumerable: true,
get: () => {
return context.signal;
}
});
return queryContext;
}, "prepareQueryContext");
// src/definitions/upload/file2Base64/index.ts
var file2Base64 = /* @__PURE__ */ __name((file) => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
const resultHandler = /* @__PURE__ */ __name(() => {
if (reader.result) {
reader.removeEventListener("load", resultHandler, false);
resolve(reader.result);
}
}, "resultHandler");
reader.addEventListener("load", resultHandler, false);
reader.readAsDataURL(file.originFileObj);
reader.onerror = (error) => {
reader.removeEventListener("load", resultHandler, false);
return reject(error);
};
});
}, "file2Base64");
// src/hooks/useKeys/index.tsx
var useKeys = /* @__PURE__ */ __name(() => {
return {
keys
};
}, "useKeys");
// src/hooks/auth/usePermissions/index.ts
function usePermissions({
options,
params
}) {
const { getPermissions } = useAuthProviderContext();
const { keys: keys2 } = useKeys();
const queryResponse = useQuery({
queryKey: keys2().auth().action("permissions").get(),
queryFn: getPermissions ? () => getPermissions(params) : () => Promise.resolve(void 0),
enabled: !!getPermissions,
...options,
meta: {
...options == null ? void 0 : options.meta,
...getXRay("usePermissions")
}
});
return queryResponse;
}
__name(usePermissions, "usePermissions");
// src/hooks/auth/useGetIdentity/index.ts
import { getXRay as getXRay2 } from "@refinedev/devtools-internal";
import {
useQuery as useQuery2
} from "@tanstack/react-query";
function useGetIdentity({
queryOptions
} = {}) {
const { getIdentity } = useAuthProviderContext();
const { keys: keys2 } = useKeys();
const queryResponse = useQuery2({
queryKey: keys2().auth().action("identity").get(),
queryFn: getIdentity ?? (() => Promise.resolve({})),
retry: false,
enabled: !!getIdentity,
...queryOptions,
meta: {
...queryOptions == null ? void 0 : queryOptions.meta,
...getXRay2("useGetIdentity")
}
});
return queryResponse;
}
__name(useGetIdentity, "useGetIdentity");
// src/hooks/auth/useLogout/index.ts
import { getXRay as getXRay3 } from "@refinedev/devtools-internal";
import {
useMutation
} from "@tanstack/react-query";
// src/hooks/auth/useInvalidateAuthStore/index.ts
import { useQueryClient as useQueryClient2 } from "@tanstack/react-query";
var useInvalidateAuthStore = /* @__PURE__ */ __name(() => {
const queryClient = useQueryClient2();
const { keys: keys2 } = useKeys();
const invalidate = /* @__PURE__ */ __name(async () => {
await Promise.all(
["check", "identity", "permissions"].map(
(action) => queryClient.invalidateQueries({
queryKey: keys2().auth().action(action).get()
})
)
);
}, "invalidate");
return invalidate;
}, "useInvalidateAuthStore");
// src/hooks/auth/useLogout/index.ts
function useLogout({
mutationOptions
} = {}) {
const invalidateAuthStore = useInvalidateAuthStore();
const go = useGo();
const { open, close } = useNotification();
const { logout: logoutFromContext } = useAuthProviderContext();
const { keys: keys2 } = useKeys();
const mutation = useMutation({
mutationKey: keys2().auth().action("logout").get(),
mutationFn: logoutFromContext,
...mutationOptions,
onSuccess: (data, variables) => {
const { success, error, redirectTo, successNotification } = data;
const { redirectPath } = variables ?? {};
const redirect = redirectPath ?? redirectTo;
if (success) {
close == null ? void 0 : close("useLogout-error");
if (successNotification) {
open == null ? void 0 : open(buildSuccessNotification(successNotification));
}
}
if (error || !success) {
open == null ? void 0 : open(buildNotification(error));
}
if (redirect !== false) {
if (redirect) {
go({ to: redirect });
}
}
invalidateAuthStore();
},
onError: (error) => {
open == null ? void 0 : open(buildNotification(error));
},
meta: {
...mutationOptions == null ? void 0 : mutationOptions.meta,
...getXRay3("useLogout")
}
});
return {
...mutation
};
}
__name(useLogout, "useLogout");
var buildNotification = /* @__PURE__ */ __name((error) => {
return {
key: "useLogout-error",
type: "error",
message: (error == null ? void 0 : error.name) || "Logout Error",
description: (error == null ? void 0 : error.message) || "Something went wrong during logout"
};
}, "buildNotification");
var buildSuccessNotification = /* @__PURE__ */ __name((successNotification) => {
return {
message: successNotification.message,
description: successNotification.description,
key: "logout-success",
type: "success"
};
}, "buildSuccessNotification");
// src/hooks/auth/useLogin/index.ts
import { getXRay as getXRay4 } from "@refinedev/devtools-internal";
import {
useMutation as useMutation2
} from "@tanstack/react-query";
function useLogin({
mutationOptions
} = {}) {
var _a;
const invalidateAuthStore = useInvalidateAuthStore();
const go = useGo();
const parsed = useParsed();
const { close, open } = useNotification();
const { login: loginFromContext } = useAuthProviderContext();
const { keys: keys2 } = useKeys();
const to = (_a = parsed.params) == null ? void 0 : _a.to;
const mutation = useMutation2({
mutationKey: keys2().auth().action("login").get(),
mutationFn: loginFromContext,
onSuccess: async ({ success, redirectTo, error, successNotification }) => {
if (success) {
close == null ? void 0 : close("login-error");
if (successNotification) {
open == null ? void 0 : open(buildSuccessNotification2(successNotification));
}
}
if (error || !success) {
open == null ? void 0 : open(buildNotification2(error));
}
if (success) {
if (to) {
go({ to, type: "replace" });
} else if (redirectTo) {
go({ to: redirectTo, type: "replace" });
}
}
setTimeout(() => {
invalidateAuthStore();
}, 32);
},
onError: (error) => {
open == null ? void 0 : open(buildNotification2(error));
},
...mutationOptions,
meta: {
...mutationOptions == null ? void 0 : mutationOptions.meta,
...getXRay4("useLogin")
}
});
return {
...mutation
};
}
__name(useLogin, "useLogin");
var buildNotification2 = /* @__PURE__ */ __name((error) => {
return {
message: (error == null ? void 0 : error.name) || "Login Error",
description: (error == null ? void 0 : error.message) || "Invalid credentials",
key: "login-error",
type: "error"
};
}, "buildNotification");
var buildSuccessNotification2 = /* @__PURE__ */ __name((successNotification) => {
return {
message: successNotification.message,
description: successNotification.description,
key: "login-success",
type: "success"
};
}, "buildSuccessNotification");
// src/hooks/auth/useRegister/index.ts
import { getXRay as getXRay5 } from "@refinedev/devtools-internal";
import {
useMutation as useMutation3
} from "@tanstack/react-query";
function useRegister({
mutationOptions
} = {}) {
const invalidateAuthStore = useInvalidateAuthStore();
const go = useGo();
const { close, open } = useNotification();
const { register: registerFromContext } = useAuthProviderContext();
const { keys: keys2 } = useKeys();
const mutation = useMutation3({
mutationKey: keys2().auth().action("register").get(),
mutationFn: registerFromContext,
onSuccess: async ({ success, redirectTo, error, successNotification }) => {
if (success) {
close == null ? void 0 : close("register-error");
if (successNotification) {
open == null ? void 0 : open(buildSuccessNotification3(successNotification));
}
}
if (error || !success) {
open == null ? void 0 : open(buildNotification3(error));
}
if (redirectTo) {
go({ to: redirectTo, type: "replace" });
}
if (success) {
setTimeout(() => {
invalidateAuthStore();
}, 32);
}
},
onError: (error) => {
open == null ? void 0 : open(buildNotification3(error));
},
...mutationOptions,
meta: {
...mutationOptions == null ? void 0 : mutationOptions.meta,
...getXRay5("useRegister")
}
});
return {
...mutation
};
}
__name(useRegister, "useRegister");
var buildNotification3 = /* @__PURE__ */ __name((error) => {
return {
message: (error == null ? void 0 : error.name) || "Register Error",
description: (error == null ? void 0 : error.message) || "Error while registering",
key: "register-error",
type: "error"
};
}, "buildNotification");
var buildSuccessNotification3 = /* @__PURE__ */ __name((successNotification) => {
return {
message: successNotification.message,
description: successNotification.description,
key: "register-success",
type: "success"
};
}, "buildSuccessNotification");
// src/hooks/auth/useForgotPassword/index.ts
import { getXRay as getXRay6 } from "@refinedev/devtools-internal";
import {
useMutation as useMutation4
} from "@tanstack/react-query";
function useForgotPassword({
mutationOptions
} = {}) {
const go = useGo();
const { open, close } = useNotification();
const { forgotPassword: forgotPasswordFromContext } = useAuthProviderContext();
const { keys: keys2 } = useKeys();
const mutation = useMutation4({
mutationKey: keys2().auth().action("forgotPassword").get(),
mutationFn: forgotPasswordFromContext,
onSuccess: ({ success, redirectTo, error, successNotification }) => {
if (success) {
close == null ? void 0 : close("forgot-password-error");
if (successNotification) {
open == null ? void 0 : open(buildSuccessNotification4(successNotification));
}
}
if (error || !success) {
open == null ? void 0 : open(buildNotification4(error));
}
if (redirectTo) {
go({ to: redirectTo, type: "replace" });
}
},
onError: (error) => {
open == null ? void 0 : open(buildNotification4(error));
},
...mutationOptions,
meta: {
...mutationOptions == null ? void 0 : mutationOptions.meta,
...getXRay6("useForgotPassword")
}
});
return {
...mutation
};
}
__name(useForgotPassword, "useForgotPassword");
var buildNotification4 = /* @__PURE__ */ __name((error) => {
return {
message: (error == null ? void 0 : error.name) || "Forgot Password Error",
description: (error == null ? void 0 : error.message) || "Error while resetting password",
key: "forgot-password-error",
type: "error"
};
}, "buildNotification");
var buildSuccessNotification4 = /* @__PURE__ */ __name((successNotification) => {
return {
message: successNotification.message,
description: successNotification.description,
key: "forgot-password-success",
type: "success"
};
}, "buildSuccessNotification");
// src/hooks/auth/useUpdatePassword/index.ts
import { getXRay as getXRay7 } from "@refinedev/devtools-internal";
import {
useMutation as useMutation5
} from "@tanstack/react-query";
function useUpdatePassword({
mutationOptions
} = {}) {
const go = useGo();
const { updatePassword: updatePasswordFromContext } = useAuthProviderContext();
const { close, open } = useNotification();
const { keys: keys2 } = useKeys();
const parsed = useParsed();
const params = parsed.params ?? {};
const mutation = useMutation5({
mutationKey: keys2().auth().action("updatePassword").get(),
mutationFn: async (variables) => {
return updatePasswordFromContext == null ? void 0 : updatePasswordFromContext({
...params,
...variables
});
},
onSuccess: ({ success, redirectTo, error, successNotification }) => {
if (success) {
close == null ? void 0 : close("update-password-error");
if (successNotification) {
open == null ? void 0 : open(buildSuccessNotification5(successNotification));
}
}
if (error || !success) {
open == null ? void 0 : open(buildNotification5(error));
}
if (redirectTo) {
go({ to: redirectTo, type: "replace