mirror of
https://github.com/grafana/grafana.git
synced 2025-02-14 09:33:34 -06:00
* Initial progress * Moving keybindingSrv to context * Simplfy KioskMode * Removed unused logic * Make kiosk=tv behave as before but when topnav is enabled * Minor fix * Fixing tests * Fixing bug with notice when entering kiosk mode * Fixed test
88 lines
2.6 KiB
TypeScript
88 lines
2.6 KiB
TypeScript
import { css, cx } from '@emotion/css';
|
|
import React, { PropsWithChildren } from 'react';
|
|
|
|
import { GrafanaTheme2 } from '@grafana/data';
|
|
import { config } from '@grafana/runtime';
|
|
import { useStyles2 } from '@grafana/ui';
|
|
import { useGrafana } from 'app/core/context/GrafanaContext';
|
|
import { KioskMode } from 'app/types';
|
|
|
|
import { MegaMenu } from '../MegaMenu/MegaMenu';
|
|
|
|
import { NavToolbar } from './NavToolbar';
|
|
import { TopSearchBar } from './TopSearchBar';
|
|
import { TOP_BAR_LEVEL_HEIGHT } from './types';
|
|
|
|
export interface Props extends PropsWithChildren<{}> {}
|
|
|
|
export function AppChrome({ children }: Props) {
|
|
const styles = useStyles2(getStyles);
|
|
const { chrome } = useGrafana();
|
|
const state = chrome.useState();
|
|
|
|
if (!config.featureToggles.topnav) {
|
|
return <main className="main-view">{children}</main>;
|
|
}
|
|
|
|
const searchBarHidden = state.searchBarHidden || state.kioskMode === KioskMode.TV;
|
|
|
|
const contentClass = cx({
|
|
[styles.content]: true,
|
|
[styles.contentNoSearchBar]: searchBarHidden,
|
|
[styles.contentChromeless]: state.chromeless,
|
|
});
|
|
|
|
return (
|
|
<main className="main-view">
|
|
{!state.chromeless && (
|
|
<div className={cx(styles.topNav)}>
|
|
{!searchBarHidden && <TopSearchBar />}
|
|
<NavToolbar
|
|
searchBarHidden={searchBarHidden}
|
|
sectionNav={state.sectionNav}
|
|
pageNav={state.pageNav}
|
|
actions={state.actions}
|
|
onToggleSearchBar={chrome.onToggleSearchBar}
|
|
onToggleMegaMenu={chrome.onToggleMegaMenu}
|
|
onToggleKioskMode={chrome.onToggleKioskMode}
|
|
/>
|
|
</div>
|
|
)}
|
|
<div className={contentClass}>{children}</div>
|
|
{!state.chromeless && <MegaMenu searchBarHidden={searchBarHidden} onClose={() => chrome.setMegaMenu(false)} />}
|
|
</main>
|
|
);
|
|
}
|
|
|
|
const getStyles = (theme: GrafanaTheme2) => {
|
|
const shadow = theme.isDark
|
|
? `0 0.6px 1.5px rgb(0 0 0), 0 2px 4px rgb(0 0 0 / 40%), 0 5px 10px rgb(0 0 0 / 23%)`
|
|
: '0 0.6px 1.5px rgb(0 0 0 / 8%), 0 2px 4px rgb(0 0 0 / 6%), 0 5px 10px rgb(0 0 0 / 5%)';
|
|
|
|
return {
|
|
content: css({
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
paddingTop: TOP_BAR_LEVEL_HEIGHT * 2,
|
|
flexGrow: 1,
|
|
height: '100%',
|
|
}),
|
|
contentNoSearchBar: css({
|
|
paddingTop: TOP_BAR_LEVEL_HEIGHT,
|
|
}),
|
|
contentChromeless: css({
|
|
paddingTop: 0,
|
|
}),
|
|
topNav: css({
|
|
display: 'flex',
|
|
position: 'fixed',
|
|
zIndex: theme.zIndex.navbarFixed,
|
|
left: 0,
|
|
right: 0,
|
|
boxShadow: shadow,
|
|
background: theme.colors.background.primary,
|
|
flexDirection: 'column',
|
|
}),
|
|
};
|
|
};
|