From 6f2ea21aa834afcd4b7a95fd00143cb24e53d70e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=84=EB=AF=BC?= Date: Wed, 1 Jul 2026 18:25:46 +0900 Subject: [PATCH] Allow multi-member session filters --- app/sessions/_components/FilterBar.tsx | 57 +++++++++++++++--------- app/sessions/page.tsx | 11 ++--- lib/session-filters.ts | 61 +++++++++++++++++++------- lib/sessions.ts | 14 +++--- test/form-and-filter.test.tsx | 9 ++-- test/session-filters.test.ts | 12 ++--- 6 files changed, 106 insertions(+), 58 deletions(-) diff --git a/app/sessions/_components/FilterBar.tsx b/app/sessions/_components/FilterBar.tsx index 894f45e..2be662a 100644 --- a/app/sessions/_components/FilterBar.tsx +++ b/app/sessions/_components/FilterBar.tsx @@ -11,7 +11,7 @@ type Member = { type Props = { q: string; - memberId: string; + memberIds: string[]; month: string; pmin: string; pmax: string; @@ -20,13 +20,13 @@ type Props = { }; /** - * /sessions 상단 필터. GET form 으로 제출 → URL ?q=&member=&month=&pmin=&pmax= 갱신. + * /sessions 상단 필터. GET form 으로 제출 → URL ?q=&member=&member=&month=&pmin=&pmax= 갱신. * Server-rendered, 별도 client component 없음. 필터 변경 시 cursor 는 자동으로 리셋 * (form 이 cursor 를 hidden 으로 안 들고 가니까). */ export function FilterBar({ q, - memberId, + memberIds, month, pmin, pmax, @@ -53,24 +53,41 @@ export function FilterBar({ /> -
-
+ + {members.length > 0 ? ( +
+ {members.map((m) => { + const inputId = `f-member-${m.id}`; + return ( +
+ + +
+ ); + })} +
+ ) : ( +

승인된 멤버가 없어요.

+ )} +

+ 여러 명을 선택하면 모두 참여한 세션만 보여줘요. +

+