Skip to content

Commit

Permalink
[TSVB] fix Default index pattern is requested while it shouldnt (#106119
Browse files Browse the repository at this point in the history
)

* [TSVB] fix Default index pattern is requested while it shouldnt

* update index_patterns_utils.ts

* fix wrong behaviour on no index found

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
  • Loading branch information
alexwizp and kibanamachine authored Jul 26, 2021
1 parent 91aa2bb commit 8087662
Show file tree
Hide file tree
Showing 11 changed files with 122 additions and 142 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ describe('extractIndexPatterns', () => {
});

test('should return index patterns', () => {
expect(extractIndexPatternValues(panel, null)).toEqual([
expect(extractIndexPatternValues(panel, undefined)).toEqual([
'*',
'example-1-*',
'example-2-*',
Expand Down
32 changes: 14 additions & 18 deletions src/plugins/vis_type_timeseries/common/index_patterns_utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

import { uniq } from 'lodash';
import type { Panel, IndexPatternValue, FetchedIndexPattern } from '../common/types';
import { IIndexPattern, IndexPatternsService } from '../../data/common';
import { IndexPatternsService } from '../../data/common';

export const isStringTypeIndexPattern = (
indexPatternValue: IndexPatternValue
Expand All @@ -17,31 +17,27 @@ export const isStringTypeIndexPattern = (
export const getIndexPatternKey = (indexPatternValue: IndexPatternValue) =>
isStringTypeIndexPattern(indexPatternValue) ? indexPatternValue : indexPatternValue?.id ?? '';

export const extractIndexPatternValues = (panel: Panel, defaultIndex: IIndexPattern | null) => {
export const extractIndexPatternValues = (panel: Panel, defaultIndexId?: string) => {
const patterns: IndexPatternValue[] = [];

if (panel.index_pattern) {
patterns.push(panel.index_pattern);
}
const addIndex = (value?: IndexPatternValue) => {
if (value) {
patterns.push(value);
} else if (defaultIndexId) {
patterns.push({ id: defaultIndexId });
}
};

addIndex(panel.index_pattern);

panel.series.forEach((series) => {
const indexPattern = series.series_index_pattern;
if (indexPattern && series.override_index_pattern) {
patterns.push(indexPattern);
if (series.override_index_pattern) {
addIndex(series.series_index_pattern);
}
});

if (panel.annotations) {
panel.annotations.forEach((item) => {
const indexPattern = item.index_pattern;
if (indexPattern) {
patterns.push(indexPattern);
}
});
}

if (patterns.length === 0 && defaultIndex?.id) {
patterns.push({ id: defaultIndex.id });
panel.annotations.forEach((item) => addIndex(item.index_pattern));
}

return uniq<IndexPatternValue>(patterns).sort();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import { KBN_FIELD_TYPES, Query } from '../../../../../plugins/data/public';
import { AddDeleteButtons } from './add_delete_buttons';
import { ColorPicker } from './color_picker';
import { FieldSelect } from './aggs/field_select';
import { IndexPatternSelect } from './lib/index_pattern_select';
import { IndexPatternSelect, IndexPatternSelectProps } from './lib/index_pattern_select';
import { QueryBarWrapper } from './query_bar_wrapper';
import { YesNo } from './yes_no';
import { fetchIndexPattern } from '../../../common/index_patterns_utils';
Expand All @@ -35,7 +35,7 @@ import { getDefaultQueryLanguage } from './lib/get_default_query_language';
// @ts-expect-error not typed yet
import { IconSelect } from './icon_select/icon_select';

import type { Annotation, FetchedIndexPattern, IndexPatternValue } from '../../../common/types';
import type { Annotation, IndexPatternValue } from '../../../common/types';
import type { VisFields } from '../lib/fetch_fields';

const RESTRICT_FIELDS = [KBN_FIELD_TYPES.DATE];
Expand Down Expand Up @@ -68,20 +68,28 @@ export const AnnotationRow = ({
const model = useMemo(() => ({ ...getAnnotationDefaults(), ...annotation }), [annotation]);
const htmlId = htmlIdGenerator(model.id);

const [fetchedIndex, setFetchedIndex] = useState<FetchedIndexPattern | null>(null);
const [fetchedIndex, setFetchedIndex] = useState<IndexPatternSelectProps['fetchedIndex']>(null);

useEffect(() => {
const updateFetchedIndex = async (index: IndexPatternValue) => {
const { indexPatterns } = getDataStart();
let fetchedIndexPattern: IndexPatternSelectProps['fetchedIndex'] = {
indexPattern: undefined,
indexPatternString: undefined,
};

setFetchedIndex(
index
try {
fetchedIndexPattern = index
? await fetchIndexPattern(index, indexPatterns)
: {
indexPattern: undefined,
indexPatternString: undefined,
}
);
...fetchedIndexPattern,
defaultIndex: await indexPatterns.getDefault(),
};
} catch {
// nothing to be here
}

setFetchedIndex(fetchedIndexPattern);
};

updateFetchedIndex(model.index_pattern);
Expand Down Expand Up @@ -124,7 +132,6 @@ export const AnnotationRow = ({
<EuiFlexGroup responsive={false} wrap={true} gutterSize="m">
<EuiFlexItem>
<IndexPatternSelect
value={model[INDEX_PATTERN_KEY]}
indexPatternName={INDEX_PATTERN_KEY}
onChange={onChange}
fetchedIndex={fetchedIndex}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,11 @@ import { YesNo } from './yes_no';
import { LastValueModePopover } from './last_value_mode_popover';
import { KBN_FIELD_TYPES } from '../../../../data/public';
import { FormValidationContext } from '../contexts/form_validation_context';
import { DefaultIndexPatternContext } from '../contexts/default_index_context';
import { PanelModelContext } from '../contexts/panel_model_context';
import { isGteInterval, validateReInterval, isAutoInterval } from './lib/get_interval';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n/react';
import { PANEL_TYPES, TIME_RANGE_DATA_MODES, TIME_RANGE_MODE_KEY } from '../../../common/enums';
import { AUTO_INTERVAL, USE_KIBANA_INDEXES_KEY } from '../../../common/constants';
import { AUTO_INTERVAL } from '../../../common/constants';
import { isTimerangeModeEnabled } from '../lib/check_ui_restrictions';
import { VisDataContext } from '../contexts/vis_data_context';
import { getDataStart, getUISettings } from '../../services';
Expand Down Expand Up @@ -78,14 +76,11 @@ export const IndexPattern = ({
const maxBarsName = `${prefix}max_bars`;
const dropBucketName = `${prefix}drop_last_bucket`;
const updateControlValidity = useContext(FormValidationContext);
const defaultIndex = useContext(DefaultIndexPatternContext);
const panelModel = useContext(PanelModelContext);

const uiRestrictions = get(useContext(VisDataContext), 'uiRestrictions');
const maxBarsUiSettings = config.get(UI_SETTINGS.HISTOGRAM_MAX_BARS);
const useKibanaIndices = Boolean(panelModel?.[USE_KIBANA_INDEXES_KEY]);

const [fetchedIndex, setFetchedIndex] = useState();
const [fetchedIndex, setFetchedIndex] = useState(null);

const handleMaxBarsChange = useCallback(
({ target }) => {
Expand Down Expand Up @@ -144,17 +139,25 @@ export const IndexPattern = ({
useEffect(() => {
async function fetchIndex() {
const { indexPatterns } = getDataStart();
let fetchedIndexPattern = {
indexPattern: undefined,
indexPatternString: undefined,
};

setFetchedIndex(
index
try {
fetchedIndexPattern = index
? await fetchIndexPattern(index, indexPatterns, {
fetchKibanaIndexForStringIndexes: true,
})
: {
indexPattern: undefined,
indexPatternString: undefined,
}
);
...fetchedIndexPattern,
defaultIndex: await indexPatterns.getDefault(),
};
} catch {
// nothing to be here
}

setFetchedIndex(fetchedIndexPattern);
}

fetchIndex();
Expand All @@ -165,16 +168,6 @@ export const IndexPattern = ({
[model.hide_last_value_indicator, onChange]
);

const getTimefieldPlaceholder = () => {
if (!model[indexPatternName]) {
return defaultIndex?.timeFieldName;
}

if (useKibanaIndices) {
return fetchedIndex?.indexPattern?.timeFieldName ?? undefined;
}
};

return (
<div className="index-pattern">
{!isTimeSeries && (
Expand Down Expand Up @@ -245,7 +238,6 @@ export const IndexPattern = ({
<EuiFlexItem>
<IndexPatternSelect
fetchedIndex={fetchedIndex}
value={model[indexPatternName]}
indexPatternName={indexPatternName}
onChange={onChange}
disabled={disabled}
Expand All @@ -263,7 +255,9 @@ export const IndexPattern = ({
onChange={handleSelectChange(timeFieldName)}
indexPattern={model[indexPatternName]}
fields={fields}
placeholder={getTimefieldPlaceholder()}
placeholder={
fetchedIndex?.indexPattern?.timeFieldName ?? fetchedIndex?.defaultIndex?.timeFieldName
}
/>
</EuiFlexItem>
<EuiFlexItem grow={false}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
* Side Public License, v 1.
*/

export { IndexPatternSelect } from './index_pattern_select';
export { IndexPatternSelect, IndexPatternSelectProps } from './index_pattern_select';
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,23 @@ import { EuiFormRow, EuiText, EuiLink, htmlIdGenerator } from '@elastic/eui';
import { getCoreStart } from '../../../../services';
import { PanelModelContext } from '../../../contexts/panel_model_context';

import { isStringTypeIndexPattern } from '../../../../../common/index_patterns_utils';

import { FieldTextSelect } from './field_text_select';
import { ComboBoxSelect } from './combo_box_select';

import type { IndexPatternValue, FetchedIndexPattern } from '../../../../../common/types';
import { DefaultIndexPatternContext } from '../../../contexts/default_index_context';
import { USE_KIBANA_INDEXES_KEY } from '../../../../../common/constants';
import { IndexPattern } from '../../../../../../data/common';

interface IndexPatternSelectProps {
value: IndexPatternValue;
export interface IndexPatternSelectProps {
indexPatternName: string;
onChange: Function;
disabled?: boolean;
allowIndexSwitchingMode?: boolean;
fetchedIndex: FetchedIndexPattern | null;
fetchedIndex:
| (FetchedIndexPattern & {
defaultIndex?: IndexPattern | null;
})
| null;
}

const defaultIndexPatternHelpText = i18n.translate(
Expand All @@ -51,7 +52,6 @@ const indexPatternLabel = i18n.translate('visTypeTimeseries.indexPatternSelect.l
});

export const IndexPatternSelect = ({
value,
indexPatternName,
onChange,
disabled,
Expand All @@ -60,7 +60,6 @@ export const IndexPatternSelect = ({
}: IndexPatternSelectProps) => {
const htmlId = htmlIdGenerator();
const panelModel = useContext(PanelModelContext);
const defaultIndex = useContext(DefaultIndexPatternContext);

const useKibanaIndices = Boolean(panelModel?.[USE_KIBANA_INDEXES_KEY]);
const Component = useKibanaIndices ? ComboBoxSelect : FieldTextSelect;
Expand Down Expand Up @@ -105,13 +104,11 @@ export const IndexPatternSelect = ({
id={htmlId('indexPattern')}
label={indexPatternLabel}
helpText={
!value && defaultIndexPatternHelpText + (!useKibanaIndices ? queryAllIndexesHelpText : '')
fetchedIndex.defaultIndex &&
defaultIndexPatternHelpText + (!useKibanaIndices ? queryAllIndexesHelpText : '')
}
labelAppend={
value &&
allowIndexSwitchingMode &&
isStringTypeIndexPattern(value) &&
!fetchedIndex.indexPattern ? (
fetchedIndex.indexPatternString && !fetchedIndex.indexPattern ? (
<EuiLink onClick={navigateToCreateIndexPatternPage}>
<EuiText size="xs">
<FormattedMessage
Expand All @@ -129,7 +126,7 @@ export const IndexPatternSelect = ({
allowSwitchMode={allowIndexSwitchingMode}
onIndexChange={onIndexChange}
onModeChange={onModeChange}
placeholder={defaultIndex?.title ?? ''}
placeholder={fetchedIndex.defaultIndex?.title ?? ''}
data-test-subj="metricsIndexPatternInput"
/>
</EuiFormRow>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@
*/
import type { Assign } from '@kbn/utility-types';
import type { FetchedIndexPattern, IndexPatternValue } from '../../../../../common/types';
import type { IndexPattern } from '../../../../../../data/common';

/** @internal **/
export interface SelectIndexComponentProps {
fetchedIndex: FetchedIndexPattern;
fetchedIndex: FetchedIndexPattern & {
defaultIndex?: IndexPattern | null;
};
onIndexChange: (value: IndexPatternValue) => void;
onModeChange: (useKibanaIndexes: boolean, index?: FetchedIndexPattern) => void;
'data-test-subj': string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import React, { useContext, useEffect, useState } from 'react';

import { CoreStartContext } from '../contexts/query_input_bar_context';
import { DefaultIndexPatternContext } from '../contexts/default_index_context';
import type { IndexPatternValue } from '../../../common/types';

import { QueryStringInput, QueryStringInputProps } from '../../../../../plugins/data/public';
Expand All @@ -31,7 +30,6 @@ export function QueryBarWrapper({
const [indexes, setIndexes] = useState<QueryStringInputProps['indexPatterns']>([]);

const coreStartContext = useContext(CoreStartContext);
const defaultIndex = useContext(DefaultIndexPatternContext);

useEffect(() => {
async function fetchIndexes() {
Expand All @@ -48,15 +46,19 @@ export function QueryBarWrapper({
i.push(indexPattern);
}
}
} else if (defaultIndex) {
i.push(defaultIndex);
} else {
const defaultIndex = await indexPatternsService.getDefault();

if (defaultIndex) {
i.push(defaultIndex);
}
}
}
setIndexes(i);
}

fetchIndexes();
}, [indexPatterns, indexPatternsService, defaultIndex]);
}, [indexPatterns, indexPatternsService]);

return (
<QueryStringInput
Expand Down
Loading

0 comments on commit 8087662

Please sign in to comment.