From c8ad87f66d3b00a62763fdc22fe36185fadeabc0 Mon Sep 17 00:00:00 2001 From: varsnotwars Date: Tue, 16 Sep 2025 17:29:30 +1000 Subject: [PATCH] fix:update sort to include pinned --- store/db/mysql/memo.go | 5 ++++- store/db/postgres/memo.go | 5 ++++- store/db/sqlite/memo.go | 5 ++++- web/src/pages/Archived.tsx | 11 +++++++---- web/src/pages/Explore.tsx | 11 +++++++---- web/src/pages/Home.tsx | 11 +++++++---- web/src/pages/UserProfile.tsx | 11 +++++++---- 7 files changed, 40 insertions(+), 19 deletions(-) diff --git a/store/db/mysql/memo.go b/store/db/mysql/memo.go index 354aab545..66ba07bc6 100644 --- a/store/db/mysql/memo.go +++ b/store/db/mysql/memo.go @@ -97,7 +97,10 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo if find.OrderByTimeAsc { order = "ASC" } - orderBy := []string{} + + // Prioritize pinned memos first + orderBy := []string{"`pinned` DESC"} + if find.OrderByUpdatedTs { orderBy = append(orderBy, "`updated_ts` "+order) } else { diff --git a/store/db/postgres/memo.go b/store/db/postgres/memo.go index 0400165a7..d4a71556c 100644 --- a/store/db/postgres/memo.go +++ b/store/db/postgres/memo.go @@ -89,7 +89,10 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo if find.OrderByTimeAsc { order = "ASC" } - orderBy := []string{} + + // Prioritize pinned memos first + orderBy := []string{"pinned DESC"} + if find.OrderByUpdatedTs { orderBy = append(orderBy, "updated_ts "+order) } else { diff --git a/store/db/sqlite/memo.go b/store/db/sqlite/memo.go index 74e0b87b6..d71ad4ba0 100644 --- a/store/db/sqlite/memo.go +++ b/store/db/sqlite/memo.go @@ -89,7 +89,10 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo if find.OrderByTimeAsc { order = "ASC" } - orderBy := []string{} + + // Prioritize pinned memos first + orderBy := []string{"`pinned` DESC"} + if find.OrderByUpdatedTs { orderBy = append(orderBy, "`updated_ts` "+order) } else { diff --git a/web/src/pages/Archived.tsx b/web/src/pages/Archived.tsx index 20c1d4ef0..7a667ede1 100644 --- a/web/src/pages/Archived.tsx +++ b/web/src/pages/Archived.tsx @@ -31,11 +31,14 @@ const Archived = observer(() => { listSort={(memos: Memo[]) => memos .filter((memo) => memo.state === State.ARCHIVED) - .sort((a, b) => - viewStore.state.orderByTimeAsc + .sort((a, b) => { + if (a.pinned && !b.pinned) return -1; + if (b.pinned && !a.pinned) return 1; + + return viewStore.state.orderByTimeAsc ? dayjs(a.displayTime).unix() - dayjs(b.displayTime).unix() - : dayjs(b.displayTime).unix() - dayjs(a.displayTime).unix(), - ) + : dayjs(b.displayTime).unix() - dayjs(a.displayTime).unix(); + }) } state={State.ARCHIVED} orderBy={viewStore.state.orderByTimeAsc ? "display_time asc" : "display_time desc"} diff --git a/web/src/pages/Explore.tsx b/web/src/pages/Explore.tsx index f5cc4eeed..02397909d 100644 --- a/web/src/pages/Explore.tsx +++ b/web/src/pages/Explore.tsx @@ -20,11 +20,14 @@ const Explore = observer(() => { listSort={(memos: Memo[]) => memos .filter((memo) => memo.state === State.NORMAL) - .sort((a, b) => - viewStore.state.orderByTimeAsc + .sort((a, b) => { + if (a.pinned && !b.pinned) return -1; + if (b.pinned && !a.pinned) return 1; + + return viewStore.state.orderByTimeAsc ? dayjs(a.displayTime).unix() - dayjs(b.displayTime).unix() - : dayjs(b.displayTime).unix() - dayjs(a.displayTime).unix(), - ) + : dayjs(b.displayTime).unix() - dayjs(a.displayTime).unix(); + }) } orderBy={viewStore.state.orderByTimeAsc ? "display_time asc" : "display_time desc"} /> diff --git a/web/src/pages/Home.tsx b/web/src/pages/Home.tsx index 49d0b792f..be9eb6bac 100644 --- a/web/src/pages/Home.tsx +++ b/web/src/pages/Home.tsx @@ -60,11 +60,14 @@ const Home = observer(() => { listSort={(memos: Memo[]) => memos .filter((memo) => memo.state === State.NORMAL) - .sort((a, b) => - viewStore.state.orderByTimeAsc + .sort((a, b) => { + if (a.pinned && !b.pinned) return -1; + if (b.pinned && !a.pinned) return 1; + + return viewStore.state.orderByTimeAsc ? dayjs(a.displayTime).unix() - dayjs(b.displayTime).unix() - : dayjs(b.displayTime).unix() - dayjs(a.displayTime).unix(), - ) + : dayjs(b.displayTime).unix() - dayjs(a.displayTime).unix(); + }) } orderBy={viewStore.state.orderByTimeAsc ? "display_time asc" : "display_time desc"} filter={memoFilter} diff --git a/web/src/pages/UserProfile.tsx b/web/src/pages/UserProfile.tsx index 8e0528fe1..3f2a0e50d 100644 --- a/web/src/pages/UserProfile.tsx +++ b/web/src/pages/UserProfile.tsx @@ -95,11 +95,14 @@ const UserProfile = observer(() => { listSort={(memos: Memo[]) => memos .filter((memo) => memo.state === State.NORMAL) - .sort((a, b) => - viewStore.state.orderByTimeAsc + .sort((a, b) => { + if (a.pinned && !b.pinned) return -1; + if (b.pinned && !a.pinned) return 1; + + return viewStore.state.orderByTimeAsc ? dayjs(a.displayTime).unix() - dayjs(b.displayTime).unix() - : dayjs(b.displayTime).unix() - dayjs(a.displayTime).unix(), - ) + : dayjs(b.displayTime).unix() - dayjs(a.displayTime).unix(); + }) } orderBy={viewStore.state.orderByTimeAsc ? "display_time asc" : "display_time desc"} filter={memoFilter}