From c19d5fc0decf74786289b8a48201019ef3c709c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=BC=D0=B0=D0=BA=D0=BE=D0=B2?= Date: Thu, 10 Dec 2020 20:11:25 +0300 Subject: [PATCH] fixed unmount) --- dist/index.js | 6 +++--- src/main.ts | 48 +++++++++++++++++++----------------------------- 2 files changed, 22 insertions(+), 32 deletions(-) diff --git a/dist/index.js b/dist/index.js index 28cfb1b..ee377f3 100644 --- a/dist/index.js +++ b/dist/index.js @@ -78,7 +78,7 @@ var fireapp = /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "/fireapp/1.1.0/"; +/******/ __webpack_require__.p = "/fireapp/1.3.0/"; /******/ /******/ /******/ // Load entry module and return exports @@ -245,7 +245,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__webpack_require__(/*! systemjs/dist/system */ \"./node_modules/systemjs/dist/system.js\");\n__webpack_require__(/*! systemjs/dist/extras/amd */ \"./node_modules/systemjs/dist/extras/amd.js\");\n__webpack_require__(/*! systemjs/dist/extras/named-register */ \"./node_modules/systemjs/dist/extras/named-register.js\");\n__webpack_require__(/*! systemjs/dist/extras/named-exports */ \"./node_modules/systemjs/dist/extras/named-exports.js\");\n__webpack_require__(/*! systemjs/dist/extras/transform */ \"./node_modules/systemjs/dist/extras/transform.js\");\nconst history_1 = __webpack_require__(/*! history */ \"./node_modules/history/esm/history.js\");\nconst apps_1 = __webpack_require__(/*! ./apps */ \"./src/apps.ts\");\nconst virtual_module_1 = __webpack_require__(/*! ./virtual-module */ \"./src/virtual-module.ts\");\nconst systemJSImport = (requestUrl) => __awaiter(void 0, void 0, void 0, function* () {\n const { default: component, mount, unmount } = yield System.import(requestUrl);\n return { component, mount, unmount };\n});\n// const defaultNavigations = {\n// login: '/login',\n// main: '/main',\n// news: '/news',\n// org: '/org',\n// sections: '/sections',\n// 'news.details': '/news/{{id}}',\n// 'org.details': '/org/{{name}}',\n// 'sections.details': '/sections/{{name}}'\n// }\n// const defaultApps = {\n// login: { version: '1.0.0', name: 'login' },\n// main: { version: '1.0.1', name: 'main' },\n// news: { version: '1.0.0', name: 'news' },\n// org: { version: '1.0.0', name: 'org' },\n// sections: { version: '1.0.0', name: 'sections' }\n// }\nexports.default = ({ apps: rawApps, navigations, config }) => __awaiter(void 0, void 0, void 0, function* () {\n virtual_module_1.defineVirtualModule({ navigations, config });\n const apps = new apps_1.Apps(rawApps);\n const history = history_1.createBrowserHistory();\n let prevPathname = window.location.pathname;\n const app = apps.findApp(history.location.pathname);\n const publicPath = `/${app.name}/${app.version}`;\n __webpack_require__.p = `${config.baseUrl}${publicPath}${__webpack_require__.p}`;\n const appPath = `${config.baseUrl}${publicPath}/index.js`;\n const { component, mount, unmount } = yield systemJSImport(appPath);\n mount(component.default);\n history.listen((location) => {\n if (location.pathname !== prevPathname) {\n prevPathname = location.pathname;\n unmount();\n }\n });\n});\n\n\n//# sourceURL=webpack://fireapp/./src/main.ts?"); +eval("\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__webpack_require__(/*! systemjs/dist/system */ \"./node_modules/systemjs/dist/system.js\");\n__webpack_require__(/*! systemjs/dist/extras/amd */ \"./node_modules/systemjs/dist/extras/amd.js\");\n__webpack_require__(/*! systemjs/dist/extras/named-register */ \"./node_modules/systemjs/dist/extras/named-register.js\");\n__webpack_require__(/*! systemjs/dist/extras/named-exports */ \"./node_modules/systemjs/dist/extras/named-exports.js\");\n__webpack_require__(/*! systemjs/dist/extras/transform */ \"./node_modules/systemjs/dist/extras/transform.js\");\nconst history_1 = __webpack_require__(/*! history */ \"./node_modules/history/esm/history.js\");\nconst apps_1 = __webpack_require__(/*! ./apps */ \"./src/apps.ts\");\nconst virtual_module_1 = __webpack_require__(/*! ./virtual-module */ \"./src/virtual-module.ts\");\nconst systemJSImport = (requestUrl) => __awaiter(void 0, void 0, void 0, function* () {\n const { default: component, mount, unmount } = yield System.import(requestUrl);\n return { component, mount, unmount };\n});\nexports.default = ({ apps: rawApps, navigations, config }) => __awaiter(void 0, void 0, void 0, function* () {\n virtual_module_1.defineVirtualModule({ navigations, config });\n const apps = new apps_1.Apps(rawApps);\n const history = history_1.createBrowserHistory();\n let prevPathname = window.location.pathname;\n function getApp() {\n return __awaiter(this, void 0, void 0, function* () {\n const app = apps.findApp(history.location.pathname);\n const publicPath = `/${app.name}/${app.version}`;\n __webpack_require__.p = `${config.baseUrl}${publicPath}${__webpack_require__.p}`;\n const appPath = `${config.baseUrl}${publicPath}/index.js`;\n const { component, mount, unmount } = yield systemJSImport(appPath);\n return { component, mount, unmount };\n });\n }\n let { component, mount, unmount } = yield getApp();\n mount(component.default);\n history.listen((location) => __awaiter(void 0, void 0, void 0, function* () {\n if (location.pathname !== prevPathname) {\n prevPathname = location.pathname;\n unmount();\n const nextApp = yield getApp();\n nextApp.mount(nextApp.component.default);\n unmount = nextApp.unmount;\n }\n }));\n});\n\n\n//# sourceURL=webpack://fireapp/./src/main.ts?"); /***/ }), @@ -257,7 +257,7 @@ eval("\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _argument /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst createVirtualModule = ({ config, navigations }) => ({\n getConfig: () => config,\n getConfigValue: (key) => config[key],\n getNavigations: () => navigations,\n getNavigationsValue: (key) => navigations[key],\n});\nexports.defineVirtualModule = (params) => {\n const virtualModule = createVirtualModule(params);\n // @ts-ignore\n System.set('root.scope', Object.assign({}, virtualModule));\n};\n\n\n//# sourceURL=webpack://fireapp/./src/virtual-module.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst createVirtualModule = ({ config, navigations, features }) => ({\n getConfig: () => config,\n getConfigValue: (pkg) => config[pkg],\n getNavigations: () => navigations,\n getNavigationsValue: (pkg) => navigations[pkg],\n getAllFeatures: () => features,\n getFeatures: (pkg) => features[pkg]\n});\nexports.defineVirtualModule = (params) => {\n const virtualModule = createVirtualModule(params);\n // @ts-ignore\n System.set('root.scope', Object.assign({}, virtualModule));\n};\n\n\n//# sourceURL=webpack://fireapp/./src/virtual-module.ts?"); /***/ }) diff --git a/src/main.ts b/src/main.ts index 57b879f..f2f78d4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -14,27 +14,8 @@ const systemJSImport = async (requestUrl: string) => { return { component, mount, unmount } } -// const defaultNavigations = { -// login: '/login', -// main: '/main', -// news: '/news', -// org: '/org', -// sections: '/sections', -// 'news.details': '/news/{{id}}', -// 'org.details': '/org/{{name}}', -// 'sections.details': '/sections/{{name}}' -// } - -// const defaultApps = { -// login: { version: '1.0.0', name: 'login' }, -// main: { version: '1.0.1', name: 'main' }, -// news: { version: '1.0.0', name: 'news' }, -// org: { version: '1.0.0', name: 'org' }, -// sections: { version: '1.0.0', name: 'sections' } -// } - -export default async ({ apps: rawApps, navigations, config, features }) => { - defineVirtualModule({ navigations, config, features }) +export default async ({ apps: rawApps, navigations, config }) => { + defineVirtualModule({ navigations, config }) const apps = new Apps(rawApps) @@ -42,22 +23,31 @@ export default async ({ apps: rawApps, navigations, config, features }) => { let prevPathname = window.location.pathname - const app = apps.findApp(history.location.pathname) + async function getApp() { + const app = apps.findApp(history.location.pathname) - const publicPath = `/${app.name}/${app.version}` + const publicPath = `/${app.name}/${app.version}` + + __webpack_public_path__ = `${config.baseUrl}${publicPath}${__webpack_public_path__}` + + const appPath = `${config.baseUrl}${publicPath}/index.js` + + const { component, mount, unmount } = await systemJSImport(appPath); - __webpack_public_path__ = `${config.baseUrl}${publicPath}${__webpack_public_path__}` - - const appPath = `${config.baseUrl}${publicPath}/index.js` - - const { component, mount, unmount } = await systemJSImport(appPath); + return { component, mount, unmount }; + } + let { component, mount, unmount } = await getApp() mount(component.default); - history.listen((location) => { + history.listen(async (location) => { if (location.pathname !== prevPathname) { prevPathname = location.pathname unmount() + + const nextApp = await getApp(); + nextApp.mount(nextApp.component.default) + unmount = nextApp.unmount; } }) };