import React, { useState } from 'react' import { View, Text, TouchableOpacity, ScrollView } from 'react-native' import { BottomDialog , tw } from 'common-ui' import { trpc } from '@/src/trpc-client' import AddressZoneForm from '@/components/AddressZoneForm' import AddressPlaceForm from '@/components/AddressPlaceForm' import MaterialIcons from '@expo/vector-icons/MaterialIcons' const AddressManagement: React.FC = () => { const [dialogOpen, setDialogOpen] = useState(false) const [dialogType, setDialogType] = useState<'zone' | 'place' | null>(null) const [expandedZones, setExpandedZones] = useState>(new Set()) const { data: zones, refetch: refetchZones } = trpc.admin.address.getZones.useQuery() const { data: areas, refetch: refetchAreas } = trpc.admin.address.getAreas.useQuery() const createZone = trpc.admin.address.createZone.useMutation({ onSuccess: () => { refetchZones() setDialogOpen(false) }, }) const createArea = trpc.admin.address.createArea.useMutation({ onSuccess: () => { refetchAreas() setDialogOpen(false) }, }) const handleAddZone = () => { setDialogType('zone') setDialogOpen(true) } const handleAddPlace = () => { setDialogType('place') setDialogOpen(true) } const toggleZone = (zoneId: number) => { setExpandedZones(prev => { const newSet = new Set(prev) if (newSet.has(zoneId)) { newSet.delete(zoneId) } else { newSet.add(zoneId) } return newSet }) } const groupedAreas = areas?.reduce((acc, area) => { if (area.zoneId) { if (!acc[area.zoneId]) acc[area.zoneId] = [] acc[area.zoneId].push(area) } return acc }, {} as Record) || {} const unzonedAreas = areas?.filter(a => !a.zoneId) || [] return ( Add Zone Add Place {zones?.map(zone => ( toggleZone(zone.id)}> {zone.zoneName} {expandedZones.has(zone.id) && ( {groupedAreas[zone.id]?.map(area => ( - {area.placeName} )) || No places in this zone} )} ))} Unzoned Places {unzonedAreas.map(area => ( - {area.placeName} ))} {unzonedAreas.length === 0 && No unzoned places} setDialogOpen(false)}> {dialogType === 'zone' && setDialogOpen(false)} />} {dialogType === 'place' && setDialogOpen(false)} />} ) } export default AddressManagement