summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-05-16 14:39:49 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-05-16 14:39:49 +0700
commit13ed5991179a497545cc5ed0ce98bb6a336c1b6a (patch)
tree895d3c4adbe6d1e84ccc893ceacf556f643daeaf /src
parent65be79407260ab8775c369e2db81f49da1624991 (diff)
Delay Render components
Diffstat (limited to 'src')
-rw-r--r--src/core/components/elements/DelayRender/DelayRender.js17
-rw-r--r--src/pages/index.jsx43
2 files changed, 49 insertions, 11 deletions
diff --git a/src/core/components/elements/DelayRender/DelayRender.js b/src/core/components/elements/DelayRender/DelayRender.js
new file mode 100644
index 00000000..c0ff0fc0
--- /dev/null
+++ b/src/core/components/elements/DelayRender/DelayRender.js
@@ -0,0 +1,17 @@
+const { useState, useEffect } = require('react')
+
+const DelayRender = ({ delay, children }) => {
+ const [showComponent, setShowComponent] = useState(false)
+
+ useEffect(() => {
+ const timeout = setTimeout(() => {
+ setShowComponent(true)
+ }, delay)
+
+ return () => clearTimeout(timeout)
+ }, [delay])
+
+ return showComponent && children
+}
+
+export default DelayRender
diff --git a/src/pages/index.jsx b/src/pages/index.jsx
index 15a431b4..8cf335c4 100644
--- a/src/pages/index.jsx
+++ b/src/pages/index.jsx
@@ -9,6 +9,7 @@ import { useQuery } from 'react-query'
import odooApi from '@/core/api/odooApi'
import Image from 'next/image'
import CustomerReviews from '@/lib/review/components/CustomerReviews'
+import DelayRender from '@/core/components/elements/DelayRender/DelayRender'
const BasicLayout = dynamic(() => import('@/core/components/layouts/BasicLayout'))
const FlashSale = dynamic(() => import('@/lib/flashSale/components/FlashSale'))
@@ -69,27 +70,47 @@ export default function Home() {
<HeroBanner />
</div>
<div className='w-3/12'>
- <PopularProduct />
+ <DelayRender delay={200}>
+ <PopularProduct />
+ </DelayRender>
</div>
</div>
<div className='my-16 flex flex-col gap-y-16'>
- <PreferredBrand />
- <FlashSale />
- <CategoryHomeId />
- <CustomerReviews />
+ <DelayRender delay={300}>
+ <PreferredBrand />
+ </DelayRender>
+ <DelayRender delay={400}>
+ <FlashSale />
+ </DelayRender>
+ <DelayRender delay={500}>
+ <CategoryHomeId />
+ </DelayRender>
+ <DelayRender delay={600}>
+ <CustomerReviews />
+ </DelayRender>
</div>
</div>
</DesktopView>
<MobileView>
<HeroBanner />
- <div className='flex flex-col gap-y-16 my-6'>
- <PreferredBrand />
- <FlashSale />
- <PopularProduct />
- <CategoryHomeId />
- <CustomerReviews />
+ <div className='flex flex-col gap-y-12 my-6'>
+ <DelayRender delay={300}>
+ <PreferredBrand />
+ </DelayRender>
+ <DelayRender delay={600}>
+ <FlashSale />
+ </DelayRender>
+ <DelayRender delay={900}>
+ <PopularProduct />
+ </DelayRender>
+ <DelayRender delay={1200}>
+ <CategoryHomeId />
+ </DelayRender>
+ <DelayRender delay={1500}>
+ <CustomerReviews />
+ </DelayRender>
</div>
</MobileView>
</BasicLayout>