closed tab - show more info

This commit is contained in:
Jan Prochazka
2021-01-28 16:41:30 +01:00
parent 9940bd5177
commit 420e94600e
4 changed files with 91 additions and 38 deletions

View File

@@ -49,6 +49,7 @@ export function AppObjectCore({
extInfo = undefined, extInfo = undefined,
statusTitle = undefined, statusTitle = undefined,
disableHover = false, disableHover = false,
children = null,
Menu = undefined, Menu = undefined,
...other ...other
}) { }) {
@@ -63,6 +64,7 @@ export function AppObjectCore({
}; };
return ( return (
<>
<AppObjectDiv <AppObjectDiv
onContextMenu={handleContextMenu} onContextMenu={handleContextMenu}
onClick={() => { onClick={() => {
@@ -89,5 +91,7 @@ export function AppObjectCore({
)} )}
{extInfo && <ExtInfoWrap theme={theme}>{extInfo}</ExtInfoWrap>} {extInfo && <ExtInfoWrap theme={theme}>{extInfo}</ExtInfoWrap>}
</AppObjectDiv> </AppObjectDiv>
{children}
</>
); );
} }

View File

@@ -5,6 +5,14 @@ import { DropDownMenuItem } from '../modals/DropDownMenu';
import { useSetOpenedTabs } from '../utility/globalState'; import { useSetOpenedTabs } from '../utility/globalState';
import { AppObjectCore } from './AppObjectCore'; import { AppObjectCore } from './AppObjectCore';
import { setSelectedTabFunc } from '../utility/common'; import { setSelectedTabFunc } from '../utility/common';
import styled from 'styled-components';
import { FontIcon } from '../icons';
import useTheme from '../theme/useTheme';
const InfoDiv = styled.div`
margin-left: 30px;
color: ${props => props.theme.left_font3};
`;
function Menu({ data }) { function Menu({ data }) {
const setOpenedTabs = useSetOpenedTabs(); const setOpenedTabs = useSetOpenedTabs();
@@ -25,18 +33,17 @@ function Menu({ data }) {
function ClosedTabAppObject({ data, commonProps }) { function ClosedTabAppObject({ data, commonProps }) {
const { tabid, props, selected, icon, title, closedTime, busy } = data; const { tabid, props, selected, icon, title, closedTime, busy } = data;
const setOpenedTabs = useSetOpenedTabs(); const setOpenedTabs = useSetOpenedTabs();
const theme = useTheme();
const onClick = () => { const onClick = () => {
setOpenedTabs(files => setOpenedTabs(files =>
setSelectedTabFunc( setSelectedTabFunc(
files.map( files.map(x => ({
x => ({
...x, ...x,
closedTime: x.tabid == tabid ? undefined : x.closedTime, closedTime: x.tabid == tabid ? undefined : x.closedTime,
}), })),
tabid tabid
) )
)
); );
}; };
@@ -50,7 +57,14 @@ function ClosedTabAppObject({ data, commonProps }) {
onClick={onClick} onClick={onClick}
isBusy={busy} isBusy={busy}
Menu={Menu} Menu={Menu}
/> >
{data.props && data.props.database && (
<InfoDiv theme={theme}>
<FontIcon icon="icon database" /> {data.props.database}
</InfoDiv>
)}
{data.contentPreview && <InfoDiv theme={theme}>{data.contentPreview}</InfoDiv>}
</AppObjectCore>
); );
} }

View File

@@ -24,6 +24,24 @@ import useExtensions from '../utility/useExtensions';
import useTimerLabel from '../utility/useTimerLabel'; import useTimerLabel from '../utility/useTimerLabel';
import { StatusBarItem } from '../widgets/StatusBar'; import { StatusBarItem } from '../widgets/StatusBar';
function createSqlPreview(sql) {
if (!sql) return undefined;
let data = sql.substring(0, 500);
data = data.replace(/\[[^\]]+\]\./g, '');
data = data.replace(/\[a-zA-Z0-9_]+\./g, '');
data = data.replace(/\/\*.*\*\//g, '');
data = data.replace(/[\[\]]/g, '');
data = data.replace(/--[^\n]*\n/g, '');
for (let step = 1; step <= 5; step++) {
data = data.replace(/\([^\(^\)]+\)/g, '');
}
data = data.replace(/\s+/g, ' ');
data = data.trim();
data = data.replace(/^(.{50}[^\s]*).*/, '$1');
return data;
}
export default function QueryTab({ export default function QueryTab({
tabid, tabid,
conid, conid,
@@ -74,6 +92,23 @@ export default function QueryTab({
useUpdateDatabaseForTab(tabVisible, conid, database); useUpdateDatabaseForTab(tabVisible, conid, database);
const connection = useConnectionInfo({ conid }); const connection = useConnectionInfo({ conid });
const updateContentPreviewDebounced = React.useRef(
_.debounce(
// @ts-ignore
sql =>
changeTab(tabid, setOpenedTabs, tab => ({
...tab,
contentPreview: createSqlPreview(sql),
})),
500
)
);
React.useEffect(() => {
// @ts-ignore
updateContentPreviewDebounced.current(editorData);
}, [editorData]);
const handleExecute = async () => { const handleExecute = async () => {
if (busy) return; if (busy) return;
setExecuteNumber(num => num + 1); setExecuteNumber(num => num + 1);

View File

@@ -44,14 +44,14 @@ export default function FavoritesWidget() {
const hasPermission = useHasPermission(); const hasPermission = useHasPermission();
return ( return (
<WidgetColumnBar> <WidgetColumnBar>
<WidgetColumnBarItem title="Recently closed tabs" name="closedTabs" height="20%">
<ClosedTabsList />
</WidgetColumnBarItem>
{hasPermission('files/favorites/read') && ( {hasPermission('files/favorites/read') && (
<WidgetColumnBarItem title="Favorites" name="favorites" height="15%"> <WidgetColumnBarItem title="Favorites" name="favorites" height="20%">
<FavoritesList /> <FavoritesList />
</WidgetColumnBarItem> </WidgetColumnBarItem>
)} )}
<WidgetColumnBarItem title="Recently closed tabs" name="closedTabs">
<ClosedTabsList />
</WidgetColumnBarItem>
</WidgetColumnBar> </WidgetColumnBar>
); );
} }