diff --git a/src/plugins/data_source_management/public/components/edit_data_source/__snapshots__/edit_data_source.test.tsx.snap b/src/plugins/data_source_management/public/components/edit_data_source/__snapshots__/edit_data_source.test.tsx.snap index 85e08d85ecef..a3d004457a78 100644 --- a/src/plugins/data_source_management/public/components/edit_data_source/__snapshots__/edit_data_source.test.tsx.snap +++ b/src/plugins/data_source_management/public/components/edit_data_source/__snapshots__/edit_data_source.test.tsx.snap @@ -59,6 +59,7 @@ exports[`Datasource Management: Edit Datasource Wizard should load resources suc /> - - -

- } - title={ -

- -

- } +
- -
- -
- -

- - - Endpoint - - -

-
- -
- -
-

- - - This connection information is used for reference in tables and when adding to a data source connection - - -

-
-
-
-
-
-
- + Endpoint URL + + +
+
+ +
- -
-
- - - -
-
- - -
-
- - - - -
-
-
-
-
-
-
+ + + + +
- -
- + + + -
+ - - -

- } - title={ -

- -

- } +
- -
- -
- -

- - - Endpoint - - -

-
- -
- -
-

- - - This connection information is used for reference in tables and when adding to a data source connection - - -

-
-
-
-
-
-
- + Endpoint URL + + +
+
+ +
- -
-
- - - -
-
- - -
-
- - - - -
-
-
-
-
-
-
+ + + + +
- -
- + + + -
+ - - -

- } - title={ -

- -

- } +
- -
- -
- -

- - - Endpoint - - -

-
- -
- -
-

- - - This connection information is used for reference in tables and when adding to a data source connection - - -

-
-
-
-
-
-
- + Endpoint URL + + +
+
+ +
- -
-
- - - -
-
- - -
-
- - - - -
-
-
-
-
-
-
+ + + + +
- -
- + + + -
+ { existingDatasourceNamesList={existingDatasourceNamesList} onDeleteDataSource={mockFn} handleSubmit={mockFn} + displayToastMessage={mockFn} /> ), { @@ -229,6 +230,7 @@ describe('Datasource Management: Edit Datasource Form', () => { existingDatasourceNamesList={existingDatasourceNamesList} onDeleteDataSource={mockFn} handleSubmit={mockFn} + displayToastMessage={mockFn} /> ), { diff --git a/src/plugins/data_source_management/public/components/edit_data_source/components/edit_form/edit_data_source_form.tsx b/src/plugins/data_source_management/public/components/edit_data_source/components/edit_form/edit_data_source_form.tsx index 00c205fa1ade..bda8709cf509 100644 --- a/src/plugins/data_source_management/public/components/edit_data_source/components/edit_form/edit_data_source_form.tsx +++ b/src/plugins/data_source_management/public/components/edit_data_source/components/edit_form/edit_data_source_form.tsx @@ -29,6 +29,7 @@ import { credentialSourceOptions, DataSourceAttributes, DataSourceManagementContextValue, + ToastMessageItem, UsernamePasswordTypedContent, } from '../../../../types'; import { context as contextType } from '../../../../../../opensearch_dashboards_react/public'; @@ -45,6 +46,7 @@ export interface EditDataSourceProps { existingDatasourceNamesList: string[]; handleSubmit: (formValues: DataSourceAttributes) => void; onDeleteDataSource?: () => void; + displayToastMessage: (info: ToastMessageItem) => void; } export interface EditDataSourceState { formErrorsByField: CreateEditDataSourceValidation; @@ -57,6 +59,7 @@ export interface EditDataSourceState { }; showUpdatePasswordModal: boolean; showUpdateOptions: boolean; + isLoading: boolean; } export class EditDataSourceForm extends React.Component { @@ -81,6 +84,7 @@ export class EditDataSourceForm extends React.Component { + onClickUpdateDataSource = async () => { if (this.isFormValid()) { // update data source endpoint is currently not supported/allowed const formValues: DataSourceAttributes = { @@ -225,7 +229,19 @@ export class EditDataSourceForm extends React.Component { + updatePassword = async (password: string) => { const { title, description, auth } = this.props.existingDataSource; const updateAttributes: DataSourceAttributes = { title, @@ -261,8 +277,21 @@ export class EditDataSourceForm extends React.Component - - - { - - } - - } - description={ -

- { - - } -

- } + {/* Endpoint */} + - {/* Endpoint */} - - - -
+ + ); }; @@ -653,6 +660,7 @@ export class EditDataSourceForm extends React.Component diff --git a/src/plugins/data_source_management/public/components/edit_data_source/edit_data_source.test.tsx b/src/plugins/data_source_management/public/components/edit_data_source/edit_data_source.test.tsx index d8bd006f9dc1..d11f8c8bc9da 100644 --- a/src/plugins/data_source_management/public/components/edit_data_source/edit_data_source.test.tsx +++ b/src/plugins/data_source_management/public/components/edit_data_source/edit_data_source.test.tsx @@ -103,7 +103,7 @@ describe('Datasource Management: Edit Datasource Wizard', () => { expect(history.push).toBeCalledWith(''); }); test('should fail to update datasource', async () => { - spyOn(utils, 'updateDataSourceById').and.throwError('error'); + spyOn(utils, 'updateDataSourceById').and.returnValue(new Error('')); await act(async () => { // @ts-ignore await component.find(formIdentifier).first().prop('handleSubmit')( diff --git a/src/plugins/data_source_management/public/components/edit_data_source/edit_data_source.tsx b/src/plugins/data_source_management/public/components/edit_data_source/edit_data_source.tsx index 24e6448df35a..a0d485c2f6cf 100644 --- a/src/plugins/data_source_management/public/components/edit_data_source/edit_data_source.tsx +++ b/src/plugins/data_source_management/public/components/edit_data_source/edit_data_source.tsx @@ -51,49 +51,48 @@ export const EditDataSource: React.FunctionComponent { (async function () { - setIsLoading(true); - try { - const fetchDataSourceById = await getDataSourceById(dataSourceID, savedObjects.client); - const listOfDataSources: DataSourceTableItem[] = await getDataSources(savedObjects.client); - if (fetchDataSourceById) { - setDataSource(fetchDataSourceById); - setBreadcrumbs(getEditBreadcrumbs(fetchDataSourceById)); - } - if (Array.isArray(listOfDataSources) && listOfDataSources.length) { - setExistingDatasourceNamesList( - listOfDataSources.map((datasource) => datasource.title?.toLowerCase()) - ); - } - } catch (e) { - setDataSource(defaultDataSource); - handleDisplayToastMessage({ - id: 'dataSourcesManagement.editDataSource.editDataSourceFailMsg', - defaultMessage: 'Unable to find the Data Source.', - }); - props.history.push(''); - } finally { - setIsLoading(false); - } + await fetchDataSourceDetailsByID(); })(); }); - /* Handle submit - create data source*/ - const handleSubmit = async (attributes: DataSourceAttributes) => { + const fetchDataSourceDetailsByID = async () => { setIsLoading(true); try { - await updateDataSourceById(savedObjects.client, dataSourceID, attributes); - props.history.push(''); + const fetchDataSourceById = await getDataSourceById(dataSourceID, savedObjects.client); + const listOfDataSources: DataSourceTableItem[] = await getDataSources(savedObjects.client); + if (fetchDataSourceById) { + setDataSource(fetchDataSourceById); + setBreadcrumbs(getEditBreadcrumbs(fetchDataSourceById)); + } + if (Array.isArray(listOfDataSources) && listOfDataSources.length) { + setExistingDatasourceNamesList( + listOfDataSources.map((datasource) => datasource.title?.toLowerCase()) + ); + } } catch (e) { - setIsLoading(false); + setDataSource(defaultDataSource); handleDisplayToastMessage({ id: 'dataSourcesManagement.editDataSource.editDataSourceFailMsg', - defaultMessage: 'Updating the Data Source failed with some errors. Please try it again.', + defaultMessage: 'Unable to find the Data Source.', }); + props.history.push(''); + } finally { + setIsLoading(false); } }; - const handleDisplayToastMessage = ({ id, defaultMessage }: ToastMessageItem) => { - toasts.addWarning(i18n.translate(id, { defaultMessage })); + /* Handle submit - create data source*/ + const handleSubmit = async (attributes: DataSourceAttributes) => { + await updateDataSourceById(savedObjects.client, dataSourceID, attributes); + await fetchDataSourceDetailsByID(); + }; + + const handleDisplayToastMessage = ({ id, defaultMessage, success }: ToastMessageItem) => { + if (success) { + toasts.addSuccess(i18n.translate(id, { defaultMessage })); + } else { + toasts.addWarning(i18n.translate(id, { defaultMessage })); + } }; /* Handle delete - data source*/ @@ -124,6 +123,7 @@ export const EditDataSource: React.FunctionComponent ) : null} {isLoading || !dataSource?.endpoint ? : null} diff --git a/src/plugins/data_source_management/public/types.ts b/src/plugins/data_source_management/public/types.ts index a689cb4a593e..fe52466df1e5 100644 --- a/src/plugins/data_source_management/public/types.ts +++ b/src/plugins/data_source_management/public/types.ts @@ -42,6 +42,7 @@ export interface DataSourceTableItem { export interface ToastMessageItem { id: string; defaultMessage: string; + success?: boolean; } export type DataSourceManagementContextValue = OpenSearchDashboardsReactContextValue<