diff --git a/app/task/[id].tsx b/app/task/[id].tsx index 3fb49d6..5e610f1 100644 --- a/app/task/[id].tsx +++ b/app/task/[id].tsx @@ -25,6 +25,7 @@ import { colors } from '@/src/theme/colors'; import { useSettingsStore } from '@/src/stores/useSettingsStore'; import { isValidUUID } from '@/src/lib/validation'; import { getPriorityOptions } from '@/src/lib/priority'; +import { goBack } from '@/src/lib/navigation'; import { RECURRENCE_OPTIONS } from '@/src/lib/recurrence'; import { getTaskById, @@ -112,14 +113,6 @@ export default function TaskDetailScreen() { setSubtasks(result as SubtaskData[]); }; - const goBack = () => { - if (router.canGoBack()) { - router.back(); - } else { - router.replace('/'); - } - }; - const handleSave = async () => { if (saving) return; if (!task || !title.trim()) return; @@ -134,8 +127,9 @@ export default function TaskDetailScreen() { listId: selectedListId, }); await setTagsForTask(task.id, selectedTagIds); - goBack(); - } finally { + goBack(router); + } catch { + // Save failed — stay on screen so user can retry setSaving(false); } }; @@ -149,7 +143,7 @@ export default function TaskDetailScreen() { onPress: async () => { await deleteTask(id!); Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium); - goBack(); + goBack(router); }, }, ]); @@ -193,7 +187,7 @@ export default function TaskDetailScreen() { - + goBack(router)} className="p-2.5" hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}> diff --git a/app/task/new.tsx b/app/task/new.tsx index 3d4b7cc..d707179 100644 --- a/app/task/new.tsx +++ b/app/task/new.tsx @@ -27,6 +27,7 @@ import { getInboxId, getAllLists } from '@/src/db/repository/lists'; import { getAllTags, setTagsForTask } from '@/src/db/repository/tags'; import { getPriorityOptions } from '@/src/lib/priority'; import { RECURRENCE_OPTIONS } from '@/src/lib/recurrence'; +import { goBack } from '@/src/lib/navigation'; import TagChip from '@/src/components/task/TagChip'; const ICON_MAP: Record = { @@ -64,14 +65,6 @@ export default function NewTaskScreen() { getAllTags().then(setAvailableTags); }, []); - const goBack = () => { - if (router.canGoBack()) { - router.back(); - } else { - router.replace('/'); - } - }; - const handleSave = async () => { if (saving) return; if (!title.trim()) return; @@ -91,7 +84,7 @@ export default function NewTaskScreen() { for (const sub of pendingSubtasks) { await createTask({ title: sub, listId: selectedListId, parentId: taskId }); } - goBack(); + goBack(router); } catch { // FK constraint or other DB error — fallback to inbox setSaving(false); @@ -128,7 +121,7 @@ export default function NewTaskScreen() { isDark ? 'border-[#3A3A3A]' : 'border-[#E5E7EB]' }`} > - + goBack(router)} className="p-2.5" hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}> { + if (router.canGoBack()) { + router.back(); + } else { + router.replace('/'); + } +};