From 97c444a4247312ac974d22e8d62f3ab790cf220d Mon Sep 17 00:00:00 2001 From: Guillaume Paris Date: Tue, 5 Nov 2024 10:07:20 +0100 Subject: [PATCH 1/2] [frontend] improve taxonomics retrieval strategy (#1734) --- openbas-front/src/admin/Index.tsx | 7 ++++++- .../src/admin/components/Dashboard.tsx | 9 +------- .../assets/asset_groups/AssetGroups.tsx | 8 ------- .../components/assets/endpoints/Endpoints.tsx | 2 -- .../common/filters/KillChainPhasesFilter.js | 4 ---- .../components/common/filters/MitreFilter.tsx | 4 ---- .../components/common/filters/TagsFilter.js | 9 -------- .../common/injects/CreateInject.tsx | 9 -------- .../common/injects/CreateInjectDetails.js | 8 +------ .../common/injects/InjectAddTeams.tsx | 9 -------- .../common/injects/UpdateInjectDetails.js | 7 ------- .../components/common/matrix/MitreMatrix.tsx | 15 +------------ .../common/matrix/MitreMatrixDummy.tsx | 21 ++----------------- .../components/challenges/Challenges.js | 2 -- .../components/documents/Documents.js | 2 -- .../components/components/teams/Teams.tsx | 5 ----- .../components/teams/UpdateTeams.tsx | 9 -------- .../injectors/InjectorContracts.js | 9 -------- .../components/mitigations/Mitigations.js | 9 -------- .../admin/components/scenarios/Scenarios.tsx | 6 ------ .../attack_patterns/AttackPatterns.js | 7 ------- .../components/settings/groups/Groups.js | 2 -- .../admin/components/settings/users/Users.js | 2 -- .../components/simulations/ExerciseList.tsx | 9 -------- .../simulation/controls/Comcheck.js | 2 -- .../simulations/simulation/controls/Dryrun.js | 2 -- .../simulation/injects/CreateQuickInject.js | 2 -- .../admin/components/teams/Organizations.tsx | 2 -- .../src/admin/components/teams/Players.tsx | 2 -- .../src/components/AttackPatternField.tsx | 8 +------ .../src/components/KillChainPhaseField.js | 8 ++----- openbas-front/src/components/TagField.js | 8 ++----- .../src/components/fields/TagField.tsx | 6 +----- 33 files changed, 17 insertions(+), 197 deletions(-) diff --git a/openbas-front/src/admin/Index.tsx b/openbas-front/src/admin/Index.tsx index e9f5cc1395..ad8730f965 100644 --- a/openbas-front/src/admin/Index.tsx +++ b/openbas-front/src/admin/Index.tsx @@ -3,7 +3,9 @@ import { makeStyles, useTheme } from '@mui/styles'; import { lazy, Suspense, useEffect } from 'react'; import { Navigate, Route, Routes, useNavigate } from 'react-router-dom'; +import { fetchAttackPatterns } from '../actions/AttackPattern'; import type { LoggedHelper } from '../actions/helper'; +import { fetchKillChainPhases } from '../actions/KillChainPhase'; import { fetchTags } from '../actions/Tag'; import { errorWrapper } from '../components/Error'; import Loader from '../components/Loader'; @@ -44,6 +46,7 @@ const Index = () => { const theme = useTheme(); const classes = useStyles(); const navigate = useNavigate(); + const dispatch = useAppDispatch(); const { logged, settings } = useHelper((helper: LoggedHelper) => { return { logged: helper.logged(), settings: helper.getPlatformSettings() }; }); @@ -64,8 +67,10 @@ const Index = () => { overflowX: 'hidden', overflowY: 'hidden', }; - const dispatch = useAppDispatch(); + // load taxonomics one time at login useDataLoader(() => { + dispatch(fetchAttackPatterns()); + dispatch(fetchKillChainPhases()); dispatch(fetchTags()); }); const { bannerHeight } = computeBannerSettings(settings); diff --git a/openbas-front/src/admin/components/Dashboard.tsx b/openbas-front/src/admin/components/Dashboard.tsx index 72c828060a..0d248fd990 100644 --- a/openbas-front/src/admin/components/Dashboard.tsx +++ b/openbas-front/src/admin/components/Dashboard.tsx @@ -6,10 +6,8 @@ import Chart from 'react-apexcharts'; import { fetchStatistics } from '../../actions/Application'; import type { AttackPatternHelper } from '../../actions/attack_patterns/attackpattern-helper'; -import { fetchAttackPatterns } from '../../actions/AttackPattern'; import { searchExercises } from '../../actions/Exercise'; import type { InjectExpectationResultsByAttackPatternStore } from '../../actions/exercises/Exercise'; -import { fetchKillChainPhases } from '../../actions/KillChainPhase'; import type { StatisticsHelper } from '../../actions/statistics/statistics-helper'; import { initSorting, type Page } from '../../components/common/queryable/Page'; import Empty from '../../components/Empty'; @@ -94,11 +92,7 @@ const Dashboard = () => { const [loading, setLoading] = useState(true); useDataLoader(() => { setLoading(true); - Promise.all([ - dispatch(fetchAttackPatterns()), - dispatch(fetchKillChainPhases()), - dispatch(fetchStatistics()), - ]).finally(() => { + dispatch(fetchStatistics()).finally(() => { setLoading(false); }); }); @@ -295,7 +289,6 @@ const Dashboard = () => { : ( ) } diff --git a/openbas-front/src/admin/components/assets/asset_groups/AssetGroups.tsx b/openbas-front/src/admin/components/assets/asset_groups/AssetGroups.tsx index 6ff787aee2..6f9ceeff95 100644 --- a/openbas-front/src/admin/components/assets/asset_groups/AssetGroups.tsx +++ b/openbas-front/src/admin/components/assets/asset_groups/AssetGroups.tsx @@ -7,7 +7,6 @@ import { useSearchParams } from 'react-router-dom'; import { searchAssetGroups } from '../../../../actions/asset_groups/assetgroup-action'; import type { EndpointHelper } from '../../../../actions/assets/asset-helper'; import type { TagHelper, UserHelper } from '../../../../actions/helper'; -import { fetchTags } from '../../../../actions/Tag'; import Breadcrumbs from '../../../../components/Breadcrumbs'; import ClickableModeChip from '../../../../components/common/chips/ClickableModeChip'; import ExportButton from '../../../../components/common/ExportButton'; @@ -22,8 +21,6 @@ import { useFormatter } from '../../../../components/i18n'; import ItemTags from '../../../../components/ItemTags'; import { useHelper } from '../../../../store'; import type { AssetGroupOutput } from '../../../../utils/api-types'; -import { useAppDispatch } from '../../../../utils/hooks'; -import useDataLoader from '../../../../utils/hooks/useDataLoader'; import type { AssetGroupStore } from './AssetGroup'; import AssetGroupCreation from './AssetGroupCreation'; import AssetGroupManagement from './AssetGroupManagement'; @@ -134,7 +131,6 @@ const computeRuleValues = (assetGroup: AssetGroupOutput, t: (value: string) => s const AssetGroups = () => { // Standard hooks const classes = useStyles(); - const dispatch = useAppDispatch(); const { t } = useFormatter(); const [selectedAssetGroupId, setSelectedAssetGroupId] = useState(undefined); @@ -149,10 +145,6 @@ const AssetGroups = () => { userAdmin: helper.getMe()?.user_admin ?? false, })); - useDataLoader(() => { - dispatch(fetchTags()); - }); - // Headers const headers: Header[] = useMemo(() => [ { diff --git a/openbas-front/src/admin/components/assets/endpoints/Endpoints.tsx b/openbas-front/src/admin/components/assets/endpoints/Endpoints.tsx index b4845828f0..2cdc4043f9 100644 --- a/openbas-front/src/admin/components/assets/endpoints/Endpoints.tsx +++ b/openbas-front/src/admin/components/assets/endpoints/Endpoints.tsx @@ -8,7 +8,6 @@ import { searchEndpoints } from '../../../../actions/assets/endpoint-actions'; import { fetchExecutors } from '../../../../actions/Executor'; import type { ExecutorHelper } from '../../../../actions/executors/executor-helper'; import type { TagHelper, UserHelper } from '../../../../actions/helper'; -import { fetchTags } from '../../../../actions/Tag'; import Breadcrumbs from '../../../../components/Breadcrumbs'; import PaginationComponent from '../../../../components/common/pagination/PaginationComponent'; import SortHeadersComponent from '../../../../components/common/pagination/SortHeadersComponent'; @@ -96,7 +95,6 @@ const Endpoints = () => { })); useDataLoader(() => { dispatch(fetchExecutors()); - dispatch(fetchTags()); }); // Headers diff --git a/openbas-front/src/admin/components/common/filters/KillChainPhasesFilter.js b/openbas-front/src/admin/components/common/filters/KillChainPhasesFilter.js index f7c62e04d6..105e0d01f1 100644 --- a/openbas-front/src/admin/components/common/filters/KillChainPhasesFilter.js +++ b/openbas-front/src/admin/components/common/filters/KillChainPhasesFilter.js @@ -3,9 +3,7 @@ import { Autocomplete, Box, TextField } from '@mui/material'; import { makeStyles } from '@mui/styles'; import * as R from 'ramda'; import { useEffect } from 'react'; -import { useDispatch } from 'react-redux'; -import { fetchKillChainPhases } from '../../../../actions/KillChainPhase'; import { buildEmptyFilter } from '../../../../components/common/queryable/filter/FilterUtils'; import { useFormatter } from '../../../../components/i18n'; import { useHelper } from '../../../../store'; @@ -26,10 +24,8 @@ const KillChainPhasesFilter = (props) => { const { fullWidth, filterKey, helpers } = props; const classes = useStyles(); const { t } = useFormatter(); - const dispatch = useDispatch(); const killChainPhases = useHelper(helper => helper.getKillChainPhases()); useEffect(() => { - dispatch(fetchKillChainPhases()); helpers.handleAddFilterWithEmptyValue(buildEmptyFilter(filterKey, 'eq')); }, []); const killChainPhaseTransform = n => ({ diff --git a/openbas-front/src/admin/components/common/filters/MitreFilter.tsx b/openbas-front/src/admin/components/common/filters/MitreFilter.tsx index 4b9d04c7e6..b84c5a5696 100644 --- a/openbas-front/src/admin/components/common/filters/MitreFilter.tsx +++ b/openbas-front/src/admin/components/common/filters/MitreFilter.tsx @@ -4,11 +4,9 @@ import { FunctionComponent, useEffect } from 'react'; import type { AttackPatternStore } from '../../../../actions/attack_patterns/AttackPattern'; import type { AttackPatternHelper } from '../../../../actions/attack_patterns/attackpattern-helper'; -import { fetchAttackPatterns } from '../../../../actions/AttackPattern'; import type { InjectorContractHelper } from '../../../../actions/injector_contracts/injector-contract-helper'; import { fetchInjectorsContracts } from '../../../../actions/InjectorContracts'; import type { KillChainPhaseHelper } from '../../../../actions/kill_chain_phases/killchainphase-helper'; -import { fetchKillChainPhases } from '../../../../actions/KillChainPhase'; import { FilterHelpers } from '../../../../components/common/queryable/filter/FilterHelpers'; import { buildEmptyFilter } from '../../../../components/common/queryable/filter/FilterUtils'; import { useFormatter } from '../../../../components/i18n'; @@ -160,8 +158,6 @@ const MitreFilter: FunctionComponent = ({ injectorsContracts: helper.getInjectorContracts(), })); useDataLoader(() => { - dispatch(fetchKillChainPhases()); - dispatch(fetchAttackPatterns()); dispatch(fetchInjectorsContracts()); }); diff --git a/openbas-front/src/admin/components/common/filters/TagsFilter.js b/openbas-front/src/admin/components/common/filters/TagsFilter.js index 6e31296270..c552e54bf5 100644 --- a/openbas-front/src/admin/components/common/filters/TagsFilter.js +++ b/openbas-front/src/admin/components/common/filters/TagsFilter.js @@ -2,10 +2,7 @@ import { LabelOutlined } from '@mui/icons-material'; import { Autocomplete, Box, Chip, TextField } from '@mui/material'; import { makeStyles } from '@mui/styles'; import * as R from 'ramda'; -import { useEffect } from 'react'; -import { useDispatch } from 'react-redux'; -import { fetchTags } from '../../../../actions/Tag'; import { useFormatter } from '../../../../components/i18n'; import { useHelper } from '../../../../store'; @@ -31,12 +28,6 @@ const useStyles = makeStyles(() => ({ const TagsFilter = (props) => { const classes = useStyles(); const { t } = useFormatter(); - const dispatch = useDispatch(); - useEffect(() => { - if (!props.tagsFetched) { - dispatch(fetchTags()); - } - }, []); const tags = useHelper(helper => helper.getTags()); const { onAddTag, onClearTag, onRemoveTag, currentTags, fullWidth } = props; const tagTransform = n => ({ diff --git a/openbas-front/src/admin/components/common/injects/CreateInject.tsx b/openbas-front/src/admin/components/common/injects/CreateInject.tsx index 7b8423d8f9..72fb26d8a0 100644 --- a/openbas-front/src/admin/components/common/injects/CreateInject.tsx +++ b/openbas-front/src/admin/components/common/injects/CreateInject.tsx @@ -5,11 +5,9 @@ import { CSSProperties, FunctionComponent, useEffect, useMemo, useRef, useState import type { AttackPatternStore } from '../../../../actions/attack_patterns/AttackPattern'; import type { AttackPatternHelper } from '../../../../actions/attack_patterns/attackpattern-helper'; -import { fetchAttackPatterns } from '../../../../actions/AttackPattern'; import { searchInjectorContracts } from '../../../../actions/InjectorContracts'; import type { InjectorHelper } from '../../../../actions/injectors/injector-helper'; import type { KillChainPhaseHelper } from '../../../../actions/kill_chain_phases/killchainphase-helper'; -import { fetchKillChainPhases } from '../../../../actions/KillChainPhase'; import Drawer from '../../../../components/common/Drawer'; import { buildEmptyFilter } from '../../../../components/common/queryable/filter/FilterUtils'; import { initSorting } from '../../../../components/common/queryable/Page'; @@ -21,8 +19,6 @@ import { useFormatter } from '../../../../components/i18n'; import PlatformIcon from '../../../../components/PlatformIcon'; import { useHelper } from '../../../../store'; import type { FilterGroup, Inject, InjectorContractOutput, KillChainPhase } from '../../../../utils/api-types'; -import { useAppDispatch } from '../../../../utils/hooks'; -import useDataLoader from '../../../../utils/hooks/useDataLoader'; import computeAttackPatterns from '../../../../utils/injector_contract/InjectorContractUtils'; import { isNotEmptyField } from '../../../../utils/utils'; import CreateInjectDetails from './CreateInjectDetails'; @@ -89,7 +85,6 @@ const CreateInject: FunctionComponent = ({ title, onCreateInject, open = // Standard hooks const classes = useStyles(); const drawerRef = useRef(null); - const dispatch = useAppDispatch(); const { t, tPick } = useFormatter(); // Fetching data @@ -98,10 +93,6 @@ const CreateInject: FunctionComponent = ({ title, onCreateInject, open = attackPatternsMap: helper.getAttackPatternsMap(), killChainPhasesMap: helper.getKillChainPhasesMap(), })); - useDataLoader(() => { - dispatch(fetchKillChainPhases()); - dispatch(fetchAttackPatterns()); - }); // Headers const headers: Header[] = useMemo(() => [ diff --git a/openbas-front/src/admin/components/common/injects/CreateInjectDetails.js b/openbas-front/src/admin/components/common/injects/CreateInjectDetails.js index 1b70fa4d10..4dabd93399 100644 --- a/openbas-front/src/admin/components/common/injects/CreateInjectDetails.js +++ b/openbas-front/src/admin/components/common/injects/CreateInjectDetails.js @@ -6,11 +6,8 @@ import * as R from 'ramda'; import { useContext, useState } from 'react'; import { Form } from 'react-final-form'; -import { fetchTags } from '../../../../actions/Tag'; import { useFormatter } from '../../../../components/i18n'; import { useHelper } from '../../../../store'; -import { useAppDispatch } from '../../../../utils/hooks'; -import useDataLoader from '../../../../utils/hooks/useDataLoader'; import { isEmptyField, isNotEmptyField } from '../../../../utils/utils'; import { PermissionsContext } from '../Context'; import InjectDefinition from './InjectDefinition'; @@ -83,13 +80,10 @@ const CreateInjectDetails = ({ const { permissions } = useContext(PermissionsContext); const [openDetails, setOpenDetails] = useState(false); const [injectDetailsState, setInjectDetailsState] = useState({}); - const dispatch = useAppDispatch(); + const { tagsMap } = useHelper(helper => ({ tagsMap: helper.getTagsMap(), })); - useDataLoader(() => { - dispatch(fetchTags()); - }); const toggleInjectContent = () => { if (openDetails) { drawerRef.current.scrollTop = 0; diff --git a/openbas-front/src/admin/components/common/injects/InjectAddTeams.tsx b/openbas-front/src/admin/components/common/injects/InjectAddTeams.tsx index 470a3d1453..8eb3f8b90e 100644 --- a/openbas-front/src/admin/components/common/injects/InjectAddTeams.tsx +++ b/openbas-front/src/admin/components/common/injects/InjectAddTeams.tsx @@ -3,7 +3,6 @@ import { Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, ListIte import { makeStyles } from '@mui/styles'; import { FunctionComponent, useContext, useEffect, useMemo, useState } from 'react'; -import { fetchTags } from '../../../../actions/Tag'; import type { TeamStore } from '../../../../actions/teams/Team'; import { findTeams } from '../../../../actions/teams/team-actions'; import PaginationComponentV2 from '../../../../components/common/queryable/pagination/PaginationComponentV2'; @@ -15,8 +14,6 @@ import { useFormatter } from '../../../../components/i18n'; import ItemTags from '../../../../components/ItemTags'; import type { Theme } from '../../../../components/Theme'; import type { TeamOutput } from '../../../../utils/api-types'; -import { useAppDispatch } from '../../../../utils/hooks'; -import useDataLoader from '../../../../utils/hooks/useDataLoader'; import type { EndpointStore } from '../../assets/endpoints/Endpoint'; import CreateTeam from '../../components/teams/CreateTeam'; import { PermissionsContext, TeamContext } from '../Context'; @@ -45,15 +42,9 @@ const InjectAddTeams: FunctionComponent = ({ // Standard hooks const { t } = useFormatter(); const classes = useStyles(); - const dispatch = useAppDispatch(); const { permissions } = useContext(PermissionsContext); const { searchTeams } = useContext(TeamContext); - // Fetch datas - useDataLoader(() => { - dispatch(fetchTags()); - }); - const [teamValues, setTeamValues] = useState([]); const [selectedTeamValues, setSelectedTeamValues] = useState([]); diff --git a/openbas-front/src/admin/components/common/injects/UpdateInjectDetails.js b/openbas-front/src/admin/components/common/injects/UpdateInjectDetails.js index ec43fe8217..7b8b04124a 100644 --- a/openbas-front/src/admin/components/common/injects/UpdateInjectDetails.js +++ b/openbas-front/src/admin/components/common/injects/UpdateInjectDetails.js @@ -6,12 +6,9 @@ import * as R from 'ramda'; import { useContext, useState } from 'react'; import { Form } from 'react-final-form'; -import { fetchTags } from '../../../../actions/Tag'; import { useFormatter } from '../../../../components/i18n'; import PlatformIcon from '../../../../components/PlatformIcon'; import { useHelper } from '../../../../store'; -import { useAppDispatch } from '../../../../utils/hooks'; -import useDataLoader from '../../../../utils/hooks/useDataLoader'; import { tagOptions } from '../../../../utils/Option'; import { splitDuration } from '../../../../utils/Time'; import { isEmptyField } from '../../../../utils/utils'; @@ -65,13 +62,9 @@ const UpdateInjectDetails = ({ const { permissions } = useContext(PermissionsContext); const [openDetails, setOpenDetails] = useState(true); const [injectDetailsState, setInjectDetailsState] = useState({}); - const dispatch = useAppDispatch(); const { tagsMap } = useHelper(helper => ({ tagsMap: helper.getTagsMap(), })); - useDataLoader(() => { - dispatch(fetchTags()); - }); const toggleInjectContent = () => { if (openDetails) { diff --git a/openbas-front/src/admin/components/common/matrix/MitreMatrix.tsx b/openbas-front/src/admin/components/common/matrix/MitreMatrix.tsx index 8ac9405eb1..badd185c8d 100644 --- a/openbas-front/src/admin/components/common/matrix/MitreMatrix.tsx +++ b/openbas-front/src/admin/components/common/matrix/MitreMatrix.tsx @@ -4,14 +4,10 @@ import { FunctionComponent } from 'react'; import type { AttackPatternStore } from '../../../../actions/attack_patterns/AttackPattern'; import type { AttackPatternHelper } from '../../../../actions/attack_patterns/attackpattern-helper'; -import { fetchAttackPatterns } from '../../../../actions/AttackPattern'; import type { InjectExpectationResultsByAttackPatternStore } from '../../../../actions/exercises/Exercise'; import type { KillChainPhaseHelper } from '../../../../actions/kill_chain_phases/killchainphase-helper'; -import { fetchKillChainPhases } from '../../../../actions/KillChainPhase'; import { useHelper } from '../../../../store'; import type { AttackPattern, KillChainPhase } from '../../../../utils/api-types'; -import { useAppDispatch } from '../../../../utils/hooks'; -import useDataLoader from '../../../../utils/hooks/useDataLoader'; import KillChainPhaseColumn from './KillChainPhaseColumn'; import MitreMatrixDummy from './MitreMatrixDummy'; @@ -29,17 +25,14 @@ const useStyles = makeStyles(() => ({ interface Props { goToLink?: string; injectResults: InjectExpectationResultsByAttackPatternStore[]; - ttpAlreadyLoaded?: boolean; } const MitreMatrix: FunctionComponent = ({ goToLink, injectResults, - ttpAlreadyLoaded, }) => { // Standard hooks const classes = useStyles(); - const dispatch = useAppDispatch(); // Fetching data const { attackPatternMap, killChainPhaseMap }: { attackPatternMap: Record; @@ -48,15 +41,9 @@ const MitreMatrix: FunctionComponent = ({ attackPatternMap: helper.getAttackPatternsMap(), killChainPhaseMap: helper.getKillChainPhasesMap(), })); - if (!ttpAlreadyLoaded) { - useDataLoader(() => { - dispatch(fetchKillChainPhases()); - dispatch(fetchAttackPatterns()); - }); - } if (!injectResults) { - return ; + return ; } // Attack Pattern diff --git a/openbas-front/src/admin/components/common/matrix/MitreMatrixDummy.tsx b/openbas-front/src/admin/components/common/matrix/MitreMatrixDummy.tsx index 1bb4992af1..9495948c57 100644 --- a/openbas-front/src/admin/components/common/matrix/MitreMatrixDummy.tsx +++ b/openbas-front/src/admin/components/common/matrix/MitreMatrixDummy.tsx @@ -4,13 +4,9 @@ import { FunctionComponent } from 'react'; import type { AttackPatternStore } from '../../../../actions/attack_patterns/AttackPattern'; import type { AttackPatternHelper } from '../../../../actions/attack_patterns/attackpattern-helper'; -import { fetchAttackPatterns } from '../../../../actions/AttackPattern'; import type { KillChainPhaseHelper } from '../../../../actions/kill_chain_phases/killchainphase-helper'; -import { fetchKillChainPhases } from '../../../../actions/KillChainPhase'; import { useHelper } from '../../../../store'; import type { AttackPattern, KillChainPhase } from '../../../../utils/api-types'; -import { useAppDispatch } from '../../../../utils/hooks'; -import useDataLoader from '../../../../utils/hooks/useDataLoader'; import { random } from '../../../../utils/Number'; import KillChainPhaseColumn from './KillChainPhaseColumn'; @@ -26,14 +22,9 @@ const useStyles = makeStyles(() => ({ }, })); -interface Props { - ttpAlreadyLoaded?: boolean; -} - -const MitreMatrixDummy: FunctionComponent = ({ ttpAlreadyLoaded }) => { +const MitreMatrixDummy: FunctionComponent = () => { // Standard hooks const classes = useStyles(); - const dispatch = useAppDispatch(); // Fetching data const { attackPatterns, killChainPhaseMap }: { attackPatterns: AttackPattern[]; @@ -43,15 +34,7 @@ const MitreMatrixDummy: FunctionComponent = ({ ttpAlreadyLoaded }) => { killChainPhaseMap: helper.getKillChainPhasesMap(), })); - if (!ttpAlreadyLoaded) { - useDataLoader(() => { - dispatch(fetchKillChainPhases()); - dispatch(fetchAttackPatterns()); - }); - } - // Attack Pattern - - // Kill Chain Phase + // Attack Pattern & Kill Chain Phase const sortKillChainPhase = (k1: KillChainPhase, k2: KillChainPhase) => { return (k1.phase_order ?? 0) - (k2.phase_order ?? 0); }; diff --git a/openbas-front/src/admin/components/components/challenges/Challenges.js b/openbas-front/src/admin/components/components/challenges/Challenges.js index deee57d219..6868385b05 100644 --- a/openbas-front/src/admin/components/components/challenges/Challenges.js +++ b/openbas-front/src/admin/components/components/challenges/Challenges.js @@ -8,7 +8,6 @@ import { Link } from 'react-router-dom'; import { fetchChallenges } from '../../../../actions/Challenge'; import { fetchDocuments } from '../../../../actions/Document'; import { fetchExercises } from '../../../../actions/Exercise'; -import { fetchTags } from '../../../../actions/Tag'; import Breadcrumbs from '../../../../components/Breadcrumbs'; import { useFormatter } from '../../../../components/i18n'; import ItemTags from '../../../../components/ItemTags'; @@ -153,7 +152,6 @@ const Challenges = () => { useDataLoader(() => { dispatch(fetchExercises()); dispatch(fetchChallenges()); - dispatch(fetchTags()); dispatch(fetchDocuments()); }); const sortedChallenges = filtering.filterAndSort(challenges); diff --git a/openbas-front/src/admin/components/components/documents/Documents.js b/openbas-front/src/admin/components/components/documents/Documents.js index 4e96aff4f6..2ecc2f7ce8 100644 --- a/openbas-front/src/admin/components/components/documents/Documents.js +++ b/openbas-front/src/admin/components/components/documents/Documents.js @@ -9,7 +9,6 @@ import { useNavigate } from 'react-router-dom'; import { searchDocuments } from '../../../../actions/Document'; import { fetchExercises } from '../../../../actions/Exercise'; import { fetchScenarios } from '../../../../actions/scenarios/scenario-actions'; -import { fetchTags } from '../../../../actions/Tag'; import Breadcrumbs from '../../../../components/Breadcrumbs'; import PaginationComponent from '../../../../components/common/pagination/PaginationComponent'; import SortHeadersComponent from '../../../../components/common/pagination/SortHeadersComponent'; @@ -96,7 +95,6 @@ const Documents = () => { useDataLoader(() => { dispatch(fetchExercises()); dispatch(fetchScenarios()); - dispatch(fetchTags()); }); // Headers diff --git a/openbas-front/src/admin/components/components/teams/Teams.tsx b/openbas-front/src/admin/components/components/teams/Teams.tsx index be5fa8d222..e44b2c91c4 100644 --- a/openbas-front/src/admin/components/components/teams/Teams.tsx +++ b/openbas-front/src/admin/components/components/teams/Teams.tsx @@ -6,7 +6,6 @@ import { useSearchParams } from 'react-router-dom'; import type { EndpointHelper } from '../../../../actions/assets/asset-helper'; import type { TagHelper, UserHelper } from '../../../../actions/helper'; -import { fetchTags } from '../../../../actions/Tag'; import type { TeamStore } from '../../../../actions/teams/Team'; import { searchTeams } from '../../../../actions/teams/team-actions'; import Breadcrumbs from '../../../../components/Breadcrumbs'; @@ -19,7 +18,6 @@ import ItemTags from '../../../../components/ItemTags'; import { useHelper } from '../../../../store'; import type { SearchPaginationInput } from '../../../../utils/api-types'; import { useAppDispatch } from '../../../../utils/hooks'; -import useDataLoader from '../../../../utils/hooks/useDataLoader'; import CreateTeam from './CreateTeam'; import TeamPlayers from './TeamPlayers'; import TeamPopover from './TeamPopover'; @@ -89,9 +87,6 @@ const Teams = () => { const { userAdmin } = useHelper((helper: EndpointHelper & UserHelper & TagHelper) => ({ userAdmin: helper.getMe()?.user_admin ?? false, })); - useDataLoader(() => { - dispatch(fetchTags()); - }); // Headers const headers = [ diff --git a/openbas-front/src/admin/components/components/teams/UpdateTeams.tsx b/openbas-front/src/admin/components/components/teams/UpdateTeams.tsx index c64de73bcd..e6cf33b35e 100644 --- a/openbas-front/src/admin/components/components/teams/UpdateTeams.tsx +++ b/openbas-front/src/admin/components/components/teams/UpdateTeams.tsx @@ -4,7 +4,6 @@ import { makeStyles } from '@mui/styles'; import { useContext, useEffect, useMemo, useState } from 'react'; import * as React from 'react'; -import { fetchTags } from '../../../../actions/Tag'; import type { TeamStore } from '../../../../actions/teams/Team'; import { findTeams } from '../../../../actions/teams/team-actions'; import PaginationComponentV2 from '../../../../components/common/queryable/pagination/PaginationComponentV2'; @@ -15,8 +14,6 @@ import Transition from '../../../../components/common/Transition'; import { useFormatter } from '../../../../components/i18n'; import ItemTags from '../../../../components/ItemTags'; import type { Team, TeamOutput } from '../../../../utils/api-types'; -import { useAppDispatch } from '../../../../utils/hooks'; -import useDataLoader from '../../../../utils/hooks/useDataLoader'; import type { EndpointStore } from '../../assets/endpoints/Endpoint'; import { TeamContext } from '../../common/Context'; import CreateTeam from './CreateTeam'; @@ -40,14 +37,8 @@ const UpdateTeams: React.FC = ({ // Standard hooks const { t } = useFormatter(); const classes = useStyles(); - const dispatch = useAppDispatch(); const { searchTeams, onReplaceTeam } = useContext(TeamContext); - // Fetch datas - useDataLoader(() => { - dispatch(fetchTags()); - }); - const [teamValues, setTeamValues] = useState([]); const [selectedTeamValues, setSelectedTeamValues] = useState([]); diff --git a/openbas-front/src/admin/components/integrations/injectors/InjectorContracts.js b/openbas-front/src/admin/components/integrations/injectors/InjectorContracts.js index def614c878..29c5ed110b 100644 --- a/openbas-front/src/admin/components/integrations/injectors/InjectorContracts.js +++ b/openbas-front/src/admin/components/integrations/injectors/InjectorContracts.js @@ -3,18 +3,14 @@ import { Chip, List, ListItem, ListItemIcon, ListItemSecondaryAction, ListItemTe import { makeStyles } from '@mui/styles'; import * as R from 'ramda'; import { useState } from 'react'; -import { useDispatch } from 'react-redux'; import { useParams } from 'react-router-dom'; -import { fetchAttackPatterns } from '../../../../actions/AttackPattern'; import { searchInjectorContracts } from '../../../../actions/InjectorContracts'; -import { fetchKillChainPhases } from '../../../../actions/KillChainPhase'; import PaginationComponent from '../../../../components/common/pagination/PaginationComponent'; import SortHeadersComponent from '../../../../components/common/pagination/SortHeadersComponent'; import { initSorting } from '../../../../components/common/queryable/Page'; import { useFormatter } from '../../../../components/i18n'; import { useHelper } from '../../../../store'; -import useDataLoader from '../../../../utils/hooks/useDataLoader'; import CreateInjectorContract from './injector_contracts/CreateInjectorContract'; import InjectorContractPopover from './injector_contracts/InjectorContractPopover'; @@ -101,7 +97,6 @@ const inlineStyles = { const InjectorContracts = () => { // Standard hooks const classes = useStyles(); - const dispatch = useDispatch(); const { injectorId } = useParams(); const { t, tPick, nsdt } = useFormatter(); const { injector, attackPatternsMap, killChainPhasesMap } = useHelper(helper => ({ @@ -109,10 +104,6 @@ const InjectorContracts = () => { attackPatternsMap: helper.getAttackPatternsMap(), killChainPhasesMap: helper.getKillChainPhasesMap(), })); - useDataLoader(() => { - dispatch(fetchKillChainPhases()); - dispatch(fetchAttackPatterns()); - }); // Headers const headers = [ diff --git a/openbas-front/src/admin/components/mitigations/Mitigations.js b/openbas-front/src/admin/components/mitigations/Mitigations.js index 150f8854c0..b637bc7553 100644 --- a/openbas-front/src/admin/components/mitigations/Mitigations.js +++ b/openbas-front/src/admin/components/mitigations/Mitigations.js @@ -2,10 +2,7 @@ import { DynamicFormOutlined } from '@mui/icons-material'; import { List, ListItem, ListItemIcon, ListItemSecondaryAction, ListItemText } from '@mui/material'; import { makeStyles } from '@mui/styles'; import { useState } from 'react'; -import { useDispatch } from 'react-redux'; -import { fetchAttackPatterns } from '../../../actions/AttackPattern'; -import { fetchKillChainPhases } from '../../../actions/KillChainPhase'; import { searchMitigations } from '../../../actions/Mitigation'; import Breadcrumbs from '../../../components/Breadcrumbs'; import PaginationComponent from '../../../components/common/pagination/PaginationComponent'; @@ -13,7 +10,6 @@ import SortHeadersComponent from '../../../components/common/pagination/SortHead import { initSorting } from '../../../components/common/queryable/Page'; import { useFormatter } from '../../../components/i18n'; import { useHelper } from '../../../store'; -import useDataLoader from '../../../utils/hooks/useDataLoader'; import CreateMitigation from './CreateMitigation'; import MitigationPopover from './MitigationPopover'; @@ -100,16 +96,11 @@ const inlineStyles = { const Mitigations = () => { // Standard hooks const classes = useStyles(); - const dispatch = useDispatch(); const { t, nsdt } = useFormatter(); const { attackPatternsMap, killChainPhasesMap } = useHelper(helper => ({ attackPatternsMap: helper.getAttackPatternsMap(), killChainPhasesMap: helper.getKillChainPhasesMap(), })); - useDataLoader(() => { - dispatch(fetchAttackPatterns()); - dispatch(fetchKillChainPhases()); - }); // Headers const headers = [ diff --git a/openbas-front/src/admin/components/scenarios/Scenarios.tsx b/openbas-front/src/admin/components/scenarios/Scenarios.tsx index 8619d5f594..c94a6282d2 100644 --- a/openbas-front/src/admin/components/scenarios/Scenarios.tsx +++ b/openbas-front/src/admin/components/scenarios/Scenarios.tsx @@ -8,7 +8,6 @@ import { fetchStatistics } from '../../../actions/Application'; import type { TagHelper, UserHelper } from '../../../actions/helper'; import type { ScenarioStore } from '../../../actions/scenarios/Scenario'; import { searchScenarios } from '../../../actions/scenarios/scenario-actions'; -import { fetchTags } from '../../../actions/Tag'; import Breadcrumbs from '../../../components/Breadcrumbs'; import ExportButton from '../../../components/common/ExportButton'; import { buildEmptyFilter } from '../../../components/common/queryable/filter/FilterUtils'; @@ -25,7 +24,6 @@ import PlatformIcon from '../../../components/PlatformIcon'; import { useHelper } from '../../../store'; import type { FilterGroup } from '../../../utils/api-types'; import { useAppDispatch } from '../../../utils/hooks'; -import useDataLoader from '../../../utils/hooks/useDataLoader'; import ImportUploaderScenario from './ImportUploaderScenario'; import ScenarioPopover from './scenario/ScenarioPopover'; import ScenarioStatus from './scenario/ScenarioStatus'; @@ -77,7 +75,6 @@ const inlineStyles: Record = { const Scenarios = () => { // Standard hooks - const dispatch = useAppDispatch(); const classes = useStyles(); const { t, nsdt } = useFormatter(); @@ -85,9 +82,6 @@ const Scenarios = () => { const { userAdmin } = useHelper((helper: TagHelper & UserHelper) => ({ userAdmin: helper.getMe()?.user_admin ?? false, })); - useDataLoader(() => { - dispatch(fetchTags()); - }); // Headers const headers = useMemo(() => [ diff --git a/openbas-front/src/admin/components/settings/attack_patterns/AttackPatterns.js b/openbas-front/src/admin/components/settings/attack_patterns/AttackPatterns.js index 91cf2c47fe..f8b7a81415 100644 --- a/openbas-front/src/admin/components/settings/attack_patterns/AttackPatterns.js +++ b/openbas-front/src/admin/components/settings/attack_patterns/AttackPatterns.js @@ -2,17 +2,14 @@ import { List, ListItem, ListItemIcon, ListItemSecondaryAction, ListItemText } f import { makeStyles } from '@mui/styles'; import { LockPattern } from 'mdi-material-ui'; import { useState } from 'react'; -import { useDispatch } from 'react-redux'; import { searchAttackPatterns } from '../../../../actions/AttackPattern'; -import { fetchKillChainPhases } from '../../../../actions/KillChainPhase'; import Breadcrumbs from '../../../../components/Breadcrumbs'; import PaginationComponent from '../../../../components/common/pagination/PaginationComponent'; import SortHeadersComponent from '../../../../components/common/pagination/SortHeadersComponent'; import { initSorting } from '../../../../components/common/queryable/Page'; import { useFormatter } from '../../../../components/i18n'; import { useHelper } from '../../../../store'; -import useDataLoader from '../../../../utils/hooks/useDataLoader'; import TaxonomiesMenu from '../TaxonomiesMenu'; import AttackPatternPopover from './AttackPatternPopover'; import CreateAttackPattern from './CreateAttackPattern'; @@ -66,14 +63,10 @@ const inlineStyles = { const AttackPatterns = () => { // Standard hooks const classes = useStyles(); - const dispatch = useDispatch(); const { t, nsdt } = useFormatter(); const { killChainPhasesMap } = useHelper(helper => ({ killChainPhasesMap: helper.getKillChainPhasesMap(), })); - useDataLoader(() => { - dispatch(fetchKillChainPhases()); - }); // Headers const headers = [ diff --git a/openbas-front/src/admin/components/settings/groups/Groups.js b/openbas-front/src/admin/components/settings/groups/Groups.js index adb7616b81..5e73fa9305 100644 --- a/openbas-front/src/admin/components/settings/groups/Groups.js +++ b/openbas-front/src/admin/components/settings/groups/Groups.js @@ -8,7 +8,6 @@ import { fetchExercises } from '../../../../actions/Exercise'; import { searchGroups } from '../../../../actions/Group'; import { fetchOrganizations } from '../../../../actions/Organization'; import { fetchScenarios } from '../../../../actions/scenarios/scenario-actions'; -import { fetchTags } from '../../../../actions/Tag'; import { fetchUsers } from '../../../../actions/User'; import Breadcrumbs from '../../../../components/Breadcrumbs'; import PaginationComponent from '../../../../components/common/pagination/PaginationComponent'; @@ -86,7 +85,6 @@ const Groups = () => { dispatch(fetchUsers()); dispatch(fetchExercises()); dispatch(fetchScenarios()); - dispatch(fetchTags()); }); // Headers diff --git a/openbas-front/src/admin/components/settings/users/Users.js b/openbas-front/src/admin/components/settings/users/Users.js index 386a0c20fb..48bb0fdc7b 100644 --- a/openbas-front/src/admin/components/settings/users/Users.js +++ b/openbas-front/src/admin/components/settings/users/Users.js @@ -5,7 +5,6 @@ import { useState } from 'react'; import { useDispatch } from 'react-redux'; import { fetchOrganizations } from '../../../../actions/Organization'; -import { fetchTags } from '../../../../actions/Tag'; import { searchUsers } from '../../../../actions/User'; import Breadcrumbs from '../../../../components/Breadcrumbs'; import PaginationComponent from '../../../../components/common/pagination/PaginationComponent'; @@ -78,7 +77,6 @@ const Users = () => { tagsMap: helper.getTagsMap(), })); useDataLoader(() => { - dispatch(fetchTags()); dispatch(fetchOrganizations()); }); diff --git a/openbas-front/src/admin/components/simulations/ExerciseList.tsx b/openbas-front/src/admin/components/simulations/ExerciseList.tsx index 2f1aef1a0f..3e6302dcd5 100644 --- a/openbas-front/src/admin/components/simulations/ExerciseList.tsx +++ b/openbas-front/src/admin/components/simulations/ExerciseList.tsx @@ -6,7 +6,6 @@ import * as React from 'react'; import { Link } from 'react-router-dom'; import type { ExerciseSimpleStore, ExerciseStore } from '../../../actions/exercises/Exercise'; -import { fetchTags } from '../../../actions/Tag'; import { QueryableHelpers } from '../../../components/common/queryable/QueryableHelpers'; import SortHeadersComponentV2 from '../../../components/common/queryable/sort/SortHeadersComponentV2'; import { Header } from '../../../components/common/SortHeadersList'; @@ -14,8 +13,6 @@ import { useFormatter } from '../../../components/i18n'; import ItemTags from '../../../components/ItemTags'; import ItemTargets from '../../../components/ItemTargets'; import type { ExerciseSimple } from '../../../utils/api-types'; -import { useAppDispatch } from '../../../utils/hooks'; -import useDataLoader from '../../../utils/hooks/useDataLoader'; import AtomicTestingResult from '../atomic_testings/atomic_testing/AtomicTestingResult'; import ExerciseStatus from './simulation/ExerciseStatus'; @@ -82,16 +79,10 @@ const ExerciseList: FunctionComponent = ({ secondaryAction, }) => { // Standard hooks - const dispatch = useAppDispatch(); const classes = useStyles(); const inlineStyles = getInlineStyles(variant); const { nsdt, vnsdt } = useFormatter(); - // Fetching data - useDataLoader(() => { - dispatch(fetchTags()); - }); - // Headers const headers: Header[] = [ { diff --git a/openbas-front/src/admin/components/simulations/simulation/controls/Comcheck.js b/openbas-front/src/admin/components/simulations/simulation/controls/Comcheck.js index 38f157b401..b2428d71e3 100644 --- a/openbas-front/src/admin/components/simulations/simulation/controls/Comcheck.js +++ b/openbas-front/src/admin/components/simulations/simulation/controls/Comcheck.js @@ -7,7 +7,6 @@ import { useParams } from 'react-router-dom'; import { fetchComcheck, fetchComcheckStatuses } from '../../../../../actions/Comcheck'; import { fetchOrganizations } from '../../../../../actions/Organization'; -import { fetchTags } from '../../../../../actions/Tag'; import { fetchPlayers } from '../../../../../actions/User'; import { useFormatter } from '../../../../../components/i18n'; import ItemTags from '../../../../../components/ItemTags'; @@ -221,7 +220,6 @@ const Comcheck = () => { }); // Fetching data useDataLoader(() => { - dispatch(fetchTags()); dispatch(fetchOrganizations()); dispatch(fetchPlayers()); dispatch(fetchComcheck(exerciseId, comcheckId)); diff --git a/openbas-front/src/admin/components/simulations/simulation/controls/Dryrun.js b/openbas-front/src/admin/components/simulations/simulation/controls/Dryrun.js index bd7ce99a7b..15d6a1ee11 100644 --- a/openbas-front/src/admin/components/simulations/simulation/controls/Dryrun.js +++ b/openbas-front/src/admin/components/simulations/simulation/controls/Dryrun.js @@ -6,7 +6,6 @@ import { useParams } from 'react-router-dom'; import { fetchDryinjects } from '../../../../../actions/Dryinject'; import { fetchDryrun } from '../../../../../actions/Dryrun'; -import { fetchTags } from '../../../../../actions/Tag'; import { fetchPlayers } from '../../../../../actions/User'; import { useFormatter } from '../../../../../components/i18n'; import ItemStatus from '../../../../../components/ItemStatus'; @@ -184,7 +183,6 @@ const Dryrun = () => { }; }); useDataLoader(() => { - dispatch(fetchTags()); dispatch(fetchPlayers()); dispatch(fetchDryrun(exerciseId, dryrunId)); dispatch(fetchDryinjects(exerciseId, dryrunId)); diff --git a/openbas-front/src/admin/components/simulations/simulation/injects/CreateQuickInject.js b/openbas-front/src/admin/components/simulations/simulation/injects/CreateQuickInject.js index f0d1de0665..ec3fdd6b6e 100644 --- a/openbas-front/src/admin/components/simulations/simulation/injects/CreateQuickInject.js +++ b/openbas-front/src/admin/components/simulations/simulation/injects/CreateQuickInject.js @@ -9,7 +9,6 @@ import { connect } from 'react-redux'; import { fetchExercises } from '../../../../../actions/Exercise'; import { fetchInjectorContract } from '../../../../../actions/InjectorContracts'; import { storeHelper } from '../../../../../actions/Schema'; -import { fetchTags } from '../../../../../actions/Tag'; import inject18n from '../../../../../components/i18n'; import QuickInject, { EMAIL_CONTRACT } from './QuickInject'; @@ -105,7 +104,6 @@ const select = (state) => { export default R.compose( connect(select, { fetchExercises, - fetchTags, fetchInjectorContract, }), inject18n, diff --git a/openbas-front/src/admin/components/teams/Organizations.tsx b/openbas-front/src/admin/components/teams/Organizations.tsx index 9cc942ac85..8be442e771 100644 --- a/openbas-front/src/admin/components/teams/Organizations.tsx +++ b/openbas-front/src/admin/components/teams/Organizations.tsx @@ -7,7 +7,6 @@ import { useSearchParams } from 'react-router-dom'; import type { OrganizationHelper, TagHelper, UserHelper } from '../../../actions/helper'; import { fetchOrganizations } from '../../../actions/Organization'; -import { fetchTags } from '../../../actions/Tag'; import Breadcrumbs from '../../../components/Breadcrumbs'; import { useFormatter } from '../../../components/i18n'; import ItemTags from '../../../components/ItemTags'; @@ -107,7 +106,6 @@ const Organizations = () => { })); useDataLoader(() => { - dispatch(fetchTags()); dispatch(fetchOrganizations()); }); diff --git a/openbas-front/src/admin/components/teams/Players.tsx b/openbas-front/src/admin/components/teams/Players.tsx index d3d5a94db5..a9cbb0d025 100644 --- a/openbas-front/src/admin/components/teams/Players.tsx +++ b/openbas-front/src/admin/components/teams/Players.tsx @@ -7,7 +7,6 @@ import { useSearchParams } from 'react-router-dom'; import type { OrganizationHelper, UserHelper } from '../../../actions/helper'; import { fetchOrganizations } from '../../../actions/Organization'; import { searchPlayers } from '../../../actions/players/player-actions'; -import { fetchTags } from '../../../actions/Tag'; import Breadcrumbs from '../../../components/Breadcrumbs'; import ExportButton from '../../../components/common/ExportButton'; import { initSorting } from '../../../components/common/queryable/Page'; @@ -78,7 +77,6 @@ const Players = () => { })); useDataLoader(() => { - dispatch(fetchTags()); dispatch(fetchOrganizations()); }); diff --git a/openbas-front/src/components/AttackPatternField.tsx b/openbas-front/src/components/AttackPatternField.tsx index f60ae40b63..a56c9d83a8 100644 --- a/openbas-front/src/components/AttackPatternField.tsx +++ b/openbas-front/src/components/AttackPatternField.tsx @@ -5,15 +5,13 @@ import * as R from 'ramda'; import { FunctionComponent, useState } from 'react'; import type { AttackPatternHelper } from '../actions/attack_patterns/attackpattern-helper'; -import { addAttackPattern, fetchAttackPatterns } from '../actions/AttackPattern'; +import { addAttackPattern } from '../actions/AttackPattern'; import type { UserHelper } from '../actions/helper'; import type { KillChainPhaseHelper } from '../actions/kill_chain_phases/killchainphase-helper'; -import { fetchKillChainPhases } from '../actions/KillChainPhase'; import AttackPatternForm from '../admin/components/settings/attack_patterns/AttackPatternForm'; import { useHelper } from '../store'; import type { AttackPattern, AttackPatternCreateInput } from '../utils/api-types'; import { useAppDispatch } from '../utils/hooks'; -import useDataLoader from '../utils/hooks/useDataLoader'; import { Option } from '../utils/Option'; import { useFormatter } from './i18n'; @@ -58,10 +56,6 @@ const AttackPatternField: FunctionComponent = ({ killChainPhasesMap: helper.getKillChainPhasesMap(), userAdmin: helper.getMe()?.user_admin ?? false, })); - useDataLoader(() => { - dispatch(fetchAttackPatterns()); - dispatch(fetchKillChainPhases()); - }); const [attackPatternCreation, setAttackPatternCreation] = useState(false); diff --git a/openbas-front/src/components/KillChainPhaseField.js b/openbas-front/src/components/KillChainPhaseField.js index 0bf0684608..19164a0711 100644 --- a/openbas-front/src/components/KillChainPhaseField.js +++ b/openbas-front/src/components/KillChainPhaseField.js @@ -5,7 +5,7 @@ import * as R from 'ramda'; import { Component } from 'react'; import { connect } from 'react-redux'; -import { addKillChainPhase, fetchKillChainPhases } from '../actions/KillChainPhase'; +import { addKillChainPhase } from '../actions/KillChainPhase'; import { storeHelper } from '../actions/Schema'; import KillChainPhaseForm from '../admin/components/settings/kill_chain_phases/KillChainPhaseForm'; import Autocomplete from './Autocomplete'; @@ -32,10 +32,6 @@ class KillChainPhaseField extends Component { this.state = { killChainPhaseCreation: false, killChainPhaseInput: '' }; } - componentDidMount() { - this.props.fetchKillChainPhases(); - } - handleOpenKillChainPhaseCreation() { this.setState({ killChainPhaseCreation: true }); } @@ -134,7 +130,7 @@ const select = (state) => { }; export default R.compose( - connect(select, { fetchKillChainPhases, addKillChainPhase }), + connect(select, { addKillChainPhase }), inject18n, withStyles(styles), )(KillChainPhaseField); diff --git a/openbas-front/src/components/TagField.js b/openbas-front/src/components/TagField.js index 6187323882..3f837c71c9 100644 --- a/openbas-front/src/components/TagField.js +++ b/openbas-front/src/components/TagField.js @@ -6,7 +6,7 @@ import { Component } from 'react'; import { connect } from 'react-redux'; import { storeHelper } from '../actions/Schema'; -import { addTag, fetchTags } from '../actions/Tag'; +import { addTag } from '../actions/Tag'; import TagForm from '../admin/components/settings/tags/TagForm'; import Autocomplete from './Autocomplete'; import inject18n from './i18n'; @@ -32,10 +32,6 @@ class TagField extends Component { this.state = { tagCreation: false, tagInput: '' }; } - componentDidMount() { - this.props.fetchTags(); - } - handleOpenTagCreation() { this.setState({ tagCreation: true }); } @@ -139,7 +135,7 @@ const select = (state) => { }; export default R.compose( - connect(select, { fetchTags, addTag }), + connect(select, { addTag }), inject18n, withStyles(styles), )(TagField); diff --git a/openbas-front/src/components/fields/TagField.tsx b/openbas-front/src/components/fields/TagField.tsx index 684925d767..61a2e309e2 100644 --- a/openbas-front/src/components/fields/TagField.tsx +++ b/openbas-front/src/components/fields/TagField.tsx @@ -6,12 +6,11 @@ import { CSSProperties, FunctionComponent, useState } from 'react'; import { FieldErrors } from 'react-hook-form'; import type { TagHelper, UserHelper } from '../../actions/helper'; -import { addTag, fetchTags } from '../../actions/Tag'; +import { addTag } from '../../actions/Tag'; import TagForm from '../../admin/components/settings/tags/TagForm'; import { useHelper } from '../../store'; import type { Tag } from '../../utils/api-types'; import { useAppDispatch } from '../../utils/hooks'; -import useDataLoader from '../../utils/hooks/useDataLoader'; import { useFormatter } from '../i18n'; const useStyles = makeStyles(() => ({ @@ -56,9 +55,6 @@ const TagField: FunctionComponent = ({ userAdmin: helper.getMe()?.user_admin ?? false, })); const dispatch = useAppDispatch(); - useDataLoader(() => { - dispatch(fetchTags()); - }); // Handle tag creation const [tagCreation, setTagCreation] = useState(false); From 2ec60172b779de7440d0b9a9c9d5ee6664d1158e Mon Sep 17 00:00:00 2001 From: Guillaume Paris Date: Tue, 5 Nov 2024 10:44:53 +0100 Subject: [PATCH 2/2] [frontend] fix lint --- openbas-front/src/admin/components/components/teams/Teams.tsx | 2 -- openbas-front/src/admin/components/scenarios/Scenarios.tsx | 1 - 2 files changed, 3 deletions(-) diff --git a/openbas-front/src/admin/components/components/teams/Teams.tsx b/openbas-front/src/admin/components/components/teams/Teams.tsx index e44b2c91c4..2222d3d603 100644 --- a/openbas-front/src/admin/components/components/teams/Teams.tsx +++ b/openbas-front/src/admin/components/components/teams/Teams.tsx @@ -17,7 +17,6 @@ import { useFormatter } from '../../../../components/i18n'; import ItemTags from '../../../../components/ItemTags'; import { useHelper } from '../../../../store'; import type { SearchPaginationInput } from '../../../../utils/api-types'; -import { useAppDispatch } from '../../../../utils/hooks'; import CreateTeam from './CreateTeam'; import TeamPlayers from './TeamPlayers'; import TeamPopover from './TeamPopover'; @@ -72,7 +71,6 @@ const inlineStyles: Record = { const Teams = () => { // Standard hooks - const dispatch = useAppDispatch(); const classes = useStyles(); const { t, nsdt } = useFormatter(); diff --git a/openbas-front/src/admin/components/scenarios/Scenarios.tsx b/openbas-front/src/admin/components/scenarios/Scenarios.tsx index c94a6282d2..7f234ae345 100644 --- a/openbas-front/src/admin/components/scenarios/Scenarios.tsx +++ b/openbas-front/src/admin/components/scenarios/Scenarios.tsx @@ -23,7 +23,6 @@ import ItemTags from '../../../components/ItemTags'; import PlatformIcon from '../../../components/PlatformIcon'; import { useHelper } from '../../../store'; import type { FilterGroup } from '../../../utils/api-types'; -import { useAppDispatch } from '../../../utils/hooks'; import ImportUploaderScenario from './ImportUploaderScenario'; import ScenarioPopover from './scenario/ScenarioPopover'; import ScenarioStatus from './scenario/ScenarioStatus';