49 lines
1.3 KiB
JavaScript
49 lines
1.3 KiB
JavaScript
|
const { appPackageFolder } = require("../createAppPackage")
|
||
|
const { readJSON, readdir, stat } = require("fs-extra")
|
||
|
const { join } = require("path")
|
||
|
const { keyBy } = require("lodash/fp")
|
||
|
|
||
|
module.exports = async (config, appname, pagename) => {
|
||
|
const appPath = appPackageFolder(config, appname)
|
||
|
return keyBy("name")(await fetchscreens(appPath, pagename))
|
||
|
}
|
||
|
|
||
|
const fetchscreens = async (appPath, pagename, relativePath = "") => {
|
||
|
const currentDir = join(appPath, "pages", pagename, "screens", relativePath)
|
||
|
|
||
|
const contents = await readdir(currentDir)
|
||
|
|
||
|
const screens = []
|
||
|
|
||
|
for (let item of contents) {
|
||
|
const itemRelativePath = join(relativePath, item)
|
||
|
const itemFullPath = join(currentDir, item)
|
||
|
const stats = await stat(itemFullPath)
|
||
|
|
||
|
if (stats.isFile()) {
|
||
|
if (!item.endsWith(".json")) continue
|
||
|
|
||
|
const component = await readJSON(itemFullPath)
|
||
|
|
||
|
component.name = itemRelativePath
|
||
|
.substring(0, itemRelativePath.length - 5)
|
||
|
.replace(/\\/g, "/")
|
||
|
|
||
|
component.props = component.props || {}
|
||
|
|
||
|
screens.push(component)
|
||
|
} else {
|
||
|
const childComponents = await fetchscreens(
|
||
|
appPath,
|
||
|
join(relativePath, item)
|
||
|
)
|
||
|
|
||
|
for (let c of childComponents) {
|
||
|
screens.push(c)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return screens
|
||
|
}
|