Skip to content

Commit

Permalink
[frontend] quick adding of label filter more than once (#6347)
Browse files Browse the repository at this point in the history
  • Loading branch information
Archidoit committed Mar 14, 2024
1 parent 1278c91 commit 5204a8e
Show file tree
Hide file tree
Showing 9 changed files with 25 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import ReportPopover from './ReportPopover';
import AttackPatternsMatrix from '../../techniques/attack_patterns/AttackPatternsMatrix';
import { buildViewParamsFromUrlAndStorage, saveViewParameters } from '../../../../utils/ListParameters';
import ReportKnowledgeTimeLine, { reportKnowledgeTimeLineQuery } from './ReportKnowledgeTimeLine';
import { constructHandleAddFilter, constructHandleRemoveFilter, emptyFilterGroup, filtersAfterSwitchLocalMode } from '../../../../utils/filters/filtersUtils';
import { useConstructHandleAddFilter, constructHandleRemoveFilter, emptyFilterGroup, filtersAfterSwitchLocalMode } from '../../../../utils/filters/filtersUtils';
import ContentKnowledgeTimeLineBar from '../../common/containers/ContainertKnowledgeTimeLineBar';
import ContainerContent, { containerContentQuery } from '../../common/containers/ContainerContent';
import investigationAddFromContainer from '../../../../utils/InvestigationUtils';
Expand Down Expand Up @@ -172,7 +172,7 @@ class ReportKnowledgeComponent extends Component {
event.stopPropagation();
event.preventDefault();
}
const newFilters = constructHandleAddFilter(
const newFilters = useConstructHandleAddFilter(
this.state.timeLineFilters,
key,
id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import CaseIncidentPopover from './CaseIncidentPopover';
import AttackPatternsMatrix from '../../techniques/attack_patterns/AttackPatternsMatrix';
import { buildViewParamsFromUrlAndStorage, saveViewParameters } from '../../../../utils/ListParameters';
import IncidentKnowledgeTimeLine, { incidentKnowledgeTimeLineQuery } from './IncidentKnowledgeTimeLine';
import { constructHandleAddFilter, constructHandleRemoveFilter, emptyFilterGroup, filtersAfterSwitchLocalMode } from '../../../../utils/filters/filtersUtils';
import { useConstructHandleAddFilter, constructHandleRemoveFilter, emptyFilterGroup, filtersAfterSwitchLocalMode } from '../../../../utils/filters/filtersUtils';
import ContentKnowledgeTimeLineBar from '../../common/containers/ContainertKnowledgeTimeLineBar';
import ContainerContent, { containerContentQuery } from '../../common/containers/ContainerContent';
import investigationAddFromContainer from '../../../../utils/InvestigationUtils';
Expand Down Expand Up @@ -173,7 +173,7 @@ class IncidentKnowledgeComponent extends Component {
event.stopPropagation();
event.preventDefault();
}
const newFilters = constructHandleAddFilter(
const newFilters = useConstructHandleAddFilter(
this.state.timeLineFilters,
key,
id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import ContainerHeader from '../../common/containers/ContainerHeader';
import Loader, { LoaderVariant } from '../../../../components/Loader';
import AttackPatternsMatrix from '../../techniques/attack_patterns/AttackPatternsMatrix';
import { buildViewParamsFromUrlAndStorage, saveViewParameters } from '../../../../utils/ListParameters';
import { constructHandleAddFilter, constructHandleRemoveFilter, emptyFilterGroup, filtersAfterSwitchLocalMode } from '../../../../utils/filters/filtersUtils';
import { useConstructHandleAddFilter, constructHandleRemoveFilter, emptyFilterGroup, filtersAfterSwitchLocalMode } from '../../../../utils/filters/filtersUtils';
import CaseRfiPopover from './CaseRfiPopover';
import CaseRfiKnowledgeGraph, { caseRfiKnowledgeGraphQuery } from './CaseRfiKnowledgeGraph';
import CaseRfiKnowledgeTimeLine, { caseRfiKnowledgeTimeLineQuery } from './CaseRfiKnowledgeTimeLine';
Expand Down Expand Up @@ -173,7 +173,7 @@ class CaseRfiKnowledgeComponent extends Component {
event.stopPropagation();
event.preventDefault();
}
const newFilters = constructHandleAddFilter(
const newFilters = useConstructHandleAddFilter(
this.state.timeLineFilters,
key,
id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import ContainerHeader from '../../common/containers/ContainerHeader';
import Loader, { LoaderVariant } from '../../../../components/Loader';
import AttackPatternsMatrix from '../../techniques/attack_patterns/AttackPatternsMatrix';
import { buildViewParamsFromUrlAndStorage, saveViewParameters } from '../../../../utils/ListParameters';
import { constructHandleAddFilter, constructHandleRemoveFilter, emptyFilterGroup, filtersAfterSwitchLocalMode } from '../../../../utils/filters/filtersUtils';
import { useConstructHandleAddFilter, constructHandleRemoveFilter, emptyFilterGroup, filtersAfterSwitchLocalMode } from '../../../../utils/filters/filtersUtils';
import CaseRftPopover from './CaseRftPopover';
import CaseRftKnowledgeGraph, { caseRftKnowledgeGraphQuery } from './CaseRftKnowledgeGraph';
import CaseRftKnowledgeTimeLine, { caseRftKnowledgeTimeLineQuery } from './CaseRftKnowledgeTimeLine';
Expand Down Expand Up @@ -172,7 +172,7 @@ class CaseRftKnowledgeComponent extends Component {
event.stopPropagation();
event.preventDefault();
}
const newFilters = constructHandleAddFilter(
const newFilters = useConstructHandleAddFilter(
this.state.timeLineFilters,
key,
id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React, { ChangeEvent, FunctionComponent, useState } from 'react';
import { useNavigate } from 'react-router-dom-v5-compat';
import ListFiltersWithoutLocalStorage from '@components/common/lists/ListFiltersWithoutLocalStorage';
import { uniq } from 'ramda';
import { constructHandleAddFilter, constructHandleRemoveFilter, emptyFilterGroup, Filter, FilterGroup, FiltersVariant } from '../../../../utils/filters/filtersUtils';
import { useConstructHandleAddFilter, constructHandleRemoveFilter, emptyFilterGroup, Filter, FilterGroup, FiltersVariant } from '../../../../utils/filters/filtersUtils';
import FiltersElement, { FilterElementsInputValue } from './FiltersElement';
import ListFilters from './ListFilters';
import DialogFilters from './DialogFilters';
Expand Down Expand Up @@ -103,7 +103,7 @@ const Filters: FunctionComponent<FiltersProps> = ({
event.stopPropagation();
event.preventDefault();
}
setFilters(constructHandleAddFilter(filters, key, id, operator));
setFilters(useConstructHandleAddFilter(filters, key, id, operator));
});
const defaultHandleRemoveFilter = handleRemoveFilter
|| ((key, operator = 'eq') => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import type { Theme } from '../../../../../components/Theme';
import { handleErrorInForm } from '../../../../../relay/environment';
import { fieldSpacingContainerStyle } from '../../../../../utils/field';
import {
constructHandleAddFilter,
useConstructHandleAddFilter,
constructHandleRemoveFilter,
Filter,
FilterGroup,
Expand Down Expand Up @@ -122,7 +122,7 @@ const TriggerActivityLiveCreation: FunctionComponent<TriggerLiveCreationProps> =
setFilters(undefined);
};
const handleAddFilter = (key: string, id: string, op = 'eq') => {
setFilters(constructHandleAddFilter(filters, key, id, op));
setFilters(useConstructHandleAddFilter(filters, key, id, op));
};
const handleRemoveFilter = (key: string, op = 'eq') => {
setFilters(constructHandleRemoveFilter(filters, key, op));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import type { Theme } from '../../../../../components/Theme';
import { convertNotifiers } from '../../../../../utils/edition';
import { fieldSpacingContainerStyle } from '../../../../../utils/field';
import {
constructHandleAddFilter,
useConstructHandleAddFilter,
constructHandleRemoveFilter,
deserializeFilterGroupForFrontend,
Filter,
Expand Down Expand Up @@ -150,7 +150,7 @@ const AlertLiveEdition: FunctionComponent<AlertLiveEditionProps> = ({
})
.catch(() => false);
const handleAddFilter = (key: string, id: string, op = 'eq') => {
const updatedFilters = constructHandleAddFilter(filters, key, id, op);
const updatedFilters = useConstructHandleAddFilter(filters, key, id, op);
commitFieldPatch({
variables: {
id: trigger?.id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,7 @@ export const isFilterFormatCorrect = (stringFilters: string): boolean => {
return filters.mode && filters.filters && filters.filterGroups;
};

export const useIsUniqFilter = (key: string) => {
const { filterKeysSchema } = useAuth().schema;
export const isUniqFilter = (key: string, filterKeysSchema: Map<string, Map<string, FilterDefinition>>) => {
const filterDefinition = filterKeysSchema.get('Stix-Core-Object')?.get(key);
if (filterDefinition && ['boolean', 'date', 'integer', 'float'].includes(filterDefinition.type)) {
return true;
Expand Down Expand Up @@ -443,18 +442,19 @@ export const addFilter = (

// add a filter (k, id, op) in a filterGroup smartly, for usage in forms
// note that we're only dealing with one-level filterGroup (no nested), so we just update the 1st level filters list
export const constructHandleAddFilter = (
export const useConstructHandleAddFilter = (
filters: FilterGroup | undefined | null,
k: string,
id: string | null,
op = 'eq',
) => {
const { filterKeysSchema } = useAuth().schema;
// if the filter key is already used, update it
if (filters && findFilterFromKey(filters.filters, k, op)) {
const filter = findFilterFromKey(filters.filters, k, op);
let newValues: FilterValue[] = [];
if (id !== null) {
newValues = useIsUniqFilter(k)
newValues = isUniqFilter(k, filterKeysSchema)
? [id]
: R.uniq([...(filter?.values ?? []), id]);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import * as R from 'ramda';
import { Dispatch, SetStateAction, SyntheticEvent, useState } from 'react';
import { v4 as uuid } from 'uuid';
import { OrderMode, PaginationOptions } from '../../components/list_lines';
import { emptyFilterGroup, Filter, FilterGroup, FilterValue, findFilterFromKey, isFilterGroupNotEmpty, useIsUniqFilter } from '../filters/filtersUtils';
import { emptyFilterGroup, Filter, FilterGroup, FilterValue, findFilterFromKey, isFilterGroupNotEmpty, isUniqFilter } from '../filters/filtersUtils';
import { isEmptyField, isNotEmptyField, removeEmptyFields } from '../utils';
import { MESSAGING$ } from '../../relay/environment';
import {
Expand All @@ -16,6 +16,7 @@ import {
handleChangeRepresentationFilterUtil,
} from '../filters/filtersManageStateUtil';
import { LocalStorage } from './useLocalStorageModel';
import useAuth from './useAuth';

export interface handleFilterHelpers {
handleSwitchGlobalMode: () => void;
Expand Down Expand Up @@ -258,6 +259,8 @@ export const usePaginationLocalStorage = <U>(
): PaginationLocalStorage<U> => {
const [viewStorage, setValue] = useLocalStorage(key, initialValue, ignoreUri);
const paginationOptions = localStorageToPaginationOptions({ count: 25, ...viewStorage });
const { filterKeysSchema } = useAuth().schema;

const helpers: UseLocalStorageHelpers = {
handleSearch: (value: string) => setValue((c) => ({ ...c, searchTerm: value })),
handleRemoveFilterById: (id: string) => {
Expand Down Expand Up @@ -355,7 +358,9 @@ export const usePaginationLocalStorage = <U>(
if (viewStorage.filters && filter) {
let newValues: string[] = [];
if (id !== null) {
newValues = useIsUniqFilter(k) ? [id] : R.uniq([...filter.values, id]);
newValues = isUniqFilter(k, filterKeysSchema)
? [id]
: R.uniq([...filter.values, id]);
}
const newFilterElement = {
id: uuid(),
Expand Down

0 comments on commit 5204a8e

Please sign in to comment.