UNPKG

q42-cms-components

Version:

81 lines (74 loc) 2.79 kB
import { crudStores } from '../tools/crud-stores.js'; import { initialValue } from '../schema/schema-scripts.js'; import { doc } from '../docs/doc.js'; function defaultStore(itemName) { return crudStores.getStore('/items/' + itemName); } function defaultNewItem(store) { return () => store.loaders.schema().then(schema => initialValue(schema)); } export const crudFactory = doc((options) => { const { itemName, fields, store = defaultStore(itemName), newItem = defaultNewItem(store), customFields = {} } = options; return { name: itemName + 's', template: '<router-view></router-view>', children: [ { path: '', name: 'index-' + itemName, component: require('./crud-overview.vue'), meta: { itemName, store, fields, customFields, newItem } }, { path: 'create', name: 'create-' + itemName, component: require('./crud-editor.vue'), meta: { itemName, store, newItem } }, { path: 'create-type', name: 'create-type-' + itemName, component: require('./crud-editor.vue'), meta: { itemName, store, newItem } }, { path: ':id', name: itemName + '-editor', component: require('./crud-editor.vue'), meta: { itemName, store } } ], } }, `Genereert een CRUD interface voor <code>CmsItem</code>s. <code>options</code> heeft als velden: <ul> <li><code>itemName</code> de korte naam van de class, bijv 'person' of 'banner'. <li><code>fields</code> een array van propertynamen voor de kolommen van het overzicht. <li><code>customFields</code> Optioneel. Een object die mapt van kolom-titel naar component-naam voor het overzicht. <li><code>store</code> Optioneel. Mogelijkheid om de default store obv. de <code>/items/{itemName}</code> api te overriden. <li><code>newItem</code> Optioneel. Een functie die een nieuwe (lege) instance aanmaakt, mag ook een <code>Promise</code> returnen. </ul>`); export const singletonFactory = doc((options) => { const { itemName, store = defaultStore(itemName), newItem = defaultNewItem(store) } = options; return { name: itemName, template: '<router-view></router-view>', children: [ { path: '', name: 'index-' + itemName, component: require('./crud-editor.vue'), meta: { itemName, store, newItem: () => store.getItemById('latest').catch(() => newItem()) }, } ] } }, `Genereert een interface voor een <code>SingletonItem</code>, zonder overzichtspagina. <code>options</code> heeft de velden <code>itemName</code>, <code>newItem</code> en <code>store</code>.`);