feat: 학생·관리자 회원 목록에 [검색 초기화] 버튼을 둔다
검색어·검색 대상·정렬·페이지 크기·페이지가 모두 URL이라 기본 주소로 되돌리면 초기화된다 (가맹몰 상세 목록과 같은 방식). 도구 줄의 엑셀 다운로드 앞에 놓는다. Co-Authored-By: Claude Opus 5
@c045bff9618553480b390550d08899bdedf7ca60
--- app/(protected)/(basic)/admins/_components/admin-member-list.tsx
+++ app/(protected)/(basic)/admins/_components/admin-member-list.tsx
... | ... | @@ -19,6 +19,7 @@ |
| 19 | 19 |
} from '@/lib/domain/admin-member'; |
| 20 | 20 |
import {
|
| 21 | 21 |
ADMIN_MEMBERS_EXCEL_PATH, |
| 22 |
+ ADMIN_MEMBERS_PATH, |
|
| 22 | 23 |
ADMIN_MEMBER_PAGE_SIZE_OPTIONS, |
| 23 | 24 |
ADMIN_MEMBER_SEARCH_FIELD_OPTIONS, |
| 24 | 25 |
ADMIN_MEMBER_SORT_OPTIONS, |
... | ... | @@ -182,6 +183,13 @@ |
| 182 | 183 |
keyword={query.keyword}
|
| 183 | 184 |
toolbarActions={
|
| 184 | 185 |
<FoxButtonGroup size="md"> |
| 186 |
+ {/* 검색어·검색 대상·정렬·페이지 크기·페이지를 모두 기본값으로 — URL이 상태라 주소만 되돌린다. */}
|
|
| 187 |
+ <FoxButton |
|
| 188 |
+ type="default" |
|
| 189 |
+ size="md" |
|
| 190 |
+ label="검색 초기화" |
|
| 191 |
+ onAction={() => router.replace(ADMIN_MEMBERS_PATH)}
|
|
| 192 |
+ /> |
|
| 185 | 193 |
<form action={ADMIN_MEMBERS_EXCEL_PATH} method="get">
|
| 186 | 194 |
<FoxButton |
| 187 | 195 |
type="secondary" |
--- app/(protected)/(basic)/students/_components/student-list.tsx
+++ app/(protected)/(basic)/students/_components/student-list.tsx
... | ... | @@ -4,6 +4,7 @@ |
| 4 | 4 |
import { useState } from 'react';
|
| 5 | 5 |
import { FoxBadge } from '@fox/core/components/fox-badge';
|
| 6 | 6 |
import { FoxButton } from '@fox/core/components/fox-button';
|
| 7 |
+import { FoxButtonGroup } from '@fox/core/components/fox-button-group';
|
|
| 7 | 8 |
import {
|
| 8 | 9 |
FoxListContainer, |
| 9 | 10 |
type FoxListColumn, |
... | ... | @@ -18,6 +19,7 @@ |
| 18 | 19 |
} from '@/lib/domain/student-member'; |
| 19 | 20 |
import {
|
| 20 | 21 |
STUDENT_MEMBERS_EXCEL_PATH, |
| 22 |
+ STUDENT_MEMBERS_PATH, |
|
| 21 | 23 |
STUDENT_MEMBER_PAGE_SIZE_OPTIONS, |
| 22 | 24 |
STUDENT_MEMBER_SEARCH_FIELD_OPTIONS, |
| 23 | 25 |
STUDENT_MEMBER_SORT_OPTIONS, |
... | ... | @@ -203,18 +205,27 @@ |
| 203 | 205 |
searchField={query.searchField}
|
| 204 | 206 |
keyword={query.keyword}
|
| 205 | 207 |
toolbarActions={
|
| 206 |
- // 네이티브 GET 폼이라야 한다 — 응답이 첨부파일(Content-Disposition)이라 라우터 |
|
| 207 |
- // 내비게이션으로는 처리할 수 없고, 브라우저가 화면을 둔 채 파일만 내려받는다. |
|
| 208 |
- // 검색·페이징 값을 싣지 않는 것이 사양이다(파일은 항상 전체 데이터). |
|
| 209 |
- <form action={STUDENT_MEMBERS_EXCEL_PATH} method="get">
|
|
| 208 |
+ <FoxButtonGroup size="md"> |
|
| 209 |
+ {/* 검색어·검색 대상·정렬·페이지 크기·페이지를 모두 기본값으로 — URL이 상태라 주소만 되돌린다. */}
|
|
| 210 | 210 |
<FoxButton |
| 211 |
- type="secondary" |
|
| 211 |
+ type="default" |
|
| 212 | 212 |
size="md" |
| 213 |
- htmlType="submit" |
|
| 214 |
- leadingIcon={<i className="fox-ico fox-ico-DownloadSimple" aria-hidden="true" />}
|
|
| 215 |
- label="엑셀 다운로드" |
|
| 213 |
+ label="검색 초기화" |
|
| 214 |
+ onAction={() => router.replace(STUDENT_MEMBERS_PATH)}
|
|
| 216 | 215 |
/> |
| 217 |
- </form> |
|
| 216 |
+ {/* 네이티브 GET 폼이라야 한다 — 응답이 첨부파일(Content-Disposition)이라 라우터
|
|
| 217 |
+ 내비게이션으로는 처리할 수 없고, 브라우저가 화면을 둔 채 파일만 내려받는다. |
|
| 218 |
+ 검색·페이징 값을 싣지 않는 것이 사양이다(파일은 항상 전체 데이터). */} |
|
| 219 |
+ <form action={STUDENT_MEMBERS_EXCEL_PATH} method="get">
|
|
| 220 |
+ <FoxButton |
|
| 221 |
+ type="secondary" |
|
| 222 |
+ size="md" |
|
| 223 |
+ htmlType="submit" |
|
| 224 |
+ leadingIcon={<i className="fox-ico fox-ico-DownloadSimple" aria-hidden="true" />}
|
|
| 225 |
+ label="엑셀 다운로드" |
|
| 226 |
+ /> |
|
| 227 |
+ </form> |
|
| 228 |
+ </FoxButtonGroup> |
|
| 218 | 229 |
} |
| 219 | 230 |
onRowSelect={(row) => setDetailMember(row)}
|
| 220 | 231 |
page={currentPage}
|
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?