#18353·opencti

fix(frontend): tooltips anchored on a React Fragment never open

Author: xfournetCreated Sep 18, 2026Updated Sep 18, 2026
Labelsbug

Description

Seven Tooltip call sites pass a React Fragment as the tooltip's single child. MUI's Tooltip forwards its ref to that child and gates the tooltip on having resolved a DOM node from it, so a Fragment child means the tooltip never opens. These seven tooltips are silently dead.

In @mui/material 6.5.0, Tooltip builds the child ref with:

javascript
const handleRef = useForkRef(getReactElementRef(children), setChildNode, ref);

and then gates the popper on the resolved node:

javascript
open: childNode ? open : false,

A Fragment cannot hold a ref, so setChildNode is never called, childNode stays undefined, and open is forced to false regardless of hover state.

Affected call sites:

File Line Column / place
opencti-platform/opencti-front/src/components/dataGrid/dataTableUtils.tsx 226 color
490 file_size
803 number_observed
871 operatingSystem
1409 x_opencti_color
opencti-platform/opencti-front/src/private/components/common/stix_core_relationships/StixCoreRelationshipOverview.tsx 4531 source entity name
4589 target entity name

Environment

  1. OS: Fedora 44 (Linux 7.2.5)
  2. Version: 7.260917.0
  3. Other environment details: @mui/material 6.5.0, react / react-dom 19.2.8, Chromium via Playwright

Reproducible steps

  1. Go to Observations > Artifacts.
  2. Hover the value shown in the File size column.

Expected output

A tooltip appears, as it does for the neighbouring columns rendered through defaultRender (for example Value or Platform creation date), which anchor the tooltip on a Stack.

Actual output

No tooltip appears. Measured on a running platform by hovering the value and counting [role="tooltip"] nodes:

Column Anchor element Tooltips found
observable_value (via defaultRender) Stack 1
created_at (via defaultRender) Stack 1
file_size (Fragment child) div cell, no anchor 0

Replacing the Fragment with a real element restores it, at an unchanged React version: the anchor becomes a span and one tooltip is found.

Additional information

This also blocks the React 19.3.0 upgrade (#18247). React 19.3.0 introduces Fragment Refs, so a ref attached to a <Fragment /> is no longer ignored — it is invoked with a FragmentInstance. That object has neither getAttribute nor removeAttribute, so Tooltip throws TypeError: childNode.getAttribute is not a function from a passive effect, which remounts the subtree in a loop. On #18247 this made tests_e2e/artifact/createArtifact.spec.ts time out, because the artifacts list renders the file_size column.

Side observation, not covered by this report: the file_size column passes file?.metaData?.mimetype as its tooltip title, so once anchored it shows the mime type rather than the size.

Source: OpenCTI-Platform/opencti