@fleetbase/fleetops-engine 0.3.1 → 0.3.3
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/admin/visibility-controls.js +1 -0
- package/addon/components/contact-form-panel.hbs +82 -0
- package/addon/components/contact-form-panel.js +195 -0
- package/addon/components/contact-panel/details.hbs +36 -0
- package/addon/components/contact-panel/details.js +3 -0
- package/addon/components/contact-panel.hbs +52 -0
- package/addon/components/contact-panel.js +161 -0
- package/addon/components/driver-form-panel.hbs +39 -55
- package/addon/components/driver-form-panel.js +41 -0
- package/addon/components/driver-panel/details.hbs +2 -2
- package/addon/components/driver-panel.hbs +12 -10
- package/addon/components/driver-panel.js +13 -0
- package/addon/components/fleet-form-panel.hbs +28 -28
- package/addon/components/fleet-form-panel.js +150 -1
- package/addon/components/fleet-listing-panel.hbs +8 -0
- package/addon/components/fleet-listing-panel.js +34 -0
- package/addon/components/fleet-panel/details.hbs +30 -0
- package/addon/components/fleet-panel/driver-listing.hbs +72 -0
- package/addon/components/fleet-panel/driver-listing.js +149 -0
- package/addon/components/fleet-panel/vehicle-listing.hbs +72 -0
- package/addon/components/fleet-panel/vehicle-listing.js +149 -0
- package/addon/components/fleet-panel.hbs +12 -58
- package/addon/components/fleet-panel.js +148 -26
- package/addon/components/fleet-vehicle-listing.hbs +0 -1
- package/addon/components/fuel-report-form-panel.hbs +41 -0
- package/addon/components/fuel-report-form-panel.js +122 -0
- package/addon/components/fuel-report-panel/details.hbs +38 -0
- package/addon/components/fuel-report-panel.hbs +30 -0
- package/addon/components/fuel-report-panel.js +161 -0
- package/addon/components/issue-form-panel.hbs +85 -0
- package/addon/components/issue-form-panel.js +211 -0
- package/addon/components/issue-panel/details.hbs +48 -0
- package/addon/components/issue-panel.hbs +30 -0
- package/addon/components/issue-panel.js +160 -0
- package/addon/components/layout/fleet-ops-sidebar.hbs +2 -2
- package/addon/components/layout/fleet-ops-sidebar.js +2 -1
- package/addon/components/live-map-drawer/driver-listing.hbs +6 -0
- package/addon/components/live-map-drawer/driver-listing.js +240 -0
- package/addon/components/live-map-drawer/place-listing.hbs +6 -0
- package/addon/components/live-map-drawer/place-listing.js +204 -0
- package/addon/components/live-map-drawer/vehicle-listing.hbs +6 -0
- package/addon/components/live-map-drawer/vehicle-listing.js +216 -0
- package/addon/components/live-map-drawer.hbs +17 -0
- package/addon/components/live-map-drawer.js +104 -0
- package/addon/components/live-map.hbs +5 -1
- package/addon/components/live-map.js +109 -15
- package/addon/components/map-container/toolbar.hbs +15 -9
- package/addon/components/map-container/topbar.hbs +1 -1
- package/addon/components/modals/issue-details.hbs +38 -0
- package/addon/components/modals/issue-from.hbs +138 -0
- package/addon/components/modals/order-event.hbs +1 -1
- package/addon/components/order/schedule-card.hbs +4 -4
- package/addon/components/order/schedule-card.js +13 -6
- package/addon/components/place-form-panel.hbs +50 -0
- package/addon/components/place-form-panel.js +134 -0
- package/addon/components/place-panel/details.hbs +95 -0
- package/addon/components/place-panel.hbs +30 -0
- package/addon/components/place-panel.js +161 -0
- package/addon/components/vehicle-form-panel.hbs +35 -44
- package/addon/components/vehicle-form-panel.js +41 -0
- package/addon/components/vehicle-panel/details.hbs +8 -2
- package/addon/components/vehicle-panel.hbs +8 -6
- package/addon/components/vendor-form-panel/create-form.hbs +114 -0
- package/addon/components/vendor-form-panel/create-form.js +158 -0
- package/addon/components/vendor-form-panel/edit-form.hbs +98 -0
- package/addon/components/vendor-form-panel/edit-form.js +51 -0
- package/addon/components/vendor-form-panel.hbs +48 -0
- package/addon/components/vendor-form-panel.js +226 -0
- package/addon/components/vendor-panel/details.hbs +77 -0
- package/addon/components/vendor-panel/details.js +12 -0
- package/addon/components/vendor-panel.hbs +58 -0
- package/addon/components/vendor-panel.js +161 -0
- package/addon/controllers/management/contacts/index/details.js +55 -0
- package/addon/controllers/management/contacts/index/edit.js +111 -0
- package/addon/controllers/management/contacts/index/new.js +88 -0
- package/addon/controllers/management/contacts/index.js +23 -128
- package/addon/controllers/management/drivers/index/new.js +2 -2
- package/addon/controllers/management/drivers/index.js +18 -32
- package/addon/controllers/management/fleets/index/details.js +53 -0
- package/addon/controllers/management/fleets/index/edit.js +75 -41
- package/addon/controllers/management/fleets/index/new.js +42 -57
- package/addon/controllers/management/fleets/index.js +0 -1
- package/addon/controllers/management/fuel-reports/index/details.js +63 -0
- package/addon/controllers/management/fuel-reports/index/edit.js +111 -0
- package/addon/controllers/management/fuel-reports/index/new.js +95 -0
- package/addon/controllers/management/fuel-reports/index.js +57 -127
- package/addon/controllers/management/issues/index/details.js +54 -0
- package/addon/controllers/management/issues/index/edit.js +111 -0
- package/addon/controllers/management/issues/index/new.js +94 -0
- package/addon/controllers/management/issues/index.js +131 -26
- package/addon/controllers/management/places/index/details.js +55 -0
- package/addon/controllers/management/places/index/edit.js +111 -0
- package/addon/controllers/management/places/index/new.js +88 -0
- package/addon/controllers/management/places/index.js +21 -182
- package/addon/controllers/management/vehicles/index/new.js +2 -6
- package/addon/controllers/management/vendors/index/details.js +55 -0
- package/addon/controllers/management/vendors/index/edit.js +111 -0
- package/addon/controllers/management/vendors/index/new.js +88 -0
- package/addon/controllers/management/vendors/index.js +43 -247
- package/addon/controllers/operations/orders/index.js +29 -15
- package/addon/controllers/operations/scheduler/index.js +45 -30
- package/addon/routes/management/contacts/index/details.js +14 -0
- package/addon/routes/management/contacts/index/edit.js +10 -0
- package/addon/routes/management/contacts/index/new.js +3 -0
- package/addon/routes/management/contacts/index.js +1 -1
- package/addon/routes/management/fleets/index/details.js +1 -1
- package/addon/routes/management/fleets/index/edit.js +1 -1
- package/addon/routes/management/fleets/index.js +1 -1
- package/addon/routes/management/fuel-reports/index/details.js +14 -0
- package/addon/routes/management/fuel-reports/index/edit.js +10 -0
- package/addon/routes/management/fuel-reports/index/new.js +3 -0
- package/addon/routes/management/fuel-reports/index.js +3 -1
- package/addon/routes/management/issues/index/details.js +14 -0
- package/addon/routes/management/issues/index/edit.js +10 -0
- package/addon/routes/management/issues/index/new.js +3 -0
- package/addon/routes/management/issues/index.js +1 -1
- package/addon/routes/management/places/index/details.js +14 -0
- package/addon/routes/management/places/index/edit.js +10 -0
- package/addon/routes/management/places/index/new.js +3 -0
- package/addon/routes/management/places/index.js +6 -1
- package/addon/routes/management/vendors/index/details.js +15 -0
- package/addon/routes/management/vendors/index/edit.js +11 -0
- package/addon/routes/management/vendors/index/new.js +3 -0
- package/addon/routes/management/vendors/index.js +1 -0
- package/addon/routes/operations/scheduler/index.js +25 -0
- package/addon/routes.js +27 -7
- package/addon/services/context-panel.js +60 -0
- package/addon/styles/fleetops-engine.css +28 -0
- package/addon/templates/management/contacts/index/details.hbs +1 -0
- package/addon/templates/management/contacts/index/edit.hbs +1 -0
- package/addon/templates/management/contacts/index/new.hbs +1 -0
- package/addon/templates/management/contacts/index.hbs +22 -3
- package/addon/templates/management/drivers/index.hbs +29 -5
- package/addon/templates/management/fleets/index/details.hbs +1 -1
- package/addon/templates/management/fleets/index/edit.hbs +1 -1
- package/addon/templates/management/fleets/index/new.hbs +1 -1
- package/addon/templates/management/fuel-reports/index/details.hbs +1 -0
- package/addon/templates/management/fuel-reports/index/edit.hbs +1 -0
- package/addon/templates/management/fuel-reports/index/new.hbs +1 -0
- package/addon/templates/management/fuel-reports/index.hbs +25 -4
- package/addon/templates/management/issues/index/details.hbs +1 -0
- package/addon/templates/management/issues/index/edit.hbs +1 -0
- package/addon/templates/management/issues/index/new.hbs +1 -0
- package/addon/templates/management/issues/index.hbs +5 -3
- package/addon/templates/management/places/index/details.hbs +1 -0
- package/addon/templates/management/places/index/edit.hbs +1 -0
- package/addon/templates/management/places/index/new.hbs +1 -0
- package/addon/templates/management/vendors/index/details.hbs +1 -0
- package/addon/templates/management/vendors/index/edit.hbs +1 -0
- package/addon/templates/management/vendors/index/new.hbs +1 -0
- package/addon/templates/operations/orders/index.hbs +5 -5
- package/addon/templates/operations/scheduler/index.hbs +33 -9
- package/addon/utils/create-full-calendar-event-from-order.js +8 -0
- package/app/components/contact-form-panel.js +1 -0
- package/app/components/contact-panel/details.js +1 -0
- package/app/components/contact-panel.js +1 -0
- package/app/components/{full-calendar/draggable.js → fleet-listing-panel.js} +1 -1
- package/app/components/fleet-panel/details.js +1 -0
- package/app/components/fleet-panel/driver-listing.js +1 -0
- package/app/components/fleet-panel/vehicle-listing.js +1 -0
- package/app/components/fuel-report-form-panel.js +1 -0
- package/app/components/{full-calendar.js → fuel-report-panel.js} +1 -1
- package/app/components/issue-form-panel.js +1 -0
- package/app/components/issue-panel.js +1 -0
- package/app/components/live-map-drawer/driver-listing.js +1 -0
- package/app/components/live-map-drawer/place-listing.js +1 -0
- package/app/components/live-map-drawer/vehicle-listing.js +1 -0
- package/app/components/live-map-drawer.js +1 -0
- package/app/components/place-form-panel.js +1 -0
- package/app/components/place-panel.js +1 -0
- package/app/components/vendor-form-panel/create-form.js +1 -0
- package/app/components/vendor-form-panel/edit-form.js +1 -0
- package/app/components/vendor-form-panel.js +1 -0
- package/app/components/vendor-panel/details.js +1 -0
- package/app/components/vendor-panel.js +1 -0
- package/app/controllers/management/contacts/index/details.js +1 -0
- package/app/controllers/management/contacts/index/edit.js +1 -0
- package/app/controllers/management/contacts/index/new.js +1 -0
- package/app/controllers/management/fuel-reports/index/details.js +1 -0
- package/app/controllers/management/fuel-reports/index/edit.js +1 -0
- package/app/controllers/management/fuel-reports/index/new.js +1 -0
- package/app/controllers/management/issues/index/details.js +1 -0
- package/app/controllers/management/issues/index/edit.js +1 -0
- package/app/controllers/management/issues/index/new.js +1 -0
- package/app/controllers/management/places/index/details.js +1 -0
- package/app/controllers/management/places/index/edit.js +1 -0
- package/app/controllers/management/places/index/new.js +1 -0
- package/app/controllers/management/vendors/index/edit.js +1 -0
- package/app/controllers/management/vendors/index/new.js +1 -0
- package/app/routes/addon/routes/management/places/index/new.js +1 -0
- package/app/routes/management/contacts/index/details.js +1 -0
- package/app/routes/management/contacts/index/edit.js +1 -0
- package/app/routes/management/contacts/index/new.js +1 -0
- package/app/routes/management/fuel-reports/index/details.js +1 -0
- package/app/routes/management/fuel-reports/index/edit.js +1 -0
- package/app/routes/management/fuel-reports/index/new.js +1 -0
- package/app/routes/management/issues/index/details.js +1 -0
- package/app/routes/management/issues/index/edit.js +1 -0
- package/app/routes/management/issues/index/new.js +1 -0
- package/app/routes/management/places/index/details.js +1 -0
- package/app/routes/management/places/index/edit.js +1 -0
- package/app/routes/management/places/index/new.js +1 -0
- package/app/routes/management/vendors/index/details.js +1 -0
- package/app/routes/management/vendors/index/edit.js +1 -0
- package/app/routes/management/vendors/index/new.js +1 -0
- package/app/templates/addon/routes/management/places/index/new.js +1 -0
- package/app/templates/management/contacts/index/details.js +1 -0
- package/app/templates/management/contacts/index/edit.js +1 -0
- package/app/templates/management/contacts/index/new.js +1 -0
- package/app/templates/management/fuel-reports/index/details.js +1 -0
- package/app/templates/management/fuel-reports/index/edit.js +1 -0
- package/app/templates/management/fuel-reports/index/new.js +1 -0
- package/app/templates/management/issues/index/details.js +1 -0
- package/app/templates/management/issues/index/edit.js +1 -0
- package/app/templates/management/issues/index/new.js +1 -0
- package/app/templates/management/places/index/details.js +1 -0
- package/app/templates/management/places/index/edit.js +1 -0
- package/app/templates/management/places/index/new.js +1 -0
- package/app/templates/management/vendors/index/details.js +1 -0
- package/app/templates/management/vendors/index/edit.js +1 -0
- package/app/templates/management/vendors/index/new.js +1 -0
- package/app/utils/create-full-calendar-event-from-order.js +1 -0
- package/composer.json +1 -1
- package/config/environment.js +2 -1
- package/extension.json +1 -1
- package/package.json +5 -4
- package/server/migrations/2023_11_03_072503_refactor_issues_table_columns.php +42 -0
- package/server/migrations/2023_11_06_040645_refactor_fuel_reports_table.php +38 -0
- package/server/src/Casts/Point.php +15 -1
- package/server/src/Http/Controllers/Internal/v1/DriverController.php +33 -15
- package/server/src/Http/Filter/FleetFilter.php +7 -0
- package/server/src/Http/Filter/FuelReportFilter.php +58 -0
- package/server/src/Http/Filter/IssueFilter.php +69 -0
- package/server/src/Http/Filter/VehicleFilter.php +10 -0
- package/server/src/Http/Middleware/TransformLocationMiddleware.php +48 -0
- package/server/src/Http/Resources/v1/Driver.php +1 -0
- package/server/src/Http/Resources/v1/Fleet.php +20 -21
- package/server/src/Http/Resources/v1/FuelReport.php +37 -35
- package/server/src/Http/Resources/v1/Issue.php +77 -0
- package/server/src/Http/Resources/v1/ParentFleet.php +60 -0
- package/server/src/Http/Resources/v1/SubFleet.php +60 -0
- package/server/src/Http/Resources/v1/Vehicle.php +4 -2
- package/server/src/Integrations/Lalamove/Lalamove.php +6 -6
- package/server/src/Models/Contact.php +7 -0
- package/server/src/Models/Driver.php +1 -1
- package/server/src/Models/Fleet.php +35 -4
- package/server/src/Models/FuelReport.php +53 -3
- package/server/src/Models/Issue.php +106 -7
- package/server/src/Models/Order.php +22 -0
- package/server/src/Models/Vehicle.php +1 -1
- package/server/src/Models/VehicleDevice.php +4 -2
- package/server/src/Models/VehicleDeviceEvent.php +8 -4
- package/server/src/Notifications/OrderAssigned.php +0 -6
- package/server/src/Notifications/OrderCanceled.php +0 -6
- package/server/src/Notifications/OrderDispatchFailed.php +0 -6
- package/server/src/Notifications/OrderDispatched.php +0 -6
- package/server/src/Notifications/OrderPing.php +0 -6
- package/server/src/Notifications/OrderSplit.php +0 -6
- package/server/src/Observers/FleetObserver.php +19 -0
- package/server/src/Providers/FleetOpsServiceProvider.php +1 -0
- package/server/src/Providers/NotificationServiceProvider.php +1 -1
- package/server/src/routes.php +2 -2
- package/addon/components/full-calendar/draggable.js +0 -1
- package/addon/components/full-calendar.js +0 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import Component from '@glimmer/component';
|
|
2
|
+
import { tracked } from '@glimmer/tracking';
|
|
3
|
+
import { action } from '@ember/object';
|
|
4
|
+
import { inject as service } from '@ember/service';
|
|
5
|
+
import { isArray } from '@ember/array';
|
|
6
|
+
import contextComponentCallback from '../utils/context-component-callback';
|
|
7
|
+
import applyContextComponentArguments from '../utils/apply-context-component-arguments';
|
|
8
|
+
import LiveMapDrawerVehicleListingComponent from './live-map-drawer/vehicle-listing';
|
|
9
|
+
import LiveMapDrawerDriverListingComponent from './live-map-drawer/driver-listing';
|
|
10
|
+
import LiveMapDrawerPlaceListingComponent from './live-map-drawer/place-listing';
|
|
11
|
+
|
|
12
|
+
export default class LiveMapDrawerComponent extends Component {
|
|
13
|
+
/**
|
|
14
|
+
* Universe service for managing global data and settings.
|
|
15
|
+
*
|
|
16
|
+
* @type {Service}
|
|
17
|
+
*/
|
|
18
|
+
@service universe;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The current active tab.
|
|
22
|
+
*
|
|
23
|
+
* @type {Object}
|
|
24
|
+
* @tracked
|
|
25
|
+
*/
|
|
26
|
+
@tracked tab;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The drawer component context api.
|
|
30
|
+
*
|
|
31
|
+
* @type {Object}
|
|
32
|
+
* @tracked
|
|
33
|
+
*/
|
|
34
|
+
@tracked drawer;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Returns the array of tabs available for the drawer.
|
|
38
|
+
*
|
|
39
|
+
* @type {Array}
|
|
40
|
+
*/
|
|
41
|
+
get tabs() {
|
|
42
|
+
const registeredTabs = this.universe.getMenuItemsFromRegistry('component:live-map-drawer');
|
|
43
|
+
const defaultTabs = [
|
|
44
|
+
this.universe._createMenuItem('Vehicles', null, { icon: 'car', component: LiveMapDrawerVehicleListingComponent }),
|
|
45
|
+
this.universe._createMenuItem('Drivers', null, { icon: 'id-card', component: LiveMapDrawerDriverListingComponent }),
|
|
46
|
+
this.universe._createMenuItem('Places', null, { icon: 'building', component: LiveMapDrawerPlaceListingComponent }),
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
if (isArray(registeredTabs)) {
|
|
50
|
+
return [...defaultTabs, ...registeredTabs];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return defaultTabs;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Initializes the vehicle panel component.
|
|
58
|
+
*/
|
|
59
|
+
constructor() {
|
|
60
|
+
super(...arguments);
|
|
61
|
+
this.tab = this.getTabUsingSlug(this.args.tab);
|
|
62
|
+
applyContextComponentArguments(this);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Sets the drawer component context api.
|
|
67
|
+
*
|
|
68
|
+
* @param {Object} drawerApi
|
|
69
|
+
* @memberof LiveMapDrawerComponent
|
|
70
|
+
*/
|
|
71
|
+
@action setDrawerContext(drawerApi) {
|
|
72
|
+
this.drawer = drawerApi;
|
|
73
|
+
|
|
74
|
+
if (typeof this.args.onDrawerReady === 'function') {
|
|
75
|
+
this.args.onDrawerReady(...arguments);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Handles changing the active tab.
|
|
81
|
+
*
|
|
82
|
+
* @method
|
|
83
|
+
* @param {String} tab - The new tab to switch to.
|
|
84
|
+
* @action
|
|
85
|
+
*/
|
|
86
|
+
@action onTabChanged(tab) {
|
|
87
|
+
this.tab = this.getTabUsingSlug(tab);
|
|
88
|
+
contextComponentCallback(this, 'onTabChanged', tab);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Finds and returns a tab based on its slug.
|
|
93
|
+
*
|
|
94
|
+
* @param {String} tabSlug - The slug of the tab.
|
|
95
|
+
* @returns {Object|null} The found tab or null.
|
|
96
|
+
*/
|
|
97
|
+
getTabUsingSlug(tabSlug) {
|
|
98
|
+
if (tabSlug) {
|
|
99
|
+
return this.tabs.find(({ slug }) => slug === tabSlug);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return this.tabs[0];
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -152,6 +152,13 @@ export default class LiveMapComponent extends Component {
|
|
|
152
152
|
*/
|
|
153
153
|
@tracked isReady = false;
|
|
154
154
|
|
|
155
|
+
/**
|
|
156
|
+
* Indicates if all the data requested has completed loading.
|
|
157
|
+
* @type {boolean}
|
|
158
|
+
* @memberof LiveMapComponent
|
|
159
|
+
*/
|
|
160
|
+
@tracked isDataLoaded = false;
|
|
161
|
+
|
|
155
162
|
/**
|
|
156
163
|
* Controls for visibility.
|
|
157
164
|
* @type {Object}
|
|
@@ -188,6 +195,13 @@ export default class LiveMapComponent extends Component {
|
|
|
188
195
|
*/
|
|
189
196
|
@tracked leafletMap;
|
|
190
197
|
|
|
198
|
+
/**
|
|
199
|
+
* The Drawer component context API.
|
|
200
|
+
* @type {Object}
|
|
201
|
+
* @memberof LiveMapComponent
|
|
202
|
+
*/
|
|
203
|
+
@tracked drawer;
|
|
204
|
+
|
|
191
205
|
/**
|
|
192
206
|
* The map's zoom level.
|
|
193
207
|
* @type {number}
|
|
@@ -288,21 +302,63 @@ export default class LiveMapComponent extends Component {
|
|
|
288
302
|
// set initial coordinates
|
|
289
303
|
this.setInitialCoordinates();
|
|
290
304
|
|
|
291
|
-
// load
|
|
292
|
-
this.
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
305
|
+
// load data and complete setup
|
|
306
|
+
this.completeSetup([
|
|
307
|
+
this.fetchLiveData('routes'),
|
|
308
|
+
this.fetchLiveData('vehicles', {
|
|
309
|
+
onLoaded: (vehicles) => {
|
|
310
|
+
this.watchMovingObjects('vehicles', vehicles);
|
|
311
|
+
},
|
|
312
|
+
}),
|
|
313
|
+
this.fetchLiveData('drivers', {
|
|
314
|
+
onLoaded: (drivers) => {
|
|
315
|
+
this.watchMovingObjects('drivers', drivers);
|
|
316
|
+
},
|
|
317
|
+
}),
|
|
318
|
+
this.fetchLiveData('places'),
|
|
319
|
+
]);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Completes the setup of the component by processing an array of live data promises.
|
|
324
|
+
* It waits for all the provided promises to settle and then sets a flag indicating
|
|
325
|
+
* that data fetching is complete. It ensures that any final listening and readiness
|
|
326
|
+
* processes are invoked at the end of the setup process.
|
|
327
|
+
*
|
|
328
|
+
* @param {Promise[]} liveDataPromises - An array of promises that fetch live data.
|
|
329
|
+
* @returns {Promise} A promise that resolves when all data-fetching promises have settled.
|
|
330
|
+
*/
|
|
331
|
+
completeSetup(liveDataPromises) {
|
|
332
|
+
return allSettled(liveDataPromises)
|
|
333
|
+
.then(() => {
|
|
334
|
+
this.isDataLoaded = true;
|
|
335
|
+
})
|
|
336
|
+
.finally(() => {
|
|
337
|
+
this.listen();
|
|
338
|
+
this.ready();
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Reloads the live map data.
|
|
344
|
+
*
|
|
345
|
+
* @memberof LiveMapComponent
|
|
346
|
+
*/
|
|
347
|
+
reload() {
|
|
348
|
+
this.completeSetup([
|
|
349
|
+
this.fetchLiveData('routes'),
|
|
350
|
+
this.fetchLiveData('vehicles', {
|
|
351
|
+
onLoaded: (vehicles) => {
|
|
352
|
+
this.watchMovingObjects('vehicles', vehicles);
|
|
353
|
+
},
|
|
354
|
+
}),
|
|
355
|
+
this.fetchLiveData('drivers', {
|
|
356
|
+
onLoaded: (drivers) => {
|
|
357
|
+
this.watchMovingObjects('drivers', drivers);
|
|
358
|
+
},
|
|
359
|
+
}),
|
|
360
|
+
this.fetchLiveData('places'),
|
|
361
|
+
]);
|
|
306
362
|
}
|
|
307
363
|
|
|
308
364
|
/**
|
|
@@ -463,6 +519,11 @@ export default class LiveMapComponent extends Component {
|
|
|
463
519
|
|
|
464
520
|
return data;
|
|
465
521
|
})
|
|
522
|
+
.catch((error) => {
|
|
523
|
+
if (typeof options.onFailure === 'function') {
|
|
524
|
+
options.onFailure(error);
|
|
525
|
+
}
|
|
526
|
+
})
|
|
466
527
|
.finally(() => {
|
|
467
528
|
this.isLoading = false;
|
|
468
529
|
});
|
|
@@ -838,6 +899,20 @@ export default class LiveMapComponent extends Component {
|
|
|
838
899
|
return null;
|
|
839
900
|
}
|
|
840
901
|
|
|
902
|
+
/**
|
|
903
|
+
* Sets the drawer component context api.
|
|
904
|
+
*
|
|
905
|
+
* @param {Object} drawerApi
|
|
906
|
+
* @memberof LiveMapComponent
|
|
907
|
+
*/
|
|
908
|
+
@action setDrawerContext(drawerApi) {
|
|
909
|
+
this.drawer = drawerApi;
|
|
910
|
+
|
|
911
|
+
if (typeof this.args.onDrawerReady === 'function') {
|
|
912
|
+
this.args.onDrawerReady(...arguments);
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
|
|
841
916
|
/**
|
|
842
917
|
* Handle the 'drawstop' event.
|
|
843
918
|
*
|
|
@@ -989,6 +1064,7 @@ export default class LiveMapComponent extends Component {
|
|
|
989
1064
|
* @memberof LiveMapComponent
|
|
990
1065
|
*/
|
|
991
1066
|
@action onDriverClicked(driver) {
|
|
1067
|
+
this.contextPanel.clear();
|
|
992
1068
|
this.contextPanel.focus(driver);
|
|
993
1069
|
}
|
|
994
1070
|
|
|
@@ -1011,6 +1087,23 @@ export default class LiveMapComponent extends Component {
|
|
|
1011
1087
|
this.createVehicleContextMenu(vehicle, target);
|
|
1012
1088
|
}
|
|
1013
1089
|
|
|
1090
|
+
/**
|
|
1091
|
+
* Handle the addition of a place marker.
|
|
1092
|
+
*
|
|
1093
|
+
* @param {PlaceModel} place - The place object.
|
|
1094
|
+
* @param {Event} event - The event object associated with the addition.
|
|
1095
|
+
* @memberof LiveMapComponent
|
|
1096
|
+
*/
|
|
1097
|
+
@action onPlaceAdded(place, event) {
|
|
1098
|
+
const { target } = event;
|
|
1099
|
+
|
|
1100
|
+
set(target, 'record_id', place.id);
|
|
1101
|
+
set(target, 'record_type', 'place');
|
|
1102
|
+
|
|
1103
|
+
// set the marker instance to the vehicle model
|
|
1104
|
+
set(place, '_marker', target);
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1014
1107
|
/**
|
|
1015
1108
|
* Handle the click event of a vehicle marker.
|
|
1016
1109
|
*
|
|
@@ -1019,6 +1112,7 @@ export default class LiveMapComponent extends Component {
|
|
|
1019
1112
|
* @memberof LiveMapComponent
|
|
1020
1113
|
*/
|
|
1021
1114
|
@action onVehicleClicked(vehicle) {
|
|
1115
|
+
this.contextPanel.clear();
|
|
1022
1116
|
this.contextPanel.focus(vehicle);
|
|
1023
1117
|
}
|
|
1024
1118
|
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
<MapContainer::ToolbarContainer ...attributes>
|
|
2
2
|
<div class="next-map-container-toolbar next-map-container-toolbar-zoom-control">
|
|
3
|
-
<div>
|
|
4
|
-
<button type="button" class="toolbar-button" {{on "click" (fn this.onAction "onZoomIn")}}>
|
|
3
|
+
<div id="map-toolbar-zoom-in-button-wrapper">
|
|
4
|
+
<button type="button" id="map-toolbar-zoom-in-button" class="toolbar-button" {{on "click" (fn this.onAction "onZoomIn")}}>
|
|
5
5
|
<FaIcon @icon="plus" @prefix="fas" class="text-gray-100" />
|
|
6
6
|
</button>
|
|
7
7
|
</div>
|
|
8
|
-
<div>
|
|
8
|
+
<div id="map-toolbar-zoom-out-button-wrapper">
|
|
9
9
|
<button type="button" class="toolbar-button" {{on "click" (fn this.onAction "onZoomOut")}}>
|
|
10
|
-
<FaIcon @icon="minus" @prefix="fas" class="text-gray-100" />
|
|
10
|
+
<FaIcon @icon="minus" id="map-toolbar-zoom-out-button" @prefix="fas" class="text-gray-100" />
|
|
11
11
|
</button>
|
|
12
12
|
</div>
|
|
13
13
|
</div>
|
|
14
14
|
<div class="next-map-container-toolbar-panel next-map-container-toolbar-actions">
|
|
15
|
-
<button type="button" class="toolbar-button is-action" {{on "click" (fn this.onAction "onPressCreateOrder")}}>
|
|
15
|
+
<button type="button" id="map-toolbar-create-order-button" class="toolbar-button is-action" {{on "click" (fn this.onAction "onPressCreateOrder")}}>
|
|
16
16
|
<FaIcon @icon="paper-plane" />
|
|
17
17
|
<Attach::Tooltip @class="clean" @animation="scale" @placement="right">
|
|
18
18
|
<InputInfo @text="Create Order" @iconClass="hidden" class="py-1 px-2 bg-gray-900 -mt-1" />
|
|
19
19
|
</Attach::Tooltip>
|
|
20
20
|
</button>
|
|
21
|
-
<button type="button" class="toolbar-button" {{on "click" (fn this.onAction "onPressSearch")}}>
|
|
21
|
+
<button type="button" id="map-toolbar-search-button" class="toolbar-button" {{on "click" (fn this.onAction "onPressSearch")}}>
|
|
22
22
|
<FaIcon @icon="search" />
|
|
23
23
|
<Attach::Tooltip @class="clean" @animation="scale" @placement="right">
|
|
24
24
|
<InputInfo @text="Search" @iconClass="hidden" class="py-1 px-2 bg-gray-900 -mt-1" />
|
|
25
25
|
</Attach::Tooltip>
|
|
26
26
|
</button>
|
|
27
|
-
<button type="button" class="toolbar-button relative" {{on "click" (fn this.onAction "onPressViewOrders")}}>
|
|
27
|
+
<button type="button" id="map-toolbar-view-orders-button" class="toolbar-button relative" {{on "click" (fn this.onAction "onPressViewOrders")}}>
|
|
28
28
|
<div class="active-orders-count absolute top-0 right-0 -mr-2.5 -mt-1">
|
|
29
29
|
<div class="relative flex w-5 h-5 rounded-full">
|
|
30
30
|
<div class="absolute inset-0 rounded-full w-5 h-5 text-xs bg-blue-500 opacity-75 {{if @activeOrdersCount 'animate-ping'}}"></div>
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
<InputInfo @text="View Orders" @iconClass="hidden" class="py-1 px-2 bg-gray-900 -mt-1" />
|
|
37
37
|
</Attach::Tooltip>
|
|
38
38
|
</button>
|
|
39
|
-
<BasicDropdown @horizontalPosition="right" @calculatePosition={{this.calculatePosition}} @renderInPlace={{true}} as |dd|>
|
|
39
|
+
<BasicDropdown id="map-toolbar-service-areas-button" @horizontalPosition="right" @calculatePosition={{this.calculatePosition}} @renderInPlace={{true}} as |dd|>
|
|
40
40
|
<dd.Trigger class="toolbar-button">
|
|
41
41
|
<FaIcon @icon="map-marked-alt" />
|
|
42
42
|
<Attach::Tooltip @class="clean" @animation="scale" @placement="right">
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
<MapContainer::Toolbar::ZonesPanel @dd={{dd}} @liveMap={{@liveMap}} @map={{@map}} @onPressCreateServiceArea={{@onPressCreateServiceArea}} />
|
|
48
48
|
</dd.Content>
|
|
49
49
|
</BasicDropdown>
|
|
50
|
-
<BasicDropdown @horizontalPosition="right" @calculatePosition={{this.calculatePosition}} @renderInPlace={{true}} as |dd|>
|
|
50
|
+
<BasicDropdown id="map-toolbar-visibility-controls-button" @horizontalPosition="right" @calculatePosition={{this.calculatePosition}} @renderInPlace={{true}} as |dd|>
|
|
51
51
|
<dd.Trigger class="toolbar-button">
|
|
52
52
|
<FaIcon @icon="eye" />
|
|
53
53
|
<Attach::Tooltip @class="clean" @animation="scale" @placement="right">
|
|
@@ -58,5 +58,11 @@
|
|
|
58
58
|
<MapContainer::Toolbar::VisibilityControlPanel @dd={{dd}} @liveMap={{@liveMap}} @map={{@map}} />
|
|
59
59
|
</dd.Content>
|
|
60
60
|
</BasicDropdown>
|
|
61
|
+
<button type="button" id="map-toolbar-live-map-drawer-button" class="toolbar-button is-action mb-0i" {{on "click" (fn this.onAction "onPressLiveMapDrawerToggle")}}>
|
|
62
|
+
<FaIcon @icon="binoculars" />
|
|
63
|
+
<Attach::Tooltip @class="clean" @animation="scale" @placement="right">
|
|
64
|
+
<InputInfo @text="Scope" @iconClass="hidden" class="py-1 px-2 bg-gray-900 -mt-1" />
|
|
65
|
+
</Attach::Tooltip>
|
|
66
|
+
</button>
|
|
61
67
|
</div>
|
|
62
68
|
</MapContainer::ToolbarContainer>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<div class="next-map-container-topbar" ...attributes>{{yield}}</div>
|
|
1
|
+
<div id="map-topbar-container" class="next-map-container-topbar" ...attributes>{{yield}}</div>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
|
|
2
|
+
<div class="modal-body-container">
|
|
3
|
+
<div class="grid grid-cols-2 flex-col md:flex-row gap-2 mb-6">
|
|
4
|
+
<div class="field-info-container">
|
|
5
|
+
<div class="field-name">Reporter</div>
|
|
6
|
+
<div class="field-value">{{n-a @issue.reporter}}</div>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="field-info-container">
|
|
9
|
+
<div class="field-name">Assigned To</div>
|
|
10
|
+
<div class="field-value">{{n-a @issue.assignee}}</div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="field-info-container">
|
|
13
|
+
<div class="field-name">Driver</div>
|
|
14
|
+
<div class="field-value">{{n-a @issue.driver}}</div>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="field-info-container">
|
|
17
|
+
<div class="field-name">Vehicle</div>
|
|
18
|
+
<div class="field-value">{{n-a @issue.vehicle.displayName}}</div>
|
|
19
|
+
</div>
|
|
20
|
+
<div class="field-info-container">
|
|
21
|
+
<div class="field-name">Issue Type</div>
|
|
22
|
+
<div class="field-value">{{n-a @issue.type}}</div>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="field-info-container">
|
|
25
|
+
<div class="field-name">Issue Category</div>
|
|
26
|
+
<div class="field-value">{{n-a @issue.category}}</div>
|
|
27
|
+
</div>
|
|
28
|
+
<div class="field-info-container">
|
|
29
|
+
<div class="field-name">Date Created</div>
|
|
30
|
+
<div class="field-value">{{@issue.createdAtShort}}</div>
|
|
31
|
+
</div>
|
|
32
|
+
<div class="field-info-container">
|
|
33
|
+
<div class="field-name">Coordinates</div>
|
|
34
|
+
<div class="field-value">{{point-coordinates @issue.location}}</div>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
</Modal::Default>
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
<Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
|
|
2
|
+
<div class="modal-body-container">
|
|
3
|
+
<div class="grid grid-cols-1 text-xs dark:text-gray-100">
|
|
4
|
+
<InputGroup @name="Reported By">
|
|
5
|
+
<ModelSelect
|
|
6
|
+
@modelName="user"
|
|
7
|
+
@selectedModel={{this.issue.reporter}}
|
|
8
|
+
@placeholder="Select Reporter"
|
|
9
|
+
@triggerClass="form-select form-input"
|
|
10
|
+
@infiniteScroll={{false}}
|
|
11
|
+
@renderInPlace={{true}}
|
|
12
|
+
@onChange={{fn (mut this.issue.reporter)}}
|
|
13
|
+
as |model|
|
|
14
|
+
>
|
|
15
|
+
{{model.name}}
|
|
16
|
+
</ModelSelect>
|
|
17
|
+
</InputGroup>
|
|
18
|
+
|
|
19
|
+
<InputGroup @name="Assigned To">
|
|
20
|
+
<ModelSelect
|
|
21
|
+
@modelName="user"
|
|
22
|
+
@selectedModel={{this.issue.assignee}}
|
|
23
|
+
@placeholder="Select Assignee"
|
|
24
|
+
@triggerClass="form-select form-input"
|
|
25
|
+
@infiniteScroll={{false}}
|
|
26
|
+
@renderInPlace={{true}}
|
|
27
|
+
@onChange={{fn (mut this.issue.assignee)}}
|
|
28
|
+
as |model|
|
|
29
|
+
>
|
|
30
|
+
{{model.name}}
|
|
31
|
+
</ModelSelect>
|
|
32
|
+
</InputGroup>
|
|
33
|
+
|
|
34
|
+
<InputGroup @name="Driver">
|
|
35
|
+
<ModelSelect
|
|
36
|
+
@modelName="driver"
|
|
37
|
+
@selectedModel={{this.issue.driver}}
|
|
38
|
+
@placeholder="Select Driver"
|
|
39
|
+
@triggerClass="form-select form-input"
|
|
40
|
+
@infiniteScroll={{false}}
|
|
41
|
+
@renderInPlace={{true}}
|
|
42
|
+
@onChange={{fn (mut this.issue.driver)}}
|
|
43
|
+
as |model|
|
|
44
|
+
>
|
|
45
|
+
{{model.name}}
|
|
46
|
+
</ModelSelect>
|
|
47
|
+
</InputGroup>
|
|
48
|
+
|
|
49
|
+
<InputGroup @name="Vehicle">
|
|
50
|
+
<ModelSelect
|
|
51
|
+
@modelName="vehicle"
|
|
52
|
+
@selectedModel={{this.issue.vehicle}}
|
|
53
|
+
@placeholder="Select Vehicle"
|
|
54
|
+
@triggerClass="form-select form-input"
|
|
55
|
+
@infiniteScroll={{false}}
|
|
56
|
+
@renderInPlace={{true}}
|
|
57
|
+
@onChange={{fn (mut this.issue.vehicle)}}
|
|
58
|
+
as |model|
|
|
59
|
+
>
|
|
60
|
+
{{model.displayName}}
|
|
61
|
+
</ModelSelect>
|
|
62
|
+
</InputGroup>
|
|
63
|
+
|
|
64
|
+
<InputGroup @name="Issue Type">
|
|
65
|
+
<div class="fleetbase-model-select fleetbase-power-select ember-model-select">
|
|
66
|
+
<PowerSelect
|
|
67
|
+
@options={{this.issueTypes}}
|
|
68
|
+
@selected={{this.issue.type}}
|
|
69
|
+
@onChange={{this.onSelectIssueType}}
|
|
70
|
+
@placeholder="Select issue type"
|
|
71
|
+
@triggerClass="form-select form-input"
|
|
72
|
+
as |type|
|
|
73
|
+
>
|
|
74
|
+
{{smart-humanize type}}
|
|
75
|
+
</PowerSelect>
|
|
76
|
+
</div>
|
|
77
|
+
</InputGroup>
|
|
78
|
+
|
|
79
|
+
<InputGroup @name="Issue Category">
|
|
80
|
+
<div class="fleetbase-model-select fleetbase-power-select ember-model-select">
|
|
81
|
+
<PowerSelect
|
|
82
|
+
@options={{this.issueCategories}}
|
|
83
|
+
@selected={{this.issue.category}}
|
|
84
|
+
@onChange={{fn (mut this.issue.category)}}
|
|
85
|
+
@placeholder="Select issue category"
|
|
86
|
+
@triggerClass="form-select form-input"
|
|
87
|
+
@disabled={{not this.issueCategories}}
|
|
88
|
+
as |category|
|
|
89
|
+
>
|
|
90
|
+
{{smart-humanize category}}
|
|
91
|
+
</PowerSelect>
|
|
92
|
+
</div>
|
|
93
|
+
</InputGroup>
|
|
94
|
+
|
|
95
|
+
<InputGroup @name="Issue Report">
|
|
96
|
+
<Textarea @value={{this.issue.report}} aria-label="Issue Report" class="w-full form-input" placeholder="Issue Report" rows={{5}} />
|
|
97
|
+
</InputGroup>
|
|
98
|
+
|
|
99
|
+
<InputGroup @name="Issue Tags">
|
|
100
|
+
<TagInput
|
|
101
|
+
class="form-input"
|
|
102
|
+
@placeholder="Add tags"
|
|
103
|
+
@allowSpacesInTags={{true}}
|
|
104
|
+
@tags={{this.issue.tags}}
|
|
105
|
+
@addTag={{this.addTag}}
|
|
106
|
+
@removeTagAtIndex={{this.removeTag}}
|
|
107
|
+
as |tag|
|
|
108
|
+
>
|
|
109
|
+
{{tag}}
|
|
110
|
+
</TagInput>
|
|
111
|
+
</InputGroup>
|
|
112
|
+
|
|
113
|
+
<InputGroup @name="Priority">
|
|
114
|
+
<Input @value={{this.issue.priority}} @type="text" class="w-full form-input" placeholder="Priority" />
|
|
115
|
+
</InputGroup>
|
|
116
|
+
|
|
117
|
+
<InputGroup @name="Status">
|
|
118
|
+
<div class="fleetbase-model-select fleetbase-power-select ember-model-select">
|
|
119
|
+
<PowerSelect
|
|
120
|
+
@options={{this.issueStatusOptions}}
|
|
121
|
+
@selected={{this.issue.status}}
|
|
122
|
+
@onChange={{fn (mut this.issue.status)}}
|
|
123
|
+
@placeholder="Select issue status"
|
|
124
|
+
@triggerClass="form-select form-input"
|
|
125
|
+
as |status|
|
|
126
|
+
>
|
|
127
|
+
{{smart-humanize status}}
|
|
128
|
+
</PowerSelect>
|
|
129
|
+
</div>
|
|
130
|
+
</InputGroup>
|
|
131
|
+
|
|
132
|
+
<InputGroup @name="Coordinates">
|
|
133
|
+
<CoordinatesInput @value={{this.issue.location}} @onChange={{fn (mut this.issue.location)}} />
|
|
134
|
+
</InputGroup>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
{{yield}}
|
|
138
|
+
</Modal::Default>
|
|
@@ -13,6 +13,6 @@
|
|
|
13
13
|
</div>
|
|
14
14
|
</div>
|
|
15
15
|
|
|
16
|
-
<ScheduleCard class="border border-night-905" @itemClass="bg-green-600" @contentClass="bg-transparent-i py-3" @titleClass="hidden-i" @order={{@options.order}} />
|
|
16
|
+
<Order::ScheduleCard class="border border-night-905" @itemClass="bg-green-600" @contentClass="bg-transparent-i py-3" @titleClass="hidden-i" @order={{@options.order}} />
|
|
17
17
|
</div>
|
|
18
18
|
</Modal::Default>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<div class="order-schedule-card border border-gray-200 dark:border-gray-700"
|
|
1
|
+
<div class="order-schedule-card border border-gray-200 dark:border-gray-700" ...attributes>
|
|
2
2
|
<a href="javascript:;" class="{{@titleClass}} card-title border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900" {{on "click" (fn this.onTitleClick @order)}}>
|
|
3
3
|
<span>{{@order.public_id}}</span>
|
|
4
4
|
<div>
|
|
@@ -11,21 +11,21 @@
|
|
|
11
11
|
<FaIcon @icon="calendar" class="mr-2" />
|
|
12
12
|
<span class="font-semibold">Date scheduled</span>
|
|
13
13
|
</div>
|
|
14
|
-
<span>{{@order.scheduledAt}}</span>
|
|
14
|
+
<span class={{unless @order.scheduled_at "dark:text-gray-600 text-gray-400"}}>{{n-a @order.scheduledAt "Not Scheduled"}}</span>
|
|
15
15
|
</div>
|
|
16
16
|
<div class="flex items-center justify-between">
|
|
17
17
|
<div>
|
|
18
18
|
<FaIcon @icon="calendar" class="mr-2" />
|
|
19
19
|
<span class="font-semibold">Date created</span>
|
|
20
20
|
</div>
|
|
21
|
-
<span>{{@order.createdAtWithTime}}</span>
|
|
21
|
+
<span>{{n-a @order.createdAtWithTime}}</span>
|
|
22
22
|
</div>
|
|
23
23
|
<div class="flex items-center justify-between">
|
|
24
24
|
<div>
|
|
25
25
|
<FaIcon @icon="calendar" class="mr-2" />
|
|
26
26
|
<span class="font-semibold">Driver Assigned</span>
|
|
27
27
|
</div>
|
|
28
|
-
<span>{{@order.driver_assigned.name "
|
|
28
|
+
<span class={{unless @order.driver_assigned "dark:text-gray-600 text-gray-400"}}>{{n-a @order.driver_assigned.name "No Driver Assigned"}}</span>
|
|
29
29
|
</div>
|
|
30
30
|
<div class="z-20 relative">
|
|
31
31
|
<RouteList @order={{@order}} />
|
|
@@ -2,16 +2,23 @@ import Component from '@glimmer/component';
|
|
|
2
2
|
import { action } from '@ember/object';
|
|
3
3
|
|
|
4
4
|
export default class OrderScheduleCardComponent extends Component {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
constructor(owner, { order }) {
|
|
6
|
+
super(...arguments);
|
|
7
7
|
|
|
8
|
-
order
|
|
9
|
-
|
|
8
|
+
if (order && typeof order.loadDriver === 'function') {
|
|
9
|
+
order.loadDriver();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (order && typeof order.loadPayload === 'function') {
|
|
13
|
+
order.loadPayload();
|
|
14
|
+
}
|
|
10
15
|
}
|
|
11
16
|
|
|
12
17
|
@action onTitleClick(order) {
|
|
13
|
-
|
|
14
|
-
|
|
18
|
+
const { onTitleClick } = this.args;
|
|
19
|
+
|
|
20
|
+
if (typeof onTitleClick === 'function') {
|
|
21
|
+
onTitleClick(order);
|
|
15
22
|
}
|
|
16
23
|
}
|
|
17
24
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<Overlay
|
|
2
|
+
@onLoad={{this.setOverlayContext}}
|
|
3
|
+
@position="right"
|
|
4
|
+
@noBackdrop={{true}}
|
|
5
|
+
@fullHeight={{true}}
|
|
6
|
+
@isResizeble={{or this.isResizable @isResizable}}
|
|
7
|
+
@width={{or this.width @width "600px"}}
|
|
8
|
+
>
|
|
9
|
+
<Overlay::Header @title={{if this.place.public_id this.place.name "New Place"}} @status={{this.place.public_id}} @hideStatusDot={{true}} @createdAt={{this.place.createdAt}} @titleWrapperClass="leading-5">
|
|
10
|
+
<div class="flex flex-1 justify-end">
|
|
11
|
+
<Button @icon={{if this.place.id "save" "check"}} @type="primary" @text={{if this.place.id "Save Place" "Create Place"}} @onClick={{this.save}} @wrapperClass="mr-2" />
|
|
12
|
+
<Button @type="default" @icon="times" @helpText={{if this.place.id "Cancel edit place" "Cancel new place"}} @onClick={{this.onPressCancel}} />
|
|
13
|
+
</div>
|
|
14
|
+
</Overlay::Header>
|
|
15
|
+
|
|
16
|
+
<Overlay::Body @wrapperClass="new-service-rate-overlay-body px-4 space-y-4 pt-4" @increaseInnerBodyHeightBy={{1000}}>
|
|
17
|
+
<div class="grid grid-cols-3 gap-1 text-xs dark:text-gray-100">
|
|
18
|
+
<InputGroup @name="Name" @autocomplete="nope" @value={{this.place.name}} @wrapperClass="col-span-3" />
|
|
19
|
+
<InputGroup @name="Street 1" @value={{this.place.street1}} @wrapperClass="col-span-3">
|
|
20
|
+
<AutocompleteInput @value={{this.place.street1}} @fetchUrl="places/lookup" @onSelect={{this.autocomplete}} placeholder="Street 1" class="w-full" as |result|>
|
|
21
|
+
{{result.address}}
|
|
22
|
+
</AutocompleteInput>
|
|
23
|
+
</InputGroup>
|
|
24
|
+
<InputGroup @name="Street 2" @autocomplete="nope" @value={{this.place.street2}} @wrapperClass="col-span-3" />
|
|
25
|
+
<InputGroup @name="Neighborhood" @autocomplete="nope" @value={{this.place.neighborhood}} />
|
|
26
|
+
<InputGroup @name="Building" @autocomplete="nope" @value={{this.place.building}} />
|
|
27
|
+
<InputGroup @name="Security Access Code" @autocomplete="nope" @value={{this.place.security_access_code}} />
|
|
28
|
+
<InputGroup @name="Postal Code" @autocomplete="nope" @value={{this.place.postal_code}} />
|
|
29
|
+
<InputGroup @name="City" @autocomplete="nope" @value={{this.place.city}} />
|
|
30
|
+
<InputGroup @name="State" @autocomplete="nope" @value={{this.place.province}} />
|
|
31
|
+
<InputGroup @name="Country" @wrapperClass="col-span-2">
|
|
32
|
+
<CountrySelect class="w-full form-input form-select form-datalist" @value={{this.place.country}} @onChange={{this.place.country}} placeholder="Country" />
|
|
33
|
+
</InputGroup>
|
|
34
|
+
<InputGroup @name="Coordinates" @wrapperClass="col-span-2">
|
|
35
|
+
<CoordinatesInput
|
|
36
|
+
@value={{this.place.location}}
|
|
37
|
+
@onChange={{this.updatePlaceCoordinates}}
|
|
38
|
+
@onGeocode={{this.autocomplete}}
|
|
39
|
+
@onUpdatedFromMap={{this.reverseGeocode}}
|
|
40
|
+
@onInit={{this.setCoordinatesInput}}
|
|
41
|
+
/>
|
|
42
|
+
</InputGroup>
|
|
43
|
+
<div class="col-span-1"></div>
|
|
44
|
+
<InputGroup @name="Phone">
|
|
45
|
+
<PhoneInput @value={{this.place.phone}} @autocomplete="nope" @onInput={{this.phone}} class="form-input w-full" />
|
|
46
|
+
</InputGroup>
|
|
47
|
+
<InputGroup @name="Email" @autocomplete="nope" @value={{this.place.email}} />
|
|
48
|
+
</div>
|
|
49
|
+
</Overlay::Body>
|
|
50
|
+
</Overlay>
|