import React, { MouseEvent, PureComponent } from 'react'; import { Icon } from '@grafana/ui'; import { selectors } from '@grafana/e2e-selectors'; import { toVariableIdentifier, toVariablePayload, VariableIdentifier } from '../state/types'; import { StoreState } from '../../../types'; import { VariableEditorEditor } from './VariableEditorEditor'; import { connect, ConnectedProps } from 'react-redux'; import { getEditorVariables } from '../state/selectors'; import { switchToEditMode, switchToListMode, switchToNewMode } from './actions'; import { changeVariableOrder, duplicateVariable, removeVariable } from '../state/sharedReducer'; import { VariableEditorList } from './VariableEditorList'; import { VariablesUnknownTable } from '../inspect/VariablesUnknownTable'; import { VariablesDependenciesButton } from '../inspect/VariablesDependenciesButton'; const mapStateToProps = (state: StoreState) => ({ variables: getEditorVariables(state), idInEditor: state.templating.editor.id, dashboard: state.dashboard.getModel(), }); const mapDispatchToProps = { changeVariableOrder, duplicateVariable, removeVariable, switchToNewMode, switchToEditMode, switchToListMode, }; interface OwnProps {} const connector = connect(mapStateToProps, mapDispatchToProps); type Props = OwnProps & ConnectedProps; class VariableEditorContainerUnconnected extends PureComponent { componentDidMount(): void { this.props.switchToListMode(); } onChangeToListMode = (event: MouseEvent) => { event.preventDefault(); this.props.switchToListMode(); }; onEditVariable = (identifier: VariableIdentifier) => { this.props.switchToEditMode(identifier); }; onNewVariable = (event: MouseEvent) => { event.preventDefault(); this.props.switchToNewMode(); }; onChangeVariableOrder = (identifier: VariableIdentifier, fromIndex: number, toIndex: number) => { this.props.changeVariableOrder(toVariablePayload(identifier, { fromIndex, toIndex })); }; onDuplicateVariable = (identifier: VariableIdentifier) => { this.props.duplicateVariable(toVariablePayload(identifier, { newId: (undefined as unknown) as string })); }; onRemoveVariable = (identifier: VariableIdentifier) => { this.props.removeVariable(toVariablePayload(identifier, { reIndex: true })); }; render() { const variableToEdit = this.props.variables.find((s) => s.id === this.props.idInEditor) ?? null; return (

Variables {this.props.idInEditor && ( Edit )}

{this.props.variables.length > 0 && variableToEdit === null && ( <> New )}
{!variableToEdit && ( <> )} {variableToEdit && }
); } } export const VariableEditorContainer = connector(VariableEditorContainerUnconnected);