1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import { css } from '@emotion/css';
- import React, { PureComponent } from 'react';
- import { connect, MapStateToProps } from 'react-redux';
- import { AnnotationQuery } from '@grafana/data';
- import { StoreState } from '../../../../types';
- import { getSubMenuVariables, getVariablesState } from '../../../variables/state/selectors';
- import { VariableModel } from '../../../variables/types';
- import { DashboardModel } from '../../state';
- import { DashboardLink } from '../../state/DashboardModel';
- import { Annotations } from './Annotations';
- import { DashboardLinks } from './DashboardLinks';
- import { SubMenuItems } from './SubMenuItems';
- interface OwnProps {
- dashboard: DashboardModel;
- links: DashboardLink[];
- annotations: AnnotationQuery[];
- }
- interface ConnectedProps {
- variables: VariableModel[];
- }
- interface DispatchProps {}
- type Props = OwnProps & ConnectedProps & DispatchProps;
- class SubMenuUnConnected extends PureComponent<Props> {
- onAnnotationStateChanged = (updatedAnnotation: any) => {
- // we're mutating dashboard state directly here until annotations are in Redux.
- for (let index = 0; index < this.props.dashboard.annotations.list.length; index++) {
- const annotation = this.props.dashboard.annotations.list[index];
- if (annotation.name === updatedAnnotation.name) {
- annotation.enable = !annotation.enable;
- break;
- }
- }
- this.props.dashboard.startRefresh();
- this.forceUpdate();
- };
- render() {
- const { dashboard, variables, links, annotations } = this.props;
- if (!dashboard.isSubMenuVisible()) {
- return null;
- }
- return (
- <div className="submenu-controls">
- <form aria-label="Template variables" className={styles}>
- <SubMenuItems variables={variables} />
- </form>
- <Annotations
- annotations={annotations}
- onAnnotationChanged={this.onAnnotationStateChanged}
- events={dashboard.events}
- />
- <div className="gf-form gf-form--grow" />
- {dashboard && <DashboardLinks dashboard={dashboard} links={links} />}
- <div className="clearfix" />
- </div>
- );
- }
- }
- const mapStateToProps: MapStateToProps<ConnectedProps, OwnProps, StoreState> = (state, ownProps) => {
- const { uid } = ownProps.dashboard;
- const templatingState = getVariablesState(uid, state);
- return {
- variables: getSubMenuVariables(uid, templatingState.variables),
- };
- };
- const styles = css`
- display: flex;
- flex-wrap: wrap;
- display: contents;
- `;
- export const SubMenu = connect(mapStateToProps)(SubMenuUnConnected);
- SubMenu.displayName = 'SubMenu';
|