@@ -34,6 +34,9 @@ const roleColor = (r) => ({
3434 ADMIN : 'danger' , ORGANIZER : 'warning' , LEAD : 'secondary' , CORE : 'success' , MEMBER : 'primary' ,
3535} [ r ] || 'default' ) ;
3636
37+ const ROLE_RANK = { GUEST : 0 , MEMBER : 1 , CORE : 2 , LEAD : 3 , ORGANIZER : 4 , ADMIN : 5 } ;
38+ const getRoleRank = ( r ) => ROLE_RANK [ r ] ?? - 1 ;
39+
3740export default function AdminUsersPage ( ) {
3841 const { apiClient} = useAuthenticatedApi ( ) ;
3942 const { accessToken} = useAuth ( ) ;
@@ -104,10 +107,20 @@ export default function AdminUsersPage() {
104107 const params = { page : page - 1 , size : rowsPerPage , sort, dir, q : query || undefined } ;
105108
106109 const res = await apiClient . get ( '/admin/users' , { params} ) ;
107- const pageData = res ?. data ?. data ; // Page<UserSummaryResponse>
110+ const pageData = res ?. data ?. data ;
108111 const meta = res ?. data ?. meta ;
109112
110- const content = Array . isArray ( pageData ?. content ) ? pageData . content : [ ] ;
113+ let content = Array . isArray ( pageData ?. content ) ? pageData . content : [ ] ;
114+
115+ // ⬇️ ROLE 컬럼 정렬일 때, 알파벳 대신 서열로 보정
116+ if ( sortDescriptor . column === 'userRole' ) {
117+ const asc = sortDescriptor . direction !== 'descending' ;
118+ content = content . slice ( ) . sort ( ( a , b ) => {
119+ const diff = getRoleRank ( a . userRole ) - getRoleRank ( b . userRole ) ;
120+ return asc ? diff : - diff ;
121+ } ) ;
122+ }
123+
111124 setRows ( content ) ;
112125
113126 const total = meta ?. totalElements ?? pageData ?. totalElements ?? content . length ;
@@ -225,6 +238,9 @@ export default function AdminUsersPage() {
225238 { /* NAME */ }
226239 < TableCell >
227240 < span className = "font-medium" > { user . name } </ span >
241+ < Chip size = "sm" variant = "flat" color = { roleColor ( user . userRole ) } >
242+ { user . userRole }
243+ </ Chip >
228244 </ TableCell >
229245
230246 { /* MAJOR */ }
@@ -241,9 +257,6 @@ export default function AdminUsersPage() {
241257 { /* ROLE */ }
242258 < TableCell >
243259 < div className = "flex items-center gap-3" >
244- < Chip size = "sm" variant = "flat" color = { roleColor ( user . userRole ) } >
245- { user . userRole }
246- </ Chip >
247260 < Select
248261 aria-label = "역할 수정"
249262 selectedKeys = { new Set ( [ user . userRole || '' ] ) }
0 commit comments