mirror of
https://github.com/sasjs/server.git
synced 2025-12-11 03:34:35 +00:00
fix(web): fix UI responsiveness
This commit is contained in:
@@ -1,4 +1,11 @@
|
|||||||
import React, { useEffect, useRef, useState, useContext } from 'react'
|
import React, {
|
||||||
|
Dispatch,
|
||||||
|
SetStateAction,
|
||||||
|
useEffect,
|
||||||
|
useRef,
|
||||||
|
useState,
|
||||||
|
useContext
|
||||||
|
} from 'react'
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -58,13 +65,17 @@ const StyledTab = styled(Tab)(() => ({
|
|||||||
type SASjsEditorProps = {
|
type SASjsEditorProps = {
|
||||||
selectedFilePath: string
|
selectedFilePath: string
|
||||||
setSelectedFilePath: (filePath: string, refreshSideBar?: boolean) => void
|
setSelectedFilePath: (filePath: string, refreshSideBar?: boolean) => void
|
||||||
|
tab: string
|
||||||
|
setTab: Dispatch<SetStateAction<string>>
|
||||||
}
|
}
|
||||||
|
|
||||||
const baseUrl = window.location.origin
|
const baseUrl = window.location.origin
|
||||||
|
|
||||||
const SASjsEditor = ({
|
const SASjsEditor = ({
|
||||||
selectedFilePath,
|
selectedFilePath,
|
||||||
setSelectedFilePath
|
setSelectedFilePath,
|
||||||
|
tab,
|
||||||
|
setTab
|
||||||
}: SASjsEditorProps) => {
|
}: SASjsEditorProps) => {
|
||||||
const appContext = useContext(AppContext)
|
const appContext = useContext(AppContext)
|
||||||
const [isLoading, setIsLoading] = useState(false)
|
const [isLoading, setIsLoading] = useState(false)
|
||||||
@@ -81,7 +92,6 @@ const SASjsEditor = ({
|
|||||||
const [log, setLog] = useState('')
|
const [log, setLog] = useState('')
|
||||||
const [ctrlPressed, setCtrlPressed] = useState(false)
|
const [ctrlPressed, setCtrlPressed] = useState(false)
|
||||||
const [webout, setWebout] = useState('')
|
const [webout, setWebout] = useState('')
|
||||||
const [tab, setTab] = useState('1')
|
|
||||||
const [runTimes, setRunTimes] = useState<string[]>([])
|
const [runTimes, setRunTimes] = useState<string[]>([])
|
||||||
const [selectedRunTime, setSelectedRunTime] = useState('')
|
const [selectedRunTime, setSelectedRunTime] = useState('')
|
||||||
const [selectedFileExtension, setSelectedFileExtension] = useState('')
|
const [selectedFileExtension, setSelectedFileExtension] = useState('')
|
||||||
@@ -161,7 +171,7 @@ const SASjsEditor = ({
|
|||||||
}
|
}
|
||||||
setLog('')
|
setLog('')
|
||||||
setWebout('')
|
setWebout('')
|
||||||
setTab('1')
|
setTab('code')
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [selectedFilePath])
|
}, [selectedFilePath])
|
||||||
|
|
||||||
@@ -200,10 +210,11 @@ const SASjsEditor = ({
|
|||||||
setLog(parsedLog)
|
setLog(parsedLog)
|
||||||
|
|
||||||
setWebout(`${res.data?._webout}`)
|
setWebout(`${res.data?._webout}`)
|
||||||
setTab('2')
|
setTab('log')
|
||||||
|
|
||||||
// Scroll to bottom of log
|
// Scroll to bottom of log
|
||||||
window.scrollTo(0, document.body.scrollHeight)
|
const logElement = document.getElementById('log')
|
||||||
|
if (logElement) logElement.scrollTop = logElement.scrollHeight
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
setModalTitle('Abort')
|
setModalTitle('Abort')
|
||||||
@@ -357,20 +368,20 @@ const SASjsEditor = ({
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<TabList onChange={handleTabChange} centered>
|
<TabList onChange={handleTabChange} centered>
|
||||||
<StyledTab label="Code" value="1" />
|
<StyledTab label="Code" value="code" />
|
||||||
<StyledTab label="Log" value="2" />
|
<StyledTab label="Log" value="log" />
|
||||||
<StyledTab
|
<StyledTab
|
||||||
label={
|
label={
|
||||||
<Tooltip title="Displays content from the _webout fileref">
|
<Tooltip title="Displays content from the _webout fileref">
|
||||||
<Typography>Webout</Typography>
|
<Typography>Webout</Typography>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
}
|
}
|
||||||
value="3"
|
value="webout"
|
||||||
/>
|
/>
|
||||||
</TabList>
|
</TabList>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
<StyledTabPanel sx={{ paddingBottom: 0 }} value="1">
|
<StyledTabPanel sx={{ paddingBottom: 0 }} value="code">
|
||||||
<Box sx={{ display: 'flex', justifyContent: 'center' }}>
|
<Box sx={{ display: 'flex', justifyContent: 'center' }}>
|
||||||
<RunMenu
|
<RunMenu
|
||||||
fileContent={fileContent}
|
fileContent={fileContent}
|
||||||
@@ -436,13 +447,15 @@ const SASjsEditor = ({
|
|||||||
</p>
|
</p>
|
||||||
</Paper>
|
</Paper>
|
||||||
</StyledTabPanel>
|
</StyledTabPanel>
|
||||||
<StyledTabPanel value="2">
|
<StyledTabPanel value="log">
|
||||||
<div>
|
<div>
|
||||||
<h2>SAS Log</h2>
|
<h2>Log</h2>
|
||||||
<pre>{log}</pre>
|
<pre id="log" style={{ overflow: 'auto', height: '75vh' }}>
|
||||||
|
{log}
|
||||||
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
</StyledTabPanel>
|
</StyledTabPanel>
|
||||||
<StyledTabPanel value="3">
|
<StyledTabPanel value="webout">
|
||||||
<div>
|
<div>
|
||||||
<pre>{webout}</pre>
|
<pre>{webout}</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ const Studio = () => {
|
|||||||
const [searchParams, setSearchParams] = useSearchParams()
|
const [searchParams, setSearchParams] = useSearchParams()
|
||||||
const [selectedFilePath, setSelectedFilePath] = useState('')
|
const [selectedFilePath, setSelectedFilePath] = useState('')
|
||||||
const [directoryData, setDirectoryData] = useState<TreeNode | null>(null)
|
const [directoryData, setDirectoryData] = useState<TreeNode | null>(null)
|
||||||
|
const [tab, setTab] = useState('code')
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setSelectedFilePath(searchParams.get('filePath') ?? '')
|
setSelectedFilePath(searchParams.get('filePath') ?? '')
|
||||||
@@ -83,16 +84,20 @@ const Studio = () => {
|
|||||||
return (
|
return (
|
||||||
<Box sx={{ display: 'flex' }}>
|
<Box sx={{ display: 'flex' }}>
|
||||||
<CssBaseline />
|
<CssBaseline />
|
||||||
<SideBar
|
{tab === 'code' && (
|
||||||
selectedFilePath={selectedFilePath}
|
<SideBar
|
||||||
directoryData={directoryData}
|
selectedFilePath={selectedFilePath}
|
||||||
handleSelect={handleSelect}
|
directoryData={directoryData}
|
||||||
removeFileFromTree={removeFileFromTree}
|
handleSelect={handleSelect}
|
||||||
refreshSideBar={fetchDirectoryData}
|
removeFileFromTree={removeFileFromTree}
|
||||||
/>
|
refreshSideBar={fetchDirectoryData}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
<SASjsEditor
|
<SASjsEditor
|
||||||
selectedFilePath={selectedFilePath}
|
selectedFilePath={selectedFilePath}
|
||||||
setSelectedFilePath={handleSelect}
|
setSelectedFilePath={handleSelect}
|
||||||
|
tab={tab}
|
||||||
|
setTab={setTab}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -211,6 +211,7 @@ const SideBar = ({
|
|||||||
component={Paper}
|
component={Paper}
|
||||||
sx={{
|
sx={{
|
||||||
margin: '5px',
|
margin: '5px',
|
||||||
|
height: '97vh',
|
||||||
paddingTop: '45px',
|
paddingTop: '45px',
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
alignItems: 'flex-start'
|
alignItems: 'flex-start'
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ code {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.main {
|
.main {
|
||||||
margin-top: 50px;
|
margin: 50px 10px 0 10px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|||||||
Reference in New Issue
Block a user