diff --git a/src/components/Dashboard/common/TemplateEditor.jsx b/src/components/Dashboard/common/TemplateEditor.jsx index 525a9e5..71a84b1 100644 --- a/src/components/Dashboard/common/TemplateEditor.jsx +++ b/src/components/Dashboard/common/TemplateEditor.jsx @@ -1,14 +1,11 @@ -import { useState, useContext, useEffect, useRef, useCallback } from 'react' +import { useState } from 'react' import PropTypes from 'prop-types' -import { Flex, Alert, Card, Spin, Splitter, Button, Modal, Input } from 'antd' +import { Flex, Alert, Card, Spin, Splitter, Button, Modal } from 'antd' import { LoadingOutlined } from '@ant-design/icons' -import PlusIcon from '../../Icons/PlusIcon.jsx' -import MinusIcon from '../../Icons/MinusIcon.jsx' import ExclamationOctagonIcon from '../../Icons/ExclamationOctagonIcon.jsx' import CheckCircleIcon from '../../Icons/CheckCircleIcon.jsx' import ObjectProperty from '../common/ObjectProperty.jsx' -import { ApiServerContext } from '../context/ApiServerContext.jsx' -import InfoCircleIcon from '../../Icons/InfoCircleIcon.jsx' +import TemplatePreview from './TemplatePreview.jsx' const TemplateEditor = ({ objectData, @@ -17,134 +14,36 @@ const TemplateEditor = ({ isEditing, style }) => { - const iframeRef = useRef(null) - const { fetchTemplatePreview } = useContext(ApiServerContext) const [testObjectOpen, setTestObjectOpen] = useState(false) const [previewMessage, setPreviewMessage] = useState('No issues found.') const [previewError, setPreviewError] = useState(false) - const [previewContent, setPreviewContent] = useState('') - const [reloadLoading, setReloadLoading] = useState(false) - const [previewScale, setPreviewScale] = useState(1) - const updatePreviewContent = (html) => { - if (iframeRef.current) { - // Save current scroll position - const scrollY = iframeRef.current.contentWindow.scrollY - const scrollX = iframeRef.current.contentWindow.scrollX - - // Update srcDoc - setPreviewContent(html) - - // Restore scroll position after iframe loads new content - const handleLoad = () => { - iframeRef.current.contentWindow.scrollTo(scrollX, scrollY) - iframeRef.current.removeEventListener('load', handleLoad) - } - iframeRef.current.addEventListener('load', handleLoad) - } + const handlePreviewMessage = (message, isError) => { + setPreviewMessage(message) + setPreviewError(isError) } - const reloadPreview = useCallback( - (content, testObject = {}, scale = 1) => { - fetchTemplatePreview( - objectData._id, - content, - testObject, - scale, - (result) => { - setReloadLoading(false) - if (result?.error) { - setPreviewError(true) - setPreviewMessage(result.error) - } else { - setPreviewError(false) - updatePreviewContent(result.html) - setPreviewMessage('No issues found.') - } - } - ) - }, - [fetchTemplatePreview, objectData?._id] - ) - - // Move useEffect to component level and use state to track objectData changes - useEffect(() => { - if (objectData) { - console.log('PreviewScale', previewScale) - reloadPreview(objectData.content, objectData.testObject, previewScale) - } - }, [objectData, previewScale, reloadPreview]) - return ( <> {collapseState.preview == true && ( - } + - - - - {objectData?.objectType ? ( - - ) : ( -
- -
- )} - -
- -