Commit 5143a266 by Johannes Schill

feat: Add "theme" to Tooltip

parent f95359fb
...@@ -21,13 +21,21 @@ interface Props { ...@@ -21,13 +21,21 @@ interface Props {
placement?: any; placement?: any;
content: string | ((props: any) => JSX.Element); content: string | ((props: any) => JSX.Element);
refClassName?: string; refClassName?: string;
theme?: string;
}
export enum Themes {
Default = 'popper__background--default',
Error = 'popper__background--error',
} }
class Popper extends PureComponent<Props> { class Popper extends PureComponent<Props> {
render() { render() {
const { children, renderContent, show, placement, refClassName } = this.props; const { children, renderContent, show, placement, refClassName, theme } = this.props;
const { content } = this.props; const { content } = this.props;
const popperBackgroundClassName = 'popper__background' + (theme ? ' ' + theme : '');
return ( return (
<Manager> <Manager>
<Reference> <Reference>
...@@ -53,7 +61,7 @@ class Popper extends PureComponent<Props> { ...@@ -53,7 +61,7 @@ class Popper extends PureComponent<Props> {
data-placement={placement} data-placement={placement}
className="popper" className="popper"
> >
<div className="popper__background"> <div className={popperBackgroundClassName}>
{renderContent(content)} {renderContent(content)}
<div ref={arrowProps.ref} data-placement={placement} className="popper__arrow" /> <div ref={arrowProps.ref} data-placement={placement} className="popper__arrow" />
</div> </div>
......
...@@ -9,6 +9,7 @@ export interface UsingPopperProps { ...@@ -9,6 +9,7 @@ export interface UsingPopperProps {
content: string | ((props: any) => JSX.Element); content: string | ((props: any) => JSX.Element);
className?: string; className?: string;
refClassName?: string; refClassName?: string;
theme?: string;
} }
interface Props { interface Props {
...@@ -16,6 +17,7 @@ interface Props { ...@@ -16,6 +17,7 @@ interface Props {
className?: string; className?: string;
refClassName?: string; refClassName?: string;
content: string | ((props: any) => JSX.Element); content: string | ((props: any) => JSX.Element);
theme?: string;
} }
interface State { interface State {
...@@ -71,7 +73,6 @@ export default function withPopper(WrappedComponent) { ...@@ -71,7 +73,6 @@ export default function withPopper(WrappedComponent) {
render() { render() {
const { show, placement } = this.state; const { show, placement } = this.state;
const className = this.props.className || ''; const className = this.props.className || '';
return ( return (
<WrappedComponent <WrappedComponent
{...this.props} {...this.props}
......
...@@ -10,6 +10,7 @@ import kbn from 'app/core/utils/kbn'; ...@@ -10,6 +10,7 @@ import kbn from 'app/core/utils/kbn';
// Types // Types
import { TimeRange, LoadingState, DataQueryOptions, DataQueryResponse, TimeSeries } from 'app/types'; import { TimeRange, LoadingState, DataQueryOptions, DataQueryResponse, TimeSeries } from 'app/types';
import { Themes } from 'app/core/components/Tooltip/Popper';
interface RenderProps { interface RenderProps {
loading: LoadingState; loading: LoadingState;
...@@ -139,7 +140,7 @@ export class DataPanel extends Component<Props, State> { ...@@ -139,7 +140,7 @@ export class DataPanel extends Component<Props, State> {
const timeSeries = response.data; const timeSeries = response.data;
if (isFirstLoad && loading === LoadingState.Loading) { if (isFirstLoad && loading === LoadingState.Loading) {
return this.renderLoadingState(); return this.renderLoadingStates();
} }
if (!queries.length) { if (!queries.length) {
...@@ -152,7 +153,7 @@ export class DataPanel extends Component<Props, State> { ...@@ -152,7 +153,7 @@ export class DataPanel extends Component<Props, State> {
return ( return (
<> <>
{this.renderLoadingState()} {this.renderLoadingStates()}
{this.props.children({ {this.props.children({
timeSeries, timeSeries,
loading, loading,
...@@ -161,7 +162,7 @@ export class DataPanel extends Component<Props, State> { ...@@ -161,7 +162,7 @@ export class DataPanel extends Component<Props, State> {
); );
} }
private renderLoadingState(): JSX.Element { private renderLoadingStates(): JSX.Element {
const { loading } = this.state; const { loading } = this.state;
if (loading === LoadingState.Loading) { if (loading === LoadingState.Loading) {
return ( return (
...@@ -176,6 +177,7 @@ export class DataPanel extends Component<Props, State> { ...@@ -176,6 +177,7 @@ export class DataPanel extends Component<Props, State> {
className="popper__manager--block" className="popper__manager--block"
refClassName={`panel-info-corner panel-info-corner--error`} refClassName={`panel-info-corner panel-info-corner--error`}
placement="bottom-start" placement="bottom-start"
theme={Themes.Error}
> >
<i className="fa" /> <i className="fa" />
<span className="panel-info-corner-inner" /> <span className="panel-info-corner-inner" />
......
...@@ -302,12 +302,14 @@ $popover-error-bg: $btn-danger-bg; ...@@ -302,12 +302,14 @@ $popover-error-bg: $btn-danger-bg;
// Tooltips and popovers // Tooltips and popovers
// ------------------------- // -------------------------
$tooltipColor: $popover-help-color; $tooltipColor: $popover-help-color;
$tooltipBackground: $popover-help-bg;
$tooltipArrowWidth: 5px; $tooltipArrowWidth: 5px;
$tooltipArrowColor: $tooltipBackground;
$tooltipLinkColor: $link-color; $tooltipLinkColor: $link-color;
$graph-tooltip-bg: $dark-1; $graph-tooltip-bg: $dark-1;
$tooltipBackground: $popover-help-bg;
$tooltipArrowColor: $tooltipBackground;
$tooltipBackgroundError: $brand-danger;
// images // images
$checkboxImageUrl: '../img/checkbox.png'; $checkboxImageUrl: '../img/checkbox.png';
......
...@@ -307,12 +307,14 @@ $popover-error-bg: $btn-danger-bg; ...@@ -307,12 +307,14 @@ $popover-error-bg: $btn-danger-bg;
// Tooltips and popovers // Tooltips and popovers
// ------------------------- // -------------------------
$tooltipColor: $popover-help-color; $tooltipColor: $popover-help-color;
$tooltipBackground: $popover-help-bg;
$tooltipArrowWidth: 5px; $tooltipArrowWidth: 5px;
$tooltipArrowColor: $tooltipBackground;
$tooltipLinkColor: lighten($popover-help-color, 5%); $tooltipLinkColor: lighten($popover-help-color, 5%);
$graph-tooltip-bg: $gray-5; $graph-tooltip-bg: $gray-5;
$tooltipBackground: $popover-help-bg;
$tooltipArrowColor: $tooltipBackground; // Used by Angular tooltip
$tooltipBackgroundError: $brand-danger;
// images // images
$checkboxImageUrl: '../img/checkbox_white.png'; $checkboxImageUrl: '../img/checkbox_white.png';
......
...@@ -8,7 +8,22 @@ $popper-margin-from-ref: 5px; ...@@ -8,7 +8,22 @@ $popper-margin-from-ref: 5px;
text-align: center; text-align: center;
} }
.popper .popper__arrow { .popper__background {
background: $tooltipBackground;
border-radius: $border-radius;
box-shadow: 0 0 2px rgba(0, 0, 0, 0.5);
padding: 10px;
// Themes
&.popper__background--error {
background: $tooltipBackgroundError;
.popper__arrow {
border-color: $tooltipBackgroundError;
}
}
}
.popper__arrow {
width: 0; width: 0;
height: 0; height: 0;
border-style: solid; border-style: solid;
...@@ -16,17 +31,10 @@ $popper-margin-from-ref: 5px; ...@@ -16,17 +31,10 @@ $popper-margin-from-ref: 5px;
margin: 0px; margin: 0px;
} }
.popper .popper__arrow { .popper__arrow {
border-color: $tooltipBackground; border-color: $tooltipBackground;
} }
.popper__background {
background: $tooltipBackground;
border-radius: $border-radius;
box-shadow: 0 0 2px rgba(0, 0, 0, 0.5);
padding: 10px;
}
// Top // Top
.popper[data-placement^='top'] { .popper[data-placement^='top'] {
padding-bottom: $popper-margin-from-ref; padding-bottom: $popper-margin-from-ref;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment