UNPKG

django-bananas

Version:
129 lines (128 loc) 5.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _Link2 = _interopRequireDefault(require("@mui/material/Link")); var _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireWildcard(require("react")); var _AdminContext = _interopRequireDefault(require("./AdminContext")); var _utils = require("./utils"); var _excluded = ["route", "params", "path", "query", "href", "children", "patch", "passHref"]; function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* inspired by next/link : https://github.com/zeit/next.js/blob/canary/packages/next/client/link.js */ class Link extends _react.default.Component { constructor() { super(...arguments); _defineProperty(this, "linkClicked", e => { var { nodeName, target } = e.currentTarget; // ignore click for new tab / new window behavior if (nodeName === "A" && (target && target !== "_self" || e.metaKey || e.ctrlKey || e.shiftKey || e.nativeEvent && e.nativeEvent.which === 2)) { return; } e.preventDefault(); var { route, params, path, query, hash, patch } = this.props; this.context.router.route({ id: route, params, path, query, hash }, { patch }); }); } render() { var _this$props = this.props, { route, // id i.e. route name params, path, query, href, children, patch: _, passHref } = _this$props, rest = _objectWithoutProperties(_this$props, _excluded); var { hash } = this.props; var child = null; var isAnchor = false; var props = rest; if (typeof children === "string") { child = /*#__PURE__*/_react.default.createElement(_Link2.default, rest, children); isAnchor = true; } else { child = _react.Children.only(children); isAnchor = child.type === "a" || passHref; } if (isAnchor) { if (href) { props.href = href; return /*#__PURE__*/_react.default.cloneElement(child, props); } var pathname = undefined; if (route) { var resolvedRoute = this.context.router.reverse(route, params); pathname = resolvedRoute ? resolvedRoute.path : null; } else if (path) { var _resolvedRoute = this.context.router.resolve(path); pathname = _resolvedRoute ? _resolvedRoute.path : path; } if (!pathname) { throw new Error("Failed to create link for: ".concat(route || path)); } hash = hash && !hash.startsWith("#") ? "#".concat(hash) : hash; props.href = "".concat(pathname).concat((0, _utils.toQuery)(query)).concat(hash); } props.onClick = e => { if (child.props && typeof child.props.onClick === "function") { child.props.onClick(e); } if (!e.defaultPrevented) { this.linkClicked(e); } }; return /*#__PURE__*/_react.default.cloneElement(child, props); } } exports.default = Link; _defineProperty(Link, "contextType", _AdminContext.default); Link.propTypes = { children: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node]).isRequired, route: _propTypes.default.string, params: _propTypes.default.object, path: _propTypes.default.string, query: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.string]), hash: _propTypes.default.string, patch: _propTypes.default.bool, passHref: _propTypes.default.bool }; Link.defaultProps = { route: undefined, params: undefined, path: undefined, query: "", hash: "", patch: false, passHref: false };