@fleetbase/fleetops-engine 0.3.1 → 0.3.2

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 (234) hide show
  1. package/addon/components/contact-form-panel.hbs +82 -0
  2. package/addon/components/contact-form-panel.js +195 -0
  3. package/addon/components/contact-panel/details.hbs +36 -0
  4. package/addon/components/contact-panel/details.js +3 -0
  5. package/addon/components/contact-panel.hbs +52 -0
  6. package/addon/components/contact-panel.js +161 -0
  7. package/addon/components/driver-form-panel.hbs +39 -55
  8. package/addon/components/driver-form-panel.js +41 -0
  9. package/addon/components/driver-panel/details.hbs +2 -2
  10. package/addon/components/driver-panel.hbs +12 -10
  11. package/addon/components/driver-panel.js +13 -0
  12. package/addon/components/fleet-form-panel.hbs +28 -28
  13. package/addon/components/fleet-form-panel.js +150 -1
  14. package/addon/components/fleet-listing-panel.hbs +8 -0
  15. package/addon/components/fleet-listing-panel.js +34 -0
  16. package/addon/components/fleet-panel/details.hbs +30 -0
  17. package/addon/components/fleet-panel/driver-listing.hbs +72 -0
  18. package/addon/components/fleet-panel/driver-listing.js +149 -0
  19. package/addon/components/fleet-panel/vehicle-listing.hbs +72 -0
  20. package/addon/components/fleet-panel/vehicle-listing.js +149 -0
  21. package/addon/components/fleet-panel.hbs +12 -58
  22. package/addon/components/fleet-panel.js +148 -26
  23. package/addon/components/fleet-vehicle-listing.hbs +0 -1
  24. package/addon/components/fuel-report-form-panel.hbs +41 -0
  25. package/addon/components/fuel-report-form-panel.js +122 -0
  26. package/addon/components/fuel-report-panel/details.hbs +38 -0
  27. package/addon/components/fuel-report-panel.hbs +30 -0
  28. package/addon/components/fuel-report-panel.js +161 -0
  29. package/addon/components/issue-form-panel.hbs +85 -0
  30. package/addon/components/issue-form-panel.js +211 -0
  31. package/addon/components/issue-panel/details.hbs +48 -0
  32. package/addon/components/issue-panel.hbs +30 -0
  33. package/addon/components/issue-panel.js +160 -0
  34. package/addon/components/layout/fleet-ops-sidebar.hbs +2 -2
  35. package/addon/components/live-map.js +2 -0
  36. package/addon/components/map-container/toolbar.hbs +9 -9
  37. package/addon/components/map-container/topbar.hbs +1 -1
  38. package/addon/components/modals/issue-details.hbs +38 -0
  39. package/addon/components/modals/issue-from.hbs +138 -0
  40. package/addon/components/place-form-panel.hbs +50 -0
  41. package/addon/components/place-form-panel.js +134 -0
  42. package/addon/components/place-panel/details.hbs +95 -0
  43. package/addon/components/place-panel.hbs +30 -0
  44. package/addon/components/place-panel.js +161 -0
  45. package/addon/components/vehicle-form-panel.hbs +35 -44
  46. package/addon/components/vehicle-form-panel.js +41 -0
  47. package/addon/components/vehicle-panel/details.hbs +8 -2
  48. package/addon/components/vehicle-panel.hbs +8 -6
  49. package/addon/components/vendor-form-panel/create-form.hbs +114 -0
  50. package/addon/components/vendor-form-panel/create-form.js +158 -0
  51. package/addon/components/vendor-form-panel/edit-form.hbs +98 -0
  52. package/addon/components/vendor-form-panel/edit-form.js +51 -0
  53. package/addon/components/vendor-form-panel.hbs +48 -0
  54. package/addon/components/vendor-form-panel.js +226 -0
  55. package/addon/components/vendor-panel/details.hbs +77 -0
  56. package/addon/components/vendor-panel/details.js +12 -0
  57. package/addon/components/vendor-panel.hbs +58 -0
  58. package/addon/components/vendor-panel.js +161 -0
  59. package/addon/controllers/management/contacts/index/details.js +55 -0
  60. package/addon/controllers/management/contacts/index/edit.js +111 -0
  61. package/addon/controllers/management/contacts/index/new.js +88 -0
  62. package/addon/controllers/management/contacts/index.js +23 -128
  63. package/addon/controllers/management/drivers/index/new.js +2 -2
  64. package/addon/controllers/management/drivers/index.js +18 -32
  65. package/addon/controllers/management/fleets/index/details.js +53 -0
  66. package/addon/controllers/management/fleets/index/edit.js +75 -41
  67. package/addon/controllers/management/fleets/index/new.js +42 -57
  68. package/addon/controllers/management/fleets/index.js +0 -1
  69. package/addon/controllers/management/fuel-reports/index/details.js +63 -0
  70. package/addon/controllers/management/fuel-reports/index/edit.js +111 -0
  71. package/addon/controllers/management/fuel-reports/index/new.js +95 -0
  72. package/addon/controllers/management/fuel-reports/index.js +57 -127
  73. package/addon/controllers/management/issues/index/details.js +54 -0
  74. package/addon/controllers/management/issues/index/edit.js +111 -0
  75. package/addon/controllers/management/issues/index/new.js +94 -0
  76. package/addon/controllers/management/issues/index.js +131 -26
  77. package/addon/controllers/management/places/index/details.js +55 -0
  78. package/addon/controllers/management/places/index/edit.js +111 -0
  79. package/addon/controllers/management/places/index/new.js +88 -0
  80. package/addon/controllers/management/places/index.js +21 -182
  81. package/addon/controllers/management/vehicles/index/new.js +2 -6
  82. package/addon/controllers/management/vendors/index/details.js +55 -0
  83. package/addon/controllers/management/vendors/index/edit.js +111 -0
  84. package/addon/controllers/management/vendors/index/new.js +88 -0
  85. package/addon/controllers/management/vendors/index.js +43 -247
  86. package/addon/routes/management/contacts/index/details.js +14 -0
  87. package/addon/routes/management/contacts/index/edit.js +10 -0
  88. package/addon/routes/management/contacts/index/new.js +3 -0
  89. package/addon/routes/management/contacts/index.js +1 -1
  90. package/addon/routes/management/fleets/index/details.js +1 -1
  91. package/addon/routes/management/fleets/index/edit.js +1 -1
  92. package/addon/routes/management/fleets/index.js +1 -1
  93. package/addon/routes/management/fuel-reports/index/details.js +14 -0
  94. package/addon/routes/management/fuel-reports/index/edit.js +10 -0
  95. package/addon/routes/management/fuel-reports/index/new.js +3 -0
  96. package/addon/routes/management/fuel-reports/index.js +3 -1
  97. package/addon/routes/management/issues/index/details.js +14 -0
  98. package/addon/routes/management/issues/index/edit.js +10 -0
  99. package/addon/routes/management/issues/index/new.js +3 -0
  100. package/addon/routes/management/issues/index.js +1 -1
  101. package/addon/routes/management/places/index/details.js +14 -0
  102. package/addon/routes/management/places/index/edit.js +10 -0
  103. package/addon/routes/management/places/index/new.js +3 -0
  104. package/addon/routes/management/places/index.js +6 -1
  105. package/addon/routes/management/vendors/index/details.js +15 -0
  106. package/addon/routes/management/vendors/index/edit.js +11 -0
  107. package/addon/routes/management/vendors/index/new.js +3 -0
  108. package/addon/routes/management/vendors/index.js +1 -0
  109. package/addon/routes.js +27 -7
  110. package/addon/services/context-panel.js +60 -0
  111. package/addon/templates/management/contacts/index/details.hbs +1 -0
  112. package/addon/templates/management/contacts/index/edit.hbs +1 -0
  113. package/addon/templates/management/contacts/index/new.hbs +1 -0
  114. package/addon/templates/management/contacts/index.hbs +22 -3
  115. package/addon/templates/management/drivers/index.hbs +29 -5
  116. package/addon/templates/management/fleets/index/details.hbs +1 -1
  117. package/addon/templates/management/fleets/index/edit.hbs +1 -1
  118. package/addon/templates/management/fleets/index/new.hbs +1 -1
  119. package/addon/templates/management/fuel-reports/index/details.hbs +1 -0
  120. package/addon/templates/management/fuel-reports/index/edit.hbs +1 -0
  121. package/addon/templates/management/fuel-reports/index/new.hbs +1 -0
  122. package/addon/templates/management/fuel-reports/index.hbs +25 -4
  123. package/addon/templates/management/issues/index/details.hbs +1 -0
  124. package/addon/templates/management/issues/index/edit.hbs +1 -0
  125. package/addon/templates/management/issues/index/new.hbs +1 -0
  126. package/addon/templates/management/issues/index.hbs +5 -3
  127. package/addon/templates/management/places/index/details.hbs +1 -0
  128. package/addon/templates/management/places/index/edit.hbs +1 -0
  129. package/addon/templates/management/places/index/new.hbs +1 -0
  130. package/addon/templates/management/vendors/index/details.hbs +1 -0
  131. package/addon/templates/management/vendors/index/edit.hbs +1 -0
  132. package/addon/templates/management/vendors/index/new.hbs +1 -0
  133. package/addon/templates/operations/orders/index.hbs +3 -3
  134. package/app/components/contact-form-panel.js +1 -0
  135. package/app/components/contact-panel/details.js +1 -0
  136. package/app/components/contact-panel.js +1 -0
  137. package/app/components/fleet-listing-panel.js +1 -0
  138. package/app/components/fleet-panel/details.js +1 -0
  139. package/app/components/fleet-panel/driver-listing.js +1 -0
  140. package/app/components/fleet-panel/vehicle-listing.js +1 -0
  141. package/app/components/fuel-report-form-panel.js +1 -0
  142. package/app/components/fuel-report-panel.js +1 -0
  143. package/app/components/issue-form-panel.js +1 -0
  144. package/app/components/issue-panel.js +1 -0
  145. package/app/components/place-form-panel.js +1 -0
  146. package/app/components/place-panel.js +1 -0
  147. package/app/components/vendor-form-panel/create-form.js +1 -0
  148. package/app/components/vendor-form-panel/edit-form.js +1 -0
  149. package/app/components/vendor-form-panel.js +1 -0
  150. package/app/components/vendor-panel/details.js +1 -0
  151. package/app/components/vendor-panel.js +1 -0
  152. package/app/controllers/management/contacts/index/details.js +1 -0
  153. package/app/controllers/management/contacts/index/edit.js +1 -0
  154. package/app/controllers/management/contacts/index/new.js +1 -0
  155. package/app/controllers/management/fuel-reports/index/details.js +1 -0
  156. package/app/controllers/management/fuel-reports/index/edit.js +1 -0
  157. package/app/controllers/management/fuel-reports/index/new.js +1 -0
  158. package/app/controllers/management/issues/index/details.js +1 -0
  159. package/app/controllers/management/issues/index/edit.js +1 -0
  160. package/app/controllers/management/issues/index/new.js +1 -0
  161. package/app/controllers/management/places/index/details.js +1 -0
  162. package/app/controllers/management/places/index/edit.js +1 -0
  163. package/app/controllers/management/places/index/new.js +1 -0
  164. package/app/controllers/management/vendors/index/edit.js +1 -0
  165. package/app/controllers/management/vendors/index/new.js +1 -0
  166. package/app/routes/addon/routes/management/places/index/new.js +1 -0
  167. package/app/routes/management/contacts/index/details.js +1 -0
  168. package/app/routes/management/contacts/index/edit.js +1 -0
  169. package/app/routes/management/contacts/index/new.js +1 -0
  170. package/app/routes/management/fuel-reports/index/details.js +1 -0
  171. package/app/routes/management/fuel-reports/index/edit.js +1 -0
  172. package/app/routes/management/fuel-reports/index/new.js +1 -0
  173. package/app/routes/management/issues/index/details.js +1 -0
  174. package/app/routes/management/issues/index/edit.js +1 -0
  175. package/app/routes/management/issues/index/new.js +1 -0
  176. package/app/routes/management/places/index/details.js +1 -0
  177. package/app/routes/management/places/index/edit.js +1 -0
  178. package/app/routes/management/places/index/new.js +1 -0
  179. package/app/routes/management/vendors/index/details.js +1 -0
  180. package/app/routes/management/vendors/index/edit.js +1 -0
  181. package/app/routes/management/vendors/index/new.js +1 -0
  182. package/app/templates/addon/routes/management/places/index/new.js +1 -0
  183. package/app/templates/management/contacts/index/details.js +1 -0
  184. package/app/templates/management/contacts/index/edit.js +1 -0
  185. package/app/templates/management/contacts/index/new.js +1 -0
  186. package/app/templates/management/fuel-reports/index/details.js +1 -0
  187. package/app/templates/management/fuel-reports/index/edit.js +1 -0
  188. package/app/templates/management/fuel-reports/index/new.js +1 -0
  189. package/app/templates/management/issues/index/details.js +1 -0
  190. package/app/templates/management/issues/index/edit.js +1 -0
  191. package/app/templates/management/issues/index/new.js +1 -0
  192. package/app/templates/management/places/index/details.js +1 -0
  193. package/app/templates/management/places/index/edit.js +1 -0
  194. package/app/templates/management/places/index/new.js +1 -0
  195. package/app/templates/management/vendors/index/details.js +1 -0
  196. package/app/templates/management/vendors/index/edit.js +1 -0
  197. package/app/templates/management/vendors/index/new.js +1 -0
  198. package/composer.json +1 -1
  199. package/config/environment.js +2 -1
  200. package/extension.json +1 -1
  201. package/package.json +4 -3
  202. package/server/migrations/2023_11_03_072503_refactor_issues_table_columns.php +42 -0
  203. package/server/migrations/2023_11_06_040645_refactor_fuel_reports_table.php +38 -0
  204. package/server/src/Casts/Point.php +15 -1
  205. package/server/src/Http/Controllers/Internal/v1/DriverController.php +33 -15
  206. package/server/src/Http/Filter/FleetFilter.php +7 -0
  207. package/server/src/Http/Filter/FuelReportFilter.php +58 -0
  208. package/server/src/Http/Filter/IssueFilter.php +69 -0
  209. package/server/src/Http/Filter/VehicleFilter.php +10 -0
  210. package/server/src/Http/Middleware/TransformLocationMiddleware.php +48 -0
  211. package/server/src/Http/Resources/v1/Driver.php +1 -0
  212. package/server/src/Http/Resources/v1/Fleet.php +20 -21
  213. package/server/src/Http/Resources/v1/FuelReport.php +37 -35
  214. package/server/src/Http/Resources/v1/Issue.php +77 -0
  215. package/server/src/Http/Resources/v1/ParentFleet.php +60 -0
  216. package/server/src/Http/Resources/v1/SubFleet.php +60 -0
  217. package/server/src/Http/Resources/v1/Vehicle.php +4 -2
  218. package/server/src/Integrations/Lalamove/Lalamove.php +6 -6
  219. package/server/src/Models/Contact.php +7 -0
  220. package/server/src/Models/Driver.php +1 -1
  221. package/server/src/Models/Fleet.php +35 -4
  222. package/server/src/Models/FuelReport.php +53 -3
  223. package/server/src/Models/Issue.php +106 -7
  224. package/server/src/Models/Vehicle.php +1 -1
  225. package/server/src/Models/VehicleDevice.php +3 -1
  226. package/server/src/Models/VehicleDeviceEvent.php +7 -3
  227. package/server/src/Notifications/OrderAssigned.php +0 -6
  228. package/server/src/Notifications/OrderCanceled.php +0 -6
  229. package/server/src/Notifications/OrderDispatchFailed.php +0 -6
  230. package/server/src/Notifications/OrderDispatched.php +0 -6
  231. package/server/src/Notifications/OrderPing.php +0 -6
  232. package/server/src/Notifications/OrderSplit.php +0 -6
  233. package/server/src/Providers/NotificationServiceProvider.php +1 -1
  234. package/server/src/routes.php +2 -2
@@ -188,9 +188,22 @@ export default class ManagementIssuesIndexController extends Controller {
188
188
  {
189
189
  label: 'ID',
190
190
  valuePath: 'public_id',
191
- width: '120px',
191
+ cellComponent: 'table/cell/anchor',
192
+ action: this.viewIssue,
193
+ width: '110px',
194
+ resizable: true,
195
+ sortable: true,
196
+ },
197
+ {
198
+ label: 'Priority',
199
+ valuePath: 'priority',
200
+ cellComponent: 'table/cell/status',
201
+ width: '100px',
192
202
  resizable: true,
193
203
  sortable: true,
204
+ filterable: true,
205
+ filterComponent: 'filter/multi-option',
206
+ filterOptions: ['low', 'medium', 'high', 'critical', 'scheduled-maintenance', 'operational-suggestion'],
194
207
  },
195
208
  {
196
209
  label: 'Type',
@@ -202,38 +215,82 @@ export default class ManagementIssuesIndexController extends Controller {
202
215
  filterComponent: 'filter/string',
203
216
  },
204
217
  {
205
- label: 'Reporter',
206
- valuePath: 'reporter.name',
218
+ label: 'Category',
219
+ valuePath: 'category',
207
220
  width: '120px',
208
221
  resizable: true,
209
222
  sortable: true,
223
+ filterable: true,
224
+ filterComponent: 'filter/string',
225
+ },
226
+ {
227
+ label: 'Reporter',
228
+ valuePath: 'reporter_name',
229
+ width: '110px',
230
+ resizable: true,
231
+ sortable: true,
210
232
  },
211
233
  {
212
234
  label: 'Assignee',
213
- valuePath: 'reporter.name',
214
- width: '120px',
235
+ valuePath: 'assignee_name',
236
+ width: '100px',
215
237
  resizable: true,
216
238
  sortable: true,
217
239
  },
240
+ {
241
+ label: 'Driver',
242
+ valuePath: 'driver_name',
243
+ width: '100px',
244
+ cellComponent: 'table/cell/anchor',
245
+ onClick: async (issue) => {
246
+ let driver = await issue.loadDriver();
247
+
248
+ if (driver) {
249
+ this.contextPanel.focus(driver);
250
+ }
251
+ },
252
+ resizable: true,
253
+ sortable: true,
254
+ filterable: true,
255
+ filterComponent: 'filter/model',
256
+ filterComponentPlaceholder: 'Select driver',
257
+ filterParam: 'driver',
258
+ model: 'driver',
259
+ },
218
260
  {
219
261
  label: 'Vehicle',
220
- valuePath: 'vehicle.name',
221
- width: '120px',
262
+ valuePath: 'vehicle_name',
263
+ width: '100px',
264
+ cellComponent: 'table/cell/anchor',
265
+ onClick: async (issue) => {
266
+ let vehicle = await issue.loadVehicle();
267
+
268
+ if (vehicle) {
269
+ this.contextPanel.focus(vehicle);
270
+ }
271
+ },
222
272
  resizable: true,
223
273
  sortable: true,
274
+ filterable: true,
275
+ filterComponent: 'filter/model',
276
+ filterComponentPlaceholder: 'Select vehicle',
277
+ filterParam: 'vehicle',
278
+ model: 'vehicle',
224
279
  },
225
280
  {
226
- label: 'Report',
227
- valuePath: 'report',
281
+ label: 'Status',
282
+ valuePath: 'status',
283
+ cellComponent: 'table/cell/status',
228
284
  width: '120px',
229
285
  resizable: true,
230
286
  sortable: true,
287
+ filterable: true,
231
288
  },
232
289
  {
233
290
  label: 'Created At',
234
291
  valuePath: 'createdAt',
235
292
  sortParam: 'created_at',
236
- width: '10%',
293
+ width: '120px',
237
294
  resizable: true,
238
295
  sortable: true,
239
296
  filterable: true,
@@ -243,7 +300,7 @@ export default class ManagementIssuesIndexController extends Controller {
243
300
  label: 'Updated At',
244
301
  valuePath: 'updatedAt',
245
302
  sortParam: 'updated_at',
246
- width: '10%',
303
+ width: '120px',
247
304
  resizable: true,
248
305
  sortable: true,
249
306
  hidden: true,
@@ -256,24 +313,25 @@ export default class ManagementIssuesIndexController extends Controller {
256
313
  ddButtonText: false,
257
314
  ddButtonIcon: 'ellipsis-h',
258
315
  ddButtonIconPrefix: 'fas',
259
- ddMenuLabel: 'Fuel Report Actions',
316
+ ddMenuLabel: 'Issue Actions',
260
317
  cellClassNames: 'overflow-visible',
261
- width: '150px',
318
+ wrapperClass: 'flex items-center justify-end mx-2',
319
+ width: '10%',
262
320
  actions: [
263
321
  {
264
322
  label: 'View Details',
265
- // fn: this.viewFuelReport,
323
+ fn: this.viewIssue,
266
324
  },
267
325
  {
268
326
  label: 'Edit Issue',
269
- // fn: this.editFuelReport,
327
+ fn: this.editIssue,
270
328
  },
271
329
  {
272
330
  separator: true,
273
331
  },
274
332
  {
275
333
  label: 'Delete Issue',
276
- // fn: this.deleteFuelReport,
334
+ fn: this.deleteIssue,
277
335
  },
278
336
  ],
279
337
  sortable: false,
@@ -308,7 +366,63 @@ export default class ManagementIssuesIndexController extends Controller {
308
366
  }
309
367
 
310
368
  /**
311
- * Bulk deletes selected `driver` via confirm prompt
369
+ * Toggles dialog to export a issue
370
+ *
371
+ * @void
372
+ */
373
+ @action exportIssues() {
374
+ this.crud.export('issue');
375
+ }
376
+
377
+ /**
378
+ * View the selected issue
379
+ *
380
+ * @param {IssueModel} issue
381
+ * @param {Object} options
382
+ * @void
383
+ */
384
+ @action viewIssue(issue) {
385
+ return this.transitionToRoute('management.issues.index.details', issue);
386
+ }
387
+
388
+ /**
389
+ * Create a new `issue` in modal
390
+ *
391
+ * @void
392
+ */
393
+ @action createIssue() {
394
+ return this.transitionToRoute('management.issues.index.new');
395
+ }
396
+
397
+ /**
398
+ * Edit a `issue` details
399
+ *
400
+ * @param {IssueModel} issue
401
+ * @void
402
+ */
403
+ @action editIssue(issue) {
404
+ return this.transitionToRoute('management.issues.index.edit', issue);
405
+ }
406
+
407
+ /**
408
+ * Delete a `issue` via confirm prompt
409
+ *
410
+ * @param {IssueModel} issue
411
+ * @param {Object} options
412
+ * @void
413
+ */
414
+ @action deleteIssue(issue, options = {}) {
415
+ this.crud.delete(issue, {
416
+ acceptButtonIcon: 'trash',
417
+ onConfirm: () => {
418
+ this.hostRouter.refresh();
419
+ },
420
+ ...options,
421
+ });
422
+ }
423
+
424
+ /**
425
+ * Bulk deletes selected `issues` via confirm prompt
312
426
  *
313
427
  * @param {Array} selected an array of selected models
314
428
  * @void
@@ -324,13 +438,4 @@ export default class ManagementIssuesIndexController extends Controller {
324
438
  },
325
439
  });
326
440
  }
327
-
328
- /**
329
- * Toggles dialog to export `issue`
330
- *
331
- * @void
332
- */
333
- @action exportIssues() {
334
- this.crud.export('issue');
335
- }
336
441
  }
@@ -0,0 +1,55 @@
1
+ import Controller from '@ember/controller';
2
+ import { tracked } from '@glimmer/tracking';
3
+ import { action } from '@ember/object';
4
+
5
+ export default class ManagementPlacesIndexDetailsController extends Controller {
6
+ /**
7
+ * The currently active view tab ('details' by default).
8
+ *
9
+ * @type {String}
10
+ * @tracked
11
+ */
12
+ @tracked view = 'details';
13
+
14
+ /**
15
+ * An array of query parameters to be serialized in the URL.
16
+ *
17
+ * @type {String[]}
18
+ * @tracked
19
+ */
20
+ @tracked queryParams = ['view'];
21
+
22
+ /**
23
+ * Transitions back to the "management.places.index" route.
24
+ *
25
+ * @method
26
+ * @action
27
+ * @returns {Transition} The transition object representing the route change.
28
+ */
29
+ @action transitionBack() {
30
+ return this.transitionToRoute('management.places.index');
31
+ }
32
+
33
+ /**
34
+ * Transitions to the edit view for a specific vehicle.
35
+ *
36
+ * @method
37
+ * @param {placeModel} place - The vehicle to be edited.
38
+ * @action
39
+ * @returns {Transition} The transition object representing the route change.
40
+ */
41
+ @action onEdit(place) {
42
+ return this.transitionToRoute('management.places.index.edit', place);
43
+ }
44
+
45
+ /**
46
+ * Updates the active view tab.
47
+ *
48
+ * @method
49
+ * @param {String} tab - The name of the tab to activate.
50
+ * @action
51
+ */
52
+ @action onTabChanged(tab) {
53
+ this.view = tab;
54
+ }
55
+ }
@@ -0,0 +1,111 @@
1
+ import Controller from '@ember/controller';
2
+ import { inject as service } from '@ember/service';
3
+ import { tracked } from '@glimmer/tracking';
4
+ import { action } from '@ember/object';
5
+
6
+ export default class ManagementPlacesIndexEditController extends Controller {
7
+ /**
8
+ * Inject the `hostRouter` service
9
+ *
10
+ * @memberof ManagementplacesIndexEditController
11
+ */
12
+ @service hostRouter;
13
+
14
+ /**
15
+ * Inject the `hostRouter` service
16
+ *
17
+ * @memberof ManagementplacesIndexEditController
18
+ */
19
+ @service modalsManager;
20
+
21
+ /**
22
+ * The overlay component context.
23
+ *
24
+ * @memberof ManagementplacesIndexEditController
25
+ */
26
+ @tracked overlay;
27
+
28
+ /**
29
+ * When exiting the overlay.
30
+ *
31
+ * @return {Transition}
32
+ * @memberof ManagementplacesIndexEditController
33
+ */
34
+ @action transitionBack(place) {
35
+ // check if place record has been edited and prompt for confirmation
36
+ if (place.hasDirtyAttributes) {
37
+ return this.confirmContinueWithUnsavedChanges(place, {
38
+ confirm: () => {
39
+ place.rollbackAttributes();
40
+ return this.transitionToRoute('management.places.index');
41
+ },
42
+ });
43
+ }
44
+
45
+ return this.transitionToRoute('management.places.index');
46
+ }
47
+
48
+ /**
49
+ * Set the overlay component context object.
50
+ *
51
+ * @param {OverlayContext} overlay
52
+ * @memberof ManagementplacesIndexEditController
53
+ */
54
+ @action setOverlayContext(overlay) {
55
+ this.overlay = overlay;
56
+ }
57
+
58
+ /**
59
+ * When place details button is clicked in overlay.
60
+ *
61
+ * @param {PlaceModel} place
62
+ * @return {Promise}
63
+ * @memberof ManagementplacesIndexEditController
64
+ */
65
+ @action onViewDetails(place) {
66
+ // check if place record has been edited and prompt for confirmation
67
+ if (place.hasDirtyAttributes) {
68
+ return this.confirmContinueWithUnsavedChanges(place);
69
+ }
70
+
71
+ return this.transitionToRoute('management.places.index.details', place);
72
+ }
73
+
74
+ /**
75
+ * Trigger a route refresh and focus the new place created.
76
+ *
77
+ * @param {PlaceModel} place
78
+ * @return {Promise}
79
+ * @memberof ManagementplacesIndexEditController
80
+ */
81
+ @action onAfterSave(place) {
82
+ if (this.overlay) {
83
+ this.overlay.close();
84
+ }
85
+
86
+ this.hostRouter.refresh();
87
+ return this.transitionToRoute('management.places.index.details', place);
88
+ }
89
+
90
+ /**
91
+ * Prompts the user to confirm if they wish to continue with unsaved changes.
92
+ *
93
+ * @method
94
+ * @param {PlaceModel} place - The place object with unsaved changes.
95
+ * @param {Object} [options={}] - Additional options for configuring the modal.
96
+ * @returns {Promise} A promise that resolves when the user confirms, and transitions to a new route.
97
+ * @memberof ManagementplacesIndexEditController
98
+ */
99
+ confirmContinueWithUnsavedChanges(place, options = {}) {
100
+ return this.modalsManager.confirm({
101
+ title: 'Continue Without Saving?',
102
+ body: 'Unsaved changes to this place will be lost. Click continue to proceed.',
103
+ acceptButtonText: 'Continue without saving',
104
+ confirm: () => {
105
+ place.rollbackAttributes();
106
+ return this.transitionToRoute('management.places.index.details', place);
107
+ },
108
+ ...options,
109
+ });
110
+ }
111
+ }
@@ -0,0 +1,88 @@
1
+ import Controller from '@ember/controller';
2
+ import { tracked } from '@glimmer/tracking';
3
+ import { inject as service } from '@ember/service';
4
+ import { action } from '@ember/object';
5
+
6
+ export default class ManagementPlacesIndexNewController extends Controller {
7
+ /**
8
+ * Inject the `store` service
9
+ *
10
+ * @memberof ManagementplacesIndexNewController
11
+ */
12
+ @service store;
13
+
14
+ /**
15
+ * Inject the `hostRouter` service
16
+ *
17
+ * @memberof ManagementplacesIndexNewController
18
+ */
19
+ @service hostRouter;
20
+
21
+ /**
22
+ * Inject the `hostRouter` service
23
+ *
24
+ * @memberof ManagementplacesIndexNewController
25
+ */
26
+ @service modalsManager;
27
+
28
+ /**
29
+ * The overlay component context.
30
+ *
31
+ * @memberof ManagementplacesIndexNewController
32
+ */
33
+ @tracked overlay;
34
+
35
+ /**
36
+ * The place being created.
37
+ *
38
+ * @var {placeModel}
39
+ */
40
+ @tracked place = this.store.createRecord('place');
41
+
42
+ /**
43
+ * Set the overlay component context object.
44
+ *
45
+ * @param {OverlayContext} overlay
46
+ * @memberof ManagementplacesIndexNewController
47
+ */
48
+ @action setOverlayContext(overlay) {
49
+ this.overlay = overlay;
50
+ }
51
+
52
+ /**
53
+ * When exiting the overlay.
54
+ *
55
+ * @return {Transition}
56
+ * @memberof ManagementplacesIndexNewController
57
+ */
58
+ @action transitionBack() {
59
+ return this.transitionToRoute('management.places.index');
60
+ }
61
+
62
+ /**
63
+ * Trigger a route refresh and focus the new place created.
64
+ *
65
+ * @param {placeModel} place
66
+ * @return {Promise}
67
+ * @memberof ManagementplacesIndexNewController
68
+ */
69
+ @action onAfterSave(place) {
70
+ if (this.overlay) {
71
+ this.overlay.close();
72
+ }
73
+
74
+ this.hostRouter.refresh();
75
+ return this.transitionToRoute('management.places.index.details', place).then(() => {
76
+ this.resetForm();
77
+ });
78
+ }
79
+
80
+ /**
81
+ * Resets the form with a new place record
82
+ *
83
+ * @memberof ManagementplacesIndexNewController
84
+ */
85
+ resetForm() {
86
+ this.place = this.store.createRecord('place');
87
+ }
88
+ }