Skip to content

Commit b0be7a0

Browse files
[O2B-536] Improve several runs filters (#1859)
* [O2B-536] Improve runs overview environment ID filter * [O2B-536] Improve runs overview run quality filter * [O2B-536] Improve run overview nFLPs, nEPNs and nDetectors filters * [O2B-536] Improve runs overview ODC topology filter * Attempt at improving balloon randomly failing tests * Fix behavior when clearing the filter * Fix topology filter size * Uniformize format
1 parent 8a8dbb6 commit b0be7a0

13 files changed

Lines changed: 134 additions & 412 deletions

File tree

lib/public/components/Filters/RunsFilter/environmentId.js

Lines changed: 0 additions & 31 deletions
This file was deleted.

lib/public/components/Filters/RunsFilter/nDetectors.js

Lines changed: 0 additions & 30 deletions
This file was deleted.

lib/public/components/Filters/RunsFilter/nEpns.js

Lines changed: 0 additions & 36 deletions
This file was deleted.

lib/public/components/Filters/RunsFilter/nFlps.js

Lines changed: 0 additions & 30 deletions
This file was deleted.

lib/public/components/Filters/RunsFilter/odcTopologyFullName.js

Lines changed: 0 additions & 30 deletions
This file was deleted.

lib/public/components/Filters/RunsFilter/runQuality.js

Lines changed: 0 additions & 29 deletions
This file was deleted.

lib/public/components/Filters/common/filters/NumericalComparisonFilterModel.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ export class NumericalComparisonFilterModel extends FilterModel {
3333

3434
this._operatorSelectionModel = new ComparisonSelectionModel();
3535
this._operatorSelectionModel.visualChange$.bubbleTo(this._visualChange$);
36-
this._operatorSelectionModel.observe(() => {
37-
if (!this._operandInputModel.isEmpty) {
38-
this.notify();
39-
}
40-
});
4136

4237
this._operandInputModel = new ProcessedTextInputModel({
4338
parse: (raw) => {
39+
// Empty the filter
40+
if (raw === '') {
41+
return null;
42+
}
43+
4444
const number = integer ? parseInt(raw, 10) : parseFloat(raw);
4545
if (isNaN(number)) {
4646
throw new Error('Expected a number');
@@ -50,6 +50,8 @@ export class NumericalComparisonFilterModel extends FilterModel {
5050
});
5151
this._operandInputModel.visualChange$.bubbleTo(this._visualChange$);
5252
this._operandInputModel.bubbleTo(this);
53+
54+
this._operatorSelectionModel.observe(() => this._operandInputModel.raw ? this.notify() : this._visualChange$.notify());
5355
}
5456

5557
/**

lib/public/components/Filters/common/filters/SelectionFilterModel.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
* granted to it by virtue of its status as an Intergovernmental Organization
1111
* or submit itself to any jurisdiction.
1212
*/
13+
1314
import { FilterModel } from '../FilterModel.js';
1415
import { SelectionModel } from '../../../common/selection/SelectionModel.js';
1516

lib/public/views/Runs/ActiveColumns/runsActiveColumns.js

Lines changed: 65 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,13 @@
1313

1414
import { h } from '/js/src/index.js';
1515
import { runNumbersFilter } from '../../../components/Filters/RunsFilter/runNumbersFilter.js';
16-
import environmentIdFilter from '../../../components/Filters/RunsFilter/environmentId.js';
17-
import nDetectorsFilter from '../../../components/Filters/RunsFilter/nDetectors.js';
18-
import nFlpsFilter from '../../../components/Filters/RunsFilter/nFlps.js';
19-
import odcTopologyFullName from '../../../components/Filters/RunsFilter/odcTopologyFullName.js';
2016
import { displayRunEorReasonsOverview } from '../format/displayRunEorReasonOverview.js';
2117
import ddflpFilter from '../../../components/Filters/RunsFilter/ddflp.js';
2218
import dcsFilter from '../../../components/Filters/RunsFilter/dcs.js';
2319
import epnFilter from '../../../components/Filters/RunsFilter/epn.js';
24-
import runQualityFilter from '../../../components/Filters/RunsFilter/runQuality.js';
2520
import { formatTimestamp } from '../../../utilities/formatting/formatTimestamp.js';
2621
import { displayRunDuration } from '../format/displayRunDuration.js';
2722
import { frontLink } from '../../../components/common/navigation/frontLink.js';
28-
import nEpnsFilter from '../../../components/Filters/RunsFilter/nEpns.js';
29-
import { triggerValueFilter } from '../../../components/Filters/RunsFilter/triggerValueFilter.js';
3023
import { formatRunType } from '../../../utilities/formatting/formatRunType.js';
3124
import { runDefinitionFilter } from '../../../components/Filters/RunsFilter/runDefinitionFilter.js';
3225
import { profiles } from '../../../components/common/table/profiles.js';
@@ -54,6 +47,8 @@ import { detectorsFilterComponent } from '../../../components/Filters/RunsFilter
5447
import { timeRangeFilter } from '../../../components/Filters/common/filters/timeRangeFilter.js';
5548
import { rawTextFilter } from '../../../components/Filters/common/filters/rawTextFilter.js';
5649
import { numericalComparisonFilter } from '../../../components/Filters/common/filters/numericalComparisonFilter.js';
50+
import { checkboxes } from '../../../components/Filters/common/filters/checkboxFilter.js';
51+
import { triggerValueFilter } from '../../../components/Filters/RunsFilter/triggerValueFilter.js';
5752

5853
/**
5954
* List of active columns for a generic runs table
@@ -386,7 +381,17 @@ export const runsActiveColumns = {
386381
visible: true,
387382
profiles: [profiles.none, 'lhcFill', 'environment', 'home'],
388383
classes: 'w-10 f6 w-wrapped',
389-
filter: environmentIdFilter,
384+
385+
/**
386+
* Environment ids filter component
387+
*
388+
* @param {RunsOverviewModel} runsOverviewModel the runs overview model
389+
* @return {Component} the environment ids filter component
390+
*/
391+
filter: (runsOverviewModel) => rawTextFilter(
392+
runsOverviewModel.filteringModel.get('environmentIds'),
393+
{ classes: ['environment-ids-filter', 'w-100'], placeholder: 'e.g. Dxi029djX, TDI59So3d...' },
394+
),
390395
format: (id) => id ? frontLink(id, 'env-details', { environmentId: id }) : '-',
391396
},
392397
runType: {
@@ -428,13 +433,30 @@ export const runsActiveColumns = {
428433
}, runQuality),
429434
},
430435
},
431-
filter: runQualityFilter,
436+
437+
/**
438+
* Run quality filter component
439+
*
440+
* @param {RunsOverviewModel} runsOverviewModel the runs overview model
441+
* @return {Component} the run quality filter component
442+
*/
443+
filter: (runsOverviewModel) => checkboxes(runsOverviewModel.filteringModel.get('runQualities').selectionModel),
432444
},
433445
nDetectors: {
434446
name: 'DETs #',
435447
visible: false,
436448
classes: 'w-2 f6 w-wrapped',
437-
filter: nDetectorsFilter,
449+
450+
/**
451+
* Filter on amount of detectors in runs
452+
*
453+
* @param {RunsOverviewModel} runsOverviewModel the runs overview model
454+
* @return {Component} the number of detectors filter component
455+
*/
456+
filter: (runsOverviewModel) => numericalComparisonFilter(
457+
runsOverviewModel.filteringModel.get('nDetectors'),
458+
{ selectorPrefix: 'nDetectors' },
459+
),
438460
},
439461
nEpns: {
440462
name: 'EPNs #',
@@ -443,14 +465,34 @@ export const runsActiveColumns = {
443465
classes: 'w-2 f6 w-wrapped',
444466
// eslint-disable-next-line no-extra-parens
445467
format: (nEpns, run) => run.epn ? (typeof nEpns === 'number' ? nEpns : 'ON') : 'OFF',
446-
filter: nEpnsFilter,
468+
469+
/**
470+
* Filter on amount of EPNs in runs
471+
*
472+
* @param {RunsOverviewModel} runsOverviewModel the runs overview model
473+
* @return {Component} the number of EPNs filter component
474+
*/
475+
filter: (runsOverviewModel) => numericalComparisonFilter(
476+
runsOverviewModel.filteringModel.get('nEpns'),
477+
{ selectorPrefix: 'nEpns' },
478+
),
447479
},
448480
nFlps: {
449481
name: 'FLPs #',
450482
visible: true,
451483
profiles: [profiles.none, 'lhcFill', 'environment'],
452484
classes: 'w-2 f6 w-wrapped',
453-
filter: nFlpsFilter,
485+
486+
/**
487+
* Filter on amount of FLPs in runs
488+
*
489+
* @param {RunsOverviewModel} runsOverviewModel the runs overview model
490+
* @return {Component} the number of FLPs filter component
491+
*/
492+
filter: (runsOverviewModel) => numericalComparisonFilter(
493+
runsOverviewModel.filteringModel.get('nFlps'),
494+
{ selectorPrefix: 'nFlps' },
495+
),
454496
},
455497
nSubtimeframes: {
456498
name: '# of STFs',
@@ -508,7 +550,17 @@ export const runsActiveColumns = {
508550
classes: 'w-15 f6',
509551
visible: false,
510552
profiles: [profiles.none, 'lhcFill', 'environment'],
511-
filter: odcTopologyFullName,
553+
554+
/**
555+
* ODC topology full name filter component
556+
*
557+
* @param {RunsOverviewModel} runsOverviewModel the runs overview model
558+
* @return {Component} the filter component
559+
*/
560+
filter: (runsOverviewModel) => rawTextFilter(
561+
runsOverviewModel.filteringModel.get('odcTopologyFullName'),
562+
{ classes: ['w-100'] },
563+
),
512564
balloon: true,
513565
},
514566
eorReasons: {

0 commit comments

Comments
 (0)