@fleetbase/fleetops-engine 0.0.1

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 (446) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +32 -0
  3. package/addon/components/cell/driver-name.hbs +13 -0
  4. package/addon/components/cell/driver-name.js +30 -0
  5. package/addon/components/custom-field-value.hbs +11 -0
  6. package/addon/components/custom-field-value.js +41 -0
  7. package/addon/components/custom-field.hbs +42 -0
  8. package/addon/components/custom-field.js +46 -0
  9. package/addon/components/display-place.hbs +52 -0
  10. package/addon/components/display-place.js +11 -0
  11. package/addon/components/driver-card-mini.hbs +12 -0
  12. package/addon/components/driver-card-mini.js +25 -0
  13. package/addon/components/driver-card.hbs +27 -0
  14. package/addon/components/driver-card.js +14 -0
  15. package/addon/components/event-timeline/event.hbs +5 -0
  16. package/addon/components/event-timeline.hbs +7 -0
  17. package/addon/components/event-timeline.js +423 -0
  18. package/addon/components/file-icon.js +1 -0
  19. package/addon/components/fleet-driver-listing.hbs +73 -0
  20. package/addon/components/fleet-driver-listing.js +117 -0
  21. package/addon/components/full-calendar/draggable.js +1 -0
  22. package/addon/components/full-calendar.js +1 -0
  23. package/addon/components/full-size.js +1 -0
  24. package/addon/components/global-search.hbs +84 -0
  25. package/addon/components/global-search.js +52 -0
  26. package/addon/components/horizontal-route.hbs +33 -0
  27. package/addon/components/horizontal-route.js +48 -0
  28. package/addon/components/integrated-order-details.hbs +117 -0
  29. package/addon/components/integrated-order-details.js +10 -0
  30. package/addon/components/leaflet-draw-control.js +147 -0
  31. package/addon/components/leaflet-rotated-marker.js +24 -0
  32. package/addon/components/live-map.hbs +63 -0
  33. package/addon/components/live-map.js +856 -0
  34. package/addon/components/map-container/toolbar/zones-panel.hbs +41 -0
  35. package/addon/components/map-container/toolbar/zones-panel.js +106 -0
  36. package/addon/components/map-container/toolbar-container.hbs +1 -0
  37. package/addon/components/map-container/toolbar-container.js +3 -0
  38. package/addon/components/map-container/toolbar.hbs +51 -0
  39. package/addon/components/map-container/toolbar.js +34 -0
  40. package/addon/components/map-container/topbar.hbs +1 -0
  41. package/addon/components/map-container/topbar.js +3 -0
  42. package/addon/components/map-container/view-switch.hbs +1 -0
  43. package/addon/components/map-container/view-switch.js +3 -0
  44. package/addon/components/map-container.hbs +1 -0
  45. package/addon/components/map-container.js +15 -0
  46. package/addon/components/modals/assign-driver.hbs +24 -0
  47. package/addon/components/modals/assign-driver.js +3 -0
  48. package/addon/components/modals/clone-config-form.hbs +6 -0
  49. package/addon/components/modals/contact-details.hbs +44 -0
  50. package/addon/components/modals/contact-form.hbs +56 -0
  51. package/addon/components/modals/driver-assign-order.hbs +67 -0
  52. package/addon/components/modals/driver-assign-vehicle.hbs +20 -0
  53. package/addon/components/modals/driver-assign-vendor.hbs +20 -0
  54. package/addon/components/modals/driver-details.hbs +85 -0
  55. package/addon/components/modals/driver-form.hbs +83 -0
  56. package/addon/components/modals/edit-meta-form.hbs +20 -0
  57. package/addon/components/modals/entity-form.hbs +57 -0
  58. package/addon/components/modals/entity-meta-field-prompt.hbs +6 -0
  59. package/addon/components/modals/fleet-details.hbs +31 -0
  60. package/addon/components/modals/fleet-form.hbs +26 -0
  61. package/addon/components/modals/fuel-report-details.hbs +34 -0
  62. package/addon/components/modals/fuel-report-form.hbs +26 -0
  63. package/addon/components/modals/group-details.hbs +42 -0
  64. package/addon/components/modals/group-form.hbs +54 -0
  65. package/addon/components/modals/install-prompt.hbs +21 -0
  66. package/addon/components/modals/map-field-form.hbs +9 -0
  67. package/addon/components/modals/map-field-group-form.hbs +6 -0
  68. package/addon/components/modals/map-layer-form.hbs +29 -0
  69. package/addon/components/modals/meta-field-form.hbs +8 -0
  70. package/addon/components/modals/meta-field-group-form.hbs +5 -0
  71. package/addon/components/modals/new-order-config.hbs +11 -0
  72. package/addon/components/modals/option-prompt.hbs +17 -0
  73. package/addon/components/modals/order-assign-driver.hbs +25 -0
  74. package/addon/components/modals/order-config-new-status.hbs +5 -0
  75. package/addon/components/modals/order-event.hbs +18 -0
  76. package/addon/components/modals/order-form.hbs +63 -0
  77. package/addon/components/modals/order-import.hbs +84 -0
  78. package/addon/components/modals/order-label.hbs +7 -0
  79. package/addon/components/modals/order-meta.hbs +12 -0
  80. package/addon/components/modals/order-new-activity.hbs +62 -0
  81. package/addon/components/modals/order-route-form.hbs +111 -0
  82. package/addon/components/modals/place-assign-vendor.hbs +20 -0
  83. package/addon/components/modals/place-details.hbs +105 -0
  84. package/addon/components/modals/place-form.hbs +30 -0
  85. package/addon/components/modals/point-map.hbs +16 -0
  86. package/addon/components/modals/policy-form.hbs +22 -0
  87. package/addon/components/modals/resend-verification-email.hbs +25 -0
  88. package/addon/components/modals/role-form.hbs +16 -0
  89. package/addon/components/modals/select-payment-method.hbs +12 -0
  90. package/addon/components/modals/service-area-form.hbs +31 -0
  91. package/addon/components/modals/set-password.hbs +15 -0
  92. package/addon/components/modals/uninstall-prompt.hbs +21 -0
  93. package/addon/components/modals/user-form.hbs +56 -0
  94. package/addon/components/modals/vehicle-details.hbs +227 -0
  95. package/addon/components/modals/vehicle-form.hbs +282 -0
  96. package/addon/components/modals/vendor-details.hbs +77 -0
  97. package/addon/components/modals/vendor-form.hbs +168 -0
  98. package/addon/components/modals/view-service-area.hbs +12 -0
  99. package/addon/components/modals/view-zone.hbs +12 -0
  100. package/addon/components/modals/zone-form.hbs +16 -0
  101. package/addon/components/operations-pane/pane.hbs +1 -0
  102. package/addon/components/order/header.hbs +48 -0
  103. package/addon/components/order/header.js +26 -0
  104. package/addon/components/order/place-card.hbs +51 -0
  105. package/addon/components/order/place-card.js +33 -0
  106. package/addon/components/order/schedule-card.hbs +35 -0
  107. package/addon/components/order/schedule-card.js +17 -0
  108. package/addon/components/order/sub-header/item.hbs +16 -0
  109. package/addon/components/order/sub-header.hbs +3 -0
  110. package/addon/components/order-config/activity-flow-editor.hbs +108 -0
  111. package/addon/components/order-config/activity-flow-editor.js +374 -0
  112. package/addon/components/order-config/details-editor.hbs +32 -0
  113. package/addon/components/order-config/details-editor.js +16 -0
  114. package/addon/components/order-config/entities-editor.hbs +84 -0
  115. package/addon/components/order-config/entities-editor.js +123 -0
  116. package/addon/components/order-config/fields-editor.hbs +122 -0
  117. package/addon/components/order-config/fields-editor.js +233 -0
  118. package/addon/components/order-config/selector.hbs +1 -0
  119. package/addon/components/order-config/selector.js +3 -0
  120. package/addon/components/order-config.hbs +66 -0
  121. package/addon/components/order-config.js +296 -0
  122. package/addon/components/order-list-overlay/driver-panel-title.hbs +6 -0
  123. package/addon/components/order-list-overlay/order.hbs +22 -0
  124. package/addon/components/order-list-overlay/order.js +3 -0
  125. package/addon/components/order-list-overlay.hbs +120 -0
  126. package/addon/components/order-list-overlay.js +227 -0
  127. package/addon/components/route-list.hbs +47 -0
  128. package/addon/components/route-list.js +11 -0
  129. package/addon/components/settings-window.hbs +15 -0
  130. package/addon/components/settings-window.js +62 -0
  131. package/addon/components/split-grid.js +1 -0
  132. package/addon/components/widget/fleet-ops-quickstart.hbs +40 -0
  133. package/addon/components/widget/fleet-ops-quickstart.js +58 -0
  134. package/addon/components/widget/issues.hbs +1 -0
  135. package/addon/components/widget/key-metrics.hbs +121 -0
  136. package/addon/components/widget/key-metrics.js +46 -0
  137. package/addon/components/widget/live-order-map.hbs +59 -0
  138. package/addon/components/widget/live-order-map.js +11 -0
  139. package/addon/components/widget/recent-orders.hbs +35 -0
  140. package/addon/components/widget/recent-orders.js +24 -0
  141. package/addon/components/widget/transaction-earnings.hbs +1 -0
  142. package/addon/components/widget/transactions.hbs +36 -0
  143. package/addon/components/widget/transactions.js +29 -0
  144. package/addon/components/widget/weekly-orders.hbs +1 -0
  145. package/addon/components/widget/weekly-orders.js +3 -0
  146. package/addon/controllers/application.js +40 -0
  147. package/addon/controllers/management/contacts/index.js +438 -0
  148. package/addon/controllers/management/drivers/index.js +868 -0
  149. package/addon/controllers/management/fleets/index.js +507 -0
  150. package/addon/controllers/management/fuel-reports/index.js +428 -0
  151. package/addon/controllers/management/issues/index.js +335 -0
  152. package/addon/controllers/management/places/index.js +571 -0
  153. package/addon/controllers/management/vehicles/index.js +616 -0
  154. package/addon/controllers/management/vendors/index.js +626 -0
  155. package/addon/controllers/management.js +5 -0
  156. package/addon/controllers/operations/orders/index/config/types.js +17 -0
  157. package/addon/controllers/operations/orders/index/config.js +13 -0
  158. package/addon/controllers/operations/orders/index/new.js +1213 -0
  159. package/addon/controllers/operations/orders/index/view.js +794 -0
  160. package/addon/controllers/operations/orders/index.js +674 -0
  161. package/addon/controllers/operations/scheduler/index.js +110 -0
  162. package/addon/controllers/operations/service-rates/index/edit.js +59 -0
  163. package/addon/controllers/operations/service-rates/index/new.js +369 -0
  164. package/addon/controllers/operations/service-rates/index.js +275 -0
  165. package/addon/controllers/operations/zones/index.js +470 -0
  166. package/addon/engine.js +19 -0
  167. package/addon/helpers/avatar-url.js +9 -0
  168. package/addon/helpers/extract-coordinates.js +6 -0
  169. package/addon/helpers/feature-group.js +14 -0
  170. package/addon/helpers/flow-raw-status.js +13 -0
  171. package/addon/helpers/format-point.js +13 -0
  172. package/addon/helpers/get-tip-amount.js +19 -0
  173. package/addon/helpers/is-active-route.js +1 -0
  174. package/addon/helpers/is-facilitator-supported-place.js +6 -0
  175. package/addon/helpers/is-not-facilitator-supported-place.js +6 -0
  176. package/addon/helpers/is-waypoint-record.js +6 -0
  177. package/addon/helpers/point-coordinates.js +10 -0
  178. package/addon/helpers/point-to-coordinates.js +28 -0
  179. package/addon/helpers/service-name.js +6 -0
  180. package/addon/helpers/waypoint-label.js +1 -0
  181. package/addon/instance-initializers/register-leaflet-draw-control-layer.js +17 -0
  182. package/addon/instance-initializers/register-leaflet-rotated-marker.js +17 -0
  183. package/addon/modifiers/translate-x.js +5 -0
  184. package/addon/routes/application.js +25 -0
  185. package/addon/routes/comms/chat.js +3 -0
  186. package/addon/routes/comms/intercom.js +3 -0
  187. package/addon/routes/comms.js +3 -0
  188. package/addon/routes/home.js +20 -0
  189. package/addon/routes/management/contacts/index.js +24 -0
  190. package/addon/routes/management/contacts.js +3 -0
  191. package/addon/routes/management/drivers/index.js +33 -0
  192. package/addon/routes/management/drivers.js +3 -0
  193. package/addon/routes/management/fleets/index.js +27 -0
  194. package/addon/routes/management/fleets.js +3 -0
  195. package/addon/routes/management/fuel-reports/index.js +23 -0
  196. package/addon/routes/management/fuel-reports.js +3 -0
  197. package/addon/routes/management/index.js +3 -0
  198. package/addon/routes/management/issues/index.js +24 -0
  199. package/addon/routes/management/issues.js +3 -0
  200. package/addon/routes/management/places/index.js +18 -0
  201. package/addon/routes/management/places.js +3 -0
  202. package/addon/routes/management/vehicles/index.js +35 -0
  203. package/addon/routes/management/vehicles.js +3 -0
  204. package/addon/routes/management/vendors/index.js +34 -0
  205. package/addon/routes/management/vendors.js +3 -0
  206. package/addon/routes/management.js +3 -0
  207. package/addon/routes/operations/dispatch.js +3 -0
  208. package/addon/routes/operations/orders/index/config/types.js +17 -0
  209. package/addon/routes/operations/orders/index/config.js +3 -0
  210. package/addon/routes/operations/orders/index/new.js +16 -0
  211. package/addon/routes/operations/orders/index/view.js +37 -0
  212. package/addon/routes/operations/orders/index.js +35 -0
  213. package/addon/routes/operations/orders.js +4 -0
  214. package/addon/routes/operations/scheduler/index.js +10 -0
  215. package/addon/routes/operations/scheduler.js +3 -0
  216. package/addon/routes/operations/service-rates/index/edit.js +35 -0
  217. package/addon/routes/operations/service-rates/index/new.js +15 -0
  218. package/addon/routes/operations/service-rates/index.js +49 -0
  219. package/addon/routes/operations/service-rates.js +10 -0
  220. package/addon/routes/operations/zones/index.js +25 -0
  221. package/addon/routes/operations/zones.js +7 -0
  222. package/addon/routes/operations.js +3 -0
  223. package/addon/routes.js +55 -0
  224. package/addon/services/map-manager.js +3 -0
  225. package/addon/services/service-areas.js +385 -0
  226. package/addon/templates/application.hbs +27 -0
  227. package/addon/templates/comms/chat.hbs +1 -0
  228. package/addon/templates/comms/intercom.hbs +1 -0
  229. package/addon/templates/comms.hbs +1 -0
  230. package/addon/templates/home.hbs +1 -0
  231. package/addon/templates/management/contacts/index.hbs +23 -0
  232. package/addon/templates/management/contacts.hbs +1 -0
  233. package/addon/templates/management/drivers/index.hbs +35 -0
  234. package/addon/templates/management/drivers.hbs +1 -0
  235. package/addon/templates/management/fleets/index.hbs +22 -0
  236. package/addon/templates/management/fleets.hbs +1 -0
  237. package/addon/templates/management/fuel-reports/index.hbs +21 -0
  238. package/addon/templates/management/fuel-reports.hbs +1 -0
  239. package/addon/templates/management/index.hbs +53 -0
  240. package/addon/templates/management/issues/index.hbs +21 -0
  241. package/addon/templates/management/issues.hbs +1 -0
  242. package/addon/templates/management/places/index.hbs +34 -0
  243. package/addon/templates/management/places.hbs +1 -0
  244. package/addon/templates/management/vehicles/index.hbs +22 -0
  245. package/addon/templates/management/vehicles.hbs +1 -0
  246. package/addon/templates/management/vendors/index.hbs +22 -0
  247. package/addon/templates/management/vendors.hbs +1 -0
  248. package/addon/templates/management.hbs +1 -0
  249. package/addon/templates/operations/dispatch.hbs +1 -0
  250. package/addon/templates/operations/orders/index/config/types.hbs +26 -0
  251. package/addon/templates/operations/orders/index/config.hbs +24 -0
  252. package/addon/templates/operations/orders/index/new.hbs +506 -0
  253. package/addon/templates/operations/orders/index/view.hbs +428 -0
  254. package/addon/templates/operations/orders/index.hbs +48 -0
  255. package/addon/templates/operations/orders.hbs +1 -0
  256. package/addon/templates/operations/scheduler/index.hbs +30 -0
  257. package/addon/templates/operations/scheduler.hbs +1 -0
  258. package/addon/templates/operations/service-rates/index/edit.hbs +1 -0
  259. package/addon/templates/operations/service-rates/index/new.hbs +308 -0
  260. package/addon/templates/operations/service-rates/index.hbs +23 -0
  261. package/addon/templates/operations/service-rates.hbs +1 -0
  262. package/addon/templates/operations/zones/index.hbs +72 -0
  263. package/addon/templates/operations/zones.hbs +1 -0
  264. package/addon/templates/operations.hbs +1 -0
  265. package/addon/utils/calculate-percentage.js +1 -0
  266. package/addon/utils/extract-coordinates.js +1 -0
  267. package/addon/utils/format-currency.js +1 -0
  268. package/addon/utils/geojson/geo-json.js +17 -0
  269. package/addon/utils/is-facilitator-supported-place.js +14 -0
  270. package/addon/utils/to-model.js +1 -0
  271. package/app/components/cell/driver-name.js +1 -0
  272. package/app/components/custom-field-value.js +1 -0
  273. package/app/components/custom-field.js +1 -0
  274. package/app/components/display-place.js +1 -0
  275. package/app/components/driver-card-mini.js +1 -0
  276. package/app/components/driver-card.js +1 -0
  277. package/app/components/event-timeline/event.js +1 -0
  278. package/app/components/event-timeline.js +1 -0
  279. package/app/components/file-icon.js +1 -0
  280. package/app/components/fleet-driver-listing.js +1 -0
  281. package/app/components/full-calendar/draggable.js +1 -0
  282. package/app/components/full-calendar.js +1 -0
  283. package/app/components/full-size.js +1 -0
  284. package/app/components/global-search.js +1 -0
  285. package/app/components/horizontal-route.js +1 -0
  286. package/app/components/integrated-order-details.js +1 -0
  287. package/app/components/leaflet-draw-control.js +1 -0
  288. package/app/components/leaflet-rotated-marker.js +1 -0
  289. package/app/components/live-map.js +1 -0
  290. package/app/components/map-container/toolbar/zones-panel.js +1 -0
  291. package/app/components/map-container/toolbar-container.js +1 -0
  292. package/app/components/map-container/toolbar.js +1 -0
  293. package/app/components/map-container/topbar.js +1 -0
  294. package/app/components/map-container/view-switch.js +1 -0
  295. package/app/components/map-container.js +1 -0
  296. package/app/components/modals/assign-driver.js +1 -0
  297. package/app/components/modals/clone-config-form.js +1 -0
  298. package/app/components/modals/contact-details.js +1 -0
  299. package/app/components/modals/contact-form.js +1 -0
  300. package/app/components/modals/driver-assign-order.js +1 -0
  301. package/app/components/modals/driver-assign-vehicle.js +1 -0
  302. package/app/components/modals/driver-assign-vendor.js +1 -0
  303. package/app/components/modals/driver-details.js +1 -0
  304. package/app/components/modals/driver-form.js +1 -0
  305. package/app/components/modals/edit-meta-form.js +1 -0
  306. package/app/components/modals/entity-form.js +1 -0
  307. package/app/components/modals/entity-meta-field-prompt.js +1 -0
  308. package/app/components/modals/fleet-details.js +1 -0
  309. package/app/components/modals/fleet-form.js +1 -0
  310. package/app/components/modals/fuel-report-details.js +1 -0
  311. package/app/components/modals/fuel-report-form.js +1 -0
  312. package/app/components/modals/group-details.js +1 -0
  313. package/app/components/modals/group-form.js +1 -0
  314. package/app/components/modals/install-prompt.js +1 -0
  315. package/app/components/modals/map-field-form.js +1 -0
  316. package/app/components/modals/map-field-group-form.js +1 -0
  317. package/app/components/modals/map-layer-form.js +1 -0
  318. package/app/components/modals/meta-field-form.js +1 -0
  319. package/app/components/modals/meta-field-group-form.js +1 -0
  320. package/app/components/modals/new-order-config.js +1 -0
  321. package/app/components/modals/option-prompt.js +1 -0
  322. package/app/components/modals/order-assign-driver.js +1 -0
  323. package/app/components/modals/order-config-new-status.js +1 -0
  324. package/app/components/modals/order-event.js +1 -0
  325. package/app/components/modals/order-form.js +1 -0
  326. package/app/components/modals/order-import.js +1 -0
  327. package/app/components/modals/order-label.js +1 -0
  328. package/app/components/modals/order-meta.js +1 -0
  329. package/app/components/modals/order-new-activity.js +1 -0
  330. package/app/components/modals/order-route-form.js +1 -0
  331. package/app/components/modals/place-assign-vendor.js +1 -0
  332. package/app/components/modals/place-details.js +1 -0
  333. package/app/components/modals/place-form.js +1 -0
  334. package/app/components/modals/point-map.js +1 -0
  335. package/app/components/modals/policy-form.js +1 -0
  336. package/app/components/modals/resend-verification-email.js +1 -0
  337. package/app/components/modals/role-form.js +1 -0
  338. package/app/components/modals/select-payment-method.js +1 -0
  339. package/app/components/modals/service-area-form.js +1 -0
  340. package/app/components/modals/set-password.js +1 -0
  341. package/app/components/modals/uninstall-prompt.js +1 -0
  342. package/app/components/modals/user-form.js +1 -0
  343. package/app/components/modals/vehicle-details.js +1 -0
  344. package/app/components/modals/vehicle-form.js +1 -0
  345. package/app/components/modals/vendor-details.js +1 -0
  346. package/app/components/modals/vendor-form.js +1 -0
  347. package/app/components/modals/view-service-area.js +1 -0
  348. package/app/components/modals/view-zone.js +1 -0
  349. package/app/components/modals/zone-form.js +1 -0
  350. package/app/components/operations-pane/pane.js +1 -0
  351. package/app/components/order/header.js +1 -0
  352. package/app/components/order/place-card.js +1 -0
  353. package/app/components/order/schedule-card.js +1 -0
  354. package/app/components/order/sub-header/item.js +1 -0
  355. package/app/components/order/sub-header.js +1 -0
  356. package/app/components/order-config/activity-flow-editor.js +1 -0
  357. package/app/components/order-config/details-editor.js +1 -0
  358. package/app/components/order-config/entities-editor.js +1 -0
  359. package/app/components/order-config/fields-editor.js +1 -0
  360. package/app/components/order-config/selector.js +1 -0
  361. package/app/components/order-config.js +1 -0
  362. package/app/components/order-list-overlay/driver-panel-title.js +1 -0
  363. package/app/components/order-list-overlay/order.js +1 -0
  364. package/app/components/order-list-overlay.js +1 -0
  365. package/app/components/route-list.js +1 -0
  366. package/app/components/settings-window.js +1 -0
  367. package/app/components/split-grid.js +1 -0
  368. package/app/components/widget/issues.js +1 -0
  369. package/app/components/widget/key-metrics.js +1 -0
  370. package/app/components/widget/live-order-map.js +1 -0
  371. package/app/components/widget/recent-orders.js +1 -0
  372. package/app/components/widget/recommended-todo.js +1 -0
  373. package/app/components/widget/transaction-earnings.js +1 -0
  374. package/app/components/widget/transactions.js +1 -0
  375. package/app/components/widget/weekly-orders.js +1 -0
  376. package/app/controllers/application.js +1 -0
  377. package/app/controllers/management/contacts/index.js +1 -0
  378. package/app/controllers/management/drivers/index/details.js +1 -0
  379. package/app/controllers/management/drivers/index.js +1 -0
  380. package/app/controllers/management/fleets/index/details.js +1 -0
  381. package/app/controllers/management/fleets/index.js +1 -0
  382. package/app/controllers/management/fuel-reports/index.js +1 -0
  383. package/app/controllers/management/issues/index.js +1 -0
  384. package/app/controllers/management/places/index.js +1 -0
  385. package/app/controllers/management/vehicles/index.js +1 -0
  386. package/app/controllers/management/vendors/index/details/remarks.js +1 -0
  387. package/app/controllers/management/vendors/index/details.js +1 -0
  388. package/app/controllers/management/vendors/index.js +1 -0
  389. package/app/controllers/management.js +1 -0
  390. package/app/controllers/operations/orders/index/config/types.js +1 -0
  391. package/app/controllers/operations/orders/index/config.js +1 -0
  392. package/app/controllers/operations/orders/index/new.js +1 -0
  393. package/app/controllers/operations/orders/index/view.js +1 -0
  394. package/app/controllers/operations/scheduler/index.js +1 -0
  395. package/app/controllers/operations/service-rates/index/edit.js +1 -0
  396. package/app/controllers/operations/service-rates/index/new.js +1 -0
  397. package/app/controllers/operations/service-rates/index.js +1 -0
  398. package/app/controllers/operations/zones/index.js +1 -0
  399. package/app/helpers/avatar-url.js +1 -0
  400. package/app/helpers/extract-coordinates.js +1 -0
  401. package/app/helpers/feature-group.js +1 -0
  402. package/app/helpers/flow-raw-status.js +1 -0
  403. package/app/helpers/format-point.js +1 -0
  404. package/app/helpers/get-tip-amount.js +1 -0
  405. package/app/helpers/is-facilitator-supported-place.js +1 -0
  406. package/app/helpers/is-not-facilitator-supported-place.js +1 -0
  407. package/app/helpers/is-waypoint-record.js +1 -0
  408. package/app/helpers/point-coordinates.js +1 -0
  409. package/app/helpers/point-to-coordinates.js +1 -0
  410. package/app/helpers/service-name.js +1 -0
  411. package/app/helpers/waypoint-label.js +1 -0
  412. package/app/modifiers/translate-x.js +1 -0
  413. package/app/routes/home.js +1 -0
  414. package/app/routes/management/fleets/index/details.js +1 -0
  415. package/app/routes/operations/orders/index/config/types.js +1 -0
  416. package/app/routes/operations/orders/index/config.js +1 -0
  417. package/app/routes/operations/orders/index/new.js +1 -0
  418. package/app/routes/operations/orders/index/view.js +1 -0
  419. package/app/routes/operations/scheduler/index.js +1 -0
  420. package/app/routes/operations/scheduler.js +1 -0
  421. package/app/routes/operations/service-rates/index/edit.js +1 -0
  422. package/app/routes/operations/service-rates/index/new.js +1 -0
  423. package/app/services/map-manager.js +1 -0
  424. package/app/services/service-areas.js +1 -0
  425. package/app/templates/home.js +1 -0
  426. package/app/templates/management/fleets/index/details.js +1 -0
  427. package/app/templates/operations/orders/index/config/types.js +1 -0
  428. package/app/templates/operations/orders/index/config.js +1 -0
  429. package/app/templates/operations/orders/index/new.js +1 -0
  430. package/app/templates/operations/orders/index/view.js +1 -0
  431. package/app/templates/operations/scheduler/index.js +1 -0
  432. package/app/templates/operations/scheduler.js +1 -0
  433. package/app/templates/operations/service-rates/index/edit.js +1 -0
  434. package/app/templates/operations/service-rates/index/new.js +1 -0
  435. package/app/utils/calculate-percentage.js +1 -0
  436. package/app/utils/extract-coordinates.js +1 -0
  437. package/app/utils/format-currency.js +1 -0
  438. package/app/utils/geojson/geo-json.js +1 -0
  439. package/app/utils/is-facilitator-supported-place.js +1 -0
  440. package/app/utils/is-latitude.js +1 -0
  441. package/app/utils/to-model.js +1 -0
  442. package/assets/images/drawing-controls-spritesheet-inverted.png +0 -0
  443. package/config/environment.js +25 -0
  444. package/index.js +73 -0
  445. package/package.json +132 -0
  446. package/pnpm-lock.yaml +12613 -0
@@ -0,0 +1,77 @@
1
+ <Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
2
+ <div class="modal-body-container">
3
+ {{#if @options.isIntegratedVendor}}
4
+ <div class="integrated-vendor-button border-0 mb-4">
5
+ <div>
6
+ <img src={{@options.vendor.provider_settings.logo}} alt={{@options.vendor.provider_settings.code}} class="w-20 h-20" width="80" height="80" />
7
+ </div>
8
+ <div>
9
+ <h3 class="text-sm font-semibold dark:text-white">{{@options.vendor.provider_settings.name}}</h3>
10
+ </div>
11
+ </div>
12
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-2 text-xs dark:text-gray-100">
13
+ <div class="field-info-container">
14
+ <div class="field-name">Sandbox</div>
15
+ <div class="field-value">{{if @options.vendor.sandbox "Yes" "No"}}</div>
16
+ </div>
17
+ <div class="field-info-container">
18
+ <div class="field-name">Host</div>
19
+ <div class="field-value">{{n-a @options.vendor.host}}</div>
20
+ </div>
21
+ <div class="field-info-container">
22
+ <div class="field-name">Namespace</div>
23
+ <div class="field-value">{{n-a @options.vendor.namespace}}</div>
24
+ </div>
25
+ {{#if (is-object @options.vendor.options)}}
26
+ {{#each-in @options.vendor.options as |key value|}}
27
+ <div class="field-info-container">
28
+ <div class="field-name">{{smart-humanize key}}</div>
29
+ <div class="field-value">{{n-a value}}</div>
30
+ </div>
31
+ {{/each-in}}
32
+ {{/if}}
33
+ </div>
34
+ {{else}}
35
+ <div class="grid grid-cols-3 md:grid-cols-2 gap-2 text-xs dark:text-gray-100">
36
+ <div class="field-info-container">
37
+ <div class="field-name">Name</div>
38
+ <div class="field-value">{{n-a @options.vendor.name}}</div>
39
+ </div>
40
+
41
+ <div class="field-info-container">
42
+ <div class="field-name">Email</div>
43
+ <div class="field-value">{{n-a @options.vendor.email}}</div>
44
+ </div>
45
+
46
+ <div class="field-info-container">
47
+ <div class="field-name">Phone</div>
48
+ <div class="field-value">{{n-a @options.vendor.phone}}</div>
49
+ </div>
50
+
51
+ <div class="field-info-container">
52
+ <div class="field-name">Website URL</div>
53
+ <div class="field-value">{{n-a @options.vendor.website_url}}</div>
54
+ </div>
55
+
56
+ <div class="field-info-container">
57
+ <div class="field-name">Country</div>
58
+ <div class="field-value">
59
+ <CountryName @country={{@options.vendor.country}} @showFlag={{true}} />
60
+ </div>
61
+ </div>
62
+
63
+ <div class="field-info-container">
64
+ <div class="field-name">Status</div>
65
+ <div class="field-value">
66
+ <Badge @status={{@options.vendor.status}} />
67
+ </div>
68
+ </div>
69
+
70
+ <div class="field-info-container">
71
+ <div class="field-name">Address</div>
72
+ <div class="field-value">{{n-a @options.vendor.address}}</div>
73
+ </div>
74
+ </div>
75
+ {{/if}}
76
+ </div>
77
+ </Modal::Default>
@@ -0,0 +1,168 @@
1
+ <Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
2
+ <div class="modal-body-container">
3
+ {{#if @options.action}}
4
+ <InputGroup>
5
+ <div class="space-x-4 flex">
6
+ <button type="button" class="outline-none flex-1 rounded-lg bg-white dark:bg-gray-900 border-2 border-transparent px-4 py-2 flex items-center justify-center {{if (eq @options.action "select") 'border-blue-500'}}" {{on "click" (fn (mut @options.action) "select")}}>
7
+ <div class="mr-2.5">
8
+ <FaIcon @icon="handshake" @size="xl" class="text-blue-500" />
9
+ </div>
10
+ <div>
11
+ <h3 class="text-gray-900 dark:text-gray-100">Choose Integrated Vendor</h3>
12
+ </div>
13
+ </button>
14
+ <button type="button" class="outline-none flex-1 rounded-lg bg-white dark:bg-gray-900 border-2 border-transparent px-4 py-2 flex items-center justify-center {{if (eq @options.action "create") 'border-blue-500'}}" {{on "click" (fn (mut @options.action) "create")}}>
15
+ <div class="mr-2.5">
16
+ <FaIcon @icon="building" @size="xl" class="text-blue-500" />
17
+ </div>
18
+ <div>
19
+ <h3 class="text-gray-900 dark:text-gray-100">Create Custom Vendor</h3>
20
+ </div>
21
+ </button>
22
+ </div>
23
+ </InputGroup>
24
+ {{/if}}
25
+
26
+ {{#if (eq @options.action "select")}}
27
+ <div class="grid grid-cols-2 gap-4 lg:grid-cols-3 mb-4">
28
+ {{#each @options.supportedIntegratedVendors as |integratedVendor|}}
29
+ <button type="button" class="integrated-vendor-button {{if (eq @options.selectedIntegratedVendor.code integratedVendor.code) 'selected'}}" {{on "click" (fn @options.selectIntegratedVendor integratedVendor)}}>
30
+ <div>
31
+ <img src={{integratedVendor.logo}} alt={{integratedVendor.code}} class="w-20 h-20" width="80" height="80" />
32
+ </div>
33
+ <div>
34
+ <h3 class="text-sm font-semibold dark:text-white">{{integratedVendor.name}}</h3>
35
+ </div>
36
+ </button>
37
+ {{/each}}
38
+ </div>
39
+
40
+ {{#if @options.selectedIntegratedVendor}}
41
+ <div class="mb-2">
42
+ <label class="mb-2 block dark:text-gray-400 text-xs">Credentials</label>
43
+ {{#each @options.selectedIntegratedVendor.credential_params as |param|}}
44
+ <InputGroup @name={{smart-humanize param.key}} @value={{mut (get @options.integratedVendor.credentials param.key)}} @helpText={{concat "Optionally supply your own " (smart-humanize param.key) " to configure this vendor."}} />
45
+ {{/each}}
46
+ </div>
47
+ <div class="mb-2">
48
+ <label class="mb-2 block dark:text-gray-400 text-xs">Options</label>
49
+ {{#each @options.selectedIntegratedVendor.option_params as |param|}}
50
+ {{#if param.options}}
51
+ <InputGroup @name={{smart-humanize param.key}}>
52
+ <Select @value={{mut (get @options.integratedVendor.options param.key)}} @options={{param.options}} @optionValue={{param.optionValue}} @optionLabel={{param.optionLabel}} @humanize={{true}} @placeholder={{concat "Select " (smart-humanize param.key)}} @onSelect={{fn (mut (get @options.integratedVendor.options param.key))}} />
53
+ </InputGroup>
54
+ {{else}}
55
+ <InputGroup @name={{smart-humanize param.key}} @value={{mut (get @options.integratedVendor.options param.key)}} @helpText={{concat "Optionally supply your own " (smart-humanize param.key) " to configure this vendor."}} />
56
+ {{/if}}
57
+ {{/each}}
58
+ </div>
59
+ <InputGroup @wrapperClass="mb-2">
60
+ <Checkbox @value={{@options.integratedVendor.sandbox}} @label="Sandbox" @onToggle={{fn (mut @options.integratedVendor.sandbox)}} @alignItems="center" @labelClass="mb-0i" />
61
+ </InputGroup>
62
+ <div>
63
+ <button type="button" class="btn-link text-xs outline-none text-blue-600 hover:text-blue-600 mb-3" {{on "click" @options.toggleAdvancedOptions}}>
64
+ {{#if @options.showAdvancedOptions}}
65
+ <span>Hide Advanced</span>
66
+ {{else}}
67
+ <span>Show Advanced</span>
68
+ {{/if}}
69
+ </button>
70
+ {{#if @options.showAdvancedOptions}}
71
+ <InputGroup @name="Custom Host" @value={{@options.integratedVendor.host}} @helpText="Optionally provide a custom host that should be used for this integration." />
72
+ <InputGroup @name="Custom Namespace" @value={{@options.integratedVendor.namespace}} @helpText="Optionally provide a custom namespace or api version that should be used for the integration." />
73
+ <InputGroup @name="Webhook URL" @value={{@options.integratedVendor.webhook_url}} @helpText="Integrated vendors will typically require this so that Fleetbase can receive activity updates on the order. Do not change unless you know what you are doing! Changing this may break your order updates!" />
74
+ {{/if}}
75
+ </div>
76
+ {{/if}}
77
+ {{else}}
78
+ {{#if @options.isIntegratedVendor}}
79
+ <div class="integrated-vendor-button border-0 mb-4">
80
+ <div>
81
+ <img src={{@options.vendor.provider_settings.logo}} alt={{@options.vendor.provider_settings.code}} class="w-20 h-20" width="80" height="80" />
82
+ </div>
83
+ <div>
84
+ <h3 class="text-sm font-semibold dark:text-white">{{@options.vendor.provider_settings.name}}</h3>
85
+ </div>
86
+ </div>
87
+ <div class="mb-2">
88
+ <label class="mb-2 block dark:text-gray-400 text-xs">Credentials</label>
89
+ {{#if @options.isEditingCredentials}}
90
+ {{#each @options.vendor.provider_settings.credential_params as |param|}}
91
+ <InputGroup @name={{smart-humanize param.key}} @value={{mut (get @options.vendor.credentials param.key)}} @helpText={{concat "Optionally supply your own " (smart-humanize param.key) " to configure this vendor."}} />
92
+ {{/each}}
93
+ <div class="my-4">
94
+ <Button @text="Cancel credentials reset" @type="danger" @size="sm" @icon="times" @onClick={{fn @options.toggleCredentialsReset}} />
95
+ </div>
96
+ {{else}}
97
+ <div>
98
+ <div class="rounded-md border border-blue-300 dark:border-blue-600 bg-blue-100 dark:bg-blue-500 text-blue-900 dark:text-white text-sm px-4 py-2 mb-4">
99
+ <p class="mb-2">Sensitive credentials can only be reset, to update credentials you must re-enter the credentials.</p>
100
+ <Button @type="default" @size="xs" @icon="repeat" @text="Click here to reset" @onClick={{fn @options.toggleCredentialsReset}} />
101
+ </div>
102
+ </div>
103
+ {{#each @options.vendor.provider_settings.credential_params as |param|}}
104
+ <InputGroup @name={{smart-humanize param.key}} @value="*********" @disabled="true" @helpText={{concat "Optionally supply your own " (smart-humanize param.key) " to configure this vendor."}} />
105
+ {{/each}}
106
+ {{/if}}
107
+ </div>
108
+ <div class="mb-2">
109
+ <label class="mb-2 block dark:text-gray-400 text-xs">Options</label>
110
+ {{#each @options.vendor.provider_settings.option_params as |param|}}
111
+ {{#if param.options}}
112
+ <InputGroup @name={{smart-humanize param.key}}>
113
+ <Select @value={{mut (get @options.vendor.options param.key)}} @options={{param.options}} @optionValue={{param.optionValue}} @optionLabel={{param.optionLabel}} @humanize={{true}} @placeholder={{concat "Select " (smart-humanize param.key)}} @onSelect={{fn (mut (get @options.vendor.options param.key))}} />
114
+ </InputGroup>
115
+ {{else}}
116
+ <InputGroup @name={{smart-humanize param.key}} @value={{mut (get @options.vendor.options param.key)}} @helpText={{concat "Optionally supply your own " (smart-humanize param.key) " to configure this vendor."}} />
117
+ {{/if}}
118
+ {{/each}}
119
+ </div>
120
+ <InputGroup @wrapperClass="mb-2">
121
+ <Checkbox @value={{@options.vendor.sandbox}} @label="Sandbox" @onToggle={{fn (mut @options.vendor.sandbox)}} @alignItems="center" @labelClass="mb-0i" />
122
+ </InputGroup>
123
+ <div>
124
+ <button type="button" class="btn-link text-xs outline-none text-blue-600 hover:text-blue-600 mb-3" {{on "click" @options.toggleAdvancedOptions}}>
125
+ {{#if @options.showAdvancedOptions}}
126
+ <span>Hide Advanced</span>
127
+ {{else}}
128
+ <span>Show Advanced</span>
129
+ {{/if}}
130
+ </button>
131
+ {{#if @options.showAdvancedOptions}}
132
+ <InputGroup @name="Custom Host" @value={{@options.vendor.host}} @helpText="Optionally provide a custom host that should be used for this integration." />
133
+ <InputGroup @name="Custom Namespace" @value={{@options.vendor.namespace}} @helpText="Optionally provide a custom namespace or api version that should be used for the integration." />
134
+ <InputGroup @name="Webhook URL" @value={{@options.vendor.webhook_url}} @helpText="Integrated vendors will typically require this so that Fleetbase can receive activity updates on the order. Do not change unless you know what you are doing! Changing this may break your order updates!" />
135
+ {{/if}}
136
+ </div>
137
+ {{else}}
138
+ <div class="grid lg:grid-cols-2 grid-cols-1 gap-2 text-xs dark:text-gray-100">
139
+ <InputGroup @name="Name" @value={{@options.vendor.name}} @wrapperClass="mb-0" @helpText="The vendor's name, typically the name of a business." />
140
+ <InputGroup @name="Email" @type="email" @value={{@options.vendor.email}} @wrapperClass="mb-0" @helpText="The vendor's email, this can be used to trigger emails to the vendor." />
141
+ <InputGroup @name="Phone" @type="tel" @value={{@options.vendor.phone}} @wrapperClass="mb-0" @helpText="The vendor's phone #, this can be used to trigger SMS or messages to the vendor." />
142
+ <InputGroup @name="Website" @value={{@options.vendor.website}} @wrapperClass="mb-0" @helpText="The vendor's website, optionally add the vendors website for reference." />
143
+ <InputGroup @wrapperClass="mb-0 col-span-2">
144
+ <div class="flex items-start justify-between">
145
+ <label>
146
+ Address
147
+ </label>
148
+ <div class="mb-1.5 flex flex-row">
149
+ {{#if @options.vendor.has_place}}
150
+ <Button @type="default" @size="xs" @icon="edit" @text="Edit" @onClick={{fn @options.editAddress}} />
151
+ {{/if}}
152
+ <Button @type="default" @size="xs" @icon="plus" @text="New" @onClick={{fn @options.newAddress}} />
153
+ </div>
154
+ </div>
155
+
156
+ <ModelSelect @modelName="place" @selectedModel={{@options.vendor.place}} @placeholder="Select Address" @triggerClass="form-select form-input" @infiniteScroll={{false}} @renderInPlace={{true}} @onChange={{fn @options.selectAddress}} as |model|>
157
+ {{model.name}} - {{model.street1}}
158
+ </ModelSelect>
159
+ </InputGroup>
160
+
161
+ <InputGroup @name="Country" @wrapperClass="mb-0">
162
+ <CountrySelect class="w-full form-input form-select form-datalist" @value={{@options.vendor.country}} @onChange={{fn (mut @options.vendor.country)}} placeholder="Country" />
163
+ </InputGroup>
164
+ </div>
165
+ {{/if}}
166
+ {{/if}}
167
+ </div>
168
+ </Modal::Default>
@@ -0,0 +1,12 @@
1
+ <Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
2
+ <div class="next-map-container">
3
+ <LeafletMap class="h-screen-65 w-full {{@options.mapClass}}" @lat={{this.latitude}} @lng={{this.longitude}} @zoom={{11}} @zoomControl={{false}} @onLoad={{this.setupMap}} ...attributes as |layers|>
4
+ <layers.tile @url={{this.tileSourceUrl}} />
5
+ {{#if @options.serviceArea}}
6
+ <layers.polygon @id={{@options.serviceArea.id}} @record={{@options.serviceArea}} @locations={{@options.serviceArea.bounds}} @fillColor={{@options.serviceArea.color}} @color={{@options.serviceArea.stroke_color}} @onAdd={{fn this.onServiceAreaAdded @options.serviceArea}} as |polygon|>
7
+ <polygon.tooltip @permanent={{true}} @sticky={{true}}>{{@options.serviceArea.name}} Service Area</polygon.tooltip>
8
+ </layers.polygon>
9
+ {{/if}}
10
+ </LeafletMap>
11
+ </div>
12
+ </Modal::Default>
@@ -0,0 +1,12 @@
1
+ <Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
2
+ <div class="next-map-container">
3
+ <LeafletMap class="h-screen-65 w-full {{@options.mapClass}}" @lat={{this.latitude}} @lng={{this.longitude}} @zoom={{11}} @zoomControl={{false}} @onLoad={{this.setupMap}} ...attributes as |layers|>
4
+ <layers.tile @url={{this.tileSourceUrl}} />
5
+ {{#if @options.zone}}
6
+ <layers.polygon @id={{@options.zone.id}} @record={{@options.zone}} @locations={{@options.zone.locations}} @fillColor={{@options.zone.color}} @color={{@options.zone.stroke_color}} @onAdd={{fn this.onZoneAdded @options.zone}} as |polygon|>
7
+ <polygon.tooltip @permanent={{true}} @sticky={{true}}>{{@options.zone.name}} Zone</polygon.tooltip>
8
+ </layers.polygon>
9
+ {{/if}}
10
+ </LeafletMap>
11
+ </div>
12
+ </Modal::Default>
@@ -0,0 +1,16 @@
1
+ <Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
2
+ <div class="modal-body-container">
3
+ <div class="input-group">
4
+ <InputLabel @labelText="Zone Name" @helpText="Set a display name for the zone." @required={{true}} />
5
+ <Input @value={{@options.zone.name}} type="text" class="w-full form-input" placeholder="Zone Name" />
6
+ </div>
7
+
8
+ <InputGroup @type="color" @value={{@options.zone.stroke_color}} @name="Zone Border Color" @helpText="Customize the border color for this zone." class="p-0 border-0 m-0 w-8 h-8 bg-transparent rounded-none" />
9
+ <InputGroup @type="color" @value={{@options.zone.color}} @name="Zone Color" @helpText="Customize the fill color for this zone." class="p-0 border-0 m-0 w-8 h-8 bg-transparent rounded-none" />
10
+
11
+ <div class="input-group">
12
+ <InputLabel @labelText="Zone Name" @helpText="Optionally give the zone a description." />
13
+ <Textarea @value={{@options.zone.description}} rows={{3}} type="text" class="w-full form-input" placeholder="Description of Zone" />
14
+ </div>
15
+ </div>
16
+ </Modal::Default>
@@ -0,0 +1 @@
1
+ <div class="operations-pane hidden" ...attributes>{{yield}}</div>
@@ -0,0 +1,48 @@
1
+ <div class="px-3 py-4 border-b border-gray-900 order-view-header">
2
+ <div class="flex items-start justify-between">
3
+ <div class="flex items-start flex-1">
4
+ <Button @text="Back" @onClick={{@onBackButtonClick}} class="mr-3" />
5
+ <div>
6
+ <h1 class="mb-1 text-gray-700 dark:text-gray-100">
7
+ {{@order.public_id}}
8
+ </h1>
9
+ <div class="flex flex-row">
10
+ <Badge @status={{@order.status}} @helpText={{if (eq @order.status "dispatched") (concat "Dispatched at " @order.dispatchedAt)}} />
11
+ {{#if @order.shouldDisplayDispatchLabel}}
12
+ <Badge @status="info" class="ml-2" @helpText="Dispatched at {{@order.dispatchedAt}}">Dispatched</Badge>
13
+ {{/if}}
14
+ </div>
15
+ </div>
16
+ </div>
17
+ <div class="flex">
18
+ {{#if @order.canBeDispatched}}
19
+ <Button @type="primary" @icon="paper-plane" @text="Dispatch" class="mr-2" @onClick={{fn this.forwardAction "dispatchOrder"}} />
20
+ {{/if}}
21
+ <DropdownButton @icon="ellipsis-h" @contentClass="dropdown-menu" as |dd|>
22
+ <div class="dropdown-menu-content context-menu">
23
+ <a href="#" class="dropdown-menu-item" {{on "click" (fn this.forwardAction "editOrder" dd)}}>
24
+ Edit Details
25
+ </a>
26
+ <a href="#" class="dropdown-menu-item" {{on "click" (fn this.forwardAction "createNewActivity" dd)}}>
27
+ Update Activity
28
+ </a>
29
+ <a href="#" class="dropdown-menu-item" {{on "click" (fn this.forwardAction "assignDriver" dd)}}>
30
+ Assign Driver
31
+ </a>
32
+ <a href="#" class="dropdown-menu-item" {{on "click" (fn this.forwardAction "viewOrderLabel" dd)}}>
33
+ Get Order Label
34
+ </a>
35
+ {{!-- <a href="#" class="dropdown-menu-item" {{on "click" (fn this.forwardAction "splitOrder" dd)}}>
36
+ Split Order
37
+ </a> --}}
38
+ {{!-- <a href="#" class="dropdown-menu-item" {{on "click" (fn this.forwardAction "splitOrder" dd)}}>
39
+ Reschedule Order
40
+ </a> --}}
41
+ <a href="#" class="dropdown-menu-item" {{on "click" (fn this.forwardAction "cancelOrder" dd)}}>
42
+ Cancel Order
43
+ </a>
44
+ </div>
45
+ </DropdownButton>
46
+ </div>
47
+ </div>
48
+ </div>
@@ -0,0 +1,26 @@
1
+ import Component from '@glimmer/component';
2
+ import { action } from '@ember/object';
3
+ import { classify } from '@ember/string';
4
+ import isFunction from '@fleetbase/ember-core/utils/is-function';
5
+
6
+ export default class OrderHeaderComponent extends Component {
7
+ /**
8
+ * Forwards action up the component via callback arguments
9
+ *
10
+ * @param {String} forwardedAction the name of the action to send up
11
+ * @void
12
+ */
13
+ @action
14
+ forwardAction(forwardedAction, dd) {
15
+ const { order } = this.args;
16
+ const actionName = `on${classify(forwardedAction)}`;
17
+
18
+ if (dd && isFunction(dd.actions.close)) {
19
+ dd.actions.close();
20
+ }
21
+
22
+ if (typeof this.args[actionName] === 'function') {
23
+ this.args[actionName](order);
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,51 @@
1
+ <div class="place-card" ...attributes>
2
+ <span class={{@titleClass}}>
3
+ {{@title}}
4
+ </span>
5
+ <div class="place-name">
6
+ {{@place.name @place.street1}}
7
+ </div>
8
+ <div class="place-street1 {{if this.noTitle "hidden"}}">
9
+ {{@place.street1}}
10
+ </div>
11
+ <div class="place-street2 {{unless @place.street2 "hidden"}}">
12
+ {{@place.street2}}
13
+ </div>
14
+ <div class="flex flex-row place-location">
15
+ <div class="place-city {{unless @place.city "hidden"}}">
16
+ {{@place.city}}
17
+ </div>
18
+ <div class="place-province {{unless @place.province "hidden"}}">
19
+ {{@place.province}}
20
+ </div>
21
+ <div class="place-postalcode {{unless @place.postal_code "hidden"}}">
22
+ {{@place.postal_code}}
23
+ </div>
24
+ </div>
25
+ <div class="place-country {{unless @place.country "hidden"}}">
26
+ {{@place.country}}
27
+ </div>
28
+
29
+ {{#if @place.metadata}}
30
+ <Button @size="xs" @onClick={{this.showMeta}} class="my-2">
31
+ {{#if this.showingMeta}}
32
+ Show less details
33
+ {{else}}
34
+ Show more details
35
+ {{/if}}
36
+ </Button>
37
+ {{#if this.showingMeta}}
38
+ {{#each-in @place.metadata as |key value|}}
39
+ <div class="place-meta">
40
+ <div class="place-meta-key">
41
+ {{humanize key}}:
42
+ </div>
43
+ <div class="place-meta-value">
44
+ {{value}}
45
+ </div>
46
+ </div>
47
+ {{/each-in}}
48
+ {{/if}}
49
+ {{/if}}
50
+ </div>
51
+ {{yield}}
@@ -0,0 +1,33 @@
1
+ import Component from '@glimmer/component';
2
+ import { tracked } from '@glimmer/tracking';
3
+ import { computed, get, action } from '@ember/object';
4
+
5
+ export default class OrderPlaceCardComponent extends Component {
6
+ /**
7
+ * Flag to state if place has no name or street1
8
+ *
9
+ * @var {Boolean}
10
+ */
11
+ @computed('args.place.{name,street1}')
12
+ get noTitle() {
13
+ // eslint-disable-next-line ember/no-get
14
+ return !get(this, 'args.place.name') || !get(this, 'args.place.street1');
15
+ }
16
+
17
+ /**
18
+ * Action to toggle `showingMeta` flag
19
+ *
20
+ * @void
21
+ */
22
+ @action
23
+ showMeta() {
24
+ this.showingMeta = this.showingMeta ? false : true;
25
+ }
26
+
27
+ /**
28
+ * Whether or not to display meta
29
+ *
30
+ * @var {Boolean}
31
+ */
32
+ @tracked showingMeta = false;
33
+ }
@@ -0,0 +1,35 @@
1
+ <div class="order-schedule-card border border-gray-200 dark:border-gray-700" {{did-insert this.setupComponent}} ...attributes>
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
+ <span>{{@order.public_id}}</span>
4
+ <div>
5
+ <Badge @status={{@order.status}} />
6
+ </div>
7
+ </a>
8
+ <div class="{{@contentClass}} card-content bg-white dark:bg-gray-900 text-sm space-y-2">
9
+ <div class="flex items-center justify-between">
10
+ <div>
11
+ <FaIcon @icon="calendar" class="mr-2" />
12
+ <span class="font-semibold">Date scheduled</span>
13
+ </div>
14
+ <span>{{@order.scheduledAt}}</span>
15
+ </div>
16
+ <div class="flex items-center justify-between">
17
+ <div>
18
+ <FaIcon @icon="calendar" class="mr-2" />
19
+ <span class="font-semibold">Date created</span>
20
+ </div>
21
+ <span>{{@order.createdAtWithTime}}</span>
22
+ </div>
23
+ <div class="flex items-center justify-between">
24
+ <div>
25
+ <FaIcon @icon="calendar" class="mr-2" />
26
+ <span class="font-semibold">Driver Assigned</span>
27
+ </div>
28
+ <span>{{@order.driver_assigned.name "None"}}</span>
29
+ </div>
30
+ <div class="z-20 relative">
31
+ <RouteList @order={{@order}} />
32
+ </div>
33
+ </div>
34
+ {{yield}}
35
+ </div>
@@ -0,0 +1,17 @@
1
+ import Component from '@glimmer/component';
2
+ import { action } from '@ember/object';
3
+
4
+ export default class OrderScheduleCardComponent extends Component {
5
+ @action setupComponent() {
6
+ const { order } = this.args;
7
+
8
+ order?.loadDriver();
9
+ order?.loadPayload();
10
+ }
11
+
12
+ @action onTitleClick(order) {
13
+ if (typeof this.args.onTitleClick === 'function') {
14
+ this.args.onTitleClick(order);
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,16 @@
1
+ <div class="order-subheader-item" ...attributes>
2
+ <div class="flex flex-row items-center justify-between px-3">
3
+ <div class="flex flex-col flex-1">
4
+ <span class="text-xs font-semibold uppercase dark:text-gray-200">
5
+ {{@name}}
6
+ </span>
7
+ <span class="w-11/12 text-sm font-bold truncate dark:text-gray-300">
8
+ {{@value}}
9
+ </span>
10
+ </div>
11
+ <div>
12
+ <FaIcon @icon={{@icon}} @size="lg" class="dark:text-gray-300" />
13
+ </div>
14
+ {{yield}}
15
+ </div>
16
+ </div>
@@ -0,0 +1,3 @@
1
+ <div class="flex flex-row items-center w-full px-2 py-5 bg-gray-900 justify-evenly">
2
+ {{yield}}
3
+ </div>