From cafa56f1a8c9091062a4b220284e8ca697b050e8 Mon Sep 17 00:00:00 2001 From: johnnyjoygh Date: Sun, 21 Jun 2026 22:55:56 +0800 Subject: [PATCH] chore: make compact mode an opt-in view setting Memo list views hard-coded compact rendering, truncating long memos by default. Make full content the default and add a persisted 'Compact mode' toggle (default off) in the display-settings popover, backed by the localStorage ViewContext. Wire Home/Explore/Archived/UserProfile to read it; add the compact-mode label across all locales. --- web/src/components/MemoDisplaySettingMenu.tsx | 9 +++++++-- web/src/contexts/ViewContext.tsx | 16 +++++++++++++++- web/src/locales/ar.json | 1 + web/src/locales/bg.json | 1 + web/src/locales/ca.json | 1 + web/src/locales/cs.json | 1 + web/src/locales/da.json | 1 + web/src/locales/de.json | 1 + web/src/locales/el.json | 1 + web/src/locales/en-GB.json | 1 + web/src/locales/en.json | 1 + web/src/locales/es.json | 1 + web/src/locales/et.json | 1 + web/src/locales/fa.json | 1 + web/src/locales/fi.json | 1 + web/src/locales/fr.json | 1 + web/src/locales/gl.json | 1 + web/src/locales/hi.json | 1 + web/src/locales/hr.json | 1 + web/src/locales/hu.json | 1 + web/src/locales/id.json | 1 + web/src/locales/it.json | 1 + web/src/locales/ja.json | 1 + web/src/locales/ka-GE.json | 1 + web/src/locales/ko.json | 1 + web/src/locales/lt.json | 1 + web/src/locales/lv.json | 1 + web/src/locales/mr.json | 1 + web/src/locales/nb.json | 1 + web/src/locales/nl.json | 1 + web/src/locales/pl.json | 1 + web/src/locales/pt-BR.json | 1 + web/src/locales/pt-PT.json | 1 + web/src/locales/ro.json | 1 + web/src/locales/ru.json | 1 + web/src/locales/sk.json | 1 + web/src/locales/sl.json | 1 + web/src/locales/sr.json | 1 + web/src/locales/sv.json | 1 + web/src/locales/th.json | 1 + web/src/locales/tr.json | 1 + web/src/locales/uk.json | 1 + web/src/locales/vi.json | 1 + web/src/locales/zh-Hans.json | 1 + web/src/locales/zh-Hant.json | 1 + web/src/pages/Archived.tsx | 4 +++- web/src/pages/Explore.tsx | 6 +++++- web/src/pages/Home.tsx | 6 +++++- web/src/pages/UserProfile.tsx | 4 +++- 49 files changed, 81 insertions(+), 7 deletions(-) diff --git a/web/src/components/MemoDisplaySettingMenu.tsx b/web/src/components/MemoDisplaySettingMenu.tsx index 7677f3ae9..806179442 100644 --- a/web/src/components/MemoDisplaySettingMenu.tsx +++ b/web/src/components/MemoDisplaySettingMenu.tsx @@ -1,5 +1,6 @@ import { Settings2Icon } from "lucide-react"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; +import { Switch } from "@/components/ui/switch"; import { useView } from "@/contexts/ViewContext"; import { cn } from "@/lib/utils"; import { useTranslate } from "@/utils/i18n"; @@ -11,8 +12,8 @@ interface Props { function MemoDisplaySettingMenu({ className }: Props) { const t = useTranslate(); - const { orderByTimeAsc, timeBasis, setTimeBasis, toggleSortOrder } = useView(); - const isApplying = orderByTimeAsc !== false || timeBasis !== "create_time"; + const { orderByTimeAsc, timeBasis, compactMode, setTimeBasis, toggleSortOrder, setCompactMode } = useView(); + const isApplying = orderByTimeAsc !== false || timeBasis !== "create_time" || compactMode; return ( @@ -52,6 +53,10 @@ function MemoDisplaySettingMenu({ className }: Props) { +
+ {t("memo.compact-mode")} + +
diff --git a/web/src/contexts/ViewContext.tsx b/web/src/contexts/ViewContext.tsx index 70bb3d1f7..89366b109 100644 --- a/web/src/contexts/ViewContext.tsx +++ b/web/src/contexts/ViewContext.tsx @@ -6,13 +6,16 @@ interface ViewState { orderByTimeAsc: boolean; timeBasis?: MemoTimeBasis; sortTimeField?: MemoTimeBasis; + compactMode: boolean; } interface ViewContextValue { orderByTimeAsc: boolean; timeBasis: MemoTimeBasis; + compactMode: boolean; toggleSortOrder: () => void; setTimeBasis: (field: MemoTimeBasis) => void; + setCompactMode: (value: boolean) => void; } const ViewContext = createContext(null); @@ -30,12 +33,13 @@ export function ViewProvider({ children }: { children: ReactNode }) { return { orderByTimeAsc: Boolean(data.orderByTimeAsc ?? false), timeBasis, + compactMode: Boolean(data.compactMode ?? false), }; } } catch (error) { console.warn("Failed to load view settings from localStorage:", error); } - return { orderByTimeAsc: false }; + return { orderByTimeAsc: false, compactMode: false }; }; const [viewState, setViewState] = useState(getInitialState); @@ -65,13 +69,23 @@ export function ViewProvider({ children }: { children: ReactNode }) { }); }; + const setCompactMode = (value: boolean) => { + setViewState((prev) => { + const newState = { ...prev, compactMode: value }; + persistToStorage(newState); + return newState; + }); + }; + return ( {children} diff --git a/web/src/locales/ar.json b/web/src/locales/ar.json index 47947c440..e693aa67b 100644 --- a/web/src/locales/ar.json +++ b/web/src/locales/ar.json @@ -194,6 +194,7 @@ "has-task-list": "يحتوي على قائمة مهام", "label": "المرشحات" }, + "compact-mode": "الوضع المضغوط", "links": "روابط", "load-more": "تحميل المزيد", "no-archived-memos": "لا يوجد مذكرات مؤرشفة", diff --git a/web/src/locales/bg.json b/web/src/locales/bg.json index bd80316cb..0197cbfe2 100644 --- a/web/src/locales/bg.json +++ b/web/src/locales/bg.json @@ -246,6 +246,7 @@ "has-task-list": "hasTaskList", "label": "Филтри" }, + "compact-mode": "Компактен режим", "links": "Връзки", "load-more": "Заредете повече", "no-archived-memos": "Няма архивирани бележки.", diff --git a/web/src/locales/ca.json b/web/src/locales/ca.json index e5ee0c417..2756ff5d2 100644 --- a/web/src/locales/ca.json +++ b/web/src/locales/ca.json @@ -208,6 +208,7 @@ "has-task-list": "téLlistaTasques", "label": "Filtres" }, + "compact-mode": "Mode compacte", "links": "Enllaços", "load-more": "Carrega més", "no-archived-memos": "No hi ha notes arxivades.", diff --git a/web/src/locales/cs.json b/web/src/locales/cs.json index a9decef1a..8a52ef81c 100644 --- a/web/src/locales/cs.json +++ b/web/src/locales/cs.json @@ -208,6 +208,7 @@ "has-task-list": "maSeznamUkolu", "label": "Filtry" }, + "compact-mode": "Kompaktní režim", "links": "Odkazy", "load-more": "Načíst více", "no-archived-memos": "Žádné archivované poznámky.", diff --git a/web/src/locales/da.json b/web/src/locales/da.json index 4fe18e595..0cfb44059 100644 --- a/web/src/locales/da.json +++ b/web/src/locales/da.json @@ -246,6 +246,7 @@ "has-task-list": "har Opgaveliste", "label": "Filtre" }, + "compact-mode": "Kompakt tilstand", "links": "Links", "load-more": "Indlæs mere", "no-archived-memos": "Ingen arkiverede notater.", diff --git a/web/src/locales/de.json b/web/src/locales/de.json index c8f427b38..272fb22b0 100644 --- a/web/src/locales/de.json +++ b/web/src/locales/de.json @@ -208,6 +208,7 @@ "has-task-list": "hatAufgabenliste", "label": "Filter" }, + "compact-mode": "Kompaktmodus", "links": "Links", "load-more": "Mehr laden", "no-archived-memos": "Keine archivierten Notizen.", diff --git a/web/src/locales/el.json b/web/src/locales/el.json index 0cc8d9443..29f827ed0 100644 --- a/web/src/locales/el.json +++ b/web/src/locales/el.json @@ -246,6 +246,7 @@ "has-task-list": "hasTaskList", "label": "Φίλτρα" }, + "compact-mode": "Συμπαγής λειτουργία", "links": "Εδαφος διά παιγνίδι γκολφ", "load-more": "Φορτώστε περισσότερα", "no-archived-memos": "Δεν υπάρχουν αρχειοθετημένα σημειώματα.", diff --git a/web/src/locales/en-GB.json b/web/src/locales/en-GB.json index 15efbd303..2c8e07459 100644 --- a/web/src/locales/en-GB.json +++ b/web/src/locales/en-GB.json @@ -208,6 +208,7 @@ "has-task-list": "hasTaskList", "label": "Filters" }, + "compact-mode": "Compact mode", "links": "Links", "load-more": "Load more", "no-archived-memos": "No archived memos.", diff --git a/web/src/locales/en.json b/web/src/locales/en.json index 1c27f2b76..f850862f9 100644 --- a/web/src/locales/en.json +++ b/web/src/locales/en.json @@ -264,6 +264,7 @@ "has-task-list": "hasTaskList", "label": "Filters" }, + "compact-mode": "Compact mode", "links": "Links", "load-more": "Load more", "no-archived-memos": "No archived memos.", diff --git a/web/src/locales/es.json b/web/src/locales/es.json index b1c4c1943..200237b6c 100644 --- a/web/src/locales/es.json +++ b/web/src/locales/es.json @@ -208,6 +208,7 @@ "has-task-list": "tieneListaTareas", "label": "Filtros" }, + "compact-mode": "Modo compacto", "links": "Enlaces", "load-more": "Cargar más", "no-archived-memos": "No hay memos archivados.", diff --git a/web/src/locales/et.json b/web/src/locales/et.json index 36f1e4b8a..bf5d498aa 100644 --- a/web/src/locales/et.json +++ b/web/src/locales/et.json @@ -246,6 +246,7 @@ "has-task-list": "hasTaskList", "label": "Filtrid" }, + "compact-mode": "Kompaktne režiim", "links": "Lingid", "load-more": "Laadige rohkem", "no-archived-memos": "Arhiveeritud memosid pole.", diff --git a/web/src/locales/fa.json b/web/src/locales/fa.json index b5f361d37..abb4ba98e 100644 --- a/web/src/locales/fa.json +++ b/web/src/locales/fa.json @@ -194,6 +194,7 @@ "has-task-list": "دارای لیست کارها", "label": "فیلترها" }, + "compact-mode": "حالت فشرده", "links": "پیوندها", "load-more": "بارگذاری بیشتر", "no-archived-memos": "یادداشت آرشیو شده‌ای وجود ندارد.", diff --git a/web/src/locales/fi.json b/web/src/locales/fi.json index 42e277270..355d627e0 100644 --- a/web/src/locales/fi.json +++ b/web/src/locales/fi.json @@ -246,6 +246,7 @@ "has-task-list": "hasTaskList", "label": "Suodattimet" }, + "compact-mode": "Tiivis tila", "links": "Linkit", "load-more": "Lataa lisää", "no-archived-memos": "Ei arkistoituja muistioita.", diff --git a/web/src/locales/fr.json b/web/src/locales/fr.json index c33b73461..0e2f5b2e5 100644 --- a/web/src/locales/fr.json +++ b/web/src/locales/fr.json @@ -208,6 +208,7 @@ "has-task-list": "aListeTâches", "label": "Filtres" }, + "compact-mode": "Mode compact", "links": "Liens", "load-more": "Charger plus", "no-archived-memos": "Aucune note archivée.", diff --git a/web/src/locales/gl.json b/web/src/locales/gl.json index dfa7caeaa..def58081c 100644 --- a/web/src/locales/gl.json +++ b/web/src/locales/gl.json @@ -208,6 +208,7 @@ "has-task-list": "hasTaskList", "label": "Filtros" }, + "compact-mode": "Modo compacto", "links": "Ligazóns", "load-more": "Cargar máis", "no-archived-memos": "Sen memos arquivadas.", diff --git a/web/src/locales/hi.json b/web/src/locales/hi.json index 03385cb24..27810ab29 100644 --- a/web/src/locales/hi.json +++ b/web/src/locales/hi.json @@ -194,6 +194,7 @@ "has-task-list": "टास्क लिस्ट है", "label": "फिल्टर" }, + "compact-mode": "कॉम्पैक्ट मोड", "links": "लिंक", "load-more": "और लोड करें", "no-archived-memos": "कोई संग्रहीत मेमो नहीं।", diff --git a/web/src/locales/hr.json b/web/src/locales/hr.json index 7a6f7cc56..b12ab10a3 100644 --- a/web/src/locales/hr.json +++ b/web/src/locales/hr.json @@ -208,6 +208,7 @@ "has-task-list": "imaZadatke", "label": "Filteri" }, + "compact-mode": "Kompaktni način", "links": "Linkovi", "load-more": "Učitaj više", "no-archived-memos": "Nema arhiviranih memoa.", diff --git a/web/src/locales/hu.json b/web/src/locales/hu.json index e9811c091..15065f9b9 100644 --- a/web/src/locales/hu.json +++ b/web/src/locales/hu.json @@ -208,6 +208,7 @@ "has-task-list": "vanFeladatLista", "label": "Szűrők" }, + "compact-mode": "Kompakt mód", "links": "Hivatkozások", "load-more": "Több betöltése", "no-archived-memos": "Nincsenek archivált jegyzetek.", diff --git a/web/src/locales/id.json b/web/src/locales/id.json index ab4f40269..b315c0963 100644 --- a/web/src/locales/id.json +++ b/web/src/locales/id.json @@ -194,6 +194,7 @@ "has-task-list": "Memiliki daftar tugas", "label": "Filter" }, + "compact-mode": "Mode ringkas", "links": "Tautan", "load-more": "Muat lebih banyak", "no-archived-memos": "Tidak ada memo yang diarsipkan.", diff --git a/web/src/locales/it.json b/web/src/locales/it.json index 4eb2acfc2..f1cd046d6 100644 --- a/web/src/locales/it.json +++ b/web/src/locales/it.json @@ -208,6 +208,7 @@ "has-task-list": "haListaCompiti", "label": "Filtri" }, + "compact-mode": "Modalità compatta", "links": "Link", "load-more": "Carica altro", "no-archived-memos": "Nessun memo archiviato.", diff --git a/web/src/locales/ja.json b/web/src/locales/ja.json index ee4b80d00..7d8fdc0df 100644 --- a/web/src/locales/ja.json +++ b/web/src/locales/ja.json @@ -208,6 +208,7 @@ "has-task-list": "タスクリストあり", "label": "フィルター" }, + "compact-mode": "コンパクト表示", "links": "リンク", "load-more": "さらに読み込む", "no-archived-memos": "アーカイブされたメモはありません。", diff --git a/web/src/locales/ka-GE.json b/web/src/locales/ka-GE.json index 3a92e1828..1173e6589 100644 --- a/web/src/locales/ka-GE.json +++ b/web/src/locales/ka-GE.json @@ -208,6 +208,7 @@ "has-task-list": "სიისამოცანებია", "label": "ფილტრები" }, + "compact-mode": "კომპაქტური რეჟიმი", "links": "ლინკები", "load-more": "მეტის ჩატვირთვა", "no-archived-memos": "დაარქივებული მემოები არ არის.", diff --git a/web/src/locales/ko.json b/web/src/locales/ko.json index ec90894fb..12da053cb 100644 --- a/web/src/locales/ko.json +++ b/web/src/locales/ko.json @@ -194,6 +194,7 @@ "has-task-list": "할일목록있음", "label": "필터" }, + "compact-mode": "간략 보기", "links": "링크", "load-more": "더보기", "no-archived-memos": "보관처리된 메모가 없습니다.", diff --git a/web/src/locales/lt.json b/web/src/locales/lt.json index 07868f947..8993a58e0 100644 --- a/web/src/locales/lt.json +++ b/web/src/locales/lt.json @@ -246,6 +246,7 @@ "has-task-list": "turiTaskList", "label": "Filtrai" }, + "compact-mode": "Kompaktiškas režimas", "links": "Nuorodos", "load-more": "Įkelti daugiau", "no-archived-memos": "Nėra archyvuotų atmintinių.", diff --git a/web/src/locales/lv.json b/web/src/locales/lv.json index c6da87160..af417861f 100644 --- a/web/src/locales/lv.json +++ b/web/src/locales/lv.json @@ -246,6 +246,7 @@ "has-task-list": "hasTaskList", "label": "Filtri" }, + "compact-mode": "Kompaktais režīms", "links": "Saites", "load-more": "Ielādēt vairāk", "no-archived-memos": "Nav arhivētu piezīmju.", diff --git a/web/src/locales/mr.json b/web/src/locales/mr.json index b37482308..608feacea 100644 --- a/web/src/locales/mr.json +++ b/web/src/locales/mr.json @@ -194,6 +194,7 @@ "has-task-list": "कार्यसूची आहे", "label": "फिल्टर" }, + "compact-mode": "संक्षिप्त मोड", "links": "लिंक्स", "load-more": "अधिक लोड करा", "no-archived-memos": "कोणतेही संग्रहित मेमो नाहीत.", diff --git a/web/src/locales/nb.json b/web/src/locales/nb.json index 4a38bba68..bda70ba5b 100644 --- a/web/src/locales/nb.json +++ b/web/src/locales/nb.json @@ -208,6 +208,7 @@ "has-task-list": "harGjøremålsListe", "label": "Filtre" }, + "compact-mode": "Kompakt modus", "links": "Linker", "load-more": "Last inn mer", "no-archived-memos": "Ingen arkiverte memoer.", diff --git a/web/src/locales/nl.json b/web/src/locales/nl.json index e42d5a508..61e99ee41 100644 --- a/web/src/locales/nl.json +++ b/web/src/locales/nl.json @@ -208,6 +208,7 @@ "has-task-list": "heeftTakenlijst", "label": "Filters" }, + "compact-mode": "Compacte modus", "links": "Links", "load-more": "Meer laden", "no-archived-memos": "Geen gearchiveerde memos.", diff --git a/web/src/locales/pl.json b/web/src/locales/pl.json index 91f3db5ee..6ce09b79b 100644 --- a/web/src/locales/pl.json +++ b/web/src/locales/pl.json @@ -208,6 +208,7 @@ "has-task-list": "ma listę zadań", "label": "Filtry" }, + "compact-mode": "Tryb kompaktowy", "links": "Linki", "load-more": "Załaduj więcej", "no-archived-memos": "Brak zarchiwizowanych notatek.", diff --git a/web/src/locales/pt-BR.json b/web/src/locales/pt-BR.json index d44d7349e..ba0ae9396 100644 --- a/web/src/locales/pt-BR.json +++ b/web/src/locales/pt-BR.json @@ -194,6 +194,7 @@ "has-task-list": "temListaDeTarefas", "label": "Filtros" }, + "compact-mode": "Modo compacto", "links": "Links", "load-more": "Carregar mais", "no-archived-memos": "Nenhum memo arquivado.", diff --git a/web/src/locales/pt-PT.json b/web/src/locales/pt-PT.json index 284d1e96a..b1dcc5843 100644 --- a/web/src/locales/pt-PT.json +++ b/web/src/locales/pt-PT.json @@ -208,6 +208,7 @@ "has-task-list": "temListaDeTarefas", "label": "Filtros" }, + "compact-mode": "Modo compacto", "links": "Links", "load-more": "Carregar mais", "no-archived-memos": "Não existem memos arquivados.", diff --git a/web/src/locales/ro.json b/web/src/locales/ro.json index cd1c6f6eb..6e5223eea 100644 --- a/web/src/locales/ro.json +++ b/web/src/locales/ro.json @@ -246,6 +246,7 @@ "has-task-list": "areTaskList", "label": "Filtre" }, + "compact-mode": "Mod compact", "links": "Legături", "load-more": "Încărcați mai multe", "no-archived-memos": "Fără memorii arhivate.", diff --git a/web/src/locales/ru.json b/web/src/locales/ru.json index 04935dba6..0786fb598 100644 --- a/web/src/locales/ru.json +++ b/web/src/locales/ru.json @@ -208,6 +208,7 @@ "has-task-list": "hasTaskList", "label": "Фильтры" }, + "compact-mode": "Компактный режим", "links": "Ссылки", "load-more": "Загрузить еще", "no-archived-memos": "Нет заархивированных записей.", diff --git a/web/src/locales/sk.json b/web/src/locales/sk.json index 368009d53..c2523cb2e 100644 --- a/web/src/locales/sk.json +++ b/web/src/locales/sk.json @@ -246,6 +246,7 @@ "has-task-list": "hasTaskList", "label": "Filtre" }, + "compact-mode": "Kompaktný režim", "links": "Odkazy", "load-more": "Načítať viac", "no-archived-memos": "Žiadne archivované poznámky.", diff --git a/web/src/locales/sl.json b/web/src/locales/sl.json index 7c96aa569..dd73a5a93 100644 --- a/web/src/locales/sl.json +++ b/web/src/locales/sl.json @@ -208,6 +208,7 @@ "has-task-list": "imaSeznamOpravil", "label": "Filtri" }, + "compact-mode": "Strnjeni način", "links": "Povezave", "load-more": "Naloži več", "no-archived-memos": "Ni arhiviranih beležk.", diff --git a/web/src/locales/sr.json b/web/src/locales/sr.json index b7ab1ebe9..4700cc3d4 100644 --- a/web/src/locales/sr.json +++ b/web/src/locales/sr.json @@ -246,6 +246,7 @@ "has-task-list": "хасТаскЛист", "label": "Филтери" }, + "compact-mode": "Компактни режим", "links": "Линкови", "load-more": "Учитај више", "no-archived-memos": "Нема архивираних белешки.", diff --git a/web/src/locales/sv.json b/web/src/locales/sv.json index 64f6ebe95..b1d7dfbdb 100644 --- a/web/src/locales/sv.json +++ b/web/src/locales/sv.json @@ -208,6 +208,7 @@ "has-task-list": "harAttGöraLista", "label": "Filter" }, + "compact-mode": "Kompakt läge", "links": "Länkar", "load-more": "Ladda mer", "no-archived-memos": "Inga arkiverade anteckningar.", diff --git a/web/src/locales/th.json b/web/src/locales/th.json index b4dbb171e..5c63c974c 100644 --- a/web/src/locales/th.json +++ b/web/src/locales/th.json @@ -194,6 +194,7 @@ "has-task-list": "มีรายการที่ต้องทำ", "label": "ตัวกรอง" }, + "compact-mode": "โหมดกะทัดรัด", "links": "ลิงก์", "load-more": "โหลดเพิ่มเติม", "no-archived-memos": "ไม่มีบันทึกช่วยจำที่ถูกเก็บถาวร", diff --git a/web/src/locales/tr.json b/web/src/locales/tr.json index a47c48616..ed9edb035 100644 --- a/web/src/locales/tr.json +++ b/web/src/locales/tr.json @@ -208,6 +208,7 @@ "has-task-list": "Yapılacaklar listesi içerir", "label": "Filtreler" }, + "compact-mode": "Kompakt mod", "links": "Bağlantılar", "load-more": "Daha fazla yükle", "no-archived-memos": "Arşivlenmiş not yok.", diff --git a/web/src/locales/uk.json b/web/src/locales/uk.json index bfaeaa843..a7020ae61 100644 --- a/web/src/locales/uk.json +++ b/web/src/locales/uk.json @@ -208,6 +208,7 @@ "has-task-list": "єСписокЗавдань", "label": "Фільтри" }, + "compact-mode": "Компактний режим", "links": "Посилання", "load-more": "Завантажити більше", "no-archived-memos": "Немає архівованих нотаток.", diff --git a/web/src/locales/vi.json b/web/src/locales/vi.json index 0e77a1aa7..c096a7969 100644 --- a/web/src/locales/vi.json +++ b/web/src/locales/vi.json @@ -194,6 +194,7 @@ "has-task-list": "cóDanhSáchViệc", "label": "Bộ lọc" }, + "compact-mode": "Chế độ thu gọn", "links": "Liên kết", "load-more": "Tải thêm", "no-archived-memos": "Không có ghi chú nào được lưu trữ.", diff --git a/web/src/locales/zh-Hans.json b/web/src/locales/zh-Hans.json index 8b15fe33a..6f3bd5266 100644 --- a/web/src/locales/zh-Hans.json +++ b/web/src/locales/zh-Hans.json @@ -210,6 +210,7 @@ "has-task-list": "有待办", "label": "过滤器" }, + "compact-mode": "紧凑模式", "links": "链接", "load-more": "加载更多", "no-archived-memos": "没有已归档备忘录。", diff --git a/web/src/locales/zh-Hant.json b/web/src/locales/zh-Hant.json index 4279287ed..e80c39141 100644 --- a/web/src/locales/zh-Hant.json +++ b/web/src/locales/zh-Hant.json @@ -246,6 +246,7 @@ "has-task-list": "有待辦事項", "label": "過濾器" }, + "compact-mode": "精簡模式", "links": "連結", "load-more": "載入更多", "no-archived-memos": "無已封存的備忘錄", diff --git a/web/src/pages/Archived.tsx b/web/src/pages/Archived.tsx index 6425d3821..95ae4af3a 100644 --- a/web/src/pages/Archived.tsx +++ b/web/src/pages/Archived.tsx @@ -1,5 +1,6 @@ import MemoView from "@/components/MemoView"; import PagedMemoList from "@/components/PagedMemoList"; +import { useView } from "@/contexts/ViewContext"; import { useMemoFilters, useMemoSorting } from "@/hooks"; import useCurrentUser from "@/hooks/useCurrentUser"; import { State } from "@/types/proto/api/v1/common_pb"; @@ -7,6 +8,7 @@ import { Memo } from "@/types/proto/api/v1/memo_service_pb"; const Archived = () => { const user = useCurrentUser(); + const { compactMode } = useView(); // Build filter using unified hook (no shortcuts or pinned filter) const memoFilter = useMemoFilters({ @@ -23,7 +25,7 @@ const Archived = () => { return ( } + renderer={(memo: Memo) => } listSort={listSort} state={State.ARCHIVED} orderBy={orderBy} diff --git a/web/src/pages/Explore.tsx b/web/src/pages/Explore.tsx index 2b8e7b2f8..5eb4601d3 100644 --- a/web/src/pages/Explore.tsx +++ b/web/src/pages/Explore.tsx @@ -1,5 +1,6 @@ import MemoView from "@/components/MemoView"; import PagedMemoList from "@/components/PagedMemoList"; +import { useView } from "@/contexts/ViewContext"; import { useMemoFilters, useMemoSorting } from "@/hooks"; import useCurrentUser from "@/hooks/useCurrentUser"; import { State } from "@/types/proto/api/v1/common_pb"; @@ -7,6 +8,7 @@ import { Memo, Visibility } from "@/types/proto/api/v1/memo_service_pb"; const Explore = () => { const currentUser = useCurrentUser(); + const { compactMode } = useView(); // Determine visibility filter based on authentication status // - Logged-in users: Can see PUBLIC and PROTECTED memos @@ -29,7 +31,9 @@ const Explore = () => { return ( } + renderer={(memo: Memo) => ( + + )} listSort={listSort} orderBy={orderBy} filter={memoFilter} diff --git a/web/src/pages/Home.tsx b/web/src/pages/Home.tsx index 04fb86b63..8db8676c9 100644 --- a/web/src/pages/Home.tsx +++ b/web/src/pages/Home.tsx @@ -2,6 +2,7 @@ import MemoView from "@/components/MemoView"; import PagedMemoList from "@/components/PagedMemoList"; import { useInstance } from "@/contexts/InstanceContext"; import { NewMemoProvider } from "@/contexts/NewMemoContext"; +import { useView } from "@/contexts/ViewContext"; import { useMemoFilters, useMemoSorting } from "@/hooks"; import useCurrentUser from "@/hooks/useCurrentUser"; import { State } from "@/types/proto/api/v1/common_pb"; @@ -10,6 +11,7 @@ import { Memo } from "@/types/proto/api/v1/memo_service_pb"; const Home = () => { const user = useCurrentUser(); const { isInitialized } = useInstance(); + const { compactMode } = useView(); const memoFilter = useMemoFilters({ creatorName: user?.name, @@ -26,7 +28,9 @@ const Home = () => {
} + renderer={(memo: Memo) => ( + + )} listSort={listSort} orderBy={orderBy} filter={memoFilter} diff --git a/web/src/pages/UserProfile.tsx b/web/src/pages/UserProfile.tsx index 8f61d7820..9b2faebe4 100644 --- a/web/src/pages/UserProfile.tsx +++ b/web/src/pages/UserProfile.tsx @@ -8,6 +8,7 @@ import PagedMemoList from "@/components/PagedMemoList"; import UserAvatar from "@/components/UserAvatar"; import { Button } from "@/components/ui/button"; import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { useView } from "@/contexts/ViewContext"; import { useMemoFilters, useMemoSorting } from "@/hooks"; import { useUser } from "@/hooks/useUserQueries"; import { State } from "@/types/proto/api/v1/common_pb"; @@ -50,6 +51,7 @@ const UserProfile = () => { const username = useParams().username; const [searchParams, setSearchParams] = useSearchParams(); const activeTab = (searchParams.get("view") === "map" ? "map" : "memos") as TabView; + const { compactMode } = useView(); const { data: user, isLoading, error } = useUser(`users/${username}`, { enabled: !!username }); @@ -111,7 +113,7 @@ const UserProfile = () => { {activeTab === "memos" ? ( ( - + )} listSort={listSort} orderBy={orderBy}