import { useEffect, useRef, useState, type ReactNode } from 'react' import { addPxToValue } from '../../global-utils/GlobalUtils' import Block from '../Primitives/Block/Block' import Text from '../Text/Text' import { Tooltip } from '../Tooltip' import type { StatCardV2Props, StatCardV2Variant } from './statcardV2.types' import type { StatCardV2TokensType } from './statcardV2.tokens' export const STATCARD_FALLBACK_DISPLAY = '--' export const renderVariantFallbackValue = ( tokens: StatCardV2TokensType, variant: StatCardV2Variant ) => { const valueTokens = tokens.topContainer.dataContainer.statsContainer.value[variant] return ( {STATCARD_FALLBACK_DISPLAY} ) } type StatCardV2ValueTooltipProps = { content: ReactNode isSmallScreen: boolean children: ReactNode } const StatCardV2ValueTooltip = ({ content, isSmallScreen, children, }: StatCardV2ValueTooltipProps) => { const [open, setOpen] = useState(false) const triggerRef = useRef(null) useEffect(() => { if (!isSmallScreen || !open || !content) return const handlePointerDown = (event: PointerEvent) => { const target = event.target as Node if (triggerRef.current?.contains(target)) return const tooltipEl = document.querySelector('[data-tooltip="tooltip"]') if (tooltipEl?.contains(target)) return setOpen(false) } document.addEventListener('pointerdown', handlePointerDown) return () => document.removeEventListener('pointerdown', handlePointerDown) }, [isSmallScreen, open, content]) if (content === undefined || content === null || content === '') { return <>{children} } if (!isSmallScreen) { return {children} } return ( { event.stopPropagation() setOpen(true) }} > {children} ) } const StatCardV2Value = ({ value, valueTooltip, tokens, variant, id, isSmallScreen = false, }: { value: StatCardV2Props['value'] valueTooltip?: ReactNode tokens: StatCardV2TokensType variant: StatCardV2Variant id?: string isSmallScreen?: boolean }) => { const valueTokens = tokens.topContainer.dataContainer.statsContainer.value const displayValue = value !== undefined && value !== null && value !== '' ? value : STATCARD_FALLBACK_DISPLAY return ( {displayValue} ) } export default StatCardV2Value