From e85476282d5fa7d80b4460cc111af93a94c42eaf Mon Sep 17 00:00:00 2001 From: tianma-if Date: Sun, 19 Jul 2026 09:06:58 +0800 Subject: [PATCH] feat(mobile): align home and trash navigation --- apps/mobile/src/screens/WorkspaceScreen.tsx | 56 +++++++++++++++++---- 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/apps/mobile/src/screens/WorkspaceScreen.tsx b/apps/mobile/src/screens/WorkspaceScreen.tsx index ad4e1e79..cd7336e5 100644 --- a/apps/mobile/src/screens/WorkspaceScreen.tsx +++ b/apps/mobile/src/screens/WorkspaceScreen.tsx @@ -75,6 +75,7 @@ import { StyleSheet, type StyleProp, Switch, + Vibration, View, } from "react-native"; import { SafeAreaView, useSafeAreaInsets } from "react-native-safe-area-context"; @@ -395,6 +396,10 @@ export const WorkspaceScreen = () => { } if (activeView !== "notes") { setActiveView("notes"); + if (memoView === "trash") { + setMemoView("notebook"); + setActiveNotebookId(ALL_NOTES_ID); + } return true; } if (memoView === "trash") { @@ -455,6 +460,34 @@ export const WorkspaceScreen = () => { setSelectionMoreOpen(false); }; + const showAllNotes = () => { + setActiveView("notes"); + setMemoView("notebook"); + setActiveNotebookId(ALL_NOTES_ID); + setSearchText(""); + clearSelection(); + }; + + const showTrash = () => { + setMemoView("trash"); + setActiveNotebookId(ALL_NOTES_ID); + setSearchText(""); + clearSelection(); + }; + + const openSettings = () => { + setSearchText(""); + setActiveView("settings"); + }; + + const closeSettings = () => { + setActiveView("notes"); + if (memoView === "trash") { + setMemoView("notebook"); + setActiveNotebookId(ALL_NOTES_ID); + } + }; + const toggleVisibleSelection = () => { const visibleMemoIds = visibleMemos.map((memo) => memo.id); @@ -826,6 +859,7 @@ export const WorkspaceScreen = () => { }; const selectSingleMemo = (memoId: string) => { + Vibration.vibrate(8); setSelectionMode(true); setSelectedMemoIds(new Set([memoId])); }; @@ -985,7 +1019,7 @@ export const WorkspaceScreen = () => { setSearchText(value); clearSelection(); }} - onSetMemoView={setMemoView} + onSetMemoView={(nextMemoView) => nextMemoView === "trash" ? showTrash() : showAllNotes()} searchText={searchText} searchTotalCount={searchActive ? searchQuery.data?.pages[0]?.totalCount ?? searchResults.length @@ -1001,7 +1035,7 @@ export const WorkspaceScreen = () => { setActiveView("notes")} + onClose={closeSettings} localePreference={localePreference} onLocalePreferenceChange={handleLocalePreferenceChange} imageCompressionEnabled={imageCompressionEnabled} @@ -1148,7 +1182,11 @@ export const WorkspaceScreen = () => { onSortModeChange={setMemoSortMode} onToggleTrash={() => { setNotesActionsOpen(false); - setMemoView(memoView === "trash" ? "notebook" : "trash"); + if (memoView === "trash") { + showAllNotes(); + } else { + showTrash(); + } }} selectionMode={selectionMode} visible @@ -1200,10 +1238,7 @@ export const WorkspaceScreen = () => { active={activeView === "notes"} icon={} label="首页" - onPress={() => { - setSearchText(""); - setActiveView("notes"); - }} + onPress={showAllNotes} /> { active={false} icon={} label="我的" - onPress={() => setActiveView("settings")} + onPress={openSettings} /> ) : null} @@ -4771,7 +4806,7 @@ const MemoList = ({ onMemoLongPress(item) : undefined} + onLongPress={!selectionMode && onMemoLongPress ? () => onMemoLongPress(item) : undefined} onPress={() => onMemoPress(item.id)} selected={selectedMemoIds.has(item.id)} selectionMode={selectionMode} @@ -5188,6 +5223,7 @@ const MemoCard = memo(function MemoCard({ void }) => ( - + {icon} {label}