'use client' import { LayoutDrawer, LayoutModalViewFile, TEMA, WARNA } from '@/module/_global'; import SkeletonBanner from '@/module/_global/components/skeleton_banner'; import LayoutModal from '@/module/_global/layout/layout_modal'; import { useHookstate } from '@hookstate/core'; import { ActionIcon, Box, Flex, Group, Image, Paper, SimpleGrid, Stack, Text } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import { useParams, useRouter } from 'next/navigation'; import { useState } from 'react'; import toast from 'react-hot-toast'; import { FaFile, FaPencil, FaTrash } from 'react-icons/fa6'; import { funDeleteBanner, funGetAllBanner } from '../lib/api_banner'; import { IDataBanner } from '../lib/type_banner'; function ListBanner() { const tema = useHookstate(TEMA) const router = useRouter(); const [isOpenModalView, setOpenModalView] = useState(false) const [isOpenModal, setOpenModal] = useState(false) const [openDrawer, setOpenDrawer] = useState(false); const [idDataStorage, setIdDataStorage] = useState('') const [isExtension, setExtension] = useState('') const [loading, setLoading] = useState(true) const [isData, setData] = useState([]) const [idData, setIdData] = useState('') const [isPage, setPage] = useState(1) const fetchData = async (loading: boolean) => { try { if (loading) setLoading(true) const response = await funGetAllBanner('?page=' + isPage) if (response.success) { setData(response.data.map((banner: { image: any; }) => ({ ...banner, image: banner.image }))); } else { toast.error(response.message) } setLoading(false) } catch (error) { console.error(error) toast.error("Gagal mendapatkan banner, coba lagi nanti"); } finally { setLoading(false) } } useShallowEffect(() => { fetchData(true) setPage(1) }, [isPage]) useShallowEffect(() => { fetchData(false) }, [isPage]) async function onDelete(id: string) { try { const res = await funDeleteBanner(id); if (res.success) { toast.success(res.message) setData(isData.filter((banner) => banner.id !== id)); setIdData("") setIdDataStorage("") setOpenDrawer(false) } else { toast.error(res.message); } } catch (error) { console.error(error); toast.error("Gagal menghapus banner, coba lagi nanti"); } } return ( {loading ? Array(7) .fill(null) .map((_, i) => ( )) : {isData.length == 0 ? Tidak ada Banner : isData.map((v, i) => { return ( { setIdData(v.id); setIdDataStorage(v.image); setExtension(v.extension); setOpenDrawer(true) } } style={{ width: '100%', maxWidth: 550, height: 85, backgroundColor: 'transparent', border: `1px solid ${tema.get().bgTotalKegiatan}` }}> {v.title} ) }) } } setOpenDrawer(false)}> router.push(`/banner/edit/${idData}`)} direction="column" align="center" justify="center" pb={20}> Edit { setOpenModalView(true) }} direction={"column"} align={"center"} justify={"center"}> Lihat File { setOpenModal(true) }} direction={"column"} align={"center"} justify={"center"}> Hapus setOpenModal(false)} description='Apakah Anda yakin ingin menghapus banner?' onYes={(val) => { if (val) { onDelete(idData) } setOpenModal(false) }} /> setOpenModalView(false)} file={idDataStorage} extension={isExtension} fitur="image" /> ); } export default ListBanner;