django-bananas
Version:
React admin frontend for Django.
129 lines (128 loc) • 5.59 kB
JavaScript
;
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
};