import { AlertDefaultSystem, BackButton, BaseBox, DrawerCustom, MenuDrawerDynamicGrid, NewWrapper, ScrollableCustom, StackCustom, TextCustom, } from "@/components"; import { IconPlus } from "@/components/_Icon"; import { IconDot } from "@/components/_Icon/IconComponent"; import ListSkeletonComponent from "@/components/_ShareComponent/ListSkeletonComponent"; import NoDataText from "@/components/_ShareComponent/NoDataText"; import { AccentColor, MainColor } from "@/constants/color-palet"; import { ICON_SIZE_SMALL } from "@/constants/constans-value"; import { useAuth } from "@/hooks/use-auth"; import { useNotificationStore } from "@/hooks/use-notification-store"; import { apiGetNotificationsById } from "@/service/api-notifications"; import { listOfcategoriesAppNotification } from "@/types/type-notification-category"; import { formatChatTime } from "@/utils/formatChatTime"; import { Ionicons } from "@expo/vector-icons"; import { router, Stack, useFocusEffect } from "expo-router"; import _ from "lodash"; import { useCallback, useState } from "react"; import { RefreshControl, View } from "react-native"; const selectedCategory = (value: string) => { const category = listOfcategoriesAppNotification.find( (c) => c.value === value ); return category?.label; }; const BoxNotification = ({ data, activeCategory, }: { data: any; activeCategory: string | null; }) => { const { markAsRead } = useNotificationStore(); return ( <> { console.log( "Notification >", selectedCategory(activeCategory as string) ); router.push(data.deepLink); markAsRead(data.id); }} > {data.title} {data.pesan} {formatChatTime(data.createdAt)} ); }; export default function Admin_ScreenNotification() { const { user } = useAuth(); const [activeCategory, setActiveCategory] = useState("event"); const [listData, setListData] = useState([]); const [refreshing, setRefreshing] = useState(false); const [loading, setLoading] = useState(false); const [openDrawer, setOpenDrawer] = useState(false); const { markAsReadAll } = useNotificationStore(); const handlePress = (item: any) => { setActiveCategory(item.value); // tambahkan logika lain seperti filter dsb. }; useFocusEffect( useCallback(() => { fecthData(); }, [activeCategory]) ); const fecthData = async () => { try { setLoading(true); const response = await apiGetNotificationsById({ id: user?.id as any, category: activeCategory as any, }); if (response.success) { setListData(response.data); } else { setListData([]); } } catch (error) { console.log("Error Notification", error); } finally { setLoading(false); } }; const onRefresh = () => { setRefreshing(true); fecthData(); setRefreshing(false); }; return ( <> , headerRight: () => ( setOpenDrawer(true)} /> ), }} /> ({ id: i, label: e.label, value: e.value, }))} onButtonPress={handlePress} activeId={activeCategory as string} /> } refreshControl={ } > {loading ? ( ) : _.isEmpty(listData) ? ( ) : ( listData.map((e, i) => ( )) )} setOpenDrawer(false)} height={"auto"} > ), path: "", }, ]} onPressItem={(item: any) => { console.log("Item", item.value); if (item.value === "read-all") { AlertDefaultSystem({ title: "Tandai Semua Dibaca", message: "Apakah Anda yakin ingin menandai semua notifikasi dibaca?", textLeft: "Batal", textRight: "Ya", onPressRight: () => { markAsReadAll(user?.id as any); const data = _.cloneDeep(listData); data.forEach((e) => { e.isRead = true; }); setListData(data); onRefresh(); setOpenDrawer(false); }, }); } }} /> ); }