diff --git a/public/app/plugins/datasource/elasticsearch/configuration/ConfigEditor.test.tsx b/public/app/plugins/datasource/elasticsearch/configuration/ConfigEditor.test.tsx index 051853d4f66..7cd9ac0336e 100644 --- a/public/app/plugins/datasource/elasticsearch/configuration/ConfigEditor.test.tsx +++ b/public/app/plugins/datasource/elasticsearch/configuration/ConfigEditor.test.tsx @@ -31,7 +31,24 @@ describe('ConfigEditor', () => { delete options.jsonData.timeField; delete options.jsonData.maxConcurrentShardRequests; - render(); + const { rerender } = render(); + + expect(mockOnOptionsChange).toHaveBeenCalledWith( + expect.objectContaining({ + jsonData: expect.objectContaining({ + timeField: '@timestamp', + maxConcurrentShardRequests: 5, + }), + }) + ); + + // Setting options to default should happen on every render, not once. + mockOnOptionsChange.mockClear(); + const updatedOptions = { ...options }; + updatedOptions.jsonData.timeField = ''; + // @ts-expect-error + updatedOptions.jsonData.maxConcurrentShardRequests = ''; + rerender(); expect(mockOnOptionsChange).toHaveBeenCalledWith( expect.objectContaining({ diff --git a/public/app/plugins/datasource/elasticsearch/configuration/ConfigEditor.tsx b/public/app/plugins/datasource/elasticsearch/configuration/ConfigEditor.tsx index 08132c38abc..49d87f2db1b 100644 --- a/public/app/plugins/datasource/elasticsearch/configuration/ConfigEditor.tsx +++ b/public/app/plugins/datasource/elasticsearch/configuration/ConfigEditor.tsx @@ -21,17 +21,13 @@ export const ConfigEditor = (props: Props) => { // the access-mode-select-box vanishes) const showAccessOptions = useRef(props.options.access === 'direct'); - const { options: originalOptions, onOptionsChange } = props; - const options = coerceOptions(originalOptions); + const { options, onOptionsChange } = props; useEffect(() => { - if (!isValidOptions(originalOptions)) { - onOptionsChange(coerceOptions(originalOptions)); + if (!isValidOptions(options)) { + onOptionsChange(coerceOptions(options)); } - - // We can't enforce the eslint rule here because we only want to run this once. - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + }, [onOptionsChange, options]); return ( <> diff --git a/public/app/plugins/datasource/elasticsearch/configuration/ElasticDetails.tsx b/public/app/plugins/datasource/elasticsearch/configuration/ElasticDetails.tsx index 687891ed154..e745fcc118a 100644 --- a/public/app/plugins/datasource/elasticsearch/configuration/ElasticDetails.tsx +++ b/public/app/plugins/datasource/elasticsearch/configuration/ElasticDetails.tsx @@ -22,7 +22,7 @@ export const ElasticDetails = ({ value, onChange }: Props) => { return ( <>
- + { /> - + { /> - + { @@ -95,7 +96,7 @@ export const ElasticDetails = ({ value, onChange }: Props) => { {value.jsonData.xpack && ( - +