diff --git a/packages/api/src/controllers/runners.js b/packages/api/src/controllers/runners.js index 4cd6601f8..90e4bfd96 100644 --- a/packages/api/src/controllers/runners.js +++ b/packages/api/src/controllers/runners.js @@ -12,6 +12,7 @@ const dbgateApi = require(process.env.DBGATE_API || "@dbgate/api"); require=null; async function run() { ${script} +console.log('Finished job script'); } dbgateApi.runScript(run); `; diff --git a/packages/web/src/modals/ImportExportModal.js b/packages/web/src/modals/ImportExportModal.js index b9d1cc877..23be758a1 100644 --- a/packages/web/src/modals/ImportExportModal.js +++ b/packages/web/src/modals/ImportExportModal.js @@ -21,9 +21,10 @@ import PreviewDataGrid from '../impexp/PreviewDataGrid'; import useSocket from '../utility/SocketProvider'; import LoadingInfo from '../widgets/LoadingInfo'; import { FontIcon } from '../icons'; +import LargeButton from '../widgets/LargeButton'; const headerHeight = '60px'; -const footerHeight = '60px'; +const footerHeight = '100px'; const OutputContainer = styled.div` position: relative; @@ -84,6 +85,7 @@ const Footer = styled.div` const FooterButtons = styled.div` margin: 15px; + display: flex; `; function GenerateSctriptButton({ modalState }) { @@ -103,7 +105,23 @@ function GenerateSctriptButton({ modalState }) { modalState.close(); }; - return ; + return ( + + Generate script + + ); +} + +function RunButton() { + const { submitForm } = useFormikContext(); + const handleSubmit = () => { + submitForm(); + }; + return ( + + Run + + ); } export default function ImportExportModal({ @@ -146,6 +164,8 @@ export default function ImportExportModal({ const handleExecute = async (values) => { if (busy) return; + + setBusy(true); const script = await createImpExpScript(values); setExecuteNumber((num) => num + 1); @@ -154,7 +174,6 @@ export default function ImportExportModal({ const resp = await axios.post('runners/start', { script }); runid = resp.data.runid; setRunnerId(runid); - setBusy(true); if (values.targetStorageType == 'archive') { refreshArchiveFolderRef.current = values.targetArchiveFolder; } else { @@ -208,12 +227,16 @@ export default function ImportExportModal({ diff --git a/packages/web/src/widgets/LargeButton.js b/packages/web/src/widgets/LargeButton.js new file mode 100644 index 000000000..85cbc161a --- /dev/null +++ b/packages/web/src/widgets/LargeButton.js @@ -0,0 +1,60 @@ +// @ts-nocheck +import React from 'react'; +import styled from 'styled-components'; +import { FontIcon } from '../icons'; +import dimensions from '../theme/dimensions'; +import useTheme from '../theme/useTheme'; + +const ButtonDiv = styled.div` + padding: 5px 15px; + color: ${(props) => props.theme.main_font1}; + border: 1px solid ${(props) => props.theme.border}; + width: 120px; + height: 60px; + background-color: ${(props) => props.theme.toolbar_background}; + + ${(props) => + !props.disabled && + ` + &:hover { + background-color: ${props.theme.toolbar_background2} ; + } + + &:active:hover { + background-color: ${props.theme.toolbar_background3}; + } + `} + + ${(props) => + props.disabled && + ` + color: ${props.theme.main_font3}; + `} +`; + +const IconDiv = styled.div` + font-size: 30px; + text-align: center; +`; + +const ButtonDivInner = styled.div` + text-align: center; +`; + +export default function LargeButton({ children, onClick, icon = undefined, disabled = undefined }) { + const theme = useTheme(); + return ( + { + if (!disabled && onClick) onClick(); + }} + disabled={disabled} + > + + + + {children} + + ); +}