@ -1,21 +1,56 @@
import React from 'react' ;
import { createElement } from 'react' ;
import dynamic from 'dva/dynamic' ;
import { getMenuData } from './menu' ;
let routerDataCache ;
const modelNotExisted = ( app , model ) => (
// eslint-disable-next-line
! app . _ models . some ( ( { namespace } ) => namespace === model )
) ;
// wrapper of dynamic
const dynamicWrapper = ( app , models , component ) => dynamic ( {
app ,
// eslint-disable-next-line no-underscore-dangle
models : ( ) => models . filter ( m => ! app . _ models . some ( ( { namespace } ) => namespace === m ) ) . map ( m => import ( ` ../models/ ${ m } .js ` ) ) ,
// add routerData prop
component : ( ) => {
const routerData = getRouterData ( app ) ;
return component ( ) . then ( ( raw ) => {
const Component = raw . default || raw ;
return props => < Component { ... props } routerData = { routerData } / > ;
const dynamicWrapper = ( app , models , component ) => {
// () => require('module')
// transformed by babel-plugin-dynamic-import-node-sync
if ( component . toString ( ) . indexOf ( '.then(' ) < 0 ) {
models . forEach ( ( model ) => {
if ( modelNotExisted ( app , model ) ) {
// eslint-disable-next-line
app . model ( require ( ` ../models/ ${ model } ` ) . default ) ;
}
} ) ;
} ,
} ) ;
return ( props ) => {
if ( ! routerDataCache ) {
routerDataCache = getRouterData ( app ) ;
}
return createElement ( component ( ) . default , {
... props ,
routerData : routerDataCache ,
} ) ;
} ;
}
// () => import('module')
return dynamic ( {
app ,
models : ( ) => models . filter (
model => modelNotExisted ( app , model ) ) . map ( m => import ( ` ../models/ ${ m } .js ` )
) ,
// add routerData prop
component : ( ) => {
if ( ! routerDataCache ) {
routerDataCache = getRouterData ( app ) ;
}
return component ( ) . then ( ( raw ) => {
const Component = raw . default || raw ;
return props => createElement ( Component , {
... props ,
routerData : routerDataCache ,
} ) ;
} ) ;
} ,
} ) ;
} ;
function getFlatMenuData ( menus ) {
let keys = { } ;