import { View, Text, FlatList, TouchableOpacity, TextInput } from 'react-native'; import { useState, useCallback } from 'react'; import { useFocusEffect } from 'expo-router'; import { Plus, Search, X, ChevronRight } from 'lucide-react-native'; import { getDatabase } from '@/lib/database'; import { Territory, dbToTerritory } from '@/lib/territoryHelpers'; import { AddTerritorySheet } from '@/components/territories/AddTerritorySheet'; import { router } from 'expo-router'; export default function TerritoriesScreen() { const [territories, setTerritories] = useState([]); const [search, setSearch] = useState(''); const [showAdd, setShowAdd] = useState(false); async function loadTerritories() { const db = await getDatabase(); const rows = await db.getAllAsync('SELECT * FROM territories ORDER BY territory_code ASC'); setTerritories(rows.map(dbToTerritory)); } useFocusEffect(useCallback(() => { loadTerritories(); }, [])); const filtered = territories.filter((t) => t.territoryCode.toLowerCase().includes(search.toLowerCase()) || (t.barangay?.toLowerCase().includes(search.toLowerCase()) ?? false) || (t.municipality?.toLowerCase().includes(search.toLowerCase()) ?? false) ); return ( Territories setShowAdd(true)} className="bg-white/20 rounded-full p-2"> {search ? setSearch('')}> : null} item.id} contentContainerStyle={{ paddingHorizontal: 16, paddingBottom: 100, paddingTop: 12, gap: 8 }} renderItem={({ item }) => ( router.push({ pathname: '/territory/[id]', params: { id: item.id } })} className="bg-white rounded-2xl p-4 flex-row items-center shadow-sm" > {item.territoryCode} {item.territoryCode} {item.barangay && {item.barangay}{item.municipality ? `, ${item.municipality}` : ''}} {item.area && Area: {item.area}{item.block ? ` • Block: ${item.block}` : ''}} )} ListEmptyComponent={() => ( {search ? 'No territories found' : 'No territories yet'} {!search && Tap + to add your first territory} )} /> setShowAdd(false)} onSaved={() => { setShowAdd(false); loadTerritories(); }} /> ); }