'use client'; import { useCallback, useMemo, useState } from 'react'; import { ReactFlowProvider } from 'reactflow'; import { Node } from 'reactflow'; import Modal, { ModalProps } from '@/components/ui/Modal'; import Overlay from '@/components/ui/Overlay'; import { useConceptOptions } from '@/context/ConceptOptionsContext'; import { HelpTopic } from '@/models/miscellaneous'; import { SyntaxTree } from '@/models/rslang'; import ASTFlow from './ASTFlow'; interface DlgShowASTProps extends Pick { syntaxTree: SyntaxTree; expression: string; } function DlgShowAST({ hideWindow, syntaxTree, expression }: DlgShowASTProps) { const { colors } = useConceptOptions(); const [hoverID, setHoverID] = useState(undefined); const hoverNode = useMemo(() => syntaxTree.find(node => node.uid === hoverID), [hoverID, syntaxTree]); const handleHoverIn = useCallback((node: Node) => setHoverID(Number(node.id)), []); const handleHoverOut = useCallback(() => setHoverID(undefined), []); return ( {!hoverNode ? expression : null} {hoverNode ? (
{expression.slice(0, hoverNode.start)} {expression.slice(hoverNode.start, hoverNode.finish)} {expression.slice(hoverNode.finish)}
) : null}
); } export default DlgShowAST;