From 40ae24a04c597434b365791ce61ad300f70e17c1 Mon Sep 17 00:00:00 2001 From: Alexandr SaVBaD Waltz Date: Sat, 13 Sep 2025 12:53:06 +0300 Subject: [PATCH] Features: 1) Add SEO-related fragments to GraphQL queries including `SEOMETA_FRAGMENT` usage in brands, categories, and products queries; 2) Enable localized and dynamic SEO metadata handling in category pages with Vue composables and `useSeoMeta`; 3) Replace obsolete `client-only` wrapper with native Nuxt components like `nuxt-marquee` for enhanced rendering; Fixes: 1) Correct file path imports by removing `.js` extensions in GraphQL fragments; 2) Resolve typo in `usePromocodeStore` composables to ensure consistent store usage; 3) Add missing `:type="submit"` to login form button for proper form submission handling; Extra: 1) Remove unused `.idea` and `README.md` files for repository cleanup; 2) Delete extraneous dependencies from `package-lock.json` for streamlined package management; 3) Refactor category slug handling with improved composable logic for cleaner route parameters and SEO alignment. --- .idea/evibes.iml | 35 --- storefront/README.md | 75 ----- storefront/app.vue | 4 +- storefront/components/cards/order.vue | 2 + storefront/components/cards/product.vue | 6 +- storefront/components/forms/contact.vue | 1 + storefront/components/forms/deposit.vue | 1 + storefront/components/forms/login.vue | 1 + storefront/components/forms/new-password.vue | 1 + storefront/components/forms/register.vue | 1 + .../components/forms/reset-password.vue | 1 + storefront/components/forms/update.vue | 1 + storefront/components/home/brands.vue | 54 ++-- .../components/home/category-tags/index.vue | 5 +- .../components/home/collection/index.vue | 50 ++-- storefront/components/store/filter.vue | 1 + storefront/components/store/index.vue | 80 ++++-- storefront/components/store/top.vue | 3 +- storefront/components/ui/button.vue | 3 +- storefront/components/ui/link.vue | 15 +- storefront/composables/auth/useLogin.ts | 2 - storefront/composables/auth/useRefresh.ts | 2 - storefront/composables/brands/index.ts | 2 +- .../composables/brands/useBrandBySlug.ts | 22 ++ .../composables/brands/useBrandByUuid.ts | 21 -- storefront/composables/brands/useBrands.ts | 8 +- .../categories/useCategoryBySlug.ts | 1 + .../categories/useCategoryBySlugSeo.ts | 21 ++ storefront/composables/posts/index.ts | 1 + storefront/composables/posts/usePostBySlug.ts | 38 +++ .../composables/products/useProductBySlug.ts | 3 +- .../composables/products/useProductTags.ts | 8 +- .../composables/products/useProducts.ts | 4 +- .../composables/promocodes/usePromocodes.ts | 4 +- storefront/composables/seo/index.ts | 1 + storefront/composables/seo/useDefaultSeo.ts | 27 ++ storefront/composables/store/useStore.ts | 10 +- storefront/composables/user/useDeposit.ts | 6 +- .../composables/user/useUserBaseData.ts | 22 +- .../graphql/fragments/brands.fragment.ts | 2 + .../graphql/fragments/seometa.fragment.ts | 12 + storefront/graphql/mutations/cart.ts | 2 +- storefront/graphql/mutations/deposit.ts | 9 +- storefront/graphql/mutations/wishlist.ts | 2 +- storefront/graphql/queries/standalone/blog.ts | 6 +- .../graphql/queries/standalone/brands.ts | 17 +- .../graphql/queries/standalone/categories.ts | 26 +- .../graphql/queries/standalone/orders.ts | 2 +- .../graphql/queries/standalone/products.ts | 7 +- .../graphql/queries/standalone/wishlist.ts | 2 +- storefront/i18n/locales/en-gb.json | 3 + storefront/package-lock.json | 270 ------------------ storefront/pages/brand/[slug].vue | 76 +++++ storefront/pages/brand/[uuid].vue | 40 --- storefront/pages/catalog/[slug].vue | 59 +++- storefront/pages/index.vue | 23 +- storefront/pages/product/[slug].vue | 151 ++++++---- storefront/pages/profile/cart.vue | 7 +- storefront/pages/profile/promocodes.vue | 4 +- storefront/plugins/apollo.ts | 5 +- storefront/types/api/categories.ts | 12 +- storefront/types/app/brand.ts | 4 +- storefront/types/app/products.ts | 3 + storefront/types/app/seometa.ts | 20 ++ storefront/types/index.ts | 1 + 65 files changed, 648 insertions(+), 660 deletions(-) delete mode 100644 .idea/evibes.iml delete mode 100644 storefront/README.md create mode 100644 storefront/composables/brands/useBrandBySlug.ts delete mode 100644 storefront/composables/brands/useBrandByUuid.ts create mode 100644 storefront/composables/categories/useCategoryBySlugSeo.ts create mode 100644 storefront/composables/posts/index.ts create mode 100644 storefront/composables/posts/usePostBySlug.ts create mode 100644 storefront/composables/seo/index.ts create mode 100644 storefront/composables/seo/useDefaultSeo.ts create mode 100644 storefront/graphql/fragments/seometa.fragment.ts create mode 100644 storefront/pages/brand/[slug].vue delete mode 100644 storefront/pages/brand/[uuid].vue create mode 100644 storefront/types/app/seometa.ts diff --git a/.idea/evibes.iml b/.idea/evibes.iml deleted file mode 100644 index 307a37b8..00000000 --- a/.idea/evibes.iml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/storefront/README.md b/storefront/README.md deleted file mode 100644 index 25b58212..00000000 --- a/storefront/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# Nuxt Minimal Starter - -Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more. - -## Setup - -Make sure to install dependencies: - -```bash -# npm -npm install - -# pnpm -pnpm install - -# yarn -yarn install - -# bun -bun install -``` - -## Development Server - -Start the development server on `http://localhost:3000`: - -```bash -# npm -npm run dev - -# pnpm -pnpm dev - -# yarn -yarn dev - -# bun -bun run dev -``` - -## Production - -Build the application for production: - -```bash -# npm -npm run build - -# pnpm -pnpm build - -# yarn -yarn build - -# bun -bun run build -``` - -Locally preview production build: - -```bash -# npm -npm run preview - -# pnpm -pnpm preview - -# yarn -yarn preview - -# bun -bun run preview -``` - -Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information. diff --git a/storefront/app.vue b/storefront/app.vue index a88ab6bf..1e99eeb8 100644 --- a/storefront/app.vue +++ b/storefront/app.vue @@ -23,7 +23,6 @@ import {useRefresh} from "~/composables/auth"; import {useLanguages} from "~/composables/languages"; import {useCompanyInfo} from "~/composables/company"; import {useCategories} from "~/composables/categories"; -import {useNotification} from "~/composables/notification"; const { locale } = useI18n(); const route = useRoute(); @@ -38,7 +37,8 @@ const showBreadcrumbs = computed(() => { 'brand', 'search', 'profile', - 'activate-user' + 'activate-user', + 'reset-password' ].some(prefix => name.startsWith(prefix)); }); diff --git a/storefront/components/cards/order.vue b/storefront/components/cards/order.vue index c59f0432..355c6605 100644 --- a/storefront/components/cards/order.vue +++ b/storefront/components/cards/order.vue @@ -52,6 +52,8 @@

{{ product.node.product.name }}

diff --git a/storefront/components/cards/product.vue b/storefront/components/cards/product.vue index 61e7ea7e..87cfae28 100644 --- a/storefront/components/cards/product.vue +++ b/storefront/components/cards/product.vue @@ -67,6 +67,7 @@ productUuid: product.uuid, productName: product.name })" + :type="'button'" :isLoading="removeLoading" > {{ t('buttons.removeFromCart') }} @@ -79,6 +80,7 @@ productUuid: product.uuid, productName: product.name })" + :type="'button'" :isLoading="addLoading" > {{ t('buttons.addToCart') }} @@ -106,7 +108,7 @@ > - - +