UNPKG

ra-core

Version:

Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React

80 lines 3.15 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useRedirect = void 0; var react_1 = require("react"); var react_router_dom_1 = require("react-router-dom"); var useBasename_1 = require("./useBasename"); var useCreatePath_1 = require("./useCreatePath"); /** * Hook for Redirection Side Effect * * @example * * const redirect = useRedirect(); * // redirect to list view * redirect('list', 'posts'); * // redirect to edit view * redirect('edit', 'posts', 123); * // redirect to edit view with state data * redirect('edit', 'comments', 123, {}, { record: { post_id: record.id } }); * // do not redirect * redirect(false); * // redirect to the result of a function * redirect((resource, id, data) => ...) */ var useRedirect = function () { var navigate = (0, react_router_dom_1.useNavigate)(); var basename = (0, useBasename_1.useBasename)(); var createPath = (0, useCreatePath_1.useCreatePath)(); return (0, react_1.useCallback)(function (redirectTo, resource, id, data, state) { var _a; if (resource === void 0) { resource = ''; } if (state === void 0) { state = {}; } if (!redirectTo) { return; } else if (typeof redirectTo === 'function') { var target = redirectTo(resource, id, data); var absoluteTarget = typeof target === 'string' ? "".concat(basename).concat(target.startsWith('/') ? '' : '/').concat(target) : __assign({ pathname: "".concat(basename).concat(((_a = target.pathname) === null || _a === void 0 ? void 0 : _a.startsWith('/')) ? '' : '/').concat(target.pathname) }, target); navigate(absoluteTarget, { state: __assign({ _scrollToTop: true }, state), }); return; } else if (typeof redirectTo === 'string' && redirectTo.startsWith('http') && window) { // redirection to an absolute url // history doesn't handle that case, so we handle it by hand window.location.href = redirectTo; return; } else { // redirection to an internal link navigate(createPath({ resource: resource, id: id, type: redirectTo }), { state: // We force the scrollToTop except when navigating to a list // where this is already done by <RestoreScrollPosition> in <Resource> redirectTo === 'list' ? state : __assign({ _scrollToTop: true }, state), }); return; } }, [navigate, basename, createPath]); }; exports.useRedirect = useRedirect; //# sourceMappingURL=useRedirect.js.map