@fleetbase/fleetops-engine 0.3.4 → 0.3.6

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 (166) hide show
  1. package/README.md +4 -4
  2. package/addon/components/admin/navigator-app.hbs +5 -0
  3. package/addon/components/admin/navigator-app.js +27 -0
  4. package/addon/components/driver-form-panel.js +13 -19
  5. package/addon/components/fleet-listing-panel.hbs +2 -2
  6. package/addon/components/layout/fleet-ops-sidebar/fleet-listing.hbs +1 -0
  7. package/addon/components/layout/fleet-ops-sidebar/fleet-listing.js +3 -0
  8. package/addon/components/layout/fleet-ops-sidebar.hbs +4 -4
  9. package/addon/components/layout/fleet-ops-sidebar.js +2 -0
  10. package/addon/components/leaflet-draw-control.js +2 -3
  11. package/addon/components/live-map.js +7 -4
  12. package/addon/components/modals/driver-assign-order.hbs +2 -2
  13. package/addon/components/modals/order-import.hbs +5 -5
  14. package/addon/components/modals/order-new-activity.hbs +1 -1
  15. package/addon/components/order-config/entities-editor.js +3 -5
  16. package/addon/components/route-list.hbs +2 -2
  17. package/addon/components/vendor-form-panel.js +1 -1
  18. package/addon/controllers/application.js +2 -2
  19. package/addon/controllers/base-controller.js +31 -0
  20. package/addon/controllers/management/contacts/index/details.js +2 -2
  21. package/addon/controllers/management/contacts/index/edit.js +2 -2
  22. package/addon/controllers/management/contacts/index/new.js +2 -2
  23. package/addon/controllers/management/contacts/index.js +9 -2
  24. package/addon/controllers/management/drivers/index/details.js +2 -2
  25. package/addon/controllers/management/drivers/index/edit.js +28 -2
  26. package/addon/controllers/management/drivers/index/new.js +2 -2
  27. package/addon/controllers/management/drivers/index.js +18 -24
  28. package/addon/controllers/management/fleets/index/details.js +2 -2
  29. package/addon/controllers/management/fleets/index/edit.js +2 -2
  30. package/addon/controllers/management/fleets/index/new.js +2 -2
  31. package/addon/controllers/management/fleets/index.js +16 -9
  32. package/addon/controllers/management/fuel-reports/index/details.js +2 -2
  33. package/addon/controllers/management/fuel-reports/index/edit.js +2 -2
  34. package/addon/controllers/management/fuel-reports/index/new.js +2 -2
  35. package/addon/controllers/management/fuel-reports/index.js +9 -2
  36. package/addon/controllers/management/issues/index/details.js +2 -2
  37. package/addon/controllers/management/issues/index/edit.js +2 -2
  38. package/addon/controllers/management/issues/index/new.js +2 -2
  39. package/addon/controllers/management/issues/index.js +9 -9
  40. package/addon/controllers/management/places/index/details.js +2 -2
  41. package/addon/controllers/management/places/index/edit.js +2 -2
  42. package/addon/controllers/management/places/index/new.js +2 -2
  43. package/addon/controllers/management/places/index.js +8 -2
  44. package/addon/controllers/management/vehicles/index/details.js +2 -2
  45. package/addon/controllers/management/vehicles/index/edit.js +2 -2
  46. package/addon/controllers/management/vehicles/index/new.js +2 -2
  47. package/addon/controllers/management/vehicles/index.js +24 -32
  48. package/addon/controllers/management/vendors/index/details.js +2 -2
  49. package/addon/controllers/management/vendors/index/edit.js +2 -2
  50. package/addon/controllers/management/vendors/index/new.js +2 -2
  51. package/addon/controllers/management/vendors/index.js +9 -8
  52. package/addon/controllers/management.js +2 -2
  53. package/addon/controllers/operations/orders/index/config/types.js +2 -2
  54. package/addon/controllers/operations/orders/index/config.js +2 -2
  55. package/addon/controllers/operations/orders/index/new.js +64 -44
  56. package/addon/controllers/operations/orders/index/view.js +11 -4
  57. package/addon/controllers/operations/orders/index.js +2 -2
  58. package/addon/controllers/operations/scheduler/index.js +2 -2
  59. package/addon/controllers/operations/service-rates/index/edit.js +12 -18
  60. package/addon/controllers/operations/service-rates/index/new.js +16 -22
  61. package/addon/controllers/operations/service-rates/index.js +9 -2
  62. package/addon/engine.js +6 -0
  63. package/addon/helpers/waypoint-label.js +6 -1
  64. package/addon/routes/application.js +4 -15
  65. package/addon/routes/management/contacts/index.js +9 -5
  66. package/addon/routes/management/drivers/index.js +7 -3
  67. package/addon/routes/management/fleets/index.js +9 -5
  68. package/addon/routes/management/fuel-reports/index.js +9 -5
  69. package/addon/routes/management/issues/index.js +9 -5
  70. package/addon/routes/management/places/index.js +9 -5
  71. package/addon/routes/management/vehicles/index/details.js +2 -2
  72. package/addon/routes/management/vehicles/index.js +11 -2
  73. package/addon/routes/management/vendors/index.js +9 -6
  74. package/addon/routes/operations/orders/index/view.js +6 -2
  75. package/addon/routes/operations/orders/index.js +7 -1
  76. package/addon/routes/operations/orders.js +0 -1
  77. package/addon/routes/operations/service-rates/index.js +9 -27
  78. package/addon/routes/operations/service-rates.js +1 -8
  79. package/addon/styles/fleetops-engine.css +14 -7
  80. package/addon/templates/management/contacts/index.hbs +1 -0
  81. package/addon/templates/management/drivers/index.hbs +2 -1
  82. package/addon/templates/management/fleets/index.hbs +23 -3
  83. package/addon/templates/management/fuel-reports/index.hbs +1 -0
  84. package/addon/templates/management/issues/index.hbs +22 -2
  85. package/addon/templates/management/places/index.hbs +9 -1
  86. package/addon/templates/management/vehicles/index.hbs +22 -2
  87. package/addon/templates/management/vendors/index.hbs +22 -2
  88. package/addon/templates/operations/orders/index/new.hbs +7 -7
  89. package/addon/templates/operations/orders/index/view.hbs +17 -16
  90. package/addon/templates/operations/service-rates/index.hbs +11 -3
  91. package/addon/utils/waypoint-label.js +3 -0
  92. package/app/components/layout/fleet-ops-sidebar/fleet-listing.js +1 -0
  93. package/app/controllers/{operations/zones/index.js → base-controller.js} +1 -1
  94. package/app/utils/waypoint-label.js +1 -0
  95. package/composer.json +1 -1
  96. package/config/environment.js +11 -1
  97. package/extension.json +1 -1
  98. package/index.js +1 -0
  99. package/package.json +47 -41
  100. package/server/migrations/2023_04_27_053456_create_contacts_table.php +2 -2
  101. package/server/migrations/2023_04_27_053456_create_drivers_table.php +5 -5
  102. package/server/migrations/2023_04_27_053456_create_entities_table.php +5 -5
  103. package/server/migrations/2023_04_27_053456_create_fleet_drivers_table.php +2 -2
  104. package/server/migrations/2023_04_27_053456_create_fleets_table.php +3 -3
  105. package/server/migrations/2023_04_27_053456_create_fuel_reports_table.php +3 -3
  106. package/server/migrations/2023_04_27_053456_create_issues_table.php +4 -4
  107. package/server/migrations/2023_04_27_053456_create_orders_table.php +8 -8
  108. package/server/migrations/2023_04_27_053456_create_payloads_table.php +5 -5
  109. package/server/migrations/2023_04_27_053456_create_places_table.php +1 -1
  110. package/server/migrations/2023_04_27_053456_create_purchase_rates_table.php +4 -4
  111. package/server/migrations/2023_04_27_053456_create_service_areas_table.php +2 -2
  112. package/server/migrations/2023_04_27_053456_create_service_quote_items_table.php +1 -1
  113. package/server/migrations/2023_04_27_053456_create_service_quotes_table.php +3 -3
  114. package/server/migrations/2023_04_27_053456_create_service_rate_fees_table.php +1 -1
  115. package/server/migrations/2023_04_27_053456_create_service_rate_parcel_fees_table.php +1 -1
  116. package/server/migrations/2023_04_27_053456_create_service_rates_table.php +3 -3
  117. package/server/migrations/2023_04_27_053456_create_tracking_numbers_table.php +3 -3
  118. package/server/migrations/2023_04_27_053456_create_tracking_statuses_table.php +2 -2
  119. package/server/migrations/2023_04_27_053456_create_vehicles_table.php +3 -3
  120. package/server/migrations/2023_04_27_053456_create_vendors_table.php +5 -5
  121. package/server/migrations/2023_04_27_053456_create_waypoints_table.php +4 -4
  122. package/server/migrations/2023_04_27_053456_create_zones_table.php +2 -2
  123. package/server/migrations/2023_11_17_053001_add_category_uuid_to_entities_table.php +33 -0
  124. package/server/migrations/2023_11_28_074244_add_supplier_uuid_column_to_entities_table.php +33 -0
  125. package/server/migrations/2023_12_14_100209_add_meta_column_on_driver_table.php +30 -0
  126. package/server/src/Http/Controllers/Api/v1/DriverController.php +7 -4
  127. package/server/src/Http/Controllers/Api/v1/EntityController.php +2 -0
  128. package/server/src/Http/Controllers/Api/v1/OrderController.php +118 -42
  129. package/server/src/Http/Controllers/Api/v1/PayloadController.php +41 -43
  130. package/server/src/Http/Controllers/Api/v1/TrackingStatusController.php +43 -2
  131. package/server/src/Http/Controllers/Internal/v1/DriverController.php +0 -1
  132. package/server/src/Http/Controllers/Internal/v1/MorphController.php +48 -16
  133. package/server/src/Http/Controllers/Internal/v1/NavigatorController.php +41 -0
  134. package/server/src/Http/Controllers/Internal/v1/OrderController.php +3 -2
  135. package/server/src/Http/Controllers/Internal/v1/PlaceController.php +2 -2
  136. package/server/src/Http/Requests/CreateDriverRequest.php +2 -0
  137. package/server/src/Http/Requests/CreateOrderRequest.php +18 -4
  138. package/server/src/Http/Requests/CreatePayloadRequest.php +23 -7
  139. package/server/src/Http/Requests/CreatePlaceRequest.php +9 -5
  140. package/server/src/Http/Requests/CreateTrackingStatusRequest.php +69 -12
  141. package/server/src/Http/Requests/CreateVehicleRequest.php +5 -3
  142. package/server/src/Http/Resources/v1/Entity.php +3 -0
  143. package/server/src/Http/Resources/v1/Fleet.php +19 -17
  144. package/server/src/Http/Resources/v1/Order.php +3 -2
  145. package/server/src/Models/Driver.php +21 -2
  146. package/server/src/Models/Entity.php +18 -23
  147. package/server/src/Models/Order.php +2 -2
  148. package/server/src/Models/Payload.php +27 -9
  149. package/server/src/Models/Place.php +28 -5
  150. package/server/src/Models/TrackingStatus.php +9 -3
  151. package/server/src/Models/Vehicle.php +4 -2
  152. package/server/src/Models/VehicleDevice.php +28 -0
  153. package/server/src/Models/VehicleDeviceEvent.php +1 -1
  154. package/server/src/Models/Vendor.php +16 -0
  155. package/server/src/Observers/DriverObserver.php +1 -1
  156. package/server/src/routes.php +8 -0
  157. package/tsconfig.declarations.json +10 -0
  158. package/addon/components/file-icon.js +0 -1
  159. package/addon/controllers/operations/zones/index.js +0 -475
  160. package/addon/routes/operations/dispatch.js +0 -3
  161. package/addon/routes/operations/zones/index.js +0 -25
  162. package/addon/routes/operations/zones.js +0 -7
  163. package/addon/templates/operations/dispatch.hbs +0 -1
  164. package/addon/templates/operations/zones/index.hbs +0 -72
  165. package/addon/templates/operations/zones.hbs +0 -1
  166. package/app/components/file-icon.js +0 -1
@@ -1,14 +1,11 @@
1
1
  import Route from '@ember/routing/route';
2
2
  import { inject as service } from '@ember/service';
3
+ import { action, set } from '@ember/object';
4
+ import isNestedRouteTransition from '@fleetbase/ember-core/utils/is-nested-route-transition';
3
5
 
4
6
  export default class ManagementPlacesIndexRoute extends Route {
5
7
  @service store;
6
8
 
7
- /**
8
- * Queryable parameters
9
- *
10
- * @var {Object}
11
- */
12
9
  queryParams = {
13
10
  page: { refreshModel: true },
14
11
  limit: { refreshModel: true },
@@ -27,6 +24,13 @@ export default class ManagementPlacesIndexRoute extends Route {
27
24
  updatedAt: { refreshModel: true },
28
25
  };
29
26
 
27
+ @action willTransition(transition) {
28
+ if (isNestedRouteTransition(transition)) {
29
+ set(this.queryParams, 'page.refreshModel', false);
30
+ set(this.queryParams, 'sort.refreshModel', false);
31
+ }
32
+ }
33
+
30
34
  model(params) {
31
35
  return this.store.query('place', { ...params });
32
36
  }
@@ -8,8 +8,8 @@ export default class ManagementVehiclesIndexDetailsRoute extends Route {
8
8
  view: { refreshModel: false },
9
9
  };
10
10
 
11
- model({ public_id }) {
12
- return this.store.findRecord('vehicle', public_id);
11
+ model(params) {
12
+ return this.store.findRecord('vehicle', params.public_id);
13
13
  }
14
14
 
15
15
  afterModel(model) {
@@ -1,5 +1,7 @@
1
1
  import Route from '@ember/routing/route';
2
2
  import { inject as service } from '@ember/service';
3
+ import { action, set } from '@ember/object';
4
+ import isNestedRouteTransition from '@fleetbase/ember-core/utils/is-nested-route-transition';
3
5
 
4
6
  export default class ManagementVehiclesIndexRoute extends Route {
5
7
  @service store;
@@ -14,10 +16,10 @@ export default class ManagementVehiclesIndexRoute extends Route {
14
16
  public_id: { refreshModel: true },
15
17
  vin: { refreshModel: true },
16
18
  plate_number: { refreshModel: true },
17
- model: { refreshModel: true },
19
+ vehicle_make: { refreshModel: true },
20
+ vehicle_model: { refreshModel: true },
18
21
  year: { refreshModel: true },
19
22
  country: { refreshModel: true },
20
- make: { refreshModel: true },
21
23
  fleet: { refreshModel: true },
22
24
  vendor: { refreshModel: true },
23
25
  driver: { refreshModel: true },
@@ -29,6 +31,13 @@ export default class ManagementVehiclesIndexRoute extends Route {
29
31
  'within[where]': { refreshModel: true, replace: true },
30
32
  };
31
33
 
34
+ @action willTransition(transition) {
35
+ if (isNestedRouteTransition(transition)) {
36
+ set(this.queryParams, 'page.refreshModel', false);
37
+ set(this.queryParams, 'sort.refreshModel', false);
38
+ }
39
+ }
40
+
32
41
  model(params) {
33
42
  return this.store.query('vehicle', { ...params });
34
43
  }
@@ -1,14 +1,11 @@
1
1
  import Route from '@ember/routing/route';
2
2
  import { inject as service } from '@ember/service';
3
+ import { action, set } from '@ember/object';
4
+ import isNestedRouteTransition from '@fleetbase/ember-core/utils/is-nested-route-transition';
3
5
 
4
6
  export default class ManagementVendorsIndexRoute extends Route {
5
7
  @service store;
6
8
 
7
- /**
8
- * Queryable parameters
9
- *
10
- * @var {Object}
11
- */
12
9
  queryParams = {
13
10
  page: { refreshModel: true },
14
11
  limit: { refreshModel: true },
@@ -26,12 +23,18 @@ export default class ManagementVendorsIndexRoute extends Route {
26
23
  website_url: { refreshModel: true },
27
24
  };
28
25
 
26
+ @action willTransition(transition) {
27
+ if (isNestedRouteTransition(transition)) {
28
+ set(this.queryParams, 'page.refreshModel', false);
29
+ set(this.queryParams, 'sort.refreshModel', false);
30
+ }
31
+ }
32
+
29
33
  model(params) {
30
34
  return this.store.query('vendor', { ...params });
31
35
  }
32
36
 
33
37
  async setupController(controller, model) {
34
- console.log('setupController action called');
35
38
  super.setupController(...arguments);
36
39
 
37
40
  // load integrated vendors
@@ -11,8 +11,12 @@ export default class OperationsOrdersIndexViewRoute extends Route {
11
11
  @action willTransition(transition) {
12
12
  const shouldReset = typeof transition.to.name === 'string' && !transition.to.name.includes('operations.orders');
13
13
 
14
- if (this.controller && shouldReset) {
15
- this.controller.resetView();
14
+ if (this.controller) {
15
+ this.controller.removeRoutingControlPreview();
16
+
17
+ if (shouldReset) {
18
+ this.controller.resetView();
19
+ }
16
20
  }
17
21
  }
18
22
 
@@ -1,7 +1,8 @@
1
1
  import Route from '@ember/routing/route';
2
2
  import { tracked } from '@glimmer/tracking';
3
3
  import { inject as service } from '@ember/service';
4
- import { action } from '@ember/object';
4
+ import { action, set } from '@ember/object';
5
+ import isNestedRouteTransition from '@fleetbase/ember-core/utils/is-nested-route-transition';
5
6
 
6
7
  export default class OperationsOrdersIndexRoute extends Route {
7
8
  @service store;
@@ -33,6 +34,11 @@ export default class OperationsOrdersIndexRoute extends Route {
33
34
  if (this.controller && shouldReset) {
34
35
  this.controller.resetView(transition);
35
36
  }
37
+
38
+ if (isNestedRouteTransition(transition)) {
39
+ set(this.queryParams, 'page.refreshModel', false);
40
+ set(this.queryParams, 'sort.refreshModel', false);
41
+ }
36
42
  }
37
43
 
38
44
  @action model(params) {
@@ -1,4 +1,3 @@
1
1
  import Route from '@ember/routing/route';
2
- // import '@fleetbase/leaflet-routing-machine';
3
2
 
4
3
  export default class OperationsOrdersRoute extends Route {}
@@ -1,36 +1,11 @@
1
1
  import Route from '@ember/routing/route';
2
2
  import { inject as service } from '@ember/service';
3
- import { action } from '@ember/object';
3
+ import { action, set } from '@ember/object';
4
+ import isNestedRouteTransition from '@fleetbase/ember-core/utils/is-nested-route-transition';
4
5
 
5
6
  export default class OperationsServiceRatesIndexRoute extends Route {
6
- /**
7
- * Inject the `store` service.
8
- *
9
- * @var {Store}
10
- */
11
7
  @service store;
12
8
 
13
- /**
14
- * Inject the `loader` service.
15
- *
16
- * @var {Service}
17
- */
18
- @service loader;
19
-
20
- /**
21
- * Loading event handler for route.
22
- *
23
- * @param {Transition} transition
24
- */
25
- @action loading(transition) {
26
- this.loader.showOnInitialTransition(transition, 'section.next-view-section', { loadingMessage: 'Loading service rates...' });
27
- }
28
-
29
- /**
30
- * Queryable parameters
31
- *
32
- * @var {Object}
33
- */
34
9
  queryParams = {
35
10
  page: { refreshModel: true },
36
11
  limit: { refreshModel: true },
@@ -40,6 +15,13 @@ export default class OperationsServiceRatesIndexRoute extends Route {
40
15
  zone: { refreshModel: true },
41
16
  };
42
17
 
18
+ @action willTransition(transition) {
19
+ if (isNestedRouteTransition(transition)) {
20
+ set(this.queryParams, 'page.refreshModel', false);
21
+ set(this.queryParams, 'sort.refreshModel', false);
22
+ }
23
+ }
24
+
43
25
  model(params) {
44
26
  return this.store.query('service-rate', {
45
27
  ...params,
@@ -1,10 +1,3 @@
1
1
  import Route from '@ember/routing/route';
2
- import { inject as service } from '@ember/service';
3
2
 
4
- export default class OperationsServiceRatesRoute extends Route {
5
- @service store;
6
-
7
- model() {
8
- return this.store.findAll('service-rate');
9
- }
10
- }
3
+ export default class OperationsServiceRatesRoute extends Route {}
@@ -1,18 +1,19 @@
1
1
  .scheduler-left-sidebar {
2
- border-right: 1px rgba(229, 231, 235, 1) solid;
2
+ border-right: 1px rgb(229 231 235 / 100%) solid;
3
3
  height: 100vh;
4
4
  overflow-y: scroll;
5
5
  }
6
6
 
7
- body[data-theme="dark"] .scheduler-left-sidebar {
8
- border-right: 1px rgba(55, 65, 81, 1) solid;
7
+ body[data-theme='dark'] .scheduler-left-sidebar {
8
+ border-right: 1px rgb(55 65 81 / 100%) solid;
9
9
  }
10
10
 
11
- .scheduler-left-sidebar > .next-content-panel-wrapper > .next-content-panel-container > .next-content-panel > .next-content-panel-header.next-content-panel-is-closed {
11
+ .scheduler-left-sidebar > .next-content-panel-wrapper > .next-content-panel-container > .next-content-panel > .next-content-panel-header.next-content-panel-is-closed {
12
12
  border-bottom-left-radius: 0;
13
13
  border-bottom-right-radius: 0;
14
14
  }
15
- .scheduler-left-sidebar > .next-content-panel-wrapper > .next-content-panel-container > .next-content-panel > .next-content-panel-header {
15
+
16
+ .scheduler-left-sidebar > .next-content-panel-wrapper > .next-content-panel-container > .next-content-panel > .next-content-panel-header {
16
17
  border-top-left-radius: 0;
17
18
  border-top-right-radius: 0;
18
19
  border-top: 0;
@@ -20,9 +21,15 @@ body[data-theme="dark"] .scheduler-left-sidebar {
20
21
  border-right: 0;
21
22
  }
22
23
 
23
- .scheduler-left-sidebar > .next-content-panel-wrapper > .next-content-panel-container > .next-content-panel > .next-content-panel-body {
24
+ .scheduler-left-sidebar > .next-content-panel-wrapper > .next-content-panel-container > .next-content-panel > .next-content-panel-body {
24
25
  border-left: 0;
25
26
  border-right: 0;
26
27
  border-bottom-left-radius: 0;
27
28
  border-bottom-right-radius: 0;
28
- }
29
+ }
30
+
31
+ .fleetbase-console.console-fleet-ops-operations-orders-index-new,
32
+ .fleetbase-console.console-fleet-ops-operations-orders-index-view,
33
+ .fleetbase-console .dragSortList {
34
+ overflow: visible !important;
35
+ }
@@ -1,4 +1,5 @@
1
1
  <Layout::Section::Header @title="Contacts" @searchQuery={{this.query}} @onSearch={{perform this.search}}>
2
+ <Button @icon="refresh" @onClick={{this.reload}} @helpText="Reload data" class="mr-2" />
2
3
  <FiltersPicker
3
4
  @columns={{this.columns}}
4
5
  @onApply={{fn this.filters.apply this}}
@@ -4,7 +4,8 @@
4
4
  @searchQuery={{this.query}}
5
5
  @onSearch={{perform this.search}}
6
6
  >
7
- <Button @icon="grip-horizontal" @prefix="fas" @onClick={{fn this.changeLayout "grid"}} @disabled={{this.isGridLayout}} class="mr-2" />
7
+ <Button @icon="refresh" @onClick={{this.reload}} @helpText="Reload data" class="mr-2" />
8
+ <Button @icon="grip-horizontal" @prefix="fas" @onClick={{this.reload}} @disabled={{this.isGridLayout}} class="mr-2" />
8
9
  <Button @icon="table" @prefix="fas" @onClick={{fn this.changeLayout "table"}} @disabled={{this.isTableLayout}} class="mr-2" />
9
10
  <FiltersPicker
10
11
  @columns={{this.columns}}
@@ -1,7 +1,15 @@
1
1
  <Layout::Section::Header @title="Fleets" @searchQuery={{this.query}} @onSearch={{perform this.search}}>
2
- <FiltersPicker @columns={{this.columns}} @onApply={{fn this.filters.apply this}} @onClear={{fn this.filters.reset this}} @onFilterClear={{this.filters.clear}} @onChange={{this.filters.set}} @buttonWrapperClass="mr-2" />
2
+ <Button @icon="refresh" @onClick={{this.reload}} @helpText="Reload data" class="mr-2" />
3
+ <FiltersPicker
4
+ @columns={{this.columns}}
5
+ @onApply={{fn this.filters.apply this}}
6
+ @onClear={{fn this.filters.reset this}}
7
+ @onFilterClear={{this.filters.clear}}
8
+ @onChange={{this.filters.set}}
9
+ @buttonWrapperClass="mr-2"
10
+ />
3
11
  <VisibleColumnPicker @columns={{this.columns}} @onChange={{fn (mut this.columns)}} class="mr-2" />
4
- {{#if (safe-has this.table "selectedRows")}}
12
+ {{#if (safe-has this.table "selectedRows")}}
5
13
  <DropdownButton @icon="layer-group" @text="Bulk Action" @type="magic" @size="sm" @buttonWrapperClass="mr-2" @contentClass="dropdown-menu" as |dd|>
6
14
  <div class="next-dd-menu mt-2 mx-0">
7
15
  <div class="px-1">
@@ -17,6 +25,18 @@
17
25
  </Layout::Section::Header>
18
26
 
19
27
  <Layout::Section::Body>
20
- <Table @rows={{@model}} @columns={{this.columns}} @selectable={{true}} @canSelectAll={{true}} @onSetup={{fn (mut this.table)}} @pagination={{true}} @paginationMeta={{@model.meta}} @page={{this.page}} @onPageChange={{fn (mut this.page)}} @tfootVerticalOffset="53" @tfootVerticalOffsetElements=".next-view-section-subheader" />
28
+ <Table
29
+ @rows={{@model}}
30
+ @columns={{this.columns}}
31
+ @selectable={{true}}
32
+ @canSelectAll={{true}}
33
+ @onSetup={{fn (mut this.table)}}
34
+ @pagination={{true}}
35
+ @paginationMeta={{@model.meta}}
36
+ @page={{this.page}}
37
+ @onPageChange={{fn (mut this.page)}}
38
+ @tfootVerticalOffset="53"
39
+ @tfootVerticalOffsetElements=".next-view-section-subheader"
40
+ />
21
41
  </Layout::Section::Body>
22
42
  {{outlet}}
@@ -1,4 +1,5 @@
1
1
  <Layout::Section::Header @title="Fuel Reports" @searchQuery={{this.query}} @onSearch={{perform this.search}}>
2
+ <Button @icon="refresh" @onClick={{this.reload}} @helpText="Reload data" class="mr-2" />
2
3
  <FiltersPicker
3
4
  @columns={{this.columns}}
4
5
  @onApply={{fn this.filters.apply this}}
@@ -1,5 +1,13 @@
1
1
  <Layout::Section::Header @title="Issues" @searchQuery={{this.query}} @onSearch={{perform this.search}}>
2
- <FiltersPicker @columns={{this.columns}} @onApply={{fn this.filters.apply this}} @onClear={{fn this.filters.reset this}} @onFilterClear={{this.filters.clear}} @onChange={{this.filters.set}} @buttonWrapperClass="mr-2" />
2
+ <Button @icon="refresh" @onClick={{this.reload}} @helpText="Reload data" class="mr-2" />
3
+ <FiltersPicker
4
+ @columns={{this.columns}}
5
+ @onApply={{fn this.filters.apply this}}
6
+ @onClear={{fn this.filters.reset this}}
7
+ @onFilterClear={{this.filters.clear}}
8
+ @onChange={{this.filters.set}}
9
+ @buttonWrapperClass="mr-2"
10
+ />
3
11
  <VisibleColumnPicker @columns={{this.columns}} @onChange={{fn (mut this.columns)}} class="mr-2" />
4
12
  {{#if (safe-has this.table "selectedRows")}}
5
13
  <DropdownButton @icon="layer-group" @text="Bulk Action" @type="magic" @size="sm" @buttonWrapperClass="mr-2" @contentClass="dropdown-menu" as |dd|>
@@ -17,7 +25,19 @@
17
25
  </Layout::Section::Header>
18
26
 
19
27
  <Layout::Section::Body>
20
- <Table @rows={{@model}} @columns={{this.columns}} @selectable={{true}} @canSelectAll={{true}} @onSetup={{fn (mut this.table)}} @pagination={{true}} @paginationMeta={{@model.meta}} @page={{this.page}} @onPageChange={{fn (mut this.page)}} @tfootVerticalOffset="53" @tfootVerticalOffsetElements=".next-view-section-subheader" />
28
+ <Table
29
+ @rows={{@model}}
30
+ @columns={{this.columns}}
31
+ @selectable={{true}}
32
+ @canSelectAll={{true}}
33
+ @onSetup={{fn (mut this.table)}}
34
+ @pagination={{true}}
35
+ @paginationMeta={{@model.meta}}
36
+ @page={{this.page}}
37
+ @onPageChange={{fn (mut this.page)}}
38
+ @tfootVerticalOffset="53"
39
+ @tfootVerticalOffsetElements=".next-view-section-subheader"
40
+ />
21
41
  </Layout::Section::Body>
22
42
 
23
43
  {{outlet}}
@@ -1,5 +1,13 @@
1
1
  <Layout::Section::Header @title="Places" @searchQuery={{this.query}} @onSearch={{perform this.search}}>
2
- <FiltersPicker @columns={{this.columns}} @onApply={{fn this.filters.apply this}} @onClear={{fn this.filters.reset this}} @onFilterClear={{this.filters.clear}} @onChange={{this.filters.set}} @buttonWrapperClass="mr-2" />
2
+ <Button @icon="refresh" @onClick={{this.reload}} @helpText="Reload data" class="mr-2" />
3
+ <FiltersPicker
4
+ @columns={{this.columns}}
5
+ @onApply={{fn this.filters.apply this}}
6
+ @onClear={{fn this.filters.reset this}}
7
+ @onFilterClear={{this.filters.clear}}
8
+ @onChange={{this.filters.set}}
9
+ @buttonWrapperClass="mr-2"
10
+ />
3
11
  <VisibleColumnPicker @columns={{this.columns}} @onChange={{fn (mut this.columns)}} class="mr-2" />
4
12
  {{#if (safe-has this.table "selectedRows")}}
5
13
  <DropdownButton @icon="layer-group" @text="Bulk Action" @type="magic" @size="sm" @buttonWrapperClass="mr-2" @contentClass="dropdown-menu" as |dd|>
@@ -1,5 +1,13 @@
1
1
  <Layout::Section::Header @title="Vehicles" @searchQuery={{this.query}} @onSearch={{perform this.search}}>
2
- <FiltersPicker @columns={{this.columns}} @onApply={{fn this.filters.apply this}} @onClear={{fn this.filters.reset this}} @onFilterClear={{this.filters.clear}} @onChange={{this.filters.set}} @buttonWrapperClass="mr-2" />
2
+ <Button @icon="refresh" @onClick={{this.reload}} @helpText="Reload data" class="mr-2" />
3
+ <FiltersPicker
4
+ @columns={{this.columns}}
5
+ @onApply={{fn this.filters.apply this}}
6
+ @onClear={{fn this.filters.reset this}}
7
+ @onFilterClear={{this.filters.clear}}
8
+ @onChange={{this.filters.set}}
9
+ @buttonWrapperClass="mr-2"
10
+ />
3
11
  <VisibleColumnPicker @columns={{this.columns}} @onChange={{fn (mut this.columns)}} class="mr-2" />
4
12
  {{#if (safe-has this.table "selectedRows")}}
5
13
  <DropdownButton @icon="layer-group" @text="Bulk Action" @type="magic" @size="sm" @buttonWrapperClass="mr-2" @contentClass="dropdown-menu" as |dd|>
@@ -17,6 +25,18 @@
17
25
  </Layout::Section::Header>
18
26
 
19
27
  <Layout::Section::Body>
20
- <Table @rows={{@model}} @columns={{this.columns}} @selectable={{true}} @canSelectAll={{true}} @onSetup={{fn (mut this.table)}} @pagination={{true}} @paginationMeta={{@model.meta}} @page={{this.page}} @onPageChange={{fn (mut this.page)}} @tfootVerticalOffset="53" @tfootVerticalOffsetElements=".next-view-section-subheader" />
28
+ <Table
29
+ @rows={{@model}}
30
+ @columns={{this.columns}}
31
+ @selectable={{true}}
32
+ @canSelectAll={{true}}
33
+ @onSetup={{fn (mut this.table)}}
34
+ @pagination={{true}}
35
+ @paginationMeta={{@model.meta}}
36
+ @page={{this.page}}
37
+ @onPageChange={{fn (mut this.page)}}
38
+ @tfootVerticalOffset="53"
39
+ @tfootVerticalOffsetElements=".next-view-section-subheader"
40
+ />
21
41
  </Layout::Section::Body>
22
42
  {{outlet}}
@@ -1,5 +1,13 @@
1
1
  <Layout::Section::Header @title="Vendors" @searchQuery={{this.query}} @onSearch={{perform this.search}}>
2
- <FiltersPicker @columns={{this.columns}} @onApply={{fn this.filters.apply this}} @onClear={{fn this.filters.reset this}} @onFilterClear={{this.filters.clear}} @onChange={{this.filters.set}} @buttonWrapperClass="mr-2" />
2
+ <Button @icon="refresh" @onClick={{this.reload}} @helpText="Reload data" class="mr-2" />
3
+ <FiltersPicker
4
+ @columns={{this.columns}}
5
+ @onApply={{fn this.filters.apply this}}
6
+ @onClear={{fn this.filters.reset this}}
7
+ @onFilterClear={{this.filters.clear}}
8
+ @onChange={{this.filters.set}}
9
+ @buttonWrapperClass="mr-2"
10
+ />
3
11
  <VisibleColumnPicker @columns={{this.columns}} @onChange={{fn (mut this.columns)}} class="mr-2" />
4
12
  {{#if (safe-has this.table "selectedRows")}}
5
13
  <DropdownButton @icon="layer-group" @text="Bulk Action" @type="magic" @size="sm" @buttonWrapperClass="mr-2" @contentClass="dropdown-menu" as |dd|>
@@ -17,6 +25,18 @@
17
25
  </Layout::Section::Header>
18
26
 
19
27
  <Layout::Section::Body>
20
- <Table @rows={{this.rows}} @columns={{this.columns}} @selectable={{true}} @canSelectAll={{true}} @onSetup={{fn (mut this.table)}} @pagination={{true}} @paginationMeta={{@model.meta}} @page={{this.page}} @onPageChange={{fn (mut this.page)}} @tfootVerticalOffset="53" @tfootVerticalOffsetElements=".next-view-section-subheader" />
28
+ <Table
29
+ @rows={{this.rows}}
30
+ @columns={{this.columns}}
31
+ @selectable={{true}}
32
+ @canSelectAll={{true}}
33
+ @onSetup={{fn (mut this.table)}}
34
+ @pagination={{true}}
35
+ @paginationMeta={{@model.meta}}
36
+ @page={{this.page}}
37
+ @onPageChange={{fn (mut this.page)}}
38
+ @tfootVerticalOffset="53"
39
+ @tfootVerticalOffsetElements=".next-view-section-subheader"
40
+ />
21
41
  </Layout::Section::Body>
22
42
  {{outlet}}
@@ -1,7 +1,7 @@
1
- <Overlay @position="right" @noBackdrop={{true}} @isResizable={{true}} @isMaximizable={{true}} @isMinimizable={{true}} @width="700px" @fullHeight={{true}} @onLoad={{this.setupInterface}} as |overlay|>
1
+ <Overlay @position="right" @noBackdrop={{true}} @isResizable={{true}} @width="570px" @fullHeight={{true}} @onLoad={{this.setupInterface}} as |overlay|>
2
2
  <Overlay::Header @overlay={{overlay}} @title="New Order" @onPressCancel={{this.transitionBack}}>
3
3
  <DropdownButton @icon="ellipsis-h" @size="sm" @iconPrefix="fas" @triggerClass="mr-2 hidden md:flex" as |dd|>
4
- <div class="next-dd-menu mt-1 mx-0" aria-orientation="vertical" aria-labelledby="user-menu">
4
+ <div class="next-dd-menu mt-1 mx-0" aria-labelledby="user-menu">
5
5
  <div class="p-1">
6
6
  <a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.newCustomer)}}>
7
7
  <div class="w-6">
@@ -15,7 +15,7 @@
15
15
  </div>
16
16
  <span>Create new facilitator</span>
17
17
  </a>
18
- <a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.newPlace)}}>
18
+ <a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.createPlace)}}>
19
19
  <div class="w-6">
20
20
  <FaIcon @icon="map-pin" />
21
21
  </div>
@@ -162,7 +162,7 @@
162
162
  {{#each group.items as |metaField|}}
163
163
  <div class="input-group {{if (eq metaField.type "boolean") "col-span-2 items-center" ""}}">
164
164
  <div class="flex items-center justify-between">
165
- {{#if (not (eq metaField.type "boolean"))}}
165
+ {{#if (not-eq metaField.type "boolean")}}
166
166
  <InputLabel @labelText={{metaField.label}} @required={{metaField.required}} />
167
167
  {{/if}}
168
168
 
@@ -223,8 +223,8 @@
223
223
  </label>
224
224
  </div>
225
225
 
226
- <div class="flex-1 px-4">
227
- <ModelSelect @modelName="place" @selectedModel={{waypoint.place}} @placeholder={{concat "Select Waypoint " (add index 1)}} @triggerClass="form-select form-input truncate" @wrapperClass="w-96" @infiniteScroll={{false}} @customSearchEndpoint="places/search" @query={{hash geo=true latitude=this.userLatitude longitude=this.userLongitude}} @renderInPlace={{true}} @onChange={{fn this.setWaypointPlace index}} as |model|>
226
+ <div class="flex-1 px-3">
227
+ <ModelSelect @modelName="place" @selectedModel={{waypoint.place}} @placeholder={{concat "Select Waypoint " (add index 1)}} @triggerClass="form-select form-input truncate max-w-300px" @infiniteScroll={{false}} @customSearchEndpoint="places/search" @query={{hash geo=true latitude=this.userLatitude longitude=this.userLongitude}} @renderInPlace={{true}} @onChange={{fn this.setWaypointPlace index}} as |model|>
228
228
  {{model.address}}
229
229
  </ModelSelect>
230
230
 
@@ -241,7 +241,7 @@
241
241
 
242
242
  <div class="flex items-center">
243
243
  {{#if waypoint.place}}
244
- <Button class="mr-2" @icon="edit" @size="sm" @onClick={{fn this.placesController.editPlace waypoint.place}} />
244
+ <Button class="mr-2" @icon="edit" @size="sm" @onClick={{fn this.editPlace waypoint.place}} />
245
245
  {{/if}}
246
246
  <Button @type="danger" @icon="trash" @size="sm" @onClick={{fn this.removeWaypoint waypoint}} />
247
247
  </div>
@@ -1,10 +1,10 @@
1
- <Overlay @position="right" @noBackdrop={{true}} @width="700px" @fullHeight={{true}} @isResizable={{true}} @isMaximizable={{true}} @isMinimizable={{true}} @onLoad={{this.setupInterface}} as |overlay|>
1
+ <Overlay @position="right" @noBackdrop={{true}} @width="570px" @fullHeight={{true}} @isResizable={{true}} @onLoad={{this.setupInterface}} as |overlay|>
2
2
  <Overlay::Header @overlay={{overlay}} @title={{@model.public_id}} @status={{@model.status}} @dispatched={{@model.dispatched}} @createdAt={{@model.createdAt}} @onPressCancel={{this.transitionBack}}>
3
3
  {{#if @model.canBeDispatched}}
4
4
  <Button @type="primary" @icon="paper-plane" @text="Dispatch" class="mr-2" @onClick={{fn this.dispatchOrder @model}} />
5
5
  {{/if}}
6
6
  <DropdownButton @icon="ellipsis-h" @size="sm" @iconPrefix="fas" as |dd|>
7
- <div class="next-dd-menu mt-1 mx-0" aria-orientation="vertical" aria-labelledby="user-menu">
7
+ <div class="next-dd-menu mt-1 mx-0" aria-labelledby="user-menu">
8
8
  <div class="px-1">
9
9
  <div class="text-sm flex flex-row items-center px-3 py-1 rounded-md my-1 text-gray-800 dark:text-gray-300">
10
10
  Order Actions
@@ -83,20 +83,21 @@
83
83
  <Overlay::Body @wrapperClass="new-order-overlay-body" @increaseInnerBodyHeightBy={{1000}}>
84
84
  <ContentPanel @title="Activity" @open={{true}} @pad={{false}} @isLoading={{this.isLoadingAdditionalData}} @panelBodyWrapperClass="px-0 py-4" @panelBodyClass="bg-white dark:bg-gray-800">
85
85
  {{#if @model.tracking_statuses}}
86
- <Timeline @activity={{@model.tracking_statuses}} @wrapperClass="space-x-4 px-2" @arrowClass="bg-gray-600 border border-gray-900 shadow-md" as |TimelineItem|>
87
- <TimelineItem class="flex flex-col w-40 px-3 py-2 rounded text-sm leading-4 truncate space-y-2 bg-gray-100 dark:bg-gray-900 dark:text-white" as |trackingStatus|>
88
- <div class="font-semibold truncate">
89
- {{trackingStatus.status}}
90
- </div>
91
- <div class="truncate">
92
- {{trackingStatus.details}}
93
- </div>
94
- <div class="truncate">
95
- {{trackingStatus.createdAt}}
86
+ <Timeline @activity={{@model.tracking_statuses}} @arrowClass="bg-gray-600 border border-gray-900 shadow-md" as |TimelineItem|>
87
+ <TimelineItem @activeStatus={{@model.status}} as |trackingStatus|>
88
+ <div class="flex flex-col px-3 py-2 rounded text-sm leading-4 space-y-2 bg-gray-100 dark:bg-gray-900 dark:text-white">
89
+ <div class="flex flex-col space-y-1">
90
+ <div class="text-xs font-semibold truncate">{{trackingStatus.status}}</div>
91
+ <div class="text-xs truncate">{{n-a trackingStatus.details}}</div>
92
+ <div class="text-xs">{{trackingStatus.createdAtShortWithTime}}</div>
93
+ </div>
94
+ <Attach::Tooltip @class="clean" @animation="scale" @placement="top">
95
+ <InputInfo>
96
+ <div class="text-xs">{{or trackingStatus.details trackingStatus.status}}</div>
97
+ <div class="text-xs">{{trackingStatus.createdAtShortWithTime}}</div>
98
+ </InputInfo>
99
+ </Attach::Tooltip>
96
100
  </div>
97
- <Attach::Tooltip @class="clean" @animation="scale" @placement="top">
98
- <InputInfo @text={{trackingStatus.details}} />
99
- </Attach::Tooltip>
100
101
  </TimelineItem>
101
102
  </Timeline>
102
103
  {{else}}
@@ -351,7 +352,7 @@
351
352
  </div>
352
353
  <div class="flex items-start">
353
354
  <DropdownButton @triggerClass="mr-2" @iconClass="icon-text-height" @buttonSize="sm" @icon="ellipsis-h" @iconPrefix="fas" @contentClass="dropdown-menu" as |dd|>
354
- <div class="next-dd-menu mt-1 mx-0" aria-orientation="vertical" aria-labelledby="user-menu">
355
+ <div class="next-dd-menu mt-1 mx-0" aria-labelledby="user-menu">
355
356
  <div class="px-1">
356
357
  <div class="text-sm flex flex-row items-center px-3 py-1 rounded-md my-1 text-gray-300">
357
358
  Waypoint Actions
@@ -1,7 +1,15 @@
1
1
  <Layout::Section::Header @title="Service Rates" @searchQuery={{this.query}} @onSearch={{perform this.search}}>
2
- <FiltersPicker @columns={{this.columns}} @onApply={{fn this.filters.apply this}} @onClear={{fn this.filters.reset this}} @onFilterClear={{this.filters.clear}} @onChange={{this.filters.set}} @buttonWrapperClass="mr-2" />
2
+ <Button @icon="refresh" @onClick={{this.reload}} @helpText="Reload data" class="mr-2" />
3
+ <FiltersPicker
4
+ @columns={{this.columns}}
5
+ @onApply={{fn this.filters.apply this}}
6
+ @onClear={{fn this.filters.reset this}}
7
+ @onFilterClear={{this.filters.clear}}
8
+ @onChange={{this.filters.set}}
9
+ @buttonWrapperClass="mr-2"
10
+ />
3
11
  <VisibleColumnPicker @columns={{this.columns}} @onChange={{fn (mut this.columns)}} class="mr-2" />
4
- {{#if (safe-has this.table "selectedRows")}}
12
+ {{#if (safe-has this.table "selectedRows")}}
5
13
  <DropdownButton @icon="layer-group" @text="Bulk Action" @type="magic" @size="sm" @buttonWrapperClass="mr-2" @contentClass="dropdown-menu" as |dd|>
6
14
  <div class="next-dd-menu mt-2 mx-0">
7
15
  <div class="px-1">
@@ -12,7 +20,7 @@
12
20
  </div>
13
21
  </DropdownButton>
14
22
  {{/if}}
15
- <Button @icon="plus" @iconPrefix="fas" @type="primary" @text="New" class="mr-2" @onClick={{transition-to 'operations.service-rates.index.new'}} />
23
+ <Button @icon="plus" @iconPrefix="fas" @type="primary" @text="New" class="mr-2" @onClick={{transition-to "operations.service-rates.index.new"}} />
16
24
  <Button @icon="long-arrow-up" @iconClass="rotate-icon-45" @text="Export" />
17
25
  </Layout::Section::Header>
18
26
 
@@ -0,0 +1,3 @@
1
+ export default function waypointLabel(index) {
2
+ return (parseInt(index) + 9).toString(36).toUpperCase();
3
+ }
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/layout/fleet-ops-sidebar/fleet-listing';
@@ -1 +1 @@
1
- export { default } from '@fleetbase/fleetops-engine/controllers/operations/zones/index';
1
+ export { default } from '@fleetbase/fleetops-engine/controllers/base-controller';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/utils/waypoint-label';
package/composer.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetbase/fleetops-api",
3
- "version": "0.3.4",
3
+ "version": "0.3.6",
4
4
  "description": "Fleet & Transport Management Extension for Fleetbase",
5
5
  "keywords": [
6
6
  "fleetbase-extension",