@fleetbase/fleetops-engine 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/addon/components/driver-form-panel.hbs +131 -0
- package/addon/components/driver-form-panel.js +39 -0
- package/addon/components/driver-panel/details.hbs +48 -0
- package/addon/components/driver-panel.hbs +60 -0
- package/addon/components/driver-panel.js +57 -0
- package/addon/components/fleet-form-panel.hbs +46 -0
- package/addon/components/fleet-form-panel.js +3 -0
- package/addon/components/fleet-panel.hbs +70 -0
- package/addon/components/fleet-panel.js +43 -0
- package/addon/components/fleet-vehicle-listing.hbs +73 -0
- package/addon/components/fleet-vehicle-listing.js +117 -0
- package/addon/components/leaflet-drift-marker.js +53 -0
- package/addon/components/live-map.hbs +4 -4
- package/addon/components/live-map.js +104 -34
- package/addon/components/modals/fleet-details.hbs +1 -0
- package/addon/components/settings-window.hbs +1 -1
- package/addon/components/vehicle-form-panel.hbs +131 -0
- package/addon/components/vehicle-form-panel.js +39 -0
- package/addon/components/vehicle-panel/details.hbs +34 -0
- package/addon/components/vehicle-panel/tracking.hbs +1 -0
- package/addon/components/vehicle-panel.hbs +60 -0
- package/addon/components/vehicle-panel.js +57 -0
- package/addon/controllers/management/drivers/index/details.js +8 -0
- package/addon/controllers/management/drivers/index/edit.js +80 -0
- package/addon/controllers/management/drivers/index/new.js +128 -0
- package/addon/controllers/management/drivers/index.js +212 -202
- package/addon/controllers/management/fleets/index/details.js +8 -0
- package/addon/controllers/management/fleets/index/edit.js +77 -0
- package/addon/controllers/management/fleets/index/new.js +103 -0
- package/addon/controllers/management/fleets/index.js +49 -77
- package/addon/controllers/management/vehicles/index/details.js +12 -0
- package/addon/controllers/management/vehicles/index/edit.js +8 -0
- package/addon/controllers/management/vehicles/index/new.js +21 -0
- package/addon/controllers/management/vehicles/index.js +6 -129
- package/addon/controllers/operations/orders/index/new.js +67 -20
- package/addon/controllers/operations/orders/index/view.js +15 -4
- package/addon/controllers/operations/orders/index.js +58 -7
- package/addon/controllers/operations/service-rates/index/edit.js +1 -1
- package/addon/controllers/operations/service-rates/index/new.js +10 -11
- package/addon/controllers/operations/service-rates/index.js +7 -0
- package/addon/engine.js +6 -0
- package/addon/initializers/load-leaflet-assets.js +6 -1
- package/addon/instance-initializers/register-leaflet-drift-marker.js +17 -0
- package/addon/routes/management/drivers/index/details.js +9 -0
- package/addon/routes/management/drivers/index/edit.js +13 -0
- package/addon/routes/management/drivers/index/new.js +3 -0
- package/addon/routes/management/fleets/index/details.js +9 -0
- package/addon/routes/management/fleets/index/edit.js +9 -0
- package/addon/routes/management/fleets/index/new.js +3 -0
- package/addon/routes/management/fleets/index.js +1 -0
- package/addon/routes/management/vehicles/index/details.js +18 -0
- package/addon/routes/management/vehicles/index/edit.js +14 -0
- package/addon/routes/management/vehicles/index/new.js +3 -0
- package/addon/routes/operations/orders/index/new.js +3 -1
- package/addon/routes/operations/orders/index/view.js +50 -0
- package/addon/routes/operations/service-rates/index/edit.js +7 -0
- package/addon/routes.js +15 -3
- package/addon/templates/management/drivers/index/details.hbs +1 -0
- package/addon/templates/management/drivers/index/edit.hbs +1 -0
- package/addon/templates/management/drivers/index/new.hbs +1 -0
- package/addon/templates/management/drivers/index.hbs +3 -1
- package/addon/templates/management/fleets/index/details.hbs +1 -0
- package/addon/templates/management/fleets/index/edit.hbs +1 -0
- package/addon/templates/management/fleets/index/new.hbs +1 -0
- package/addon/templates/management/vehicles/index/details.hbs +1 -0
- package/addon/templates/management/vehicles/index/edit.hbs +1 -0
- package/addon/templates/management/vehicles/index/new.hbs +1 -0
- package/addon/templates/operations/orders/index/new.hbs +1 -1
- package/addon/templates/operations/service-rates/index/new.hbs +4 -4
- package/app/components/driver-form-panel.js +1 -0
- package/app/components/driver-panel/details.js +1 -0
- package/app/components/driver-panel.js +1 -0
- package/app/components/fleet-form-panel.js +1 -0
- package/app/components/fleet-panel.js +1 -0
- package/app/components/fleet-vehicle-listing.js +1 -0
- package/app/components/leaflet-drift-marker.js +1 -0
- package/app/components/vehicle-form-panel.js +1 -0
- package/app/components/vehicle-panel/details.js +1 -0
- package/app/components/vehicle-panel/tracking.js +1 -0
- package/app/components/vehicle-panel.js +1 -0
- package/app/controllers/management/drivers/index/new.js +1 -0
- package/app/controllers/management/vehicles/index/details.js +1 -0
- package/app/controllers/management/vehicles/index/new.js +1 -0
- package/app/routes/management/drivers/index/details.js +1 -0
- package/app/routes/management/drivers/index/edit.js +1 -0
- package/app/routes/management/drivers/index/new.js +1 -0
- package/app/routes/management/vehicles/index/details.js +1 -0
- package/app/routes/management/vehicles/index/edit.js +1 -0
- package/app/routes/management/vehicles/index/new.js +1 -0
- package/app/templates/management/drivers/index/details.js +1 -0
- package/app/templates/management/drivers/index/edit.js +1 -0
- package/app/templates/management/drivers/index/new.js +1 -0
- package/app/templates/management/vehicles/index/details.js +1 -0
- package/app/templates/management/vehicles/index/edit.js +1 -0
- package/app/templates/management/vehicles/index/new.js +1 -0
- package/assets/images/boxes/large.png +0 -0
- package/assets/images/boxes/medium.png +0 -0
- package/assets/images/boxes/small.png +0 -0
- package/assets/images/boxes/x-large.png +0 -0
- package/index.js +16 -0
- package/package.json +6 -5
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<Overlay @position="right" @noBackdrop={{true}} @fullHeight={{true}} @width="700">
|
|
2
|
+
<Overlay::Header @hideLeftSection={{true}} @actionsWrapperClass="flex-1 flex-col py-3" class="h-auto-i min-h-[127px]">
|
|
3
|
+
<div class="flex flex-row items-center justify-between w-full mb-4">
|
|
4
|
+
<div class="flex flex-1 space-x-2">
|
|
5
|
+
{{!-- <Button @type="default" @icon="location-arrow" @helpText="Locate vehicle" @onClick={{@onPressCancel}} /> --}}
|
|
6
|
+
<Button @type="default" @icon="pen" @helpText="Edit vehicle" @onClick={{this.editVehicle}} />
|
|
7
|
+
</div>
|
|
8
|
+
<div class="flex flex-1 justify-end">
|
|
9
|
+
<Button @type="default" @icon="times" @helpText="Close vehicle details" @onClick={{@onPressCancel}} />
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="flex flex-row justify-between w-full">
|
|
13
|
+
<div class="flex flex-col flex-1 w-3/4">
|
|
14
|
+
<div class="flex flex-row">
|
|
15
|
+
<div class="w-14 flex items-center justify-center">
|
|
16
|
+
<Image src={{@vehicle.photo_url}} @fallbackSrc={{@vehicle.avatar_url}} alt={{@vehicle.name}} height="48" width="48" class="h-12 w-12" />
|
|
17
|
+
<Attach::Tooltip @class="clean" @animation="scale" @placement={{"top"}}>
|
|
18
|
+
<InputInfo @text={{@vehicle.public_id}} />
|
|
19
|
+
</Attach::Tooltip>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="flex flex-col">
|
|
22
|
+
<h1 class="text-gray-900 dark:text-white text-2xl">{{@vehicle.display_name}}</h1>
|
|
23
|
+
<div class="-mt-1">
|
|
24
|
+
{{#if @vehicle.driver}}
|
|
25
|
+
<div class="flex flex-row items-center">
|
|
26
|
+
<span class="text-sm dark:text-gray-500 text-gray-700 mr-3">{{@vehicle.driver.name}}</span>
|
|
27
|
+
</div>
|
|
28
|
+
{{else}}
|
|
29
|
+
<div class="flex flex-row items-center">
|
|
30
|
+
<span class="text-sm dark:text-gray-500 text-gray-700 mr-3">No driver assigned</span>
|
|
31
|
+
{{!-- <Button @icon="user-plus" @size="xs" @helpText="Assign a driver to vehicle" /> --}}
|
|
32
|
+
</div>
|
|
33
|
+
{{/if}}
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
<div class="flex justify-end w-1/4">
|
|
39
|
+
<Badge @status={{@vehicle.status}} />
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</Overlay::Header>
|
|
43
|
+
<Overlay::Body class="no-padding" @increaseInnerBodyHeightBy={{1000}}>
|
|
44
|
+
<div class="section-header-actions w-full overflow-x-scroll lg:overflow-x-auto">
|
|
45
|
+
<div class="ui-tabs mt-4">
|
|
46
|
+
<nav>
|
|
47
|
+
{{#each this.tabs as |tab|}}
|
|
48
|
+
<a href="javascript:;" class="ui-tab {{if (eq this.currentTab tab.slug) 'active' }}" {{on "click" (fn this.changeTab tab.slug)}}>
|
|
49
|
+
<FaIcon @icon={{tab.icon}} class="mr-1" />
|
|
50
|
+
<span>{{tab.title}}</span>
|
|
51
|
+
</a>
|
|
52
|
+
{{/each}}
|
|
53
|
+
</nav>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
<div class="tab-content tab-{{this.currentTab}}">
|
|
57
|
+
{{component this.tab.component vehicle=@vehicle tabOptions=this.tab params=this.tab.componentParams}}
|
|
58
|
+
</div>
|
|
59
|
+
</Overlay::Body>
|
|
60
|
+
</Overlay>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import Component from '@glimmer/component';
|
|
2
|
+
import { tracked } from '@glimmer/tracking';
|
|
3
|
+
import { action, computed } from '@ember/object';
|
|
4
|
+
import { inject as service } from '@ember/service';
|
|
5
|
+
import { isArray } from '@ember/array';
|
|
6
|
+
import VehiclePanelDetailComponent from './vehicle-panel/details';
|
|
7
|
+
|
|
8
|
+
export default class VehiclePanelComponent extends Component {
|
|
9
|
+
@service fetch;
|
|
10
|
+
@service modalsManager;
|
|
11
|
+
@service universe;
|
|
12
|
+
@service store;
|
|
13
|
+
@service hostRouter;
|
|
14
|
+
@tracked currentTab;
|
|
15
|
+
@tracked devices = [];
|
|
16
|
+
@tracked deviceApi = {};
|
|
17
|
+
@tracked vehicle;
|
|
18
|
+
|
|
19
|
+
get tabs() {
|
|
20
|
+
const registeredTabs = this.universe.getMenuItemsFromRegistry('component:vehicle-panel');
|
|
21
|
+
// this.universe._createMenuItem('Tracking', null, { icon: 'satellite-dish', component: VehiclePanelTrackingComponent }),
|
|
22
|
+
const defaultTabs = [this.universe._createMenuItem('Details', null, { icon: 'circle-info', component: VehiclePanelDetailComponent })];
|
|
23
|
+
|
|
24
|
+
if (isArray(registeredTabs)) {
|
|
25
|
+
return [...defaultTabs, ...registeredTabs];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return defaultTabs;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@computed('currentTab', 'tabs') get tab() {
|
|
32
|
+
if (this.currentTab) {
|
|
33
|
+
return this.tabs.find(({ slug }) => slug === this.currentTab);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
constructor() {
|
|
40
|
+
super(...arguments);
|
|
41
|
+
this.vehicle = this.args.vehicle;
|
|
42
|
+
this.changeTab(this.args.tab || 'details');
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@action async changeTab(tab) {
|
|
46
|
+
this.currentTab = tab;
|
|
47
|
+
|
|
48
|
+
if (typeof this.args.onTabChanged === 'function') {
|
|
49
|
+
this.args.onTabChanged(tab);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@action editVehicle() {
|
|
54
|
+
const { vehicle } = this.args;
|
|
55
|
+
return this.hostRouter.transitionTo('console.fleet-ops.management.vehicles.index.edit', vehicle.public_id);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import Controller from '@ember/controller';
|
|
2
|
+
import { action } from '@ember/object';
|
|
3
|
+
|
|
4
|
+
export default class ManagementDriverIndexDetailsController extends Controller {
|
|
5
|
+
@action transitionBack() {
|
|
6
|
+
return this.transitionToRoute('management.drivers.index');
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import Controller from '@ember/controller';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
3
|
+
import { tracked } from '@glimmer/tracking';
|
|
4
|
+
import { action } from '@ember/object';
|
|
5
|
+
|
|
6
|
+
export default class ManagementDriversIndexEditController extends Controller {
|
|
7
|
+
/**
|
|
8
|
+
* True if updating service rate.
|
|
9
|
+
*
|
|
10
|
+
* @var {Boolean}
|
|
11
|
+
*/
|
|
12
|
+
@tracked isUpdatingDriver = false;
|
|
13
|
+
/**
|
|
14
|
+
* Inject the `loader` service
|
|
15
|
+
*
|
|
16
|
+
* @var {Service}
|
|
17
|
+
*/
|
|
18
|
+
@service loader;
|
|
19
|
+
/**
|
|
20
|
+
* Inject the `notifications` service
|
|
21
|
+
*
|
|
22
|
+
* @var {Service}
|
|
23
|
+
*/
|
|
24
|
+
@service notifications;
|
|
25
|
+
/**
|
|
26
|
+
* Inject the `hostRouter` service
|
|
27
|
+
*
|
|
28
|
+
* @var {Service}
|
|
29
|
+
*/
|
|
30
|
+
@service hostRouter;
|
|
31
|
+
/**
|
|
32
|
+
* Inject the `currentUser` service
|
|
33
|
+
*
|
|
34
|
+
* @var {Service}
|
|
35
|
+
*/
|
|
36
|
+
@service store;
|
|
37
|
+
/**
|
|
38
|
+
* Updates the drivers to server
|
|
39
|
+
*
|
|
40
|
+
* @void
|
|
41
|
+
*/
|
|
42
|
+
@action updateDriver() {
|
|
43
|
+
const { driver } = this;
|
|
44
|
+
|
|
45
|
+
this.isUpdatingDriver = true;
|
|
46
|
+
this.loader.showLoader('.overlay-inner-content', 'Updating driver...');
|
|
47
|
+
|
|
48
|
+
try {
|
|
49
|
+
return driver
|
|
50
|
+
.save()
|
|
51
|
+
.then((driver) => {
|
|
52
|
+
return this.transitionToRoute('management.drivers.index').then(() => {
|
|
53
|
+
this.notifications.success(`Driver '${driver.name}' updated`);
|
|
54
|
+
this.resetForm();
|
|
55
|
+
this.hostRouter.refresh();
|
|
56
|
+
});
|
|
57
|
+
})
|
|
58
|
+
.catch(this.notifications.serverError)
|
|
59
|
+
.finally(() => {
|
|
60
|
+
this.isUpdatingDriver = false;
|
|
61
|
+
this.loader.removeLoader();
|
|
62
|
+
});
|
|
63
|
+
} catch (error) {
|
|
64
|
+
this.isUpdatingDriver = false;
|
|
65
|
+
this.loader.removeLoader();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@action transitionBack() {
|
|
70
|
+
return this.transitionToRoute('management.drivers.index');
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Resets the driver form
|
|
74
|
+
*
|
|
75
|
+
* @void
|
|
76
|
+
*/
|
|
77
|
+
@action resetForm() {
|
|
78
|
+
this.driver = this.store.createRecord('driver');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import Controller, { inject as controller } from '@ember/controller';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
3
|
+
import { tracked } from '@glimmer/tracking';
|
|
4
|
+
import { action } from '@ember/object';
|
|
5
|
+
import generateSlug from '@fleetbase/ember-core/utils/generate-slug';
|
|
6
|
+
|
|
7
|
+
export default class ManagementDriversIndexNewController extends Controller {
|
|
8
|
+
/**
|
|
9
|
+
* Inject the `management.drivers.index` controller
|
|
10
|
+
*
|
|
11
|
+
* @var {Controller}
|
|
12
|
+
*/
|
|
13
|
+
@controller('management.drivers.index') index;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Inject the `currentUser` service
|
|
17
|
+
*
|
|
18
|
+
* @var {Service}
|
|
19
|
+
*/
|
|
20
|
+
@service store;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Inject the `hostRouter` service
|
|
24
|
+
*
|
|
25
|
+
* @var {Service}
|
|
26
|
+
*/
|
|
27
|
+
@service hostRouter;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Inject the `notifications` service
|
|
31
|
+
*
|
|
32
|
+
* @var {Service}
|
|
33
|
+
*/
|
|
34
|
+
@service notifications;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Inject the `loader` service
|
|
38
|
+
*
|
|
39
|
+
* @var {Service}
|
|
40
|
+
*/
|
|
41
|
+
@service loader;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The driver being created.
|
|
45
|
+
*
|
|
46
|
+
* @var {DriverModel}
|
|
47
|
+
*/
|
|
48
|
+
@tracked driver = this.store.createRecord('driver', {
|
|
49
|
+
status: `active`,
|
|
50
|
+
slug: generateSlug(),
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Different service types available, based on order type.
|
|
55
|
+
*
|
|
56
|
+
* @var {Array}
|
|
57
|
+
*/
|
|
58
|
+
@tracked serviceTypes = [];
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Service areas.
|
|
62
|
+
*
|
|
63
|
+
* @var {Array}
|
|
64
|
+
*/
|
|
65
|
+
@tracked serviceAreas = [];
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Zones.
|
|
69
|
+
*
|
|
70
|
+
* @var {Array}
|
|
71
|
+
*/
|
|
72
|
+
@tracked zones = [];
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* True if creating driver.
|
|
76
|
+
*
|
|
77
|
+
* @var {Boolean}
|
|
78
|
+
*/
|
|
79
|
+
@tracked isCreatingDriver = false;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Saves the driver to server
|
|
83
|
+
*
|
|
84
|
+
* @void
|
|
85
|
+
*/
|
|
86
|
+
@action createDriver() {
|
|
87
|
+
const { driver } = this;
|
|
88
|
+
|
|
89
|
+
this.isCreatingDriver = true;
|
|
90
|
+
this.loader.showLoader('.overlay-inner-content', 'Creating driver...');
|
|
91
|
+
|
|
92
|
+
try {
|
|
93
|
+
return driver
|
|
94
|
+
.save()
|
|
95
|
+
.then((driver) => {
|
|
96
|
+
return this.transitionToRoute('management.drivers.index').then(() => {
|
|
97
|
+
this.notifications.success(`New Driver ${driver.name} Created`);
|
|
98
|
+
this.resetForm();
|
|
99
|
+
this.hostRouter.refresh();
|
|
100
|
+
});
|
|
101
|
+
})
|
|
102
|
+
.catch((error) => {
|
|
103
|
+
console.log(error);
|
|
104
|
+
this.notifications.serverError(error);
|
|
105
|
+
})
|
|
106
|
+
.finally(() => {
|
|
107
|
+
this.isCreatingDriver = false;
|
|
108
|
+
this.loader.removeLoader();
|
|
109
|
+
});
|
|
110
|
+
} catch (error) {
|
|
111
|
+
this.isCreatingDriver = false;
|
|
112
|
+
this.loader.removeLoader();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Resets the driver form
|
|
118
|
+
*
|
|
119
|
+
* @void
|
|
120
|
+
*/
|
|
121
|
+
@action resetForm() {
|
|
122
|
+
this.driver = this.store.createRecord('driver');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
@action transitionBack() {
|
|
126
|
+
return this.transitionToRoute('management.drivers.index');
|
|
127
|
+
}
|
|
128
|
+
}
|