diff --git a/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/SpanDetail/AccordionLinks.test.js b/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/SpanDetail/AccordionLinks.test.js index 5c3252fa56..9d4bb86cf4 100644 --- a/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/SpanDetail/AccordionLinks.test.js +++ b/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/SpanDetail/AccordionLinks.test.js @@ -84,6 +84,20 @@ describe('', () => { const linkLinks = screen.getAllByTestId('link-link'); expect(linkLinks).toHaveLength(links.length); }); + + it('renders "References" label when useOtelTerms is false', () => { + render(); + + expect(screen.getByText('References')).toBeInTheDocument(); + expect(screen.queryByText('Links')).not.toBeInTheDocument(); + }); + + it('renders "Links" label when useOtelTerms is true', () => { + render(); + + expect(screen.getByText('Links')).toBeInTheDocument(); + expect(screen.queryByText('References')).not.toBeInTheDocument(); + }); }); describe('', () => { diff --git a/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/SpanDetail/AccordionLinks.tsx b/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/SpanDetail/AccordionLinks.tsx index 8a4811910d..6bc445d4a3 100644 --- a/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/SpanDetail/AccordionLinks.tsx +++ b/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/SpanDetail/AccordionLinks.tsx @@ -8,16 +8,6 @@ import './AccordionLinks.css'; import { ILink } from '../../../../types/otel'; import ReferenceLink from '../../url/ReferenceLink'; -type AccordionLinksProps = { - data: ReadonlyArray; - highContrast?: boolean; - interactive?: boolean; - isOpen: boolean; - onToggle?: null | (() => void); - focusSpan: (uiFind: string) => void; - useOtelTerms: boolean; -}; - type ReferenceItemProps = { data: ReadonlyArray; focusSpan: (uiFind: string) => void; @@ -58,45 +48,54 @@ export function References(props: ReferenceItemProps) { ); } -export default class AccordionLinks extends React.PureComponent { - static defaultProps = { - highContrast: false, - interactive: true, - onToggle: null, - }; - - render() { - const { data, highContrast, interactive, isOpen, onToggle, focusSpan } = this.props; - const isEmpty = !Array.isArray(data) || !data.length; - const iconCls = cx('u-align-icon', { 'AccordianKReferences--emptyIcon': isEmpty }); - let arrow: React.ReactNode | null = null; - let headerProps: object | null = null; - if (interactive) { - arrow = isOpen ? : ; - headerProps = { - 'aria-checked': isOpen, - onClick: isEmpty ? null : onToggle, - role: 'switch', - }; - } - return ( -
-
- {arrow} - - {this.props.useOtelTerms ? 'Links' : 'References'} - {' '} - ({data.length}) -
- {isOpen && } -
- ); +function AccordionLinks({ + data, + highContrast = false, + interactive = true, + isOpen, + onToggle = null, + focusSpan, + useOtelTerms, +}: { + data: ReadonlyArray; + highContrast?: boolean; + interactive?: boolean; + isOpen: boolean; + onToggle?: null | (() => void); + focusSpan: (uiFind: string) => void; + useOtelTerms: boolean; +}) { + const isEmpty = !Array.isArray(data) || !data.length; + const iconCls = cx('u-align-icon', { 'AccordianKReferences--emptyIcon': isEmpty }); + let arrow: React.ReactNode | null = null; + let headerProps: object | null = null; + if (interactive) { + arrow = isOpen ? : ; + headerProps = { + 'aria-checked': isOpen, + onClick: isEmpty ? null : onToggle, + role: 'switch', + }; } + return ( +
+
+ {arrow} + + {useOtelTerms ? 'Links' : 'References'} + {' '} + ({data.length}) +
+ {isOpen && } +
+ ); } + +export default React.memo(AccordionLinks);