-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathroute_creator.js
55 lines (50 loc) · 1.91 KB
/
route_creator.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import PageCreator from './components/page.js'
import DetailPageCreator from './components/detailPage.js'
import AppPageCreator from './app_page.js'
async function _getYAMLRoutes (siteconf, pageCreator) {
const routes = []
async function _loadFolder (folder) {
const promises = []
const contentReq = await axios.get(siteconf.dataUrl + 'pages/' + folder)
_.map(contentReq.data, i => {
const match = i.name.match(/^(\w+).yaml$/)
if (i.type === 'file' && match) {
const path = folder + (i.name === 'index.yaml' ? '/' : match[1])
routes.push({
path: path.replace(/(\/){2,}/g, '/'),
component: () => pageCreator(folder + '/' + i.name)
})
} else if (i.type === 'directory') {
promises.push(_loadFolder(`${folder}/${i.name}/`))
}
})
return Promise.all(promises)
}
await _loadFolder('/')
return routes
}
export default async function createRoutes (siteconf, componentManager, templateManager, methods) {
const pageCreator = PageCreator(siteconf, templateManager, componentManager)
const detailPageCreator = DetailPageCreator(siteconf, templateManager, componentManager)
const webRoutes = await _getYAMLRoutes(siteconf, pageCreator)
_.map(siteconf.detailpages, i => {
const route = i.component
? { path: i.path, component: () => componentManager.load(i.component) }
: { path: `${i.path}:id`, component: () => detailPageCreator(i) }
webRoutes.push(route)
})
const createAppPage = AppPageCreator(siteconf, templateManager, componentManager)
const promises = _.map(siteconf.apps, async i => {
const mod = await componentManager.load(i.module)
mod.setup(webRoutes, i.path, i, createAppPage)
})
await Promise.all(promises)
webRoutes.push({
path: `/_t/:t?`,
beforeEnter: async (to, from, next) => {
await methods.setToken(to.params.t || to.query.t)
next('/')
}
})
return webRoutes
}