import { useState } from 'react'; import { View, Text, FlatList, TextInput, TouchableOpacity, ActivityIndicator, RefreshControl, ScrollView } from 'react-native'; import { useQuery } from '@tanstack/react-query'; import { router } from 'expo-router'; import { api } from '../../../services/api'; const PRIORITY_COLOR: Record = { HIGH: '#DC2626', MEDIUM: '#D97706', LOW: '#16A34A' }; const STATUS_FILTERS = ['ALL', 'OPEN', 'IN_PROGRESS', 'RESOLVED', 'CLOSED']; export default function TicketsScreen() { const [search, setSearch] = useState(''); const [statusFilter, setStatusFilter] = useState('ALL'); const { data, isLoading, refetch, isRefetching } = useQuery({ queryKey: ['tickets'], queryFn: () => api.get('/api/v1/tickets?limit=100').then(r => r.data?.data ?? r.data ?? []), }); const tickets = (data ?? []).filter((t: any) => { const matchSearch = `${t.subject} ${t.client?.firstName} ${t.client?.lastName}`.toLowerCase().includes(search.toLowerCase()); const matchStatus = statusFilter === 'ALL' || t.status === statusFilter; return matchSearch && matchStatus; }); return ( {/* Header */} Tickets router.push('/(app)/tickets/new')} > + New {/* Search */} {/* Status filter chips */} {STATUS_FILTERS.map(s => ( setStatusFilter(s)} className={`rounded-full px-3 py-1.5 mr-2 ${statusFilter === s ? 'bg-primary' : 'bg-gray-100'}`} > {s.replace('_', ' ')} ))} {isLoading ? ( ) : ( item.id} refreshControl={} contentContainerStyle={{ paddingHorizontal: 16, paddingVertical: 12, paddingBottom: 32 }} renderItem={({ item }) => ( router.push(`/(app)/tickets/${item.id}`)} > {item.subject} {item.priority} {item.client?.firstName} {item.client?.lastName} {item.status?.replace('_', ' ')} )} ListEmptyComponent={ 🎫 No tickets found router.push('/(app)/tickets/new')} > Create First Ticket } /> )} ); }