@ducna01120/fleetops-engine
Version:
Fleet & Transport Management Extension for Fleetbase
115 lines (103 loc) • 4.24 kB
JavaScript
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { isArray } from '@ember/array';
import { isNone } from '@ember/utils';
import { task } from 'ember-concurrency-decorators';
export default class EntityFieldEditingSettingsComponent extends Component {
notifications;
fetch;
selectedOrderConfig;
entityFields = ['name', 'description', 'sku', 'height', 'width', 'length', 'weight', 'declared_value', 'sale_price'];
entityEditingSettings = {};
settingsLoaded = false;
constructor() {
super(...arguments);
this.getEntityEditableSettings.perform();
}
onConfigChanged(orderConfig) {
if (!isNone(this.selectedOrderConfig) && this.orderConfigDoesntHaveSettings(orderConfig)) {
this.createSettingsForOrderConfig(orderConfig);
}
this.selectedOrderConfig = orderConfig;
}
enableEditableEntityFields(isEditable) {
const orderConfig = this.selectedOrderConfig;
if (orderConfig) {
if (this.orderConfigDoesntHaveSettings(orderConfig)) {
this.createSettingsForOrderConfig(orderConfig, isEditable);
} else {
const orderConfigSettings = this.entityEditingSettings[orderConfig.id] ?? {};
this.entityEditingSettings = {
...this.entityEditingSettings,
[orderConfig.id]: {
...orderConfigSettings,
is_editable: isEditable,
},
};
}
}
}
toggleFieldEditable(fieldName, isEditable) {
const editableFields = this.entityEditingSettings[this.selectedOrderConfig.id]?.editable_entity_fields;
if (isArray(editableFields)) {
if (isEditable) {
editableFields.pushObject(fieldName);
} else {
editableFields.removeObject(fieldName);
}
} else {
this.entityEditingSettings = {
...this.entityEditingSettings,
[this.selectedOrderConfig.id]: {
...this.entityEditingSettings[this.selectedOrderConfig.id],
editable_entity_fields: [],
},
};
return this.toggleFieldEditable(...arguments);
}
this.updateEditableEntityFieldsForOrderConfig(editableFields);
}
*getEntityEditableSettings() {
try {
const { entityEditingSettings } = yield this.fetch.get('fleet-ops/settings/entity-editing-settings');
this.entityEditingSettings = entityEditingSettings;
this.settingsLoaded = true;
} catch (error) {
this.notifications.serverError(error);
}
}
*saveEntityEditingSettings() {
const { entityEditingSettings } = this;
try {
yield this.fetch.post('fleet-ops/settings/entity-editing-settings', { entityEditingSettings });
} catch (error) {
this.notifications.serverError(error);
}
}
orderConfigDoesntHaveSettings(orderConfig) {
return isNone(this.entityEditingSettings[orderConfig.id]);
}
createSettingsForOrderConfig(orderConfig, isEditable = false) {
if (this.orderConfigDoesntHaveSettings(orderConfig)) {
this.entityEditingSettings = {
...this.entityEditingSettings,
[orderConfig.id]: {
editable_entity_fields: [],
is_editable: isEditable,
},
};
}
}
updateEditableEntityFieldsForOrderConfig(editableFields = [], orderConfig = null) {
orderConfig = orderConfig === null ? this.selectedOrderConfig : orderConfig;
this.entityEditingSettings = {
...this.entityEditingSettings,
[orderConfig.id]: {
...this.entityEditingSettings[orderConfig.id],
editable_entity_fields: editableFields,
},
};
}
}