From 0e5d56742aaa4deb90450872ace7fd95cac0539c Mon Sep 17 00:00:00 2001 From: GuustMetz Date: Tue, 10 Mar 2026 11:31:46 +0100 Subject: [PATCH 1/4] chore: add filteringModel to overviewmodel class --- .../Overview/LhcPeriodsOverviewModel.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js b/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js index eb2d5e48cd..37d541f032 100644 --- a/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js +++ b/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js @@ -27,6 +27,14 @@ export class LhcPeriodsOverviewModel 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); this._yearsFilterModel = new TextTokensFilterModel(); @@ -50,6 +58,15 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { return buildUrl('/api/lhcPeriodsStatistics', params); } + /** + * Return the model managing all filters + * + * @return {FilteringModel} the filtering model + */ + get filteringModel() { + return this._filteringModel; + } + /** * Flatten lhc period statistics objects * @param {LhcPeriodStatistics[]} lhcPeriods data From 05461dd5711be01ed849cd4785d4ec3128ba1b6d Mon Sep 17 00:00:00 2001 From: GuustMetz Date: Tue, 10 Mar 2026 11:38:35 +0100 Subject: [PATCH 2/4] feat: move namesFilterModel to the filteringModel --- .../ActiveColumns/lhcPeriodsActiveColumns.js | 4 +-- .../Overview/LhcPeriodsOverviewModel.js | 31 ++++++------------- 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/lib/public/views/lhcPeriods/ActiveColumns/lhcPeriodsActiveColumns.js b/lib/public/views/lhcPeriods/ActiveColumns/lhcPeriodsActiveColumns.js index 6f757e25d0..9fbe5b18db 100644 --- a/lib/public/views/lhcPeriods/ActiveColumns/lhcPeriodsActiveColumns.js +++ b/lib/public/views/lhcPeriods/ActiveColumns/lhcPeriodsActiveColumns.js @@ -30,8 +30,8 @@ export const lhcPeriodsActiveColumns = { name: 'Name', visible: true, sortable: true, - filter: ({ namesFilterModel }) => textFilter( - namesFilterModel, + filter: ({ filteringModel }) => textFilter( + filteringModel.get('names'), { class: 'w-75 mt1', placeholder: 'e.g. LHC22a, lhc23b, ...' }, ), classes: 'w-15', diff --git a/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js b/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js index 37d541f032..b80f1742f7 100644 --- a/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js +++ b/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js @@ -11,6 +11,7 @@ * or submit itself to any jurisdiction. */ +import { FilteringModel } from '../../../components/Filters/common/FilteringModel.js'; import { TextTokensFilterModel } from '../../../components/Filters/common/filters/TextTokensFilterModel.js'; import { OverviewPageModel } from '../../../models/OverviewModel.js'; import { buildUrl } from '/js/src/index.js'; @@ -27,7 +28,9 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { constructor() { super(); - this._filteringModel = new FilteringModel({}); + this._filteringModel = new FilteringModel({ + names: new TextTokensFilterModel(), + }); this._filteringModel.visualChange$.bubbleTo(this); this._filteringModel.observe(() => { @@ -35,8 +38,6 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { this.load(); }); - this._namesFilterModel = new TextTokensFilterModel(); - this._registerFilter(this._namesFilterModel); this._yearsFilterModel = new TextTokensFilterModel(); this._registerFilter(this._yearsFilterModel); this._pdpBeamTypesFilterModel = new TextTokensFilterModel(); @@ -47,15 +48,11 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { * @inheritdoc */ getRootEndpoint() { - const params = { - filter: { - names: this._namesFilterModel.normalized, - years: this._yearsFilterModel.normalized, - pdpBeamTypes: this._pdpBeamTypesFilterModel.normalized, - }, - }; + const filter = this._filteringModel.normalized; + filter.years = this._yearsFilterModel.normalized; + filter.pdpBeamTypes = this._pdpBeamTypesFilterModel.normalized; - return buildUrl('/api/lhcPeriodsStatistics', params); + return buildUrl('/api/lhcPeriodsStatistics', { filter }); } /** @@ -83,14 +80,6 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { }); } - /** - * Returns lhc periods names filter model - * @return {TextTokensFilterModel} lhc periods names filter model - */ - get namesFilterModel() { - return this._namesFilterModel; - } - /** * Returns lhc periods years filter model * @return {TextTokensFilterModel} lhc periods years filter model @@ -114,7 +103,7 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { */ reset() { super.reset(); - this._namesFilterModel.reset(); + this._filteringModel.reset(); this._yearsFilterModel.reset(); this._pdpBeamTypesFilterModel.reset(); } @@ -138,6 +127,6 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { * @return {boolean} true if any filter is active */ isAnyFilterActive() { - return !this._namesFilterModel.isEmpty || !this._yearsFilterModel.isEmpty || !this._pdpBeamTypesFilterModel.isEmpty; + return this._filteringModel.isAnyFilterActive() || !this._yearsFilterModel.isEmpty || !this._pdpBeamTypesFilterModel.isEmpty; } } From 102c1b61966e9d7e76561d30fe29346cab8bc43b Mon Sep 17 00:00:00 2001 From: GuustMetz Date: Tue, 10 Mar 2026 11:41:24 +0100 Subject: [PATCH 3/4] feat: move yearsFilterModel to the filteringModel --- .../ActiveColumns/lhcPeriodsActiveColumns.js | 4 ++-- .../Overview/LhcPeriodsOverviewModel.js | 15 ++------------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/lib/public/views/lhcPeriods/ActiveColumns/lhcPeriodsActiveColumns.js b/lib/public/views/lhcPeriods/ActiveColumns/lhcPeriodsActiveColumns.js index 9fbe5b18db..299e54b4ee 100644 --- a/lib/public/views/lhcPeriods/ActiveColumns/lhcPeriodsActiveColumns.js +++ b/lib/public/views/lhcPeriods/ActiveColumns/lhcPeriodsActiveColumns.js @@ -92,8 +92,8 @@ export const lhcPeriodsActiveColumns = { visible: true, sortable: true, format: (_, lhcPeriod) => formatLhcPeriodYear(lhcPeriod.name), - filter: ({ yearsFilterModel }) => textFilter( - yearsFilterModel, + filter: ({ filteringModel }) => textFilter( + filteringModel.get('years'), { class: 'w-75 mt1', placeholder: 'e.g. 2022, 2023, ...' }, ), classes: 'w-7', diff --git a/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js b/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js index b80f1742f7..9d01425b74 100644 --- a/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js +++ b/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js @@ -30,6 +30,7 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { this._filteringModel = new FilteringModel({ names: new TextTokensFilterModel(), + years: new TextTokensFilterModel(), }); this._filteringModel.visualChange$.bubbleTo(this); @@ -38,8 +39,6 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { this.load(); }); - this._yearsFilterModel = new TextTokensFilterModel(); - this._registerFilter(this._yearsFilterModel); this._pdpBeamTypesFilterModel = new TextTokensFilterModel(); this._registerFilter(this._pdpBeamTypesFilterModel); } @@ -49,7 +48,6 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { */ getRootEndpoint() { const filter = this._filteringModel.normalized; - filter.years = this._yearsFilterModel.normalized; filter.pdpBeamTypes = this._pdpBeamTypesFilterModel.normalized; return buildUrl('/api/lhcPeriodsStatistics', { filter }); @@ -80,14 +78,6 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { }); } - /** - * Returns lhc periods years filter model - * @return {TextTokensFilterModel} lhc periods years filter model - */ - get yearsFilterModel() { - return this._yearsFilterModel; - } - /** * Returns lhc periods beam type filter model * @return {TextTokensFilterModel} lhc periods beam type filter model @@ -104,7 +94,6 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { reset() { super.reset(); this._filteringModel.reset(); - this._yearsFilterModel.reset(); this._pdpBeamTypesFilterModel.reset(); } @@ -127,6 +116,6 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { * @return {boolean} true if any filter is active */ isAnyFilterActive() { - return this._filteringModel.isAnyFilterActive() || !this._yearsFilterModel.isEmpty || !this._pdpBeamTypesFilterModel.isEmpty; + return this._filteringModel.isAnyFilterActive() || !this._pdpBeamTypesFilterModel.isEmpty; } } From e2ab763304f0e3c61686c74a19a8c3aa747ce558 Mon Sep 17 00:00:00 2001 From: GuustMetz Date: Tue, 10 Mar 2026 11:47:00 +0100 Subject: [PATCH 4/4] feat: move pdpBeamTypes to the filteringModel --- .../ActiveColumns/lhcPeriodsActiveColumns.js | 4 +-- .../Overview/LhcPeriodsOverviewModel.js | 34 ++----------------- 2 files changed, 5 insertions(+), 33 deletions(-) diff --git a/lib/public/views/lhcPeriods/ActiveColumns/lhcPeriodsActiveColumns.js b/lib/public/views/lhcPeriods/ActiveColumns/lhcPeriodsActiveColumns.js index 299e54b4ee..6c312fbecf 100644 --- a/lib/public/views/lhcPeriods/ActiveColumns/lhcPeriodsActiveColumns.js +++ b/lib/public/views/lhcPeriods/ActiveColumns/lhcPeriodsActiveColumns.js @@ -104,8 +104,8 @@ export const lhcPeriodsActiveColumns = { visible: true, sortable: true, format: (pdpBeamTypes) => pdpBeamTypes.length > 0 ? pdpBeamTypes.join(',') : '-', - filter: ({ pdpBeamTypesFilterModel }) => textFilter( - pdpBeamTypesFilterModel, + filter: ({ filteringModel }) => textFilter( + filteringModel.get('pdpBeamTypes'), { class: 'w-75 mt1', placeholder: 'e.g. pp, PbPb' }, ), classes: 'w-7', diff --git a/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js b/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js index 9d01425b74..e6073eb68f 100644 --- a/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js +++ b/lib/public/views/lhcPeriods/Overview/LhcPeriodsOverviewModel.js @@ -31,6 +31,7 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { this._filteringModel = new FilteringModel({ names: new TextTokensFilterModel(), years: new TextTokensFilterModel(), + pdpBeamTypes: new TextTokensFilterModel(), }); this._filteringModel.visualChange$.bubbleTo(this); @@ -38,19 +39,13 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { this._pagination.silentlySetCurrentPage(1); this.load(); }); - - this._pdpBeamTypesFilterModel = new TextTokensFilterModel(); - this._registerFilter(this._pdpBeamTypesFilterModel); } /** * @inheritdoc */ getRootEndpoint() { - const filter = this._filteringModel.normalized; - filter.pdpBeamTypes = this._pdpBeamTypesFilterModel.normalized; - - return buildUrl('/api/lhcPeriodsStatistics', { filter }); + return buildUrl('/api/lhcPeriodsStatistics', { filter: this._filteringModel.normalized }); } /** @@ -78,14 +73,6 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { }); } - /** - * Returns lhc periods beam type filter model - * @return {TextTokensFilterModel} lhc periods beam type filter model - */ - get pdpBeamTypesFilterModel() { - return this._pdpBeamTypesFilterModel; - } - /** * Reset this model to its default * @@ -94,21 +81,6 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { reset() { super.reset(); this._filteringModel.reset(); - this._pdpBeamTypesFilterModel.reset(); - } - - /** - * 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(); - }); } /** @@ -116,6 +88,6 @@ export class LhcPeriodsOverviewModel extends OverviewPageModel { * @return {boolean} true if any filter is active */ isAnyFilterActive() { - return this._filteringModel.isAnyFilterActive() || !this._pdpBeamTypesFilterModel.isEmpty; + return this._filteringModel.isAnyFilterActive(); } }