UNPKG

django-bananas

Version:
130 lines (129 loc) 6.11 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 _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(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 };