import Ionicons from '@expo/vector-icons/Ionicons'; import { ResultDisplay } from '@/components/template-run/result-display'; import { ThemedText } from '@/components/themed-text'; import { ThemedView } from '@/components/themed-view'; import { useTemplateRun } from '@/hooks/use-template-run'; import { getTemplateById } from '@/lib/api/templates'; import { subscription } from '@/lib/auth/client'; import { Template } from '@/lib/types/template'; import { RunTemplateData } from '@/lib/types/template-run'; import { Image } from 'expo-image'; import { LinearGradient } from 'expo-linear-gradient'; import { Stack, useGlobalSearchParams, useLocalSearchParams, useRouter } from 'expo-router'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { Alert, BackHandler, ScrollView, StyleSheet, TouchableOpacity, View } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; type RunStep = 'progress' | 'result'; function transformFormData(formData: RunTemplateData): RunTemplateData { const transformed: RunTemplateData = {}; Object.entries(formData).forEach(([fieldName, value]) => { if (fieldName.startsWith('image_')) { transformed[fieldName] = { url: value, type: 'image', }; } else if (fieldName.startsWith('text_')) { transformed[fieldName] = { content: value, type: 'text', }; } else if (fieldName.startsWith('video_')) { transformed[fieldName] = { url: value, type: 'video', }; } else if (fieldName.startsWith('color_')) { transformed[fieldName] = { value, type: 'color', }; } else { transformed[fieldName] = value; } }); return transformed; } export default function TemplateRunScreen() { const { id } = useLocalSearchParams<{ id: string }>(); const router = useRouter(); const globalParams = useGlobalSearchParams<{ formData?: string }>(); const insets = useSafeAreaInsets(); const [template, setTemplate] = useState