UNPKG

react-view-router

Version:
93 lines 4.16 kB
import "core-js/modules/web.dom.iterable.js"; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } 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); } import React from 'react'; import { innumerable } from './util'; import { REACT_LAZY_TYPE } from './route-guard'; function isEsModule(value) { return value && value.__esModule; } export class RouteLazy { constructor(ctor, options = {}) { _defineProperty(this, "_ctor", void 0); _defineProperty(this, "_result", void 0); _defineProperty(this, "resolved", void 0); _defineProperty(this, "routeLazyInstance", void 0); _defineProperty(this, "$$typeof", REACT_LAZY_TYPE); _defineProperty(this, "options", void 0); _defineProperty(this, "updaters", []); this._ctor = ctor; this._result = null; this.routeLazyInstance = true; this.options = options; this.render = this.render.bind(this); this.resolved = false; this.updaters = []; } toResolve(router, route, key) { return new Promise(async (resolve, reject) => { const _resolve = v => { v = isEsModule(v) ? v.default : v; const updaters = this.updaters.splice(0, this.updaters.length); updaters.forEach(updater => v = updater(v, router) || v); if (!this.resolved) { this._result = v; this.resolved = true; } resolve(v); }; if (this.resolved) { _resolve(this._result); return; } let component = this._ctor.__lazyImportMethod ? this._ctor(route, key, router, this.options) : this._ctor; try { component = isPromise(component) ? await component : component; } catch (ex) { reject(ex); return; } if (!component) { reject(new Error('component should not null!')); return; } if (component instanceof Promise) { component.then(_resolve).catch(function () { return reject(...arguments); }); } else _resolve(component); }); } render(props, ref) { if (!this.resolved || !this._result) return null; return /*#__PURE__*/React.createElement(this._result, _objectSpread(_objectSpread({}, props), {}, { ref }), props.children); } } export function hasRouteLazy(route) { const config = route.config || route; if (config.components instanceof RouteLazy) return true; if (config.components) { for (const key of Object.keys(config.components)) { if (config.components[key] instanceof RouteLazy) return true; } } return false; } export function hasMatchedRouteLazy(matched) { return matched && matched.some(r => hasRouteLazy(r)); } export function lazyImport(importMethod, options = {}) { innumerable(importMethod, '__lazyImportMethod', true); return new RouteLazy(importMethod, options || {}); } export function isRouteLazy(value) { return value && value.routeLazyInstance; } export function isPromise(value) { return value && value.then; }