|
|
|
@ -1,6 +1,7 @@ |
|
|
|
import { createElement } from 'react'; |
|
|
|
import dynamic from 'dva/dynamic'; |
|
|
|
import React, { createElement } from 'react'; |
|
|
|
import { Spin } from 'antd'; |
|
|
|
import pathToRegexp from 'path-to-regexp'; |
|
|
|
import Loadable from 'react-loadable'; |
|
|
|
import { getMenuData } from './menu'; |
|
|
|
|
|
|
|
let routerDataCache; |
|
|
|
@ -13,15 +14,17 @@ const modelNotExisted = (app, model) => |
|
|
|
|
|
|
|
// wrapper of dynamic
|
|
|
|
const dynamicWrapper = (app, models, component) => { |
|
|
|
// () => require('module')
|
|
|
|
// transformed by babel-plugin-dynamic-import-node-sync
|
|
|
|
if (component.toString().indexOf('.then(') < 0) { |
|
|
|
// register models
|
|
|
|
models.forEach(model => { |
|
|
|
if (modelNotExisted(app, model)) { |
|
|
|
// eslint-disable-next-line
|
|
|
|
app.model(require(`../models/${model}`).default); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
// () => require('module')
|
|
|
|
// transformed by babel-plugin-dynamic-import-node-sync
|
|
|
|
if (component.toString().indexOf('.then(') < 0) { |
|
|
|
return props => { |
|
|
|
if (!routerDataCache) { |
|
|
|
routerDataCache = getRouterData(app); |
|
|
|
@ -33,12 +36,8 @@ const dynamicWrapper = (app, models, component) => { |
|
|
|
}; |
|
|
|
} |
|
|
|
// () => import('module')
|
|
|
|
return dynamic({ |
|
|
|
app, |
|
|
|
models: () => |
|
|
|
models.filter(model => modelNotExisted(app, model)).map(m => import(`../models/${m}.js`)), |
|
|
|
// add routerData prop
|
|
|
|
component: () => { |
|
|
|
return Loadable({ |
|
|
|
loader: () => { |
|
|
|
if (!routerDataCache) { |
|
|
|
routerDataCache = getRouterData(app); |
|
|
|
} |
|
|
|
@ -51,6 +50,9 @@ const dynamicWrapper = (app, models, component) => { |
|
|
|
}); |
|
|
|
}); |
|
|
|
}, |
|
|
|
loading: () => { |
|
|
|
return <Spin size="large" className="global-spin" />; |
|
|
|
}, |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
|