diff --git a/public/pages/Correlations/containers/CreateCorrelationRule.tsx b/public/pages/Correlations/containers/CreateCorrelationRule.tsx index c986eb4d1..ff25dbc41 100644 --- a/public/pages/Correlations/containers/CreateCorrelationRule.tsx +++ b/public/pages/Correlations/containers/CreateCorrelationRule.tsx @@ -61,7 +61,9 @@ export const CreateCorrelationRule: React.FC = ( ) => { const correlationStore = DataStore.correlations; const [indices, setIndices] = useState([]); - const [logFields, setLogFields] = useState([]); + const [logFieldsByIndex, setLogFieldsByIndex] = useState<{ + [index: string]: CorrelationOptions[]; + }>({}); const validateCorrelationRule = useCallback((rule: CorrelationRuleModel) => { if (!rule.name) { return 'Invalid rule name'; @@ -128,6 +130,12 @@ export const CreateCorrelationRule: React.FC = ( setupLogTypeOptions(); }, []); + useEffect(() => { + initialValues.queries.forEach(({ index }) => { + updateLogFieldsForIndex(index); + }); + }, [initialValues]); + const submit = async (values: any) => { let error; if ((error = validateCorrelationRule(values))) { @@ -172,24 +180,40 @@ export const CreateCorrelationRule: React.FC = ( const getLogFields = useCallback( async (indexName: string) => { + let fields: { + label: string; + value: string; + }[] = []; + if (indexName) { const result = await props.indexService.getIndexFields(indexName); if (result?.ok) { - let fields: { - label: string; - value: string; - }[] = result.response?.map((field) => ({ + fields = result.response?.map((field) => ({ label: field, value: field, })); - - setLogFields(fields); } + + return fields; } + + return fields; }, - [props.fieldMappingService?.getMappingsView] + [props.indexService.getIndexFields] ); + const updateLogFieldsForIndex = (index: string) => { + if (!index) { + return; + } + getLogFields(index).then((fields) => { + setLogFieldsByIndex((prevState) => ({ + ...prevState, + [index]: fields, + })); + }); + }; + const createForm = ( correlationQueries: CorrelationRuleQuery[], touchedInputs: FormikTouched, @@ -199,6 +223,7 @@ export const CreateCorrelationRule: React.FC = ( return ( <> {correlationQueries.map((query, queryIdx) => { + const fieldOptions = logFieldsByIndex[query.index] || []; const isInvalidInputForQuery = (field: 'logType' | 'index'): boolean => { return ( !!touchedInputs.queries?.[queryIdx]?.[field] && @@ -259,7 +284,7 @@ export const CreateCorrelationRule: React.FC = ( props.handleChange(`queries[${queryIdx}].index`)( e[0]?.value ? e[0].value : '' ); - getLogFields(e[0]?.value ? e[0].value : ''); + updateLogFieldsForIndex(e[0]?.value || ''); }} onBlur={props.handleBlur(`queries[${queryIdx}].index`)} selectedOptions={ @@ -320,7 +345,7 @@ export const CreateCorrelationRule: React.FC = ( // isInvalid={isInvalidInputForQuery('logType')} placeholder="Select a field" data-test-subj={'field_dropdown'} - options={logFields} + options={fieldOptions} singleSelection={{ asPlainText: true }} onChange={(e) => { props.handleChange(