import React, {useState} from 'react'; import {ScrollView, StatusBar, Text, View} from 'react-native'; import styles from './styles'; import {useNavigation, useRoute} from '@react-navigation/native'; import {PassportAppointmentData} from '../../model/model'; import Colors from '../../../assets/styles/Colors'; import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; import {NativeStackNavigationProp} from '@react-navigation/native-stack'; import {RootStackParamList} from '../../navigation/type'; import {Button, Divider, PaperProvider} from 'react-native-paper'; import DialogChoosePaymentMethod from '../../components/dialog/DialogChoosePaymentMethod'; type ApplicationDetailScreenNavigationProp = NativeStackNavigationProp< RootStackParamList, 'ApplicationDetail' >; const RenderStatusSection = (showDialog: () => void) => { const route = useRoute(); const {data} = route.params as {data: PassportAppointmentData}; const navigation = useNavigation(); if (data.status === 'Sudah Terbayar') { return ( <> Biaya {data.applicationDetails.fee} ); } if (data.status === 'Permohonan Kadaluarsa') { return ( Biaya {data.applicationDetails.fee} ); } return ( <> Biaya {data.applicationDetails.fee} ); }; const RenderApplicantDetailContent = (showDialog: () => void) => { const route = useRoute(); const {data} = route.params as {data: PassportAppointmentData}; return ( Pemohon {data.applicantName} Kode Permohonan {data.applicantCode} NIK {data.applicationDetails.nationalIdNumber} Jenis Kelamin {data.applicationDetails.gender} Jenis Permohonan {data.applicationDetails.applicationType} Alasan Penggantian {data.applicationDetails.replacementReason} Tujuan Permohonan {data.applicationDetails.applicationPurpose} Jenis Paspor {data.applicationDetails.passportType} {RenderStatusSection(showDialog)} ); }; const renderStatusContent = (status: string) => { const statusConfig: { [key: string]: { backgroundColor: string; iconName: string; title: string; desc: string; }; } = { 'Permohonan Kadaluarsa': { backgroundColor: Colors.indicatorRed.color, iconName: 'close-circle', title: 'Permohonan Anda telah kadaluarsa', desc: 'Silakan ajukan permohonan baru', }, 'Sudah Terbayar': { backgroundColor: Colors.indicatorGreen.color, iconName: 'check-circle', title: 'Pembayaran Anda telah selesai', desc: 'Cek dokumen yang diperlukan selama kunjungan', }, 'Menunggu Pembayaran': { backgroundColor: Colors.indicatorOrange.color, iconName: 'alert-circle', title: '16 April 2025 23:30', desc: 'Selesaikan pembayaran Anda sebelum', }, }; const {backgroundColor, iconName, title, desc} = statusConfig[status] || statusConfig['Menunggu Pembayaran']; return ( {status === 'Menunggu Pembayaran' ? ( <> {desc} {title} ) : ( <> {title} {desc} )} ); }; function ApplicationDetailScreen() { const route = useRoute(); const {data} = route.params as {data: PassportAppointmentData}; const navigation = useNavigation(); const [visible, setVisible] = useState(false); const showDialog = () => setVisible(true); const hideDialog = () => setVisible(false); return ( navigation.goBack()} /> Detail Permohonan {renderStatusContent(data.status)} Jadwal Kedatangan {data.appointmentDate} {data.appointmentTime} {data.serviceUnit} Tanggal Pengajuan {data.submissionDate} Kode Layanan {data.serviceCode} {RenderApplicantDetailContent(showDialog)} {visible && ( { navigation.navigate('BillingCode'); hideDialog(); }} onOtherMethodPress={() => { navigation.navigate('OtherMethod'); hideDialog(); }} /> )} ); } export default ApplicationDetailScreen;