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,31 +64,34 @@ export function AppObjectCore({
}; };
return ( return (
<AppObjectDiv <>
onContextMenu={handleContextMenu} <AppObjectDiv
onClick={() => { onContextMenu={handleContextMenu}
if (onClick) onClick(data); onClick={() => {
if (onClick2) onClick2(data); if (onClick) onClick(data);
if (onClick3) onClick3(data); if (onClick2) onClick2(data);
}} if (onClick3) onClick3(data);
theme={theme} }}
isBold={isBold} theme={theme}
draggable isBold={isBold}
onDragStart={e => { draggable
e.dataTransfer.setData('app_object_drag_data', JSON.stringify(data)); onDragStart={e => {
}} e.dataTransfer.setData('app_object_drag_data', JSON.stringify(data));
disableHover={disableHover} }}
{...other} disableHover={disableHover}
> {...other}
{prefix} >
<IconWrap>{isBusy ? <FontIcon icon="icon loading" /> : <FontIcon icon={icon} />}</IconWrap> {prefix}
{title} <IconWrap>{isBusy ? <FontIcon icon="icon loading" /> : <FontIcon icon={icon} />}</IconWrap>
{statusIcon && ( {title}
<StatusIconWrap> {statusIcon && (
<FontIcon icon={statusIcon} title={statusTitle} /> <StatusIconWrap>
</StatusIconWrap> <FontIcon icon={statusIcon} title={statusTitle} />
)} </StatusIconWrap>
{extInfo && <ExtInfoWrap theme={theme}>{extInfo}</ExtInfoWrap>} )}
</AppObjectDiv> {extInfo && <ExtInfoWrap theme={theme}>{extInfo}</ExtInfoWrap>}
</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,17 +33,16 @@ 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>
); );
} }