Skip to content

Commit 459c809

Browse files
author
Marcin Kwiatkowski
committed
refactor(theme): made TopBar component lazy loaded
1 parent ac62c4a commit 459c809

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

packages/theme/components/TopBar/useTopBar.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,18 @@ export const useTopBar = () => {
88
const hasStoresToSelect = ref(null);
99
const hasCurrencyToSelect = ref(null);
1010

11-
onMounted(async () => {
12-
const data = await query(checkStoresAndCurrencyQuery);
11+
onMounted(() => {
12+
query(checkStoresAndCurrencyQuery)
13+
.then((data) => {
14+
hasStoresToSelect.value = data?.availableStores?.length;
15+
hasCurrencyToSelect.value = data?.currency?.available_currency_codes?.length > 1;
1316

14-
hasStoresToSelect.value = data?.availableStores?.length;
15-
hasCurrencyToSelect.value = data?.currency?.available_currency_codes?.length > 1;
17+
return data;
18+
})
19+
.catch(() => {
20+
hasStoresToSelect.value = false;
21+
hasCurrencyToSelect.value = false;
22+
});
1623
});
1724

1825
return {

packages/theme/layouts/default.vue

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
<LazyHydrate when-visible>
77
<Notification />
88
</LazyHydrate>
9-
<TopBar class="desktop-only" />
9+
<TopBar
10+
class="desktop-only"
11+
v-if="!isMobile"
12+
/>
1013
<AppHeader />
1114
<div id="layout">
1215
<nuxt :key="route.fullPath" />
@@ -19,26 +22,29 @@
1922
<script>
2023
import LazyHydrate from 'vue-lazy-hydration';
2124
import {
22-
useRoute, defineComponent, onMounted, useAsync,
25+
useRoute, defineComponent, onMounted, useAsync, onBeforeUnmount, computed,
2326
} from '@nuxtjs/composition-api';
2427
import {
2528
useUser,
2629
} from '@vue-storefront/magento';
30+
import {
31+
mapMobileObserver,
32+
unMapMobileObserver,
33+
} from '@storefront-ui/vue/src/utilities/mobile-observer.js';
2734
import useUiState from '~/composables/useUiState.ts';
2835
2936
import { useMagentoConfiguration } from '~/composables/useMagentoConfiguration';
3037
import AppHeader from '~/components/AppHeader.vue';
3138
import BottomNavigation from '~/components/BottomNavigation.vue';
32-
import TopBar from '~/components/TopBar';
3339
3440
export default defineComponent({
3541
name: 'DefaultLayout',
3642
3743
components: {
3844
LazyHydrate,
3945
AppHeader,
40-
TopBar,
4146
BottomNavigation,
47+
TopBar: () => import(/* webpackPrefetch: true */ '~/components/TopBar'),
4248
AppFooter: () => import(/* webpackPrefetch: true */ '~/components/AppFooter.vue'),
4349
CartSidebar: () => import(/* webpackPrefetch: true */ '~/components/CartSidebar.vue'),
4450
WishlistSidebar: () => import(/* webpackPrefetch: true */ '~/components/WishlistSidebar.vue'),
@@ -51,6 +57,7 @@ export default defineComponent({
5157
const { load: loadUser } = useUser();
5258
const { loadConfiguration } = useMagentoConfiguration();
5359
const { isCartSidebarOpen, isWishlistSidebarOpen, isLoginModalOpen } = useUiState();
60+
const isMobile = computed(() => mapMobileObserver().isMobile.get());
5461
5562
useAsync(() => {
5663
loadConfiguration();
@@ -60,10 +67,15 @@ export default defineComponent({
6067
loadUser();
6168
});
6269
70+
onBeforeUnmount(() => {
71+
unMapMobileObserver();
72+
});
73+
6374
return {
6475
isCartSidebarOpen,
6576
isWishlistSidebarOpen,
6677
isLoginModalOpen,
78+
isMobile,
6779
route,
6880
};
6981
},

0 commit comments

Comments
 (0)