ui/lib/shared/addon/mixins/view-new-edit.js

60 lines
1.4 KiB
JavaScript

import Mixin from '@ember/object/mixin'
import NewOrEdit from './new-or-edit';
import { computed, get, set } from '@ember/object'
import { equal, or, alias } from '@ember/object/computed'
import { inject as service } from '@ember/service';
export const VIEW = 'view';
export const NEW = 'new';
export const EDIT = 'edit';
export default Mixin.create(NewOrEdit, {
intl: service(),
titleKey: null,
inlineEdit: false,
isView: equal('mode', VIEW),
isNew: equal('mode', NEW),
isEdit: equal('mode', EDIT),
notView: or('isNew','isEdit'),
editing: alias('notView'),
actions: {
inlineEdit() {
set(this, 'mode', EDIT);
set(this, 'inlineEdit', true);
},
viewEditCancel() {
if ( get(this, 'inlineEdit') ) {
set(this, 'inlineEdit', false);
set(this, 'mode', VIEW);
} else {
this.sendAction('cancel');
}
},
cancel() {
this.sendAction('cancel');
},
},
title: computed('mode', 'primaryResource.displayName', 'titleKey', function() {
const prefix = get(this, 'titleKey');
const mode = get(this, 'mode');
const intl = get(this, 'intl');
let name = get(this, 'originalModel.displayName')
|| get(this, 'primaryResource.displayName')
|| '';
return intl.t(prefix+'.'+mode, { name });
}),
doneSaving() {
this.sendAction('done');
return this._super(...arguments);
},
});