@fleetbase/storefront-engine 0.3.18 → 0.3.21

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 (81) hide show
  1. package/addon/components/customer-panel/orders.hbs +107 -104
  2. package/addon/components/customer-panel/orders.js +52 -45
  3. package/addon/components/modals/incoming-order.hbs +208 -199
  4. package/addon/components/modals/order-ready-assign-driver.hbs +1 -1
  5. package/addon/components/order-panel/details.js +0 -2
  6. package/addon/components/order-panel.hbs +314 -1
  7. package/addon/components/order-panel.js +51 -3
  8. package/addon/components/widget/customers.hbs +75 -51
  9. package/addon/components/widget/customers.js +29 -41
  10. package/addon/components/widget/orders.hbs +278 -119
  11. package/addon/components/widget/orders.js +75 -80
  12. package/addon/components/widget/storefront-metrics.hbs +3 -6
  13. package/addon/components/widget/storefront-metrics.js +25 -41
  14. package/addon/controllers/orders/index.js +214 -105
  15. package/addon/controllers/settings/gateways.js +1 -1
  16. package/addon/helpers/get-tip-amount.js +13 -2
  17. package/addon/routes/application.js +2 -4
  18. package/addon/services/order-actions.js +248 -0
  19. package/addon/services/storefront.js +2 -0
  20. package/addon/styles/storefront-engine.css +48 -0
  21. package/addon/templates/home.hbs +2 -1
  22. package/addon/templates/orders/index/view.hbs +1 -1
  23. package/addon/templates/orders/index.hbs +26 -3
  24. package/addon/templates/products/index/index.hbs +28 -28
  25. package/addon/templates/settings.hbs +1 -1
  26. package/app/services/order-actions.js +1 -0
  27. package/composer.json +1 -1
  28. package/extension.json +1 -1
  29. package/package.json +1 -1
  30. package/server/config/storefront.php +20 -0
  31. package/server/migrations/2023_05_03_025307_create_carts_table.php +1 -1
  32. package/server/migrations/2023_05_03_025307_create_checkouts_table.php +1 -1
  33. package/server/migrations/2023_05_03_025307_create_gateways_table.php +1 -1
  34. package/server/migrations/2023_05_03_025307_create_network_stores_table.php +1 -1
  35. package/server/migrations/2023_05_03_025307_create_networks_table.php +1 -1
  36. package/server/migrations/2023_05_03_025307_create_notification_channels_table.php +1 -1
  37. package/server/migrations/2023_05_03_025307_create_payment_methods_table.php +1 -1
  38. package/server/migrations/2023_05_03_025307_create_product_addon_categories_table.php +1 -1
  39. package/server/migrations/2023_05_03_025307_create_product_addons_table.php +1 -1
  40. package/server/migrations/2023_05_03_025307_create_product_hours_table.php +1 -1
  41. package/server/migrations/2023_05_03_025307_create_product_store_locations_table.php +1 -1
  42. package/server/migrations/2023_05_03_025307_create_product_variant_options_table.php +1 -1
  43. package/server/migrations/2023_05_03_025307_create_product_variants_table.php +1 -1
  44. package/server/migrations/2023_05_03_025307_create_products_table.php +1 -1
  45. package/server/migrations/2023_05_03_025307_create_reviews_table.php +1 -1
  46. package/server/migrations/2023_05_03_025307_create_store_hours_table.php +1 -1
  47. package/server/migrations/2023_05_03_025307_create_store_locations_table.php +1 -1
  48. package/server/migrations/2023_05_03_025307_create_stores_table.php +1 -1
  49. package/server/migrations/2023_05_03_025307_create_votes_table.php +1 -1
  50. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_carts_table.php +1 -1
  51. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_checkouts_table.php +1 -1
  52. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_gateways_table.php +1 -1
  53. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_network_stores_table.php +1 -1
  54. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_networks_table.php +1 -1
  55. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_notification_channels_table.php +1 -1
  56. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_payment_methods_table.php +1 -1
  57. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_addon_categories_table.php +1 -1
  58. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_addons_table.php +1 -1
  59. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_hours_table.php +1 -1
  60. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_store_locations_table.php +1 -1
  61. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_variant_options_table.php +1 -1
  62. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_variants_table.php +1 -1
  63. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_products_table.php +1 -1
  64. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_reviews_table.php +1 -1
  65. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_store_hours_table.php +1 -1
  66. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_store_locations_table.php +1 -1
  67. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_stores_table.php +1 -1
  68. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_votes_table.php +1 -1
  69. package/server/src/Http/Controllers/ActionController.php +2 -1
  70. package/server/src/Http/Controllers/OrderController.php +15 -2
  71. package/server/src/Http/Controllers/v1/CheckoutController.php +12 -12
  72. package/server/src/Http/Controllers/v1/CustomerController.php +15 -7
  73. package/server/src/Http/Controllers/v1/ServiceQuoteController.php +5 -5
  74. package/server/src/Http/Requests/CreateCustomerRequest.php +4 -0
  75. package/server/src/Http/Requests/InitializeCheckoutRequest.php +2 -1
  76. package/server/src/Http/Resources/Cart.php +1 -1
  77. package/server/src/Models/Store.php +2 -2
  78. package/server/src/Observers/OrderObserver.php +7 -1
  79. package/server/src/Rules/IsValidLocation.php +2 -2
  80. package/server/src/Support/Storefront.php +34 -0
  81. package/translations/en-us.yaml +6 -1
@@ -1,250 +1,259 @@
1
1
  <Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
2
- <div class="mt-4">
3
- <div class="py-1">
2
+ <div>
3
+ <div>
4
4
  <div class="flex flex-col items-center justify-center">
5
5
  <div class="p-2 rounded-md bg-white">
6
- <img src={{concat "data:image/png;base64," @options.order.tracking_number.qr_code}} class="w-18 h-18" alt={{@options.order.public_id}} />
6
+ <Image src={{concat "data:image/png;base64," @options.order.tracking_number.qr_code}} class="w-18 h-18" alt={{@options.order.public_id}} />
7
7
  </div>
8
- <div class="my-2.5 text-center">
8
+ <div class="mt-3 text-center">
9
9
  <h2 class="dark:text-gray-100 font-semibold">{{@options.order.public_id}}</h2>
10
10
  </div>
11
- </div>
12
- </div>
13
- <div class="w-full my-2">
14
- <div class="flex px-6 py-4 border-t border-b border-gray-100 dark:border-gray-800">
15
- <h5 class="dark:text-gray-100 font-semibold">{{t "storefront.common.store"}}</h5>
16
- </div>
17
- <div class="flex items-start px-6 py-2">
18
- <img src={{@options.store.logo_url}} class="w-12 h-12 rounded-md shadow-sm mr-4" alt={{@options.store.name}} />
19
11
  <div>
20
- <h5 class="font-semibold dark:text-white text-base">{{@options.store.name}}</h5>
21
- <DisplayPlace @place={{@options.order.payload.pickup}} @type="store location" @addressClass="text-sm dark:text-gray-100" @noAddressClass="text-sm" />
12
+ <Badge @status={{@options.order.status}} />
22
13
  </div>
23
14
  </div>
24
15
  </div>
25
- <div class="w-full my-2">
26
- <div class="flex px-6 py-4 border-t border-b border-gray-100 dark:border-gray-800">
27
- <h5 class="dark:text-gray-100 font-semibold">{{t "storefront.component.modals.incoming-order.assigned"}}</h5>
28
- </div>
29
- <div class="flex flex-col px-6 py-2">
30
- {{#if @options.order.driver_assigned.id}}
31
- <div class="flex items-center">
32
- <img src={{@options.order.driver_assigned.photoUrl}} class="w-12 h-12 rounded-md shadow-sm mr-4" alt={{@options.order.driver_assigned.name}} />
16
+ <div class="grid grid-cols-2 lg:grid-cols-1 gap-3 justify-items-stretch auto-rows-max p-4">
17
+ <div class="col-span-2">
18
+ <div class="bg-gray-100 border border-gray-200 dark:bg-gray-800 dark:border-gray-700 rounded-md px-4 py-2 space-y-2">
19
+ <h5 class="dark:text-gray-100 font-semibold">{{t "storefront.common.store"}}</h5>
20
+ <div class="flex items-start space-x-4">
21
+ <Image src={{@options.store.logo_url}} class="w-12 h-12 rounded-md shadow-sm" alt={{@options.store.name}} />
33
22
  <div>
34
- <h5 class="font-semibold dark:text-white text-base">{{n-a @options.order.driver_assigned.displayName}}</h5>
35
- <div class="font-semibold dark:text-gray-100 text-sm">{{n-a @options.order.driver_assigned.phone (t "storefront.component.modals.incoming-order.no-phone")}}</div>
23
+ <h5 class="font-semibold dark:text-white text-base">{{@options.store.name}}</h5>
24
+ <DisplayPlace @place={{@options.order.payload.pickup}} @type="store location" @addressClass="text-xs dark:text-gray-100" @noAddressClass="text-xs" />
36
25
  </div>
37
26
  </div>
38
- {{else}}
39
- <h5 class="text-red-500 text-sm">{{t "storefront.component.modals.incoming-order.not-assigned"}}</h5>
40
- {{/if}}
41
- {{#if @options.assignDriver}}
42
- <div class="mt-2.5">
43
- <Button
44
- @size="xs"
45
- @type="default"
46
- @icon="steering-wheel"
47
- @text={{if
48
- @options.order.has_driver_assigned
49
- (t "storefront.component.modals.incoming-order.change-driver")
50
- (t "storefront.component.modals.incoming-order.assign-driver")
51
- }}
52
- @onClick={{@options.assignDriver}}
53
- />
27
+ </div>
28
+ </div>
29
+ <div class="col-span-2">
30
+ <div class="flex {{if (media 'isMobile') 'flex-col space-y-3' 'flex-row space-x-3'}} items-stretch">
31
+ {{#unless @options.order.meta.is_pickup}}
32
+ <div class="flex-1 self-stretch">
33
+ <div class="bg-gray-100 border border-gray-200 dark:bg-gray-800 dark:border-gray-700 rounded-md px-4 py-2 space-y-2 h-full">
34
+ <h5 class="dark:text-gray-100 font-semibold">{{t "storefront.component.modals.incoming-order.assigned"}}</h5>
35
+ <div class="flex flex-col space-y-4">
36
+ {{#if @options.order.driver_assigned.id}}
37
+ <div class="flex items-center">
38
+ <Image src={{@options.order.driver_assigned.photoUrl}} class="w-12 h-12 rounded-md shadow-sm mr-4" alt={{@options.order.driver_assigned.name}} />
39
+ <div>
40
+ <h5 class="font-semibold dark:text-white text-xs">{{n-a @options.order.driver_assigned.displayName}}</h5>
41
+ <div class="font-semibold dark:text-gray-100 text-xs">{{n-a
42
+ @options.order.driver_assigned.phone
43
+ (t "storefront.component.modals.incoming-order.no-phone")
44
+ }}</div>
45
+ </div>
46
+ </div>
47
+ {{else}}
48
+ <div>
49
+ <h5 class="text-red-500 text-sm">{{t "storefront.component.modals.incoming-order.not-assigned"}}</h5>
50
+ </div>
51
+ {{/if}}
52
+ {{#if @options.assignDriver}}
53
+ <div>
54
+ <Button
55
+ @size="xs"
56
+ @type="default"
57
+ @icon="id-card"
58
+ @text={{if
59
+ @options.order.has_driver_assigned
60
+ (t "storefront.component.modals.incoming-order.change-driver")
61
+ (t "storefront.component.modals.incoming-order.assign-driver")
62
+ }}
63
+ @onClick={{@options.assignDriver}}
64
+ />
65
+ </div>
66
+ {{/if}}
67
+ </div>
68
+ </div>
69
+ </div>
70
+ {{/unless}}
71
+ <div class="flex-1 self-stretch">
72
+ <div class="bg-gray-100 border border-gray-200 dark:bg-gray-800 dark:border-gray-700 rounded-md px-4 py-2 space-y-2 h-full">
73
+ <h5 class="dark:text-gray-100 font-semibold">{{t "storefront.common.customer"}}</h5>
74
+ <div class="">
75
+ <div class="flex flex-row">
76
+ <div>
77
+ <Image src={{avatar-url @options.order.customer.photo_url}} class="w-12 h-12 rounded-md shadow-sm mr-4" alt={{@options.order.customer.name}} />
78
+ </div>
79
+ <div>
80
+ <div class="text-xs font-bold dark:text-gray-100">{{@options.order.customer.name}}</div>
81
+ <div class="text-xs dark:text-gray-100">{{@options.order.customer.email}}</div>
82
+ <div class="text-xs dark:text-gray-100">{{@options.order.customer.phone}}</div>
83
+ </div>
84
+ </div>
85
+ {{#unless @options.order.meta.is_pickup}}
86
+ <div class="mt-2">
87
+ <h5 class="dark:text-gray-100 font-semibold text-xs truncate">{{t "storefront.component.modals.incoming-order.address"}}</h5>
88
+ <div class="flex flex-row mt-1">
89
+ <div class="flex items-center justify-center rounded-full bg-blue-500 w-8 h-8 mr-3">
90
+ <FaIcon @icon="map-marker-alt" class="text-white" />
91
+ </div>
92
+ <div class="truncate">
93
+ <DisplayPlace
94
+ @place={{@options.order.payload.dropoff}}
95
+ @type="dropoff"
96
+ @addressClass="text-xs dark:text-gray-100"
97
+ @noAddressClass="text-xs"
98
+ />
99
+ </div>
100
+ </div>
101
+ </div>
102
+ {{/unless}}
103
+ </div>
104
+ </div>
54
105
  </div>
55
- {{/if}}
106
+ </div>
56
107
  </div>
57
- </div>
58
- <div class="w-full my-2">
59
- <div class="flex px-6 py-4 border-t border-b border-gray-100 dark:border-gray-800">
60
- <div class="flex-1">
108
+ <div class="col-span-2">
109
+ <div class="bg-gray-100 border border-gray-200 dark:bg-gray-800 dark:border-gray-700 rounded-md px-4 py-2 space-y-2">
61
110
  {{#if @options.order.meta.is_pickup}}
62
111
  <h5 class="dark:text-gray-100 font-semibold">{{t "storefront.common.pickup"}}</h5>
63
112
  {{else}}
64
113
  <h5 class="dark:text-gray-100 font-semibold">{{t "storefront.common.delivery"}}</h5>
65
114
  {{/if}}
66
- </div>
67
- </div>
68
- <div class="py-2 px-6">
69
- <div class="flex">
70
- {{#if @options.order.meta.is_pickup}}
71
- <div class="flex-1">
72
- <div class="rounded-md bg-blue-50 mr-4">
73
- <div class="rounded-t-md bg-blue-100 px-3 py-2 mb-3">
74
- <span class="text-blue-500 font-semibold text-sm truncate">{{t "storefront.component.modals.incoming-order.pickup-order"}}</span>
75
- </div>
76
- <div class="flex flex-row items-center mb-4 pb-4 px-3">
115
+ <div>
116
+ {{#if @options.order.meta.is_pickup}}
117
+ <div class="flex-1">
118
+ <InfoBlock @size="xs" class="mb-3">{{t "storefront.component.modals.incoming-order.pickup-order"}}</InfoBlock>
119
+ <div class="flex flex-row">
77
120
  <div class="flex items-center justify-center rounded-full bg-blue-500 w-8 h-8 mr-3">
78
121
  <FaIcon @icon="store-alt" class="text-white" />
79
122
  </div>
80
- <div class="text-xs text-blue-900 truncate">
81
- <DisplayPlace @place={{@options.order.payload.pickup}} @type="pickup" />
82
- </div>
123
+ <DisplayPlace @place={{@options.order.payload.pickup}} @type="pickup" @addressClass="text-xs dark:text-gray-100" @noAddressClass="text-xs" />
83
124
  </div>
84
125
  </div>
85
- </div>
86
- {{else if @options.order.payload.hasWaypoints}}
87
- <RouteList @order={{@options.order}} />
88
- {{else}}
89
- <div class="order-route-list storefront flex-1">
90
- <div class="order-route-stop">
91
- <div class="order-route-stop-index">
92
- <div class="index-count">
93
- <FaIcon @prefix="fas" @icon="store-alt" />
126
+ {{else if @options.order.payload.hasWaypoints}}
127
+ <RouteList @order={{@options.order}} />
128
+ {{else}}
129
+ <div class="order-route-list storefront flex-1">
130
+ <div class="order-route-stop">
131
+ <div class="order-route-stop-index">
132
+ <div class="index-count">
133
+ <FaIcon @prefix="fas" @icon="store-alt" />
134
+ </div>
94
135
  </div>
95
- </div>
96
- <div class="order-route-location dark:text-gray-100">
97
- <DisplayPlace @place={{@options.order.payload.pickup}} @type="pickup" @addressClass="text-sm dark:text-gray-100" @noAddressClass="text-sm" />
98
- </div>
99
- </div>
100
- <div class="order-route-stop">
101
- <div class="order-route-stop-index">
102
- <div class="index-count">
103
- <FaIcon @prefix="fas" @icon="map-marker-alt" />
136
+ <div class="order-route-location dark:text-gray-100">
137
+ <DisplayPlace @place={{@options.order.payload.pickup}} @type="pickup" @addressClass="text-xs dark:text-gray-100" @noAddressClass="text-xs" />
104
138
  </div>
105
139
  </div>
106
- <div class="order-route-location dark:text-gray-100">
107
- <DisplayPlace @place={{@options.order.payload.dropoff}} @type="dropoff" @addressClass="text-sm dark:text-gray-100" @noAddressClass="text-sm" />
140
+ <div class="order-route-stop">
141
+ <div class="order-route-stop-index">
142
+ <div class="index-count">
143
+ <FaIcon @prefix="fas" @icon="map-marker-alt" />
144
+ </div>
145
+ </div>
146
+ <div class="order-route-location dark:text-gray-100">
147
+ <DisplayPlace @place={{@options.order.payload.dropoff}} @type="dropoff" @addressClass="text-xs dark:text-gray-100" @noAddressClass="text-xs" />
148
+ </div>
108
149
  </div>
109
150
  </div>
110
- </div>
111
- {{/if}}
112
- </div>
113
- </div>
114
- </div>
115
- <div class="w-full my-2 flex flex-col">
116
- <div class="flex px-6 py-4 border-t border-b border-gray-100 dark:border-gray-800">
117
- <div class="flex-1">
118
- <h5 class="dark:text-gray-100 font-semibold">{{t "storefront.common.customer"}}</h5>
151
+ {{/if}}
152
+ </div>
119
153
  </div>
120
154
  </div>
121
- <div class="py-2 px-6">
122
- <div class="mb-4 mt-2 text-sm text-blue-900 dark:text-blue-50">
123
- <div class="flex flex-row">
124
- <div>
125
- <img src={{avatar-url @options.order.customer.photo_url}} class="w-8 h-8 rounded-md shadow-sm mr-2" alt={{@options.order.customer.name}} />
126
- </div>
127
- <div>
128
- <div class="font-bold">{{@options.order.customer.name}}</div>
129
- <div>{{@options.order.customer.email}}</div>
130
- <div>{{@options.order.customer.phone}}</div>
131
- </div>
155
+ <div class="col-span-2">
156
+ <div class="bg-gray-100 border border-gray-200 dark:bg-gray-800 dark:border-gray-700 rounded-md px-4 py-2 space-y-2">
157
+ <div class="flex flex-row items-center space-x-2">
158
+ <h5 class="dark:text-gray-100 font-semibold">{{t "storefront.component.modals.incoming-order.tracking"}}</h5>
159
+ <h5 class="dark:text-gray-100 font-semibold">({{@options.order.tracking}})</h5>
132
160
  </div>
133
- </div>
134
- {{#unless @options.order.meta.is_pickup}}
135
- <div class="rounded-md bg-blue-50">
136
- <div class="rounded-t-md bg-blue-100 px-3 py-2 mb-3">
137
- <span class="text-blue-500 font-semibold text-sm truncate">{{t "storefront.component.modals.incoming-order.address"}}</span>
161
+ <div class="flex flex-row items-center justify-center space-x-4">
162
+ <div class="p-2 rounded-md bg-white">
163
+ <Image src={{concat "data:image/png;base64," @options.order.tracking_number.qr_code}} class="w-14 h-14" alt={{@options.order.public_id}} />
138
164
  </div>
139
- <div class="flex flex-row items-center mb-4 pb-4 px-3">
140
- <div class="flex items-center justify-center rounded-full bg-blue-500 w-8 h-8 mr-3">
141
- <FaIcon @icon="map-marker-alt" class="text-white" />
142
- </div>
143
- <div class="text-xs text-blue-900 truncate">
144
- <DisplayPlace @place={{@options.order.payload.dropoff}} @type="dropoff" />
145
- </div>
165
+ <div class="p-2 rounded-md bg-white">
166
+ <Image src={{concat "data:image/png;base64," @options.order.tracking_number.barcode}} class="w-40 h-14" alt={{@options.order.public_id}} />
146
167
  </div>
147
168
  </div>
148
- {{/unless}}
149
- </div>
150
- </div>
151
- <div class="w-full my-2 flex flex-col">
152
- <div class="flex px-6 py-4 border-t border-b border-gray-100 dark:border-gray-800">
153
- <div class="flex-1 flex-row justify-between items-center">
154
- <h5 class="dark:text-gray-100 font-semibold">{{t "storefront.component.modals.incoming-order.tracking"}}</h5>
155
- <h5 class="dark:text-gray-100 font-semibold">({{@options.order.tracking}})</h5>
156
169
  </div>
157
170
  </div>
158
- <div class="py-2 px-6">
159
- <div class="flex flex-row items-center justify-center space-x-4">
160
- <div class="p-2 rounded-md bg-white">
161
- <img src={{concat "data:image/png;base64," @options.order.tracking_number.qr_code}} class="w-18 h-18" alt={{@options.order.public_id}} />
162
- </div>
163
- <div class="p-2 rounded-md bg-white">
164
- <img src={{concat "data:image/png;base64," @options.order.tracking_number.barcode}} class="w-40 h-18" alt={{@options.order.public_id}} />
171
+ <div class="col-span-2">
172
+ <div class="bg-gray-100 border border-gray-200 dark:bg-gray-800 dark:border-gray-700 rounded-md px-4 py-2 space-y-2">
173
+ <div class="flex flex-row items-center justify-between">
174
+ <h5 class="dark:text-gray-100 font-semibold">{{t "storefront.component.modals.incoming-order.summary"}}</h5>
175
+ {{#if @options.order.payload.cod_amount}}
176
+ <div>
177
+ <FaIcon @icon="money-bill-wave" @size="sm" class="text-green-400 mr-1" />
178
+ <span class="font-semibold text-green-400 text-sm">{{t "storefront.common.cash"}}</span>
179
+ </div>
180
+ {{/if}}
165
181
  </div>
166
- </div>
167
- </div>
168
- </div>
169
- <div class="w-full my-2">
170
- <div class="flex items-center justify-between px-6 py-4 border-t border-b border-gray-100 dark:border-gray-800">
171
- <div>
172
- <h5 class="dark:text-gray-100 font-semibold">{{t "storefront.component.modals.incoming-order.summary"}}</h5>
173
- </div>
174
- {{#if @options.order.payload.cod_amount}}
175
182
  <div>
176
- <FaIcon @icon="money-bill-wave" @size="sm" class="text-green-400 mr-1" />
177
- <span class="font-semibold text-green-400 text-sm">{{t "storefront.common.cash"}}</span>
178
- </div>
179
- {{/if}}
180
- </div>
181
- <div class="flex flex-col space-y-4 p-6 overflow-hidden">
182
- {{#each @options.order.payload.entities as |entity|}}
183
- <div class="flex flex-1">
184
- <div class="mr-2">
185
- <div class="flex items-center justify-center w-5 h-5 border border-gray-100 dark:border-blue-400 rounded-md">
186
- <span class="text-blue-400 text-xs">{{entity.meta.quantity}}x</span>
187
- </div>
188
- </div>
189
- <div class="flex-1 flex">
190
- <div class="mr-4">
191
- <img src={{entity.photo_url}} class="w-12 h-12 rounded-md shadow-sm" alt={{entity.name}} />
192
- </div>
193
- <div>
194
- <h4 class="font-semibold dark:text-gray-100 mb-1 text-sm">{{entity.name}}</h4>
195
- <div class="flex flex-wrap truncate w-44">
196
- <p class="dark:text-gray-50 text-xs truncate">{{entity.description}}</p>
197
- </div>
198
- <div>
199
- {{#each entity.meta.variants as |variant|}}
200
- <div>
201
- <span class="text-xs dark:text-gray-50">{{variant.name}}</span>
183
+ <div class="flex flex-col space-y-4 overflow-hidden py-4">
184
+ {{#each @options.order.payload.entities as |entity|}}
185
+ <div class="flex flex-1">
186
+ <div class="mr-2">
187
+ <div class="flex items-center justify-center w-5 h-5 border border-gray-100 dark:border-blue-400 rounded-md">
188
+ <span class="text-blue-400 text-xs">{{entity.meta.quantity}}x</span>
189
+ </div>
190
+ </div>
191
+ <div class="flex-1 flex">
192
+ <div class="mr-4">
193
+ <img src={{entity.photo_url}} class="w-12 h-12 rounded-md shadow-sm" alt={{entity.name}} />
202
194
  </div>
203
- {{/each}}
204
- </div>
205
- <div>
206
- {{#each entity.meta.addons as |addon|}}
207
195
  <div>
208
- <span class="text-xs dark:text-gray-50">+ {{addon.name}}</span>
196
+ <h4 class="font-semibold dark:text-gray-100 mb-1 text-sm">{{entity.name}}</h4>
197
+ <div class="flex flex-wrap truncate w-44">
198
+ <p class="dark:text-gray-50 text-xs truncate">{{entity.description}}</p>
199
+ </div>
200
+ <div>
201
+ {{#each entity.meta.variants as |variant|}}
202
+ <div>
203
+ <span class="text-xs dark:text-gray-50">{{variant.name}}</span>
204
+ </div>
205
+ {{/each}}
206
+ </div>
207
+ <div>
208
+ {{#each entity.meta.addons as |addon|}}
209
+ <div>
210
+ <span class="text-xs dark:text-gray-50">+ {{addon.name}}</span>
211
+ </div>
212
+ {{/each}}
213
+ </div>
209
214
  </div>
210
- {{/each}}
215
+ </div>
216
+ <div class="px-6">
217
+ <span class="dark:text-gray-50 text-sm">{{format-currency entity.meta.subtotal entity.currency}}</span>
218
+ </div>
211
219
  </div>
220
+ {{/each}}
221
+ </div>
222
+ <div class="px-6 py-2.5 space-y-2 border-t border-b border-gray-200 dark:border-gray-700">
223
+ <div class="flex items-center justify-between">
224
+ <span class="dark:text-gray-50 text-sm">{{t "storefront.component.modals.incoming-order.subtotal"}}</span>
225
+ <span class="dark:text-gray-50 text-sm">{{format-currency @options.order.meta.subtotal @options.order.meta.currency}}</span>
212
226
  </div>
227
+ {{#unless @options.order.meta.is_pickup}}
228
+ <div class="flex items-center justify-between">
229
+ <span class="dark:text-gray-50 text-sm">{{t "storefront.component.modals.incoming-order.fee"}}</span>
230
+ <span class="dark:text-gray-50 text-sm">{{format-currency @options.order.meta.delivery_fee @options.order.meta.currency}}</span>
231
+ </div>
232
+ {{/unless}}
233
+ {{#if @options.order.meta.tip}}
234
+ <div class="flex items-center justify-between">
235
+ <span class="dark:text-gray-50 text-sm">{{t "storefront.component.modals.incoming-order.tip"}}</span>
236
+ <span class="dark:text-gray-50 text-sm">{{get-tip-amount @options.order.meta.tip @options.order.meta.subtotal @options.order.meta.currency}}</span>
237
+ </div>
238
+ {{/if}}
239
+ {{#if @options.order.meta.delivery_tip}}
240
+ <div class="flex items-center justify-between">
241
+ <span class="dark:text-gray-50 text-sm">{{t "storefront.component.modals.incoming-order.delivery-tip"}}</span>
242
+ <span class="dark:text-gray-50 text-sm">{{get-tip-amount
243
+ @options.order.meta.delivery_tip
244
+ @options.order.meta.subtotal
245
+ @options.order.meta.currency
246
+ }}</span>
247
+ </div>
248
+ {{/if}}
213
249
  </div>
214
- <div>
215
- <span class="dark:text-gray-50 text-sm">{{format-currency entity.meta.subtotal entity.currency}}</span>
250
+ <div class="px-6 py-2">
251
+ <div class="flex items-center justify-between">
252
+ <span class="dark:text-gray-50 font-bold text-sm">{{t "storefront.common.total"}}</span>
253
+ <span class="dark:text-gray-50 font-bold text-sm">{{format-currency @options.order.meta.total @options.order.meta.currency}}</span>
254
+ </div>
216
255
  </div>
217
256
  </div>
218
- {{/each}}
219
- </div>
220
- <div class="px-6 py-2.5 space-y-2 border-t border-b border-gray-100 dark:border-gray-800">
221
- <div class="flex items-center justify-between">
222
- <span class="dark:text-gray-50 text-sm">{{t "storefront.component.modals.incoming-order.subtotal"}}</span>
223
- <span class="dark:text-gray-50 text-sm">{{format-currency @options.order.meta.subtotal @options.order.meta.currency}}</span>
224
- </div>
225
- {{#unless @options.order.meta.is_pickup}}
226
- <div class="flex items-center justify-between">
227
- <span class="dark:text-gray-50 text-sm">{{t "storefront.component.modals.incoming-order.fee"}}</span>
228
- <span class="dark:text-gray-50 text-sm">{{format-currency @options.order.meta.delivery_fee @options.order.meta.currency}}</span>
229
- </div>
230
- {{/unless}}
231
- {{#if @options.order.meta.tip}}
232
- <div class="flex items-center justify-between">
233
- <span class="dark:text-gray-50 text-sm">{{t "storefront.component.modals.incoming-order.tip"}}</span>
234
- <span class="dark:text-gray-50 text-sm">{{get-tip-amount @options.order.meta.tip @options.order.meta.subtotal @options.order.meta.currency}}</span>
235
- </div>
236
- {{/if}}
237
- {{#if @options.order.meta.delivery_tip}}
238
- <div class="flex items-center justify-between">
239
- <span class="dark:text-gray-50 text-sm">{{t "storefront.component.modals.incoming-order.delivery-tip"}}</span>
240
- <span class="dark:text-gray-50 text-sm">{{get-tip-amount @options.order.meta.delivery_tip @options.order.meta.subtotal @options.order.meta.currency}}</span>
241
- </div>
242
- {{/if}}
243
- </div>
244
- <div class="px-6 py-2">
245
- <div class="flex items-center justify-between">
246
- <span class="dark:text-gray-50 font-bold text-sm">{{t "storefront.common.total"}}</span>
247
- <span class="dark:text-gray-50 font-bold text-sm">{{format-currency @options.order.meta.total @options.order.meta.currency}}</span>
248
257
  </div>
249
258
  </div>
250
259
  </div>
@@ -19,7 +19,7 @@
19
19
  </p>
20
20
  </div>
21
21
  <div class="input-group">
22
- <ShortToggle
22
+ <Toggle
23
23
  @isToggled={{@options.adhoc}}
24
24
  @onToggle={{fn (mut @options.adhoc)}}
25
25
  @label={{t "storefront.component.modals.order-ready-assign-driver.adhoc-dispatch-nearby-drivers"}}
@@ -1,5 +1,4 @@
1
1
  import Component from '@glimmer/component';
2
-
3
2
  import { action } from '@ember/object';
4
3
  import { inject as service } from '@ember/service';
5
4
  import contextComponentCallback from '@fleetbase/ember-core/utils/context-component-callback';
@@ -12,7 +11,6 @@ export default class OrderPanelDetailsComponent extends Component {
12
11
  @service intl;
13
12
  @service appCache;
14
13
  @service modalsManager;
15
- @tracked isLoading = true;
16
14
  @tracked orders = [];
17
15
 
18
16
  constructor() {