import React, { useState } from 'react'; import { View, Text, StyleSheet, TouchableOpacity, Image, ScrollView } from 'react-native'; import { Popup } from './Popup'; import { Input } from './Input'; import { Dropdown } from './Dropdown'; import { Button } from './Button'; import { Feather } from '@expo/vector-icons'; import { useAppTheme } from '../context/ThemeContext'; import * as ImagePicker from 'expo-image-picker'; import { useToast } from '../context/ToastContext'; interface DynamicFormPopupProps { visible: boolean; onClose: () => void; formType: string | null; } const LIME = '#C6F135'; export const DynamicFormPopup: React.FC = ({ visible, onClose, formType }) => { const { colors, isDark } = useAppTheme(); const { showToast } = useToast(); const [images, setImages] = useState([]); const [loading, setLoading] = useState(false); const [field1, setField1] = useState(''); const [field2, setField2] = useState(''); const [field3, setField3] = useState(''); const pickImage = async (useCamera: boolean) => { try { let result; if (useCamera) { const permission = await ImagePicker.requestCameraPermissionsAsync(); if (!permission.granted) { showToast('Camera permission denied', 'error'); return; } result = await ImagePicker.launchCameraAsync({ mediaTypes: ImagePicker.MediaTypeOptions.Images, quality: 0.8, }); } else { const permission = await ImagePicker.requestMediaLibraryPermissionsAsync(); if (!permission.granted) { showToast('Gallery permission denied', 'error'); return; } result = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ImagePicker.MediaTypeOptions.Images, quality: 0.8, }); } if (!result.canceled && result.assets && result.assets.length > 0) { setImages([...images, result.assets[0].uri]); } } catch (error) { console.error(error); showToast('Error selecting image', 'error'); } }; const removeImage = (index: number) => { const newImages = [...images]; newImages.splice(index, 1); setImages(newImages); }; const handleSubmit = () => { setLoading(true); setTimeout(() => { setLoading(false); showToast(`${formType} submitted successfully!`, 'success'); setField1(''); setField2(''); setField3(''); setImages([]); onClose(); }, 1500); }; const renderFields = () => { switch (formType) { case 'Feature A': return ( <> ); case 'Feature B': return ( <> ); default: return ( <> ); } }; if (!formType) return null; const bg = isDark ? '#1A1A1A' : '#FFFFFF'; const border = isDark ? '#2A2A2A' : '#EEEEEE'; return ( {renderFields()} Attachments pickImage(true)} > Camera pickImage(false)} > Gallery {images.length > 0 && ( {images.map((uri, idx) => ( removeImage(idx)} > ))} )}