import React, { useEffect, useState } from 'react'; import { View, Text, StyleSheet, ScrollView, Image, Dimensions, TouchableOpacity, ActivityIndicator, } from 'react-native'; import { useRoute, useNavigation, RouteProp } from '@react-navigation/native'; import { LinearGradient } from 'expo-linear-gradient'; import { Ionicons } from '@expo/vector-icons'; import { Card } from '../../components/ui/Card'; import { Button } from '../../components/ui/Button'; import { issueService } from '../../services/issueService'; import { colors, spacing, typography, borderRadius } from '../../theme'; import { Issue } from '../../types'; const { width } = Dimensions.get('window'); type IssueDetailRouteParams = { IssueDetail: { issueId: string; }; }; const priorityConfig: Record = { 1: { color: colors.priority.critical, label: 'CRITICAL' }, 2: { color: colors.priority.high, label: 'HIGH' }, 3: { color: colors.priority.medium, label: 'MEDIUM' }, 4: { color: colors.priority.low, label: 'LOW' }, }; const stateConfig: Record = { reported: { color: colors.status.info, label: 'Reported', iconName: 'document-text' }, validated: { color: colors.accent.purple, label: 'Validated', iconName: 'checkmark-circle' }, assigned: { color: colors.accent.cyan, label: 'Assigned', iconName: 'person' }, in_progress: { color: colors.status.warning, label: 'In Progress', iconName: 'construct' }, resolved: { color: colors.status.success, label: 'Resolved', iconName: 'checkmark-done-circle' }, closed: { color: colors.text.tertiary, label: 'Closed', iconName: 'archive' }, rejected: { color: colors.status.error, label: 'Rejected', iconName: 'close-circle' }, }; export function IssueDetailScreen() { const route = useRoute>(); const navigation = useNavigation(); const { issueId } = route.params; const [issue, setIssue] = useState(null); const [loading, setLoading] = useState(true); const [activeImage, setActiveImage] = useState(0); const [showAnnotated, setShowAnnotated] = useState(true); useEffect(() => { fetchIssue(); }, [issueId]); const fetchIssue = async () => { try { const data = await issueService.getIssue(issueId); setIssue(data); } catch (error) { console.error('Failed to fetch issue:', error); } finally { setLoading(false); } }; const formatDate = (dateStr: string) => { const date = new Date(dateStr); return date.toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', }); }; if (loading) { return ( ); } if (!issue) { return ( Issue not found