From c24d3020d0d232f343ad2b1475f00ae6575f989c Mon Sep 17 00:00:00 2001 From: GuustMetz Date: Tue, 10 Mar 2026 09:24:20 +0100 Subject: [PATCH 1/4] chore: add filteringModel to AnchoredSimulationPassesOverviewModel --- .../AnchoredSimulationPassesOverviewModel.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/public/views/SimulationPasses/AnchoredOverview/AnchoredSimulationPassesOverviewModel.js b/lib/public/views/SimulationPasses/AnchoredOverview/AnchoredSimulationPassesOverviewModel.js index ed6b776215..496201b465 100644 --- a/lib/public/views/SimulationPasses/AnchoredOverview/AnchoredSimulationPassesOverviewModel.js +++ b/lib/public/views/SimulationPasses/AnchoredOverview/AnchoredSimulationPassesOverviewModel.js @@ -15,6 +15,7 @@ import { TextTokensFilterModel } from '../../../components/Filters/common/filter import { OverviewPageModel } from '../../../models/OverviewModel.js'; import { getRemoteData } from '../../../utilities/fetch/getRemoteData.js'; import { ObservableData } from '../../../utilities/ObservableData.js'; +import { FilteringModel } from '../../../components/Filters/common/FilteringModel.js'; /** * Simulation Passes Per Data Pass overview model @@ -25,6 +26,8 @@ export class AnchoredSimulationPassesOverviewModel extends OverviewPageModel { */ constructor() { super(); + + this._filteringModel = new FilteringModel(); this._namesFilterModel = new TextTokensFilterModel(); this._registerFilter(this._namesFilterModel); @@ -77,6 +80,15 @@ export class AnchoredSimulationPassesOverviewModel extends OverviewPageModel { super.reset(); } + /** + * Return the model managing all filters + * + * @return {FilteringModel} the filtering model + */ + get filteringModel() { + return this._filteringModel; + } + /** * Set id of current data pass which simulation passes are fetched * @param {number} dataPassId data pass id From 2f6fcf11ceebac40d163f7b5d2b3bef78414444d Mon Sep 17 00:00:00 2001 From: GuustMetz Date: Tue, 10 Mar 2026 09:51:34 +0100 Subject: [PATCH 2/4] chore: add namesFilterModel to the filteringModel instance --- .../simulationPassesActiveColumns.js | 4 +- .../AnchoredSimulationPassesOverviewModel.js | 47 +++++-------------- 2 files changed, 15 insertions(+), 36 deletions(-) diff --git a/lib/public/views/SimulationPasses/ActiveColumns/simulationPassesActiveColumns.js b/lib/public/views/SimulationPasses/ActiveColumns/simulationPassesActiveColumns.js index 05b796bcf8..95f9940c22 100644 --- a/lib/public/views/SimulationPasses/ActiveColumns/simulationPassesActiveColumns.js +++ b/lib/public/views/SimulationPasses/ActiveColumns/simulationPassesActiveColumns.js @@ -31,8 +31,8 @@ export const simulationPassesActiveColumns = { name: 'Name', visible: true, sortable: true, - filter: ({ namesFilterModel }) => textFilter( - namesFilterModel, + filter: ({ filteringModel }) => textFilter( + filteringModel.get('names'), { class: 'w-75 mt1', placeholder: 'e.g. LHC23k5, ...' }, ), classes: 'w-10 f6', diff --git a/lib/public/views/SimulationPasses/AnchoredOverview/AnchoredSimulationPassesOverviewModel.js b/lib/public/views/SimulationPasses/AnchoredOverview/AnchoredSimulationPassesOverviewModel.js index 496201b465..620ba5527b 100644 --- a/lib/public/views/SimulationPasses/AnchoredOverview/AnchoredSimulationPassesOverviewModel.js +++ b/lib/public/views/SimulationPasses/AnchoredOverview/AnchoredSimulationPassesOverviewModel.js @@ -27,9 +27,14 @@ export class AnchoredSimulationPassesOverviewModel extends OverviewPageModel { constructor() { super(); - this._filteringModel = new FilteringModel(); - this._namesFilterModel = new TextTokensFilterModel(); - this._registerFilter(this._namesFilterModel); + this._filteringModel = new FilteringModel({ names: new TextTokensFilterModel() }); + + this._filteringModel.observe(() => { + this._pagination.silentlySetCurrentPage(1); + this.load(); + }); + + this._filteringModel.visualChange$.bubbleTo(this); this._dataPass = new ObservableData(RemoteData.notAsked()); } @@ -60,14 +65,10 @@ export class AnchoredSimulationPassesOverviewModel extends OverviewPageModel { * @inheritdoc */ getRootEndpoint() { - const params = { - filter: { - names: this._namesFilterModel.normalized, - dataPassIds: [this._dataPassId], - }, - }; + const filter = this._filteringModel.normalized; + filter.dataPassIds = [this._dataPassId]; - return buildUrl('/api/simulationPasses', params); + return buildUrl('/api/simulationPasses', { filter }); } /** @@ -76,7 +77,7 @@ export class AnchoredSimulationPassesOverviewModel extends OverviewPageModel { * @returns {void} */ reset() { - this._namesFilterModel.reset(); + this._filteringModel.reset(); super.reset(); } @@ -104,33 +105,11 @@ export class AnchoredSimulationPassesOverviewModel extends OverviewPageModel { return this._dataPass.getCurrent(); } - /** - * Returns data passes names filter model - * @return {TextTokensFilterModel} data passes names filter model - */ - get namesFilterModel() { - return this._namesFilterModel; - } - - /** - * Register a new filter model - * @param {FilterModel} filterModel the filter model to register - * @return {void} - * @private - */ - _registerFilter(filterModel) { - filterModel.visualChange$.bubbleTo(this); - filterModel.observe(() => { - this._pagination.silentlySetCurrentPage(1); - this.load(); - }); - } - /** * States whether any filter is active * @return {boolean} true if any filter is active */ isAnyFilterActive() { - return !this._namesFilterModel.isEmpty; + return this._filteringModel.isAnyFilterActive(); } } From 790d76bc2b8539fdfeec6de76a912c251634a38f Mon Sep 17 00:00:00 2001 From: GuustMetz Date: Tue, 10 Mar 2026 10:50:43 +0100 Subject: [PATCH 3/4] chore: add filteringModel to SimulationPassesPerLhcPeriodOverviewModel --- ...imulationPassesPerLhcPeriodOverviewModel.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/public/views/SimulationPasses/PerLhcPeriodOverview/SimulationPassesPerLhcPeriodOverviewModel.js b/lib/public/views/SimulationPasses/PerLhcPeriodOverview/SimulationPassesPerLhcPeriodOverviewModel.js index 98e5d12059..bcb6694b69 100644 --- a/lib/public/views/SimulationPasses/PerLhcPeriodOverview/SimulationPassesPerLhcPeriodOverviewModel.js +++ b/lib/public/views/SimulationPasses/PerLhcPeriodOverview/SimulationPassesPerLhcPeriodOverviewModel.js @@ -15,6 +15,7 @@ import { OverviewPageModel } from '../../../models/OverviewModel.js'; import { buildUrl, RemoteData } from '/js/src/index.js'; import { ObservableData } from '../../../utilities/ObservableData.js'; import { getRemoteData } from '../../../utilities/fetch/getRemoteData.js'; +import { FilteringModel } from '../../../components/Filters/common/FilteringModel.js'; /** * Simulation Passes Per LHC Period overview model @@ -26,6 +27,14 @@ export class SimulationPassesPerLhcPeriodOverviewModel extends OverviewPageModel constructor() { super(); + this._filteringModel = new FilteringModel(); + + this._filteringModel.visualChange$.bubbleTo(this); + this._filteringModel.observe(() => { + this._pagination.silentlySetCurrentPage(1); + this.load(); + }); + this._namesFilterModel = new TextTokensFilterModel(); this._registerFilter(this._namesFilterModel); @@ -49,6 +58,15 @@ export class SimulationPassesPerLhcPeriodOverviewModel extends OverviewPageModel } } + /** + * Return the model managing all filters + * + * @return {FilteringModel} the filtering model + */ + get filteringModel() { + return this._filteringModel; + } + /** * @inheritdoc */ From 6fe055b6dc145ec67a28855308f8c7619f487410 Mon Sep 17 00:00:00 2001 From: GuustMetz Date: Tue, 10 Mar 2026 11:02:48 +0100 Subject: [PATCH 4/4] chore: add namesFilterModel to the filteringModel instance of SimulationPassesPerLhcPeriodOverviewModel --- .../AnchoredSimulationPassesOverviewModel.js | 4 +- ...mulationPassesPerLhcPeriodOverviewModel.js | 43 +++---------------- 2 files changed, 8 insertions(+), 39 deletions(-) diff --git a/lib/public/views/SimulationPasses/AnchoredOverview/AnchoredSimulationPassesOverviewModel.js b/lib/public/views/SimulationPasses/AnchoredOverview/AnchoredSimulationPassesOverviewModel.js index 620ba5527b..d986ece53b 100644 --- a/lib/public/views/SimulationPasses/AnchoredOverview/AnchoredSimulationPassesOverviewModel.js +++ b/lib/public/views/SimulationPasses/AnchoredOverview/AnchoredSimulationPassesOverviewModel.js @@ -65,9 +65,7 @@ export class AnchoredSimulationPassesOverviewModel extends OverviewPageModel { * @inheritdoc */ getRootEndpoint() { - const filter = this._filteringModel.normalized; - filter.dataPassIds = [this._dataPassId]; - + const filter = { ...this._filteringModel.normalized, dataPassIds: [this._dataPassId] }; return buildUrl('/api/simulationPasses', { filter }); } diff --git a/lib/public/views/SimulationPasses/PerLhcPeriodOverview/SimulationPassesPerLhcPeriodOverviewModel.js b/lib/public/views/SimulationPasses/PerLhcPeriodOverview/SimulationPassesPerLhcPeriodOverviewModel.js index bcb6694b69..b7ccdac847 100644 --- a/lib/public/views/SimulationPasses/PerLhcPeriodOverview/SimulationPassesPerLhcPeriodOverviewModel.js +++ b/lib/public/views/SimulationPasses/PerLhcPeriodOverview/SimulationPassesPerLhcPeriodOverviewModel.js @@ -27,7 +27,9 @@ export class SimulationPassesPerLhcPeriodOverviewModel extends OverviewPageModel constructor() { super(); - this._filteringModel = new FilteringModel(); + this._filteringModel = new FilteringModel({ + names: new TextTokensFilterModel(), + }); this._filteringModel.visualChange$.bubbleTo(this); this._filteringModel.observe(() => { @@ -35,9 +37,6 @@ export class SimulationPassesPerLhcPeriodOverviewModel extends OverviewPageModel this.load(); }); - this._namesFilterModel = new TextTokensFilterModel(); - this._registerFilter(this._namesFilterModel); - this._lhcPeriod = new ObservableData(RemoteData.notAsked()); this._lhcPeriod.bubbleTo(this); @@ -79,14 +78,8 @@ export class SimulationPassesPerLhcPeriodOverviewModel extends OverviewPageModel * @inheritdoc */ getRootEndpoint() { - const params = { - filter: { - names: this._namesFilterModel.normalized, - lhcPeriodIds: [this._lhcPeriodId], - }, - }; - - return buildUrl('/api/simulationPasses', params); + const filter = { ...this._filteringModel.normalized, lhcPeriodIds: [this._lhcPeriodId] }; + return buildUrl('/api/simulationPasses', { filter }); } /** @@ -95,7 +88,7 @@ export class SimulationPassesPerLhcPeriodOverviewModel extends OverviewPageModel * @returns {void} */ reset() { - this._namesFilterModel.reset(); + this._filteringModel.reset(); super.reset(); } @@ -114,33 +107,11 @@ export class SimulationPassesPerLhcPeriodOverviewModel extends OverviewPageModel return this._lhcPeriod.getCurrent(); } - /** - * Returns simulation passes names filter model - * @return {TextTokensFilterModel} simulation passes names filter model - */ - get namesFilterModel() { - return this._namesFilterModel; - } - - /** - * Register a new filter model - * @param {FilterModel} filterModel the filter model to register - * @return {void} - * @private - */ - _registerFilter(filterModel) { - filterModel.visualChange$.bubbleTo(this); - filterModel.observe(() => { - this._pagination.silentlySetCurrentPage(1); - this.load(); - }); - } - /** * States whether any filter is active * @return {boolean} true if any filter is active */ isAnyFilterActive() { - return !this._namesFilterModel.isEmpty; + return this._filteringModel.isAnyFilterActive(); } }