@fleetbase/fleetops-engine
Version:
Fleet & Transport Management Extension for Fleetbase
93 lines (79 loc) • 3.33 kB
JavaScript
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
export default class ServiceRateFormComponent extends Component {
orderConfigActions;
serviceAreaActions;
serviceRateActions;
constructor() {
super(...arguments);
this.orderConfigActions.loadAll.perform();
this.serviceAreaActions.loadAll.perform();
}
get serviceAreas() {
return this.serviceAreaActions.serviceAreas ?? [];
}
get zones() {
return Array.from(this.serviceAreas).flatMap((serviceArea) => serviceArea.zones?.toArray?.() ?? serviceArea.zones ?? []);
}
get geographyTypes() {
return [
{ label: 'Service Area', value: 'service_area' },
{ label: 'Zone', value: 'zone' },
{ label: 'Fallback', value: 'fallback' },
];
}
selectOrderConfig(orderConfig) {
this.args.resource.set('order_config', orderConfig);
this.args.resource.set('order_config_uuid', orderConfig.id);
this.args.resource.set('service_type', orderConfig.key);
}
selectRateCalculationMethod({ value: rateCalculationMethod }) {
this.args.resource.set('rate_calculation_method', rateCalculationMethod);
if (rateCalculationMethod === 'per_drop') {
this.args.resource.resetPerDropFees();
} else if (rateCalculationMethod === 'fixed_meter' || rateCalculationMethod === 'fixed_rate') {
this.serviceRateActions.generateFixedRateFees(this.args.resource);
} else if (rateCalculationMethod === 'multi_zone_distance' && !this.args.resource.rateFees.length) {
this.args.resource.addMultiZoneDistanceRule();
this.args.resource.addMultiZoneDistanceFallbackRule();
}
}
onMaxDistanceChange() {
this.serviceRateActions.generateFixedRateFees(this.args.resource);
}
selectRuleGeographyType(rule, { value }) {
rule.set('selected_geography_type', value);
rule.set('zone', null);
rule.set('zone_uuid', null);
rule.set('service_area', null);
rule.set('service_area_uuid', null);
rule.set('is_fallback', value === 'fallback');
}
selectRuleServiceArea(rule, serviceArea) {
rule.set('selected_geography_type', 'service_area');
rule.set('service_area', serviceArea);
rule.set('service_area_uuid', serviceArea?.id);
rule.set('zone', null);
rule.set('zone_uuid', null);
rule.set('is_fallback', false);
}
selectRuleZone(rule, zone) {
rule.set('selected_geography_type', 'zone');
rule.set('zone', zone);
rule.set('zone_uuid', zone?.id);
rule.set('service_area', null);
rule.set('service_area_uuid', null);
rule.set('is_fallback', false);
}
setRuleFallback(rule, isFallback) {
rule.set('is_fallback', Boolean(isFallback));
if (isFallback) {
rule.set('selected_geography_type', 'fallback');
rule.set('zone', null);
rule.set('zone_uuid', null);
rule.set('service_area', null);
rule.set('service_area_uuid', null);
}
}
}