UNPKG

ra-core

Version:

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

77 lines 2.9 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 history_1 = require("history"); 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) { 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) : __assign({ pathname: "".concat(basename, "/").concat(target.pathname) }, target); navigate(typeof absoluteTarget === 'string' ? (0, history_1.parsePath)(absoluteTarget) : 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: __assign({ _scrollToTop: true }, state), }); return; } }, [navigate, basename, createPath]); }; exports.useRedirect = useRedirect; //# sourceMappingURL=useRedirect.js.map