import React, { useState, useEffect } from 'react'; import { View, Text, ScrollView, TouchableOpacity, FlatList, Modal, TextInput, ActivityIndicator, Alert, } from 'react-native'; import { useNavigation, useIsFocused } from '@react-navigation/native'; import { StackNavigationProp } from '@react-navigation/stack'; import { getStyles } from './helpSupportScreen.styles'; import { Header } from '@components'; import { useAppTheme } from '@theme'; import { AppStackParamList } from '../../../navigation/appStack'; import { useCustomerSupport } from '../../../hooks/useCustomerSupport'; import { TicketCategory, TicketPriority } from '@interfaces'; import { formatDate } from '../../../utils/helper'; type HelpSupportNavProp = StackNavigationProp; const FAQS = [ { q: 'How do I track my order?', a: 'Go to Orders tab and tap on your active order to see tracking.' }, { q: 'What is the delivery time?', a: 'Standard delivery takes 25-30 min, Express takes 10-15 min.' }, { q: 'How do I cancel an order?', a: 'Contact support to cancel an order before it is dispatched.' }, { q: 'What payment methods are accepted?', a: 'UPI, Credit/Debit Card, Wallet, and Cash on Delivery.' }, ]; const TICKET_CATEGORIES: { value: TicketCategory; label: string }[] = [ { value: 'ORDER', label: 'Order' }, { value: 'PAYMENT', label: 'Payment' }, { value: 'PAYOUT', label: 'Payout' }, { value: 'TECHNICAL_ISSUE', label: 'Technical Issue' }, { value: 'ACCOUNT', label: 'Account' }, { value: 'OTHER', label: 'Other' }, ]; export const HelpSupportScreen: React.FC = () => { const { colors } = useAppTheme(); const styles = getStyles(colors); const navigation = useNavigation(); const isFocused = useIsFocused(); // Tab State const [activeTab, setActiveTab] = useState<'faq' | 'tickets'>('faq'); // Custom Support Hook const { tickets, loading, fetchTickets, createTicket } = useCustomerSupport(); // Create Ticket Modal State const [createModalVisible, setCreateModalVisible] = useState(false); const [categorySelectVisible, setCategorySelectVisible] = useState(false); const [category, setCategory] = useState('ORDER'); const [priority] = useState('MEDIUM'); const [subject, setSubject] = useState(''); const [description, setDescription] = useState(''); useEffect(() => { if (isFocused && activeTab === 'tickets') { fetchTickets(); } }, [isFocused, activeTab, fetchTickets]); const handleCreateTicketSubmit = async () => { if (!subject.trim()) { Alert.alert('Error', 'Please enter a subject.'); return; } if (!description.trim()) { Alert.alert('Error', 'Please enter ticket details.'); return; } try { const newTicket = await createTicket({ category, priority, subject: subject.trim(), description: description.trim(), }); setCreateModalVisible(false); setSubject(''); setDescription(''); Alert.alert('Success', 'Support Ticket created successfully!'); // Navigate to chat navigation.navigate('SupportChatScreen', { ticketId: newTicket.id }); } catch (error) { Alert.alert('Error', 'Failed to create support ticket. Please try again.'); } }; const getStatusColor = (status: string) => { switch (status) { case 'OPEN': return { bg: '#E3F2FD', text: '#1E88E5' }; // Blue case 'IN_PROGRESS': return { bg: '#FFF3E0', text: '#FB8C00' }; // Amber case 'RESOLVED': return { bg: '#E8F5E9', text: '#43A047' }; // Green case 'CLOSED': return { bg: '#ECEFF1', text: '#546E7A' }; // Grey default: return { bg: '#F5F5F5', text: '#9E9E9E' }; } }; const renderFaqTab = () => ( Frequently Asked Questions {FAQS.map((faq, index) => ( {faq.q} {faq.a} ))} Contact Support 📞 Call us +91 1800 123 4567 ✉️ Email us support@sgdelivery.com ); const renderTicketsTab = () => ( {loading && tickets.length === 0 ? ( Fetching tickets... ) : ( item.id} showsVerticalScrollIndicator={false} ListEmptyComponent={ No support tickets found Need help with your account or order? Create a ticket below! } renderItem={({ item }) => { const statusStyle = getStatusColor(item.status); return ( navigation.navigate('SupportChatScreen', { ticketId: item.id })} > Ticket #{item.ticketNumber} {formatDate(item.createdAt)} {item.subject} {item.category.replace('_', ' ')} {item.status.replace('_', ' ')} ); }} /> )} setCreateModalVisible(true)} activeOpacity={0.8} > + Create Support Ticket ); return (
navigation.goBack()} /> setActiveTab('faq')} > FAQs setActiveTab('tickets')} > My Support Tickets {activeTab === 'faq' ? renderFaqTab() : renderTicketsTab()} {/* Create Ticket Modal */} setCreateModalVisible(false)} > Create Support Ticket Category setCategorySelectVisible(true)} > {TICKET_CATEGORIES.find((c) => c.value === category)?.label || 'Select category'} Subject Description setCreateModalVisible(false)} > Cancel Submit {/* Category Dropdown Modal */} setCategorySelectVisible(false)} > Select Category {TICKET_CATEGORIES.map((item) => ( { setCategory(item.value); setCategorySelectVisible(false); }} > {item.label} ))} setCategorySelectVisible(false)} > Close ); }; export default HelpSupportScreen;