@@ -118,6 +118,20 @@ export default function AdminUsersPage() {
118118 createdAt : 'createdAt' , // 백업
119119 } ) , [ ] ) ;
120120
121+ const handleSortChange = useCallback ( ( d ) => {
122+ setPendingSort ( ( prev ) => {
123+ const isNewColumn = prev . column !== d . column ;
124+ let nextDirection = d . direction ;
125+
126+ if ( isNewColumn ) {
127+ if ( d . column === 'userRole' ) nextDirection = 'descending' ;
128+ // 새 컬럼이면 페이지 리셋
129+ setPage ( 1 ) ;
130+ }
131+ return { column : d . column , direction : nextDirection } ;
132+ } ) ;
133+ } , [ setPage ] ) ;
134+
121135 const fetchUsers = useCallback ( async ( force = false ) => {
122136 setErr ( '' ) ;
123137 const keyNow = JSON . stringify ( {
@@ -165,15 +179,12 @@ export default function AdminUsersPage() {
165179 }
166180 } , [ apiClient , page , rowsPerPage , query , sortDescriptor , sortColMap ] ) ;
167181
168- // 최초 1회 강제 호출
169- useEffect ( ( ) => {
170- fetchUsers ( true ) ;
171- // eslint-disable-next-line react-hooks/exhaustive-deps
172- } , [ ] ) ;
182+ const didInitRef = useRef ( false ) ;
173183
174- // 의존성 변경 시, 캐시키 달라지면 요청
175184 useEffect ( ( ) => {
176- fetchUsers ( ) ;
185+ if ( didInitRef . current ) return ;
186+ didInitRef . current = true ;
187+ fetchUsers ( true ) ;
177188 } , [ fetchUsers ] ) ;
178189
179190 // 테이블 정렬 디바운스 -> 실제 sortDescriptor 적용
@@ -259,7 +270,7 @@ export default function AdminUsersPage() {
259270 aria-label = "Users table"
260271 className = "dark"
261272 sortDescriptor = { pendingSort }
262- onSortChange = { setPendingSort }
273+ onSortChange = { handleSortChange }
263274 bottomContent = { < AdminTableBottomContent page = { page } totalPages = { totalPages } totalUsers = { totalUsers }
264275 onChangePage = { setPage } /> }
265276 >
0 commit comments