|
|
@@ -1,6 +1,7 @@
|
|
|
import React, { PureComponent } from 'react';
|
|
|
import { connect } from 'react-redux';
|
|
|
import { hot } from 'react-hot-loader';
|
|
|
+import memoizeOne from 'memoize-one';
|
|
|
|
|
|
import { ExploreId, ExploreMode } from 'app/types/explore';
|
|
|
import { DataSourceSelectItem, ToggleButtonGroup, ToggleButton } from '@grafana/ui';
|
|
|
@@ -236,6 +237,41 @@ export class UnConnectedExploreToolbar extends PureComponent<Props, {}> {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+const getModeOptionsMemoized = memoizeOne(
|
|
|
+ (
|
|
|
+ supportedModes: ExploreMode[],
|
|
|
+ mode: ExploreMode
|
|
|
+ ): [Array<SelectableValue<ExploreMode>>, SelectableValue<ExploreMode>] => {
|
|
|
+ const supportedModeOptions: Array<SelectableValue<ExploreMode>> = [];
|
|
|
+ let selectedModeOption = null;
|
|
|
+ for (const supportedMode of supportedModes) {
|
|
|
+ switch (supportedMode) {
|
|
|
+ case ExploreMode.Metrics:
|
|
|
+ const option1 = {
|
|
|
+ value: ExploreMode.Metrics,
|
|
|
+ label: ExploreMode.Metrics,
|
|
|
+ };
|
|
|
+ supportedModeOptions.push(option1);
|
|
|
+ if (mode === ExploreMode.Metrics) {
|
|
|
+ selectedModeOption = option1;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case ExploreMode.Logs:
|
|
|
+ const option2 = {
|
|
|
+ value: ExploreMode.Logs,
|
|
|
+ label: ExploreMode.Logs,
|
|
|
+ };
|
|
|
+ supportedModeOptions.push(option2);
|
|
|
+ if (mode === ExploreMode.Logs) {
|
|
|
+ selectedModeOption = option2;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return [supportedModeOptions, selectedModeOption];
|
|
|
+ }
|
|
|
+);
|
|
|
+
|
|
|
const mapStateToProps = (state: StoreState, { exploreId }: OwnProps): StateProps => {
|
|
|
const splitted = state.explore.split;
|
|
|
const exploreItem = state.explore[exploreId];
|
|
|
@@ -257,32 +293,7 @@ const mapStateToProps = (state: StoreState, { exploreId }: OwnProps): StateProps
|
|
|
const hasLiveOption =
|
|
|
datasourceInstance && datasourceInstance.meta && datasourceInstance.meta.streaming ? true : false;
|
|
|
|
|
|
- const supportedModeOptions: Array<SelectableValue<ExploreMode>> = [];
|
|
|
- let selectedModeOption = null;
|
|
|
- for (const supportedMode of supportedModes) {
|
|
|
- switch (supportedMode) {
|
|
|
- case ExploreMode.Metrics:
|
|
|
- const option1 = {
|
|
|
- value: ExploreMode.Metrics,
|
|
|
- label: ExploreMode.Metrics,
|
|
|
- };
|
|
|
- supportedModeOptions.push(option1);
|
|
|
- if (mode === ExploreMode.Metrics) {
|
|
|
- selectedModeOption = option1;
|
|
|
- }
|
|
|
- break;
|
|
|
- case ExploreMode.Logs:
|
|
|
- const option2 = {
|
|
|
- value: ExploreMode.Logs,
|
|
|
- label: ExploreMode.Logs,
|
|
|
- };
|
|
|
- supportedModeOptions.push(option2);
|
|
|
- if (mode === ExploreMode.Logs) {
|
|
|
- selectedModeOption = option2;
|
|
|
- }
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
+ const [supportedModeOptions, selectedModeOption] = getModeOptionsMemoized(supportedModes, mode);
|
|
|
|
|
|
return {
|
|
|
datasourceMissing,
|