import Express_diagnistika from '@/assets/images/Express_diagnistika.png'; import { useTheme } from '@/components/ThemeContext'; import { useQuery, useQueryClient } from '@tanstack/react-query'; import { Image } from 'expo-image'; import { router } from 'expo-router'; import { ChevronLeft, XIcon } from 'lucide-react-native'; import React, { useRef, useState } from 'react'; import { ActivityIndicator, FlatList, Modal, Text, TouchableOpacity, View } from 'react-native'; import { RefreshControl } from 'react-native-gesture-handler'; import { SafeAreaView } from 'react-native-safe-area-context'; import { WebView } from 'react-native-webview'; import { eservices_api } from '../lib/api'; const dark = { bg: '#0f172a', card: '#334155', border: '#1e293b', muted: '#334155', text: '#E5B037', subText: '#0B0F2C', }; export default function EServicesCategoryScreen() { const { isDark } = useTheme(); const [modalVisible, setModalVisible] = useState(false); const webviewRef = useRef(null); const [webUrl, setWebUrl] = React.useState(null); const [refreshing, setRefreshing] = useState(false); const queryClient = useQueryClient(); const { data, isLoading } = useQuery({ queryKey: ['goverment_category'], queryFn: () => eservices_api.category(), }); const onRefresh = async () => { setRefreshing(true); try { await queryClient.refetchQueries({ queryKey: ['goverment_category'] }); } finally { setRefreshing(false); } }; if (isLoading) { return ( ); } const staticCategory = { id: 0, name: 'Express Diagnostika', image: Express_diagnistika, url: 'https://myorg.uz/ru', }; const categories = [staticCategory, ...(data?.data?.data?.results ?? [])]; const handlePress = (item: any) => { if (item.id === 0 && item.url) { setWebUrl(item.url); setModalVisible(true); return; } router.push({ pathname: '/(dashboard)/e-service/e-services-category', params: { categoryId: item.id, categoryName: item.name, }, }); }; return ( `${item.id}-${item.name}`} contentContainerStyle={{ gap: 12, paddingBottom: 80 }} refreshControl={ } renderItem={({ item }) => ( handlePress(item)} style={{ marginHorizontal: 1, backgroundColor: isDark ? '#FDFDFD' : '#ffffff', borderRadius: 16, flexDirection: 'row', alignItems: 'center', borderWidth: isDark ? 1 : 0, borderColor: isDark ? dark.border : 'transparent', shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.15, shadowRadius: 4, elevation: 2, }} > {item.image ? ( ) : ( {item.name[0]} )} )} /> {/* WebView Header */} webviewRef.current?.goBack()} hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }} > {webUrl} setModalVisible(false)} hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }} > {/* WebView */} {webUrl && ( { // iOS va Android uchun barcha URLlarni WebView ichida ochish return true; }} source={{ uri: webUrl }} style={{ flex: 1, backgroundColor: isDark ? '#0f172a' : '#f8fafc' }} startInLoadingState renderLoading={() => ( )} /> )} ); }