import { Alert, ColorSchemeName, Pressable, StyleSheet, useColorScheme, type ViewProps } from 'react-native'; import { Text } from '@react-navigation/elements'; import { useRouter } from 'expo-router'; import { useTranslation } from 'react-i18next'; import { useThemeColor } from '../hooks/useThemeColor'; import { Category, CategoryQuery } from '../models/category'; import { Task, TaskQuery } from '../models/task'; import { CategoryRepository } from '../repositories/CategoryRepository'; import { TaskRepository } from '../repositories/TaskRepository'; import { SQLiteDataService } from '../services/data/sqliteDataService'; import { GetTaskColor } from '../utils/colors'; import { ThemedText } from './ThemedText'; import { ThemedView } from './ThemedView'; export type CategoryItemProps = ViewProps & { lightColor?: string; darkColor?: string; category: Category; onUpdate: () => void; categories: Category[]; }; const categoryRepository = new CategoryRepository(new SQLiteDataService(CategoryQuery)); const taskRepository = new TaskRepository(new SQLiteDataService(TaskQuery)); export function CategoryItem({ category, categories, onUpdate, lightColor, darkColor, ...otherProps }: CategoryItemProps) { const { t } = useTranslation(); const backgroundColor = useThemeColor({ light: lightColor, dark: darkColor }, 'background'); const router = useRouter(); const colorScheme = useColorScheme(); const LongPressHandler = () => { //select edit or remove console.log("Long pressed task:", category); Alert.alert( t('select_action'), t('choose_action_for_category'), [ { text: t('edit'), onPress: () => { // Navigate to edit task form console.log("Editing category:", category); if (!category?.id) return; router.push({ pathname: "../categoryForm", params: { category: JSON.stringify(category) } }); } }, { text: t('remove'), onPress: () => { // Remove the task taskRepository.findAll().then((tasks) => { const tasksInCategory = tasks.filter(task => task.category === category.id); if (tasksInCategory.length > 0) { Alert.alert( t('cannot_delete_category'), t('category_has_tasks'), [{ text: t('ok') }] ); } else { categoryRepository.delete(category.id!).then(() => { onUpdate?.(); }).catch((error) => { console.error("Error removing category:", error); }); } }).catch((error) => { console.error("Error fetching tasks:", error); }); }, style: "destructive" }, { text: t('cancel'), style: "cancel" } ]); } return { LongPressHandler(); }}> {category.icon} {category?.title} ; } const styles = (theme: ColorSchemeName) => { return StyleSheet.create({ taskItemMain: { borderLeftWidth: 0, borderColor: 'color-mix(in oklab, #a71e14 100%, white)', flexDirection: 'row', padding: 16, borderRadius: 8, marginBottom: 8, backgroundColor: theme === 'dark' ? '#555' : '#f0f0f0', justifyContent: 'space-between', alignItems: 'center', }, taskItemSubcontainer: { flexDirection: 'row', backgroundColor: 'transparent', gap: 12, }, taskItemText: { color: theme === 'dark' ? '#fff' : '#000', fontSize: 16, marginBottom: 4, }, taskItemTitle: { fontWeight: 'bold', fontSize: 20, marginBottom: 4, color: theme === 'dark' ? '#fff' : '#000', }, checkButton: { width: 40, height: 40, } }) }