import React, { useEffect, useLayoutEffect, useRef, useState } from 'react'; import { JSONTree } from 'react-json-tree'; import { Tab, ListGroup, Row, Col } from 'react-bootstrap'; import { usePreviewLoading, usePreviewData, useQueryPanelActions } from '@/_stores/queryPanelStore'; import { getTheme, tabs } from '../constants'; import RemoveRectangle from '@/_ui/Icon/solidIcons/RemoveRectangle'; import { ButtonSolid } from '@/_ui/AppButton/AppButton'; const Preview = ({ darkMode }) => { const [key, setKey] = useState('raw'); const [isJson, setIsJson] = useState(false); const [theme, setTheme] = useState(() => getTheme(darkMode)); const queryPreviewData = usePreviewData(); const previewLoading = usePreviewLoading(); const { setPreviewData } = useQueryPanelActions(); const previewPanelRef = useRef(); useEffect(() => { setTheme(() => getTheme(darkMode)); }, [darkMode]); useLayoutEffect(() => { if (queryPreviewData || previewLoading) { previewPanelRef.current.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest', }); } }, [queryPreviewData, previewLoading]); useEffect(() => { if (queryPreviewData !== null && typeof queryPreviewData === 'object') { setKey('json'); } else { setKey('raw'); } setIsJson(queryPreviewData !== null && typeof queryPreviewData === 'object'); }, [queryPreviewData]); const renderRawData = () => { if (queryPreviewData) { return isJson ? JSON.stringify(queryPreviewData).toString() : queryPreviewData.toString(); } return ''; }; return (
setKey(k)} defaultActiveKey="raw">
{previewLoading && (
)} Preview {tabs.map((tab) => ( {tab} ))} {queryPreviewData && ( setPreviewData()}> Clear )}
{renderRawData()}
); }; export default Preview;