1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import { default as computed, on, observes } from 'ember-addons/ember-computed-decorators';
- export default Ember.Component.extend({
- classNames: 'wizard-links',
- items: Ember.A(),
- @on('didInsertElement')
- @observes('links.@each')
- didInsertElement() {
- Ember.run.scheduleOnce('afterRender', () => {
- this.applySortable();
- });
- },
- applySortable() {
- this.$("ul").sortable({tolerance: 'pointer'}).on('sortupdate', (e, ui) => {
- const itemId = ui.item.data('id');
- const index = ui.item.index();
- Ember.run.bind(this, this.updateItemOrder(itemId, index));
- });
- },
- updateItemOrder(itemId, newIndex) {
- const items = this.get('items');
- const item = items.findBy('id', itemId);
- items.removeObject(item);
- items.insertAt(newIndex, item);
- Ember.run.scheduleOnce('afterRender', this, () => this.applySortable());
- },
- @computed('type')
- header: (type) => `admin.wizard.${type}.header`,
- @computed('items.@each.id', 'current')
- links(items, current) {
- if (!items) return;
- return items.map((item) => {
- if (item) {
- const id = item.get('id');
- const type = this.get('type');
- const label = type === 'action' ? id : (item.get('label') || item.get('title') || id);
- let link = { id, label };
- let classes = 'btn';
- if (current && item.get('id') === current.get('id')) {
- classes += ' btn-primary';
- };
- link['classes'] = classes;
- return link;
- }
- });
- },
- actions: {
- add() {
- const items = this.get('items');
- const type = this.get('type');
- const newId = `${type}_${items.length + 1}`;
- let params = { id: newId, isNew: true };
- if (type === 'step') {
- params['fields'] = Ember.A();
- params['actions'] = Ember.A();
- };
- const newItem = Ember.Object.create(params);
- items.pushObject(newItem);
- this.set('current', newItem);
- this.sendAction('isNew');
- },
- change(itemId) {
- const items = this.get('items');
- this.set('current', items.findBy('id', itemId));
- },
- remove(itemId) {
- const items = this.get('items');
- items.removeObject(items.findBy('id', itemId));
- this.set('current', items[items.length - 1]);
- }
- }
- });
|