Skip to content

Commit

Permalink
Add delete with MDS support
Browse files Browse the repository at this point in the history
Signed-off-by: Ryan Liang <jiallian@amazon.com>
  • Loading branch information
RyanL1997 committed Jul 23, 2024
1 parent 964d364 commit 407e084
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ export const ManageDirectQueryDataConnectionsTable: React.FC<ManageDirectQueryDa
const [data, setData] = useState<DataConnection[]>([]);
const [isModalVisible, setIsModalVisible] = useState(false);
const [modalLayout, setModalLayout] = useState(<EuiOverlayMask />);
const [selectedConnection, setSelectedConnection] = useState<string | undefined>('');
const [selectedDataSourceId, setSelectedDataSourceId] = useState<string | undefined>('');
const [searchText, setSearchText] = useState<string>('');
const [isLoading, setIsLoading] = useState<boolean>(false);
Expand Down Expand Up @@ -99,6 +100,42 @@ export const ManageDirectQueryDataConnectionsTable: React.FC<ManageDirectQueryDa
});
}, [http, notifications.toasts, selectedDataSourceId, featureFlagStatus]);

const deleteDataSources = useCallback(() => {
if (!selectedConnection) return;

const endpoint =
featureFlagStatus && selectedDataSourceId !== undefined
? `${DATACONNECTIONS_BASE}/${selectedConnection}/dataSourceMDSId=${selectedDataSourceId}`
: `${DATACONNECTIONS_BASE}/${selectedConnection}`;

setIsLoading(true);

http
.delete(endpoint)
.then(() => {
notifications.toasts.addSuccess(
`Data connection ${selectedConnection} deleted successfully`
);
setData(data.filter((connection) => connection.name !== selectedConnection));
})
.catch((err) => {
notifications.toasts.addDanger(
`Data connection ${selectedConnection} not deleted. See output for more details.`
);
})
.finally(() => {
setIsLoading(false);
setSelectedConnection(''); // Clear the selected connection after deletion
});
}, [
http,
notifications.toasts,
selectedDataSourceId,
featureFlagStatus,
selectedConnection,
data,
]);

useEffect(() => {
fetchDataSources();
}, [fetchDataSources]);
Expand All @@ -108,19 +145,17 @@ export const ManageDirectQueryDataConnectionsTable: React.FC<ManageDirectQueryDa
setSelectedDataSourceId(dataSourceId);
};

const deleteConnection = (connectionName: string) => {
setData(data.filter((connection) => !(connection.name === connectionName)));
};

const displayDeleteModal = (connectionName: string) => {
setSelectedConnection(connectionName);
setModalLayout(
<DeleteModal
onConfirm={() => {
setIsModalVisible(false);
deleteConnection(connectionName);
deleteDataSources();
}}
onCancel={() => {
setIsModalVisible(false);
setSelectedConnection(''); // Clear the selected connection if cancel is clicked
}}
title={`Delete ${connectionName}`}
message={`Are you sure you want to delete ${connectionName}?`}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -291,4 +291,50 @@ export function registerDataConnectionsRoute(router: IRouter, dataSourceEnabled:
}
}
);

router.delete(
{
path: `${DATACONNECTIONS_BASE}/{name}/dataSourceMDSId={dataSourceMDSId?}`,
validate: {
params: schema.object({
name: schema.string(),
dataSourceMDSId: schema.maybe(schema.string({ defaultValue: '' })),
}),
},
},
async (context, request, response): Promise<any> => {
const dataSourceMDSId = request.params.dataSourceMDSId;
try {
let dataConnectionsresponse;
if (dataSourceEnabled && dataSourceMDSId) {
const client = await context.dataSource.opensearch.legacy.getClient(dataSourceMDSId);
dataConnectionsresponse = await client.callAPI('ppl.deleteDataConnection', {
dataconnection: request.params.name,
});
} else {
dataConnectionsresponse = await context.opensearch_data_source_management.dataSourceManagementClient
.asScoped(request)
.callAsCurrentUser('ppl.deleteDataConnection', {
dataconnection: request.params.name,
});
}
return response.ok({
body: dataConnectionsresponse,
});
} catch (error: any) {
console.error('Issue in deleting data sources:', error);
const statusCode = error.statusCode || error.body?.statusCode || 500;
const errorBody = error.body ||
error.response || { message: error.message || 'Unknown error occurred' };

return response.custom({
statusCode,
body: {
error: errorBody,
message: errorBody.message || error.message,
},
});
}
}
);
}

0 comments on commit 407e084

Please sign in to comment.