import Styles from "@/constants/Styles" import { useTheme } from "@/providers/ThemeProvider" import { MaterialCommunityIcons } from "@expo/vector-icons" import { useRef, useState } from "react" import { ScrollView, View } from "react-native" import DrawerBottom from "./drawerBottom" import Skeleton from "./skeleton" import Text from "./Text" type ApprovalRecord = { id: string status: number // 0=pending, 1=approved, 2=rejected note?: string submitter: { name: string } approver?: { name: string } createdAt: string } type Props = { isVisible: boolean setVisible: (value: boolean) => void data: ApprovalRecord[] loading: boolean } function ApprovalStatusBadge({ status }: { status: number }) { const { colors } = useTheme() const config = status === 1 ? { label: 'Disetujui', color: colors.success } : status === 2 ? { label: 'Ditolak', color: colors.error } : { label: 'Menunggu', color: '#FFA94D' } return ( {config.label} ) } export default function ModalRiwayatApproval({ isVisible, setVisible, data, loading }: Props) { const { colors } = useTheme() const arrSkeleton = Array.from({ length: 3 }) const scrollRef = useRef(null) const [scrollOffset, setScrollOffset] = useState(0) return ( scrollRef.current?.scrollTo(p)} > setScrollOffset(nativeEvent.contentOffset.y)} scrollEventThrottle={16} > {loading ? ( arrSkeleton.map((_, i) => ( )) ) : data.length > 0 ? ( data.map((item, index) => ( {/* Status + tanggal */} {item.createdAt} {/* Pengaju */} Diajukan Oleh: {item.submitter.name} {/* Approver */} Disetujui Oleh: {item.approver?.name ?? '-'} {/* Catatan penolakan */} {item.note && ( Alasan Penolakan {item.note} )} )) ) : ( Belum ada riwayat persetujuan )} ) }