fire.app/src/main.ts
2020-03-29 12:49:07 +03:00

64 lines
1.8 KiB
TypeScript

import "systemjs/dist/system";
import "systemjs/dist/extras/amd";
import "systemjs/dist/extras/named-register";
import "systemjs/dist/extras/named-exports";
import "systemjs/dist/extras/transform";
import { createBrowserHistory } from 'history'
import { Apps } from './apps'
import { defineVirtualModule } from './virtual-module'
const systemJSImport = async (requestUrl: string) => {
const { default: component, mount, unmount } = await System.import(
requestUrl
)
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 }) => {
defineVirtualModule({ navigations, config })
const apps = new Apps(rawApps)
const history = createBrowserHistory()
let prevPathname = window.location.pathname
const app = apps.findApp(history.location.pathname)
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);
mount(component.default);
history.listen((location) => {
if (location.pathname !== prevPathname) {
prevPathname = location.pathname
unmount()
}
})
};