@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.
Files changed (101) hide show
  1. package/addon/components/driver-form-panel.hbs +131 -0
  2. package/addon/components/driver-form-panel.js +39 -0
  3. package/addon/components/driver-panel/details.hbs +48 -0
  4. package/addon/components/driver-panel.hbs +60 -0
  5. package/addon/components/driver-panel.js +57 -0
  6. package/addon/components/fleet-form-panel.hbs +46 -0
  7. package/addon/components/fleet-form-panel.js +3 -0
  8. package/addon/components/fleet-panel.hbs +70 -0
  9. package/addon/components/fleet-panel.js +43 -0
  10. package/addon/components/fleet-vehicle-listing.hbs +73 -0
  11. package/addon/components/fleet-vehicle-listing.js +117 -0
  12. package/addon/components/leaflet-drift-marker.js +53 -0
  13. package/addon/components/live-map.hbs +4 -4
  14. package/addon/components/live-map.js +104 -34
  15. package/addon/components/modals/fleet-details.hbs +1 -0
  16. package/addon/components/settings-window.hbs +1 -1
  17. package/addon/components/vehicle-form-panel.hbs +131 -0
  18. package/addon/components/vehicle-form-panel.js +39 -0
  19. package/addon/components/vehicle-panel/details.hbs +34 -0
  20. package/addon/components/vehicle-panel/tracking.hbs +1 -0
  21. package/addon/components/vehicle-panel.hbs +60 -0
  22. package/addon/components/vehicle-panel.js +57 -0
  23. package/addon/controllers/management/drivers/index/details.js +8 -0
  24. package/addon/controllers/management/drivers/index/edit.js +80 -0
  25. package/addon/controllers/management/drivers/index/new.js +128 -0
  26. package/addon/controllers/management/drivers/index.js +212 -202
  27. package/addon/controllers/management/fleets/index/details.js +8 -0
  28. package/addon/controllers/management/fleets/index/edit.js +77 -0
  29. package/addon/controllers/management/fleets/index/new.js +103 -0
  30. package/addon/controllers/management/fleets/index.js +49 -77
  31. package/addon/controllers/management/vehicles/index/details.js +12 -0
  32. package/addon/controllers/management/vehicles/index/edit.js +8 -0
  33. package/addon/controllers/management/vehicles/index/new.js +21 -0
  34. package/addon/controllers/management/vehicles/index.js +6 -129
  35. package/addon/controllers/operations/orders/index/new.js +67 -20
  36. package/addon/controllers/operations/orders/index/view.js +15 -4
  37. package/addon/controllers/operations/orders/index.js +58 -7
  38. package/addon/controllers/operations/service-rates/index/edit.js +1 -1
  39. package/addon/controllers/operations/service-rates/index/new.js +10 -11
  40. package/addon/controllers/operations/service-rates/index.js +7 -0
  41. package/addon/engine.js +6 -0
  42. package/addon/initializers/load-leaflet-assets.js +6 -1
  43. package/addon/instance-initializers/register-leaflet-drift-marker.js +17 -0
  44. package/addon/routes/management/drivers/index/details.js +9 -0
  45. package/addon/routes/management/drivers/index/edit.js +13 -0
  46. package/addon/routes/management/drivers/index/new.js +3 -0
  47. package/addon/routes/management/fleets/index/details.js +9 -0
  48. package/addon/routes/management/fleets/index/edit.js +9 -0
  49. package/addon/routes/management/fleets/index/new.js +3 -0
  50. package/addon/routes/management/fleets/index.js +1 -0
  51. package/addon/routes/management/vehicles/index/details.js +18 -0
  52. package/addon/routes/management/vehicles/index/edit.js +14 -0
  53. package/addon/routes/management/vehicles/index/new.js +3 -0
  54. package/addon/routes/operations/orders/index/new.js +3 -1
  55. package/addon/routes/operations/orders/index/view.js +50 -0
  56. package/addon/routes/operations/service-rates/index/edit.js +7 -0
  57. package/addon/routes.js +15 -3
  58. package/addon/templates/management/drivers/index/details.hbs +1 -0
  59. package/addon/templates/management/drivers/index/edit.hbs +1 -0
  60. package/addon/templates/management/drivers/index/new.hbs +1 -0
  61. package/addon/templates/management/drivers/index.hbs +3 -1
  62. package/addon/templates/management/fleets/index/details.hbs +1 -0
  63. package/addon/templates/management/fleets/index/edit.hbs +1 -0
  64. package/addon/templates/management/fleets/index/new.hbs +1 -0
  65. package/addon/templates/management/vehicles/index/details.hbs +1 -0
  66. package/addon/templates/management/vehicles/index/edit.hbs +1 -0
  67. package/addon/templates/management/vehicles/index/new.hbs +1 -0
  68. package/addon/templates/operations/orders/index/new.hbs +1 -1
  69. package/addon/templates/operations/service-rates/index/new.hbs +4 -4
  70. package/app/components/driver-form-panel.js +1 -0
  71. package/app/components/driver-panel/details.js +1 -0
  72. package/app/components/driver-panel.js +1 -0
  73. package/app/components/fleet-form-panel.js +1 -0
  74. package/app/components/fleet-panel.js +1 -0
  75. package/app/components/fleet-vehicle-listing.js +1 -0
  76. package/app/components/leaflet-drift-marker.js +1 -0
  77. package/app/components/vehicle-form-panel.js +1 -0
  78. package/app/components/vehicle-panel/details.js +1 -0
  79. package/app/components/vehicle-panel/tracking.js +1 -0
  80. package/app/components/vehicle-panel.js +1 -0
  81. package/app/controllers/management/drivers/index/new.js +1 -0
  82. package/app/controllers/management/vehicles/index/details.js +1 -0
  83. package/app/controllers/management/vehicles/index/new.js +1 -0
  84. package/app/routes/management/drivers/index/details.js +1 -0
  85. package/app/routes/management/drivers/index/edit.js +1 -0
  86. package/app/routes/management/drivers/index/new.js +1 -0
  87. package/app/routes/management/vehicles/index/details.js +1 -0
  88. package/app/routes/management/vehicles/index/edit.js +1 -0
  89. package/app/routes/management/vehicles/index/new.js +1 -0
  90. package/app/templates/management/drivers/index/details.js +1 -0
  91. package/app/templates/management/drivers/index/edit.js +1 -0
  92. package/app/templates/management/drivers/index/new.js +1 -0
  93. package/app/templates/management/vehicles/index/details.js +1 -0
  94. package/app/templates/management/vehicles/index/edit.js +1 -0
  95. package/app/templates/management/vehicles/index/new.js +1 -0
  96. package/assets/images/boxes/large.png +0 -0
  97. package/assets/images/boxes/medium.png +0 -0
  98. package/assets/images/boxes/small.png +0 -0
  99. package/assets/images/boxes/x-large.png +0 -0
  100. package/index.js +16 -0
  101. 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
+ }