diff --git a/packages/boilerplate/api-client/src/api/getCategory/index.ts b/packages/boilerplate/api-client/src/api/getCategory/index.ts
index 4f42f4ad66..4e5d960ace 100644
--- a/packages/boilerplate/api-client/src/api/getCategory/index.ts
+++ b/packages/boilerplate/api-client/src/api/getCategory/index.ts
@@ -5,25 +5,81 @@ export default async function getCategory(context, params, customQuery?: CustomQ
return Promise.resolve([
{
id: 1,
+ name: 'New',
+ slug: 'new',
+ childCount: 2,
+ children: [
+ {
+ id: 15,
+ name: 'Women',
+ slug: 'new-women',
+ childCount: 2,
+ children: [
+ {
+ id: 16,
+ name: 'Clothing',
+ slug: 'new-women-clothing',
+ childCount: 0,
+ children: []
+ },
+ {
+ id: 17,
+ name: 'Shoes',
+ slug: 'new-women-shoes',
+ childCount: 0,
+ children: []
+ }
+ ]
+ },
+ {
+ id: 11,
+ name: 'Men',
+ slug: 'new-men',
+ childCount: 1,
+ children: [
+ {
+ id: 18,
+ name: 'Clothing',
+ slug: 'new-men-clothing',
+ childCount: 0,
+ children: []
+ },
+ {
+ id: 19,
+ name: 'Shoes',
+ slug: 'new-men-shoes',
+ childCount: 0,
+ children: []
+ }
+ ]
+ }
+ ]
+ },
+ {
+ id: 2,
name: 'Women',
slug: 'women',
- items: [
+ childCount: 2,
+ children: [
{
id: 4,
name: 'Women jackets',
slug: 'women-jackets',
- items: [
+ childCount: 2,
+ children: [
{
id: 9,
name: 'Winter jackets',
slug: 'winter-jackets',
- items: []
+ childCount: 0,
+ children: []
},
{
id: 10,
name: 'Autumn jackets',
slug: 'autmun-jackets',
- items: []
+ childCount: 0,
+ children: []
}
]
},
@@ -31,44 +87,51 @@ export default async function getCategory(context, params, customQuery?: CustomQ
id: 5,
name: 'Skirts',
slug: 'skirts',
- items: []
+ childCount: 0,
+ children: []
}
]
},
{
- id: 2,
+ id: 3,
name: 'Men',
slug: 'men',
- items: [
+ childCount: 1,
+ children: [
{
id: 6,
name: 'Men T-shirts',
slug: 'men-tshirts',
- items: []
+ childCount: 0,
+ children: []
}
]
},
{
- id: 3,
+ id: 4,
name: 'Kids',
slug: 'kids',
- items: [
+ childCount: 1,
+ children: [
{
id: 7,
name: 'Toys',
slug: 'toys',
- items: [
+ childCount: 2,
+ children: [
{
id: 8,
name: 'Toy Cars',
slug: 'toy-cars',
- items: []
+ childCount: 0,
+ children: []
},
{
id: 8,
name: 'Dolls',
slug: 'dolls',
- items: []
+ childCount: 0,
+ 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/theme/components/Header/HeaderNav.vue b/packages/commercetools/theme/components/Header/HeaderNav.vue
new file mode 100644
index 0000000000..1d8dbb8ed1
--- /dev/null
+++ b/packages/commercetools/theme/components/Header/HeaderNav.vue
@@ -0,0 +1,95 @@
+
+
+ handleMouseEnter(category.slug)"
+ @mouseleave="() => handleMouseLeave()"
+ @click="handleMouseLeave()"
+ :link="localePath(`/c/${category.slug}`)"
+ >
+
+
+
+
+
+
+
+ {{ subCategoryChild.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/commercetools/theme/middleware.config.js b/packages/commercetools/theme/middleware.config.js
index 834ffc1378..795035e687 100644
--- a/packages/commercetools/theme/middleware.config.js
+++ b/packages/commercetools/theme/middleware.config.js
@@ -24,6 +24,14 @@ module.exports = {
},
currency: 'USD',
country: 'US'
+ },
+ customQueries: {
+ 'root-categories-query': ({ query, variables }) => {
+
+ variables.where = 'parent is not defined';
+
+ return { query, variables };
+ }
}
}
}
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/changelog/5267.js b/packages/core/docs/changelog/5267.js
new file mode 100644
index 0000000000..f349c125f6
--- /dev/null
+++ b/packages/core/docs/changelog/5267.js
@@ -0,0 +1,8 @@
+module.exports = {
+ description: 'added MegaMenu to theme',
+ link: 'https://github.com/vuestorefront/vue-storefront/issues/5267',
+ isBreaking: false,
+ breakingChanges: [],
+ author: 'Łukasz Jędrasik',
+ linkToGitHubAccount: 'https://github.com/lukaszjedrasik'
+};
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 95%
rename from packages/core/nuxt-theme-module/theme/components/AppHeader.vue
rename to packages/core/nuxt-theme-module/theme/components/Header/AppHeader.vue
index e2218e899e..9d639ffa4a 100644
--- a/packages/core/nuxt-theme-module/theme/components/AppHeader.vue
+++ b/packages/core/nuxt-theme-module/theme/components/Header/AppHeader.vue
@@ -1,5 +1,6 @@
+