Skip to content
Open
Show file tree
Hide file tree
Changes from 58 commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
722caf7
chore: remove redundant model assignment.
Feb 20, 2026
f161cae
chore: move all filters denoted as so to a filteringModel
Feb 20, 2026
9faffaf
Make filterInputModel extend filterModel
Feb 20, 2026
247943b
rename inputfilter to ParsedInputFilter
Feb 20, 2026
114285d
implement authorfilter with ParsedInputFilterModel changes
Feb 20, 2026
f39f7ae
re-implement filter
Feb 20, 2026
df1fea3
add tag-filters to the filtering object
Feb 20, 2026
96ca85f
replace titleFilter and contentFilter with RawTextFilterModels
Feb 20, 2026
93b3291
make Authorfilter an implementation of RawTextFilterModel
Feb 20, 2026
5a5e830
add runs filter to the filteringmodel
Feb 20, 2026
b5e7148
add environments filter to the filteringmodel
Feb 20, 2026
3507ba0
add lhcFills filter to the filteringmodel
Feb 20, 2026
9c63409
add created filter to the filteringmodel
Feb 20, 2026
5500b3e
move the sort 'filter' to fetchlogs, since it doesn't actually filter…
Feb 20, 2026
a09ae8b
change filter to rawTextFilter for title
Feb 21, 2026
512999b
fix test by changing event type to 'change'
Feb 21, 2026
0f15812
fix content and author tests
Feb 21, 2026
7b641ca
import openFilteringPanel and resetFilters
Feb 21, 2026
5ab8218
fix createdAt filter test
Feb 21, 2026
4c96d73
change event types to change
Feb 21, 2026
18ce4dc
fix isAnyFilterActive
Feb 21, 2026
685dd38
remove _raw as from authorfilterModel, as it serves no purpose
Feb 21, 2026
4e132fd
chore: removed ParsedInputFilterModel
Mar 2, 2026
caf9812
chore: add toLowerCase to filterQueryParam computation
Mar 2, 2026
41c5a72
[O2B-1530] Lhc fills add sb duration filter (#2080)
NarrowsProjects Feb 24, 2026
f38f597
[O2B-1544] Fix pagination for filtered envs and add a test (#2096)
isaachilly Mar 5, 2026
3efdf1d
remove the combination operator from runs
Mar 5, 2026
fc61bea
remove the combination operator from envirionments
Mar 5, 2026
9c4df68
remove the combination operator from lhcFills
Mar 5, 2026
b860320
make filter computation much more compact using filteringmodel.normalize
Mar 5, 2026
7a00043
add happy-flow tests for logs api
Mar 5, 2026
ada3eb3
fix usecase unit tests
Mar 5, 2026
d290be7
Merge branch 'main' into improv/O2B-1534/Migrate-Log-Overview-to-use-…
NarrowsProjects Mar 5, 2026
0d8d3d4
Merge branch 'main' into improv/O2B-1534/Migrate-Log-Overview-to-use-…
NarrowsProjects Mar 5, 2026
237683a
Merge branch 'main' into improv/O2B-1534/Migrate-Log-Overview-to-use-…
NarrowsProjects Mar 9, 2026
25244f4
chore: add filteringmodel to QcFlagTypesOverviewModel
Mar 9, 2026
6970a74
feat: move namesFilterModelFilter to fileringmodel
Mar 9, 2026
cdaaf0e
feat: move methodsFilterModelFilter to filteringModel
Mar 9, 2026
27a8bbc
feat: move methodsFilterModelFilter to filteringModel
Mar 9, 2026
c24d302
chore: add filteringModel to AnchoredSimulationPassesOverviewModel
Mar 10, 2026
2f6fcf1
chore: add namesFilterModel to the filteringModel instance
Mar 10, 2026
790d76b
chore: add filteringModel to SimulationPassesPerLhcPeriodOverviewModel
Mar 10, 2026
6fe055b
chore: add namesFilterModel to the filteringModel instance of Simulat…
Mar 10, 2026
0e5d567
chore: add filteringModel to overviewmodel class
Mar 10, 2026
05461dd
feat: move namesFilterModel to the filteringModel
Mar 10, 2026
102c1b6
feat: move yearsFilterModel to the filteringModel
Mar 10, 2026
e2ab763
feat: move pdpBeamTypes to the filteringModel
Mar 10, 2026
30d7b39
rename te bad filter to be a generic component
Mar 10, 2026
bdba964
feat: replace qcFlagType bad filter with radioButtonFilterModel
Mar 10, 2026
4790d30
feat: replace ddflp's filter component with the common radiButton com…
Mar 10, 2026
3cf6c1b
feat: replace ddflp's filter component with the common radioButton co…
Mar 10, 2026
17a4ce8
feat: replace epn's filter component with the common radioButton comp…
Mar 10, 2026
1cd5603
feat: replace triggerValue's filter component with the standard selec…
Mar 10, 2026
4cea58d
chore: remove unused components
Mar 11, 2026
a9a1cd9
fix: fix Selectionmodel.normalized to use selected rather than select…
Mar 12, 2026
f9c1adb
Merge branch 'improv/O2B-1548/Migrate-qcFlagTypesOverviewModel-to-use…
Mar 12, 2026
172b28c
Merge branch 'improv/O2B-1549/Migrate-AnchoredSimulationPassesOvervie…
Mar 12, 2026
cf342ea
Merge branch 'improv/O2B-1547/Migrate-LhcPeriodOverviewModel-to-use-F…
Mar 12, 2026
aded3af
rename triggerValue checkboxes to include the triggerValue name
Apr 2, 2026
fa199de
feat: create ToggleFilterModel
Apr 9, 2026
47c0105
revamp the stableBeamFilter to be more general for toggles
Apr 9, 2026
0c3f701
rename stableBeamFilter to toggleFilter
Apr 9, 2026
1333c45
feat: turn mcReproducibleNotAsBad into a toggleFilter
Apr 15, 2026
1365033
chore: remove mcreprodicebleAsNotBadToggle.js
Apr 15, 2026
39d282a
add optional ID to togglefilter.js
Apr 15, 2026
306d3d0
feat: create gaqFilterModel
Apr 15, 2026
7d7f6c9
feat: replace 'gaq[notBadFraction]' with a gaqFilterModel
Apr 15, 2026
accd756
feat: create MultiCompositionFilterModel
Apr 15, 2026
d7d6177
improve MultiCompositionFiltermodel
Apr 15, 2026
6df07ff
change tests to be compatible with the mc filter now being clearable
Apr 15, 2026
95773bd
feat: flatten the detectorsQc[id][NotBadFraction] to detectorsQcNotBa…
Apr 16, 2026
2ca9a26
test: update api tests for the new flat detectorsQcNotBadFraction name
Apr 16, 2026
6f3de22
chore: turn hasStableBeams back into a radiobutton
Apr 17, 2026
de86292
chore: update jsdoc for gaqfilterModel and MultiCompositionFilterModel
Apr 17, 2026
83fb6f7
chore improve comment explanation of mcReproducibleNotbad
Apr 17, 2026
aa550f8
chore: update ToggleFilterModel jsdoc
Apr 17, 2026
4e8ca69
Merge branch 'main' into improv/O2B-1552/Move-ad-hoc-filters-inside-r…
Apr 17, 2026
c5820a6
remove unused import
Apr 17, 2026
9c32b2e
fix linting issues
Apr 17, 2026
309e3df
Merge branch 'main' into improv/O2B-1552/Move-ad-hoc-filters-inside-r…
Apr 17, 2026
75fe876
feat: update parameters of togglefilterModel to include falseIsEmpty
Apr 17, 2026
6c61766
test: update GetAllRunsUsecase.test.js to use the new flat detectorsQ…
Apr 17, 2026
a3fe2e2
test: fixup misplacement of mcReproducibleAsNotBad in filters
Apr 20, 2026
aba1d47
Merge branch 'main' into improv/O2B-1552/Move-ad-hoc-filters-inside-r…
NarrowsProjects Apr 20, 2026
4e92c1e
feat: change GaqFilterModel.notBadFraction notification functionallit…
Apr 20, 2026
4e9559b
chore: fix linter problems
Apr 20, 2026
4e215a4
feat: change isToggled to a getter
Apr 20, 2026
c2b3b58
chore: remove the bad filter
Apr 21, 2026
20f79e8
chore: remove spelling mistake in radiobuttonFilter jsdoc
Apr 21, 2026
957d4e2
chore: remove spelling mistake in radiobuttonFilter jsdoc
Apr 21, 2026
8dc7d18
chore: rename detectorsQcObj to detectorsQcNotBadFractionObj
Apr 21, 2026
608b0e7
chore: fix datapass check in gaq notbadfraction
Apr 21, 2026
4920750
chore: fix url from test
Apr 22, 2026
f1b9b26
return helpers message rather than throwing error
Apr 22, 2026
65dc49c
chore: remove form-group-header class from radiobuttonfilter and togg…
Apr 22, 2026
38afd8f
chore: improve isEmpty comments for toggleFilterModel
Apr 22, 2026
6364e5a
chore: use array destructuring to fix eslint issue
Apr 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 6 additions & 13 deletions lib/domain/dtos/GetAllLogsDto.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,32 +17,25 @@ const PaginationDto = require('./PaginationDto');
const { CustomJoi } = require('./CustomJoi.js');
const { TagsFilterDto } = require('./filters/TagsFilterDto.js');
const { FromToFilterDto } = require('./filters/FromToFilterDto.js');
const { EnvironmentsFilterDto } = require('./filters/EnvironmentsFilterDto');

const RunFilterDto = Joi.object({
values: CustomJoi.stringArray().items(EntityIdDto).single().required(),
operation: Joi.string().valid('and', 'or').required(),
});

const LhcFillFilterDto = Joi.object({
values: CustomJoi.stringArray().items(EntityIdDto).single().required(),
operation: Joi.string().valid('and', 'or').required(),
});
const RunFilterDto = CustomJoi.stringArray().items(EntityIdDto).single();
const EnvironmentsFilterDto = CustomJoi.stringArray().items(Joi.string()).single();
const LhcFillFilterDto = CustomJoi.stringArray().items(EntityIdDto).single();

const FilterDto = Joi.object({
title: Joi.string().trim(),
content: Joi.string().trim(),
author: Joi.string().trim(),
created: FromToFilterDto,
tags: TagsFilterDto,
lhcFills: LhcFillFilterDto,
run: RunFilterDto,
fillNumbers: LhcFillFilterDto,
runNumbers: RunFilterDto,
origin: Joi.string()
.valid('human', 'process'),
parentLog: EntityIdDto,
rootLog: EntityIdDto,
rootOnly: Joi.boolean(),
environments: EnvironmentsFilterDto,
environmentIds: EnvironmentsFilterDto,
});

const SortDto = Joi.object({
Expand Down
20 changes: 0 additions & 20 deletions lib/domain/dtos/filters/EnvironmentsFilterDto.js

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@
* or submit itself to any jurisdiction.
*/

import { FilterInputModel } from '../../common/filters/FilterInputModel.js';
import { RawTextFilterModel } from '../../common/filters/RawTextFilterModel.js';

/**
* Model to handle the state of the Author Filter
*/
export class AuthorFilterModel extends FilterInputModel {
export class AuthorFilterModel extends RawTextFilterModel {
/**
* Constructor
*
Expand All @@ -32,7 +32,7 @@ export class AuthorFilterModel extends FilterInputModel {
* @return {boolean} true if '!Anonymous' is included in the raw filter string, false otherwise.
*/
isAnonymousExcluded() {
return this._raw.includes('!Anonymous');
return this._value.includes('!Anonymous');
}

/**
Expand All @@ -42,28 +42,13 @@ export class AuthorFilterModel extends FilterInputModel {
*/
toggleAnonymousFilter() {
if (this.isAnonymousExcluded()) {
this._raw = this._raw.split(',')
this._value = this._value.split(',')
.filter((author) => author.trim() !== '!Anonymous')
.join(',');
} else {
this._raw += super.isEmpty ? '!Anonymous' : ', !Anonymous';
this._value += super.isEmpty ? '!Anonymous' : ', !Anonymous';
}

this._value = this.valueFromRaw(this._raw);
this.notify();
}

/**
* Reset the filter to its default value and notify the observers.
*
* @return {void}
*/
clear() {
if (this.isEmpty) {
return;
}

super.reset();
this.notify();
}
}
33 changes: 13 additions & 20 deletions lib/public/components/Filters/LogsFilter/author/authorFilter.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,7 @@
import { h } from '/js/src/index.js';
import { iconX } from '/js/src/icons.js';
import { switchInput } from '../../../common/form/switchInput.js';

/**
* Returns a text input field that can be used to filter logs by author
*
* @param {AuthorFilterModel} authorFilterModel The author filter model object
* @returns {Component} A text box that allows the user to enter an author substring to match against all logs
*/
const authorFilterTextInput = (authorFilterModel) => h('input.w-40', {
type: 'text',
id: 'authorFilterText',
value: authorFilterModel.raw,
oninput: (e) => authorFilterModel.update(e.target.value),
});
import { rawTextFilter } from '../../common/filters/rawTextFilter.js';

/**
* Returns a button that can be used to reset the author filter.
Expand All @@ -36,7 +24,7 @@ const authorFilterTextInput = (authorFilterModel) => h('input.w-40', {
*/
const resetAuthorFilterButton = (authorFilterModel) => h(
'.btn.btn-pill.f7',
{ disabled: authorFilterModel.isEmpty, onclick: () => authorFilterModel.clear() },
{ disabled: authorFilterModel.isEmpty, onclick: () => authorFilterModel.reset() },
iconX(),
);

Expand All @@ -55,11 +43,16 @@ export const excludeAnonymousLogAuthorToggle = (authorFilterModel) => switchInpu
/**
* Returns a authorFilter component with text input, reset button, and anonymous exclusion button.
*
* @param {LogModel} logModel the log model object
* @returns {Component} the author filter component
* @param {LogsOverviewModel} logsOverviewModel the log overview model
* @param {FilteringModel} logsOverviewModel.filteringModel the runs overview model
* @return {Component} the filter component
*/
export const authorFilter = ({ authorFilter }) => h('.flex-row.items-center.g3', [
authorFilterTextInput(authorFilter),
resetAuthorFilterButton(authorFilter),
excludeAnonymousLogAuthorToggle(authorFilter),
export const authorFilter = ({ filteringModel }) => h('.flex-row.items-center.g3', [
rawTextFilter(filteringModel.get('author'), {
classes: ['w-40'],
id: 'authorFilterText',
value: filteringModel.get('author').raw,
}),
resetAuthorFilterButton(filteringModel.get('author')),
excludeAnonymousLogAuthorToggle(filteringModel.get('author')),
]);
50 changes: 0 additions & 50 deletions lib/public/components/Filters/RunsFilter/dcs.js

This file was deleted.

50 changes: 0 additions & 50 deletions lib/public/components/Filters/RunsFilter/ddflp.js

This file was deleted.

50 changes: 0 additions & 50 deletions lib/public/components/Filters/RunsFilter/epn.js

This file was deleted.

21 changes: 0 additions & 21 deletions lib/public/components/Filters/RunsFilter/triggerValueFilter.js

This file was deleted.

34 changes: 34 additions & 0 deletions lib/public/components/Filters/common/RadioButtonFilterModel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/**
* @license
* Copyright CERN and copyright holders of ALICE O2. This software is
* distributed under the terms of the GNU General Public License v3 (GPL
* Version 3), copied verbatim in the file "COPYING".
*
* See http://alice-o2.web.cern.ch/license for full licensing information.
*
* In applying this license CERN does not waive the privileges and immunities
* granted to it by virtue of its status as an Intergovernmental Organization
* or submit itself to any jurisdiction.
*/

import { SelectionModel } from '../../common/selection/SelectionModel.js';

/**
* Model for managing a radiobutton view and state
*/
export class RadioButtonFilterModel extends SelectionModel {
/**
* Constructor
*
* @param {SelectionOption[]} [availableOptions] the list of possible operators
* @param {function} [setDefault] function that selects the default from the list of available options. Selects first entry by default
*/
constructor(availableOptions, setDefault = (options) => [options[0]]) {
super({
availableOptions,
defaultSelection: setDefault(availableOptions),
multiple: false,
allowEmpty: false,
});
}
}
Loading
Loading