Skip to content

Commit 8991caa

Browse files
authored
Merge pull request #185 from CSE-Shaco/develop
fix(user-admin): User role 정렬 방식 변경
2 parents 5300f86 + 1f3b957 commit 8991caa

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

src/app/admin/member-manager/page.jsx

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use client';
22

3-
import React, {useCallback, useEffect, useMemo, useState} from 'react';
3+
import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';
44
import {
55
Button,
66
Chip,
@@ -53,6 +53,9 @@ export default function AdminUsersPage() {
5353
const [totalPages, setTotalPages] = useState(1);
5454
const [totalUsers, setTotalUsers] = useState(0);
5555
const [sortDescriptor, setSortDescriptor] = useState({column: 'name', direction: 'ascending'});
56+
const [pendingSort, setPendingSort] = useState(sortDescriptor);
57+
const sortTimerRef = useRef(null);
58+
const lastQueryRef = useRef({ page, q: query, sort: sortDescriptor });
5659

5760
/** 내 정보(자기 자신 삭제/변경 방지용) */
5861
const me = useMemo(() => {
@@ -99,8 +102,11 @@ export default function AdminUsersPage() {
99102
}), []);
100103

101104
const fetchUsers = useCallback(async () => {
102-
setLoading(true);
103105
setErr('');
106+
const keyNow = JSON.stringify({page, q: query, sort: sortDescriptor});
107+
const keyPrev = JSON.stringify(lastQueryRef.current);
108+
if (keyNow === keyPrev) return;
109+
setLoading(true);
104110
try {
105111
const sort = sortColMap[sortDescriptor.column] || 'name';
106112
const dir = sortDescriptor.direction === 'descending' ? 'DESC' : 'ASC';
@@ -126,6 +132,7 @@ export default function AdminUsersPage() {
126132
const total = meta?.totalElements ?? pageData?.totalElements ?? content.length;
127133
setTotalUsers(total);
128134
setTotalPages(Math.max(1, Math.ceil(total / rowsPerPage)));
135+
lastQueryRef.current = {page, q: query, sort: sortDescriptor};
129136
} catch (e) {
130137
setErr(e?.message || '사용자 목록을 불러오지 못했습니다.');
131138
setRows([]);
@@ -140,6 +147,14 @@ export default function AdminUsersPage() {
140147
fetchUsers();
141148
}, [fetchUsers]);
142149

150+
useEffect(() => {
151+
if (sortTimerRef.current) clearTimeout(sortTimerRef.current);
152+
sortTimerRef.current = setTimeout(() => {
153+
setSortDescriptor(pendingSort);
154+
}, 250);
155+
return () => clearTimeout(sortTimerRef.current);
156+
}, [pendingSort]);
157+
143158
const onSearch = useCallback(() => {
144159
setPage(1);
145160
setQuery((searchValue || '').trim());
@@ -208,8 +223,8 @@ export default function AdminUsersPage() {
208223
<Table
209224
aria-label="Users table"
210225
className="dark"
211-
sortDescriptor={sortDescriptor}
212-
onSortChange={setSortDescriptor}
226+
sortDescriptor={pendingSort}
227+
onSortChange={setPendingSort}
213228
bottomContent={<AdminTableBottomContent
214229
page={page}
215230
totalPages={totalPages}

0 commit comments

Comments
 (0)