mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
Merge remote-tracking branch 'origin/devel' into devel
This commit is contained in:
+1
@@ -117,6 +117,7 @@ export class ConnectionSelectorController {
|
||||
currentConnectionIcon: computed,
|
||||
objectContainerSelectionDisabled: computed,
|
||||
currentObjectContainerIcon: computed,
|
||||
isObjectContainerSelectorVisible: computed,
|
||||
});
|
||||
|
||||
this.connectionMenu = new ComputedMenuItemModel({
|
||||
|
||||
@@ -21,7 +21,7 @@ export * from './shared/NodesManager/NodeLink';
|
||||
export * from './shared/NodesManager/NodeManagerUtils';
|
||||
export * from './shared/NavigationTabs/NavigationTabsService';
|
||||
export * from './shared/NavigationTabs/TabNavigationContext';
|
||||
export * from './shared/ToolsPanel/LogViewer/LogViewerMenuService';
|
||||
export * from './shared/ToolsPanel/LogViewer/LogViewerBootstrap';
|
||||
export * from './shared/ToolsPanel/LogViewer/LogViewerService';
|
||||
|
||||
export * from './shared/SessionExpireDialog/SessionExpiredDialogService';
|
||||
|
||||
@@ -146,13 +146,12 @@ export class NavigationTabsService {
|
||||
this.userTabsState.history = this.userTabsState.history.filter(id => id !== tabId);
|
||||
this.userTabsState.history.unshift(tabId);
|
||||
this.userTabsState.currentId = tabId;
|
||||
this.tabSelectSubject.next(tab);
|
||||
}
|
||||
|
||||
if (!skipHandlers) {
|
||||
await this.callHandlerCallback(tab, handler => handler.onSelect);
|
||||
}
|
||||
|
||||
this.tabSelectSubject.next(tab);
|
||||
}
|
||||
|
||||
async closeTab(tabId: string, skipHandlers?: boolean): Promise<void> {
|
||||
|
||||
@@ -48,7 +48,7 @@ export const LogViewer = observer(function LogViewer() {
|
||||
}
|
||||
|
||||
return styled(style)(
|
||||
<log-view-wrapper as='div'>
|
||||
<log-view-wrapper>
|
||||
<Split mode={logViewerState.selectedItem ? undefined : 'maximize'} keepRatio>
|
||||
<Pane main>
|
||||
<LogViewerTable
|
||||
|
||||
+2
-6
@@ -12,7 +12,7 @@ import { EMainMenu, MainMenuService } from '../../../TopNavBar/MainMenu/MainMenu
|
||||
import { LogViewerService } from './LogViewerService';
|
||||
|
||||
@injectable()
|
||||
export class LogViewerMenuService extends Bootstrap {
|
||||
export class LogViewerBootstrap extends Bootstrap {
|
||||
constructor(
|
||||
private mainMenuService: MainMenuService,
|
||||
private logViewerService: LogViewerService
|
||||
@@ -29,14 +29,10 @@ export class LogViewerMenuService extends Bootstrap {
|
||||
type: 'checkbox',
|
||||
isChecked: () => this.logViewerService.isActive,
|
||||
title: 'app_shared_toolsMenu_logViewer',
|
||||
onClick: () => this.toggleLogViewer(),
|
||||
onClick: () => this.logViewerService.toggle(),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
toggleLogViewer() {
|
||||
this.logViewerService.toggle();
|
||||
}
|
||||
|
||||
load(): void { }
|
||||
}
|
||||
@@ -64,29 +64,33 @@ interface Props {
|
||||
className?: string;
|
||||
}
|
||||
|
||||
export const LogViewerInfoPanel: React.FC<Props> = observer(function LogViewerInfoPanel({ selectedItem, onClose, className }) {
|
||||
export const LogViewerInfoPanel: React.FC<Props> = observer(function LogViewerInfoPanel({
|
||||
selectedItem,
|
||||
onClose,
|
||||
className,
|
||||
}) {
|
||||
const translate = useTranslate();
|
||||
const copy = useClipboard();
|
||||
|
||||
const typeInfo = `${selectedItem.type} ${selectedItem.time}`;
|
||||
|
||||
const сopyMessage = useCallback(() => {
|
||||
const copyMessage = useCallback(() => {
|
||||
copy(`${selectedItem.message}\n\n${selectedItem.stackTrace}`, true);
|
||||
}, [copy, selectedItem]);
|
||||
|
||||
return styled(styles)(
|
||||
<panel-wrapper as='div' className={className}>
|
||||
<buttons as='div'>
|
||||
<Button mod={['unelevated']} onClick={сopyMessage}>
|
||||
<panel-wrapper className={className}>
|
||||
<buttons>
|
||||
<Button mod={['unelevated']} onClick={copyMessage}>
|
||||
{translate('ui_copy_to_clipboard')}
|
||||
</Button>
|
||||
<Button mod={['outlined']} onClick={onClose}>
|
||||
{translate('ui_close')}
|
||||
</Button>
|
||||
</buttons>
|
||||
<content-wrapper as='div'>
|
||||
<content-wrapper>
|
||||
<type as='h2'>{typeInfo}</type>
|
||||
<message as='div' title={selectedItem.message}>{selectedItem.message}</message>
|
||||
<message title={selectedItem.message}>{selectedItem.message}</message>
|
||||
<TextareaNew
|
||||
name="value"
|
||||
rows={3}
|
||||
|
||||
@@ -26,7 +26,7 @@ export class LogViewerService {
|
||||
}
|
||||
|
||||
private log: ILogEntry[] = [];
|
||||
private timeoutTaskId: any = null;
|
||||
private timeoutTaskId: NodeJS.Timeout | null = null;
|
||||
private failedRequestsCount = 0;
|
||||
private maxFailedRequests = 0;
|
||||
|
||||
@@ -93,7 +93,7 @@ export class LogViewerService {
|
||||
maxEntries: maxLogEntries,
|
||||
clearEntries: true,
|
||||
});
|
||||
const entries: ILogEntry[] = (log || []).map(item => ({
|
||||
const entries: ILogEntry[] = log.map(item => ({
|
||||
...item,
|
||||
id: uuid(),
|
||||
}));
|
||||
|
||||
@@ -34,7 +34,7 @@ interface SnackbarStatusProps {
|
||||
export const SnackbarStatus: React.FC<SnackbarStatusProps> = function SnackbarStatus({ status, className }) {
|
||||
return styled(SNACKBAR_STATUS_STYLES)(
|
||||
status === ENotificationType.Loading ? (
|
||||
<loader-container className={className} as='div'>
|
||||
<loader-container className={className}>
|
||||
<Loader fullSize hideMessage />
|
||||
</loader-container>
|
||||
) : <NotificationMark className={className} type={status} />);
|
||||
|
||||
@@ -29,7 +29,7 @@ import {
|
||||
NavigationTreeContextMenuService,
|
||||
SettingsMenuService,
|
||||
LogViewerService,
|
||||
LogViewerMenuService,
|
||||
LogViewerBootstrap,
|
||||
TopNavService,
|
||||
AppScreenService,
|
||||
CoreSettingsService,
|
||||
@@ -166,7 +166,7 @@ export const coreManifest: PluginManifest = {
|
||||
GraphQLService,
|
||||
LocalStorageSaveService,
|
||||
LocalizationService,
|
||||
LogViewerMenuService,
|
||||
LogViewerBootstrap,
|
||||
LogViewerService,
|
||||
MainMenuService,
|
||||
TopNavService,
|
||||
|
||||
Reference in New Issue
Block a user