From 2c6d5297d9fcc81bf89557aa850e5a72f322edd8 Mon Sep 17 00:00:00 2001 From: Laurent Bonnet Date: Tue, 26 Mar 2024 11:19:16 +0100 Subject: [PATCH] [frontend] handle Distribution.entity that might be null --- .../src/components/dashboard/WidgetDonut.tsx | 14 +++++++------- .../analyses/groupings/GroupingsDonut.jsx | 2 +- .../groupings/GroupingsHorizontalBars.jsx | 2 +- .../groupings/StixCoreObjectGroupingsDonut.jsx | 2 +- .../StixCoreObjectGroupingsHorizontalBars.jsx | 2 +- .../analyses/reports/ReportsDonut.jsx | 2 +- .../analyses/reports/ReportsHorizontalBars.jsx | 2 +- .../StixCoreObjectReportsHorizontalBars.jsx | 2 +- .../common/audits/AuditsDistributionList.jsx | 4 ++-- .../common/audits/AuditsHorizontalBars.jsx | 10 +++++----- .../common/location/GlobalVictimologyMap.jsx | 4 ++-- .../StixCoreObjectsDistributionList.jsx | 2 +- .../StixCoreObjectsHorizontalBars.jsx | 10 +++++----- .../StixCoreObjectsMultiHorizontalBars.jsx | 8 ++++---- ...tityStixCoreRelationshipsHorizontalBars.jsx | 6 +++--- .../StixRelationshipsDistributionList.jsx | 4 ++-- .../StixRelationshipsHorizontalBars.jsx | 18 +++++++++--------- .../StixRelationshipsMultiHorizontalBars.jsx | 16 ++++++++-------- .../StixRelationshipsPolarArea.jsx | 2 +- .../EntityStixSightingRelationshipsDonut.jsx | 9 ++++----- .../indicators/IndicatorsDonut.jsx | 2 +- .../opencti-front/src/utils/Graph.js | 2 +- 22 files changed, 62 insertions(+), 63 deletions(-) diff --git a/opencti-platform/opencti-front/src/components/dashboard/WidgetDonut.tsx b/opencti-platform/opencti-front/src/components/dashboard/WidgetDonut.tsx index 4a4beee20b635..1a3a73846df80 100644 --- a/opencti-platform/opencti-front/src/components/dashboard/WidgetDonut.tsx +++ b/opencti-platform/opencti-front/src/components/dashboard/WidgetDonut.tsx @@ -27,27 +27,27 @@ const WidgetDonut = ({ const chartData = data.map((n) => n.value); // eslint-disable-next-line no-nested-ternary const labels = data.map((n) => (groupBy.endsWith('_id') - ? defaultValue(n.entity) + ? defaultValue(n.entity, 'Restricted') : groupBy === 'entity_type' && t_i18n(`entity_${n.label}`) !== `entity_${n.label}` ? t_i18n(`entity_${n.label}`) : n.label)); let chartColors = []; if (data.at(0)?.entity?.color) { - chartColors = data.map((n) => (theme.palette.mode === 'light' && n.entity.color === '#ffffff' + chartColors = data.map((n) => (theme.palette.mode === 'light' && n.entity?.color === '#ffffff' ? '#000000' - : n.entity.color)); + : n.entity?.color)); } if (data.at(0)?.entity?.x_opencti_color) { chartColors = data.map((n) => (theme.palette.mode === 'light' - && n.entity.x_opencti_color === '#ffffff' + && n.entity?.x_opencti_color === '#ffffff' ? '#000000' - : n.entity.x_opencti_color)); + : n.entity?.x_opencti_color)); } if (data.at(0)?.entity?.template?.color) { - chartColors = data.map((n) => (theme.palette.mode === 'light' && n.entity.template.color === '#ffffff' + chartColors = data.map((n) => (theme.palette.mode === 'light' && n.entity?.template.color === '#ffffff' ? '#000000' - : n.entity.template.color)); + : n.entity?.template.color)); } return ( diff --git a/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingsDonut.jsx b/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingsDonut.jsx index f6c69364d4ada..9ce408c2fc32d 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingsDonut.jsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingsDonut.jsx @@ -70,7 +70,7 @@ const GroupingsDonut = (props) => { let data = resultProps.groupingsDistribution; if (field && field.includes('internal_id')) { data = R.map( - (n) => R.assoc('label', n.entity.name, n), + (n) => R.assoc('label', n.entity?.name ?? 'Restricted', n), resultProps.groupingsDistribution, ); } diff --git a/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingsHorizontalBars.jsx b/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingsHorizontalBars.jsx index f5edae6aff118..6a2059d8f74ea 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingsHorizontalBars.jsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/groupings/GroupingsHorizontalBars.jsx @@ -71,7 +71,7 @@ class GroupingsHorizontalBars extends Component { && props.groupingsDistribution.length > 0 ) { const data = props.groupingsDistribution.map((n) => ({ - x: n.entity.name, + x: n.entity?.name ?? 'Restricted', y: n.value, })); const chartData = [{ name: t('Number of groupings'), data }]; diff --git a/opencti-platform/opencti-front/src/private/components/analyses/groupings/StixCoreObjectGroupingsDonut.jsx b/opencti-platform/opencti-front/src/private/components/analyses/groupings/StixCoreObjectGroupingsDonut.jsx index 15c6a291c4e67..9bdffb91f192b 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/groupings/StixCoreObjectGroupingsDonut.jsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/groupings/StixCoreObjectGroupingsDonut.jsx @@ -72,7 +72,7 @@ class StixCoreObjectGroupingsDonut extends Component { let data = props.groupingsDistribution; if (field && field.includes('internal_id')) { data = R.map( - (n) => R.assoc('label', n.entity.name, n), + (n) => R.assoc('label', n.entity?.name ?? 'Restricted', n), props.groupingsDistribution, ); } diff --git a/opencti-platform/opencti-front/src/private/components/analyses/groupings/StixCoreObjectGroupingsHorizontalBars.jsx b/opencti-platform/opencti-front/src/private/components/analyses/groupings/StixCoreObjectGroupingsHorizontalBars.jsx index 5063739ddfd0e..98565e839ed20 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/groupings/StixCoreObjectGroupingsHorizontalBars.jsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/groupings/StixCoreObjectGroupingsHorizontalBars.jsx @@ -68,7 +68,7 @@ class StixCoreObjectGroupingsHorizontalBars extends Component { && props.groupingsDistribution.length > 0 ) { const data = props.groupingsDistribution.map((n) => ({ - x: n.entity.name, + x: n.entity?.name ?? 'Restricted', y: n.value, })); const chartData = [{ name: t('Number of groupings'), data }]; diff --git a/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportsDonut.jsx b/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportsDonut.jsx index 6dca432947821..67890589f33fd 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportsDonut.jsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportsDonut.jsx @@ -73,7 +73,7 @@ class ReportsDonut extends Component { let data = props.reportsDistribution; if (field && field.includes('internal_id')) { data = R.map( - (n) => R.assoc('label', n.entity.name, n), + (n) => R.assoc('label', n.entity?.name ?? 'Restricted', n), props.reportsDistribution, ); } diff --git a/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportsHorizontalBars.jsx b/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportsHorizontalBars.jsx index df5822db5aa2d..029e106984078 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportsHorizontalBars.jsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/reports/ReportsHorizontalBars.jsx @@ -71,7 +71,7 @@ class ReportsHorizontalBars extends Component { && props.reportsDistribution.length > 0 ) { const data = props.reportsDistribution.map((n) => ({ - x: n.entity.name, + x: n.entity?.name ?? 'Restricted', y: n.value, })); const chartData = [{ name: t('Number of reports'), data }]; diff --git a/opencti-platform/opencti-front/src/private/components/analyses/reports/StixCoreObjectReportsHorizontalBars.jsx b/opencti-platform/opencti-front/src/private/components/analyses/reports/StixCoreObjectReportsHorizontalBars.jsx index 25c91e5d29714..8c87df94f5bac 100644 --- a/opencti-platform/opencti-front/src/private/components/analyses/reports/StixCoreObjectReportsHorizontalBars.jsx +++ b/opencti-platform/opencti-front/src/private/components/analyses/reports/StixCoreObjectReportsHorizontalBars.jsx @@ -68,7 +68,7 @@ class StixCoreObjectReportsHorizontalBars extends Component { && props.reportsDistribution.length > 0 ) { const data = props.reportsDistribution.map((n) => ({ - x: n.entity.name, + x: n.entity?.name ?? 'Restricted', y: n.value, })); const chartData = [{ name: t('Number of reports'), data }]; diff --git a/opencti-platform/opencti-front/src/private/components/common/audits/AuditsDistributionList.jsx b/opencti-platform/opencti-front/src/private/components/common/audits/AuditsDistributionList.jsx index 4ee8c0a11c2f8..efc5d1c53a716 100644 --- a/opencti-platform/opencti-front/src/private/components/common/audits/AuditsDistributionList.jsx +++ b/opencti-platform/opencti-front/src/private/components/common/audits/AuditsDistributionList.jsx @@ -273,13 +273,13 @@ const AuditsDistributionList = ({ selection.attribute.endsWith('.id') || selection.attribute.endsWith('_id') || selection.attribute.endsWith('_ids') - ? o.entity.id + ? o.entity?.id : null, type: selection.attribute.endsWith('.id') || selection.attribute.endsWith('_id') || selection.attribute.endsWith('_ids') - ? o.entity.entity_type + ? o.entity?.entity_type : o.label, })); return ; diff --git a/opencti-platform/opencti-front/src/private/components/common/audits/AuditsHorizontalBars.jsx b/opencti-platform/opencti-front/src/private/components/common/audits/AuditsHorizontalBars.jsx index d9a57376d9a78..3100d0216fb4b 100644 --- a/opencti-platform/opencti-front/src/private/components/common/audits/AuditsHorizontalBars.jsx +++ b/opencti-platform/opencti-front/src/private/components/common/audits/AuditsHorizontalBars.jsx @@ -292,7 +292,7 @@ const AuditsHorizontalBars = ({ selection.attribute.endsWith('.id') || selection.attribute.endsWith('_id') || selection.attribute.endsWith('_ids') - ? itemColor(n.entity.entity_type) + ? itemColor(n.entity?.entity_type) : itemColor(n.label), })); const chartData = [ @@ -305,11 +305,11 @@ const AuditsHorizontalBars = ({ || selection.attribute.endsWith('_id') || selection.attribute.endsWith('_ids') ? props.auditsDistribution.map((n) => ({ - id: n.entity.id, + id: n.entity?.id, entity_type: - n.entity.entity_type === 'Workspace' - ? n.entity.type - : n.entity.entity_type, + n.entity?.entity_type === 'Workspace' + ? n.entity.type + : n.entity?.entity_type, })) : null; return ( diff --git a/opencti-platform/opencti-front/src/private/components/common/location/GlobalVictimologyMap.jsx b/opencti-platform/opencti-front/src/private/components/common/location/GlobalVictimologyMap.jsx index bb5344b4acc70..f39d0c3e40de8 100644 --- a/opencti-platform/opencti-front/src/private/components/common/location/GlobalVictimologyMap.jsx +++ b/opencti-platform/opencti-front/src/private/components/common/location/GlobalVictimologyMap.jsx @@ -96,14 +96,14 @@ class GlobalVictimologyMap extends Component { x.entity, ), R.filter( - (n) => n.entity.entity_type === 'Country', + (n) => n.entity?.entity_type === 'Country', props.stixCoreRelationshipsDistribution, ), ); const cities = R.map( (x) => x.entity, R.filter( - (n) => n.entity.entity_type === 'City', + (n) => n.entity?.entity_type === 'City', props.stixCoreRelationshipsDistribution, ), ); diff --git a/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsDistributionList.jsx b/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsDistributionList.jsx index f45782f5159a8..dfd3927d7e352 100644 --- a/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsDistributionList.jsx +++ b/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsDistributionList.jsx @@ -131,7 +131,7 @@ const StixCoreObjectsDistributionList = ({ : o.label, value: o.value, color: o.entity?.color ?? o.entity?.x_opencti_color, - id: selection.attribute.endsWith('_id') ? o.entity.id : null, + id: selection.attribute.endsWith('_id') ? o.entity?.id : null, type: o.entity?.entity_type ?? o.label, })); return ; diff --git a/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsHorizontalBars.jsx b/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsHorizontalBars.jsx index fc5db087e43d7..cc3135e2d658e 100644 --- a/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsHorizontalBars.jsx +++ b/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsHorizontalBars.jsx @@ -241,7 +241,7 @@ const StixCoreObjectsHorizontalBars = ({ ) { const data = props.stixCoreObjectsDistribution.map((n) => { let color = selection.attribute.endsWith('_id') - ? itemColor(n.entity.entity_type) + ? itemColor(n.entity?.entity_type) : itemColor(n.label); if (n.entity?.color) { color = theme.palette.mode === 'light' && n.entity.color === '#ffffff' @@ -250,13 +250,13 @@ const StixCoreObjectsHorizontalBars = ({ } if (n.entity?.x_opencti_color) { color = theme.palette.mode === 'light' - && n.entity.x_opencti_color === '#ffffff' + && n.entity.x_opencti_color === '#ffffff' ? '#000000' : n.entity.x_opencti_color; } if (n.entity?.template?.color) { color = theme.palette.mode === 'light' - && n.entity.template.color === '#ffffff' + && n.entity.template.color === '#ffffff' ? '#000000' : n.entity.template.color; } @@ -279,8 +279,8 @@ const StixCoreObjectsHorizontalBars = ({ ]; const redirectionUtils = selection.attribute === 'name' ? props.stixCoreObjectsDistribution.map((n) => ({ - id: n.entity.id, - entity_type: n.entity.entity_type, + id: n.entity?.id, + entity_type: n.entity?.entity_type, })) : undefined; return ( diff --git a/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsMultiHorizontalBars.jsx b/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsMultiHorizontalBars.jsx index 36b6ff1dbbe1b..ee61bd280ef3f 100644 --- a/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsMultiHorizontalBars.jsx +++ b/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsMultiHorizontalBars.jsx @@ -444,7 +444,7 @@ const stixCoreObjectsMultiHorizontalBars = ({ ) { const data = props.stixCoreObjectsDistribution.map((n) => { let color = selection.attribute.endsWith('_id') - ? itemColor(n.entity.entity_type) + ? itemColor(n.entity?.entity_type) : itemColor(n.label); if (n.entity?.color) { color = theme.palette.mode === 'light' && n.entity.color === '#ffffff' @@ -467,7 +467,7 @@ const stixCoreObjectsMultiHorizontalBars = ({ x: // eslint-disable-next-line no-nested-ternary selection.attribute.endsWith('_id') - ? defaultValue(n.entity) + ? defaultValue(n.entity, 'Restricted') : selection.attribute === 'entity_type' ? t_i18n(`entity_${n.label}`) : n.label, @@ -483,8 +483,8 @@ const stixCoreObjectsMultiHorizontalBars = ({ ]; const redirectionUtils = selection.attribute === 'name' ? props.stixCoreObjectsDistribution.map((n) => ({ - id: n.entity.id, - entity_type: n.entity.entity_type, + id: n.entity?.id, + entity_type: n.entity?.entity_type, })) : null; return ( diff --git a/opencti-platform/opencti-front/src/private/components/common/stix_core_relationships/EntityStixCoreRelationshipsHorizontalBars.jsx b/opencti-platform/opencti-front/src/private/components/common/stix_core_relationships/EntityStixCoreRelationshipsHorizontalBars.jsx index 0fadaafa4d309..ed018f1efaae6 100644 --- a/opencti-platform/opencti-front/src/private/components/common/stix_core_relationships/EntityStixCoreRelationshipsHorizontalBars.jsx +++ b/opencti-platform/opencti-front/src/private/components/common/stix_core_relationships/EntityStixCoreRelationshipsHorizontalBars.jsx @@ -238,14 +238,14 @@ const EntityStixCoreRelationshipsHorizontalBars = ( x: // eslint-disable-next-line no-nested-ternary field === 'internal_id' - ? defaultValue(n.entity) + ? defaultValue(n.entity, 'Restricted') : field === 'entity_type' ? t_i18n(`entity_${n.label}`) : n.label, y: n.value, fillColor: field === 'internal_id' - ? itemColor(n.entity.entity_type) + ? itemColor(n.entity?.entity_type) : itemColor(n.label), })); const chartData = [ @@ -257,7 +257,7 @@ const EntityStixCoreRelationshipsHorizontalBars = ( const redirectionUtils = (field === 'internal_id') ? props.stixCoreRelationshipsDistribution.map( (n) => ({ id: n.label, - entity_type: n.entity.entity_type, + entity_type: n.entity?.entity_type, }), ) : null; return ( diff --git a/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsDistributionList.jsx b/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsDistributionList.jsx index 8bd34a11e185e..3203f7c5a5021 100644 --- a/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsDistributionList.jsx +++ b/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsDistributionList.jsx @@ -257,8 +257,8 @@ const StixRelationshipsDistributionList = ({ ? defaultValue(o.entity) : o.label, value: o.value, - id: finalField.endsWith('_id') ? o.entity.id : null, - type: finalField.endsWith('_id') ? o.entity.entity_type : o.label, + id: finalField.endsWith('_id') ? o.entity?.id : null, + type: finalField.endsWith('_id') ? o.entity?.entity_type : o.label, })); return ( { let color = selection.attribute.endsWith('_id') - ? itemColor(n.entity.entity_type) + ? itemColor(n.entity?.entity_type) : itemColor(n.label); if (n.entity?.color) { - color = theme.palette.mode === 'light' && n.entity.color === '#ffffff' + color = theme.palette.mode === 'light' && n.entity?.color === '#ffffff' ? '#000000' - : n.entity.color; + : n.entity?.color; } if (n.entity?.x_opencti_color) { color = theme.palette.mode === 'light' - && n.entity.x_opencti_color === '#ffffff' + && n.entity?.x_opencti_color === '#ffffff' ? '#000000' - : n.entity.x_opencti_color; + : n.entity?.x_opencti_color; } if (n.entity?.template?.color) { color = theme.palette.mode === 'light' - && n.entity.template.color === '#ffffff' + && n.entity?.template.color === '#ffffff' ? '#000000' - : n.entity.template.color; + : n.entity?.template.color; } return { x: finalField.endsWith('_id') - ? defaultValue(n.entity) + ? defaultValue(n.entity, 'Restricted') : n.label, y: n.value, fillColor: color, @@ -291,7 +291,7 @@ const StixRelationshipsHorizontalBars = ({ const redirectionUtils = finalField.endsWith('_id') ? props.stixRelationshipsDistribution.map((n) => ({ id: n.label, - entity_type: n.entity.entity_type, + entity_type: n.entity?.entity_type, })) : undefined; return ( diff --git a/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsMultiHorizontalBars.jsx b/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsMultiHorizontalBars.jsx index 042a33d1eb955..0f6edb2db8eda 100644 --- a/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsMultiHorizontalBars.jsx +++ b/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsMultiHorizontalBars.jsx @@ -826,17 +826,17 @@ const StixRelationshipsMultiHorizontalBars = ({ && props.stixRelationshipsDistribution && props.stixRelationshipsDistribution.length > 0 ) { - const categories = props.stixRelationshipsDistribution.map((n) => defaultValue(n.entity)); + const categories = props.stixRelationshipsDistribution.map((n) => defaultValue(n.entity, 'Restricted')); const entitiesMapping = {}; for (const distrib of props.stixRelationshipsDistribution) { for (const subDistrib of distrib.entity[key]) { entitiesMapping[ finalSubDistributionField === 'internal_id' - ? defaultValue(subDistrib.entity) + ? defaultValue(subDistrib.entity, 'Restricted') : subDistrib.label ] = (entitiesMapping[ finalSubDistributionField === 'internal_id' - ? defaultValue(subDistrib.entity) + ? defaultValue(subDistrib.entity, 'Restricted') : subDistrib.label ] || 0) + subDistrib.value; } @@ -849,7 +849,7 @@ const StixRelationshipsMultiHorizontalBars = ({ for (const distrib of props.stixRelationshipsDistribution) { for (const sortedEntity of sortedEntityMapping) { const entityData = R.head( - distrib.entity[key].filter( + distrib.entity?.[key].filter( (n) => (finalSubDistributionField === 'internal_id' ? defaultValue(n.entity) : n.label) === sortedEntity[0], @@ -907,14 +907,14 @@ const StixRelationshipsMultiHorizontalBars = ({ const redirectionUtils = finalField === 'internal_id' ? props.stixRelationshipsDistribution.map((n) => ({ id: n.label, - entity_type: n.entity.entity_type, + entity_type: n.entity?.entity_type, series: subSectionIdsOrder.map((subSectionId) => { - const [entity] = n.entity[key].filter( + const [entity] = n.entity[key]?.filter( (e) => e.label === subSectionId, - ); + ) ?? []; return { id: subSectionId, - entity_type: entity ? entity.entity.entity_type : null, + entity_type: entity ? entity.entity?.entity_type : null, }; }), })) diff --git a/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsPolarArea.jsx b/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsPolarArea.jsx index 126d0e00abf4e..cd46af85152d2 100644 --- a/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsPolarArea.jsx +++ b/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsPolarArea.jsx @@ -261,7 +261,7 @@ const StixRelationshipsPolarArea = ({ data = R.map( (n) => R.assoc( 'label', - defaultValue(n.entity), + defaultValue(n.entity, 'Restricted'), n, ), props.stixRelationshipsDistribution, diff --git a/opencti-platform/opencti-front/src/private/components/events/stix_sighting_relationships/EntityStixSightingRelationshipsDonut.jsx b/opencti-platform/opencti-front/src/private/components/events/stix_sighting_relationships/EntityStixSightingRelationshipsDonut.jsx index 51433ed4008c9..770f5b0d50327 100644 --- a/opencti-platform/opencti-front/src/private/components/events/stix_sighting_relationships/EntityStixSightingRelationshipsDonut.jsx +++ b/opencti-platform/opencti-front/src/private/components/events/stix_sighting_relationships/EntityStixSightingRelationshipsDonut.jsx @@ -12,6 +12,7 @@ import Chart from '../../common/charts/Chart'; import { QueryRenderer } from '../../../../relay/environment'; import inject18n from '../../../../components/i18n'; import { donutChartOptions } from '../../../../utils/Charts'; +import { defaultValue } from '../../../../utils/Graph'; const styles = () => ({ paper: { @@ -219,11 +220,9 @@ class EntityStixSightingRelationshipsDonut extends Component { (n) => R.assoc( 'label', `${ - toTypes.length > 1 - ? `[${t(`entity_${n.entity.entity_type}`)}] ${ - n.entity.name - }` - : `${n.entity.name}` + toTypes.length > 1 && n.entity + ? `[${t(`entity_${n.entity.entity_type}`)}] ${n.entity.name}` + : `${defaultValue(n.entity, 'Restricted')}` }`, n, ), diff --git a/opencti-platform/opencti-front/src/private/components/observations/indicators/IndicatorsDonut.jsx b/opencti-platform/opencti-front/src/private/components/observations/indicators/IndicatorsDonut.jsx index 948f73e259a27..e2c10865d517c 100644 --- a/opencti-platform/opencti-front/src/private/components/observations/indicators/IndicatorsDonut.jsx +++ b/opencti-platform/opencti-front/src/private/components/observations/indicators/IndicatorsDonut.jsx @@ -72,7 +72,7 @@ class IndicatorsDonut extends Component { let data = props.indicatorsDistribution; if (field && field.includes('internal_id')) { data = map( - (n) => assoc('label', n.entity.name, n), + (n) => assoc('label', n.entity?.name ?? 'Restricted', n), props.indicatorsDistribution, ); } diff --git a/opencti-platform/opencti-front/src/utils/Graph.js b/opencti-platform/opencti-front/src/utils/Graph.js index 125f5a8a6f2f0..873b3d5b5c63c 100644 --- a/opencti-platform/opencti-front/src/utils/Graph.js +++ b/opencti-platform/opencti-front/src/utils/Graph.js @@ -382,7 +382,7 @@ export const defaultKey = (n) => { }; export const defaultValue = (n, fallback = 'Unknown') => { - if (!n) return ''; + if (!n) return fallback; if (typeof n.definition === 'object') { return defaultValueMarking(n); }