Skip to content

Commit e06a941

Browse files
committed
refactor WIP
1 parent c59a327 commit e06a941

9 files changed

Lines changed: 113 additions & 124 deletions

File tree

lib/public/components/Filters/common/FilteringModel.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,16 @@ export class FilteringModel extends Observable {
3838
/**
3939
* Reset the filters
4040
*
41+
* @param {boolean} notify call notify on self if true
4142
* @return {void}
4243
*/
43-
reset() {
44+
reset(notify = false) {
4445
for (const model of this._filterModels) {
4546
model.reset();
4647
}
48+
if (notify) {
49+
this.notify();
50+
}
4751
}
4852

4953
/**

lib/public/components/Filters/common/filtersPanelPopover.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ const filtersToggleContent = (
4545
{
4646
onclick: () => filteringModel.resetFiltering
4747
? filteringModel.resetFiltering()
48-
: filteringModel.reset(),
48+
: filteringModel.reset(true),
4949
disabled: !filteringModel.isAnyFilterActive(),
5050
},
5151
'Reset all filters',

lib/public/view.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import { StatisticsPage } from './views/Statistics/StatisticsPage.js';
3434
import { LhcPeriodsOverviewPage } from './views/lhcPeriods/Overview/LhcPeriodsOverviewPage.js';
3535
import { RunsPerLhcPeriodOverviewPage } from './views/Runs/RunPerPeriod/RunsPerLhcPeriodOverviewPage.js';
3636
import { HomePage } from './views/Home/Overview/HomePage.js';
37-
import { DataPassesPerLhcPeriodOverviewPage } from './views/DataPasses/PerLhcPeriodOverview/DataPassesPerLhcPeriodOverviewView.js';
37+
import { DataPassesPerLhcPeriodOverviewPage } from './views/DataPasses/PerLhcPeriodOverview/DataPassesPerLhcPeriodOverviewPage.js';
3838
import { SimulationPassesPerLhcPeriodOverviewPage }
3939
from './views/SimulationPasses/PerLhcPeriodOverview/SimulationPassesPerLhcPeriodOverviewPage.js';
4040
import { DataPassesPerSimulationPassOverviewPage }

lib/public/views/DataPasses/ActiveColumns/dataPassesActiveColumns.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export const dataPassesActiveColumns = {
3535
visible: true,
3636
sortable: true,
3737
format: (_, dataPass) => formatDataPassName(dataPass),
38-
filter: ({ filteringModel }) => textFilter(
38+
filter: (filteringModel) => textFilter(
3939
filteringModel.get('names'),
4040
{ class: 'w-75 mt1', placeholder: 'e.g. LHC22a_apass1, ...' },
4141
),
@@ -105,7 +105,7 @@ export const dataPassesActiveColumns = {
105105

106106
nonPhysicsProductions: {
107107
name: 'Include nonphysics productions',
108-
filter: ({ filteringModel }) => checkboxes(filteringModel.get('nonPhysics').selectionModel),
108+
filter: (filteringModel) => checkboxes(filteringModel.get('nonPhysics').selectionModel),
109109
visible: false,
110110
},
111111
};
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
/**
2+
* @license
3+
* Copyright CERN and copyright holders of ALICE O2. This software is
4+
* distributed under the terms of the GNU General Public License v3 (GPL
5+
* Version 3), copied verbatim in the file "COPYING".
6+
*
7+
* See http://alice-o2.web.cern.ch/license for full licensing information.
8+
*
9+
* In applying this license CERN does not waive the privileges and immunities
10+
* granted to it by virtue of its status as an Intergovernmental Organization
11+
* or submit itself to any jurisdiction.
12+
*/
13+
import { FilteringModel } from '../../../components/Filters/common/FilteringModel.js';
14+
import { SelectionFilterModel } from '../../../components/Filters/common/filters/SelectionFilterModel.js';
15+
import { TextTokensFilterModel } from '../../../components/Filters/common/filters/TextTokensFilterModel.js';
16+
import { NON_PHYSICS_PRODUCTIONS_NAMES_WORDS, NonPhysicsProductionsNamesWords } from '../../../domain/enums/NonPhysicsProductionsNamesWords.js';
17+
import { OverviewPageModel } from '../../../models/OverviewModel.js';
18+
import { SortModel } from '../../components/common/table/SortModel.js';
19+
20+
/**
21+
* Data Passes Per LHC Period overview model
22+
*/
23+
export class DataPassesOverviewModel extends OverviewPageModel {
24+
/**
25+
* Constructor
26+
*/
27+
constructor() {
28+
super();
29+
this._sortModel = new SortModel();
30+
this._sortModel.observe(() => {
31+
this._pagination.silentlySetCurrentPage(1);
32+
this.load();
33+
});
34+
35+
this._sortModel.visualChange$.bubbleTo(this);
36+
37+
this._filteringModel = new FilteringModel({
38+
names: new TextTokensFilterModel(),
39+
nonPhysics: new SelectionFilterModel({
40+
availableOptions: NON_PHYSICS_PRODUCTIONS_NAMES_WORDS.map((word) => ({ label: word.toUpperCase(), value: word })),
41+
}),
42+
});
43+
44+
this._filteringModel.visualChange$.bubbleTo(this);
45+
this._filteringModel.observe(() => {
46+
this._pagination.silentlySetCurrentPage(1);
47+
this.load();
48+
});
49+
}
50+
51+
/**
52+
* Return filters and sort params of base model
53+
*
54+
* @return {{ filter: object, sort: object }} filters and sort params
55+
*/
56+
getBaseParams() {
57+
const nonPhysicsSelectionModel = this._filteringModel.get('nonPhysics').selectionModel;
58+
const filter = {
59+
names: this._filteringModel.get('names').normalized,
60+
includeTest: nonPhysicsSelectionModel.selected.includes(NonPhysicsProductionsNamesWords.TEST),
61+
includeDebug: nonPhysicsSelectionModel.selected.includes(NonPhysicsProductionsNamesWords.DEBUG),
62+
};
63+
64+
const { appliedOn: sortOn, appliedDirection: sortDirection } = this._sortModel;
65+
const sortParams = {};
66+
if (sortOn && sortDirection) {
67+
sortParams[`sort[${sortOn}]`] = sortDirection;
68+
}
69+
70+
return { filter, sort: sortParams };
71+
}
72+
73+
/**
74+
* Reset this model to its default
75+
*
76+
* @returns {void}
77+
*/
78+
reset() {
79+
this._filteringModel.reset();
80+
super.reset();
81+
}
82+
83+
/**
84+
* Return the filtering model
85+
*
86+
* @return {FilteringModel} the filtering model
87+
*/
88+
get filteringModel() {
89+
return this._filteringModel;
90+
}
91+
}

lib/public/views/DataPasses/PerLhcPeriodOverview/DataPassesPerLhcPeriodOverviewModel.js

Lines changed: 6 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,18 @@
1010
* granted to it by virtue of its status as an Intergovernmental Organization
1111
* or submit itself to any jurisdiction.
1212
*/
13-
import { FilteringModel } from '../../../components/Filters/common/FilteringModel.js';
14-
import { SelectionFilterModel } from '../../../components/Filters/common/filters/SelectionFilterModel.js';
15-
import { TextTokensFilterModel } from '../../../components/Filters/common/filters/TextTokensFilterModel.js';
16-
import { NON_PHYSICS_PRODUCTIONS_NAMES_WORDS, NonPhysicsProductionsNamesWords } from '../../../domain/enums/NonPhysicsProductionsNamesWords.js';
17-
import { OverviewPageModel } from '../../../models/OverviewModel.js';
13+
import { DataPassesOverviewModel } from '../DataPassesOverviewModel.js';
1814
import { buildUrl } from '/js/src/index.js';
1915

2016
/**
2117
* Data Passes Per LHC Period overview model
2218
*/
23-
export class DataPassesPerLhcPeriodOverviewModel extends OverviewPageModel {
19+
export class DataPassesPerLhcPeriodOverviewModel extends DataPassesOverviewModel {
2420
/**
2521
* Constructor
2622
*/
2723
constructor() {
2824
super();
29-
this._filteringModel = new FilteringModel({
30-
names: new TextTokensFilterModel(),
31-
nonPhysics: new SelectionFilterModel({
32-
availableOptions: NON_PHYSICS_PRODUCTIONS_NAMES_WORDS.map((word) => ({ label: word.toUpperCase(), value: word })),
33-
}),
34-
});
35-
36-
this._filteringModel.visualChange$.bubbleTo(this);
37-
this._filteringModel.observe(() => {
38-
this._pagination.silentlySetCurrentPage(1);
39-
this.load();
40-
});
4125
}
4226

4327
/**
@@ -52,50 +36,23 @@ export class DataPassesPerLhcPeriodOverviewModel extends OverviewPageModel {
5236
* @inheritdoc
5337
*/
5438
getRootEndpoint() {
55-
const nonPhysicsSelectionModel = this._filteringModel.get('nonPhysics').selectionModel;
39+
const { filter, sort } = this.getBaseParams();
40+
console.log(sort)
5641
const params = {
5742
filter: {
5843
lhcPeriodIds: [this._lhcPeriodId],
59-
names: this._filteringModel.get('names').normalized,
60-
includeTest: nonPhysicsSelectionModel.selected.includes(NonPhysicsProductionsNamesWords.TEST),
61-
includeDebug: nonPhysicsSelectionModel.selected.includes(NonPhysicsProductionsNamesWords.DEBUG),
44+
...filter,
6245
},
46+
...sort,
6347
};
6448

6549
return buildUrl('/api/dataPasses', params);
6650
}
6751

68-
/**
69-
* Reset this model to its default
70-
*
71-
* @returns {void}
72-
*/
73-
reset() {
74-
this._filteringModel.reset();
75-
super.reset();
76-
}
77-
7852
/**
7953
* Get id of current lhc period which data passes are fetched
8054
*/
8155
get lhcPeriodId() {
8256
return this._lhcPeriodId;
8357
}
84-
85-
/**
86-
* Return the filtering model
87-
*
88-
* @return {FilteringModel} the filtering model
89-
*/
90-
get filteringModel() {
91-
return this._filteringModel;
92-
}
93-
94-
/**
95-
* Checks if any filter value has been modified from their default (empty)
96-
* @return {Boolean} If any filter is active
97-
*/
98-
isAnyFilterActive() {
99-
return this._filteringModel.isAnyFilterActive();
100-
}
10158
}

lib/public/views/DataPasses/PerLhcPeriodOverview/DataPassesPerLhcPeriodOverviewView.js renamed to lib/public/views/DataPasses/PerLhcPeriodOverview/DataPassesPerLhcPeriodOverviewPage.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export const DataPassesPerLhcPeriodOverviewPage = ({ dataPasses: { perLhcPeriodO
5050
return h('', {
5151
onremove: () => dataPassesPerLhcPeriodOverviewModel.reset(),
5252
}, [
53-
h('.flex-row.header-container.pv2', filtersPanelPopover(dataPassesPerLhcPeriodOverviewModel, dataPassesActiveColumns)),
53+
h('.flex-row.header-container.pv2', filtersPanelPopover(dataPassesPerLhcPeriodOverviewModel.filteringModel, dataPassesActiveColumns)),
5454
h('.w-100.flex-column', [
5555
table(
5656
dataPassesPerLhcPeriodOverviewModel.items,

lib/public/views/DataPasses/PerSimulationPassOverview/DataPassesPerSimulationPassOverviewModel.js

Lines changed: 5 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -10,31 +10,20 @@
1010
* granted to it by virtue of its status as an Intergovernmental Organization
1111
* or submit itself to any jurisdiction.
1212
*/
13-
import { SortModel } from '../../../components/common/table/SortModel.js';
14-
import { TextTokensFilterModel } from '../../../components/Filters/common/filters/TextTokensFilterModel.js';
15-
import { OverviewPageModel } from '../../../models/OverviewModel.js';
1613
import { buildUrl, RemoteData } from '/js/src/index.js';
1714
import { getRemoteData } from '../../../utilities/fetch/getRemoteData.js';
1815
import { ObservableData } from '../../../utilities/ObservableData.js';
16+
import { DataPassesOverviewModel } from '../DataPassesOverviewModel.js';
1917

2018
/**
2119
* Data Passes Per Simulation Pass overview model
2220
*/
23-
export class DataPassesPerSimulationPassOverviewModel extends OverviewPageModel {
21+
export class DataPassesPerSimulationPassOverviewModel extends DataPassesOverviewModel {
2422
/**
2523
* Constructor
2624
*/
2725
constructor() {
2826
super();
29-
this._sortModel = new SortModel();
30-
this._sortModel.observe(() => {
31-
this._pagination.silentlySetCurrentPage(1);
32-
this.load();
33-
});
34-
this._sortModel.visualChange$.bubbleTo(this);
35-
36-
this._nameFilterModel = new TextTokensFilterModel();
37-
this._registerFilter(this._nameFilterModel);
3827
this._simulationPass = new ObservableData(RemoteData.notAsked());
3928
this._simulationPass.bubbleTo(this);
4029
}
@@ -65,18 +54,15 @@ export class DataPassesPerSimulationPassOverviewModel extends OverviewPageModel
6554
* @inheritdoc
6655
*/
6756
getRootEndpoint() {
57+
const { filter, sort } = this.getBaseParams();
6858
const params = {
6959
filter: {
70-
names: this._nameFilterModel.normalized,
7160
simulationPassIds: [this._simulationPassId],
61+
...filter,
7262
},
63+
...sort,
7364
};
7465

75-
const { appliedOn: sortOn, appliedDirection: sortDirection } = this._sortModel;
76-
if (sortOn && sortDirection) {
77-
params[`sort[${sortOn}]`] = sortDirection;
78-
}
79-
8066
return buildUrl('/api/dataPasses', params);
8167
}
8268

@@ -88,59 +74,10 @@ export class DataPassesPerSimulationPassOverviewModel extends OverviewPageModel
8874
this._simulationPassId = simulationPassId;
8975
}
9076

91-
/**
92-
* Reset this model to its default
93-
*
94-
* @returns {void}
95-
*/
96-
reset() {
97-
this._nameFilterModel.reset();
98-
super.reset();
99-
}
100-
10177
/**
10278
* Get current simulation pass which data passes are fetched
10379
*/
10480
get simulationPass() {
10581
return this._simulationPass.getCurrent();
10682
}
107-
108-
/**
109-
* Returns the model handling the overview page table sort
110-
*
111-
* @return {SortModel} the sort model
112-
*/
113-
get sortModel() {
114-
return this._sortModel;
115-
}
116-
117-
/**
118-
* Returns data pass name filter model
119-
* @return {TextTokensFilterModel} data pass name filter model
120-
*/
121-
get nameFilterModel() {
122-
return this._nameFilterModel;
123-
}
124-
125-
/**
126-
* Register a new filter model
127-
* @param {FilterModel} filterModel the filter model to register
128-
* @return {void}
129-
* @private
130-
*/
131-
_registerFilter(filterModel) {
132-
filterModel.visualChange$.bubbleTo(this);
133-
filterModel.observe(() => {
134-
this._pagination.silentlySetCurrentPage(1);
135-
this.load();
136-
});
137-
}
138-
139-
/**
140-
* States whether any filter is active
141-
* @return {boolean} true if any filter is active
142-
*/
143-
isAnyFilterActive() {
144-
return !this._nameFilterModel.isEmpty();
145-
}
14683
}

lib/public/views/DataPasses/PerSimulationPassOverview/DataPassesPerSimulationPassOverviewPage.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export const DataPassesPerSimulationPassOverviewPage = ({ dataPasses: {
5959
onremove: () => dataPassesPerSimulationPassOverviewModel.reset(),
6060
}, [
6161
h('.flex-row.items-center.g2', [
62-
filtersPanelPopover(dataPassesPerSimulationPassOverviewModel, dataPassesActiveColumns),
62+
filtersPanelPopover(dataPassesPerSimulationPassOverviewModel.filteringModel, dataPassesActiveColumns),
6363
h(
6464
'.flex-row.g1.items-center',
6565
simulationPass.match({

0 commit comments

Comments
 (0)