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
)}
)
}