import * as SQLite from "expo-sqlite"; import React, { useEffect, useState } from "react"; import { Button, FlatList, Modal, Platform, StyleSheet, Text, TextInput, TouchableOpacity, View, } from "react-native"; const db = SQLite.openDatabaseSync("reminders.db"); export interface Reminder { id: string; title: string; description: string; date: string; } const RemindersList: React.FC = () => { const [reminders, setReminders] = useState([]); const [modalVisible, setModalVisible] = useState(false); const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [date, setDate] = useState(""); useEffect(() => { initDB(); loadReminders(); }, []); const initDB = async () => { await db.execAsync( "CREATE TABLE IF NOT EXISTS reminders (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, description TEXT, date TEXT);" ); }; const loadReminders = async () => { const stmt = await db.prepareAsync( "SELECT * FROM reminders ORDER BY date ASC;" ); const loaded: Reminder[] = []; const result = await stmt.executeAsync([]); for await (const row of result) { loaded.push(row as Reminder); } setReminders(loaded); await stmt.finalizeAsync(); }; const saveReminder = async () => { if (!title || !date) return; await db.execAsync( `INSERT INTO reminders (title, description, date) VALUES ('${title.replace(/'/g, "''")}', '${description.replace(/'/g, "''")}', '${date}');` ); setTitle(""); setDescription(""); setDate(""); setModalVisible(false); await loadReminders(); }; const renderItem = ({ item }: { item: Reminder }) => ( {item.title} {item.description} {new Date(item.date).toLocaleString()} ); return ( setModalVisible(true)} > item.id.toString()} renderItem={renderItem} ListEmptyComponent={ Keine Erinnerungen. } /> setModalVisible(false)} > Neue Erinnerung