|
@@ -73,11 +73,11 @@ import WidgetCard from '../widgetCard';
|
|
import BuildStep from './buildStep';
|
|
import BuildStep from './buildStep';
|
|
import {ColumnFields} from './columnFields';
|
|
import {ColumnFields} from './columnFields';
|
|
import {DashboardSelector} from './dashboardSelector';
|
|
import {DashboardSelector} from './dashboardSelector';
|
|
|
|
+import {DisplayTypeSelector} from './displayTypeSelector';
|
|
import {Header} from './header';
|
|
import {Header} from './header';
|
|
import {
|
|
import {
|
|
DataSet,
|
|
DataSet,
|
|
DisplayType,
|
|
DisplayType,
|
|
- displayTypes,
|
|
|
|
FlatValidationError,
|
|
FlatValidationError,
|
|
mapErrors,
|
|
mapErrors,
|
|
normalizeQueries,
|
|
normalizeQueries,
|
|
@@ -90,11 +90,6 @@ const DATASET_CHOICES: [DataSet, string][] = [
|
|
// [DataSet.METRICS, t('Metrics (Release Health)')],
|
|
// [DataSet.METRICS, t('Metrics (Release Health)')],
|
|
];
|
|
];
|
|
|
|
|
|
-const DISPLAY_TYPES_OPTIONS = Object.keys(displayTypes).map(value => ({
|
|
|
|
- label: displayTypes[value],
|
|
|
|
- value,
|
|
|
|
-}));
|
|
|
|
-
|
|
|
|
const QUERIES = {
|
|
const QUERIES = {
|
|
[DataSet.EVENTS]: {
|
|
[DataSet.EVENTS]: {
|
|
name: '',
|
|
name: '',
|
|
@@ -431,6 +426,8 @@ function WidgetBuilder({
|
|
|
|
|
|
onSave([...dashboard.widgets, widgetData]);
|
|
onSave([...dashboard.widgets, widgetData]);
|
|
addSuccessMessage(t('Added widget.'));
|
|
addSuccessMessage(t('Added widget.'));
|
|
|
|
+
|
|
|
|
+ goBack();
|
|
} catch (err) {
|
|
} catch (err) {
|
|
errors = mapErrors(err?.responseJSON ?? {}, {});
|
|
errors = mapErrors(err?.responseJSON ?? {}, {});
|
|
} finally {
|
|
} finally {
|
|
@@ -440,8 +437,6 @@ function WidgetBuilder({
|
|
submitFromSelectedDashboard(errors, widgetData);
|
|
submitFromSelectedDashboard(errors, widgetData);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
-
|
|
|
|
- goBack();
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -596,13 +591,12 @@ function WidgetBuilder({
|
|
)}
|
|
)}
|
|
>
|
|
>
|
|
<VisualizationWrapper>
|
|
<VisualizationWrapper>
|
|
- <DisplayTypeOptions
|
|
|
|
- name="displayType"
|
|
|
|
- options={DISPLAY_TYPES_OPTIONS}
|
|
|
|
- value={state.displayType}
|
|
|
|
|
|
+ <DisplayTypeSelector
|
|
|
|
+ displayType={state.displayType}
|
|
onChange={(option: {label: string; value: DisplayType}) => {
|
|
onChange={(option: {label: string; value: DisplayType}) => {
|
|
setState({...state, displayType: option.value});
|
|
setState({...state, displayType: option.value});
|
|
}}
|
|
}}
|
|
|
|
+ error={state.errors?.displayType}
|
|
/>
|
|
/>
|
|
<WidgetCard
|
|
<WidgetCard
|
|
organization={organization}
|
|
organization={organization}
|
|
@@ -715,7 +709,7 @@ function WidgetBuilder({
|
|
inline={false}
|
|
inline={false}
|
|
flexibleControlStateSize
|
|
flexibleControlStateSize
|
|
stacked
|
|
stacked
|
|
- error={state.errors?.[queryIndex]?.conditions}
|
|
|
|
|
|
+ error={state.errors?.queries?.[queryIndex]?.conditions}
|
|
>
|
|
>
|
|
<SearchConditionsWrapper>
|
|
<SearchConditionsWrapper>
|
|
<Search
|
|
<Search
|
|
@@ -884,10 +878,6 @@ const DataSetChoices = styled(RadioGroup)`
|
|
}
|
|
}
|
|
`;
|
|
`;
|
|
|
|
|
|
-const DisplayTypeOptions = styled(SelectControl)`
|
|
|
|
- margin-bottom: ${space(1)};
|
|
|
|
-`;
|
|
|
|
-
|
|
|
|
const SearchConditionsWrapper = styled('div')`
|
|
const SearchConditionsWrapper = styled('div')`
|
|
display: flex;
|
|
display: flex;
|
|
align-items: center;
|
|
align-items: center;
|