schon/storefront/components/home/collection/index.vue
Alexandr SaVBaD Waltz 40ae24a04c 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.
2025-09-13 12:53:06 +03:00

79 lines
No EOL
1.7 KiB
Vue

<template>
<div class="collection">
<ui-title>{{ t('home.collection.title') }}</ui-title>
<div class="container">
<div class="collection__wrapper">
<div class="collection__inner">
<home-collection-inner
v-for="tag in tags"
:key="tag.node.uuid"
:tag="tag.node"
/>
<client-only>
<home-collection-inner
v-if="newProducts.length > 0"
:tag="newProductsTag"
/>
<home-collection-inner
v-if="priceProducts.length > 0"
:tag="priceProductsTag"
/>
</client-only>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import type {IProduct, IProductTag} from "~/types";
const props = defineProps<{
tags: { node: IProductTag }[],
newProducts: { cursor: string; node: IProduct }[],
priceProducts: { cursor: string; node: IProduct }[]
}>()
const { t } = useI18n();
const newProductsTag = computed(() => {
return {
name: t('home.collection.newTag'),
tagName: t('home.collection.newTag'),
uuid: 'new-products',
productSet: {
edges: props.newProducts
}
}
});
const priceProductsTag = computed(() => {
return {
name: t('home.collection.cheapTag'),
tagName: t('home.collection.cheapTag'),
uuid: 'price-products',
productSet: {
edges: props.priceProducts
}
}
});
</script>
<style lang="scss" scoped>
.collection {
&__wrapper {
display: flex;
flex-direction: column;
align-items: center;
gap: 50px;
}
&__inner {
display: flex;
align-items: flex-start;
flex-wrap: wrap;
justify-content: center;
gap: 100px;
}
}
</style>