@@ -15,6 +15,7 @@ import { switchCase } from '/js/src/index.js';
1515import { getRemoteData } from '../../utilities/fetch/getRemoteData.js' ;
1616import { ObservableData } from '../../utilities/ObservableData.js' ;
1717import { DetectorType , DATA_TAKING_DETECTOR_TYPES , QC_DETECTORS } from '../../domain/enums/DetectorTypes.js' ;
18+ import { DetectorOrders } from '../../domain/enums/DetectorOrders.js' ;
1819
1920import { NonPhysicalDetector } from '../../domain/enums/detectorsNames.mjs' ;
2021
@@ -44,9 +45,12 @@ const getQcDetectorsFromAllDetectors = (allDetectors) => allDetectors
4445export class DetectorsProvider extends RemoteDataProvider {
4546 /**
4647 * Constructor
48+ *
49+ * @param {DetectorOrders } detectorOrder the order to base sorting on, default is DetectorOrders.DEFAULT
4750 */
48- constructor ( ) {
51+ constructor ( detectorOrder = DetectorOrders . DEFAULT ) {
4952 super ( ) ;
53+ this . _detectorOrder = detectorOrder ;
5054 this . _physical$ = ObservableData . builder ( )
5155 . source ( this . _items$ )
5256 . apply ( ( remoteDetectors ) => remoteDetectors . apply ( {
@@ -74,21 +78,14 @@ export class DetectorsProvider extends RemoteDataProvider {
7478 */
7579 async getRemoteData ( ) {
7680 const { data : detectors } = await getRemoteData ( '/api/detectors' ) ;
77- const typeToOrderingKey = ( type ) => switchCase ( type , {
78- [ DetectorType . OTHER ] : 0 ,
79- [ DetectorType . VIRTUAL ] : 1 ,
80- [ DetectorType . PHYSICAL ] : 2 ,
81- [ DetectorType . AOT_GLO ] : 3 ,
82- [ DetectorType . AOT_EVENT ] : 4 ,
83- [ DetectorType . MUON_GLO ] : 5 ,
84- [ DetectorType . QC_ONLY ] : 6 ,
85- } ) ;
81+ const typeToOrderingKey = ( type ) => switchCase ( type , this . _detectorOrder ) ;
8682
8783 const orderingKey = ( detector1 , detector2 ) => {
8884 const specialPair = [ 'ZDC' , 'TST' ] ;
8985 if ( specialPair . includes ( detector1 . name ) && specialPair . includes ( detector2 . name ) ) {
9086 return detector1 . name === 'ZDC' ? 1 : - 1 ;
9187 }
88+ // Note the negative sign to have larger priority types appear first
9289 return - ( typeToOrderingKey ( detector1 . type ) - typeToOrderingKey ( detector2 . type ) ) * 10 + detector1 . name . localeCompare ( detector2 . name ) ;
9390 } ;
9491
@@ -161,3 +158,4 @@ export class DetectorsProvider extends RemoteDataProvider {
161158}
162159
163160export const detectorsProvider = new DetectorsProvider ( ) ;
161+ export const rctDetectorsProvider = new DetectorsProvider ( DetectorOrders . RCT ) ;
0 commit comments