///////////////////////////////////////////////////////////// // // pgAdmin 4 - PostgreSQL Tools // // Copyright (C) 2013 - 2024, The pgAdmin Development Team // This software is released under the PostgreSQL Licence // ////////////////////////////////////////////////////////////// import React, { useEffect, useLayoutEffect, useRef } from 'react'; import ReactDOM from 'react-dom/client'; import { usePgAdmin } from './BrowserComponent'; import { BROWSER_PANELS } from '../../browser/static/js/constants'; import PropTypes from 'prop-types'; import LayoutIframeTab from './helpers/Layout/LayoutIframeTab'; function ToolForm({actionUrl, params}) { const formRef = useRef(null); useLayoutEffect(()=>{ formRef.current?.submit(); }, []); return ( ); } ToolForm.propTypes = { actionUrl: PropTypes.string, params: PropTypes.object, }; export default function ToolView() { const pgAdmin = usePgAdmin(); useEffect(()=>{ pgAdmin.Browser.Events.on('pgadmin:tool:show', (panelId, toolUrl, formParams, tabParams, newTab)=>{ if(newTab) { if(formParams) { const newWin = window.open('', '_blank'); const div = newWin.document.createElement('div'); newWin.document.body.appendChild(div); const root = ReactDOM.createRoot(div); root.render( , div ); } else { window.open(toolUrl); } } else { pgAdmin.Browser.docker.openTab({ id: panelId, title: panelId, content: ( {formParams && } ), closable: true, manualClose: true, ...tabParams, cache: false, group: 'playground' }, BROWSER_PANELS.MAIN, 'middle', true); } }); }, []); return <>; }