diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/components/ScrollToTop.jsx | 24 | ||||
| -rw-r--r-- | src/core/components/elements/Navbar/NavbarDesktop.jsx | 33 | ||||
| -rw-r--r-- | src/core/components/elements/Navbar/NavbarMobile.jsx | 12 | ||||
| -rw-r--r-- | src/core/components/layouts/BasicLayout.jsx | 5 |
4 files changed, 49 insertions, 25 deletions
diff --git a/src/core/components/ScrollToTop.jsx b/src/core/components/ScrollToTop.jsx new file mode 100644 index 00000000..f8e85167 --- /dev/null +++ b/src/core/components/ScrollToTop.jsx @@ -0,0 +1,24 @@ +import { useEffect } from 'react'; +import { useRouter } from 'next/router'; + +const ScrollToTop = () => { + const router = useRouter(); + + useEffect(() => { + const handleRouteChange = (url, { shallow }) => { + if (!shallow) { + window.scrollTo(0, 0); + } + }; + + router.events.on('routeChangeComplete', handleRouteChange); + + return () => { + router.events.off('routeChangeComplete', handleRouteChange); + }; + }, [router.events]); + + return null; +}; + +export default ScrollToTop; diff --git a/src/core/components/elements/Navbar/NavbarDesktop.jsx b/src/core/components/elements/Navbar/NavbarDesktop.jsx index 9bcd4df2..d1ff2d58 100644 --- a/src/core/components/elements/Navbar/NavbarDesktop.jsx +++ b/src/core/components/elements/Navbar/NavbarDesktop.jsx @@ -1,29 +1,30 @@ +import { useProductContext } from '@/contexts/ProductContext'; +import useAuth from '@/core/hooks/useAuth'; +import { getCountCart } from '@/core/utils/cart'; +import { createSlug } from '@/core/utils/slug'; +import whatsappUrl from '@/core/utils/whatsappUrl'; +import IndoteknikLogo from '@/images/logo.png'; +import Cardheader from '@/lib/cart/components/Cartheader'; +import Category from '@/lib/category/components/Category'; import { ChevronDownIcon, - HeartIcon, - ShoppingCartIcon, DocumentCheckIcon, + HeartIcon, } from '@heroicons/react/24/outline'; -import Link from '../Link/Link'; +import dynamic from 'next/dynamic'; import Image from 'next/image'; +import { useRouter } from 'next/router'; +import { useEffect, useState } from 'react'; import DesktopView from '../../views/DesktopView'; -import dynamic from 'next/dynamic'; -import IndoteknikLogo from '@/images/logo.png'; -import Category from '@/lib/category/components/Category'; -import { useCallback, useContext, useEffect, useState } from 'react'; -import useAuth from '@/core/hooks/useAuth'; +import Link from '../Link/Link'; import NavbarUserDropdown from './NavbarUserDropdown'; -import { getCartApi, getCountCart } from '@/core/utils/cart'; -import whatsappUrl from '@/core/utils/whatsappUrl'; -import { useRouter } from 'next/router'; -import { getAuth, setAuth } from '@/core/utils/auth'; -import { createSlug, getIdFromSlug } from '@/core/utils/slug'; import { TopBannerSkeleton } from '../Skeleton/TopBannerSkeleton'; -import { useProductContext } from '@/contexts/ProductContext'; -import Cardheader from '@/lib/cart/components/Cartheader'; const Search = dynamic(() => import('./Search'), { ssr: false }); -const TopBanner = dynamic(() => import('./TopBanner'), { ssr: false }); +const TopBanner = dynamic(() => import('./TopBanner'), { + ssr: false, + loading: () => <TopBannerSkeleton />, +}); const NavbarDesktop = () => { const [isOpenCategory, setIsOpenCategory] = useState(false); diff --git a/src/core/components/elements/Navbar/NavbarMobile.jsx b/src/core/components/elements/Navbar/NavbarMobile.jsx index 92bd5627..bcf45e0a 100644 --- a/src/core/components/elements/Navbar/NavbarMobile.jsx +++ b/src/core/components/elements/Navbar/NavbarMobile.jsx @@ -1,16 +1,16 @@ -import Image from 'next/image'; -import MobileView from '../../views/MobileView'; -import Link from '../Link/Link'; +import useSidebar from '@/core/hooks/useSidebar'; +import { getCountCart } from '@/core/utils/cart'; +import IndoteknikLogo from '@/images/logo.png'; import { Bars3Icon, HeartIcon, ShoppingCartIcon, } from '@heroicons/react/24/outline'; -import useSidebar from '@/core/hooks/useSidebar'; import dynamic from 'next/dynamic'; -import IndoteknikLogo from '@/images/logo.png'; +import Image from 'next/image'; import { useEffect, useState } from 'react'; -import { getCart, getCountCart } from '@/core/utils/cart'; +import MobileView from '../../views/MobileView'; +import Link from '../Link/Link'; // import TopBanner from './TopBanner'; const Search = dynamic(() => import('./Search')); diff --git a/src/core/components/layouts/BasicLayout.jsx b/src/core/components/layouts/BasicLayout.jsx index 13cdfc86..b6e2c59f 100644 --- a/src/core/components/layouts/BasicLayout.jsx +++ b/src/core/components/layouts/BasicLayout.jsx @@ -1,15 +1,14 @@ import dynamic from 'next/dynamic'; import Image from 'next/image'; import { useEffect, useState } from 'react'; -import axios from 'axios'; +import { useProductContext } from '@/contexts/ProductContext'; import whatsappUrl from '@/core/utils/whatsappUrl'; -import odooApi from '@/core/api/odooApi'; import { useRouter } from 'next/router'; -import { useProductContext } from '@/contexts/ProductContext'; const Navbar = dynamic(() => import('../elements/Navbar/Navbar'), { ssr: false, + loading: () => <div className='h-[156px]' />, }); const AnimationLayout = dynamic(() => import('./AnimationLayout'), { ssr: false, |
