import React, { PureComponent } from 'react'; import { ExploreId } from 'app/types/explore'; import { DataSourceSelectItem, RawTimeRange, TimeRange } from '@grafana/ui'; import { DataSourcePicker } from 'app/core/components/Select/DataSourcePicker'; interface Props { datasourceMissing: boolean; exploreDatasources: DataSourceSelectItem[]; exploreId: ExploreId; loading: boolean; range: RawTimeRange; selectedDatasource: DataSourceSelectItem; splitted: boolean; timepicker: JSX.Element; onChangeDatasource: (option) => void; onClearAll: () => void; onCloseSplit: () => void; onChangeTime: (range: TimeRange, changedByScanner?: boolean) => void; onRunQuery: () => void; onSplit: () => void; } const createDatasourcePicker = (props: Props) => { const { exploreDatasources, selectedDatasource } = props; return ( ); }; const createResponsiveButton = (options: { splitted: boolean; title: string; onClick: () => void; buttonClassName?: string; iconClassName?: string; }) => { const { title, onClick, buttonClassName, iconClassName, splitted } = options; return ( ); }; const createSplittedClassName = (options: { splitted: boolean; className: string }) => { const { className, splitted } = options; return splitted ? `${className}-splitted` : className; }; export class ExploreToolbar extends PureComponent { constructor(props) { super(props); } render() { const { datasourceMissing, exploreId, loading, splitted, timepicker } = this.props; const toolbar = createSplittedClassName({ splitted, className: 'toolbar' }); const toolbarItem = createSplittedClassName({ splitted, className: 'toolbar-item' }); const toolbarHeader = createSplittedClassName({ splitted, className: 'toolbar-header' }); const timepickerClasses = createSplittedClassName({ splitted, className: 'toolbar-content-item timepicker' }); return (
{exploreId === 'left' && ( Explore )}
{!datasourceMissing && !splitted ? createDatasourcePicker(this.props) : null}
{exploreId === 'right' && ( )}
{!datasourceMissing && splitted ? (
{createDatasourcePicker(this.props)}
) : null}
{!datasourceMissing && !splitted ? (
{createDatasourcePicker(this.props)}
) : null} {exploreId === 'left' && !splitted ? (
{createResponsiveButton({ splitted, title: 'Split', onClick: this.props.onSplit, iconClassName: 'fa fa-fw fa-columns', })}
) : null}
{timepicker}
{createResponsiveButton({ splitted, title: 'Run Query', onClick: this.props.onRunQuery, buttonClassName: 'navbar-button--primary', iconClassName: loading ? 'fa fa-spinner fa-fw fa-spin run-icon' : 'fa fa-level-down fa-fw run-icon', })}
); } }