summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2024-07-20 11:45:41 +0700
committerit-fixcomart <it@fixcomart.co.id>2024-07-20 11:45:41 +0700
commitd6b459b3ea396775fae25b44d34c8dc724379224 (patch)
tree0cb15bae60b8339fbb9947c14938c758c749cedb /src/lib
parent911e0fdc6beb2f97c7e390a6aec5773202189d68 (diff)
<iman> update mobile view
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/home/components/CategoryDynamic.jsx14
-rw-r--r--src/lib/home/components/CategoryDynamicMobile.jsx97
-rw-r--r--src/lib/home/components/CategoryPilihan.jsx2
-rw-r--r--src/lib/product/components/CategorySection.jsx51
-rw-r--r--src/lib/product/components/ProductSearch.jsx1
5 files changed, 111 insertions, 54 deletions
diff --git a/src/lib/home/components/CategoryDynamic.jsx b/src/lib/home/components/CategoryDynamic.jsx
index 4180438a..244543be 100644
--- a/src/lib/home/components/CategoryDynamic.jsx
+++ b/src/lib/home/components/CategoryDynamic.jsx
@@ -26,22 +26,20 @@ const CategoryDynamic = () => {
return (
<div>
- {/* <div className='font-semibold sm:text-h-lg mb-2 px-4 sm:px-0'>Kategori Pilihan</div> */}
- {/* Render category data */}
{promoItems && promoItems.map((category) => (
<div key={category.id}>
<div className='bagian-judul flex flex-row justify-start items-center gap-3 mb-4 mt-4'>
<div className='font-semibold sm:text-h-lg mr-2'>{category.name}</div>
<p className='text-gray_r-10 text-sm'>999 rb+ Produk tersedia</p>
- <Link href={createSlug('/shop/category/', category?.name, category?.category_id)} className="!text-red-500 font-semibold">Lihat Semua</Link>
+ <Link href={createSlug('/shop/category/', category?.name, category?.category_id)} className="!text-red-500 font-semibold">Lihat Semua</Link>
</div>
<div className='grid grid-cols-3 gap-2'>
{category.category_id2.map((index)=> (
- <div key={index.id} className='border justify-start items-start'>
+ <div key={index.id} className='border rounded justify-start items-start'>
<div className='p-3'>
- <div className='flex flex-row border mb-2 justify-start items-center'>
+ <div className='flex flex-row border rounded mb-2 justify-start items-center'>
<NextImage
- src={index.image? index.image : "https://erp.indoteknik.com/api/image/product.template/image_256/120726?ratio=square"}
+ src={index.image? index.image : "/images/noimage.jpeg"}
alt={index.name}
width={90}
height={30}
@@ -56,9 +54,9 @@ const CategoryDynamic = () => {
<div className='grid grid-cols-2 gap-2 overflow-y-auto max-h-[240px]' >
{index.child_frontend_id_i.map((x)=> (
<div key={x.id}>
- <Link href={createSlug('/shop/category/', x?.name, x?.id_level_3)} className="flex flex-row gap-2 border group hover:border-red-500">
+ <Link href={createSlug('/shop/category/', x?.name, x?.id_level_3)} className="flex flex-row gap-2 border rounded group hover:border-red-500">
<NextImage
- src={x.image? x.image : "https://erp.indoteknik.com/api/image/product.template/image_256/127221?ratio=square"}
+ src={x.image? x.image : "/images/noimage.jpeg"}
alt={x.name}
width={40}
height={40}
diff --git a/src/lib/home/components/CategoryDynamicMobile.jsx b/src/lib/home/components/CategoryDynamicMobile.jsx
index a550bd62..317042b8 100644
--- a/src/lib/home/components/CategoryDynamicMobile.jsx
+++ b/src/lib/home/components/CategoryDynamicMobile.jsx
@@ -1,69 +1,102 @@
import React, { useEffect, useState } from 'react';
-import {fetchProductManagementSolr} from '../hooks/useCategoryManagement';
+import { fetchProductManagementSolr } from '../hooks/useCategoryManagement';
import NextImage from 'next/image';
-import Link from "next/link"
-import router from 'next/router';
-import { createSlug } from '@/core/utils/slug'
-import { Swiper, SwiperProps, SwiperSlide } from 'swiper/react';
+import Link from "next/link";
+import { createSlug } from '@/core/utils/slug';
+import { Swiper, SwiperSlide } from 'swiper/react';
import 'swiper/css';
-const CategoryDynamicMobile = () => {
+const CategoryDynamicMobile = () => {
const [promoItems, setPromoItems] = useState([]);
+ const [selectedCategory, setSelectedCategory] = useState({});
+
useEffect(() => {
const loadPromo = async () => {
-
try {
const items = await fetchProductManagementSolr();
setPromoItems(items);
-
+ if (items.length > 0) {
+ const initialSelections = items.reduce((acc, category) => {
+ if (category.category_id2.length > 0) {
+ acc[category.id] = category.category_id2[0].id_level_2;
+ }
+ return acc;
+ }, {});
+ setSelectedCategory(initialSelections);
+ }
} catch (loadError) {
// console.error("Error loading promo items:", loadError)
}
- }
- loadPromo()
+ };
+ loadPromo();
+ }, []);
- },[]);
-
- console.log("promoItems",promoItems)
+ const handleCategoryLevel2Click = (categoryLevel1Id, categoryLevel2Id) => {
+ setSelectedCategory(prev => ({
+ ...prev,
+ [categoryLevel1Id]: categoryLevel2Id
+ }));
+ };
return (
<div className='p-4'>
- {/* <div className='font-semibold sm:text-h-lg mb-2 px-4 sm:px-0'>Kategori Pilihan</div> */}
- {/* Render category data */}
{promoItems && promoItems.map((category) => (
<div key={category.id}>
<div className='bagian-judul flex flex-row justify-between items-center gap-3 mb-4 mt-4'>
- <div className='font-semibold sm:text-h-sm mr-2'>{category.name}</div>
- <Link href={createSlug('/shop/category/', category?.name, category?.category_id)} className="!text-red-500 font-semibold text-sm">Lihat Semua</Link>
+ <div className='font-semibold sm:text-h-sm mr-2'>{category.name}</div>
+ <Link href={createSlug('/shop/category/', category?.name, category?.category_id)} className="!text-red-500 font-semibold text-sm">Lihat Semua</Link>
</div>
<Swiper slidesPerView={2.3} spaceBetween={10}>
- {category.category_id2.map((index)=> (
- <SwiperSlide>
- <div key={index.id} className='border justify-start items-start'>
- <div className='p-3'>
- <div className='flex flex-row border mb-2 justify-start items-center'>
+ {category.category_id2.map((index) => (
+ <SwiperSlide key={index.id}>
+ <div
+ onClick={() => handleCategoryLevel2Click(category.id, index?.id_level_2)}
+ className={`border flex justify-start items-center max-w-48 max-h-16 rounded ${selectedCategory[category.id] === index?.id_level_2 ? 'bg-red-50 border-red-500 text-red-500' : 'border-gray-200 text-gray-900'}`}
+ >
+ <div className='p-1 flex justify-start items-center'>
+ <div className='flex flex-row justify-center items-center'>
<NextImage
- src={index.image? index.image : "https://erp.indoteknik.com/api/image/product.template/image_256/120726?ratio=square"}
+ src={index.image ? index.image : "/images/noimage.jpeg"}
alt={index.name}
- width={90}
+ width={30}
height={30}
- className='object-fit'
+ className='object-'
/>
- <div className='bagian-judul flex flex-col justify-center items-start gap-2 ml-2'>
- <div className='font-semibold text-lg mr-2'>{index.name}</div>
- <p className='text-gray_r-10 text-sm'>999 rb+ Produk</p>
- <Link href={createSlug('/shop/category/', index?.name, index?.id_level_2)} className="!text-red-500 font-semibold">Lihat Semua</Link>
+ <div className='bagian-judul flex flex-col justify-center items-start gap-1 ml-2'>
+ <div className='font-semibold text-[10px] line-clamp-1'>{index.name}</div>
+ <p className='text-gray_r-10 text-[10px]'>999 rb+ Produk</p>
</div>
</div>
+ </div>
</div>
- </div>
- </SwiperSlide>
+ </SwiperSlide>
))}
</Swiper>
+ <div className='p-3 mt-2 border'>
+ <div className='grid grid-cols-2 gap-2 overflow-y-auto max-h-[240px]'>
+ {category.category_id2.map((index) => (
+ selectedCategory[category.id] === index?.id_level_2 && index.child_frontend_id_i.map((x) => (
+ <div key={x.id}>
+ <Link href={createSlug('/shop/category/', x?.name, x?.id_level_3)} className="flex flex-row gap-1 border rounded group hover:border-red-500">
+ <NextImage
+ src={x.image ? x.image : "/images/noimage.jpeg"}
+ alt={x.name}
+ width={40}
+ height={40}
+ />
+ <div className='bagian-judul flex flex-col justify-center items-start gap-1 break-words line-clamp-2 group-hover:text-red-500'>
+ <div className='font-semibold line-clamp-2 group-hover:text-red-500 text-[10px]'>{x.name}</div>
+ </div>
+ </Link>
+ </div>
+ ))
+ ))}
+ </div>
+ </div>
</div>
))}
</div>
);
-}
+};
export default CategoryDynamicMobile;
diff --git a/src/lib/home/components/CategoryPilihan.jsx b/src/lib/home/components/CategoryPilihan.jsx
index 4a1106b0..409a8918 100644
--- a/src/lib/home/components/CategoryPilihan.jsx
+++ b/src/lib/home/components/CategoryPilihan.jsx
@@ -43,7 +43,7 @@ const CategoryPilihan = ({ id, categories }) => {
<div className='KartuB absolute h-48 w-60 inset-0 flex items-center justify-center '>
<div className="group/edit flex items-center justify-center h-48 w-60 flex-col group-hover/item:visible">
<div className=' h-36'>
- <Image className='group-hover:scale-110 transition-transform duration-300' src='https://erp.indoteknik.com/api/image/product.template/image_256/544371?ratio=square' width={120} height={120} alt={category?.name} />
+ <Image className='group-hover:scale-110 transition-transform duration-300' src={category?.image_1920? category?.image_1920 : '/images/noimage.jpeg'} width={120} height={120} alt={category?.name} />
</div>
<h2 className="text-gray-700 content-center h-12 border-t-[1px] px-1 w-60 border-gray-200 font-normal text-sm text-center">{category?.name}</h2>
</div>
diff --git a/src/lib/product/components/CategorySection.jsx b/src/lib/product/components/CategorySection.jsx
index 4c66e861..278bda94 100644
--- a/src/lib/product/components/CategorySection.jsx
+++ b/src/lib/product/components/CategorySection.jsx
@@ -1,24 +1,49 @@
import Image from "next/image"
import Link from 'next/link'
import { createSlug } from '@/core/utils/slug'
-
+import useDevice from '@/core/hooks/useDevice';
+import { Swiper, SwiperSlide } from 'swiper/react';
+import 'swiper/css';
const CategorySection = ({ categories }) => {
+ const { isDesktop, isMobile } = useDevice();
return (
<section>
- <div className="group/item grid grid-cols-5 gap-y-2 gap-x-2 w-full h-full col-span-2 ">
- {categories.map((category) => (
- <Link href={createSlug('/shop/category/', category?.name, category?.id)} key={category?.id} passHref>
- <div className="group transition-colors duration-300">
- <div className="KartuInti h-18 w-26 max-w-sm lg:max-w-full flex flex-col border-[2px] border-gray-200 group-hover:border-red-400 rounded relative ">
- <div className="flex items-center justify-center h-full px-1 flex-row">
- <Image className="" src='https://erp.indoteknik.com/api/image/product.template/image_256/544371?ratio=square' width={56} height={48} alt={category?.name} />
- <h2 className="text-gray-700 group-hover:text-[#E20613] line-clamp-2 content-center h-fit w-60 px-1 font-semibold text-sm text-start">{category?.name}</h2>
+ {isDesktop &&
+ <div className="group/item grid grid-cols-5 gap-y-2 gap-x-2 w-full h-full col-span-2 ">
+ {categories.map((category) => (
+ <Link href={createSlug('/shop/category/', category?.name, category?.id)} key={category?.id} passHref>
+ <div className="group transition-colors duration-300">
+ <div className="KartuInti h-18 w-26 max-w-sm lg:max-w-full flex flex-col border-[2px] border-gray-200 group-hover:border-red-400 rounded relative ">
+ <div className="flex items-center justify-center h-full px-1 flex-row">
+ <Image className="" src={category?.image_1920? category?.image_1920 : '/images/noimage.jpeg'} width={56} height={48} alt={category?.name} />
+ <h2 className="text-gray-700 group-hover:text-[#E20613] line-clamp-2 content-center h-fit w-60 px-1 font-semibold text-sm text-start">{category?.name}</h2>
+ </div>
</div>
</div>
- </div>
- </Link>
- ))}
- </div>
+ </Link>
+ ))}
+ </div>
+ }
+ {isMobile &&
+ <div className="py-4">
+ <Swiper slidesPerView={2.3} spaceBetween={10}>
+ {categories.map((category) => (
+ <SwiperSlide>
+ <Link href={createSlug('/shop/category/', category?.name, category?.id)} key={category?.id} passHref>
+ <div className="group transition-colors duration-300">
+ <div className="KartuInti h-18 w-26 max-w-sm lg:max-w-full flex flex-col border-[2px] border-gray-200 group-hover:bg-red-200 group-hover:border-red-400 rounded relative ">
+ <div className="flex items-center justify-center h-full px-1 flex-row">
+ <Image className="" src={category?.image_1920? category?.image_1920 : '/images/noimage.jpeg'} width={56} height={48} alt={category?.name} />
+ <h2 className="text-gray-700 group-hover:text-[#E20613] line-clamp-2 content-center h-fit w-60 px-1 font-semibold text-sm text-start">{category?.name}</h2>
+ </div>
+ </div>
+ </div>
+ </Link>
+ </SwiperSlide>
+ ))}
+ </Swiper>
+ </div>
+ }
</section>
)
}
diff --git a/src/lib/product/components/ProductSearch.jsx b/src/lib/product/components/ProductSearch.jsx
index 29cf94da..c4970b21 100644
--- a/src/lib/product/components/ProductSearch.jsx
+++ b/src/lib/product/components/ProductSearch.jsx
@@ -336,6 +336,7 @@ const ProductSearch = ({
SpellingComponent
)}
</div>
+ <CategorySection categories={dataCategories}/>
{productFound > 0 && (
<div className='flex items-center gap-x-2 mb-5 justify-between'>