diff --git a/opencti-platform/opencti-front/src/private/components/common/stix_core_relationships/views/EntityStixCoreRelationshipsRelationshipsView.tsx b/opencti-platform/opencti-front/src/private/components/common/stix_core_relationships/views/EntityStixCoreRelationshipsRelationshipsView.tsx index 9b52ea37af26..ba6fc44db42e 100644 --- a/opencti-platform/opencti-front/src/private/components/common/stix_core_relationships/views/EntityStixCoreRelationshipsRelationshipsView.tsx +++ b/opencti-platform/opencti-front/src/private/components/common/stix_core_relationships/views/EntityStixCoreRelationshipsRelationshipsView.tsx @@ -62,15 +62,6 @@ const EntityStixCoreRelationshipsRelationshipsView: FunctionComponent = (props) => { const [filters, helpers] = useFiltersState(emptyFilterGroup); const completeFilterKeysMap: Map> = useFetchFilterKeysSchema(); - const filterKeysMap = useBuildFilterKeysMapFromEntityType(selectedTypes); - const availableFilterKeys = generateUniqueItemsArray(filterKeysMap.keys() ?? []).filter((k) => k !== 'entity_type'); + const availableFilterKeys = useAvailableFilterKeysForEntityTypes(selectedTypes).filter((k) => k !== 'entity_type'); // TODO: typing this state properly implies deep refactoring // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/opencti-platform/opencti-front/src/private/components/data/feeds/FeedEdition.jsx b/opencti-platform/opencti-front/src/private/components/data/feeds/FeedEdition.jsx index 35eabb3d52cb..c8fcfbbbc0fb 100644 --- a/opencti-platform/opencti-front/src/private/components/data/feeds/FeedEdition.jsx +++ b/opencti-platform/opencti-front/src/private/components/data/feeds/FeedEdition.jsx @@ -30,14 +30,14 @@ import { stixCyberObservablesLinesAttributesQuery } from '../../observations/sti import Filters from '../../common/lists/Filters'; import { feedCreationAllTypesQuery } from './FeedCreation'; import { + useAvailableFilterKeysForEntityTypes, cleanFilters, deserializeFilterGroupForFrontend, serializeFilterGroupForBackend, - useBuildFilterKeysMapFromEntityType, useFetchFilterKeysSchema, } from '../../../../utils/filters/filtersUtils'; import FilterIconButton from '../../../../components/FilterIconButton'; -import { generateUniqueItemsArray, isNotEmptyField } from '../../../../utils/utils'; +import { isNotEmptyField } from '../../../../utils/utils'; import ObjectMembersField from '../../common/form/ObjectMembersField'; import { fieldSpacingContainerStyle } from '../../../../utils/field'; import { convertAuthorizedMembers } from '../../../../utils/edition'; @@ -157,8 +157,7 @@ const FeedEditionContainer = (props) => { }); const completeFilterKeysMap = useFetchFilterKeysSchema(); - const filterKeysMap = useBuildFilterKeysMapFromEntityType(selectedTypes); - const availableFilterKeys = generateUniqueItemsArray(filterKeysMap.keys() ?? []).filter((k) => k !== 'entity_type'); + const availableFilterKeys = useAvailableFilterKeysForEntityTypes(selectedTypes).filter((k) => k !== 'entity_type'); const handleSelectTypes = (types) => { setSelectedTypes(types); diff --git a/opencti-platform/opencti-front/src/private/components/data/taxii/TaxiiCollectionCreation.tsx b/opencti-platform/opencti-front/src/private/components/data/taxii/TaxiiCollectionCreation.tsx index 53cf71f20d44..4ed59b6479bf 100644 --- a/opencti-platform/opencti-front/src/private/components/data/taxii/TaxiiCollectionCreation.tsx +++ b/opencti-platform/opencti-front/src/private/components/data/taxii/TaxiiCollectionCreation.tsx @@ -18,13 +18,12 @@ import { useFormatter } from '../../../../components/i18n'; import { commitMutation } from '../../../../relay/environment'; import TextField from '../../../../components/TextField'; import Filters from '../../common/lists/Filters'; -import { emptyFilterGroup, isFilterGroupNotEmpty, serializeFilterGroupForBackend, useBuildFilterKeysMapFromEntityType } from '../../../../utils/filters/filtersUtils'; +import { useAvailableFilterKeysForEntityTypes, emptyFilterGroup, isFilterGroupNotEmpty, serializeFilterGroupForBackend } from '../../../../utils/filters/filtersUtils'; import FilterIconButton from '../../../../components/FilterIconButton'; import { fieldSpacingContainerStyle } from '../../../../utils/field'; import Drawer, { DrawerVariant } from '../../common/drawer/Drawer'; import useFiltersState from '../../../../utils/filters/useFiltersState'; import { PaginationOptions } from '../../../../components/list_lines'; -import { generateUniqueItemsArray } from '../../../../utils/utils'; interface TaxiiCollectionCreationProps { paginationOptions: PaginationOptions @@ -120,8 +119,7 @@ const TaxiiCollectionCreation: FunctionComponent = setSubmitting, }); }; - const filterKeysMap = useBuildFilterKeysMapFromEntityType(['Stix-Core-Object', 'stix-core-relationship']); - const availableFilterKeys = generateUniqueItemsArray(filterKeysMap.keys() ?? []); + const availableFilterKeys = useAvailableFilterKeysForEntityTypes(['Stix-Core-Object', 'stix-core-relationship']); return ( ['onSubmit'] = () => {}; - const filterKeysMap = useBuildFilterKeysMapFromEntityType(['Stix-Core-Object', 'stix-core-relationship']); - const availableFilterKeys = generateUniqueItemsArray(filterKeysMap.keys() ?? []); + const availableFilterKeys = useAvailableFilterKeysForEntityTypes(['Stix-Core-Object', 'stix-core-relationship']); return ( = ({ perspective, typ ]; searchContext = { entityTypes: ['Stix-Core-Object'] }; } - const filterKeysMap = useBuildFilterKeysMapFromEntityType(searchContext.entityTypes); - let availableFilterKeys = uniq(Array.from(filterKeysMap.keys() ?? [])); + let availableFilterKeys = useAvailableFilterKeysForEntityTypes(searchContext.entityTypes); if (perspective !== 'relationships') { availableFilterKeys = availableFilterKeys.concat('entity_type'); } else { availableFilterKeys = availableFilterKeys.filter((key) => key !== 'entity_type'); // for relationships perspective widget, use the relationship_type filter } - const entitiesFilterKeysMap = useBuildFilterKeysMapFromEntityType(['Stix-Core-Object']); - const entitiesFilters = uniq(Array.from(entitiesFilterKeysMap.keys() ?? [])); + const entitiesFilters = useAvailableFilterKeysForEntityTypes(['Stix-Core-Object']); return <> diff --git a/opencti-platform/opencti-front/src/utils/filters/filtersUtils.tsx b/opencti-platform/opencti-front/src/utils/filters/filtersUtils.tsx index d7c4ae3bad2c..f86df7b17cb8 100644 --- a/opencti-platform/opencti-front/src/utils/filters/filtersUtils.tsx +++ b/opencti-platform/opencti-front/src/utils/filters/filtersUtils.tsx @@ -1,7 +1,6 @@ import * as R from 'ramda'; import { v4 as uuid } from 'uuid'; import { OptionValue } from '@components/common/lists/FilterAutocomplete'; -import { uniq } from 'ramda'; import React from 'react'; import { useFormatter } from '../../components/i18n'; import type { FilterGroup as GqlFilterGroup } from './__generated__/useSearchEntitiesStixCoreObjectsSearchQuery.graphql'; @@ -679,9 +678,13 @@ export const useBuildFilterKeysMapFromEntityType = (entityTypes = ['Stix-Core-Ob return filterKeysMap; }; -export const useRemoveIdAndIncorrectKeysFromFilterGroupObject = (filters?: FilterGroup | null, entityTypes = ['Stix-Core-Object']): FilterGroup | undefined => { +export const useAvailableFilterKeysForEntityTypes = (entityTypes: string[]) => { const filterKeysMap = useBuildFilterKeysMapFromEntityType(entityTypes); - const availableFilterKeys = uniq(Array.from(filterKeysMap.keys() ?? []).concat('entity_type')); + return generateUniqueItemsArray(filterKeysMap.keys() ?? []); +}; + +export const useRemoveIdAndIncorrectKeysFromFilterGroupObject = (filters?: FilterGroup | null, entityTypes = ['Stix-Core-Object']): FilterGroup | undefined => { + const availableFilterKeys = useAvailableFilterKeysForEntityTypes(entityTypes).concat('entity_type'); if (!filters) { return undefined; }