const _ = require('lodash') const app = require('../../app') /** * @param {CrudPagesOptions} opts */ const details = (opts) => { const defaultInput = column => html` ` app.component(`app${opts.pascalName}DetailsPage`, { template: html`

{{ctrl.isNew ? 'New ${opts.titleName}' : '${opts.titleName} Details'}}

${opts.columns.map(c => c.input || defaultInput(c))}
Submit
`, controllerAs: 'ctrl', controller: function(api, $scope, $routeParams, $mdToast, $location) { this.isNew = $routeParams.id === 'new' const crud = api.crud(opts.apiPrefix) let original if (this.isNew) { original = {} $scope.model = Object.create(original) } else { crud.read($routeParams.id).then(model => { original = model $scope.model = Object.create(original) }) } this.submit = async () => { try { if (this.isNew) { await crud.create($scope.model) } else { const obj = {} for (var key in $scope.model) { if ($scope.model.hasOwnProperty(key)) { obj[key] = $scope.model[key] } } await crud.update(original.id, obj) } $mdToast.showSimple(`${opts.titleName} saved.`) $location.url(opts.appPrefix) } catch (err) { console.error(err) $mdToast.showSimple(`Could not save ${opts.titleName}: ${err.message || err}`) } } } }) } module.exports = details