import { Ionicons } from '@expo/vector-icons'; import BottomSheet, { BottomSheetScrollView } from '@gorhom/bottom-sheet'; import { useQuery } from '@tanstack/react-query'; import { ResizeMode, Video } from 'expo-av'; import React, { useMemo, useRef } from 'react'; import { Dimensions, Image, ScrollView, StyleSheet, Text, View } from 'react-native'; import { announcement_api } from '../lib/api'; const { width, height } = Dimensions.get('window'); export default function AnnouncementDetailSheet({ id }: { id: number }) { const bottomSheetRef = useRef(null); // Sheet sizes const snapPoints = useMemo(() => [height * 0.3, height * 0.7], []); const { data, isLoading, isError } = useQuery({ queryKey: ['announcement_detail', id], queryFn: () => announcement_api.detail(id), enabled: !!id, }); const announcement = data?.data?.data; const files = announcement?.files || []; return ( {isLoading && Yuklanmoqda...} {isError && Xatolik yuz berdi} {announcement && ( <> {/* Carousel */} {files.length > 0 && ( {files.map((file) => { const isVideo = file.file?.endsWith('.mp4'); return ( {isVideo ? ( ); })} )} {/* Title */} {announcement.title} {/* Meta */} {new Date(announcement.created_at).toLocaleDateString()} {announcement.total_view_count} ko'rildi {/* Status */} {/* {announcement.status === 'pending' && 'Kutilmoqda'} {announcement.status === 'paid' && "To'langan"} {announcement.status === 'verified' && 'Tasdiqlangan'} {announcement.status === 'canceled' && 'Bekor qilingan'} */} {/* Description */} {announcement.description} )} ); } const styles = StyleSheet.create({ contentContainer: { padding: 20, gap: 12 }, carousel: { marginBottom: 12 }, mediaContainer: { width: width - 40, height: 200, marginRight: 12 }, media: { width: '100%', height: '100%', borderRadius: 16 }, title: { fontSize: 18, fontWeight: '700', color: '#f1f5f9' }, metaRow: { flexDirection: 'row', gap: 16, marginVertical: 8 }, metaItem: { flexDirection: 'row', alignItems: 'center', gap: 6 }, metaText: { color: '#94a3b8', fontSize: 14 }, statusBadge: { alignSelf: 'flex-start', paddingHorizontal: 12, paddingVertical: 6, borderRadius: 12, backgroundColor: '#2563eb', marginBottom: 12, }, statusText: { color: '#f1f5f9', fontWeight: '600' }, desc: { color: '#cbd5f5', fontSize: 14, lineHeight: 20 }, loading: { color: '#cbd5f5', fontSize: 16 }, error: { color: '#ef4444', fontSize: 16 }, });