diff --git a/libs/shared/lib/querybuilder/panel/QueryBuilder.tsx b/libs/shared/lib/querybuilder/panel/QueryBuilder.tsx index ad0ff3253217ad1a312c997595086aae01f4ea48..cb27bb40911afa5de27b028c054cbf03df0fe9a6 100644 --- a/libs/shared/lib/querybuilder/panel/QueryBuilder.tsx +++ b/libs/shared/lib/querybuilder/panel/QueryBuilder.tsx @@ -45,6 +45,7 @@ import { ConnectingNodeDataI } from './utils/connectorDrop'; import { resultSetFocus } from '../../data-access/store/interactionSlice'; import { QueryBuilderDispatcherContext } from './QueryBuilderDispatcher'; import { QueryBuilderNav, QueryBuilderToggleSettings } from './QueryBuilderNav'; +import html2canvas from 'html2canvas'; import { ContextMenu } from './ContextMenu'; export type QueryBuilderProps = { @@ -57,6 +58,7 @@ export type QueryBuilderProps = { export const QueryBuilderInner = (props: QueryBuilderProps) => { const [toggleSettings, setToggleSettings] = useState<QueryBuilderToggleSettings>(); const reactFlowWrapper = useRef<HTMLDivElement>(null); + const reactFlowRef = useRef<HTMLDivElement>(null); const queryBuilderSettings = useQuerybuilderSettings(); const saveStateAuthorization = useActiveSaveStateAuthorization(); @@ -504,6 +506,21 @@ export const QueryBuilderInner = (props: QueryBuilderProps) => { } }, [queryBuilderSettings]); + const handleScreenshot = async () => { + if (reactFlowRef.current) { + try { + const canvas = await html2canvas(reactFlowRef.current); + const screenshotUrl = canvas.toDataURL('image/jpeg'); + const link = document.createElement('a'); + link.href = screenshotUrl; + link.download = 'querybuilder.png'; + link.click(); + } catch (error) { + dispatch(addError('Screenshot failed.')); + } + } + }; + return ( <QueryBuilderDispatcherContext.Provider value={{ @@ -543,7 +560,7 @@ export const QueryBuilderInner = (props: QueryBuilderProps) => { onRunQuery={() => { if (props.onRunQuery) props.onRunQuery(); }} - onScreenshot={() => {}} + onScreenshot={handleScreenshot} onLogic={() => { if (toggleSettings === 'logic') setToggleSettings(undefined); else setToggleSettings('logic'); @@ -602,6 +619,7 @@ export const QueryBuilderInner = (props: QueryBuilderProps) => { </defs> </svg> <ReactFlow + ref={reactFlowRef} edges={elements.edges} nodes={elements.nodes} snapGrid={[10, 10]}