@ducna01120/fleetops-engine
Version:
Fleet & Transport Management Extension for Fleetbase
121 lines (95 loc) • 3.81 kB
JavaScript
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { action, computed, set } from '@ember/object';
import { isArray } from '@ember/array';
import { underscore } from '@ember/string';
import generateUuid from '@fleetbase/ember-core/utils/generate-uuid';
import getWeightUnits from '@fleetbase/ember-core/utils/get-weight-units';
import getLengthUnits from '@fleetbase/ember-core/utils/get-length-units';
export default class OrderConfigEntitiesEditorComponent extends Component {
modalsManager;
notifications;
intl;
weightUnits = getWeightUnits();
lengthUnits = getLengthUnits();
_orderConfig = null;
get orderConfig() {
if (this._orderConfig) {
return this._orderConfig;
}
return this.args.orderConfig;
}
set orderConfig(orderConfig) {
this._orderConfig = orderConfig;
}
newEntity() {
const { orderConfig } = this;
const entity = {
id: generateUuid(),
name: null,
type: null,
description: null,
weight: null,
weight_unit: null,
length: null,
width: null,
height: null,
dimentions_unit: null,
meta: {},
};
if (!isArray(orderConfig.meta.entities)) {
set(orderConfig, 'meta.entities', []);
}
orderConfig.meta.entities.pushObject(entity);
if (typeof this.args.onEntitiesChanged === 'function') {
this.args.onEntitiesChanged(orderConfig.meta.entities);
}
}
removeEntity(index) {
const { orderConfig } = this;
orderConfig.meta.entities.removeAt(index);
if (typeof this.args.onEntitiesChanged === 'function') {
this.args.onEntitiesChanged(orderConfig.meta.entities);
}
}
addMetaField(index) {
const { orderConfig } = this;
this.modalsManager.show('modals/entity-meta-field-prompt', {
title: 'Add a new group of meta fields',
keyName: null,
confirm: (modal) => {
const keyName = modal.getOption('keyName');
if (!keyName) {
return this.notifications.warning(this.intl.t('fleet-ops.component.order-config.entities-editor.warning-message'));
}
modal.startLoading();
const meta = { ...orderConfig.meta.entities[index].meta };
const key = underscore(keyName.toLowerCase());
meta[key] = '';
set(orderConfig, `meta.entities.${index}.meta`, meta);
if (typeof this.args.onEntitiesChanged === 'function') {
this.args.onEntitiesChanged(orderConfig.meta.entities);
}
modal.done();
},
});
}
setMetaKeyValue(index, key, { target }) {
const { orderConfig } = this;
const { value } = target;
set(orderConfig, `meta.entities.${index}.meta.${key}`, value);
if (typeof this.args.onEntitiesChanged === 'function') {
this.args.onEntitiesChanged(orderConfig.meta.entities);
}
}
removeMetaKey(index, key) {
const { orderConfig } = this;
const meta = { ...orderConfig.meta.entities[index].meta };
delete meta[key];
set(orderConfig, `meta.entities.${index}.meta`, meta);
if (typeof this.args.onEntitiesChanged === 'function') {
this.args.onEntitiesChanged(orderConfig.meta.entities);
}
}
}