Skip to content

Commit 07e57fb

Browse files
[Ingest Manager] Fix create data source from integration (#66626)
* Fix add datasource button from integration not responsive * Fix React key prop warnings Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
1 parent 6b6242a commit 07e57fb

File tree

3 files changed

+69
-40
lines changed
  • x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections

3 files changed

+69
-40
lines changed

x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/index.tsx

Lines changed: 62 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* or more contributor license agreements. Licensed under the Elastic License;
44
* you may not use this file except in compliance with the Elastic License.
55
*/
6-
import React, { useState, useEffect } from 'react';
6+
import React, { useState, useEffect, useMemo, useCallback } from 'react';
77
import { useRouteMatch, useHistory } from 'react-router-dom';
88
import { i18n } from '@kbn/i18n';
99
import { FormattedMessage } from '@kbn/i18n/react';
@@ -95,32 +95,46 @@ export const CreateDatasourcePage: React.FunctionComponent = () => {
9595
// Datasource validation state
9696
const [validationResults, setValidationResults] = useState<DatasourceValidationResults>();
9797

98+
// Form state
99+
const [formState, setFormState] = useState<DatasourceFormState>('INVALID');
100+
98101
// Update package info method
99-
const updatePackageInfo = (updatedPackageInfo: PackageInfo | undefined) => {
100-
if (updatedPackageInfo) {
101-
setPackageInfo(updatedPackageInfo);
102-
setFormState('VALID');
103-
} else {
104-
setFormState('INVALID');
105-
setPackageInfo(undefined);
106-
}
102+
const updatePackageInfo = useCallback(
103+
(updatedPackageInfo: PackageInfo | undefined) => {
104+
if (updatedPackageInfo) {
105+
setPackageInfo(updatedPackageInfo);
106+
if (agentConfig) {
107+
setFormState('VALID');
108+
}
109+
} else {
110+
setFormState('INVALID');
111+
setPackageInfo(undefined);
112+
}
107113

108-
// eslint-disable-next-line no-console
109-
console.debug('Package info updated', updatedPackageInfo);
110-
};
114+
// eslint-disable-next-line no-console
115+
console.debug('Package info updated', updatedPackageInfo);
116+
},
117+
[agentConfig, setPackageInfo, setFormState]
118+
);
111119

112120
// Update agent config method
113-
const updateAgentConfig = (updatedAgentConfig: AgentConfig | undefined) => {
114-
if (updatedAgentConfig) {
115-
setAgentConfig(updatedAgentConfig);
116-
} else {
117-
setFormState('INVALID');
118-
setAgentConfig(undefined);
119-
}
121+
const updateAgentConfig = useCallback(
122+
(updatedAgentConfig: AgentConfig | undefined) => {
123+
if (updatedAgentConfig) {
124+
setAgentConfig(updatedAgentConfig);
125+
if (packageInfo) {
126+
setFormState('VALID');
127+
}
128+
} else {
129+
setFormState('INVALID');
130+
setAgentConfig(undefined);
131+
}
120132

121-
// eslint-disable-next-line no-console
122-
console.debug('Agent config updated', updatedAgentConfig);
123-
};
133+
// eslint-disable-next-line no-console
134+
console.debug('Agent config updated', updatedAgentConfig);
135+
},
136+
[packageInfo, setAgentConfig, setFormState]
137+
);
124138

125139
const hasErrors = validationResults ? validationHasErrors(validationResults) : false;
126140

@@ -163,7 +177,6 @@ export const CreateDatasourcePage: React.FunctionComponent = () => {
163177
: getHref('integration_details', { pkgkey });
164178

165179
// Save datasource
166-
const [formState, setFormState] = useState<DatasourceFormState>('INVALID');
167180
const saveDatasource = async () => {
168181
setFormState('LOADING');
169182
const result = await sendCreateDatasource(datasource);
@@ -215,33 +228,43 @@ export const CreateDatasourcePage: React.FunctionComponent = () => {
215228
packageInfo,
216229
};
217230

231+
const stepSelectConfig = useMemo(
232+
() => (
233+
<StepSelectConfig
234+
pkgkey={pkgkey}
235+
updatePackageInfo={updatePackageInfo}
236+
agentConfig={agentConfig}
237+
updateAgentConfig={updateAgentConfig}
238+
/>
239+
),
240+
[pkgkey, updatePackageInfo, agentConfig, updateAgentConfig]
241+
);
242+
243+
const stepSelectPackage = useMemo(
244+
() => (
245+
<StepSelectPackage
246+
agentConfigId={configId}
247+
updateAgentConfig={updateAgentConfig}
248+
packageInfo={packageInfo}
249+
updatePackageInfo={updatePackageInfo}
250+
/>
251+
),
252+
[configId, updateAgentConfig, packageInfo, updatePackageInfo]
253+
);
254+
218255
const steps: EuiStepProps[] = [
219256
from === 'package'
220257
? {
221258
title: i18n.translate('xpack.ingestManager.createDatasource.stepSelectAgentConfigTitle', {
222259
defaultMessage: 'Select an agent configuration',
223260
}),
224-
children: (
225-
<StepSelectConfig
226-
pkgkey={pkgkey}
227-
updatePackageInfo={updatePackageInfo}
228-
agentConfig={agentConfig}
229-
updateAgentConfig={updateAgentConfig}
230-
/>
231-
),
261+
children: stepSelectConfig,
232262
}
233263
: {
234264
title: i18n.translate('xpack.ingestManager.createDatasource.stepSelectPackageTitle', {
235265
defaultMessage: 'Select an integration',
236266
}),
237-
children: (
238-
<StepSelectPackage
239-
agentConfigId={configId}
240-
updateAgentConfig={updateAgentConfig}
241-
packageInfo={packageInfo}
242-
updatePackageInfo={updatePackageInfo}
243-
/>
244-
),
267+
children: stepSelectPackage,
245268
},
246269
{
247270
title: i18n.translate('xpack.ingestManager.createDatasource.stepDefineDatasourceTitle', {

x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/details_page/components/datasources/datasources_table.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ export const DatasourcesTable: React.FunctionComponent<Props> = ({
275275
search={{
276276
toolsRight: [
277277
<EuiButton
278+
key="addDatasourceButton"
278279
isDisabled={!hasWriteCapabilities}
279280
iconType="plusInCircle"
280281
href={getHref('add_datasource_from_configuration', { configId: config.id })}

x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/data_stream/list_page/index.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,12 @@ export const DataStreamListPage: React.FunctionComponent<{}> = () => {
241241
sorting={true}
242242
search={{
243243
toolsRight: [
244-
<EuiButton color="primary" iconType="refresh" onClick={() => sendRequest()}>
244+
<EuiButton
245+
key="reloadButton"
246+
color="primary"
247+
iconType="refresh"
248+
onClick={() => sendRequest()}
249+
>
245250
<FormattedMessage
246251
id="xpack.ingestManager.dataStreamList.reloadDataStreamsButtonText"
247252
defaultMessage="Reload"

0 commit comments

Comments
 (0)