Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
ToolView.jsx79 linesDownload Raw Back to js
1/////////////////////////////////////////////////////////////2//3// pgAdmin 4 - PostgreSQL Tools4//5// Copyright (C) 2013 - 2024, The pgAdmin Development Team6// This software is released under the PostgreSQL Licence7//8//////////////////////////////////////////////////////////////9 10import React, { useEffect, useLayoutEffect, useRef } from 'react';11import ReactDOM from 'react-dom';12import { usePgAdmin } from './BrowserComponent';13import { BROWSER_PANELS } from '../../browser/static/js/constants';14import PropTypes from 'prop-types';15import LayoutIframeTab from './helpers/Layout/LayoutIframeTab';16 17function ToolForm({actionUrl, params}) {18  const formRef = useRef(null);19 20  useLayoutEffect(()=>{21    formRef.current?.submit();22  }, []);23 24  return (25    <form ref={formRef} id="tool-form" action={actionUrl} method="post" hidden>26      {Object.keys(params).map((k)=>{27        return k ? <input key={k} name={k} defaultValue={params[k]} /> : <></>;28      })}29    </form>30  );31}32 33ToolForm.propTypes = {34  actionUrl: PropTypes.string,35  params: PropTypes.object,36};37 38 39export default function ToolView() {40  const pgAdmin = usePgAdmin();41 42  useEffect(()=>{43    pgAdmin.Browser.Events.on('pgadmin:tool:show', (panelId, toolUrl, formParams, tabParams, newTab)=>{44      if(newTab) {45        if(formParams) {46          const newWin = window.open('', '_blank');47          const div = newWin.document.createElement('div');48          newWin.document.body.appendChild(div);49          ReactDOM.render(50            <ToolForm actionUrl={window.location.origin+toolUrl} params={formParams}/>, div51          );52          // Send the signal to runtime, so that proper zoom level will be set.53          setTimeout(function () {54            pgAdmin.Browser.Events.trigger('pgadmin:nw-set-new-window-open-size');55          }, 500);56        } else {57          window.open(toolUrl);58        }59      } else {60        pgAdmin.Browser.docker.openTab({61          id: panelId,62          title: panelId,63          content: (64            <LayoutIframeTab target={panelId} src={formParams ? undefined : toolUrl}>65              {formParams && <ToolForm actionUrl={toolUrl} params={formParams}/>}66            </LayoutIframeTab>67          ),68          closable: true,69          manualClose: true,70          ...tabParams,71          cache: false,72          group: 'playground'73        }, BROWSER_PANELS.MAIN, 'middle', true);74      }75    });76  }, []);77  return <></>;78}79 
codekingpro/portable-devtools · Team Ai