fix: save and back buttons not navigating away from task screen (#21) #22
3 changed files with 21 additions and 5 deletions
|
|
@ -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,
|
||||
|
|
@ -126,8 +127,9 @@ export default function TaskDetailScreen() {
|
|||
listId: selectedListId,
|
||||
});
|
||||
await setTagsForTask(task.id, selectedTagIds);
|
||||
router.back();
|
||||
goBack(router);
|
||||
} catch {
|
||||
// Save failed — stay on screen so user can retry
|
||||
setSaving(false);
|
||||
}
|
||||
};
|
||||
|
|
@ -141,7 +143,7 @@ export default function TaskDetailScreen() {
|
|||
onPress: async () => {
|
||||
await deleteTask(id!);
|
||||
Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium);
|
||||
router.back();
|
||||
goBack(router);
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
|
@ -185,7 +187,7 @@ export default function TaskDetailScreen() {
|
|||
<View
|
||||
className={`flex-row items-center justify-between border-b px-4 pb-3 pt-14 ${isDark ? 'border-[#3A3A3A]' : 'border-[#E5E7EB]'}`}
|
||||
>
|
||||
<Pressable onPress={() => router.back()} className="p-2.5" hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}>
|
||||
<Pressable onPress={() => goBack(router)} className="p-2.5" hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}>
|
||||
<ArrowLeft size={24} color={isDark ? '#F5F5F5' : '#1A1A1A'} />
|
||||
</Pressable>
|
||||
<View className="flex-row items-center">
|
||||
|
|
|
|||
|
|
@ -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<string, LucideIcon> = {
|
||||
|
|
@ -83,7 +84,7 @@ export default function NewTaskScreen() {
|
|||
for (const sub of pendingSubtasks) {
|
||||
await createTask({ title: sub, listId: selectedListId, parentId: taskId });
|
||||
}
|
||||
router.back();
|
||||
goBack(router);
|
||||
} catch {
|
||||
// FK constraint or other DB error — fallback to inbox
|
||||
setSaving(false);
|
||||
|
|
@ -120,7 +121,7 @@ export default function NewTaskScreen() {
|
|||
isDark ? 'border-[#3A3A3A]' : 'border-[#E5E7EB]'
|
||||
}`}
|
||||
>
|
||||
<Pressable onPress={() => router.back()} className="p-2.5" hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}>
|
||||
<Pressable onPress={() => goBack(router)} className="p-2.5" hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}>
|
||||
<X size={24} color={isDark ? '#F5F5F5' : '#1A1A1A'} />
|
||||
</Pressable>
|
||||
<Text
|
||||
|
|
|
|||
13
src/lib/navigation.ts
Normal file
13
src/lib/navigation.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
import type { Router } from 'expo-router';
|
||||
|
||||
/**
|
||||
* Navigate back if possible, otherwise replace with root.
|
||||
* Shared between task screens to avoid duplication.
|
||||
*/
|
||||
export const goBack = (router: Router) => {
|
||||
if (router.canGoBack()) {
|
||||
router.back();
|
||||
} else {
|
||||
router.replace('/');
|
||||
}
|
||||
};
|
||||
Loading…
Reference in a new issue