@@ -26,19 +26,46 @@ import { useTranslation } from 'react-i18next';
2626import { graphql , useFragment } from 'react-relay' ;
2727
2828export type SessionNodeInList = NonNullable < SessionNodesFragment$data [ number ] > ;
29+
30+ const availableSessionSorterKeys = [
31+ 'name' ,
32+ 'scaling_group' ,
33+ 'type' ,
34+ 'cluster_mode' ,
35+ 'created_at' ,
36+ 'agent_ids' ,
37+ ] as const ;
38+
39+ export const availableSessionSorterValues = [
40+ ...availableSessionSorterKeys ,
41+ ...availableSessionSorterKeys . map ( ( key ) => `-${ key } ` as const ) ,
42+ ] as const ;
43+
44+ const isEnableSorter = ( key : string ) => {
45+ return _ . includes ( availableSessionSorterKeys , key ) ;
46+ } ;
47+
2948interface SessionNodesProps
30- extends Omit < BAITableProps < SessionNodeInList > , 'dataSource' | 'columns' > {
49+ extends Omit <
50+ BAITableProps < SessionNodeInList > ,
51+ 'dataSource' | 'columns' | 'onChangeOrder'
52+ > {
3153 sessionsFrgmt : SessionNodesFragment$key ;
3254 onClickSessionName ?: ( session : SessionNodeInList ) => void ;
3355 disableSorter ?: boolean ;
56+ onChangeOrder ?: (
57+ order : ( typeof availableSessionSorterValues ) [ number ] | null ,
58+ ) => void ;
3459}
3560
3661const SessionNodes : React . FC < SessionNodesProps > = ( {
3762 sessionsFrgmt,
3863 onClickSessionName,
3964 disableSorter,
65+ onChangeOrder,
4066 ...tableProps
4167} ) => {
68+ 'use memo' ;
4269 const { t } = useTranslation ( ) ;
4370 const userRole = useCurrentUserRole ( ) ;
4471 const baiClient = useSuspendedBackendaiClient ( ) ;
@@ -101,7 +128,7 @@ const SessionNodes: React.FC<SessionNodesProps> = ({
101128 name
102129 ) ;
103130 } ,
104- sorter : true ,
131+ sorter : isEnableSorter ( 'name' ) ,
105132 required : true ,
106133 fixed : 'left' ,
107134 } ,
@@ -182,7 +209,7 @@ const SessionNodes: React.FC<SessionNodesProps> = ({
182209 dataIndex : 'scaling_group' ,
183210 title : t ( 'session.ResourceGroup' ) ,
184211 defaultHidden : true ,
185- sorter : true ,
212+ sorter : isEnableSorter ( 'scaling_group' ) ,
186213 render : ( __ , session ) =>
187214 session . scaling_group ? session . scaling_group : '-' ,
188215 } ,
@@ -191,15 +218,15 @@ const SessionNodes: React.FC<SessionNodesProps> = ({
191218 dataIndex : 'type' ,
192219 title : t ( 'session.SessionType' ) ,
193220 defaultHidden : true ,
194- sorter : true ,
221+ sorter : isEnableSorter ( 'type' ) ,
195222 render : ( __ , session ) => < BAISessionTypeTag sessionFrgmt = { session } /> ,
196223 } ,
197224 {
198225 key : 'cluster_mode' ,
199226 dataIndex : 'cluster_mode' ,
200227 title : t ( 'session.ClusterMode' ) ,
201228 defaultHidden : true ,
202- sorter : true ,
229+ sorter : isEnableSorter ( 'cluster_mode' ) ,
203230 render : ( __ , session ) => (
204231 < BAISessionClusterMode sessionFrgmt = { session } />
205232 ) ,
@@ -209,15 +236,15 @@ const SessionNodes: React.FC<SessionNodesProps> = ({
209236 dataIndex : 'created_at' ,
210237 title : t ( 'session.CreatedAt' ) ,
211238 defaultHidden : true ,
212- sorter : true ,
239+ sorter : isEnableSorter ( 'created_at' ) ,
213240 render : ( created_at : string ) => dayjs ( created_at ) . format ( 'LLL' ) || '-' ,
214241 } ,
215242 ( userRole === 'superadmin' || ! baiClient . _config . hideAgents ) && {
216243 key : 'agent' ,
217244 dataIndex : 'agent_ids' ,
218245 title : t ( 'session.Agent' ) ,
219246 defaultHidden : false ,
220- sorter : true ,
247+ sorter : isEnableSorter ( 'agent_ids' ) ,
221248 render : ( __ , session ) => < BAISessionAgentIds sessionFrgmt = { session } /> ,
222249 } ,
223250 userRole === 'superadmin' &&
@@ -242,6 +269,13 @@ const SessionNodes: React.FC<SessionNodesProps> = ({
242269 dataSource = { filteredSessions }
243270 columns = { columns }
244271 scroll = { { x : 'max-content' } }
272+ onChangeOrder = { ( order ) => {
273+ onChangeOrder ?.(
274+ ( order || null ) as
275+ | ( typeof availableSessionSorterValues ) [ number ]
276+ | null ,
277+ ) ;
278+ } }
245279 { ...tableProps }
246280 />
247281 </ >
0 commit comments