Skip to content

Commit 07d29e7

Browse files
[O2B-1549] Migrate anchored simulation passes overview model and simulation passes per lhc period overview model to use filtering model pattern (#2104)
Notable changes for developers: The AnchoredSimulationPasses and SimulationPassesPerLhcPeriod overview models now store their filter in a FilteringModel instance. The names filter must now be accessed through the FilteringModel.get function
1 parent 37b6ee1 commit 07d29e7

3 files changed

Lines changed: 45 additions & 70 deletions

File tree

lib/public/views/SimulationPasses/ActiveColumns/simulationPassesActiveColumns.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ export const simulationPassesActiveColumns = {
3131
name: 'Name',
3232
visible: true,
3333
sortable: true,
34-
filter: ({ namesFilterModel }) => textFilter(
35-
namesFilterModel,
34+
filter: ({ filteringModel }) => textFilter(
35+
filteringModel.get('names'),
3636
{ class: 'w-75 mt1', placeholder: 'e.g. LHC23k5, ...' },
3737
),
3838
classes: 'w-10 f6',

lib/public/views/SimulationPasses/AnchoredOverview/AnchoredSimulationPassesOverviewModel.js

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { TextTokensFilterModel } from '../../../components/Filters/common/filter
1515
import { OverviewPageModel } from '../../../models/OverviewModel.js';
1616
import { getRemoteData } from '../../../utilities/fetch/getRemoteData.js';
1717
import { ObservableData } from '../../../utilities/ObservableData.js';
18+
import { FilteringModel } from '../../../components/Filters/common/FilteringModel.js';
1819

1920
/**
2021
* Simulation Passes Per Data Pass overview model
@@ -25,8 +26,15 @@ export class AnchoredSimulationPassesOverviewModel extends OverviewPageModel {
2526
*/
2627
constructor() {
2728
super();
28-
this._namesFilterModel = new TextTokensFilterModel();
29-
this._registerFilter(this._namesFilterModel);
29+
30+
this._filteringModel = new FilteringModel({ names: new TextTokensFilterModel() });
31+
32+
this._filteringModel.observe(() => {
33+
this._pagination.silentlySetCurrentPage(1);
34+
this.load();
35+
});
36+
37+
this._filteringModel.visualChange$.bubbleTo(this);
3038

3139
this._dataPass = new ObservableData(RemoteData.notAsked());
3240
}
@@ -57,14 +65,8 @@ export class AnchoredSimulationPassesOverviewModel extends OverviewPageModel {
5765
* @inheritdoc
5866
*/
5967
getRootEndpoint() {
60-
const params = {
61-
filter: {
62-
names: this._namesFilterModel.normalized,
63-
dataPassIds: [this._dataPassId],
64-
},
65-
};
66-
67-
return buildUrl('/api/simulationPasses', params);
68+
const filter = { ...this._filteringModel.normalized, dataPassIds: [this._dataPassId] };
69+
return buildUrl('/api/simulationPasses', { filter });
6870
}
6971

7072
/**
@@ -73,10 +75,19 @@ export class AnchoredSimulationPassesOverviewModel extends OverviewPageModel {
7375
* @returns {void}
7476
*/
7577
reset() {
76-
this._namesFilterModel.reset();
78+
this._filteringModel.reset();
7779
super.reset();
7880
}
7981

82+
/**
83+
* Return the model managing all filters
84+
*
85+
* @return {FilteringModel} the filtering model
86+
*/
87+
get filteringModel() {
88+
return this._filteringModel;
89+
}
90+
8091
/**
8192
* Set id of current data pass which simulation passes are fetched
8293
* @param {number} dataPassId data pass id
@@ -92,33 +103,11 @@ export class AnchoredSimulationPassesOverviewModel extends OverviewPageModel {
92103
return this._dataPass.getCurrent();
93104
}
94105

95-
/**
96-
* Returns data passes names filter model
97-
* @return {TextTokensFilterModel} data passes names filter model
98-
*/
99-
get namesFilterModel() {
100-
return this._namesFilterModel;
101-
}
102-
103-
/**
104-
* Register a new filter model
105-
* @param {FilterModel} filterModel the filter model to register
106-
* @return {void}
107-
* @private
108-
*/
109-
_registerFilter(filterModel) {
110-
filterModel.visualChange$.bubbleTo(this);
111-
filterModel.observe(() => {
112-
this._pagination.silentlySetCurrentPage(1);
113-
this.load();
114-
});
115-
}
116-
117106
/**
118107
* States whether any filter is active
119108
* @return {boolean} true if any filter is active
120109
*/
121110
isAnyFilterActive() {
122-
return !this._namesFilterModel.isEmpty;
111+
return this._filteringModel.isAnyFilterActive();
123112
}
124113
}

lib/public/views/SimulationPasses/PerLhcPeriodOverview/SimulationPassesPerLhcPeriodOverviewModel.js

Lines changed: 20 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { OverviewPageModel } from '../../../models/OverviewModel.js';
1515
import { buildUrl, RemoteData } from '/js/src/index.js';
1616
import { ObservableData } from '../../../utilities/ObservableData.js';
1717
import { getRemoteData } from '../../../utilities/fetch/getRemoteData.js';
18+
import { FilteringModel } from '../../../components/Filters/common/FilteringModel.js';
1819

1920
/**
2021
* Simulation Passes Per LHC Period overview model
@@ -26,8 +27,12 @@ export class SimulationPassesPerLhcPeriodOverviewModel extends OverviewPageModel
2627
constructor() {
2728
super();
2829

29-
this._namesFilterModel = new TextTokensFilterModel();
30-
this._registerFilter(this._namesFilterModel);
30+
this._filteringModel = new FilteringModel({ names: new TextTokensFilterModel() });
31+
this._filteringModel.visualChange$.bubbleTo(this);
32+
this._filteringModel.observe(() => {
33+
this._pagination.silentlySetCurrentPage(1);
34+
this.load();
35+
});
3136

3237
this._lhcPeriod = new ObservableData(RemoteData.notAsked());
3338
this._lhcPeriod.bubbleTo(this);
@@ -49,6 +54,15 @@ export class SimulationPassesPerLhcPeriodOverviewModel extends OverviewPageModel
4954
}
5055
}
5156

57+
/**
58+
* Return the model managing all filters
59+
*
60+
* @return {FilteringModel} the filtering model
61+
*/
62+
get filteringModel() {
63+
return this._filteringModel;
64+
}
65+
5266
/**
5367
* @inheritdoc
5468
*/
@@ -61,14 +75,8 @@ export class SimulationPassesPerLhcPeriodOverviewModel extends OverviewPageModel
6175
* @inheritdoc
6276
*/
6377
getRootEndpoint() {
64-
const params = {
65-
filter: {
66-
names: this._namesFilterModel.normalized,
67-
lhcPeriodIds: [this._lhcPeriodId],
68-
},
69-
};
70-
71-
return buildUrl('/api/simulationPasses', params);
78+
const filter = { ...this._filteringModel.normalized, lhcPeriodIds: [this._lhcPeriodId] };
79+
return buildUrl('/api/simulationPasses', { filter });
7280
}
7381

7482
/**
@@ -77,7 +85,7 @@ export class SimulationPassesPerLhcPeriodOverviewModel extends OverviewPageModel
7785
* @returns {void}
7886
*/
7987
reset() {
80-
this._namesFilterModel.reset();
88+
this._filteringModel.reset();
8189
super.reset();
8290
}
8391

@@ -96,33 +104,11 @@ export class SimulationPassesPerLhcPeriodOverviewModel extends OverviewPageModel
96104
return this._lhcPeriod.getCurrent();
97105
}
98106

99-
/**
100-
* Returns simulation passes names filter model
101-
* @return {TextTokensFilterModel} simulation passes names filter model
102-
*/
103-
get namesFilterModel() {
104-
return this._namesFilterModel;
105-
}
106-
107-
/**
108-
* Register a new filter model
109-
* @param {FilterModel} filterModel the filter model to register
110-
* @return {void}
111-
* @private
112-
*/
113-
_registerFilter(filterModel) {
114-
filterModel.visualChange$.bubbleTo(this);
115-
filterModel.observe(() => {
116-
this._pagination.silentlySetCurrentPage(1);
117-
this.load();
118-
});
119-
}
120-
121107
/**
122108
* States whether any filter is active
123109
* @return {boolean} true if any filter is active
124110
*/
125111
isAnyFilterActive() {
126-
return !this._namesFilterModel.isEmpty;
112+
return this._filteringModel.isAnyFilterActive();
127113
}
128114
}

0 commit comments

Comments
 (0)