ragflow
/
web
/src
/pages
/add-knowledge
/components
/knowledge-testing
/testing-control
/label-word-cloud.tsx
| import { useSelectTestingResult } from '@/hooks/knowledge-hooks'; | |
| import { Chart } from '@antv/g2'; | |
| import { useCallback, useEffect, useMemo, useRef } from 'react'; | |
| export function LabelWordCloud() { | |
| const domRef = useRef<HTMLDivElement>(null); | |
| let chartRef = useRef<Chart>(); | |
| const { labels } = useSelectTestingResult(); | |
| const list = useMemo(() => { | |
| if (!labels) { | |
| return []; | |
| } | |
| return Object.keys(labels).reduce< | |
| Array<{ text: string; name: string; value: number }> | |
| >((pre, cur) => { | |
| pre.push({ name: cur, text: cur, value: labels[cur] }); | |
| return pre; | |
| }, []); | |
| }, [labels]); | |
| const renderWordCloud = useCallback(() => { | |
| if (domRef.current && list.length) { | |
| chartRef.current = new Chart({ container: domRef.current }); | |
| chartRef.current.options({ | |
| type: 'wordCloud', | |
| autoFit: true, | |
| layout: { | |
| fontSize: [6, 15], | |
| }, | |
| data: { | |
| type: 'inline', | |
| value: list, | |
| }, | |
| encode: { color: 'text' }, | |
| legend: false, | |
| tooltip: { | |
| title: 'name', // title | |
| items: ['value'], // data item | |
| }, | |
| }); | |
| chartRef.current.render(); | |
| } | |
| }, [list]); | |
| useEffect(() => { | |
| renderWordCloud(); | |
| return () => { | |
| chartRef.current?.destroy(); | |
| }; | |
| }, [renderWordCloud]); | |
| return <div ref={domRef} className="w-full h-[13vh]"></div>; | |
| } | |