@fleetbase/storefront-engine 0.1.6 → 0.1.8
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.
- package/.php-cs-fixer.php +29 -0
- package/LICENSE.md +16 -4
- package/README.md +106 -13
- package/addon/components/modals/add-store-to-category.hbs +5 -0
- package/addon/components/modals/create-network-category.hbs +28 -28
- package/addon/components/modals/share-network.hbs +3 -3
- package/addon/components/modals/store-details.hbs +22 -0
- package/addon/components/modals/store-form.hbs +22 -0
- package/addon/components/modals/store-form.js +21 -0
- package/addon/components/network-category-picker.hbs +40 -0
- package/addon/components/network-category-picker.js +83 -0
- package/addon/components/store-selector.hbs +4 -2
- package/addon/components/widget/orders.js +22 -17
- package/addon/controllers/networks/index/network/index.js +133 -9
- package/addon/controllers/networks/index/network/stores.js +422 -153
- package/addon/controllers/networks/index.js +66 -4
- package/addon/controllers/products/index/category.js +1 -1
- package/addon/controllers/settings/index.js +14 -7
- package/addon/controllers/settings/notifications.js +1 -1
- package/addon/models/store.js +44 -7
- package/addon/routes/networks/index/network/customers.js +4 -1
- package/addon/routes/networks/index/network/orders.js +4 -1
- package/addon/routes/networks/index/network/stores.js +19 -15
- package/addon/serializers/store.js +1 -0
- package/addon/templates/customers/index.hbs +0 -11
- package/addon/templates/networks/index/network/index.hbs +1 -1
- package/addon/templates/networks/index/network/stores.hbs +8 -163
- package/addon/templates/networks/index/network.hbs +2 -3
- package/addon/utils/create-shareable-link.js +21 -0
- package/app/adapters/addon-category.js +1 -1
- package/app/adapters/gateway.js +1 -1
- package/app/adapters/network.js +1 -1
- package/app/adapters/notification-channel.js +1 -1
- package/app/adapters/product-addon-category.js +1 -1
- package/app/adapters/product-addon.js +1 -1
- package/app/adapters/product-hour.js +1 -1
- package/app/adapters/product-store-location.js +1 -1
- package/app/adapters/product-variant-option.js +1 -1
- package/app/adapters/product-variant.js +1 -1
- package/app/adapters/product.js +1 -1
- package/app/adapters/store-hour.js +1 -1
- package/app/adapters/store-location.js +1 -1
- package/app/adapters/store.js +1 -1
- package/app/adapters/storefront.js +1 -1
- package/app/components/file-record.js +1 -1
- package/app/components/modals/add-store-hours.js +1 -1
- package/app/components/modals/add-store-to-category.js +1 -0
- package/app/components/modals/add-stores-to-network.js +1 -1
- package/app/components/modals/assign-driver.js +1 -1
- package/app/components/modals/create-first-store.js +1 -1
- package/app/components/modals/create-gateway.js +1 -1
- package/app/components/modals/create-network-category.js +1 -1
- package/app/components/modals/create-network.js +1 -1
- package/app/components/modals/create-new-variant.js +1 -1
- package/app/components/modals/create-notification-channel.js +1 -1
- package/app/components/modals/create-product-category.js +1 -1
- package/app/components/modals/create-store.js +1 -1
- package/app/components/modals/edit-network.js +1 -1
- package/app/components/modals/import-products.js +1 -1
- package/app/components/modals/incoming-order.js +1 -1
- package/app/components/modals/manage-addons.js +1 -1
- package/app/components/modals/order-ready-assign-driver.js +1 -1
- package/app/components/modals/select-addon-category.js +1 -1
- package/app/components/modals/share-network.js +1 -1
- package/app/components/modals/store-details.js +1 -0
- package/app/components/modals/store-form.js +1 -0
- package/app/components/modals/store-location-form.js +1 -1
- package/app/components/network-category-picker.js +1 -0
- package/app/components/order-card.js +1 -1
- package/app/components/schedule-manager.js +1 -1
- package/app/components/settings-container.js +1 -1
- package/app/components/store-selector.js +1 -1
- package/app/components/widget/customers.js +1 -1
- package/app/components/widget/orders.js +1 -1
- package/app/components/widget/storefront-metrics.js +1 -1
- package/app/controllers/application.js +1 -1
- package/app/controllers/customers/index.js +1 -1
- package/app/controllers/home.js +1 -1
- package/app/controllers/networks/index/network/customers.js +1 -1
- package/app/controllers/networks/index/network/index.js +1 -1
- package/app/controllers/networks/index/network/orders.js +1 -1
- package/app/controllers/networks/index/network/stores.js +1 -1
- package/app/controllers/networks/index/network.js +1 -1
- package/app/controllers/networks/index.js +1 -1
- package/app/controllers/orders/index.js +1 -1
- package/app/controllers/products/index/category/edit.js +1 -1
- package/app/controllers/products/index/category/new.js +1 -1
- package/app/controllers/products/index/category.js +1 -1
- package/app/controllers/products/index/index/edit.js +1 -1
- package/app/controllers/products/index/index.js +1 -1
- package/app/controllers/products/index.js +1 -1
- package/app/controllers/settings/api.js +1 -1
- package/app/controllers/settings/gateways.js +1 -1
- package/app/controllers/settings/index.js +1 -1
- package/app/controllers/settings/locations.js +1 -1
- package/app/controllers/settings/notifications.js +1 -1
- package/app/helpers/get-tip-amount.js +1 -1
- package/app/models/addon-category.js +1 -1
- package/app/models/gateway.js +1 -1
- package/app/models/network.js +1 -1
- package/app/models/notification-channel.js +1 -1
- package/app/models/product-addon-category.js +1 -1
- package/app/models/product-addon.js +1 -1
- package/app/models/product-hour.js +1 -1
- package/app/models/product-store-location.js +1 -1
- package/app/models/product-variant-option.js +1 -1
- package/app/models/product-variant.js +1 -1
- package/app/models/product.js +1 -1
- package/app/models/store-hour.js +1 -1
- package/app/models/store-location.js +1 -1
- package/app/models/store.js +1 -1
- package/app/routes/application.js +1 -1
- package/app/routes/customers/index/edit.js +1 -1
- package/app/routes/customers/index.js +1 -1
- package/app/routes/home.js +1 -1
- package/app/routes/networks/index/network/customers.js +1 -1
- package/app/routes/networks/index/network/index.js +1 -1
- package/app/routes/networks/index/network/orders.js +1 -1
- package/app/routes/networks/index/network/stores.js +1 -1
- package/app/routes/networks/index/network.js +1 -1
- package/app/routes/networks/index.js +1 -1
- package/app/routes/orders/index/edit.js +1 -1
- package/app/routes/orders/index/new.js +1 -1
- package/app/routes/orders/index/view.js +1 -1
- package/app/routes/orders/index.js +1 -1
- package/app/routes/products/index/category/edit.js +1 -1
- package/app/routes/products/index/category/new.js +1 -1
- package/app/routes/products/index/category.js +1 -1
- package/app/routes/products/index/index/edit.js +1 -1
- package/app/routes/products/index/index.js +1 -1
- package/app/routes/products/index.js +1 -1
- package/app/routes/settings/api.js +1 -1
- package/app/routes/settings/gateways.js +1 -1
- package/app/routes/settings/index.js +1 -1
- package/app/routes/settings/locations.js +1 -1
- package/app/routes/settings/notifications.js +1 -1
- package/app/serializers/addon-category.js +1 -1
- package/app/serializers/network.js +1 -1
- package/app/serializers/notification-channel.js +1 -1
- package/app/serializers/product-addon-category.js +1 -1
- package/app/serializers/product-variant.js +1 -1
- package/app/serializers/product.js +1 -1
- package/app/serializers/store-location.js +1 -1
- package/app/serializers/store.js +1 -1
- package/app/services/storefront.js +1 -1
- package/app/templates/customers/index/edit.js +1 -1
- package/app/templates/customers/index.js +1 -1
- package/app/templates/home.js +1 -1
- package/app/templates/networks/index/network/customers.js +1 -1
- package/app/templates/networks/index/network/index.js +1 -1
- package/app/templates/networks/index/network/orders.js +1 -1
- package/app/templates/networks/index/network/stores.js +1 -1
- package/app/templates/networks/index/network.js +1 -1
- package/app/templates/networks/index.js +1 -1
- package/app/templates/orders/index/edit.js +1 -1
- package/app/templates/orders/index/new.js +1 -1
- package/app/templates/orders/index/view.js +1 -1
- package/app/templates/orders/index.js +1 -1
- package/app/templates/products/index/category/edit.js +1 -1
- package/app/templates/products/index/category/new.js +1 -1
- package/app/templates/products/index/category.js +1 -1
- package/app/templates/products/index/index/edit.js +1 -1
- package/app/templates/products/index/index.js +1 -1
- package/app/templates/products/index.js +1 -1
- package/app/templates/settings/api.js +1 -1
- package/app/templates/settings/gateways.js +1 -1
- package/app/templates/settings/index.js +1 -1
- package/app/templates/settings/locations.js +1 -1
- package/app/templates/settings/notifications.js +1 -1
- package/app/templates/settings.js +1 -1
- package/app/utils/create-shareable-link.js +1 -0
- package/app/utils/get-gateway-schemas.js +1 -1
- package/app/utils/get-notification-schemas.js +1 -1
- package/composer.json +88 -0
- package/extension.json +10 -0
- package/package.json +6 -7
- package/phpstan.neon.dist +8 -0
- package/phpunit.xml.dist +16 -0
- package/server/.gitattributes +14 -0
- package/server/README.md +40 -0
- package/server/config/api.php +101 -0
- package/server/config/database.connections.php +57 -0
- package/server/config/storefront.php +19 -0
- package/server/config/twilio-notification-channel.php +36 -0
- package/server/migrations/2023_05_03_025307_create_carts_table.php +44 -0
- package/server/migrations/2023_05_03_025307_create_checkouts_table.php +51 -0
- package/server/migrations/2023_05_03_025307_create_gateways_table.php +48 -0
- package/server/migrations/2023_05_03_025307_create_network_stores_table.php +36 -0
- package/server/migrations/2023_05_03_025307_create_networks_table.php +56 -0
- package/server/migrations/2023_05_03_025307_create_notification_channels_table.php +43 -0
- package/server/migrations/2023_05_03_025307_create_payment_methods_table.php +44 -0
- package/server/migrations/2023_05_03_025307_create_product_addon_categories_table.php +38 -0
- package/server/migrations/2023_05_03_025307_create_product_addons_table.php +43 -0
- package/server/migrations/2023_05_03_025307_create_product_hours_table.php +37 -0
- package/server/migrations/2023_05_03_025307_create_product_store_locations_table.php +34 -0
- package/server/migrations/2023_05_03_025307_create_product_variant_options_table.php +40 -0
- package/server/migrations/2023_05_03_025307_create_product_variants_table.php +44 -0
- package/server/migrations/2023_05_03_025307_create_products_table.php +59 -0
- package/server/migrations/2023_05_03_025307_create_reviews_table.php +41 -0
- package/server/migrations/2023_05_03_025307_create_store_hours_table.php +37 -0
- package/server/migrations/2023_05_03_025307_create_store_locations_table.php +38 -0
- package/server/migrations/2023_05_03_025307_create_stores_table.php +57 -0
- package/server/migrations/2023_05_03_025307_create_votes_table.php +39 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_carts_table.php +40 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_checkouts_table.php +48 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_gateways_table.php +40 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_network_stores_table.php +40 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_networks_table.php +42 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_notification_channels_table.php +40 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_payment_methods_table.php +40 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_addon_categories_table.php +38 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_addons_table.php +38 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_hours_table.php +32 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_store_locations_table.php +34 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_variant_options_table.php +32 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_variants_table.php +32 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_products_table.php +44 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_reviews_table.php +38 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_store_hours_table.php +32 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_store_locations_table.php +40 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_stores_table.php +42 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_votes_table.php +38 -0
- package/server/src/Auth/Schemas/Storefront.php +95 -0
- package/server/src/Console/Commands/NotifyStorefrontOrderNearby.php +86 -0
- package/server/src/Expansions/EntityExpansion.php +44 -0
- package/server/src/Http/Controllers/ActionController.php +119 -0
- package/server/src/Http/Controllers/AddonCategoryController.php +13 -0
- package/server/src/Http/Controllers/CustomerController.php +13 -0
- package/server/src/Http/Controllers/GatewayController.php +13 -0
- package/server/src/Http/Controllers/MetricsController.php +71 -0
- package/server/src/Http/Controllers/NetworkController.php +170 -0
- package/server/src/Http/Controllers/NotificationChannelController.php +13 -0
- package/server/src/Http/Controllers/OrderController.php +154 -0
- package/server/src/Http/Controllers/ProductAddonCategoryController.php +14 -0
- package/server/src/Http/Controllers/ProductAddonController.php +14 -0
- package/server/src/Http/Controllers/ProductController.php +123 -0
- package/server/src/Http/Controllers/ProductHourController.php +13 -0
- package/server/src/Http/Controllers/ProductVariantController.php +13 -0
- package/server/src/Http/Controllers/ProductVariantOptionController.php +13 -0
- package/server/src/Http/Controllers/ReviewController.php +13 -0
- package/server/src/Http/Controllers/StoreController.php +26 -0
- package/server/src/Http/Controllers/StoreHourController.php +13 -0
- package/server/src/Http/Controllers/StoreLocationController.php +13 -0
- package/server/src/Http/Controllers/StorefrontController.php +15 -0
- package/server/src/Http/Controllers/VoteController.php +13 -0
- package/server/src/Http/Controllers/v1/CartController.php +161 -0
- package/server/src/Http/Controllers/v1/CategoryController.php +138 -0
- package/server/src/Http/Controllers/v1/CheckoutController.php +957 -0
- package/server/src/Http/Controllers/v1/CustomerController.php +482 -0
- package/server/src/Http/Controllers/v1/GatewayControllerController.php +11 -0
- package/server/src/Http/Controllers/v1/NetworkController.php +281 -0
- package/server/src/Http/Controllers/v1/PaymentMethodController.php +11 -0
- package/server/src/Http/Controllers/v1/ProductController.php +94 -0
- package/server/src/Http/Controllers/v1/ReviewController.php +270 -0
- package/server/src/Http/Controllers/v1/ServiceQuoteController.php +402 -0
- package/server/src/Http/Controllers/v1/StoreController.php +176 -0
- package/server/src/Http/Filter/AddonCategoryFilter.php +19 -0
- package/server/src/Http/Filter/CustomerFilter.php +18 -0
- package/server/src/Http/Filter/GatewayFilter.php +13 -0
- package/server/src/Http/Filter/NetworkFilter.php +18 -0
- package/server/src/Http/Filter/NotificationChannelFilter.php +13 -0
- package/server/src/Http/Filter/OrderFilter.php +46 -0
- package/server/src/Http/Filter/ProductFilter.php +28 -0
- package/server/src/Http/Filter/StoreFilter.php +42 -0
- package/server/src/Http/Filter/StoreLocationFilter.php +23 -0
- package/server/src/Http/Middleware/SetStorefrontSession.php +130 -0
- package/server/src/Http/Requests/AddStoreToNetworkCategory.php +45 -0
- package/server/src/Http/Requests/CaptureOrderRequest.php +30 -0
- package/server/src/Http/Requests/CreateCustomerRequest.php +44 -0
- package/server/src/Http/Requests/CreateReviewRequest.php +34 -0
- package/server/src/Http/Requests/GetServiceQuoteFromCart.php +40 -0
- package/server/src/Http/Requests/InitializeCheckoutRequest.php +38 -0
- package/server/src/Http/Requests/NetworkActionRequest.php +43 -0
- package/server/src/Http/Requests/VerifyCreateCustomerRequest.php +31 -0
- package/server/src/Http/Resources/Cart.php +31 -0
- package/server/src/Http/Resources/Category.php +48 -0
- package/server/src/Http/Resources/Customer.php +36 -0
- package/server/src/Http/Resources/Gateway.php +32 -0
- package/server/src/Http/Resources/Media.php +29 -0
- package/server/src/Http/Resources/Network.php +48 -0
- package/server/src/Http/Resources/Product.php +209 -0
- package/server/src/Http/Resources/Review.php +45 -0
- package/server/src/Http/Resources/ReviewCustomer.php +60 -0
- package/server/src/Http/Resources/Store.php +76 -0
- package/server/src/Http/Resources/StoreHour.php +29 -0
- package/server/src/Http/Resources/StoreLocation.php +33 -0
- package/server/src/Imports/ProductsImport.php +20 -0
- package/server/src/Jobs/DownloadProductImageUrl.php +60 -0
- package/server/src/Listeners/HandleOrderCompleted.php +31 -0
- package/server/src/Listeners/HandleOrderDispatched.php +34 -0
- package/server/src/Listeners/HandleOrderDriverAssigned.php +37 -0
- package/server/src/Listeners/HandleOrderStarted.php +27 -0
- package/server/src/Mail/StorefrontNetworkInvite.php +48 -0
- package/server/src/Models/AddonCategory.php +30 -0
- package/server/src/Models/Cart.php +691 -0
- package/server/src/Models/Checkout.php +166 -0
- package/server/src/Models/Customer.php +88 -0
- package/server/src/Models/Gateway.php +165 -0
- package/server/src/Models/Network.php +300 -0
- package/server/src/Models/NetworkStore.php +86 -0
- package/server/src/Models/NotificationChannel.php +147 -0
- package/server/src/Models/PaymentMethod.php +99 -0
- package/server/src/Models/Product.php +315 -0
- package/server/src/Models/ProductAddon.php +128 -0
- package/server/src/Models/ProductAddonCategory.php +90 -0
- package/server/src/Models/ProductHour.php +59 -0
- package/server/src/Models/ProductStoreLocation.php +77 -0
- package/server/src/Models/ProductVariant.php +125 -0
- package/server/src/Models/ProductVariantOption.php +86 -0
- package/server/src/Models/Review.php +127 -0
- package/server/src/Models/Store.php +478 -0
- package/server/src/Models/StoreHour.php +59 -0
- package/server/src/Models/StoreLocation.php +126 -0
- package/server/src/Models/StorefrontModel.php +22 -0
- package/server/src/Models/Vote.php +84 -0
- package/server/src/Notifications/StorefrontOrderCanceled.php +196 -0
- package/server/src/Notifications/StorefrontOrderCompleted.php +201 -0
- package/server/src/Notifications/StorefrontOrderCreated.php +157 -0
- package/server/src/Notifications/StorefrontOrderDriverAssigned.php +200 -0
- package/server/src/Notifications/StorefrontOrderEnroute.php +199 -0
- package/server/src/Notifications/StorefrontOrderNearby.php +201 -0
- package/server/src/Notifications/StorefrontOrderPreparing.php +202 -0
- package/server/src/Notifications/StorefrontOrderReadyForPickup.php +202 -0
- package/server/src/Observers/NetworkObserver.php +40 -0
- package/server/src/Observers/ProductObserver.php +118 -0
- package/server/src/Providers/EventServiceProvider.php +23 -0
- package/server/src/Providers/StorefrontServiceProvider.php +103 -0
- package/server/src/Support/Metrics.php +193 -0
- package/server/src/Support/OrderConfig.php +13 -0
- package/server/src/Support/QPay.php +208 -0
- package/server/src/Support/Storefront.php +201 -0
- package/server/src/routes.php +180 -0
- package/server/tests/Feature.php +5 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
$finder = PhpCsFixer\Finder::create()
|
|
4
|
+
->in(__DIR__ . DIRECTORY_SEPARATOR . 'server' . DIRECTORY_SEPARATOR . 'tests')
|
|
5
|
+
->in(__DIR__ . DIRECTORY_SEPARATOR . 'server' . DIRECTORY_SEPARATOR . 'src')
|
|
6
|
+
->append(['.php-cs-fixer.php']);
|
|
7
|
+
|
|
8
|
+
$rules = [
|
|
9
|
+
'@Symfony' => true,
|
|
10
|
+
'phpdoc_no_empty_return' => false,
|
|
11
|
+
'array_syntax' => ['syntax' => 'short'],
|
|
12
|
+
'yoda_style' => false,
|
|
13
|
+
'binary_operator_spaces' => [
|
|
14
|
+
'operators' => [
|
|
15
|
+
'=>' => 'align',
|
|
16
|
+
'=' => 'align',
|
|
17
|
+
],
|
|
18
|
+
],
|
|
19
|
+
'concat_space' => ['spacing' => 'one'],
|
|
20
|
+
'not_operator_with_space' => false,
|
|
21
|
+
'increment_style' => ['style' => 'post'],
|
|
22
|
+
'indentation_type' => true,
|
|
23
|
+
'single_quote' => true,
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
return (new PhpCsFixer\Config())
|
|
27
|
+
->setUsingCache(true)
|
|
28
|
+
->setRules($rules)
|
|
29
|
+
->setFinder($finder);
|
package/LICENSE.md
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
The MIT License (MIT)
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
3
|
+
Copyright (c) 2023 Fleetbase
|
|
4
4
|
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
6
11
|
|
|
7
|
-
The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
8
14
|
|
|
9
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,32 +1,125 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<p align="center">
|
|
3
|
+
<img src="https://camo.githubusercontent.com/870812d4ebe999bd1434db7ffcb27c2f347f1c2c6af1842e59ae8b28855b4b42/68747470733a2f2f666c622d6173736574732e73332e61702d736f757468656173742d312e616d617a6f6e6177732e636f6d2f7374617469632f73746f726566726f6e742d6c6f676f2e737667" width="380" height="100" />
|
|
4
|
+
</p>
|
|
5
|
+
<p align="center">
|
|
6
|
+
Open-source Headless Commerce & Marketplace Extension for Fleetbase
|
|
7
|
+
</p>
|
|
8
|
+
</p>
|
|
2
9
|
|
|
3
|
-
|
|
10
|
+
---
|
|
4
11
|
|
|
12
|
+
## Overview
|
|
5
13
|
|
|
6
|
-
|
|
14
|
+
This monorepo contains both the frontend and backend components of the Storefront extension for Fleetbase. The frontend is built using Ember.js and the backend is implemented in PHP.
|
|
7
15
|
|
|
8
|
-
|
|
9
|
-
* Ember CLI v3.24 or above
|
|
10
|
-
* Node.js v14 or above
|
|
16
|
+
### Requirements
|
|
11
17
|
|
|
18
|
+
- PHP 7.3.0 or above
|
|
19
|
+
- Ember.js v3.24 or above
|
|
20
|
+
- Ember CLI v3.24 or above
|
|
21
|
+
- Node.js v14 or above
|
|
12
22
|
|
|
13
|
-
##
|
|
23
|
+
## Structure
|
|
14
24
|
|
|
15
25
|
```
|
|
16
|
-
|
|
26
|
+
├── addon
|
|
27
|
+
├── app
|
|
28
|
+
├── assets
|
|
29
|
+
├── translations
|
|
30
|
+
├── config
|
|
31
|
+
├── node_modules
|
|
32
|
+
├── server
|
|
33
|
+
│ ├── config
|
|
34
|
+
│ ├── data
|
|
35
|
+
│ ├── migrations
|
|
36
|
+
│ ├── resources
|
|
37
|
+
│ ├── src
|
|
38
|
+
│ ├── tests
|
|
39
|
+
│ └── vendor
|
|
40
|
+
├── tests
|
|
41
|
+
├── testem.js
|
|
42
|
+
├── index.js
|
|
43
|
+
├── package.json
|
|
44
|
+
├── phpstan.neon.dist
|
|
45
|
+
├── phpunit.xml.dist
|
|
46
|
+
├── pnpm-lock.yaml
|
|
47
|
+
├── ember-cli-build.js
|
|
48
|
+
├── composer.json
|
|
49
|
+
├── CONTRIBUTING.md
|
|
50
|
+
├── LICENSE.md
|
|
51
|
+
├── README.md
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Installation
|
|
55
|
+
|
|
56
|
+
### Backend
|
|
57
|
+
|
|
58
|
+
Install the PHP packages using Composer:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
composer require fleetbase/core-api
|
|
62
|
+
composer require fleetbase/fleetops
|
|
63
|
+
composer require fleetbase/storefront
|
|
17
64
|
```
|
|
65
|
+
### Frontend
|
|
18
66
|
|
|
67
|
+
Install the Ember.js Engine/Addon:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
pnpm install @fleetbase/storefront
|
|
71
|
+
```
|
|
19
72
|
|
|
20
73
|
## Usage
|
|
21
74
|
|
|
22
|
-
|
|
75
|
+
### Backend
|
|
76
|
+
|
|
77
|
+
🧹 Keep a modern codebase with **PHP CS Fixer**:
|
|
78
|
+
```bash
|
|
79
|
+
composer lint
|
|
80
|
+
```
|
|
23
81
|
|
|
82
|
+
⚗️ Run static analysis using **PHPStan**:
|
|
83
|
+
```bash
|
|
84
|
+
composer test:types
|
|
85
|
+
```
|
|
24
86
|
|
|
25
|
-
|
|
87
|
+
✅ Run unit tests using **PEST**
|
|
88
|
+
```bash
|
|
89
|
+
composer test:unit
|
|
90
|
+
```
|
|
26
91
|
|
|
27
|
-
|
|
92
|
+
🚀 Run the entire test suite:
|
|
93
|
+
```bash
|
|
94
|
+
composer test
|
|
95
|
+
```
|
|
28
96
|
|
|
97
|
+
### Frontend
|
|
29
98
|
|
|
30
|
-
|
|
99
|
+
🧹 Keep a modern codebase with **ESLint**:
|
|
100
|
+
```bash
|
|
101
|
+
pnpm lint
|
|
102
|
+
```
|
|
31
103
|
|
|
32
|
-
|
|
104
|
+
✅ Run unit tests using **Ember/QUnit**
|
|
105
|
+
```bash
|
|
106
|
+
pnpm test
|
|
107
|
+
pnpm test:ember
|
|
108
|
+
pnpm test:ember-compatibility
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
🚀 Start the Ember Addon/Engine
|
|
112
|
+
```bash
|
|
113
|
+
pnpm start
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
🔨 Build the Ember Addon/Engine
|
|
117
|
+
```bash
|
|
118
|
+
pnpm build
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Contributing
|
|
122
|
+
See the Contributing Guide for details on how to contribute to this project.
|
|
123
|
+
|
|
124
|
+
## License
|
|
125
|
+
This project is licensed under the MIT License.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
|
|
2
|
+
<div class="modal-body-container">
|
|
3
|
+
<NetworkCategoryPicker @network={{@options.network}} @onSelect={{@options.onSelectCategory}} @onCreateNewCategory={{@options.createNewCategory}} @wrapperClass="mr-2" />
|
|
4
|
+
</div>
|
|
5
|
+
</Modal::Default>
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
<Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
|
|
2
2
|
<div class="modal-body-container">
|
|
3
|
+
<InputGroup @name="Parent category" @wrapperClass="border-b border-gray-200 dark:border-gray-700 pb-4 mb-3i">
|
|
4
|
+
<ModelSelect @modelName="category" @query={{hash for="storefront_network" owner_uuid=@options.network.id}} @selectedModel={{@options.parentCategory}} @placeholder="Select a parent category if any" @triggerClass="form-select form-input" @infiniteScroll={{false}} @renderInPlace={{true}} @onChange={{@options.setParentCategory}} as |model|>
|
|
5
|
+
{{model.name}}
|
|
6
|
+
</ModelSelect>
|
|
7
|
+
</InputGroup>
|
|
3
8
|
<InputGroup @name="Category name" @value={{@options.category.name}} @helpText="Enter a name for category" />
|
|
4
9
|
<InputGroup @name="Category description" @value={{@options.category.description}} @helpText="Give your network category a brief description" />
|
|
5
|
-
<InputGroup @name="Category icon type" @wrapperClass="mb-0">
|
|
10
|
+
{{!-- <InputGroup @name="Category icon type" @wrapperClass="mb-0">
|
|
6
11
|
<div class="flex flex-row dark:text-gray-100 mt-4">
|
|
7
12
|
<div class="flex flex-row items-center mr-4">
|
|
8
13
|
<RadioButton @radioClass="focus:ring-blue-500 mr-2" @radioId="image_icon_type" @value="image" @groupValue={{@options.iconType}} @name="icon_type" @changed={{fn (mut @options.iconType)}} />
|
|
@@ -14,35 +19,30 @@
|
|
|
14
19
|
</div>
|
|
15
20
|
</div>
|
|
16
21
|
</InputGroup>
|
|
17
|
-
<div>iconType: {{@options.iconType}}</div>
|
|
18
22
|
<InputGroup @name="Category icon">
|
|
19
|
-
|
|
20
|
-
<
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
Upload new
|
|
35
|
-
</span>
|
|
36
|
-
{{/if}}
|
|
37
|
-
</a>
|
|
38
|
-
</FileUpload>
|
|
39
|
-
<a href="javascript:;" class="text-danger block mt-2" {{on "click" @options.clearImage}}>
|
|
40
|
-
<FaIcon @icon="times" @prefix="fas" class="mr-1" />
|
|
41
|
-
<span>Remove</span>
|
|
23
|
+
<div class="w-32">
|
|
24
|
+
<img src={{@options.category.icon_url}} alt={{@options.category.name}} class="w-full rounded-md" />
|
|
25
|
+
<FileUpload @name="icons" @accept="image/*" @onFileAdded={{@options.uploadIcon}} as |queue|>
|
|
26
|
+
<a tabindex={{0}} class="flex items-center px-0 mt-2 text-xs no-underline truncate btn btn-sm btn-default">
|
|
27
|
+
{{#if queue.files.length}}
|
|
28
|
+
<Spinner class="mr-1" />
|
|
29
|
+
<span>
|
|
30
|
+
Uploading...
|
|
31
|
+
</span>
|
|
32
|
+
{{else}}
|
|
33
|
+
<FaIcon @icon="image" class="mr-1" />
|
|
34
|
+
<span>
|
|
35
|
+
Upload new
|
|
36
|
+
</span>
|
|
37
|
+
{{/if}}
|
|
42
38
|
</a>
|
|
43
|
-
</
|
|
44
|
-
|
|
45
|
-
|
|
39
|
+
</FileUpload>
|
|
40
|
+
<a href="javascript:;" class="text-danger block mt-2" {{on "click" @options.clearImage}}>
|
|
41
|
+
<FaIcon @icon="times" @prefix="fas" class="mr-1" />
|
|
42
|
+
<span>Remove</span>
|
|
43
|
+
</a>
|
|
44
|
+
</div>
|
|
45
|
+
</InputGroup> --}}
|
|
46
46
|
<InputGroup>
|
|
47
47
|
<TranslationsEditor @value={{@options.category.translations}} @defaultKeys={{array "name" "description"}} @onChange={{fn (mut @options.category.translations)}} />
|
|
48
48
|
</InputGroup>
|
|
@@ -24,11 +24,11 @@
|
|
|
24
24
|
|
|
25
25
|
<div class="rounded-md border dark:border-gray-800 dark:bg-gray-800 p-4">
|
|
26
26
|
<h4 class="dark:text-gray-50 mb-4 font-semibold">Get link</h4>
|
|
27
|
-
<div class="input-group mb-
|
|
28
|
-
<
|
|
27
|
+
<div class="input-group mb-0i">
|
|
28
|
+
<Toggle @isToggled={{@options.network.options.shareable_link_enabled}} @onToggle={{@options.toggleShareableLink}} @label="Enable shareable link" @helpText="Anyone with this link is able to join your network" />
|
|
29
29
|
</div>
|
|
30
30
|
{{#if @options.network.options.shareable_link_enabled}}
|
|
31
|
-
<ClickToCopy class="mt-4 rounded-md border dark:border-gray-900 dark:bg-gray-900 truncate
|
|
31
|
+
<ClickToCopy class="mt-4 rounded-md border dark:border-gray-900 dark:bg-gray-900 truncate px-4 py-2.5 text-sm text-green-400 dark:text-green-300 text-center" @value={{@options.shareableLink}} />
|
|
32
32
|
{{/if}}
|
|
33
33
|
</div>
|
|
34
34
|
</div>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
|
|
2
|
+
<div class="modal-body-container">
|
|
3
|
+
<div class="grid grid-cols-1 gap-2 lg:grid-cols-2 lg:gap-4 text-xs dark:text-gray-100">
|
|
4
|
+
<div class="field-info-container">
|
|
5
|
+
<div class="field-name">Name</div>
|
|
6
|
+
<div class="field-value">{{n-a @options.store.name}}</div>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="field-info-container">
|
|
9
|
+
<div class="field-name">Description</div>
|
|
10
|
+
<div class="field-value">{{n-a @options.store.description}}</div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="field-info-container">
|
|
13
|
+
<div class="field-name">Tags</div>
|
|
14
|
+
<div class="field-value">{{n-a @options.store.tagsList}}</div>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="field-info-container">
|
|
17
|
+
<div class="field-name">Currency</div>
|
|
18
|
+
<div class="field-value">{{n-a @options.store.currency}}</div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
</Modal::Default>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
|
|
2
|
+
<div class="modal-body-container">
|
|
3
|
+
<InputGroup @id="storefront_name_input" @name="Name" @value={{@options.store.name}} @placeholder="Storefront Name" @helpText="The name of your store." />
|
|
4
|
+
<InputGroup @name="Description" @value={{@options.store.description}} @placeholder="Storefront Description" @helpText="Give your store a brief description to let users know what you sell." />
|
|
5
|
+
<InputGroup @name="Tags">
|
|
6
|
+
<TagInput class="form-input" @placeholder="Add tags" @allowSpacesInTags={{true}} @tags={{@options.store.tags}} @addTag={{this.addTag}} @removeTagAtIndex={{this.removeTag}} as |tag|>
|
|
7
|
+
{{tag}}
|
|
8
|
+
</TagInput>
|
|
9
|
+
</InputGroup>
|
|
10
|
+
<InputGroup @name="Currency">
|
|
11
|
+
<CurrencySelect @value={{@options.store.currency}} @onSelect={{fn (mut @options.store.currency)}} @triggerClass="w-full form-select" />
|
|
12
|
+
</InputGroup>
|
|
13
|
+
|
|
14
|
+
<div class="store-boolean-settings">
|
|
15
|
+
<div class="input-group">
|
|
16
|
+
<Toggle @isToggled={{@options.store.online}} @onToggle={{fn (mut @options.store.online)}}>
|
|
17
|
+
<FaIcon @icon="plug" class="text-gray-600 dark:text-gray-400 mx-2" /><span class="dark:text-gray-100 text-sm">Online</span>
|
|
18
|
+
</Toggle>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
</Modal::Default>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import Component from '@glimmer/component';
|
|
2
|
+
import { action } from '@ember/object';
|
|
3
|
+
import { isArray } from '@ember/array';
|
|
4
|
+
|
|
5
|
+
export default class ModalsStoreFormComponent extends Component {
|
|
6
|
+
get activeStore() {
|
|
7
|
+
return this.args.options.store;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@action addTag(tag) {
|
|
11
|
+
if (!isArray(this.activeStore.tags)) {
|
|
12
|
+
this.activeStore.tags = [];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
this.activeStore.tags?.pushObject(tag);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@action removeTag(index) {
|
|
19
|
+
this.activeStore.tags?.removeAt(index);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<DropdownButton @renderInPlace={{true}} @size="xs" @type="magic" @icon="folder-tree" @iconSize="sm" @text={{this.buttonTitle}} @buttonClass={{concat "w-full truncate w-48" " " @buttonClass}} @buttonWrapperClass={{concat "w-full" " " @buttonWrapperClass}} @wrapperClass={{@wrapperClass}} as |dd|>
|
|
2
|
+
<div role="menu" class="store-selector-dropdown-menu next-dd-menu py-1">
|
|
3
|
+
<div role="group" class="px-1 overflow-y-scroll max-h-72">
|
|
4
|
+
{{#if this.isLoading}}
|
|
5
|
+
<div class="text-sm flex flex-row items-center px-3 py-0.5 border-0 my-1">
|
|
6
|
+
<Spinner class="mr-2i" />
|
|
7
|
+
<span class="dark:text-gray-100 test-sm">Loading...</span>
|
|
8
|
+
</div>
|
|
9
|
+
{{else}}
|
|
10
|
+
{{#if this.selectedCategory}}
|
|
11
|
+
<a href="javascript:;" class="next-dd-item" role="menuitem" {{on "click" this.loadParentCategories}}>
|
|
12
|
+
<FaIcon @icon="arrow-left" class="mr-2" />
|
|
13
|
+
<span>Back</span>
|
|
14
|
+
</a>
|
|
15
|
+
{{/if}}
|
|
16
|
+
{{#each this.categories as |category|}}
|
|
17
|
+
<a href="javascript:;" class="next-dd-item" role="menuitem" {{on "click" (fn this.onSelectCategory category)}}>
|
|
18
|
+
{{category.name}}
|
|
19
|
+
</a>
|
|
20
|
+
{{else}}
|
|
21
|
+
<div class="text-sm flex flex-row items-center px-3 py-0.5 border-0 my-1 truncate">
|
|
22
|
+
{{#if this.selectedCategory}}
|
|
23
|
+
<span>No subcategories for {{this.selectedCategory.name}}</span>
|
|
24
|
+
{{else}}
|
|
25
|
+
<span>No categories for this network</span>
|
|
26
|
+
{{/if}}
|
|
27
|
+
</div>
|
|
28
|
+
{{/each}}
|
|
29
|
+
{{/if}}
|
|
30
|
+
</div>
|
|
31
|
+
<div class="px-1">
|
|
32
|
+
<div class="next-dd-menu-seperator"></div>
|
|
33
|
+
<div role="group" class="px-1">
|
|
34
|
+
<a href="javascript:;" class="next-dd-item" role="menuitem" {{on "click" (dropdown-fn dd this.onCreateNewCategory)}}>
|
|
35
|
+
Create a new category
|
|
36
|
+
</a>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
</DropdownButton>
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import Component from '@glimmer/component';
|
|
2
|
+
import { tracked } from '@glimmer/tracking';
|
|
3
|
+
import { inject as service } from '@ember/service';
|
|
4
|
+
import { action } from '@ember/object';
|
|
5
|
+
import isModel from '@fleetbase/ember-core/utils/is-model';
|
|
6
|
+
|
|
7
|
+
export default class NetworkCategoryPickerComponent extends Component {
|
|
8
|
+
@service fetch;
|
|
9
|
+
@service store;
|
|
10
|
+
@service notifications;
|
|
11
|
+
@tracked categories = [];
|
|
12
|
+
@tracked selectedCategory;
|
|
13
|
+
@tracked network;
|
|
14
|
+
@tracked isLoading = false;
|
|
15
|
+
@tracked buttonTitle = null;
|
|
16
|
+
|
|
17
|
+
constructor() {
|
|
18
|
+
super(...arguments);
|
|
19
|
+
this.network = this.args.network;
|
|
20
|
+
this.category = this.args.category;
|
|
21
|
+
this.setButtonTitle(this.category);
|
|
22
|
+
this.loadCategories(this.category);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
setButtonTitle(selectedCategory) {
|
|
26
|
+
let buttonTitle = this.args.buttonTitle ?? 'Select Category';
|
|
27
|
+
|
|
28
|
+
if (selectedCategory) {
|
|
29
|
+
buttonTitle = selectedCategory.name;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
this.buttonTitle = buttonTitle;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@action loadCategories(parentCategory) {
|
|
36
|
+
const queryParams = {
|
|
37
|
+
owner_uuid: this.network.id,
|
|
38
|
+
parents_only: parentCategory ? false : true,
|
|
39
|
+
with_subcategories: true,
|
|
40
|
+
for: 'storefront_network',
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
if (isModel(parentCategory)) {
|
|
44
|
+
queryParams.parent = parentCategory.id;
|
|
45
|
+
queryParams.with_parent = true;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
this.isLoading = true;
|
|
49
|
+
this.store
|
|
50
|
+
.query('category', queryParams)
|
|
51
|
+
.then((categories) => {
|
|
52
|
+
this.categories = categories.toArray();
|
|
53
|
+
})
|
|
54
|
+
.finally(() => {
|
|
55
|
+
this.isLoading = false;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@action onSelectCategory(category) {
|
|
60
|
+
this.selectedCategory = category;
|
|
61
|
+
this.setButtonTitle(category);
|
|
62
|
+
|
|
63
|
+
if (typeof this.args.onSelect === 'function') {
|
|
64
|
+
this.args.onSelect(category);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
this.loadCategories(category);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@action onCreateNewCategory() {
|
|
71
|
+
if (typeof this.args.onCreateNewCategory === 'function') {
|
|
72
|
+
this.args.onCreateNewCategory(this, this.selectedCategory);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@action async loadParentCategories() {
|
|
77
|
+
if (this.selectedCategory.parent) {
|
|
78
|
+
return this.onSelectCategory(this.selectedCategory.parent);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
this.onSelectCategory(null);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
{{#if @activeStore}}
|
|
2
2
|
<DropdownButton @renderInPlace={{true}} @size="xs" @type="primary" @icon="store" @iconSize="sm" @text={{@activeStore.name}} @buttonClass={{concat "w-full " @buttonClass}} @buttonWrapperClass={{concat "w-full " @buttonWrapperClass}} @wrapperClass={{@wrapperClass}} as |dd|>
|
|
3
|
-
<div role="menu" class="next-dd-menu py-1">
|
|
4
|
-
<div role="group" class="px-1 overflow-y-scroll
|
|
3
|
+
<div role="menu" class="store-selector-dropdown-menu next-dd-menu py-1">
|
|
4
|
+
<div role="group" class="px-1 overflow-y-scroll max-h-72">
|
|
5
5
|
{{#each @stores as |store|}}
|
|
6
6
|
<a href="javascript:;" class="next-dd-item" role="menuitem" {{on "click" (dropdown-fn dd this.onSwitchStore store)}}>
|
|
7
7
|
{{or store.name "-"}}
|
|
8
8
|
</a>
|
|
9
|
+
{{else}}
|
|
10
|
+
<div class="next-dd-item" role="menuitem">No stores to select</div>
|
|
9
11
|
{{/each}}
|
|
10
12
|
</div>
|
|
11
13
|
<div class="px-1">
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Component from '@glimmer/component';
|
|
2
2
|
import { tracked } from '@glimmer/tracking';
|
|
3
3
|
import { inject as service } from '@ember/service';
|
|
4
|
-
import { action, computed } from '@ember/object';
|
|
4
|
+
import { action, computed, get } from '@ember/object';
|
|
5
5
|
import { later } from '@ember/runloop';
|
|
6
6
|
|
|
7
7
|
export default class WidgetOrdersComponent extends Component {
|
|
@@ -26,8 +26,15 @@ export default class WidgetOrdersComponent extends Component {
|
|
|
26
26
|
100
|
|
27
27
|
);
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
this.storefront.on('
|
|
29
|
+
// reload orders when new order income
|
|
30
|
+
this.storefront.on('order.broadcasted', () => {
|
|
31
|
+
this.reloadOrders();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// reload orders when store changes
|
|
35
|
+
this.storefront.on('storefront.changed', () => {
|
|
36
|
+
this.reloadOrders();
|
|
37
|
+
});
|
|
31
38
|
}
|
|
32
39
|
|
|
33
40
|
@action async reloadOrders(params = {}) {
|
|
@@ -52,27 +59,25 @@ export default class WidgetOrdersComponent extends Component {
|
|
|
52
59
|
this.isLoading = true;
|
|
53
60
|
|
|
54
61
|
return new Promise((resolve) => {
|
|
55
|
-
const storefront = this.storefront
|
|
62
|
+
const storefront = get(this.storefront, 'activeStore.public_id');
|
|
56
63
|
|
|
57
64
|
if (!storefront) {
|
|
58
65
|
this.isLoading = false;
|
|
59
66
|
return resolve([]);
|
|
60
67
|
}
|
|
61
68
|
|
|
69
|
+
const queryParams = {
|
|
70
|
+
storefront,
|
|
71
|
+
limit: 14,
|
|
72
|
+
sort: '-created_at',
|
|
73
|
+
...params,
|
|
74
|
+
};
|
|
75
|
+
|
|
62
76
|
this.fetch
|
|
63
|
-
.get(
|
|
64
|
-
'
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
limit: 14,
|
|
68
|
-
sort: '-created_at',
|
|
69
|
-
...params,
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
namespace: 'storefront/int/v1',
|
|
73
|
-
normalizeToEmberData: true,
|
|
74
|
-
}
|
|
75
|
-
)
|
|
77
|
+
.get('orders', queryParams, {
|
|
78
|
+
namespace: 'storefront/int/v1',
|
|
79
|
+
normalizeToEmberData: true,
|
|
80
|
+
})
|
|
76
81
|
.then((orders) => {
|
|
77
82
|
this.isLoading = false;
|
|
78
83
|
|