From 40bab7be1e0025c7c089e1eac17451ef155a989a Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Sat, 19 Nov 2022 13:55:00 +0700 Subject: Add page transition --- src/components/Layout.js | 26 +++++++++++++++++++ src/pages/_app.js | 25 ++++++------------ src/pages/index.js | 55 +++++++++++++++++++++------------------- src/pages/shop/brands.js | 5 ++-- src/pages/shop/product/[slug].js | 5 ++-- src/pages/shop/search.js | 5 ++-- 6 files changed, 72 insertions(+), 49 deletions(-) create mode 100644 src/components/Layout.js (limited to 'src') diff --git a/src/components/Layout.js b/src/components/Layout.js new file mode 100644 index 00000000..eb4e8923 --- /dev/null +++ b/src/components/Layout.js @@ -0,0 +1,26 @@ +import { motion } from 'framer-motion'; + +export default function Layout({ children, pageProps }) { + const variants = { + hidden: { opacity: 0, x: -75, y: 0 }, + enter: { opacity: 1, x: 0, y: 0 }, + exit: { opacity: 0, x: 0, y: -50 }, + }; + + const transition = { + ease: 'linear', + duration: 0.2 + }; + + return children && ( + + {children} + + ); +} \ No newline at end of file diff --git a/src/pages/_app.js b/src/pages/_app.js index db14ca15..faa8b2b4 100644 --- a/src/pages/_app.js +++ b/src/pages/_app.js @@ -1,23 +1,14 @@ import '../styles/globals.css'; -import NextProgress from "next-progress"; +import NextProgress from 'next-progress'; import { ToastContainer, Slide } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; import Image from 'next/image'; +import { AnimatePresence } from 'framer-motion'; function MyApp({ Component, pageProps }) { const router = useRouter(); - const [pageLoading, setPageLoading] = useState(false); - - useEffect(() => { - const handleStartLoading = () => { setPageLoading(true) }; - const handleCompleteLoading = () => { setPageLoading(false) }; - - router.events.on('routeChangeStart', handleStartLoading); - router.events.on('routeChangeComplete', handleCompleteLoading); - router.events.on('routeChangeError', handleCompleteLoading); - }, [router]); return ( <> @@ -32,12 +23,12 @@ function MyApp({ Component, pageProps }) { - {pageLoading ? ( -
- Loading Indoteknik -

Loading

-
- ) : } + + + ) } diff --git a/src/pages/index.js b/src/pages/index.js index 7fa538d1..a0363a62 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -9,6 +9,7 @@ import "swiper/css"; import "swiper/css/pagination"; import "swiper/css/autoplay"; import ProductSlider from "../components/product/ProductSlider"; +import Layout from "../components/Layout"; export default function Home() { const [heroBanners, setHeroBanners] = useState(null); @@ -44,38 +45,40 @@ export default function Home() { return ( <> -
- - { - heroBanners?.map((banner, index) => ( - - - - )) - } - -
-

Brand Pilihan

- +
+ + { - manufactures?.manufactures?.map((manufacture, index) => ( + heroBanners?.map((banner, index) => ( -
- -
+
)) }
-
-
-

Produk Ready Stock

- -
-
-

Produk Populer

- -
+
+

Brand Pilihan

+ + { + manufactures?.manufactures?.map((manufacture, index) => ( + +
+ +
+
+ )) + } +
+
+
+

Produk Ready Stock

+ +
+
+

Produk Populer

+ +
+ ) } diff --git a/src/pages/shop/brands.js b/src/pages/shop/brands.js index 797843ee..499eaf99 100644 --- a/src/pages/shop/brands.js +++ b/src/pages/shop/brands.js @@ -7,6 +7,7 @@ import { createSlug } from "../../helpers/slug"; import InfiniteScroll from "react-infinite-scroll-component"; import { useState } from "react"; import Spinner from "../../components/Spinner"; +import Layout from "../../components/Layout"; export async function getServerSideProps() { let initialManufactures = await apiOdoo('GET', '/api/v1/manufacture?limit=31'); @@ -25,7 +26,7 @@ export default function Brands({ initialManufactures }) { return ( <>
-
+

Semua Brand di Indoteknik

-
+ ) } \ No newline at end of file diff --git a/src/pages/shop/product/[slug].js b/src/pages/shop/product/[slug].js index a42e6cb9..923962e2 100644 --- a/src/pages/shop/product/[slug].js +++ b/src/pages/shop/product/[slug].js @@ -8,6 +8,7 @@ import currencyFormat from "../../../helpers/currencyFormat"; import { LazyLoadImage } from "react-lazy-load-image-component"; import "react-lazy-load-image-component/src/effects/blur.css"; import ProductSlider from "../../../components/product/ProductSlider"; +import Layout from "../../../components/Layout"; export async function getServerSideProps(context) { const { slug } = context.query; @@ -80,7 +81,7 @@ export default function ProductDetail({product}) { return ( <>
-
+
@@ -170,7 +171,7 @@ export default function ProductDetail({product}) {
-
+ ); } \ No newline at end of file diff --git a/src/pages/shop/search.js b/src/pages/shop/search.js index ce76f88e..d0917666 100644 --- a/src/pages/shop/search.js +++ b/src/pages/shop/search.js @@ -1,5 +1,6 @@ import axios from "axios"; import Header from "../../components/Header"; +import Layout from "../../components/Layout"; import Pagination from "../../components/Pagination"; import ProductCard from "../../components/ProductCard"; import FilterIcon from "../../icons/filter.svg"; @@ -19,7 +20,7 @@ export default function ShopSearch({ searchResults, q, page }) { return ( <>
-
+

Produk

@@ -54,7 +55,7 @@ export default function ShopSearch({ searchResults, q, page }) {
-
+ ) } \ No newline at end of file -- cgit v1.2.3