export function sankeyTooltip( echartNodes: any[], nodeValues: Record, ) { return (params: any) => { if ('source' in params.data && 'target' in params.data) { const sourceName = echartNodes[params.data.source].name; const targetName = echartNodes[params.data.target].name; const sourceValue = nodeValues[params.data.source]; const safeSourceName = shortenString(sourceName); const safeTargetName = shortenString(targetName); return `
${safeSourceName}
${sourceValue} Sessions
${safeTargetName}
${params.data.value} (${params.data.percentage.toFixed( 2, )}%) Sessions
`; } if ('name' in params.data) { return `
■︎ ${params.data.name}
${params.value} Sessions
`; } }; } const shortenString = (str: string) => { const limit = 60; const leftPart = 25; const rightPart = 20; const safeStr = str.length > limit ? `${str.slice(0, leftPart)}...${str.slice( str.length - rightPart, str.length, )}` : str; return safeStr; }; export const getEventPriority = (type: string): number => { switch (type) { case 'DROP': return 3; case 'OTHER': return 2; default: return 1; } }; export const getNodeName = ( eventType: string, nodeName: string | null, ): string => { if (!nodeName) { return eventType.charAt(0) + eventType.slice(1).toLowerCase(); } return nodeName; };