open-consul/ui/packages/consul-ui/app/components/data-form/index.js
John Cowen c98130cc08
ui: Move to Workspaced Structure (#8994)
* ui: Add the most basic workspace root in /ui

* We already have a LICENSE file in the repository root

* Change directory path in build scripts ui-v2 -> ui

* Make yarn install flags configurable from elsewhere

* Minimal workspace root makefile

* Call the new docker specific target

* Update yarn in the docker build image

* Reconfigure the netlify target and move to the higher makefile

* Move ui-v2 -> ui/packages/consul-ui

* Change repo root to refleect new folder structure

* Temporarily don't hoist consul-api-double

* Fixup CI configuration

* Fixup lint errors

* Fixup Netlify target
2020-10-21 15:23:16 +01:00

64 lines
1.8 KiB
JavaScript

import Component from '@ember/component';
import { inject as service } from '@ember/service';
import { set, get } from '@ember/object';
import Slotted from 'block-slots';
export default Component.extend(Slotted, {
tagName: '',
dom: service('dom'),
builder: service('form'),
create: false,
ondelete: function() {
return this.onsubmit(...arguments);
},
oncancel: function() {
return this.onsubmit(...arguments);
},
onsubmit: function() {},
onchange: function(e, form) {
return form.handleEvent(e);
},
didReceiveAttrs: function() {
this._super(...arguments);
try {
this.form = this.builder.form(this.type);
} catch (e) {
// passthrough
// this lets us load view only data that doesn't have a form
}
},
willRender: function() {
this._super(...arguments);
set(this, 'hasError', this._isRegistered('error'));
},
willDestroyElement: function() {
this._super(...arguments);
if (get(this, 'data.isNew')) {
this.data.rollbackAttributes();
}
},
actions: {
setData: function(data) {
let changeset = data;
// convert to a real changeset
if (typeof this.form !== 'undefined') {
changeset = this.form.setData(data).getData();
}
// mark as creating
// and autofill the new record if required
if (get(changeset, 'isNew')) {
set(this, 'create', true);
changeset = Object.entries(this.autofill || {}).reduce(function(prev, [key, value]) {
set(prev, key, value);
return prev;
}, changeset);
}
set(this, 'data', changeset);
return this.data;
},
change: function(e, value, item) {
this.onchange(this.dom.normalizeEvent(e, value), this.form, this.form.getData());
},
},
});