@fleetbase/fleetops-engine
Version:
Fleet & Transport Management Extension for Fleetbase
268 lines (261 loc) • 10 kB
JavaScript
import Controller from '@ember/controller';
import { inject as service } from '@ember/service';
import { tracked } from '@glimmer/tracking';
import fleetOpsOptions from '../../../utils/fleet-ops-options';
export default class ManagementFleetsIndexController extends Controller {
fleetActions;
serviceAreaActions;
zoneActions;
vendorActions;
tableContext;
intl;
/** query params */
queryParams = ['page', 'limit', 'sort', 'query', 'public_id', 'zone', 'service_area', 'parent_fleet', 'vendor', 'created_by', 'updated_by', 'status', 'task', 'name'];
page = 1;
limit;
sort = '-created_at';
public_id;
service_area;
parent_fleet;
vendor;
zone;
task;
name;
status;
table;
/** action buttons */
get actionButtons() {
return [
{
icon: 'refresh',
onClick: this.fleetActions.refresh,
helpText: this.intl.t('common.refresh'),
},
{
text: this.intl.t('common.new'),
type: 'primary',
icon: 'plus',
onClick: this.fleetActions.transition.create,
},
{
text: this.intl.t('common.import'),
type: 'magic',
icon: 'upload',
onClick: this.fleetActions.import,
},
{
text: this.intl.t('common.export'),
icon: 'long-arrow-up',
iconClass: 'rotate-icon-45',
wrapperClass: 'hidden md:flex',
onClick: this.fleetActions.export,
},
];
}
/** bulk actions */
get bulkActions() {
const selected = this.tableContext.getSelectedRows();
return [
{
label: this.intl.t('common.delete-selected-count', { count: selected.length }),
class: 'text-red-500',
fn: this.fleetActions.bulkDelete,
},
];
}
/** columns */
get columns() {
return [
{
sticky: true,
label: this.intl.t('column.name'),
valuePath: 'name',
cellComponent: 'table/cell/anchor',
permission: 'fleet-ops view fleet',
action: this.fleetActions.transition.view,
resizable: true,
sortable: true,
filterable: true,
filterParam: 'name',
filterComponent: 'filter/string',
},
{
label: this.intl.t('column.service-area'),
cellComponent: 'table/cell/anchor',
action: async (fleet) => {
const serviceArea = await fleet.get('service_area');
this.serviceAreaActions.modal.view(serviceArea);
},
permission: 'fleet-ops view service-area',
valuePath: 'service_area.name',
resizable: true,
filterable: true,
filterComponent: 'filter/model',
filterComponentPlaceholder: 'Select service area',
filterParam: 'service_area',
model: 'service-area',
},
{
label: this.intl.t('column.parent-fleet'),
cellComponent: 'table/cell/anchor',
permission: 'fleet-ops view fleet',
action: async (fleet) => {
const parentFleet = await fleet.get('parent_fleet');
this.fleetActions.modal.view(parentFleet);
},
valuePath: 'parent_fleet.name',
resizable: true,
filterable: true,
filterComponent: 'filter/model',
filterComponentPlaceholder: 'Select fleet',
filterParam: 'parent_fleet_uuid',
model: 'fleet',
},
{
label: this.intl.t('column.vendor'),
cellComponent: 'table/cell/anchor',
permission: 'fleet-ops view vendor',
action: async (fleet) => {
const vendor = await fleet.get('vendor');
this.vendorActions.modal.view(vendor);
},
valuePath: 'vendor.name',
resizable: true,
hidden: true,
filterable: true,
filterComponent: 'filter/model',
filterComponentPlaceholder: 'Select vendor',
filterParam: 'vendor',
model: 'vendor',
},
{
label: this.intl.t('column.zone'),
cellComponent: 'table/cell/anchor',
permission: 'fleet-ops view zone',
action: async (fleet) => {
const zone = await fleet.get('zone');
this.zoneActions.modal.view(zone);
},
valuePath: 'zone.name',
resizable: true,
filterable: true,
filterComponent: 'filter/model',
filterComponentPlaceholder: 'Select zone',
filterParam: 'zone',
model: 'zone',
},
{
label: this.intl.t('column.id'),
valuePath: 'public_id',
cellComponent: 'click-to-copy',
action: this.fleetActions.transition.view,
hidden: true,
resizable: true,
sortable: true,
filterable: true,
filterComponent: 'filter/string',
},
{
label: this.intl.t('column.manpower'),
valuePath: 'drivers_count',
resizable: true,
sortable: true,
filterable: false,
},
{
label: this.intl.t('column.active-manpower'),
valuePath: 'drivers_online_count',
hidden: true,
resizable: true,
sortable: true,
filterable: false,
},
{
label: this.intl.t('column.task'),
valuePath: 'task',
cellComponent: 'table/cell/base',
resizable: true,
sortable: true,
filterable: true,
filterComponent: 'filter/string',
},
{
label: this.intl.t('column.status'),
valuePath: 'status',
cellComponent: 'table/cell/status',
resizable: true,
sortable: true,
filterable: true,
filterComponent: 'filter/multi-option',
filterOptionLabel: 'label',
filterOptionValue: 'value',
filterOptions: fleetOpsOptions('fleetStatuses'),
},
{
label: this.intl.t('column.created-at'),
valuePath: 'createdAt',
sortParam: 'created_at',
resizable: true,
sortable: true,
filterable: true,
filterComponent: 'filter/date',
},
{
label: this.intl.t('column.updated-at'),
valuePath: 'updatedAt',
sortParam: 'updated_at',
resizable: true,
sortable: true,
hidden: true,
filterable: true,
filterComponent: 'filter/date',
},
{
label: '',
cellComponent: 'table/cell/dropdown',
ddButtonText: false,
ddButtonIcon: 'ellipsis-h',
ddButtonIconPrefix: 'fas',
ddMenuLabel: this.intl.t('common.resource-actions', { resource: this.intl.t('resource.fleet') }),
cellClassNames: 'overflow-visible',
wrapperClass: 'flex items-center justify-end mx-2',
sticky: 'right',
width: 60,
actions: [
{
label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.fleet') }),
fn: this.fleetActions.transition.view,
permission: 'fleet-ops view fleet',
},
{
label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.fleet') }),
fn: this.fleetActions.transition.edit,
permission: 'fleet-ops update fleet',
},
{
label: this.intl.t('fleet.actions.assign-driver'),
permission: 'fleet-ops assign-driver-for fleet',
fn: this.fleetActions.assignDriver,
},
{
label: this.intl.t('fleet.actions.assign-vehicle'),
permission: 'fleet-ops assign-vehicle-for fleet',
fn: this.fleetActions.assignVehicle,
},
{
separator: true,
},
{
label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.fleet') }),
fn: this.fleetActions.delete,
permission: 'fleet-ops delete fleet',
},
],
sortable: false,
filterable: false,
resizable: false,
searchable: false,
},
];
}
}