vuestorefront-community / spree Goto Github PK
View Code? Open in Web Editor NEWVue Storefront 2 Integration for Spree
Home Page: https://docs.vuestorefront.io/spree
License: MIT License
Vue Storefront 2 Integration for Spree
Home Page: https://docs.vuestorefront.io/spree
License: MIT License
Spree's endpoints support ?locale parameter, which can affect the language of returned entities.
We should include it in our requests, based on the language selected on the frontend.
No response
We need to get rid of VSF elements we're not willing to implement soon, so they don't mislead users.
No response
Displaying the user's data is giving the user better and improved experience.
Implement:
No response
A Billing address should act independently of the Shipping address and vice versa.
A) Creating the Billing address entry results in:
B) Updating the Billing address entry results in:
It behaves similarly for both Billing addresses and Shipping addresses.
We use the same method composables>useUserShipping>updateAddress(...)
for updating as well as the Billing address as the Shipping address. We don't use any ids which would imply the address category nor use any separated API calls to specify modified content. The possible solution would require using any of these methods to categorize/separate addresses.
Log In > My profile > Shipping/Billing details > Add new address/Change > {Fill the form*} > Update/Add the address
Then open the NOT filled address category.
You should see the same address, you've just applied to another address category.
* - dummy data I used
First Name: John
Last Name: Doe
Street Name: 3793 Duck Creek Road
House/Apartment number: 12
City: San Francisco
State/Province: California
Zip-code: 94104
Country: United States
Phone number: 4153074030
1.3
14.19
Firefox Developers 99.0b3 (64-bit)
macOS
No response
When you go to a certain product's page, the backend uses the getProducts function to the "suggested" products. It should load or skip them them no matter they have any taxons or not.
The products without taxons cause unhandled errors because the backend tries to parse the taxons no matter they exist or not.
It is possible that in the function "buiildBreadcrums" in the file api-client/src/api/serializers/product.ts handling addTaxonToBreadcrumbs conditionally if taxons exist will fix the issue.
Connect a backend with products that don't have any taxons assigned to them and go to any certain product's page. Following error should appear:
1.2.0
14.17.6
Brave
macOS
No response
Line item structure should be modified in order to be compatible with updated CartSidebar
core component.
id
property instead of _id
No response
Spree SDK v5 (https://github.com/spree/spree-storefront-api-v2-js-sdk/releases) has multiple improvements over v4.11.0, for example:
^5.0.1
.node-fetch
or axios
and configure the Spree SDK to use it.jsonApi.findRelationshipDocuments
, jsonApi.findSingleRelationshipDocument
and result.extractSuccess
).No response
In Spree's default storefront, if the user starts a checkout anonymously and then signs in, the guest cart is merged to user's signed-in cart. I believe we should apply similar behavior, to maintain a good User Experience.
This will require additional endpoint in the API on Spree's end.
SfImage component is showing image after onLoad event change "loaded" variable to true.
When we are passing different urls to the gallery, this event is probably not firing for some reason and leaving "loaded" variable with false value.
Spree 4.3 and later support multi-currency out of the box.
The Spree-VSF integration should take that into consideration and pass the correct currency to API requests
No response
VSF doesn't have any stock views for the reset password flow, but it would be great if we could provide basic API integration + components for that.
To improve the UX, the product info panel should have a fixed width that doesn't react to its own content changes.
The product info panel shifts based on the selected tab
Set a fixed width.
Navigate to Men > Click on any product to open its page > Start switching between Description/Read Reviews/Additional Information tabs
1.3
14.19
Firefox Developers 99.0b3 (64-bit)
macOS
No response
Users will be able to change their passwords in "My account" tab. It will be possible to change password without going through "forgot password" process which will be much easier to do and cause less problems..
No response
No response
Wishlist is not fetched after user successfully logs in, so currentWishlist
doesn't store the wishlist token. It means that the user is not able to see items in wishlist nor add items right after logging in (after refreshing the app, wishlist is fetched and works as expected).
Fetch wishlist after login/register.
No response
1.3.0
14.15.5
Chrome
macOS
No response
We should upgrade Storefront UI dependency in theme module to latest version (0.11.4
)
@storefront-ui/vue
upgraded to 0.11.4
No response
If the quantity of an item equals 0, the "decrement" button should be disabled.
The "decrement" button is clickable and has no effect.
No response
Add an item to the cart > open the cart sidebar > try to reduce the quantity amount.
1.3.0
14.19
Firefox Developers 99.0b3 (64-bit)
macOS
No response
At the moment, the backendUrl
configuration is prepended on all images for products, this may not be optimal, for instance if the API is internal only, or if a different server is used to serve assets.
Instead it could be beneficial to add a separate assetUrl
(or externalUrl
) which is used for images and other calls that need to be made from the client.
externalUrl
url: config.backendUrl + style.url
? formatImageUrl(image.attributes.styles, config.backendUrl)
No response
Should display value according to a number of user orders.
Displays a value of 1 no matter the order state.
No response
Navigate to my-account > order-history and verify Total orders counter.
1.3.0
14.15.5
Firefox Developers
macOS
No response
Clicking the Women / Men header navigation on the landing page should take me to the top-level Women / Men category.
Clicking the Women / Men header navigation on the landing page throws up an error page with the following error message:
An error occured
Please go back or try again
No response
docker-compose run web rake spree_sample:load
)4.3
14.18.0
Firefox 93.0
macOS
No response
When filtering by multiple brands then all products from each brand should be presented to the user.
When you pick a brand (or manufacturer) in a filter while some other one is already clicked, then only the newly clicked brand is passed to backend. Therefore, when filtering for the second time only products from lastly picked brand are shown.
No response
Look at the video. First, there are 11 products from brand beta and then I add brand alpha and it starts showing only 9 products instead of 20.
https://user-images.githubusercontent.com/26672113/150971563-7d4c88ee-202f-44a1-8f75-b93e6985b8ba.mov
4.3.0
14.18.0
Firefox
macOS
No response
VSF 2.4.0 introduced useShippingProvider
composable, that provides methods for managing shipping methods during a checkout.
Currently, the theme interacts directly with the API to pull available shipping methods or to save selection.
We should migrate to Vue Storefront's model, to keep it consistent and make use of some other VSF mechanisms (like shipping getters).
No response
Spree supports Apple Pay as one of its gateways. It would be great to have support for it as one of the payment method components.
No response
It is unused page so the view in account page will be clearer and will not mislead potential users.
No response
When associateGuestCart fails, the user should still be logged in and the associateGuestCart failure should be ignored.
The login popup displays the error (422 in my case) and does not close the login window. However, the user actually gets logged in, if you close the window.
The reason why I am getting the 422 error is another issue, but I don't know why I got it either.
Failure of associate api call should not prevent login window treating login call as successful.
Make associate api method return status 422, then try to login in the vue app.
latest
14.18.1
Chrome
Mac
No response
Currently, when we are deserializing line items, we attach product image to them. Instead, we should attach variant image by default and use product image only when variant doesn't have any images.
No response
The default labels for forgot password dialog don't look good.
We should replace the text there.
No response
Saved addresses should be visible to the user if he just logged in while in the checkout process.
In particular:
/checkout/shipping
Log-in
Register
Fill in some shipping details -> log-in
Fill in shipping details -> submit details -> log-in
Log-in
Register
Fill in some billing details -> log-in
Saved addresses show up IFF user reloads the page manually afterward the successful login
One of the solutions would be to reload the whole page after the login.
1.3
14.19
Firefox Developers 99.0b3 (64-bit), Chrome 99.0.4844.74 (Official Build) (arm64)
macOS
No response
No response
When user saves shipping address, there's a brief moment when we display the widget for selecting a shipping method but it's empty due to no shipping methods being available. The button to continue is enabled during that time, letting the user to skip this step.
Disable the "continue" button when shipping methods are being loaded.
No response
1.3.0
14
All
All
No response
Vue Storefront recently released 2.5.0, which we should migrate to.
No response
No response
Currently we are showing list of shipping methods under shipment title, but when shipment doesn't have any shipping methods - there is an empty space which might be confusing for the user. Instead, we should show a message (e.g. "There is no shipping method available for this shipment")
No response
We need to get rid of VSF elements we're not willing to implement soon, so they don't mislead users.
No response
State/Province value should equal to the one set up on the client.
Currently, when the order is opened in the Orders tab of the Admin Panel, the value always equals "Alabama".
No response
United States
California
1.3
14.19
Firefox Developers 99.0b3 (64-bit)
macOS
No response
#138 describes the redundancy of separated address sections with the current architecture.
No response
Wishlist feature is available only for authenticated users. When guest user is trying to add something to wishlist, we should display login modal in order to improve UX.
No response
Even though Spree doesn't support wishlists out of the box, we could still provide a composable compatible with spree-wishlist extension
Since wishlists aren't available OOB in Spree, we should also consider adding a toggle that would enable/disable API connection for wishlists. Otherwise, when using stock theme with stock Spree installation, developers will see a lot of request errors.
Each column displays associated parameter (column: size displays sizes of products, column: color displays colors)
In the checkout proces column size displays a color of an item.
No response
1.3.0
14.18.0
Chrome
macOs
No response
Currently in order to progress through checkout process user has to fill up the address form twice, which is usually unnecessary since most of the time shipment address and billing address are the same. We should allow users to use the same provided data to be passed to both forms (e.q. selecting a checkbox) so that user will not have to fill up that form once more with exactly the same details.
No response
VSF 2.4.0 introduced checkout.js middleware, that blocks access to /checkout pages, depending on the state of current cart. We should implement it as well.
No response
The "Menu" button at the bottom should show a list of categories.
It displays an empty list.
No response
1.3.0
14.0
Safari
iOS
No response
Should display the Order History page with no orders.
API /api/spree/getOrders returns "[]" with status 200 OK.
Frontend displays error to user "An error occured".
Console shows error:
client.js?06a0:102 TypeError: Cannot read properties of undefined (reading 'length') at Proxy.render (OrderHistory.vue?b07f:161:1) at eval (vue-composition-api.esm.js?35ec:1894:1) at activateCurrentInstance (vue-composition-api.esm.js?35ec:1844:1) at Proxy.$options.render (vue-composition-api.esm.js?35ec:1893:1) at VueComponent.Vue._render (vue.common.dev.js?87aa:3568:1) at VueComponent.updateComponent (vue.common.dev.js?87aa:4067:1) at Watcher.get (vue.common.dev.js?87aa:4490:1) at new Watcher (vue.common.dev.js?87aa:4479:1) at mountComponent (vue.common.dev.js?87aa:4085:1) at VueComponent.Vue.$mount (vue.common.dev.js?87aa:9084:1)
No response
No response
14.18.1
Chrome
Mac
client.js?06a0:102 TypeError: Cannot read properties of undefined (reading 'length')
at Proxy.render (OrderHistory.vue?b07f:161:1)
at eval (vue-composition-api.esm.js?35ec:1894:1)
at activateCurrentInstance (vue-composition-api.esm.js?35ec:1844:1)
at Proxy.$options.render (vue-composition-api.esm.js?35ec:1893:1)
at VueComponent.Vue._render (vue.common.dev.js?87aa:3568:1)
at VueComponent.updateComponent (vue.common.dev.js?87aa:4067:1)
at Watcher.get (vue.common.dev.js?87aa:4490:1)
at new Watcher (vue.common.dev.js?87aa:4479:1)
at mountComponent (vue.common.dev.js?87aa:4085:1)
at VueComponent.Vue.$mount (vue.common.dev.js?87aa:9084:1)
Currently, in order to add an address (which can be later used in the checkout), user has to go to the account page and fill the form there. We should also allow saving address submitted in shipping step (e.g. by selecting the checkbox), so that user can use it again in future orders.
No response
All the picked price ranges should be passed to backend.
Currently, in our price picker, we are returning products from the first checked price range instead of products from all checked price ranges.
Spree expects us to pass the price range as interval [min_price, max_price]
, so maybe it is a good idea to change this interval price picker to some slider where we can choose minimal and maximal price value.
4.3.0
14.18.0
Firefox
macOS
No response
The useCart
will always return a cart, even if there's no cart in the backend created for current session.
In such case, it returns a dummy empty cart, with token set to undefined
. This works well, and since the interface of the dummy cart is compatible with the interface of a real cart, it can be used across the UI.
Such dummy cart however shouldn't be passed to the backend for association with current user.
When user has a dummy cart assigned on the frontend and tries to sign in, the frontend calls associateCart API with invalid (undefined) token.
When cart.value.token
is undefined
, the call to associate_cart
should be skipped.
No response
4.3
14.15
Chrome
macOS
No response
deleteAddress
method in useUserShipping
and useUserBilling
composables is not implemented. After implementing that, user will be able to remove unneeded addresses in account page.
deleteAddress
method is implemented in useUserShipping
composabledeleteAddress
method is implemented in useUserBilling
composableMyAccount/ShippingDetails
pageMyAccount/BillingDetails
pageNo response
Currently we have two api-client methods that call the GET /cart endpoint in Spree's API.
One of them is getCart
, that also fetches all relevant relationships.
The other is getCheckout
, that includes only billing and shipping addresses. The getCheckout is used only by useShipping
and useBilling
composables.
Instead of re-fetching the cart, we could simply provide useCart
to the two composables mentioned above. This way we would also reduce the complexity of the api-client and data types.
getCheckout
method is removed from the api-client
packageuseShipping
composable relies on useCart
useBilling
composable relies on useCart
useCart
updates shipping and billing addresses stored inside them.No response
Currently during checkout and when configuring saved addresses, we show the following fields:
Both of these fields are required, what is more house number has a validation coming out of stock VSF that doesn't make much sense (at least two characters).
We discussed that, and what would make most sense would be to update these fields to match what's in OOB spree:
Address line 2 field should always display below address line 1 (not next to it)
No response
Currently, supported currencies displayed to the user are taken from the vueI18n.numberFormats.${locale}.currency.currencyDefault
values. Besides that, we don't use numberFormats array.
We should revisit this and possibly use i18n.currencies array. This requires a bit of research first
No response
No response
Spree doesn't provide wishlists out of the box, but there's a popular extension spree_wishlist
that adds this functionality.
The integration should allow to optionally enable the useWishlist
composable to connect to the API exposed by spree_wishlist.
No response
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.