62 lines
1.3 KiB
JavaScript
62 lines
1.3 KiB
JavaScript
import camelCase from 'lodash/camelCase'
|
|
import upperFirst from 'lodash/upperFirst'
|
|
|
|
/**
|
|
* @typedef {import('./nova').default} NovaApp
|
|
*/
|
|
|
|
/**
|
|
* @param {NovaApp} app
|
|
* @param {string} type
|
|
* @param {{[key: string]: any}} requireComponent
|
|
*/
|
|
function registerComponents(app, type, requireComponent) {
|
|
requireComponent.keys().forEach(fileName => {
|
|
const componentConfig = requireComponent(fileName)
|
|
const componentName = upperFirst(
|
|
camelCase(
|
|
fileName
|
|
.split('/')
|
|
.pop()
|
|
.replace(/\.\w+$/, '')
|
|
)
|
|
)
|
|
|
|
app.component(
|
|
type + componentName,
|
|
componentConfig.default || componentConfig
|
|
)
|
|
})
|
|
}
|
|
|
|
/**
|
|
* @param {NovaApp} app
|
|
*/
|
|
export function registerFields(app) {
|
|
registerComponents(
|
|
app,
|
|
'Index',
|
|
require.context(`./fields/Index`, true, /[A-Z]\w+\.(vue)$/)
|
|
)
|
|
registerComponents(
|
|
app,
|
|
'Detail',
|
|
require.context(`./fields/Detail`, true, /[A-Z]\w+\.(vue)$/)
|
|
)
|
|
registerComponents(
|
|
app,
|
|
'Form',
|
|
require.context(`./fields/Form`, true, /[A-Z]\w+\.(vue)$/)
|
|
)
|
|
registerComponents(
|
|
app,
|
|
'Filter',
|
|
require.context(`./fields/Filter`, true, /[A-Z]\w+\.(vue)$/)
|
|
)
|
|
registerComponents(
|
|
app,
|
|
'Preview',
|
|
require.context(`./fields/Preview`, true, /[A-Z]\w+\.(vue)$/)
|
|
)
|
|
}
|