grafana/public/app/plugins/panel/homelinks/module.tsx
Emil Tullstedt 80e9546cec
Settings: Add setting for hiding version number for anonymous users (#24919)
* Settings: Add setting for hiding version number for anonymous users

Fixes #12925

* Hide version string from footer when unavailable

* Settings: Test frontend settings with hide version for anonymous users

* Settings: Add hide version variable to frontend settings

* Make AnonymousHideVersion non-global

Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>

* Settings: Improve test neighbor friendliness, reset state before and after

* Settings: Use T.Cleanup

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
2020-06-17 07:39:50 +02:00

114 lines
2.9 KiB
TypeScript
Executable File

// Libraries
import React, { PureComponent, FC } from 'react';
import { css } from 'emotion';
// Utils & Services
import { PanelPlugin } from '@grafana/data';
import { stylesFactory, styleMixins, Icon, IconName } from '@grafana/ui';
import config from 'app/core/config';
// Types
import { PanelProps } from '@grafana/data';
export interface Props extends PanelProps {}
export class GrafanaLinksPanel extends PureComponent<Props> {
render() {
const styles = getStyles();
return (
<>
<div className={styles.list}>
<HomeLink
title="Documentation"
icon="book"
url="https://grafana.com/docs/grafana/latest?utm_source=grafana_homelinks"
target="_blank"
/>
<HomeLink
title="Getting started"
icon="bolt"
url="https://grafana.com/docs/grafana/latest/guides/getting_started/?utm_source=grafana_homelinks"
target="_blank"
/>
<HomeLink
title="Community forum"
icon="comments-alt"
url="https://community.grafana.com?utm_source=grafana_homelinks"
target="_blank"
/>
<HomeLink
title="Report a bug"
icon="bug"
url="https://github.com/grafana/grafana/issues/new?template=1-bug_report.md"
target="_blank"
/>
</div>
<VersionFooter />
</>
);
}
}
interface HomeLinkProps {
title: string;
url: string;
target?: string;
icon: IconName;
}
export const HomeLink: FC<HomeLinkProps> = ({ title, url, target, icon }) => {
const styles = getStyles();
return (
<a className={styles.item} href={url} target={target}>
<Icon name={icon} className={styles.icon} />
{title}
</a>
);
};
export const VersionFooter: FC = () => {
const styles = getStyles();
const { hideVersion, version, commit } = config.buildInfo;
const versionString = hideVersion ? '' : `Version ${version} (${commit})`;
return <div className={styles.footer}>{versionString}</div>;
};
export const getStyles = stylesFactory(() => {
const { theme } = config;
return {
list: css`
display: flex;
flex-direction: column;
padding: ${theme.spacing.md};
`,
icon: css`
margin-right: ${theme.spacing.sm};
`,
footer: css`
background: ${theme.colors.bg2};
font-size: ${theme.typography.size.sm};
position: absolute;
bottom: 0;
width: 100%;
text-align: center;
padding: ${theme.spacing.sm};
border-radius: 0;
box-shadow: none;
color: ${theme.colors.textWeak};
`,
item: css`
${styleMixins.listItem(theme)}
padding: ${theme.spacing.sm};
display: flex;
margin-bottom: ${theme.spacing.xs};
align-items: center;
`,
};
});
export const plugin = new PanelPlugin(GrafanaLinksPanel).setNoPadding();