diff --git a/packages/boilerplate/api-client/src/api/getCategory/index.ts b/packages/boilerplate/api-client/src/api/getCategory/index.ts index 4f42f4ad66..9c8fc90b2b 100644 --- a/packages/boilerplate/api-client/src/api/getCategory/index.ts +++ b/packages/boilerplate/api-client/src/api/getCategory/index.ts @@ -5,25 +5,70 @@ export default async function getCategory(context, params, customQuery?: CustomQ return Promise.resolve([ { id: 1, + name: 'New', + slug: 'new', + children: [ + { + id: 15, + name: 'Women', + slug: 'new-women', + children: [ + { + id: 16, + name: 'Clothing', + slug: 'new-women-clothing', + children: [] + }, + { + id: 17, + name: 'Shoes', + slug: 'new-women-shoes', + children: [] + } + ] + }, + { + id: 11, + name: 'Men', + slug: 'new-men', + children: [ + { + id: 18, + name: 'Clothing', + slug: 'new-men-clothing', + children: [] + }, + { + id: 19, + name: 'Shoes', + slug: 'new-men-shoes', + children: [] + } + ] + } + ] + }, + { + id: 2, name: 'Women', slug: 'women', - items: [ + children: [ { id: 4, name: 'Women jackets', slug: 'women-jackets', - items: [ + children: [ { id: 9, name: 'Winter jackets', slug: 'winter-jackets', - items: [] + children: [] }, { id: 10, name: 'Autumn jackets', slug: 'autmun-jackets', - items: [] + children: [] } ] }, @@ -31,44 +76,44 @@ export default async function getCategory(context, params, customQuery?: CustomQ id: 5, name: 'Skirts', slug: 'skirts', - items: [] + children: [] } ] }, { - id: 2, + id: 3, name: 'Men', slug: 'men', - items: [ + children: [ { id: 6, name: 'Men T-shirts', slug: 'men-tshirts', - items: [] + children: [] } ] }, { - id: 3, + id: 4, name: 'Kids', slug: 'kids', - items: [ + children: [ { id: 7, name: 'Toys', slug: 'toys', - items: [ + children: [ { id: 8, name: 'Toy Cars', slug: 'toy-cars', - items: [] + children: [] }, { id: 8, name: 'Dolls', slug: 'dolls', - items: [] + children: [] } ] } diff --git a/packages/boilerplate/theme/static/megamenu/bannerA.webp b/packages/boilerplate/theme/static/megamenu/bannerA.webp new file mode 100644 index 0000000000..a5ab92d266 Binary files /dev/null and b/packages/boilerplate/theme/static/megamenu/bannerA.webp differ diff --git a/packages/boilerplate/theme/static/megamenu/bannerB.webp b/packages/boilerplate/theme/static/megamenu/bannerB.webp new file mode 100644 index 0000000000..32290c8e35 Binary files /dev/null and b/packages/boilerplate/theme/static/megamenu/bannerB.webp differ diff --git a/packages/commercetools/api-client/src/api/getCategory/defaultQuery.ts b/packages/commercetools/api-client/src/api/getCategory/defaultQuery.ts index 36c9492c37..a14f60eb1c 100644 --- a/packages/commercetools/api-client/src/api/getCategory/defaultQuery.ts +++ b/packages/commercetools/api-client/src/api/getCategory/defaultQuery.ts @@ -1,27 +1,14 @@ import gql from 'graphql-tag'; +import { CategoryFragment } from './../../fragments'; export default gql` - fragment Children on Category { - id - slug(acceptLanguage: $acceptLanguage) - name(acceptLanguage: $acceptLanguage) - childCount - } + ${CategoryFragment} - fragment DefaultCategory on Category { + fragment Children on Category { id slug(acceptLanguage: $acceptLanguage) name(acceptLanguage: $acceptLanguage) childCount - children { - ...Children - children { - ...Children - children { - ...Children - } - } - } } query categories($where: String, $sort: [String!], $limit: Int, $offset: Int, $acceptLanguage: [Locale!]) { diff --git a/packages/commercetools/api-client/src/fragments/index.ts b/packages/commercetools/api-client/src/fragments/index.ts index debd2940d8..71328cd0c5 100644 --- a/packages/commercetools/api-client/src/fragments/index.ts +++ b/packages/commercetools/api-client/src/fragments/index.ts @@ -297,3 +297,20 @@ export const OrderFragment = ` } `; +export const CategoryFragment = ` + fragment DefaultCategory on Category { + id + slug(acceptLanguage: $acceptLanguage) + name(acceptLanguage: $acceptLanguage) + childCount + children { + ...Children + children { + ...Children + children { + ...Children + } + } + } + } +`; diff --git a/packages/commercetools/theme/components/header/HeaderNav.vue b/packages/commercetools/theme/components/header/HeaderNav.vue new file mode 100644 index 0000000000..584c6cf90d --- /dev/null +++ b/packages/commercetools/theme/components/header/HeaderNav.vue @@ -0,0 +1,95 @@ + + + diff --git a/packages/commercetools/theme/queries/topCategories.ts b/packages/commercetools/theme/queries/topCategories.ts new file mode 100644 index 0000000000..6c0021b53a --- /dev/null +++ b/packages/commercetools/theme/queries/topCategories.ts @@ -0,0 +1,36 @@ +import gql from 'graphql-tag'; +import { CategoryFragment } from '@vue-storefront/commercetools-api'; + +const customQuery = gql` + ${CategoryFragment} + + fragment Children on Category { + id + slug(acceptLanguage: $acceptLanguage) + name(acceptLanguage: $acceptLanguage) + childCount + } + + query categories($where: String, $sort: [String!], $limit: Int, $offset: Int, $acceptLanguage: [Locale!]) { + categories(where: $where, sort: $sort, limit: $limit, offset: $offset) { + offset + count + total + results { + ...DefaultCategory + } + } + } +`; + +export const rootCategoriesQuery = (query, variables) => { + const customVariables = { + ...variables, + where: 'parent is not defined' + }; + + return { + query: customQuery, + variables: customVariables + }; +}; diff --git a/packages/commercetools/theme/static/megamenu/bannerA.webp b/packages/commercetools/theme/static/megamenu/bannerA.webp new file mode 100644 index 0000000000..a5ab92d266 Binary files /dev/null and b/packages/commercetools/theme/static/megamenu/bannerA.webp differ diff --git a/packages/commercetools/theme/static/megamenu/bannerB.webp b/packages/commercetools/theme/static/megamenu/bannerB.webp new file mode 100644 index 0000000000..32290c8e35 Binary files /dev/null and b/packages/commercetools/theme/static/megamenu/bannerB.webp differ diff --git a/packages/core/docs/commercetools/changelog.md b/packages/core/docs/commercetools/changelog.md index 66974c4107..e1a3f8c968 100644 --- a/packages/core/docs/commercetools/changelog.md +++ b/packages/core/docs/commercetools/changelog.md @@ -1,6 +1,7 @@ # Changelog ## 1.1.0 (not released) +- added MegaMenu to theme ([#5267](https://github.com/vuestorefront/vue-storefront/issues/5267)) - fix getOrders api ([#5328](https://github.com/DivanteLtd/vue-storefront/issues/5328)) - added bottom margin to fix visibility of last footer category ([#5253](https://github.com/DivanteLtd/vue-storefront/issues/5253)) - [BREAKING] refactored names of many factory methods and composable methods, details in linked PR ([#5299](https://github.com/DivanteLtd/vue-storefront/pull/5299)) diff --git a/packages/core/docs/contributing/changelog.md b/packages/core/docs/contributing/changelog.md index 09adfc3408..40e60826cc 100644 --- a/packages/core/docs/contributing/changelog.md +++ b/packages/core/docs/contributing/changelog.md @@ -1,6 +1,7 @@ # Changelog ## 2.2.0 (not released) +- added MegaMenu to theme ([#5267](https://github.com/vuestorefront/vue-storefront/issues/5267)) - added bottom margin to fix visibility of last footer category ([#5253](https://github.com/DivanteLtd/vue-storefront/issues/5253)) - [BREAKING] refactored names of many factory methods and composable methods, details in linked PR ([#5299](https://github.com/DivanteLtd/vue-storefront/pull/5299)) - [BREAKING] changed signatures of factory methods to always 2 arguments, details in linked PR ([#5299](https://github.com/DivanteLtd/vue-storefront/pull/5299)) diff --git a/packages/core/nuxt-theme-module/package.json b/packages/core/nuxt-theme-module/package.json index 22888860a6..f53d45d850 100644 --- a/packages/core/nuxt-theme-module/package.json +++ b/packages/core/nuxt-theme-module/package.json @@ -23,6 +23,7 @@ "access": "public" }, "dependencies": { + "lodash.debounce": "^4.0.8", "lodash.merge": "^4.6.2" } } diff --git a/packages/core/nuxt-theme-module/theme/components/AppHeader.vue b/packages/core/nuxt-theme-module/theme/components/header/AppHeader.vue similarity index 57% rename from packages/core/nuxt-theme-module/theme/components/AppHeader.vue rename to packages/core/nuxt-theme-module/theme/components/header/AppHeader.vue index f3dc30da32..b7c1fa7609 100644 --- a/packages/core/nuxt-theme-module/theme/components/AppHeader.vue +++ b/packages/core/nuxt-theme-module/theme/components/header/AppHeader.vue @@ -1,47 +1,52 @@ diff --git a/packages/core/nuxt-theme-module/theme/components/header/NewCatBanners.vue b/packages/core/nuxt-theme-module/theme/components/header/NewCatBanners.vue new file mode 100644 index 0000000000..44a236eb1c --- /dev/null +++ b/packages/core/nuxt-theme-module/theme/components/header/NewCatBanners.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/packages/core/nuxt-theme-module/theme/layouts/account.vue b/packages/core/nuxt-theme-module/theme/layouts/account.vue index 8e2755e7ad..052251f4b6 100644 --- a/packages/core/nuxt-theme-module/theme/layouts/account.vue +++ b/packages/core/nuxt-theme-module/theme/layouts/account.vue @@ -12,7 +12,7 @@