diff --git a/src/app/home/components/Banners3.tsx b/src/app/home/components/Banners3.tsx
index 5f06c6d..3b69179 100644
--- a/src/app/home/components/Banners3.tsx
+++ b/src/app/home/components/Banners3.tsx
@@ -1,35 +1,83 @@
'use client'
-import { FC } from 'react'
-import { useGetLanding } from '../hooks/useHomeData'
import Image from 'next/image'
import Link from 'next/link'
+import { FC, useMemo } from 'react'
+
+import { IBanner } from '@/types/landing.types'
+import { useGetLanding } from '@/app/home/hooks/useHomeData'
const Banners3: FC = () => {
const { data } = useGetLanding()
- const sortedBanners = data?.results?.banners?.sort((a, b) => a.order - b.order) || []
+ const { desktopBanners, mobileBanners } = useMemo(() => {
+ const allBanners = data?.results?.banners ?? []
+
+ const sortByOrder = (items: IBanner[]) =>
+ [...items].sort((firstBanner, secondBanner) => firstBanner.order - secondBanner.order)
+
+ const groupByDisplayLocation = (displayLocation: IBanner['displayLocation']) =>
+ sortByOrder(allBanners.filter((banner) => banner.displayLocation === displayLocation))
+
+ return {
+ desktopBanners: groupByDisplayLocation('desktop'),
+ mobileBanners: groupByDisplayLocation('mobile'),
+ }
+ }, [data?.results?.banners])
+
+ const renderLayout = (banners: IBanner[]) => {
+ if (banners.length < 3) return null
+
+ const [firstBanner, secondBanner, thirdBanner] = banners
+
+ if (!firstBanner?.imageUrl || !secondBanner?.imageUrl || !thirdBanner?.imageUrl) return null
+
+ return (
+
+ )
+ }
return (
-
+ <>
+ {renderLayout(desktopBanners)}
+ {renderLayout(mobileBanners)}
+ >
)
}
diff --git a/src/app/home/components/Banners4.tsx b/src/app/home/components/Banners4.tsx
index 2809397..514f96e 100644
--- a/src/app/home/components/Banners4.tsx
+++ b/src/app/home/components/Banners4.tsx
@@ -1,43 +1,101 @@
'use client'
-import { FC } from 'react'
-import { useGetLanding } from '../hooks/useHomeData'
import Image from 'next/image'
import Link from 'next/link'
+import { FC, useMemo } from 'react'
+
+import { IBanner } from '@/types/landing.types'
+import { useGetLanding } from '@/app/home/hooks/useHomeData'
const Banners4: FC = () => {
const { data } = useGetLanding()
- const sortedBanners = data?.results?.banners?.sort((a, b) => a.order - b.order) || []
+ const { desktopBanners, mobileBanners } = useMemo(() => {
+ const allBanners = data?.results?.banners ?? []
+ const sortByOrder = (items: IBanner[]) =>
+ [...items].sort((firstBanner, secondBanner) => firstBanner.order - secondBanner.order)
+
+ const groupByDisplayLocation = (displayLocation: IBanner['displayLocation']) =>
+ sortByOrder(allBanners.filter((banner) => banner.displayLocation === displayLocation))
+
+ return {
+ desktopBanners: groupByDisplayLocation('desktop'),
+ mobileBanners: groupByDisplayLocation('mobile'),
+ }
+ }, [data?.results?.banners])
+
+ const renderLayout = (banners: IBanner[]) => {
+ if (banners.length < 4) return null
+
+ const [firstBanner, secondBanner, thirdBanner, fourthBanner] = banners
+
+ if (
+ !firstBanner?.imageUrl ||
+ !secondBanner?.imageUrl ||
+ !thirdBanner?.imageUrl ||
+ !fourthBanner?.imageUrl
+ )
+ return null
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+ }
return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ <>
+ {renderLayout(desktopBanners)}
+ {renderLayout(mobileBanners)}
+ >
)
}
diff --git a/src/types/landing.types.ts b/src/types/landing.types.ts
index ce2c158..74d62bf 100644
--- a/src/types/landing.types.ts
+++ b/src/types/landing.types.ts
@@ -157,6 +157,7 @@ export interface IBanner {
linkUrl: string;
isActive: boolean;
order: number;
+ displayLocation: "desktop" | "mobile";
createdAt: string;
updatedAt: string;
}