import React, { useEffect, useState, useCallback } from 'react'; import { fetchCategoryManagementSolr, fetchCategoryManagementVersion, } from '../api/categoryManagementApi'; import NextImage from 'next/image'; import Link from 'next/link'; import { createSlug } from '@/core/utils/slug'; import { Skeleton } from '@chakra-ui/react'; import { Swiper, SwiperSlide } from 'swiper/react'; import 'swiper/css'; import 'swiper/css/navigation'; import 'swiper/css/pagination'; import { Pagination } from 'swiper'; const saveToLocalStorage = (key, data, version, expiryInHours) => { const now = new Date(); const item = { value: data, version: version, expiry: now.getTime() + expiryInHours * 60 * 60 * 1000, }; localStorage.setItem(key, JSON.stringify(item)); }; const getFromLocalStorage = (key) => { const itemStr = localStorage.getItem(key); if (!itemStr) return null; const item = JSON.parse(itemStr); return item; }; const isExpired = (expiry) => { const now = new Date(); return now.getTime() > expiry; }; const CategoryDynamic = () => { const [categoryManagement, setCategoryManagement] = useState([]); const [isLoading, setIsLoading] = useState(false); const loadBrand = useCallback(async () => { const cachedData = getFromLocalStorage('categoryManagementData'); // apakah data sudah kadaluarsa const dataExpired = cachedData ? isExpired(cachedData.expiry) : true; // Jika belum kadaluarsa, pakai data dari localStorage if (cachedData && !dataExpired) { setCategoryManagement(cachedData.value); } else { // Jika kadaluarsa, cek versi terbaru dari API const latestVersion = await fetchCategoryManagementVersion(); if (cachedData && cachedData.version === latestVersion) { // Jika versinya sama, reset expiry saveToLocalStorage( 'categoryManagementData', cachedData.value, latestVersion, 24 ); setCategoryManagement(cachedData.value); } else { // Jika versinya beda, lakukan fetch data baru setIsLoading(true); const items = await fetchCategoryManagementSolr(); setIsLoading(false); // Simpan data baru saveToLocalStorage('categoryManagementData', items, latestVersion, 24); setCategoryManagement(items); } } }, []); useEffect(() => { loadBrand(); // Load data saat komponen pertama kali dimuat }, [loadBrand]); const swiperBanner = { modules: [Pagination], classNames: 'mySwiper', slidesPerView: 3, spaceBetween: 10, pagination: { dynamicBullets: true, clickable: true, }, }; return (
{categoryManagement && categoryManagement?.map((category) => { // const countLevel1 = categoryData[category.categoryIdI] || 0; return (

{category.name}

{/*

{countLevel1} Produk tersedia

*/} Lihat Semua
{/* Swiper for SubCategories */} {category.categories.map((subCategory) => { // const countLevel2 = subCategoryData[subCategory.idLevel2] || 0; return (

{subCategory?.name}

{/*

{countLevel2} Produk tersedia

*/} Lihat Semua
{subCategory.child_frontend_id_i.map( (childCategory) => (

{childCategory.name}

) )}
); })}
); })}
); }; export default CategoryDynamic;