mirror of
https://github.com/grafana/grafana.git
synced 2025-08-01 03:31:50 +08:00
Live: show disconnection error banner when in dev mode (#33394)
This commit is contained in:
@ -13,6 +13,7 @@ import { SideMenu } from './core/components/sidemenu/SideMenu';
|
||||
import { GrafanaRoute } from './core/navigation/GrafanaRoute';
|
||||
import { AppNotificationList } from './core/components/AppNotifications/AppNotificationList';
|
||||
import { SearchWrapper } from 'app/features/search';
|
||||
import { LiveConnectionCorner } from './features/live/LiveConnectionCorner';
|
||||
|
||||
interface AppWrapperProps {
|
||||
app: GrafanaApp;
|
||||
@ -112,6 +113,7 @@ export class AppWrapper extends React.Component<AppWrapperProps, AppWrapperState
|
||||
</div>
|
||||
</Router>
|
||||
</div>
|
||||
<LiveConnectionCorner />
|
||||
<ModalRoot />
|
||||
</ModalsProvider>
|
||||
</ThemeProvider>
|
||||
|
67
public/app/features/live/LiveConnectionCorner.tsx
Normal file
67
public/app/features/live/LiveConnectionCorner.tsx
Normal file
@ -0,0 +1,67 @@
|
||||
import { css } from '@emotion/css';
|
||||
import { GrafanaTheme } from '@grafana/data';
|
||||
import { config, getGrafanaLiveSrv } from '@grafana/runtime';
|
||||
import { stylesFactory } from '@grafana/ui';
|
||||
import React, { PureComponent } from 'react';
|
||||
import { Unsubscribable } from 'rxjs';
|
||||
|
||||
export interface Props {}
|
||||
|
||||
export interface State {
|
||||
show?: boolean;
|
||||
}
|
||||
|
||||
export class LiveConnectionCorner extends PureComponent<Props, State> {
|
||||
subscription?: Unsubscribable;
|
||||
styles = getStyle(config.theme);
|
||||
state: State = {};
|
||||
|
||||
componentDidMount() {
|
||||
// Only show the error in development mode
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
// Wait a second to listen for server errors
|
||||
setTimeout(this.initListener, 1500);
|
||||
}
|
||||
}
|
||||
|
||||
initListener = () => {
|
||||
const live = getGrafanaLiveSrv();
|
||||
if (live) {
|
||||
this.subscription = live.getConnectionState().subscribe({
|
||||
next: (v) => {
|
||||
this.setState({ show: !v });
|
||||
},
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
componentWillUnmount() {
|
||||
if (this.subscription) {
|
||||
this.subscription.unsubscribe();
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
const { show } = this.state;
|
||||
if (show) {
|
||||
return <div className={this.styles.corner} title="The server is disconnected" />;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
const getStyle = stylesFactory((theme: GrafanaTheme) => {
|
||||
return {
|
||||
corner: css`
|
||||
position: fixed;
|
||||
top: 0px !important;
|
||||
left: 0px !important;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-top: 60px solid ${theme.palette.brandWarning};
|
||||
border-right: 60px solid transparent;
|
||||
z-index: 10000;
|
||||
cursor: wait;
|
||||
`,
|
||||
};
|
||||
});
|
Reference in New Issue
Block a user