@lipagas/storefront-engine
Version:
Headless Commerce & Marketplace Extension for Fleetbase
179 lines (163 loc) • 5.61 kB
JavaScript
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { isBlank } from '@ember/utils';
import { inject as service } from '@ember/service';
/**
* Component representing the schedule card of an order.
* @extends Component
* @memberof OrderScheduleCardComponent
*/
export default class OrderScheduleCardComponent extends Component {
/**
* Service for managing the context panel.
* @service
* @memberof OrderScheduleCardComponent
*/
contextPanel;
/**
* Service for intl.
* @service
*/
intl;
/**
* Service for managing modals.
* @service
* @memberof OrderScheduleCardComponent
*/
modalsManager;
/**
* Service for managing notifications.
* @service
* @memberof OrderScheduleCardComponent
*/
notifications;
/**
* Indicates if a driver is currently being assigned.
* @tracked
* @memberof OrderScheduleCardComponent
*/
isAssigningDriver;
/**
* Constructor for OrderScheduleCardComponent.
* @param {Object} owner - The owner of the component.
* @param {Object} args - Arguments passed to the component, including the order.
*/
constructor(owner, { order }) {
super(...arguments);
this.loadDriverFromOrder(order);
this.loadPayloadFromOrder(order);
}
/**
* Action to handle driver click events.
* @action
* @param {DriverModel} driver - The clicked driver object.
* @memberof OrderScheduleCardComponent
*/
onClickDriver(driver) {
this.contextPanel.focus(driver);
}
/**
* Action to handle vehicle click events.
* @action
* @param {VehicleModel} vehicle - The clicked vehicle object.
* @memberof OrderScheduleCardComponent
*/
onClickVehicle(vehicle) {
this.contextPanel.focus(vehicle);
}
/**
* Action to start the process of assigning a driver.
* @action
* @memberof OrderScheduleCardComponent
*/
startAssignDriver() {
this.isAssigningDriver = !this.isAssigningDriver;
}
/**
* Action to assign a driver to an order.
* @action
* @param {DriverModel} driver - The driver to be assigned.
* @memberof OrderScheduleCardComponent
*/
assignDriver(driver) {
const order = this.args.order;
if (isBlank(driver)) {
return this.modalsManager.confirm({
title: this.intl.t('fleet-ops.component.order.schedule-card.unassign-driver'),
body: this.intl.t('fleet-ops.component.order.schedule-card.unassign-text', { orderId: order.public_id }),
acceptButtonText: this.intl.t('fleet-ops.component.order.schedule-card.unassign-button'),
confirm: () => {
order.setProperties({
driver_assigned: null,
driver_assigned_uuid: null,
});
return order
.save()
.catch((error) => {
this.notifications.serverError(error);
})
.finally(() => {
this.isAssigningDriver = false;
});
},
decline: (modal) => {
this.isAssigningDriver = false;
modal.done();
},
});
}
return this.modalsManager.confirm({
title: this.intl.t('fleet-ops.component.order.schedule-card.assign-driver'),
body: this.intl.t('fleet-ops.component.order.schedule-card.assign-text', { driverName: driver.name, orderId: order.public_id }),
acceptButtonText: this.intl.t('fleet-ops.component.order.schedule-card.assign-button'),
confirm: () => {
order.set('driver_assigned_uuid', driver.id);
return order
.save()
.catch((error) => {
this.notifications.serverError(error);
})
.finally(() => {
this.isAssigningDriver = false;
});
},
decline: (modal) => {
this.isAssigningDriver = false;
modal.done();
},
});
}
/**
* Action triggered when the title of an order is clicked.
* @action
* @param {OrderModel} order - The order associated with the clicked title.
* @memberof OrderScheduleCardComponent
*/
onTitleClick(order) {
const { onTitleClick } = this.args;
if (typeof onTitleClick === 'function') {
onTitleClick(order);
}
}
/**
* Loads the driver information from the order.
* @param {OrderModel} order - The order to load the driver from.
* @memberof OrderScheduleCardComponent
*/
loadDriverFromOrder(order) {
if (order && typeof order.loadDriver === 'function') {
order.loadDriver();
}
}
/**
* Loads the payload information from the order.
* @param {OrderModel} order - The order to load the payload from.
* @memberof OrderScheduleCardComponent
*/
loadPayloadFromOrder(order) {
if (order && typeof order.loadPayload === 'function') {
order.loadPayload();
}
}
}