const app = require('../../app') const {editIcon, createIcon, deleteIcon} = require('../../assets') /** * @param {CrudPagesOptions} opts */ const list = (opts) => { const defaultHeader = column => html`${column.titleName}` const defaultCell = column => { if (column.type === 'autocomplete') { return html`{{${raw(opts.camelName)}.${raw(column.camelName)} && (ctrl.autocomplete.${raw(column.camelName)}.lookup[${raw(opts.camelName)}.${raw(column.camelName)}] || ctrl.autocomplete.${raw(column.camelName)}.load(${raw(opts.camelName)}.${raw(column.camelName)}))}}` } else { return html`{{${raw(opts.camelName)}.${raw(column.camelName)}}}` } } const template = html`

${opts.titlePlural}

${opts.columns.filter(c => c.inList).map(c => c.header || defaultHeader(c))} ${opts.columns.filter(c => c.inList).map(c => c.cell || defaultCell(c))}
Actions
Edit Delete
` console.log(`crud: app${opts.pascalPlural}Page`) app.component(`app${opts.pascalPlural}Page`, { template, controllerAs: 'ctrl', controller: function(api, $mdToast) { const crud = api.crud(opts.apiPrefix) this.template = template this.selected = [] this.data = [] this.getRecords = () => { this.promise = crud.list().then(data => { this.data = data }) } this.delete = async (record) => { try { await crud.delete(record.id) $mdToast.showSimple(`${opts.titleName} deleted.`) } catch (err) { console.error(err) $mdToast.showSimple(`Could not delete ${opts.titleName}: ${err.message || err}`) } } this.getRecords() /* Autocomplete fields */ this.autocomplete = {} opts.columns.filter(c => c.type === 'autocomplete').forEach(c => { const crud = api.crud(c.apiPrefix) let timer = null let ids = [] const load = () => { timer = null console.log('Loading', ids) crud.lookup(ids).then(records => { records.forEach(rec => { ac.lookup[rec.id] = rec.name || rec.key || rec.id }) }) } const ac = this.autocomplete[c.camelName] = { lookup: {}, load(id) { if (!ac.lookup.hasOwnProperty(id)) { console.log('Queuing to load', id) ac.lookup[id] = '...' if (!ids.includes(id)) ids.push(id) if (!timer) timer = setTimeout(load) } return ac.lookup[id] } } }) } }) } module.exports = list