From f5d03b1e6414cde743a06670293e195edb0ed88a Mon Sep 17 00:00:00 2001 From: Heitor Ramon Ribeiro Date: Tue, 14 Dec 2021 09:49:29 -0300 Subject: [PATCH] chore: release 1.0.0-rc.5 --- README.md | 17 +- components/AppHeader.vue | 42 +- components/BottomNavigation.vue | 6 +- components/CartSidebar.vue | 2 +- components/Checkout/UserShippingAddresses.vue | 6 +- components/Checkout/VsfShippingProvider.vue | 2 +- components/ContentBlock.vue | 12 +- components/ContentBlocks.vue | 5 +- components/CurrencySelector.vue | 182 + components/HTMLContent.vue | 26 + components/LocaleSelector.vue | 128 +- components/LoginModal.vue | 15 +- components/MyAccount/ProfileUpdateForm.vue | 11 - components/Notification.vue | 7 +- components/Products/BundleProductSelector.vue | 10 +- .../Products/GroupedProductSelector.vue | 6 +- components/ProductsCarousel.vue | 26 +- components/RelatedProducts.vue | 45 + components/SearchResults.vue | 12 +- components/TopBar.vue | 21 +- components/UpsellProducts.vue | 42 + components/WishlistSidebar.vue | 12 +- composables/index.ts | 12 +- composables/useMagentoConfiguration.ts | 62 + enums/cookieNameEnum.js | 8 + helpers/cart/addToCart.ts | 39 + helpers/customer/regex.ts | 3 +- helpers/magentoConfig/handleChanges.ts | 29 + layouts/default.vue | 38 +- middleware.config.js | 25 +- nuxt.config.js | 27 +- package.json | 38 +- pages/Category.vue | 57 +- pages/Checkout/Billing.vue | 5 +- pages/Checkout/ExternalCheckoutThankYou.vue | 1 + pages/Checkout/UserAccount.vue | 14 +- pages/Home.vue | 225 +- pages/MyAccount.vue | 63 +- pages/MyAccount/AddressesDetails.vue | 24 +- pages/MyAccount/MyProfile.vue | 4 +- pages/MyAccount/MyWishlist.vue | 38 +- pages/MyAccount/OrderHistory.vue | 143 +- pages/Page.vue | 6 +- pages/Product.vue | 155 +- pages/ResetPassword.vue | 10 +- pages/Shipping.vue | 2 +- static/icons/langs/{de.webp => de-DE.webp} | Bin static/icons/langs/{en.webp => en-US.webp} | Bin yarn.lock | 3300 +++++++++-------- 49 files changed, 2902 insertions(+), 2061 deletions(-) create mode 100644 components/CurrencySelector.vue create mode 100644 components/HTMLContent.vue create mode 100644 components/RelatedProducts.vue create mode 100644 components/UpsellProducts.vue create mode 100644 composables/useMagentoConfiguration.ts create mode 100644 enums/cookieNameEnum.js create mode 100644 helpers/cart/addToCart.ts create mode 100644 helpers/magentoConfig/handleChanges.ts rename static/icons/langs/{de.webp => de-DE.webp} (100%) rename static/icons/langs/{en.webp => en-US.webp} (100%) diff --git a/README.md b/README.md index 506ad8f..aab8970 100644 --- a/README.md +++ b/README.md @@ -74,22 +74,23 @@ Thanks go to these wonderful people πŸ™Œ:
Heitor Ramon Ribeiro

πŸ’» 🚧 πŸ“– πŸ“†
Alef Barbeli

πŸ’» πŸ“– -
Dominik Deimel

πŸ’» πŸ“– -
Lior Lindvor

πŸ’»
Henrique Lopes

πŸ’» πŸ“– - -
ĐaΜ£i LoΜ£Μ‚c LeΜ‚ Quang

πŸ’»
Bogdan Podlesnii

πŸ’» -
Filip Rakowski

πŸ’¬ πŸ§‘β€πŸ« πŸ‘€ -
Filip Sobol

πŸ’¬ πŸ§‘β€πŸ« πŸ‘€ -
Patryk Andrzejewski

πŸ’¬ πŸ§‘β€πŸ« πŸ‘€ -
Renan Oliveira

πŸ”§ πŸ”Œ
Patrick Monteiro

πŸ’»
Kevin Gorjan

πŸ’»
Bartosz Herba

πŸ’» +
Marcin Kwiatkowski

πŸ’» πŸ“† +
Filip Rakowski

πŸ’¬ πŸ§‘β€πŸ« πŸ‘€ + + +
Filip Sobol

πŸ’¬ πŸ§‘β€πŸ« πŸ‘€ +
Patryk Andrzejewski

πŸ’¬ πŸ§‘β€πŸ« πŸ‘€ +
Renan Oliveira

πŸ”§ πŸ”Œ +
Dominik Deimel

πŸ’» πŸ“– +
Lior Lindvor

πŸ’» diff --git a/components/AppHeader.vue b/components/AppHeader.vue index 1579ff6..a920afb 100644 --- a/components/AppHeader.vue +++ b/components/AppHeader.vue @@ -30,30 +30,48 @@ - @@ -19,9 +21,11 @@ import { import { useContent } from '@vue-storefront/magento'; import { onSSR } from '@vue-storefront/core'; import { defineComponent, useContext, useRoute } from '@nuxtjs/composition-api'; +import HTMLContent from '~/components/HTMLContent'; export default defineComponent({ components: { + HTMLContent, SfLoader, SfHeading, }, diff --git a/pages/Product.vue b/pages/Product.vue index 73bb657..f72c982 100644 --- a/pages/Product.vue +++ b/pages/Product.vue @@ -73,9 +73,10 @@
-

@@ -152,9 +153,10 @@ @click:tab="changeTab" > -

@@ -169,7 +171,7 @@ v-if="property.name === 'Category'" #value > - + {{ property.value }} @@ -223,22 +225,14 @@
- + - + @@ -283,6 +277,7 @@ import { useContext, useRoute, useRouter, + defineComponent, } from '@nuxtjs/composition-api'; import { productData } from '~/helpers/product/productData'; import cacheControl from '~/helpers/cacheControl'; @@ -291,18 +286,21 @@ import GroupedProductSelector from '~/components/Products/GroupedProductSelector import InstagramFeed from '~/components/InstagramFeed.vue'; import MobileStoreBanner from '~/components/MobileStoreBanner.vue'; import ProductAddReviewForm from '~/components/ProductAddReviewForm.vue'; -import ProductsCarousel from '~/components/ProductsCarousel.vue'; +import UpsellProducts from '~/components/UpsellProducts'; +import RelatedProducts from '~/components/RelatedProducts'; +import HTMLContent from '~/components/HTMLContent'; -export default { +export default defineComponent({ name: 'ProductPage', components: { - GroupedProductSelector, BundleProductSelector, + GroupedProductSelector, + HTMLContent, InstagramFeed, LazyHydrate, MobileStoreBanner, ProductAddReviewForm, - ProductsCarousel, + RelatedProducts, SfAddToCart, SfBreadcrumbs, SfButton, @@ -316,6 +314,7 @@ export default { SfReview, SfSelect, SfTabs, + UpsellProducts, }, middleware: cacheControl({ 'max-age': 60, @@ -324,11 +323,20 @@ export default { transition: 'fade', setup() { const qty = ref(1); - const { product, id } = productData(); + const { + product, + id, + } = productData(); const route = useRoute(); const router = useRouter(); - const { search, loading: productLoading } = useProduct(`product-${id}`); - const { addItem, loading } = useCart(); + const { + search, + loading: productLoading, + } = useProduct(`product-${id}`); + const { + addItem, + loading, + } = useCart(); const { reviews: productReviews, search: searchReviews, @@ -336,7 +344,10 @@ export default { addReview, } = useReview(`productReviews-${id}`); const { isAuthenticated } = useUser(); - const { isInWishlist, addItem: addToWishlist } = useWishlist(); + const { + isInWishlist, + addItem: addToWishlist, + } = useWishlist('GlobalWishlist'); const { error: nuxtError } = useContext(); const basePrice = ref(0); const openTab = ref(1); @@ -353,8 +364,6 @@ export default { return inStock && stockLeft; }); const categories = computed(() => productGetters.getCategoryIds(product.value)); - const relatedProducts = computed(() => productGetters.getProductRelatedProduct(product.value)); - const upsellProducts = computed(() => productGetters.getProductUpsellProduct(product.value)); const baseReviews = computed(() => (Array.isArray(productReviews.value) ? [...productReviews.value].shift() : productReviews.value)); @@ -378,7 +387,7 @@ export default { }))); const configurableOptions = computed(() => product.value.configurable_options); - const productConfiguration = ref({}); + const productConfiguration = ref(Object.entries(route.value.query)); const productTypedPrice = computed(() => { // eslint-disable-next-line no-underscore-dangle switch (product.value.__typename) { @@ -406,7 +415,10 @@ export default { const changeTab = (tabNumber, callback) => { document .querySelector('#tabs') - .scrollIntoView({ behavior: 'smooth', block: 'end' }); + .scrollIntoView({ + behavior: 'smooth', + block: 'end', + }); openTab.value = tabNumber; if (callback && typeof callback === 'function') callback(); }; @@ -414,45 +426,33 @@ export default { changeTab(2, () => { setTimeout(() => document .querySelector('#addReview') - .scrollIntoView({ behavior: 'smooth', block: 'end' }), 500); + .scrollIntoView({ + behavior: 'smooth', + block: 'end', + }), 500); }); }; const successAddReview = async (reviewData) => { await addReview(reviewData); document .querySelector('#tabs') - .scrollIntoView({ behavior: 'smooth', block: 'end' }); + .scrollIntoView({ + behavior: 'smooth', + block: 'end', + }); }; const updateProductConfiguration = async (label, value) => { - productConfiguration.value[label] = value; - - const configurations = Object.entries(productConfiguration.value).map((config) => config[1]); - - await search({ - queryType: 'DETAIL', - filter: { - sku: { - eq: id, - }, - }, - configurations, - }); + productConfiguration.value.push([label, value]); await router.push({ path: route.value.fullPath, query: { - ...productConfiguration.value, + ...Object.fromEntries(productConfiguration.value), }, }); }; - const loadProductConfiguration = () => { - const { query } = route.value; - - productConfiguration.value = query; - }; - onSSR(async () => { const baseSearchQuery = { filter: { @@ -460,6 +460,9 @@ export default { eq: id, }, }, + ...(productConfiguration.value.length > 0 + ? { configurations: productConfiguration.value.map((config) => config[1]) } + : {}), }; await search({ @@ -467,11 +470,9 @@ export default { ...baseSearchQuery, }); - await searchReviews({ ...baseSearchQuery }); - - loadProductConfiguration(); - if (product?.value?.length === 0) nuxtError({ statusCode: 404 }); + + await searchReviews(baseSearchQuery); }); return { @@ -490,7 +491,7 @@ export default { loading, openTab, product, - productConfiguration, + productConfiguration: computed(() => Object.fromEntries(productConfiguration.value)), productDataIsLoading, productDescription, productGallery, @@ -501,17 +502,15 @@ export default { productShortDescription, productSpecialPrice, qty, - relatedProducts, reviewGetters, reviews, reviewsLoading, successAddReview, totalReviews, updateProductConfiguration, - upsellProducts, }; }, -}; +});