1- import React , { useEffect , useState } from 'react' ;
2- import { Navigate , Route , Routes , useLocation , useNavigate , Outlet } from 'react-router-dom' ;
3- import { createWithRemoteLoader } from '@kne/remote-loader' ;
4- import ensureSlash from '@kne/ensure-slash' ;
5- import { Result , FloatButton } from 'antd' ;
6- import Example from './Example' ;
7- import ExamplePage , { ExampleContent } from './ExamplePage' ;
8- import get from 'lodash/get' ;
9-
10- const ModulesIsEmpty = ( { readme, baseUrl} ) => {
11- const location = useLocation ( ) ;
12- if ( readme && Object . keys ( readme ) . length > 0 && ensureSlash ( location . pathname , true ) === baseUrl ) {
13- return < Navigate to = { `${ baseUrl } ${ Object . keys ( readme ) [ 0 ] } ` } /> ;
14- }
15- if ( readme && Object . keys ( readme ) . length > 0 ) {
16- return < Outlet />
17- }
18- return < Result
19- status = "404"
20- title = "没有检测到业务组件"
21- subTitle = "您可以通过 modules-dev create 命令创建组件,如果已经有组件请检查环境变量 MODULES_DEV_BASE_DIR和MODULES_DEV_ALIAS_NAME 是否设置正确"
22- />
23- } ;
24-
25- const EntryButton = createWithRemoteLoader ( {
26- modules : [ 'components-core:Icon' ]
27- } ) ( ( { remoteModules} ) => {
28- const [ Icon ] = remoteModules ;
29- const navigate = useNavigate ( ) ;
30- return < FloatButton icon = { < Icon className = "icon" type = "icon-liangdian" /> } onClick = { ( ) => {
31- navigate ( '/modules-dev-components' ) ;
32- } } /> ;
33- } ) ;
34-
35- const MainLayout = createWithRemoteLoader ( {
36- modules : [ "components-core:Global" , "components-core:Layout" ]
37- } ) ( ( { remoteModules, paths, preset, ...props } ) => {
38- const [ Global , Layout ] = remoteModules ;
39- return < Global { ...props } preset = { preset } > < Layout navigation = { {
40- showIndex : false , list : paths
41- } } > < Outlet /> </ Layout > </ Global > ;
42- } ) ;
43-
44- const ExampleRoutes = ( {
45- preset, themeToken, projectName, baseUrl = '' , paths = [ {
46- key : 'index' , path : '/' , title : '首页'
47- } , {
48- key : 'components' , path : `${ baseUrl } /components` , title : '组件'
49- } ] , readme, pageProps, children, ...props
50- } ) => {
51- const componentsPath = paths . find ( ( item ) => item . key === 'components' ) ;
52- const componentsBaseUrl = ensureSlash ( get ( componentsPath , 'path' , '/' ) , true ) ;
53- const baseUrlPrefix = new RegExp ( `^${ ensureSlash ( baseUrl , true ) } ` ) ;
54- const componentsRoutePath = ensureSlash ( componentsBaseUrl . replace ( baseUrlPrefix , '' ) ) ;
55- return < Routes >
56- < Route element = { < MainLayout paths = { paths } preset = { preset } themeToken = { themeToken } { ...props } /> } >
57- { componentsPath && < Route path = { componentsRoutePath }
58- element = { < ModulesIsEmpty baseUrl = { componentsBaseUrl } readme = { readme } /> } >
59- < Route path = ":id"
60- element = { < Example baseUrl = { componentsBaseUrl } readme = { readme } pageProps = { pageProps } /> } />
61- < Route path = ":id/*"
62- element = { < Example baseUrl = { componentsBaseUrl } readme = { readme } pageProps = { pageProps } /> } />
63- </ Route > }
64- </ Route >
65- < Route path = '*' element = { children } />
66- </ Routes >
67- } ;
68-
69-
70- const createEntry = ( WrappedComponents ) => ( ( {
71- remoteModules,
72- preset,
73- projectName,
74- themeToken,
75- pageProps,
76- baseUrl = '' ,
77- ...props
78- } ) => {
79- const [ readme , setReadme ] = useState ( { } ) ;
80- useEffect ( ( ) => {
81- import ( 'readme' ) . then ( ( module ) => {
82- setReadme ( module . __esModule === true ? module . default : module ) ;
83- } ) ;
84- } , [ ] ) ;
85- return < >
86- { Object . keys ( readme ) . length > 0 ?
87- < ExampleRoutes preset = { preset } baseUrl = { baseUrl } projectName = { projectName } readme = { readme }
88- pageProps = { pageProps }
89- paths = { [ {
90- key : 'index' , path : '/' , title : '首页'
91- } , {
92- key : 'components' , path : `${ baseUrl } /modules-dev-components` , title : '组件'
93- } ] }
94- themeToken = { themeToken } >
95- < WrappedComponents { ...props } /> < EntryButton />
96- </ ExampleRoutes > : < WrappedComponents { ...props } /> }
97- </ > ;
98- } ) ;
99- createEntry . Example = Example ;
100- createEntry . ExampleRoutes = ExampleRoutes ;
101- createEntry . ExamplePage = ExamplePage ;
102- createEntry . ExampleContent = ExampleContent ;
103-
104- export default createEntry ;
1+ export { default } from './createEntry' ;
2+ export { default as FontList } from './FontList' ;
3+ export { default as Example } from './Example' ;
4+ export { default as ExamplePage } from './ExamplePage' ;
0 commit comments