diff --git a/opencti-platform/opencti-front/lang/front/de.json b/opencti-platform/opencti-front/lang/front/de.json index c1f43546a5444..11afa3876dc0f 100644 --- a/opencti-platform/opencti-front/lang/front/de.json +++ b/opencti-platform/opencti-front/lang/front/de.json @@ -339,6 +339,7 @@ "Content": "Inhalt", "Content mapping view": "Ansicht des Content Mappings", "Content max marking definition levels": "Maximale Markierungsdefinitionsstufen für Inhalte", + "Content view": "Ansicht des Inhalts", "contest": "Flüchtige Gruppierung", "Context": "Kontext", "context": "Kontext", diff --git a/opencti-platform/opencti-front/lang/front/en.json b/opencti-platform/opencti-front/lang/front/en.json index 600f200039c10..9dd573312ef0b 100644 --- a/opencti-platform/opencti-front/lang/front/en.json +++ b/opencti-platform/opencti-front/lang/front/en.json @@ -339,6 +339,7 @@ "Content": "Content", "Content mapping view": "Content mapping view", "Content max marking definition levels": "Content max marking definition levels", + "Content view": "Content view", "contest": "Ephemeral groupment", "Context": "Context", "context": "Context", diff --git a/opencti-platform/opencti-front/lang/front/es.json b/opencti-platform/opencti-front/lang/front/es.json index 28d1bea04a9ff..7e23840e9f838 100644 --- a/opencti-platform/opencti-front/lang/front/es.json +++ b/opencti-platform/opencti-front/lang/front/es.json @@ -339,6 +339,7 @@ "Content": "Contenido", "Content mapping view": "Vista de mapeo de contenidos", "Content max marking definition levels": "Niveles de definición de marcado máximo de contenido", + "Content view": "Vista del contenido", "contest": "Movimiento espontáneo", "context": "Contexto", "Context": "Contexto", diff --git a/opencti-platform/opencti-front/lang/front/fr.json b/opencti-platform/opencti-front/lang/front/fr.json index f1bc1d97d8e0f..946f2a30e023d 100644 --- a/opencti-platform/opencti-front/lang/front/fr.json +++ b/opencti-platform/opencti-front/lang/front/fr.json @@ -339,6 +339,7 @@ "Content": "Contenu", "Content mapping view": "Vue de la cartographie du contenu", "Content max marking definition levels": "Niveaux de marquage maximum du contenu", + "Content view": "Vue du contenu", "contest": "Mouvement spontané", "context": "Contexte", "Context": "Contexte", diff --git a/opencti-platform/opencti-front/lang/front/ja.json b/opencti-platform/opencti-front/lang/front/ja.json index a84d7c4b3aa16..8be17b150013f 100644 --- a/opencti-platform/opencti-front/lang/front/ja.json +++ b/opencti-platform/opencti-front/lang/front/ja.json @@ -339,6 +339,7 @@ "Content": "内容", "Content mapping view": "コンテンツマッピングビュー", "Content max marking definition levels": "コンテンツの最大マーキング定義レベル", + "Content view": "コンテンツビュー", "contest": "一時的なグループ", "context": "コンテキスト", "Context": "コンテキスト", diff --git a/opencti-platform/opencti-front/lang/front/zh.json b/opencti-platform/opencti-front/lang/front/zh.json index f23a51eb2e9d9..3250f08b3b298 100644 --- a/opencti-platform/opencti-front/lang/front/zh.json +++ b/opencti-platform/opencti-front/lang/front/zh.json @@ -339,6 +339,7 @@ "Content": "内容", "Content mapping view": "内容映射视图", "Content max marking definition levels": "内容最大标记定义级别", + "Content view": "内容视图", "contest": "比赛", "context": "关联", "Context": "上下文", diff --git a/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingCreation.tsx b/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingCreation.tsx index 7ea0f864842dd..40da3a14ec38c 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingCreation.tsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingCreation.tsx @@ -150,7 +150,7 @@ export const GroupingCreationForm: FunctionComponent = ({ } if (mapAfter) { navigate( - `/dashboard/analyses/groupings/${response.groupingAdd?.id}/knowledge/content`, + `/dashboard/analyses/groupings/${response.groupingAdd?.id}/content/mapping`, ); } }, diff --git a/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingKnowledge.jsx b/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingKnowledge.jsx index 005ea3e57647b..2d2d3eff71be2 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingKnowledge.jsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingKnowledge.jsx @@ -158,7 +158,7 @@ class GroupingKnowledgeComponent extends Component { container={grouping} PopoverComponent={} link={`/dashboard/analyses/groupings/${grouping.id}/knowledge`} - modes={['graph', 'content', 'correlation', 'matrix']} + modes={['graph', 'correlation', 'matrix']} currentMode={mode} knowledge={true} enableSuggestions={true} diff --git a/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingKnowledgeGraph.jsx b/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingKnowledgeGraph.jsx index cb890d884992d..acd0433aec90d 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingKnowledgeGraph.jsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingKnowledgeGraph.jsx @@ -1013,7 +1013,7 @@ class GroupingKnowledgeGraphComponent extends Component { container={grouping} PopoverComponent={} link={`/dashboard/analyses/groupings/${grouping.id}/knowledge`} - modes={['graph', 'content', 'correlation', 'matrix']} + modes={['graph', 'correlation', 'matrix']} currentMode={mode} adjust={this.handleZoomToFit.bind(this)} knowledge={true} diff --git a/opencti-platform/opencti-front/src/private/components/analyses/groupings/Root.tsx b/opencti-platform/opencti-front/src/private/components/analyses/groupings/Root.tsx index 77e67731e2b5e..e877b2fb61a64 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/groupings/Root.tsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/groupings/Root.tsx @@ -11,7 +11,7 @@ import Tab from '@mui/material/Tab'; import { GraphQLSubscriptionConfig } from 'relay-runtime'; import { RootReportSubscription } from '@components/analyses/reports/__generated__/RootReportSubscription.graphql'; import StixCoreObjectSimulationResult from '@components/common/stix_core_objects/StixCoreObjectSimulationResult'; -import StixCoreObjectContent from '../../common/stix_core_objects/StixCoreObjectContent'; +import StixCoreObjectContentRoot from '@components/common/stix_core_objects/StixCoreObjectContentRoot'; import { QueryRenderer } from '../../../../relay/environment'; import Grouping from './Grouping'; import GroupingPopover from './GroupingPopover'; @@ -87,6 +87,13 @@ const RootGrouping = () => { const enableReferences = useIsEnforceReference('Grouping') && !useGranted([BYPASSREFERENCE]); const { t_i18n } = useFormatter(); useSubscription(subConfig); + + const getCurrentTab = (grouping) => { + if (location.pathname.includes(`/dashboard/analyses/groupings/${grouping.id}/knowledge`)) return `/dashboard/analyses/groupings/${grouping.id}/knowledge`; + if (location.pathname.includes(`/dashboard/analyses/groupings/${grouping.id}/content`)) return `/dashboard/analyses/groupings/${grouping.id}/content`; + return location.pathname; + }; + return ( <> { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/analyses/groupings/${grouping.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
{ }} > { } /> } /> diff --git a/opencti-platform/opencti-front/src/private/components/analyses/malware_analyses/Root.tsx b/opencti-platform/opencti-front/src/private/components/analyses/malware_analyses/Root.tsx index ade119a39b7f0..ac77c07a6741c 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/malware_analyses/Root.tsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/malware_analyses/Root.tsx @@ -9,6 +9,7 @@ import { GraphQLSubscriptionConfig } from 'relay-runtime'; import Box from '@mui/material/Box'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; +import StixCoreObjectContentRoot from '@components/common/stix_core_objects/StixCoreObjectContentRoot'; import { QueryRenderer } from '../../../../relay/environment'; import ErrorNotFound from '../../../../components/ErrorNotFound'; import Loader from '../../../../components/Loader'; @@ -76,6 +77,11 @@ const RootMalwareAnalysis = () => { const location = useLocation(); const { t_i18n } = useFormatter(); useSubscription(subConfig); + const getCurrentTab = (malwareAnalysis) => { + if (location.pathname.includes(`/dashboard/analyses/malware_analyses/${malwareAnalysis.id}/knowledge`)) return `/dashboard/analyses/malware_analyses/${malwareAnalysis.id}/knowledge`; + if (location.pathname.includes(`/dashboard/analyses/malware_analyses/${malwareAnalysis.id}/content`)) return `/dashboard/analyses/malware_analyses/${malwareAnalysis.id}/content`; + return location.pathname; + }; const link = `/dashboard/analyses/malware_analyses/${malwareAnalysisId}/knowledge`; return ( <> @@ -86,8 +92,23 @@ const RootMalwareAnalysis = () => { if (props) { if (props.malwareAnalysis) { const { malwareAnalysis } = props; + let paddingRight = 0; + if ( + location.pathname.includes( + `/dashboard/analyses/malware_analyses/${malwareAnalysis.id}/content`, + ) + ) { + paddingRight = 350; + } + if ( + location.pathname.includes( + `/dashboard/analyses/malware_analyses/${malwareAnalysis.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return ( - <> +
{ entityType={'Malware-Analysis'} stixDomainObject={malwareAnalysis} PopoverComponent={ - - } + + } noAliases={true} /> { }} > { value={`/dashboard/analyses/malware_analyses/${malwareAnalysis.id}/knowledge`} label={t_i18n('Knowledge')} /> + { entityId={malwareAnalysisId} />} /> + + } + /> { />} /> - +
); } - return ; + return ; } return ; }} diff --git a/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportCreation.tsx b/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportCreation.tsx index 193692fe8678b..c8cc9348a39c0 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportCreation.tsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportCreation.tsx @@ -164,7 +164,7 @@ export const ReportCreationForm: FunctionComponent = ({ } if (mapAfter) { navigate( - `/dashboard/analyses/reports/${response.reportAdd?.id}/knowledge/content`, + `/dashboard/analyses/reports/${response.reportAdd?.id}/content/mapping`, ); } }, diff --git a/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportKnowledge.jsx b/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportKnowledge.jsx index b9cb01b2f6735..9924a79097a53 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportKnowledge.jsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportKnowledge.jsx @@ -262,7 +262,7 @@ class ReportKnowledgeComponent extends Component { container={report} PopoverComponent={} link={`/dashboard/analyses/reports/${report.id}/knowledge`} - modes={['graph', 'content', 'timeline', 'correlation', 'matrix']} + modes={['graph', 'timeline', 'correlation', 'matrix']} currentMode={mode} knowledge={true} enableSuggestions={true} diff --git a/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportKnowledgeGraph.jsx b/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportKnowledgeGraph.jsx index a0fb9ae623380..21ec4d0046b25 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportKnowledgeGraph.jsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportKnowledgeGraph.jsx @@ -1016,7 +1016,6 @@ class ReportKnowledgeGraphComponent extends Component { link={`/dashboard/analyses/reports/${report.id}/knowledge`} modes={[ 'graph', - 'content', 'timeline', 'correlation', 'matrix', diff --git a/opencti-platform/opencti-front/src/private/components/analyses/reports/Root.tsx b/opencti-platform/opencti-front/src/private/components/analyses/reports/Root.tsx index 1476957da16bc..1b0bdb026cf84 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/reports/Root.tsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/reports/Root.tsx @@ -9,6 +9,7 @@ import { GraphQLSubscriptionConfig } from 'relay-runtime'; import Box from '@mui/material/Box'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; +import StixCoreObjectContentRoot from '@components/common/stix_core_objects/StixCoreObjectContentRoot'; import StixCoreObjectSimulationResult from '../../common/stix_core_objects/StixCoreObjectSimulationResult'; import { QueryRenderer } from '../../../../relay/environment'; import Report from './Report'; @@ -22,7 +23,6 @@ import ContainerStixDomainObjects from '../../common/containers/ContainerStixDom import ContainerStixCyberObservables from '../../common/containers/ContainerStixCyberObservables'; import ErrorNotFound from '../../../../components/ErrorNotFound'; import StixCoreObjectFilesAndHistory from '../../common/stix_core_objects/StixCoreObjectFilesAndHistory'; -import StixCoreObjectContent from '../../common/stix_core_objects/StixCoreObjectContent'; import Breadcrumbs from '../../../../components/Breadcrumbs'; import { useFormatter } from '../../../../components/i18n'; import { useIsEnforceReference } from '../../../../utils/hooks/useEntitySettings'; @@ -86,6 +86,11 @@ const RootReport = () => { const enableReferences = useIsEnforceReference('Report') && !useGranted([BYPASSREFERENCE]); const { t_i18n } = useFormatter(); useSubscription(subConfig); + const getCurrentTab = (report) => { + if (location.pathname.includes(`/dashboard/analyses/reports/${report.id}/knowledge`)) return `/dashboard/analyses/reports/${report.id}/knowledge`; + if (location.pathname.includes(`/dashboard/analyses/reports/${report.id}/content`)) return `/dashboard/analyses/reports/${report.id}/content`; + return location.pathname; + }; return ( <> { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/analyses/reports/${report.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
{ }} > { )} /> } /> diff --git a/opencti-platform/opencti-front/src/private/components/arsenal/channels/Root.jsx b/opencti-platform/opencti-front/src/private/components/arsenal/channels/Root.jsx index bd4cce5ef3b80..7f7770b4dadea 100644 --- a/opencti-platform/opencti-front/src/private/components/arsenal/channels/Root.jsx +++ b/opencti-platform/opencti-front/src/private/components/arsenal/channels/Root.jsx @@ -6,11 +6,11 @@ import Box from '@mui/material/Box'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; import * as R from 'ramda'; +import StixCoreObjectContentRoot from '../../common/stix_core_objects/StixCoreObjectContentRoot'; import { QueryRenderer, requestSubscription } from '../../../../relay/environment'; import Channel from './Channel'; import ChannelKnowledge from './ChannelKnowledge'; import StixDomainObjectHeader from '../../common/stix_domain_objects/StixDomainObjectHeader'; -import StixCoreObjectContent from '../../common/stix_core_objects/StixCoreObjectContent'; import FileManager from '../../common/files/FileManager'; import ChannelPopover from './ChannelPopover'; import Loader from '../../../../components/Loader'; @@ -85,6 +85,11 @@ class RootChannel extends Component { location, params: { channelId }, } = this.props; + const getCurrentTab = (channel) => { + if (location.pathname.includes(`/dashboard/arsenal/channels/${channel.id}/knowledge`)) return `/dashboard/arsenal/channels/${channel.id}/knowledge`; + if (location.pathname.includes(`/dashboard/arsenal/channels/${channel.id}/content`)) return `/dashboard/arsenal/channels/${channel.id}/content`; + return location.pathname; + }; const link = `/dashboard/arsenal/channels/${channelId}/knowledge`; return (
@@ -130,6 +135,13 @@ class RootChannel extends Component { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/arsenal/channels/${channel.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
- )} + } /> { + if (location.pathname.includes(`/dashboard/arsenal/malwares/${malware.id}/knowledge`)) return `/dashboard/arsenal/malwares/${malware.id}/knowledge`; + if (location.pathname.includes(`/dashboard/arsenal/malwares/${malware.id}/content`)) return `/dashboard/arsenal/malwares/${malware.id}/content`; + return location.pathname; + }; const link = `/dashboard/arsenal/malwares/${malwareId}/knowledge`; return ( <> @@ -137,6 +142,13 @@ class RootMalware extends Component { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/arsenal/malwares/${malware.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
} /> - )} + } /> { + if (location.pathname.includes(`/dashboard/arsenal/tools/${tool.id}/knowledge`)) return `/dashboard/arsenal/tools/${tool.id}/knowledge`; + if (location.pathname.includes(`/dashboard/arsenal/tools/${tool.id}/content`)) return `/dashboard/arsenal/tools/${tool.id}/content`; + return location.pathname; + }; const link = `/dashboard/arsenal/tools/${toolId}/knowledge`; return ( <> @@ -131,6 +136,13 @@ class RootTool extends Component { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/arsenal/tools/${tool.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
- )} + } /> { + if (location.pathname.includes(`/dashboard/arsenal/vulnerabilities/${vulnerability.id}/knowledge`)) return `/dashboard/arsenal/vulnerabilities/${vulnerability.id}/knowledge`; + if (location.pathname.includes(`/dashboard/arsenal/vulnerabilities/${vulnerability.id}/content`)) return `/dashboard/arsenal/vulnerabilities/${vulnerability.id}/content`; + return location.pathname; + }; const link = `/dashboard/arsenal/vulnerabilities/${vulnerabilityId}/knowledge`; return (
@@ -131,6 +136,13 @@ class RootVulnerability extends Component { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/arsenal/vulnerabilities/${vulnerability.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
- )} + } /> = ({ } if (mapAfter) { navigate( - `/dashboard/cases/incidents/${response.caseIncidentAdd?.id}/knowledge/content`, + `/dashboard/cases/incidents/${response.caseIncidentAdd?.id}/content/mapping`, ); } }, diff --git a/opencti-platform/opencti-front/src/private/components/cases/case_incidents/IncidentKnowledge.jsx b/opencti-platform/opencti-front/src/private/components/cases/case_incidents/IncidentKnowledge.jsx index ea62fe49086b3..7e2fac972cbed 100644 --- a/opencti-platform/opencti-front/src/private/components/cases/case_incidents/IncidentKnowledge.jsx +++ b/opencti-platform/opencti-front/src/private/components/cases/case_incidents/IncidentKnowledge.jsx @@ -263,7 +263,7 @@ class IncidentKnowledgeComponent extends Component { container={caseData} PopoverComponent={} link={`/dashboard/cases/incidents/${caseData.id}/knowledge`} - modes={['graph', 'content', 'timeline', 'correlation', 'matrix']} + modes={['graph', 'timeline', 'correlation', 'matrix']} currentMode={mode} knowledge={true} enableSuggestions={true} diff --git a/opencti-platform/opencti-front/src/private/components/cases/case_incidents/IncidentKnowledgeGraph.jsx b/opencti-platform/opencti-front/src/private/components/cases/case_incidents/IncidentKnowledgeGraph.jsx index 7bc92e4d3eb67..a11e67471853c 100644 --- a/opencti-platform/opencti-front/src/private/components/cases/case_incidents/IncidentKnowledgeGraph.jsx +++ b/opencti-platform/opencti-front/src/private/components/cases/case_incidents/IncidentKnowledgeGraph.jsx @@ -1017,7 +1017,6 @@ class IncidentKnowledgeGraphComponent extends Component { link={`/dashboard/cases/incidents/${caseData.id}/knowledge`} modes={[ 'graph', - 'content', 'timeline', 'correlation', 'matrix', diff --git a/opencti-platform/opencti-front/src/private/components/cases/case_incidents/Root.tsx b/opencti-platform/opencti-front/src/private/components/cases/case_incidents/Root.tsx index 118307f02891c..8f559b9e1814e 100644 --- a/opencti-platform/opencti-front/src/private/components/cases/case_incidents/Root.tsx +++ b/opencti-platform/opencti-front/src/private/components/cases/case_incidents/Root.tsx @@ -10,6 +10,7 @@ import Box from '@mui/material/Box'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; import StixCoreObjectSimulationResult from '@components/common/stix_core_objects/StixCoreObjectSimulationResult'; +import StixCoreObjectContentRoot from '@components/common/stix_core_objects/StixCoreObjectContentRoot'; import ErrorNotFound from '../../../../components/ErrorNotFound'; import Loader, { LoaderVariant } from '../../../../components/Loader'; import useQueryLoading from '../../../../utils/hooks/useQueryLoading'; @@ -17,7 +18,6 @@ import ContainerHeader from '../../common/containers/ContainerHeader'; import ContainerStixCyberObservables from '../../common/containers/ContainerStixCyberObservables'; import ContainerStixDomainObjects from '../../common/containers/ContainerStixDomainObjects'; import StixCoreObjectFilesAndHistory from '../../common/stix_core_objects/StixCoreObjectFilesAndHistory'; -import StixCoreObjectContent from '../../common/stix_core_objects/StixCoreObjectContent'; import { RootIncidentCaseQuery } from './__generated__/RootIncidentCaseQuery.graphql'; import CaseIncident from './CaseIncident'; import CaseIncidentPopover from './CaseIncidentPopover'; @@ -84,6 +84,11 @@ const RootCaseIncidentComponent = ({ queryRef, caseId }) => { const enableReferences = useIsEnforceReference('Case-Incident') && !useGranted([BYPASSREFERENCE]); const { t_i18n } = useFormatter(); useSubscription(subConfig); + const getCurrentTab = (caseData) => { + if (location.pathname.includes(`/dashboard/cases/incidents/${caseData.id}/knowledge`)) return `/dashboard/cases/incidents/${caseData.id}/knowledge`; + if (location.pathname.includes(`/dashboard/cases/incidents/${caseData.id}/content`)) return `/dashboard/cases/incidents/${caseData.id}/content`; + return location.pathname; + }; const { caseIncident: caseData, connectorsForExport, @@ -109,6 +114,13 @@ const RootCaseIncidentComponent = ({ queryRef, caseId }) => { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/cases/incidents/${caseData.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } } return ( <> @@ -134,13 +146,7 @@ const RootCaseIncidentComponent = ({ queryRef, caseId }) => { }} > { />} /> } + isContainer={true} + /> + } /> = ({ } if (mapAfter) { navigate( - `/dashboard/cases/rfis/${response.caseRfiAdd?.id}/knowledge/content`, + `/dashboard/cases/rfis/${response.caseRfiAdd?.id}/content/mapping`, ); } }, diff --git a/opencti-platform/opencti-front/src/private/components/cases/case_rfis/CaseRfiKnowledge.jsx b/opencti-platform/opencti-front/src/private/components/cases/case_rfis/CaseRfiKnowledge.jsx index b7ffd75222cc4..48d673ffbd0a3 100644 --- a/opencti-platform/opencti-front/src/private/components/cases/case_rfis/CaseRfiKnowledge.jsx +++ b/opencti-platform/opencti-front/src/private/components/cases/case_rfis/CaseRfiKnowledge.jsx @@ -263,7 +263,7 @@ class CaseRfiKnowledgeComponent extends Component { container={caseData} PopoverComponent={} link={`/dashboard/cases/rfis/${caseData.id}/knowledge`} - modes={['graph', 'content', 'timeline', 'correlation', 'matrix']} + modes={['graph', 'timeline', 'correlation', 'matrix']} currentMode={mode} knowledge={true} enableSuggestions={true} diff --git a/opencti-platform/opencti-front/src/private/components/cases/case_rfis/CaseRfiKnowledgeGraph.jsx b/opencti-platform/opencti-front/src/private/components/cases/case_rfis/CaseRfiKnowledgeGraph.jsx index aa920ac57869f..b7a38cd745645 100644 --- a/opencti-platform/opencti-front/src/private/components/cases/case_rfis/CaseRfiKnowledgeGraph.jsx +++ b/opencti-platform/opencti-front/src/private/components/cases/case_rfis/CaseRfiKnowledgeGraph.jsx @@ -1017,7 +1017,6 @@ class CaseRfiKnowledgeGraphComponent extends Component { link={`/dashboard/cases/rfis/${caseData.id}/knowledge`} modes={[ 'graph', - 'content', 'timeline', 'correlation', 'matrix', diff --git a/opencti-platform/opencti-front/src/private/components/cases/case_rfis/Root.tsx b/opencti-platform/opencti-front/src/private/components/cases/case_rfis/Root.tsx index aa3391718eead..eb7dff37b0148 100644 --- a/opencti-platform/opencti-front/src/private/components/cases/case_rfis/Root.tsx +++ b/opencti-platform/opencti-front/src/private/components/cases/case_rfis/Root.tsx @@ -9,11 +9,11 @@ import { GraphQLSubscriptionConfig } from 'relay-runtime'; import Box from '@mui/material/Box'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; +import StixCoreObjectContentRoot from '@components/common/stix_core_objects/StixCoreObjectContentRoot'; import ErrorNotFound from '../../../../components/ErrorNotFound'; import useQueryLoading from '../../../../utils/hooks/useQueryLoading'; import Loader, { LoaderVariant } from '../../../../components/Loader'; import ContainerHeader from '../../common/containers/ContainerHeader'; -import StixCoreObjectContent from '../../common/stix_core_objects/StixCoreObjectContent'; import StixCoreObjectFilesAndHistory from '../../common/stix_core_objects/StixCoreObjectFilesAndHistory'; import CaseRfiPopover from './CaseRfiPopover'; import CaseRfi from './CaseRfi'; @@ -84,6 +84,11 @@ const RootCaseRfiComponent = ({ queryRef, caseId }) => { const enableReferences = useIsEnforceReference('Case-Rfi') && !useGranted([BYPASSREFERENCE]); const { t_i18n } = useFormatter(); useSubscription(subConfig); + const getCurrentTab = (caseData) => { + if (location.pathname.includes(`/dashboard/cases/rfis/${caseData.id}/knowledge`)) return `/dashboard/cases/rfis/${caseData.id}/knowledge`; + if (location.pathname.includes(`/dashboard/cases/rfis/${caseData.id}/content`)) return `/dashboard/cases/rfis/${caseData.id}/content`; + return location.pathname; + }; const { caseRfi: caseData, connectorsForExport, @@ -106,6 +111,11 @@ const RootCaseRfiComponent = ({ queryRef, caseId }) => { ) { paddingRight = 350; } + if ( + location.pathname.includes(`/dashboard/cases/rfis/${caseData.id}/content/mapping`) + ) { + paddingRight = 0; + } } return ( <> @@ -131,13 +141,7 @@ const RootCaseRfiComponent = ({ queryRef, caseId }) => { }} > { } /> } /> diff --git a/opencti-platform/opencti-front/src/private/components/cases/case_rfts/CaseRftCreation.tsx b/opencti-platform/opencti-front/src/private/components/cases/case_rfts/CaseRftCreation.tsx index 0d7f7ca338a62..04ad8935d7af1 100644 --- a/opencti-platform/opencti-front/src/private/components/cases/case_rfts/CaseRftCreation.tsx +++ b/opencti-platform/opencti-front/src/private/components/cases/case_rfts/CaseRftCreation.tsx @@ -153,7 +153,7 @@ export const CaseRftCreationForm: FunctionComponent = ({ } if (mapAfter) { navigate( - `/dashboard/cases/rfts/${response.caseRftAdd?.id}/knowledge/content`, + `/dashboard/cases/rfts/${response.caseRftAdd?.id}/content/mapping`, ); } }, diff --git a/opencti-platform/opencti-front/src/private/components/cases/case_rfts/CaseRftKnowledge.jsx b/opencti-platform/opencti-front/src/private/components/cases/case_rfts/CaseRftKnowledge.jsx index 85a57b16c8f28..553ffb079956e 100644 --- a/opencti-platform/opencti-front/src/private/components/cases/case_rfts/CaseRftKnowledge.jsx +++ b/opencti-platform/opencti-front/src/private/components/cases/case_rfts/CaseRftKnowledge.jsx @@ -262,7 +262,7 @@ class CaseRftKnowledgeComponent extends Component { container={caseData} PopoverComponent={} link={`/dashboard/cases/rfts/${caseData.id}/knowledge`} - modes={['graph', 'content', 'timeline', 'correlation', 'matrix']} + modes={['graph', 'timeline', 'correlation', 'matrix']} currentMode={mode} knowledge={true} enableSuggestions={true} diff --git a/opencti-platform/opencti-front/src/private/components/cases/case_rfts/CaseRftKnowledgeGraph.jsx b/opencti-platform/opencti-front/src/private/components/cases/case_rfts/CaseRftKnowledgeGraph.jsx index 872d74efdb48f..2ec198c23d6dd 100644 --- a/opencti-platform/opencti-front/src/private/components/cases/case_rfts/CaseRftKnowledgeGraph.jsx +++ b/opencti-platform/opencti-front/src/private/components/cases/case_rfts/CaseRftKnowledgeGraph.jsx @@ -1016,7 +1016,6 @@ class CaseRftKnowledgeGraphComponent extends Component { link={`/dashboard/cases/rfts/${caseData.id}/knowledge`} modes={[ 'graph', - 'content', 'timeline', 'correlation', 'matrix', diff --git a/opencti-platform/opencti-front/src/private/components/cases/case_rfts/Root.tsx b/opencti-platform/opencti-front/src/private/components/cases/case_rfts/Root.tsx index 2596a14673087..bcd398a20253d 100644 --- a/opencti-platform/opencti-front/src/private/components/cases/case_rfts/Root.tsx +++ b/opencti-platform/opencti-front/src/private/components/cases/case_rfts/Root.tsx @@ -9,11 +9,11 @@ import { GraphQLSubscriptionConfig } from 'relay-runtime'; import Box from '@mui/material/Box'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; +import StixCoreObjectContentRoot from '@components/common/stix_core_objects/StixCoreObjectContentRoot'; import ErrorNotFound from '../../../../components/ErrorNotFound'; import useQueryLoading from '../../../../utils/hooks/useQueryLoading'; import Loader, { LoaderVariant } from '../../../../components/Loader'; import ContainerHeader from '../../common/containers/ContainerHeader'; -import StixCoreObjectContent from '../../common/stix_core_objects/StixCoreObjectContent'; import StixCoreObjectFilesAndHistory from '../../common/stix_core_objects/StixCoreObjectFilesAndHistory'; import StixCoreObjectHistory from '../../common/stix_core_objects/StixCoreObjectHistory'; import CaseRft from './CaseRft'; @@ -83,6 +83,11 @@ const RootCaseRftComponent = ({ queryRef, caseId }) => { const enableReferences = useIsEnforceReference('Case-Rft') && !useGranted([BYPASSREFERENCE]); const { t_i18n } = useFormatter(); useSubscription(subConfig); + const getCurrentTab = (caseData) => { + if (location.pathname.includes(`/dashboard/cases/rfts/${caseData.id}/knowledge`)) return `/dashboard/cases/rfts/${caseData.id}/knowledge`; + if (location.pathname.includes(`/dashboard/cases/rfts/${caseData.id}/content`)) return `/dashboard/cases/rfts/${caseData.id}/content`; + return location.pathname; + }; const { caseRft: caseData, connectorsForExport, @@ -105,6 +110,11 @@ const RootCaseRftComponent = ({ queryRef, caseId }) => { ) { paddingRight = 350; } + if ( + location.pathname.includes(`/dashboard/cases/rfts/${caseData.id}/content/mapping`) + ) { + paddingRight = 0; + } } return ( <> @@ -130,13 +140,7 @@ const RootCaseRftComponent = ({ queryRef, caseId }) => { }} > { )} /> - )} + } /> { const location = useLocation(); const { t_i18n } = useFormatter(); useSubscription(subConfig); + const getCurrentTab = (feedback) => { + if (location.pathname.includes(`/dashboard/incidents/feedbacks/${feedback.id}/knowledge`)) return `/dashboard/incidents/feedbacks/${feedback.id}/knowledge`; + if (location.pathname.includes(`/dashboard/incidents/feedbacks/${feedback.id}/content`)) return `/dashboard/incidents/feedbacks/${feedback.id}/content`; + return location.pathname; + }; const { feedback: feedbackData, connectorsForExport, @@ -117,6 +122,13 @@ const RootFeedbackComponent = ({ queryRef, caseId }) => { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/cases/feedbacks/${feedbackData.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } } const canManage = feedbackData?.currentUserAccessRight === 'admin'; return ( @@ -146,13 +158,7 @@ const RootFeedbackComponent = ({ queryRef, caseId }) => { }} > { />} /> } /> diff --git a/opencti-platform/opencti-front/src/private/components/cases/tasks/Root.tsx b/opencti-platform/opencti-front/src/private/components/cases/tasks/Root.tsx index aee4b59ade5cb..d7faeace7ae15 100644 --- a/opencti-platform/opencti-front/src/private/components/cases/tasks/Root.tsx +++ b/opencti-platform/opencti-front/src/private/components/cases/tasks/Root.tsx @@ -9,11 +9,11 @@ import { GraphQLSubscriptionConfig } from 'relay-runtime'; import Box from '@mui/material/Box'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; +import StixCoreObjectContentRoot from '@components/common/stix_core_objects/StixCoreObjectContentRoot'; import ErrorNotFound from '../../../../components/ErrorNotFound'; import useQueryLoading from '../../../../utils/hooks/useQueryLoading'; import Loader, { LoaderVariant } from '../../../../components/Loader'; import ContainerHeader from '../../common/containers/ContainerHeader'; -import StixCoreObjectContent from '../../common/stix_core_objects/StixCoreObjectContent'; import StixCoreObjectFilesAndHistory from '../../common/stix_core_objects/StixCoreObjectFilesAndHistory'; import StixCoreObjectHistory from '../../common/stix_core_objects/StixCoreObjectHistory'; import CaseTask from './Task'; @@ -71,6 +71,11 @@ const RootTaskComponent = ({ queryRef, taskId }) => { const location = useLocation(); const { t_i18n } = useFormatter(); useSubscription(subConfig); + const getCurrentTab = (task) => { + if (location.pathname.includes(`/dashboard/cases/tasks/${task.id}/knowledge`)) return `/dashboard/cases/tasks/${task.id}/knowledge`; + if (location.pathname.includes(`/dashboard/cases/tasks/${task.id}/content`)) return `/dashboard/cases/tasks/${task.id}/content`; + return location.pathname; + }; const { task: data, connectorsForExport, @@ -83,6 +88,11 @@ const RootTaskComponent = ({ queryRef, taskId }) => { ) { paddingRight = 350; } + if ( + location.pathname.includes(`/dashboard/cases/tasks/${data.id}/content/mapping`) + ) { + paddingRight = 0; + } } return ( <> @@ -107,13 +117,7 @@ const RootTaskComponent = ({ queryRef, taskId }) => { }} > { element={} /> + } /> { )} - {modes.includes('content') && ( - - - - - - )} {modes.includes('timeline') && ( = ({ + currentMode, + modes, +}) => { + const { t_i18n } = useFormatter(); + + return ( +
+ + {modes.includes('content') && ( + + + + + + )} + {modes.includes('mapping') && ( + + + + + + )} + +
+ ); +}; + +export default StixCoreObjectContentHeader; diff --git a/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectContentRoot.tsx b/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectContentRoot.tsx new file mode 100644 index 0000000000000..81bd6b60039f4 --- /dev/null +++ b/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectContentRoot.tsx @@ -0,0 +1,46 @@ +import React, { FunctionComponent } from 'react'; +import StixCoreObjectContentHeader from '@components/common/stix_core_objects/StixCoreObjectContentHeader'; +import { Route, Routes, useLocation } from 'react-router-dom'; + +import ContainerContent from '@components/common/containers/ContainerContent'; +import StixCoreObjectContent from '@components/common/stix_core_objects/StixCoreObjectContent'; + +interface StixCoreObjectContentRootProps { + stixCoreObject: unknown; + isContainer?: boolean; +} + +const StixCoreObjectContentRoot: FunctionComponent = ({ + stixCoreObject, isContainer = false, +}) => { + const { pathname } = useLocation(); + const currentMode = pathname.endsWith('/mapping') ? 'mapping' : 'content'; + const modes = isContainer ? ['content', 'mapping'] : []; + return ( + <> + + + + } + /> + } + /> + + + ); +}; + +export default StixCoreObjectContentRoot; diff --git a/opencti-platform/opencti-front/src/private/components/entities/events/Root.jsx b/opencti-platform/opencti-front/src/private/components/entities/events/Root.jsx index 1afe464c5ad5e..6a865137ded20 100644 --- a/opencti-platform/opencti-front/src/private/components/entities/events/Root.jsx +++ b/opencti-platform/opencti-front/src/private/components/entities/events/Root.jsx @@ -6,7 +6,7 @@ import * as R from 'ramda'; import Box from '@mui/material/Box'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; -import StixCoreObjectContent from '../../common/stix_core_objects/StixCoreObjectContent'; +import StixCoreObjectContentRoot from '../../common/stix_core_objects/StixCoreObjectContentRoot'; import withRouter from '../../../../utils/compat-router/withRouter'; import { QueryRenderer, requestSubscription } from '../../../../relay/environment'; import Event from './Event'; @@ -85,6 +85,13 @@ class RootEvent extends Component { params: { eventId }, } = this.props; const link = `/dashboard/entities/events/${eventId}/knowledge`; + + const getCurrentTab = (event) => { + if (location.pathname.includes(`/dashboard/entities/events/${event.id}/knowledge`)) return `/dashboard/entities/events/${event.id}/knowledge`; + if (location.pathname.includes(`/dashboard/entities/events/${event.id}/content`)) return `/dashboard/entities/events/${event.id}/content`; + return location.pathname; + }; + return ( <> @@ -130,6 +137,13 @@ class RootEvent extends Component { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/entities/events/${event.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
- )} + } /> { + if (location.pathname.includes(`/dashboard/entities/individuals/${individual.id}/knowledge`)) return `/dashboard/entities/individuals/${individual.id}/knowledge`; + if (location.pathname.includes(`/dashboard/entities/individuals/${individual.id}/content`)) return `/dashboard/entities/individuals/${individual.id}/content`; + return location.pathname; + }; + return ( <> @@ -164,6 +171,13 @@ class RootIndividual extends Component { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/entities/individuals/${individual.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
- )} + } /> { + if (location.pathname.includes(`/dashboard/entities/organizations/${organization.id}/knowledge`)) return `/dashboard/entities/organizations/${organization.id}/knowledge`; + if (location.pathname.includes(`/dashboard/entities/organizations/${organization.id}/content`)) return `/dashboard/entities/organizations/${organization.id}/content`; + return location.pathname; + }; + return ( <> @@ -167,6 +174,13 @@ class RootOrganization extends Component { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/entities/organizations/${organization.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
- )} + } /> { + if (location.pathname.includes(`/dashboard/entities/sectors/${sector.id}/knowledge`)) return `/dashboard/entities/sectors/${sector.id}/knowledge`; + if (location.pathname.includes(`/dashboard/entities/sectors/${sector.id}/content`)) return `/dashboard/entities/sectors/${sector.id}/content`; + return location.pathname; + }; + return ( <> @@ -130,6 +137,13 @@ class RootSector extends Component { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/entities/sectors/${sector.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
- )} + } /> { + if (location.pathname.includes(`/dashboard/entities/systems/${system.id}/knowledge`)) return `/dashboard/entities/systems/${system.id}/knowledge`; + if (location.pathname.includes(`/dashboard/entities/systems/${system.id}/content`)) return `/dashboard/entities/systems/${system.id}/content`; + return location.pathname; + }; + return ( <> @@ -161,6 +168,13 @@ class RootSystem extends Component { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/entities/systems/${system.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
- )} + } /> { const location = useLocation(); const { t_i18n } = useFormatter(); useSubscription(subConfig); + const getCurrentTab = (incident) => { + if (location.pathname.includes(`/dashboard/events/incidents/${incident.id}/knowledge`)) return `/dashboard/events/incidents/${incident.id}/knowledge`; + if (location.pathname.includes(`/dashboard/events/incidents/${incident.id}/content`)) return `/dashboard/events/incidents/${incident.id}/content`; + return location.pathname; + }; const data = usePreloadedQuery(incidentQuery, queryRef); const { incident, connectorsForImport, connectorsForExport } = data; const isOverview = location.pathname === `/dashboard/events/incidents/${incident?.id}`; const paddingRightValue = () => { if (location.pathname.includes(`/dashboard/events/incidents/${incident.id}/knowledge`)) return 200; if (location.pathname.includes(`/dashboard/events/incidents/${incident.id}/content`)) return 350; + if (location.pathname.includes(`/dashboard/events/incidents/${incident.id}/content/mapping`)) return 0; return 0; }; return ( @@ -110,13 +115,7 @@ const RootIncidentComponent = ({ queryRef }) => { sx={{ borderBottom: 1, borderColor: 'divider', marginBottom: 4 }} > { element={} /> - )} + } /> + } /> - )} + path="/knowledge/*" + element={ + + } /> { const { t_i18n } = useFormatter(); const data = usePreloadedQuery(cityQuery, queryRef); const { city, connectorsForImport, connectorsForExport } = data; + + const getCurrentTab = () => { + if (location.pathname.includes(`/dashboard/locations/cities/${city.id}/knowledge`)) return `/dashboard/locations/cities/${city.id}/knowledge`; + if (location.pathname.includes(`/dashboard/locations/cities/${city.id}/content`)) return `/dashboard/locations/cities/${city.id}/content`; + return location.pathname; + }; + let paddingRight = 0; if ( location.pathname.includes( @@ -93,6 +100,13 @@ const RootCityComponent = ({ queryRef, cityId, link }) => { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/locations/cities/${city.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return ( <> {city ? ( @@ -119,13 +133,7 @@ const RootCityComponent = ({ queryRef, cityId, link }) => { }} > { element={} /> - )} + } /> { ); useSubscription(subConfig); const location = useLocation(); + const getCurrentTab = (country) => { + if (location.pathname.includes(`/dashboard/locations/countries/${country.id}/knowledge`)) return `/dashboard/locations/countries/${country.id}/knowledge`; + if (location.pathname.includes(`/dashboard/locations/countries/${country.id}/content`)) return `/dashboard/locations/countries/${country.id}/content`; + return location.pathname; + }; const { t_i18n } = useFormatter(); const data = usePreloadedQuery(countryQuery, queryRef); const { country, connectorsForImport, connectorsForExport } = data; + let paddingRight = 0; if ( location.pathname.includes( @@ -95,6 +101,13 @@ const RootCountryComponent = ({ queryRef, countryId, link }) => { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/locations/countries/${country.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return ( <> {country ? ( @@ -121,13 +134,7 @@ const RootCountryComponent = ({ queryRef, countryId, link }) => { }} > { element={} /> - )} + } /> { + if (location.pathname.includes(`/dashboard/locations/positions/${position.id}/knowledge`)) return `/dashboard/locations/positions/${position.id}/knowledge`; + if (location.pathname.includes(`/dashboard/locations/positions/${position.id}/content`)) return `/dashboard/locations/positions/${position.id}/content`; + return location.pathname; + }; + return ( <> @@ -134,6 +141,13 @@ class RootPosition extends Component { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/locations/positions/${position.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
- )} + } /> { const { t_i18n } = useFormatter(); const data = usePreloadedQuery(regionQuery, queryRef); const { region, connectorsForImport, connectorsForExport } = data; + + const getCurrentTab = () => { + if (location.pathname.includes(`/dashboard/locations/regions/${region.id}/knowledge`)) return `/dashboard/locations/regions/${region.id}/knowledge`; + if (location.pathname.includes(`/dashboard/locations/regions/${region.id}/content`)) return `/dashboard/locations/regions/${region.id}/content`; + return location.pathname; + }; + let paddingRight = 0; if ( location.pathname.includes( - `/dashboard/locations/regions/${region.id}/knowledge`, + 'c', ) ) { paddingRight = 200; @@ -96,6 +103,13 @@ const RootRegionComponent = ({ queryRef, regionId, link }) => { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/locations/regions/${region.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return ( <> {region ? ( @@ -122,13 +136,7 @@ const RootRegionComponent = ({ queryRef, regionId, link }) => { }} > { element={} /> - )} + } /> { + if (location.pathname.includes(`/dashboard/observations/artifacts/${observable.id}/knowledge`)) return `/dashboard/observations/artifacts/${observable.id}/knowledge`; + if (location.pathname.includes(`/dashboard/observations/artifacts/${observable.id}/content`)) return `/dashboard/observations/artifacts/${observable.id}/content`; + return location.pathname; + }; const link = `/dashboard/observations/artifacts/${observableId}/knowledge`; return ( <> @@ -95,8 +100,23 @@ class RootArtifact extends Component { if (props) { if (props.stixCyberObservable) { const { stixCyberObservable } = props; + let paddingRight = 0; + if ( + location.pathname.includes( + `/dashboard/observations/artifacts/${stixCyberObservable.id}/content`, + ) + ) { + paddingRight = 350; + } + if ( + location.pathname.includes( + `/dashboard/observations/artifacts/${stixCyberObservable.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return ( - <> +
- )} + )} /> - } + } /> - )} + } /> - )} + )} /> - )} + )} /> - )} + )} /> - )} + )} /> - )} + )} /> - +
); } return ; diff --git a/opencti-platform/opencti-front/src/private/components/observations/indicators/Root.jsx b/opencti-platform/opencti-front/src/private/components/observations/indicators/Root.jsx index 2e5fe29d90845..6df7e043e2ef6 100644 --- a/opencti-platform/opencti-front/src/private/components/observations/indicators/Root.jsx +++ b/opencti-platform/opencti-front/src/private/components/observations/indicators/Root.jsx @@ -6,7 +6,7 @@ import * as R from 'ramda'; import Box from '@mui/material/Box'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; -import StixCoreObjectContent from '../../common/stix_core_objects/StixCoreObjectContent'; +import StixCoreObjectContentRoot from '../../common/stix_core_objects/StixCoreObjectContentRoot'; import { QueryRenderer, requestSubscription } from '../../../../relay/environment'; import StixCoreRelationship from '../../common/stix_core_relationships/StixCoreRelationship'; import Indicator from './Indicator'; @@ -86,6 +86,11 @@ class RootIndicator extends Component { location, params: { indicatorId }, } = this.props; + const getCurrentTab = (indicator) => { + if (location.pathname.includes(`/dashboard/observations/indicators/${indicator.id}/knowledge`)) return `/dashboard/observations/indicators/${indicator.id}/knowledge`; + if (location.pathname.includes(`/dashboard/observations/indicators/${indicator.id}/content`)) return `/dashboard/observations/indicators/${indicator.id}/content`; + return location.pathname; + }; return ( <> +
} + PopoverComponent={} noAliases={true} /> )} + element={()} /> - )} + } /> - )} + )} /> - )} + )} /> - )} + )} /> - )} + )} /> - )} + )} /> - )} + )} /> - )} + )} /> - +
); } return ; diff --git a/opencti-platform/opencti-front/src/private/components/observations/infrastructures/Root.tsx b/opencti-platform/opencti-front/src/private/components/observations/infrastructures/Root.tsx index 88c010fcb7e03..fa97c1e32f8b7 100644 --- a/opencti-platform/opencti-front/src/private/components/observations/infrastructures/Root.tsx +++ b/opencti-platform/opencti-front/src/private/components/observations/infrastructures/Root.tsx @@ -9,9 +9,9 @@ import { GraphQLSubscriptionConfig } from 'relay-runtime'; import Box from '@mui/material/Box'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; +import StixCoreObjectContentRoot from '@components/common/stix_core_objects/StixCoreObjectContentRoot'; import InfrastructureKnowledge from './InfrastructureKnowledge'; import StixDomainObjectHeader from '../../common/stix_domain_objects/StixDomainObjectHeader'; -import StixCoreObjectContent from '../../common/stix_core_objects/StixCoreObjectContent'; import FileManager from '../../common/files/FileManager'; import InfrastructurePopover from './InfrastructurePopover'; import Loader, { LoaderVariant } from '../../../../components/Loader'; @@ -76,19 +76,24 @@ const RootInfrastructureComponent = ({ queryRef, infrastructureId }) => { const location = useLocation(); const { t_i18n } = useFormatter(); useSubscription(subConfig); + const getCurrentTab = (infrastructure) => { + if (location.pathname.includes(`/dashboard/observations/infrastructures/${infrastructure.id}/knowledge`)) return `/dashboard/observations/infrastructures/${infrastructure.id}/knowledge`; + if (location.pathname.includes(`/dashboard/observations/infrastructures/${infrastructure.id}/content`)) return `/dashboard/observations/infrastructures/${infrastructure.id}/content`; + return location.pathname; + }; const data = usePreloadedQuery(infrastructureQuery, queryRef); const { infrastructure, connectorsForImport, connectorsForExport } = data; + const paddingRightValue = () => { + if (location.pathname.includes(`/dashboard/observations/infrastructures/${infrastructure.id}/knowledge`)) return 200; + if (location.pathname.includes(`/dashboard/observations/infrastructures/${infrastructure.id}/content`)) return 350; + if (location.pathname.includes(`/dashboard/observations/infrastructures/${infrastructure.id}/content/mapping`)) return 0; + return 0; + }; return ( <> {infrastructure ? (
{ sx={{ borderBottom: 1, borderColor: 'divider', marginBottom: 4 }} > { } + element={} /> { replace={true} to={`/dashboard/observations/infrastructures/${infrastructureId}/knowledge/overview`} /> - )} + )} /> } + element={} /> - )} + } /> {
) : ( - + )} ); diff --git a/opencti-platform/opencti-front/src/private/components/observations/stix_cyber_observables/Root.jsx b/opencti-platform/opencti-front/src/private/components/observations/stix_cyber_observables/Root.jsx index fc672c21ffc6e..d45a5e562e63d 100644 --- a/opencti-platform/opencti-front/src/private/components/observations/stix_cyber_observables/Root.jsx +++ b/opencti-platform/opencti-front/src/private/components/observations/stix_cyber_observables/Root.jsx @@ -6,7 +6,7 @@ import * as R from 'ramda'; import Box from '@mui/material/Box'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; -import StixCoreObjectContent from '../../common/stix_core_objects/StixCoreObjectContent'; +import StixCoreObjectContentRoot from '../../common/stix_core_objects/StixCoreObjectContentRoot'; import withRouter from '../../../../utils/compat-router/withRouter'; import { QueryRenderer, requestSubscription } from '../../../../relay/environment'; import StixCoreRelationship from '../../common/stix_core_relationships/StixCoreRelationship'; @@ -86,6 +86,11 @@ class RootStixCyberObservable extends Component { location, params: { observableId }, } = this.props; + const getCurrentTab = (observable) => { + if (location.pathname.includes(`/dashboard/observations/observables/${observable.id}/knowledge`)) return `/dashboard/observations/observables/${observable.id}/knowledge`; + if (location.pathname.includes(`/dashboard/observations/observables/${observable.id}/content`)) return `/dashboard/observations/observables/${observable.id}/content`; + return location.pathname; + }; const link = `/dashboard/observations/observables/${observableId}/knowledge`; return ( <> @@ -96,8 +101,23 @@ class RootStixCyberObservable extends Component { if (props) { if (props.stixCyberObservable) { const { stixCyberObservable } = props; + let paddingRight = 0; + if ( + location.pathname.includes( + `/dashboard/observations/observables/${stixCyberObservable.id}/content`, + ) + ) { + paddingRight = 350; + } + if ( + location.pathname.includes( + `/dashboard/observations/observables/${stixCyberObservable.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return ( - <> +
- } + } /> - } + } /> - )} + } /> - } + } /> - } + } /> - } + } /> - } + } /> - } + } /> - } + } /> - +
); } - return ; + return ; } return ; }} diff --git a/opencti-platform/opencti-front/src/private/components/techniques/attack_patterns/Root.jsx b/opencti-platform/opencti-front/src/private/components/techniques/attack_patterns/Root.jsx index 78e8cd11a9385..098b4dbdcdc51 100644 --- a/opencti-platform/opencti-front/src/private/components/techniques/attack_patterns/Root.jsx +++ b/opencti-platform/opencti-front/src/private/components/techniques/attack_patterns/Root.jsx @@ -6,7 +6,7 @@ import Box from '@mui/material/Box'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; import * as R from 'ramda'; -import StixCoreObjectContent from '../../common/stix_core_objects/StixCoreObjectContent'; +import StixCoreObjectContentRoot from '../../common/stix_core_objects/StixCoreObjectContentRoot'; import withRouter from '../../../../utils/compat-router/withRouter'; import { QueryRenderer, requestSubscription } from '../../../../relay/environment'; import AttackPattern from './AttackPattern'; @@ -85,6 +85,11 @@ class RootAttackPattern extends Component { location, params: { attackPatternId }, } = this.props; + const getCurrentTab = (attackPattern) => { + if (location.pathname.includes(`/dashboard/techniques/attack_patterns/${attackPattern.id}/knowledge`)) return `/dashboard/techniques/attack_patterns/${attackPattern.id}/knowledge`; + if (location.pathname.includes(`/dashboard/techniques/attack_patterns/${attackPattern.id}/content`)) return `/dashboard/techniques/attack_patterns/${attackPattern.id}/content`; + return location.pathname; + }; const link = `/dashboard/techniques/attack_patterns/${attackPatternId}/knowledge`; return (
@@ -132,6 +137,13 @@ class RootAttackPattern extends Component { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/techniques/attack_patterns/${attackPattern.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
- )} + } /> { + if (location.pathname.includes(`/dashboard/techniques/courses_of_action/${courseOfAction.id}/knowledge`)) return `/dashboard/techniques/courses_of_action/${courseOfAction.id}/knowledge`; + if (location.pathname.includes(`/dashboard/techniques/courses_of_action/${courseOfAction.id}/content`)) return `/dashboard/techniques/courses_of_action/${courseOfAction.id}/content`; + return location.pathname; + }; return (
- )} + } /> { ); useSubscription(subConfig); const location = useLocation(); + const getCurrentTab = (dataComponent) => { + if (location.pathname.includes(`/dashboard/arsenal/techniques/${dataComponent.id}/data_components`)) return `/dashboard/techniques/data_components/${dataComponent.id}/knowledge`; + if (location.pathname.includes(`/dashboard/arsenal/techniques/${dataComponent.id}/data_components`)) return `/dashboard/techniques/data_components/${dataComponent.id}/content`; + return location.pathname; + }; const { t_i18n } = useFormatter(); return ( <> @@ -102,6 +107,13 @@ const RootDataComponent = () => { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/techniques/data_components/${dataComponent.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
{ }} > { } /> - )} + } /> { ); useSubscription(subConfig); const location = useLocation(); + const getCurrentTab = (dataSource) => { + if (location.pathname.includes(`/dashboard/techniques/data_sources/${dataSource.id}/knowledge`)) return `/dashboard/techniques/data_sources/${dataSource.id}/knowledge`; + if (location.pathname.includes(`/dashboard/techniques/data_sources/${dataSource.id}/content`)) return `/dashboard/techniques/data_sources/${dataSource.id}/content`; + return location.pathname; + }; const { t_i18n } = useFormatter(); const data = usePreloadedQuery(dataSourceQuery, queryRef); const { dataSource, connectorsForImport, connectorsForExport, settings } = data; @@ -93,6 +98,13 @@ const RootDataSourceComponent = ({ queryRef, dataSourceId }) => { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/techniques/data_sources/${dataSource.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return ( <> {dataSource ? ( @@ -114,13 +126,7 @@ const RootDataSourceComponent = ({ queryRef, dataSourceId }) => { sx={{ borderBottom: 1, borderColor: 'divider', marginBottom: 4 }} > { } /> - )} + } /> { + if (location.pathname.includes(`/dashboard/techniques/narratives/${narrative.id}/knowledge`)) return `/dashboard/techniques/narratives/${narrative.id}/knowledge`; + if (location.pathname.includes(`/dashboard/techniques/narratives/${narrative.id}/content`)) return `/dashboard/techniques/narratives/${narrative.id}/content`; + return location.pathname; + }; const link = `/dashboard/techniques/narratives/${narrativeId}/knowledge`; return ( <> @@ -129,6 +134,13 @@ class RootNarrative extends Component { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/techniques/narratives/${narrative.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
- )} + } /> { + if (location.pathname.includes(`/dashboard/threats/campaigns/${campaign.id}/knowledge`)) return `/dashboard/threats/campaigns/${campaign.id}/knowledge`; + if (location.pathname.includes(`/dashboard/threats/campaigns/${campaign.id}/content`)) return `/dashboard/threats/campaigns/${campaign.id}/content`; + return location.pathname; + }; const link = `/dashboard/threats/campaigns/${campaignId}/knowledge`; return (
@@ -137,6 +142,13 @@ class RootCampaign extends Component { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/threats/campaigns/${campaign.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
- )} + } /> { + if (location.pathname.includes(`/dashboard/threats/intrusion_sets/${intrusionSet.id}/knowledge`)) return `/dashboard/threats/intrusion_sets/${intrusionSet.id}/knowledge`; + if (location.pathname.includes(`/dashboard/threats/intrusion_sets/${intrusionSet.id}/content`)) return `/dashboard/threats/intrusion_sets/${intrusionSet.id}/content`; + return location.pathname; + }; const link = `/dashboard/threats/intrusion_sets/${intrusionSetId}/knowledge`; return ( <> @@ -143,6 +148,13 @@ class RootIntrusionSet extends Component { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/threats/intrusion_sets/${intrusionSet.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
- )} + } /> { + if (location.pathname.includes(`/dashboard/threats/threat_actors_group/${threatActorGroup.id}/knowledge`)) return `/dashboard/threats/threat_actors_group/${threatActorGroup.id}/knowledge`; + if (location.pathname.includes(`/dashboard/threats/threat_actors_group/${threatActorGroup.id}/content`)) return `/dashboard/threats/threat_actors_group/${threatActorGroup.id}/content`; + return location.pathname; + }; const link = `/dashboard/threats/threat_actors_group/${threatActorGroupId}/knowledge`; return ( <> @@ -141,6 +146,13 @@ class RootThreatActorGroup extends Component { ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/threats/threat_actors_group/${threatActorGroup.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return (
- )} + } /> { + if (location.pathname.includes(`/dashboard/threats/threat_actors_individual/${data.id}/knowledge`)) return `/dashboard/threats/threat_actors_individual/${data.id}/knowledge`; + if (location.pathname.includes(`/dashboard/threats/threat_actors_individual/${data.id}/content`)) return `/dashboard/threats/threat_actors_individual/${data.id}/content`; + return location.pathname; + }; const { t_i18n } = useFormatter(); const { threatActorIndividual: data, @@ -111,6 +116,13 @@ const RootThreatActorIndividualComponent = ({ ) { paddingRight = 350; } + if ( + location.pathname.includes( + `/dashboard/threats/threat_actors_individual/${data.id}/content/mapping`, + ) + ) { + paddingRight = 0; + } return ( <> @@ -161,13 +173,7 @@ const RootThreatActorIndividualComponent = ({ sx={{ borderBottom: 1, borderColor: 'divider', marginBottom: 4 }} > - )} + } />