@fleetbase/storefront-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 (296) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +32 -0
  3. package/addon/adapters/addon-category.js +1 -0
  4. package/addon/adapters/customer.js +1 -0
  5. package/addon/adapters/gateway.js +1 -0
  6. package/addon/adapters/network.js +1 -0
  7. package/addon/adapters/notification-channel.js +1 -0
  8. package/addon/adapters/product-addon-category.js +1 -0
  9. package/addon/adapters/product-addon.js +1 -0
  10. package/addon/adapters/product-hour.js +1 -0
  11. package/addon/adapters/product-store-location.js +1 -0
  12. package/addon/adapters/product-variant-option.js +1 -0
  13. package/addon/adapters/product-variant.js +1 -0
  14. package/addon/adapters/product.js +1 -0
  15. package/addon/adapters/store-hour.js +1 -0
  16. package/addon/adapters/store-location.js +1 -0
  17. package/addon/adapters/store.js +1 -0
  18. package/addon/adapters/storefront.js +5 -0
  19. package/addon/components/file-record.hbs +22 -0
  20. package/addon/components/file-record.js +43 -0
  21. package/addon/components/modals/add-store-hours.hbs +8 -0
  22. package/addon/components/modals/add-stores-to-network.hbs +5 -0
  23. package/addon/components/modals/assign-driver.hbs +25 -0
  24. package/addon/components/modals/create-first-store.hbs +21 -0
  25. package/addon/components/modals/create-gateway.hbs +35 -0
  26. package/addon/components/modals/create-network-category.hbs +50 -0
  27. package/addon/components/modals/create-network.hbs +20 -0
  28. package/addon/components/modals/create-new-variant.hbs +15 -0
  29. package/addon/components/modals/create-notification-channel.hbs +45 -0
  30. package/addon/components/modals/create-product-category.hbs +30 -0
  31. package/addon/components/modals/create-store.hbs +9 -0
  32. package/addon/components/modals/edit-network.hbs +1 -0
  33. package/addon/components/modals/import-products.hbs +97 -0
  34. package/addon/components/modals/incoming-order.hbs +242 -0
  35. package/addon/components/modals/manage-addons.hbs +50 -0
  36. package/addon/components/modals/manage-addons.js +86 -0
  37. package/addon/components/modals/order-ready-assign-driver.hbs +36 -0
  38. package/addon/components/modals/select-addon-category.hbs +5 -0
  39. package/addon/components/modals/share-network.hbs +35 -0
  40. package/addon/components/modals/store-location-form.hbs +30 -0
  41. package/addon/components/order-card.hbs +1 -0
  42. package/addon/components/order-card.js +3 -0
  43. package/addon/components/schedule-manager.hbs +22 -0
  44. package/addon/components/schedule-manager.js +73 -0
  45. package/addon/components/settings-container.hbs +7 -0
  46. package/addon/components/store-selector.hbs +21 -0
  47. package/addon/components/store-selector.js +20 -0
  48. package/addon/components/widget/customers.hbs +44 -0
  49. package/addon/components/widget/customers.js +53 -0
  50. package/addon/components/widget/orders.hbs +111 -0
  51. package/addon/components/widget/orders.js +248 -0
  52. package/addon/components/widget/storefront-metrics.hbs +54 -0
  53. package/addon/components/widget/storefront-metrics.js +61 -0
  54. package/addon/controllers/application.js +33 -0
  55. package/addon/controllers/customers/index.js +267 -0
  56. package/addon/controllers/home.js +3 -0
  57. package/addon/controllers/networks/index/network/customers.js +3 -0
  58. package/addon/controllers/networks/index/network/index.js +147 -0
  59. package/addon/controllers/networks/index/network/orders.js +3 -0
  60. package/addon/controllers/networks/index/network/stores.js +370 -0
  61. package/addon/controllers/networks/index/network.js +29 -0
  62. package/addon/controllers/networks/index.js +138 -0
  63. package/addon/controllers/orders/index.js +331 -0
  64. package/addon/controllers/products/index/category/edit.js +62 -0
  65. package/addon/controllers/products/index/category/new.js +287 -0
  66. package/addon/controllers/products/index/category.js +163 -0
  67. package/addon/controllers/products/index/index/edit.js +1 -0
  68. package/addon/controllers/products/index/index.js +136 -0
  69. package/addon/controllers/products/index.js +203 -0
  70. package/addon/controllers/settings/api.js +3 -0
  71. package/addon/controllers/settings/gateways.js +110 -0
  72. package/addon/controllers/settings/index.js +102 -0
  73. package/addon/controllers/settings/locations.js +186 -0
  74. package/addon/controllers/settings/notifications.js +102 -0
  75. package/addon/engine.js +19 -0
  76. package/addon/helpers/get-tip-amount.js +5 -0
  77. package/addon/models/addon-category.js +6 -0
  78. package/addon/models/gateway.js +46 -0
  79. package/addon/models/network.js +166 -0
  80. package/addon/models/notification-channel.js +47 -0
  81. package/addon/models/product-addon-category.js +41 -0
  82. package/addon/models/product-addon.js +41 -0
  83. package/addon/models/product-hour.js +72 -0
  84. package/addon/models/product-store-location.js +41 -0
  85. package/addon/models/product-variant-option.js +39 -0
  86. package/addon/models/product-variant.js +44 -0
  87. package/addon/models/product.js +208 -0
  88. package/addon/models/store-hour.js +72 -0
  89. package/addon/models/store-location.js +93 -0
  90. package/addon/models/store.js +100 -0
  91. package/addon/routes/application.js +47 -0
  92. package/addon/routes/customers/index/edit.js +3 -0
  93. package/addon/routes/customers/index.js +25 -0
  94. package/addon/routes/home.js +3 -0
  95. package/addon/routes/networks/index/network/customers.js +3 -0
  96. package/addon/routes/networks/index/network/index.js +15 -0
  97. package/addon/routes/networks/index/network/orders.js +3 -0
  98. package/addon/routes/networks/index/network/stores.js +28 -0
  99. package/addon/routes/networks/index/network.js +10 -0
  100. package/addon/routes/networks/index.js +19 -0
  101. package/addon/routes/orders/index/edit.js +3 -0
  102. package/addon/routes/orders/index/new.js +3 -0
  103. package/addon/routes/orders/index/view.js +3 -0
  104. package/addon/routes/orders/index.js +29 -0
  105. package/addon/routes/products/index/category/edit.js +15 -0
  106. package/addon/routes/products/index/category/new.js +7 -0
  107. package/addon/routes/products/index/category.js +54 -0
  108. package/addon/routes/products/index/index/edit.js +1 -0
  109. package/addon/routes/products/index/index.js +22 -0
  110. package/addon/routes/products/index.js +21 -0
  111. package/addon/routes/settings/api.js +10 -0
  112. package/addon/routes/settings/gateways.js +11 -0
  113. package/addon/routes/settings/index.js +16 -0
  114. package/addon/routes/settings/locations.js +14 -0
  115. package/addon/routes/settings/notifications.js +11 -0
  116. package/addon/routes.js +48 -0
  117. package/addon/serializers/addon-category.js +15 -0
  118. package/addon/serializers/network.js +19 -0
  119. package/addon/serializers/notification-channel.js +15 -0
  120. package/addon/serializers/product-addon-category.js +15 -0
  121. package/addon/serializers/product-variant.js +15 -0
  122. package/addon/serializers/product.js +20 -0
  123. package/addon/serializers/store-location.js +17 -0
  124. package/addon/serializers/store.js +19 -0
  125. package/addon/services/storefront.js +208 -0
  126. package/addon/templates/application.hbs +16 -0
  127. package/addon/templates/customers/index/edit.hbs +2 -0
  128. package/addon/templates/customers/index.hbs +22 -0
  129. package/addon/templates/home.hbs +7 -0
  130. package/addon/templates/networks/index/network/customers.hbs +2 -0
  131. package/addon/templates/networks/index/network/index.hbs +254 -0
  132. package/addon/templates/networks/index/network/orders.hbs +2 -0
  133. package/addon/templates/networks/index/network/stores.hbs +164 -0
  134. package/addon/templates/networks/index/network.hbs +38 -0
  135. package/addon/templates/networks/index.hbs +60 -0
  136. package/addon/templates/orders/index/edit.hbs +2 -0
  137. package/addon/templates/orders/index/new.hbs +2 -0
  138. package/addon/templates/orders/index/view.hbs +2 -0
  139. package/addon/templates/orders/index.hbs +22 -0
  140. package/addon/templates/products/index/category/edit.hbs +1 -0
  141. package/addon/templates/products/index/category/new.hbs +248 -0
  142. package/addon/templates/products/index/category.hbs +41 -0
  143. package/addon/templates/products/index/index/edit.hbs +1 -0
  144. package/addon/templates/products/index/index.hbs +40 -0
  145. package/addon/templates/products/index.hbs +22 -0
  146. package/addon/templates/settings/api.hbs +18 -0
  147. package/addon/templates/settings/gateways.hbs +48 -0
  148. package/addon/templates/settings/index.hbs +229 -0
  149. package/addon/templates/settings/locations.hbs +39 -0
  150. package/addon/templates/settings/notifications.hbs +35 -0
  151. package/addon/templates/settings.hbs +30 -0
  152. package/addon/utils/get-gateway-schemas.js +34 -0
  153. package/addon/utils/get-notification-schemas.js +18 -0
  154. package/app/adapters/addon-category.js +1 -0
  155. package/app/adapters/gateway.js +1 -0
  156. package/app/adapters/network.js +1 -0
  157. package/app/adapters/notification-channel.js +1 -0
  158. package/app/adapters/product-addon-category.js +1 -0
  159. package/app/adapters/product-addon.js +1 -0
  160. package/app/adapters/product-hour.js +1 -0
  161. package/app/adapters/product-store-location.js +1 -0
  162. package/app/adapters/product-variant-option.js +1 -0
  163. package/app/adapters/product-variant.js +1 -0
  164. package/app/adapters/product.js +1 -0
  165. package/app/adapters/store-hour.js +1 -0
  166. package/app/adapters/store-location.js +1 -0
  167. package/app/adapters/store.js +1 -0
  168. package/app/adapters/storefront.js +1 -0
  169. package/app/components/file-record.js +1 -0
  170. package/app/components/modals/add-store-hours.js +1 -0
  171. package/app/components/modals/add-stores-to-network.js +1 -0
  172. package/app/components/modals/assign-driver.js +1 -0
  173. package/app/components/modals/create-first-store.js +1 -0
  174. package/app/components/modals/create-gateway.js +1 -0
  175. package/app/components/modals/create-network-category.js +1 -0
  176. package/app/components/modals/create-network.js +1 -0
  177. package/app/components/modals/create-new-variant.js +1 -0
  178. package/app/components/modals/create-notification-channel.js +1 -0
  179. package/app/components/modals/create-product-category.js +1 -0
  180. package/app/components/modals/create-store.js +1 -0
  181. package/app/components/modals/edit-network.js +1 -0
  182. package/app/components/modals/import-products.js +1 -0
  183. package/app/components/modals/incoming-order.js +1 -0
  184. package/app/components/modals/manage-addons.js +1 -0
  185. package/app/components/modals/order-ready-assign-driver.js +1 -0
  186. package/app/components/modals/select-addon-category.js +1 -0
  187. package/app/components/modals/share-network.js +1 -0
  188. package/app/components/modals/store-location-form.js +1 -0
  189. package/app/components/order-card.js +1 -0
  190. package/app/components/schedule-manager.js +1 -0
  191. package/app/components/settings-container.js +1 -0
  192. package/app/components/store-selector.js +1 -0
  193. package/app/components/widget/customers.js +1 -0
  194. package/app/components/widget/orders.js +1 -0
  195. package/app/components/widget/storefront-metrics.js +1 -0
  196. package/app/controllers/application.js +1 -0
  197. package/app/controllers/customers/index.js +1 -0
  198. package/app/controllers/home.js +1 -0
  199. package/app/controllers/networks/index/network/customers.js +1 -0
  200. package/app/controllers/networks/index/network/index.js +1 -0
  201. package/app/controllers/networks/index/network/orders.js +1 -0
  202. package/app/controllers/networks/index/network/stores.js +1 -0
  203. package/app/controllers/networks/index/network.js +1 -0
  204. package/app/controllers/networks/index.js +1 -0
  205. package/app/controllers/orders/index.js +1 -0
  206. package/app/controllers/products/index/category/edit.js +1 -0
  207. package/app/controllers/products/index/category/new.js +1 -0
  208. package/app/controllers/products/index/category.js +1 -0
  209. package/app/controllers/products/index/index/edit.js +1 -0
  210. package/app/controllers/products/index/index.js +1 -0
  211. package/app/controllers/products/index.js +1 -0
  212. package/app/controllers/settings/api.js +1 -0
  213. package/app/controllers/settings/gateways.js +1 -0
  214. package/app/controllers/settings/index.js +1 -0
  215. package/app/controllers/settings/locations.js +1 -0
  216. package/app/controllers/settings/notifications.js +1 -0
  217. package/app/helpers/get-tip-amount.js +1 -0
  218. package/app/models/addon-category.js +1 -0
  219. package/app/models/gateway.js +1 -0
  220. package/app/models/network.js +1 -0
  221. package/app/models/notification-channel.js +1 -0
  222. package/app/models/product-addon-category.js +1 -0
  223. package/app/models/product-addon.js +1 -0
  224. package/app/models/product-hour.js +1 -0
  225. package/app/models/product-store-location.js +1 -0
  226. package/app/models/product-variant-option.js +1 -0
  227. package/app/models/product-variant.js +1 -0
  228. package/app/models/product.js +1 -0
  229. package/app/models/store-hour.js +1 -0
  230. package/app/models/store-location.js +1 -0
  231. package/app/models/store.js +1 -0
  232. package/app/routes/application.js +1 -0
  233. package/app/routes/customers/index/edit.js +1 -0
  234. package/app/routes/customers/index.js +1 -0
  235. package/app/routes/home.js +1 -0
  236. package/app/routes/networks/index/network/customers.js +1 -0
  237. package/app/routes/networks/index/network/index.js +1 -0
  238. package/app/routes/networks/index/network/orders.js +1 -0
  239. package/app/routes/networks/index/network/stores.js +1 -0
  240. package/app/routes/networks/index/network.js +1 -0
  241. package/app/routes/networks/index.js +1 -0
  242. package/app/routes/orders/index/edit.js +1 -0
  243. package/app/routes/orders/index/new.js +1 -0
  244. package/app/routes/orders/index/view.js +1 -0
  245. package/app/routes/orders/index.js +1 -0
  246. package/app/routes/products/index/category/edit.js +1 -0
  247. package/app/routes/products/index/category/new.js +1 -0
  248. package/app/routes/products/index/category.js +1 -0
  249. package/app/routes/products/index/index/edit.js +1 -0
  250. package/app/routes/products/index/index.js +1 -0
  251. package/app/routes/products/index.js +1 -0
  252. package/app/routes/settings/api.js +1 -0
  253. package/app/routes/settings/gateways.js +1 -0
  254. package/app/routes/settings/index.js +1 -0
  255. package/app/routes/settings/locations.js +1 -0
  256. package/app/routes/settings/notifications.js +1 -0
  257. package/app/serializers/addon-category.js +1 -0
  258. package/app/serializers/network.js +1 -0
  259. package/app/serializers/notification-channel.js +1 -0
  260. package/app/serializers/product-addon-category.js +1 -0
  261. package/app/serializers/product-variant.js +1 -0
  262. package/app/serializers/product.js +1 -0
  263. package/app/serializers/store-location.js +1 -0
  264. package/app/serializers/store.js +1 -0
  265. package/app/services/storefront.js +1 -0
  266. package/app/templates/customers/index/edit.js +1 -0
  267. package/app/templates/customers/index.js +1 -0
  268. package/app/templates/home.js +1 -0
  269. package/app/templates/networks/index/network/customers.js +1 -0
  270. package/app/templates/networks/index/network/index.js +1 -0
  271. package/app/templates/networks/index/network/orders.js +1 -0
  272. package/app/templates/networks/index/network/stores.js +1 -0
  273. package/app/templates/networks/index/network.js +1 -0
  274. package/app/templates/networks/index.js +1 -0
  275. package/app/templates/orders/index/edit.js +1 -0
  276. package/app/templates/orders/index/new.js +1 -0
  277. package/app/templates/orders/index/view.js +1 -0
  278. package/app/templates/orders/index.js +1 -0
  279. package/app/templates/products/index/category/edit.js +1 -0
  280. package/app/templates/products/index/category/new.js +1 -0
  281. package/app/templates/products/index/category.js +1 -0
  282. package/app/templates/products/index/index/edit.js +1 -0
  283. package/app/templates/products/index/index.js +1 -0
  284. package/app/templates/products/index.js +1 -0
  285. package/app/templates/settings/api.js +1 -0
  286. package/app/templates/settings/gateways.js +1 -0
  287. package/app/templates/settings/index.js +1 -0
  288. package/app/templates/settings/locations.js +1 -0
  289. package/app/templates/settings/notifications.js +1 -0
  290. package/app/templates/settings.js +1 -0
  291. package/app/utils/get-gateway-schemas.js +1 -0
  292. package/app/utils/get-notification-schemas.js +1 -0
  293. package/config/environment.js +21 -0
  294. package/index.js +22 -0
  295. package/package.json +123 -0
  296. package/pnpm-lock.yaml +12509 -0
@@ -0,0 +1,100 @@
1
+ import Model, { attr, belongsTo, hasMany } from '@ember-data/model';
2
+ import { getOwner } from '@ember/application';
3
+ import { tracked } from '@glimmer/tracking';
4
+ import { format, formatDistanceToNow } from 'date-fns';
5
+
6
+ export default class StoreModel extends Model {
7
+ /** @ids */
8
+ @attr('string') created_by_uuid;
9
+ @attr('string') company_uuid;
10
+ @attr('string') logo_uuid;
11
+ @attr('string') backdrop_uuid;
12
+
13
+ /** @relationships */
14
+ @hasMany('notification-channel') notification_channels;
15
+ @hasMany('gateway') gateways;
16
+ @belongsTo('file') logo;
17
+ @belongsTo('file') backdrop;
18
+ @hasMany('file') files;
19
+
20
+ /** @attributes */
21
+ @attr('string', { defaultValue: '' }) name;
22
+ @attr('string', { defaultValue: '' }) description;
23
+ @attr('string', { defaultValue: '' }) website;
24
+ @attr('string', { defaultValue: '' }) email;
25
+ @attr('string', { defaultValue: '' }) phone;
26
+ @attr('string', { defaultValue: '' }) facebook;
27
+ @attr('string', { defaultValue: '' }) instagram;
28
+ @attr('string', { defaultValue: '' }) twitter;
29
+ @attr('string') public_id;
30
+ @attr('string') key;
31
+ @attr('boolean') online;
32
+ @attr('string') currency;
33
+ @attr('string') timezone;
34
+ @attr('string') pod_method;
35
+ @attr('object') options;
36
+ @attr('raw') translations;
37
+ @attr('raw') tags;
38
+ @attr('raw') alertable;
39
+ @attr('string') logo_url;
40
+ @attr('string') backdrop_url;
41
+ @attr('string') slug;
42
+
43
+ /** @dates */
44
+ @attr('date') created_at;
45
+ @attr('date') updated_at;
46
+
47
+ /** @tracked */
48
+ @tracked isLoadingFiles = false;
49
+
50
+ /** @computed */
51
+ get updatedAgo() {
52
+ return formatDistanceToNow(this.updated_at);
53
+ }
54
+
55
+ get updatedAt() {
56
+ return format(this.updated_at, 'PPP');
57
+ }
58
+
59
+ get createdAgo() {
60
+ return formatDistanceToNow(this.created_at);
61
+ }
62
+
63
+ get createdAt() {
64
+ return format(this.created_at, 'PPP p');
65
+ }
66
+
67
+ /** @methods */
68
+ toJSON() {
69
+ return {
70
+ name: this.name,
71
+ description: this.description,
72
+ currency: this.currency,
73
+ timezone: this.timezone,
74
+ options: this.options,
75
+ };
76
+ }
77
+
78
+ loadFiles() {
79
+ const owner = getOwner(this);
80
+ const store = owner.lookup(`service:store`);
81
+
82
+ this.isLoadingFiles = true;
83
+
84
+ return new Promise((resolve) => {
85
+ return store
86
+ .query('file', { subject_uuid: this.id, type: 'storefront_store_media' })
87
+ .then((files) => {
88
+ this.files = files.toArray();
89
+ this.isLoadingFiles = false;
90
+
91
+ resolve(files);
92
+ })
93
+ .catch((error) => {
94
+ this.isLoadingFiles = false;
95
+ resolve([]);
96
+ throw error;
97
+ });
98
+ });
99
+ }
100
+ }
@@ -0,0 +1,47 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+ import { action } from '@ember/object';
4
+
5
+ export default class ApplicationRoute extends Route {
6
+ @service fetch;
7
+ @service store;
8
+ @service loader;
9
+ @service currentUser;
10
+ @service modalsManager;
11
+ // @service theme;
12
+ @service storefront;
13
+
14
+ @action loading(transition) {
15
+ this.loader.showOnInitialTransition(transition, 'section.next-view-section', 'Loading storefront...');
16
+ }
17
+
18
+ @action willTransition() {
19
+ this.modalsManager.done();
20
+ }
21
+
22
+ beforeModel() {
23
+ this.disableSandbox();
24
+
25
+ return this.fetch.get('actions/store-count', {}, { namespace: 'storefront/int/v1' }).then(({ storeCount }) => {
26
+ // if no store count prompt to create a store
27
+ if (!storeCount) {
28
+ return this.storefront.createFirstStore();
29
+ }
30
+ });
31
+ }
32
+
33
+ model() {
34
+ return this.store.query('store', { limit: 300, sort: '-updated_at' });
35
+ }
36
+
37
+ afterModel(model) {
38
+ if (model.length) {
39
+ // this.storefront.listenForIncomingOrders();
40
+ }
41
+ }
42
+
43
+ @action disableSandbox() {
44
+ this.currentUser.setOption('sandbox', false);
45
+ // this.theme.setEnvironment();
46
+ }
47
+ }
@@ -0,0 +1,3 @@
1
+ import Route from '@ember/routing/route';
2
+
3
+ export default class CustomersIndexEditRoute extends Route {}
@@ -0,0 +1,25 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class CustomersIndexRoute extends Route {
5
+ @service store;
6
+
7
+ queryParams = {
8
+ page: { refreshModel: true },
9
+ limit: { refreshModel: true },
10
+ sort: { refreshModel: true },
11
+ query: { refreshModel: true },
12
+ status: { refreshModel: true },
13
+ phone: { refreshModel: true },
14
+ email: { refreshModel: true },
15
+ address: { refreshModel: true },
16
+ public_id: { refreshModel: true },
17
+ internal_id: { refreshModel: true },
18
+ created_at: { refreshModel: true },
19
+ updated_at: { refreshModel: true },
20
+ };
21
+
22
+ model(params) {
23
+ return this.store.query('customer', params);
24
+ }
25
+ }
@@ -0,0 +1,3 @@
1
+ import Route from '@ember/routing/route';
2
+
3
+ export default class HomeRoute extends Route {}
@@ -0,0 +1,3 @@
1
+ import Route from '@ember/routing/route';
2
+
3
+ export default class NetworksIndexNetworkCustomersRoute extends Route {}
@@ -0,0 +1,15 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class NetworksIndexNetworkIndexRoute extends Route {
5
+ @service store;
6
+
7
+ model() {
8
+ return this.modelFor('networks.index.network');
9
+ }
10
+
11
+ afterModel(model) {
12
+ // model.loadNotificationChannels();
13
+ // model.loadPaymentGateways();
14
+ }
15
+ }
@@ -0,0 +1,3 @@
1
+ import Route from '@ember/routing/route';
2
+
3
+ export default class NetworksIndexNetworkOrdersRoute extends Route {}
@@ -0,0 +1,28 @@
1
+ import Route from '@ember/routing/route';
2
+
3
+ export default class NetworksIndexNetworkStoresRoute extends Route {
4
+ model() {
5
+ const network = this.modelFor('networks.index.network');
6
+
7
+ return this.store.query('store', { network: network.id, without_category: true });
8
+ }
9
+
10
+ async setupController(controller, model) {
11
+ super.setupController(controller, model);
12
+
13
+ // get the network
14
+ const network = this.modelFor('networks.index.network');
15
+
16
+ // set stores to the controller
17
+ controller.stores = model.toArray();
18
+
19
+ // set network to controller
20
+ controller.network = network;
21
+
22
+ // load the network categories
23
+ const categories = await this.store.query('category', { owner_uuid: network.id, parents_only: true, for: 'storefront_network' });
24
+
25
+ // set the categories loaded
26
+ controller.categories = categories.toArray();
27
+ }
28
+ }
@@ -0,0 +1,10 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class NetworksIndexNetworkRoute extends Route {
5
+ @service store;
6
+
7
+ model({ public_id }) {
8
+ return this.store.findRecord('network', public_id);
9
+ }
10
+ }
@@ -0,0 +1,19 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class NetworksIndexRoute extends Route {
5
+ @service store;
6
+
7
+ queryParams = {
8
+ page: { refreshModel: true },
9
+ limit: { refreshModel: true },
10
+ sort: { refreshModel: true },
11
+ query: { refreshModel: true },
12
+ created_at: { refreshModel: true },
13
+ updated_at: { refreshModel: true },
14
+ };
15
+
16
+ model(params) {
17
+ return this.store.query('network', params);
18
+ }
19
+ }
@@ -0,0 +1,3 @@
1
+ import Route from '@ember/routing/route';
2
+
3
+ export default class OrdersIndexEditRoute extends Route {}
@@ -0,0 +1,3 @@
1
+ import Route from '@ember/routing/route';
2
+
3
+ export default class OrdersIndexNewRoute extends Route {}
@@ -0,0 +1,3 @@
1
+ import Route from '@ember/routing/route';
2
+
3
+ export default class OrdersIndexViewRoute extends Route {}
@@ -0,0 +1,29 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class OrdersIndexRoute extends Route {
5
+ @service store;
6
+
7
+ queryParams = {
8
+ page: { refreshModel: true },
9
+ limit: { refreshModel: true },
10
+ sort: { refreshModel: true },
11
+ query: { refreshModel: true },
12
+ status: { refreshModel: true },
13
+ public_id: { refreshModel: true },
14
+ internal_id: { refreshModel: true },
15
+ payload: { refreshModel: true },
16
+ tracking: { refreshModel: true },
17
+ facilitator: { refreshModel: true },
18
+ driver: { refreshModel: true },
19
+ customer: { refreshModel: true },
20
+ pickup: { refreshModel: true },
21
+ dropoff: { refreshModel: true },
22
+ after: { refreshModel: true },
23
+ before: { refreshModel: true },
24
+ };
25
+
26
+ model(params) {
27
+ return this.store.query('order', params);
28
+ }
29
+ }
@@ -0,0 +1,15 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class ProductsIndexCategoryEditRoute extends Route {
5
+ @service store;
6
+ templateName = 'products.index.category.new';
7
+
8
+ model({ public_id }) {
9
+ return this.store.queryRecord('product', {
10
+ public_id,
11
+ single: true,
12
+ with: ['addonCategories', 'variants', 'files', 'hours'],
13
+ });
14
+ }
15
+ }
@@ -0,0 +1,7 @@
1
+ import Route from '@ember/routing/route';
2
+
3
+ export default class ProductsIndexCategoryNewRoute extends Route {
4
+ didTransition() {
5
+ this.controller?.reset();
6
+ }
7
+ }
@@ -0,0 +1,54 @@
1
+ import Route from '@ember/routing/route';
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 ProductsIndexCategoryRoute extends Route {
7
+ @service store;
8
+ @service currentUser;
9
+ @service loader;
10
+ @tracked categorySlug;
11
+
12
+ queryParams = {
13
+ page: { refreshModel: true },
14
+ limit: { refreshModel: true },
15
+ sort: { refreshModel: true },
16
+ query: { refreshModel: true },
17
+ public_id: { refreshModel: true },
18
+ sku: { refreshModel: true },
19
+ created_at: { refreshModel: true },
20
+ updated_at: { refreshModel: true },
21
+ };
22
+
23
+ @action willTransition({ targetName }) {
24
+ if (typeof targetName === 'string' && !targetName.startsWith('console.storefront.products.index.category')) {
25
+ this.controllerFor('products.index').category = null;
26
+ }
27
+ }
28
+
29
+ loading(transition) {
30
+ this.loader.showOnInitialTransition(transition, 'section.next-view-section', 'Loading products...');
31
+ }
32
+
33
+ model({ slug, ...params }) {
34
+ this.categorySlug = slug;
35
+
36
+ return this.store.query('product', {
37
+ category_slug: slug,
38
+ store_uuid: this.currentUser.getOption('activeStorefront'),
39
+ ...params,
40
+ });
41
+ }
42
+
43
+ setupController(controller) {
44
+ const category = this.findCategoryFromSlug();
45
+ controller.category = category;
46
+ this.controllerFor('products.index').category = category;
47
+ }
48
+
49
+ findCategoryFromSlug() {
50
+ return this.store.peekAll('category').find((category) => {
51
+ return category.get('slug') === this.categorySlug && category.get('for') === 'storefront_product';
52
+ });
53
+ }
54
+ }
@@ -0,0 +1 @@
1
+ export { default } from '../category/edit';
@@ -0,0 +1,22 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class ProductsIndexIndexRoute extends Route {
5
+ @service store;
6
+ @service currentUser;
7
+
8
+ queryParams = {
9
+ page: { refreshModel: true },
10
+ limit: { refreshModel: true },
11
+ sort: { refreshModel: true },
12
+ query: { refreshModel: true },
13
+ public_id: { refreshModel: true },
14
+ sku: { refreshModel: true },
15
+ created_at: { refreshModel: true },
16
+ updated_at: { refreshModel: true },
17
+ };
18
+
19
+ model(params) {
20
+ return this.store.query('product', { store_uuid: this.currentUser.getOption('activeStorefront'), ...params });
21
+ }
22
+ }
@@ -0,0 +1,21 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+ import { action } from '@ember/object';
4
+
5
+ export default class ProductsIndexRoute extends Route {
6
+ @service store;
7
+ @service currentUser;
8
+
9
+ @action willTransition(transition) {
10
+ this.controller.category = null;
11
+ }
12
+
13
+ model(params = {}) {
14
+ return this.store.query('category', {
15
+ for: 'storefront_product',
16
+ owner_uuid: this.currentUser.getOption('activeStorefront'),
17
+ limit: -1,
18
+ ...params,
19
+ });
20
+ }
21
+ }
@@ -0,0 +1,10 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class SettingsApiRoute extends Route {
5
+ @service storefront;
6
+
7
+ model() {
8
+ return this.storefront?.activeStore;
9
+ }
10
+ }
@@ -0,0 +1,11 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class SettingsGatewaysRoute extends Route {
5
+ @service store;
6
+ @service storefront;
7
+
8
+ model() {
9
+ return this.store.query('gateway', { owner_uuid: this.storefront?.activeStore?.id });
10
+ }
11
+ }
@@ -0,0 +1,16 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class SettingsIndexRoute extends Route {
5
+ @service store;
6
+ @service currentUser;
7
+ @service storefront;
8
+
9
+ model() {
10
+ return this.store.peekRecord('store', this.currentUser.getOption('activeStorefront'));
11
+ }
12
+
13
+ afterModel(model) {
14
+ model?.loadFiles();
15
+ }
16
+ }
@@ -0,0 +1,14 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class SettingsLocationsRoute extends Route {
5
+ @service store;
6
+ @service storefront;
7
+
8
+ model() {
9
+ return this.store.query('store-location', {
10
+ store_uuid: this.storefront?.activeStore?.id,
11
+ with: ['hours'],
12
+ });
13
+ }
14
+ }
@@ -0,0 +1,11 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class SettingsNotificationsRoute extends Route {
5
+ @service store;
6
+ @service storefront;
7
+
8
+ model() {
9
+ return this.store.query('notification-channel', { owner_uuid: this.storefront?.activeStore?.id });
10
+ }
11
+ }
@@ -0,0 +1,48 @@
1
+ import buildRoutes from 'ember-engines/routes';
2
+
3
+ export default buildRoutes(function () {
4
+ this.route('home', { path: '/' });
5
+ this.route('products', function () {
6
+ this.route('index', { path: '/' }, function () {
7
+ this.route('index', { path: '/' }, function () {
8
+ this.route('edit', { path: '/:public_id' });
9
+ });
10
+ this.route('category', { path: '/:slug' }, function () {
11
+ this.route('new');
12
+ this.route('edit', { path: '/:public_id' });
13
+ });
14
+ });
15
+ });
16
+ this.route('customers', function () {
17
+ this.route('index', { path: '/' }, function () {
18
+ this.route('edit', { path: '/:public_id' });
19
+ });
20
+ });
21
+ this.route('orders', function () {
22
+ this.route('index', { path: '/' }, function () {
23
+ this.route('new');
24
+ this.route('edit', { path: '/:public_id' });
25
+ this.route('view', { path: '/:public_id' });
26
+ });
27
+ });
28
+ this.route('networks', function () {
29
+ this.route('index', { path: '/' }, function () {
30
+ this.route('network', { path: '/:public_id' }, function () {
31
+ this.route('stores');
32
+ this.route('customers');
33
+ this.route('orders');
34
+ });
35
+ });
36
+ });
37
+ this.route('promotions');
38
+ this.route('coupons');
39
+ this.route('broadcast');
40
+ this.route('pages');
41
+ this.route('settings', function () {
42
+ this.route('index', { path: '/' });
43
+ this.route('api');
44
+ this.route('locations');
45
+ this.route('gateways');
46
+ this.route('notifications');
47
+ });
48
+ });
@@ -0,0 +1,15 @@
1
+ import ApplicationSerializer from '@fleetbase/ember-core/serializers/application';
2
+ import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';
3
+
4
+ export default class AddonCategorySerializer extends ApplicationSerializer.extend(EmbeddedRecordsMixin) {
5
+ /**
6
+ * Embedded relationship attributes
7
+ *
8
+ * @var {Object}
9
+ */
10
+ get attrs() {
11
+ return {
12
+ addons: { embedded: 'always' },
13
+ };
14
+ }
15
+ }
@@ -0,0 +1,19 @@
1
+ import ApplicationSerializer from '@fleetbase/ember-core/serializers/application';
2
+ import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';
3
+
4
+ export default class NetworkSerializer extends ApplicationSerializer.extend(EmbeddedRecordsMixin) {
5
+ /**
6
+ * Embedded relationship attributes
7
+ *
8
+ * @var {Object}
9
+ */
10
+ get attrs() {
11
+ return {
12
+ stores: { embedded: 'always' },
13
+ gateways: { embedded: 'always' },
14
+ notification_channels: { embedded: 'always' },
15
+ logo: { embedded: 'always' },
16
+ backdrop: { embedded: 'always' },
17
+ };
18
+ }
19
+ }
@@ -0,0 +1,15 @@
1
+ import ApplicationSerializer from '@fleetbase/ember-core/serializers/application';
2
+ import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';
3
+
4
+ export default class NotificationChannelSerializer extends ApplicationSerializer.extend(EmbeddedRecordsMixin) {
5
+ /**
6
+ * Embedded relationship attributes
7
+ *
8
+ * @var {Object}
9
+ */
10
+ get attrs() {
11
+ return {
12
+ certificate: { embedded: 'always' },
13
+ };
14
+ }
15
+ }
@@ -0,0 +1,15 @@
1
+ import ApplicationSerializer from '@fleetbase/ember-core/serializers/application';
2
+ import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';
3
+
4
+ export default class ProductAddonCategorySerializer extends ApplicationSerializer.extend(EmbeddedRecordsMixin) {
5
+ /**
6
+ * Embedded relationship attributes
7
+ *
8
+ * @var {Object}
9
+ */
10
+ get attrs() {
11
+ return {
12
+ category: { embedded: 'always' },
13
+ };
14
+ }
15
+ }
@@ -0,0 +1,15 @@
1
+ import ApplicationSerializer from '@fleetbase/ember-core/serializers/application';
2
+ import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';
3
+
4
+ export default class ProductVariantSerializer extends ApplicationSerializer.extend(EmbeddedRecordsMixin) {
5
+ /**
6
+ * Embedded relationship attributes
7
+ *
8
+ * @var {Object}
9
+ */
10
+ get attrs() {
11
+ return {
12
+ options: { embedded: 'always' },
13
+ };
14
+ }
15
+ }