Skip to content

Commit

Permalink
Create delete connection type
Browse files Browse the repository at this point in the history
  • Loading branch information
ashley-o0o committed Aug 16, 2024
1 parent a011b1b commit 1211510
Show file tree
Hide file tree
Showing 5 changed files with 144 additions and 25 deletions.
18 changes: 17 additions & 1 deletion frontend/src/__tests__/cypress/cypress/support/commands/odh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -592,7 +592,23 @@ declare global {
options: {
path: { name: string };
},
response: ConnectionTypeConfigMap,
response: OdhResponse<ConnectionTypeConfigMap>,
) => Cypress.Chainable<null>) &
((
type: 'GET /api/connection-types',
response: ConnectionTypeConfigMap[],
) => Cypress.Chainable<null>) &
((
type: 'DELETE /api/connection-types/:name',
options: { path: { name: string } },
response: OdhResponse<SuccessErrorResponse>,
) => Cypress.Chainable<null>) &
((
type: 'PATCH /api/connection-types/:name',
options: {
path: { name: string };
},
response: SuccessErrorResponse,
) => Cypress.Chainable<null>);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
import { connectionTypesPage } from '~/__tests__/cypress/cypress/pages/connectionTypes';
import { mockDashboardConfig } from '~/__mocks__';
import { mockConnectionTypeConfigMap } from '~/__mocks__/mockConnectionType';
import { deleteModal } from '~/__tests__/cypress/cypress/pages/components/DeleteModal';

it('Connection types should not be available for non product admins', () => {
asProjectAdminUser();
Expand Down Expand Up @@ -76,4 +77,32 @@ describe('Connection types', () => {
row2.shouldShowPreInstalledLabel();
row2.shouldBeDisabled();
});

it('should delete connection type', () => {
connectionTypesPage.visit();
cy.interceptOdh(
'DELETE /api/connection-types/:name',
{
path: { name: 'test-2' },
},
{ success: true },
).as('delete');
cy.interceptOdh('GET /api/connection-types', [
mockConnectionTypeConfigMap({}),
mockConnectionTypeConfigMap({
name: 'no-display-name',
displayName: '',
description: 'description 2',
username: 'Pre-installed',
enabled: false,
}),
]);

connectionTypesPage.shouldHaveConnectionTypes();
connectionTypesPage.getConnectionTypeRow('Test display name').findKebabAction('Delete').click();
deleteModal.findSubmitButton().should('be.disabled');
deleteModal.findInput().fill('Test display name');
deleteModal.findSubmitButton().should('be.enabled').click();
cy.wait('@delete');
});
});
64 changes: 42 additions & 22 deletions frontend/src/pages/connectionTypes/ConnectionTypesTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import ConnectionTypesTableRow from '~/pages/connectionTypes/ConnectionTypesTabl
import ConnectionTypesTableToolbar from '~/pages/connectionTypes/ConnectionTypesTableToolbar';
import { ConnectionTypeConfigMapObj } from '~/concepts/connectionTypes/types';
import { Table } from '~/components/table';
import DeleteConnectionTypeModal from '~/pages/connectionTypes/DeleteConnectionTypeModal';
import {
getCreatorFromK8sResource,
getDescriptionFromK8sResource,
Expand All @@ -21,6 +22,10 @@ const ConnectionTypesTable: React.FC<Props> = ({ connectionTypes, onUpdate }) =>
const [filterData, setFilterData] = React.useState<FilterDataType>(initialFilterData);
const onClearFilters = React.useCallback(() => setFilterData(initialFilterData), [setFilterData]);

const [deleteConnectionType, setDeleteConnectionType] = React.useState<
ConnectionTypeConfigMapObj | undefined
>();

const filteredConnectionTypes = React.useMemo(
() =>
connectionTypes.filter((connectionType) => {
Expand Down Expand Up @@ -48,29 +53,44 @@ const ConnectionTypesTable: React.FC<Props> = ({ connectionTypes, onUpdate }) =>
};

return (
<Table
variant="compact"
data={filteredConnectionTypes}
columns={connectionTypeColumns}
defaultSortColumn={0}
data-testid="connection-types-table"
rowRenderer={(connectionType) => (
<ConnectionTypesTableRow
key={connectionType.metadata.name}
obj={connectionType}
onUpdate={onUpdate}
/>
)}
toolbarContent={
<ConnectionTypesTableToolbar
filterData={filterData}
setFilterData={setFilterData}
onClearFilters={onClearFilters}
<>
<Table
variant="compact"
data={filteredConnectionTypes}
columns={connectionTypeColumns}
defaultSortColumn={0}
data-testid="connection-types-table"
rowRenderer={(connectionType) => (
<ConnectionTypesTableRow
key={connectionType.metadata.name}
obj={connectionType}
onUpdate={onUpdate}
handleDelete={(connection) => setDeleteConnectionType(connection)}
/>
)}
toolbarContent={
<ConnectionTypesTableToolbar
filterData={filterData}
setFilterData={setFilterData}
onClearFilters={onClearFilters}
/>
}
disableItemCount
emptyTableView={<DashboardEmptyTableView onClearFilters={resetFilters} />}
id="connectionTypes-list-table"
/>
{deleteConnectionType ? (
<DeleteConnectionTypeModal
connectionType={deleteConnectionType}
onClose={(deleted) => {
if (deleted) {
onUpdate();
}
setDeleteConnectionType(undefined);
}}
/>
}
disableItemCount
emptyTableView={<DashboardEmptyTableView onClearFilters={resetFilters} />}
/>
) : null}
</>
);
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,14 @@ import {
type ConnectionTypesTableRowProps = {
obj: ConnectionTypeConfigMapObj;
onUpdate: () => void;
handleDelete: (cr: ConnectionTypeConfigMapObj) => void;
};

const ConnectionTypesTableRow: React.FC<ConnectionTypesTableRowProps> = ({ obj, onUpdate }) => {
const ConnectionTypesTableRow: React.FC<ConnectionTypesTableRowProps> = ({
obj,
onUpdate,
handleDelete,
}) => {
const navigate = useNavigate();
const notification = useNotification();
const [isUpdating, setIsUpdating] = React.useState(false);
Expand Down Expand Up @@ -106,7 +111,7 @@ const ConnectionTypesTableRow: React.FC<ConnectionTypesTableRowProps> = ({ obj,
},
{
title: 'Delete',
isAriaDisabled: true,
onClick: () => handleDelete(obj),
},
]}
/>
Expand Down
49 changes: 49 additions & 0 deletions frontend/src/pages/connectionTypes/DeleteConnectionTypeModal.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import React from 'react';
import { ConnectionTypeConfigMapObj } from '~/concepts/connectionTypes/types';
import { getDisplayNameFromK8sResource } from '~/concepts/k8s/utils';
import DeleteModal from '~/pages/projects/components/DeleteModal';
import { deleteConnectionType } from '~/services/connectionTypesService';

type DeleteConnectionTypeModalProps = {
connectionType: ConnectionTypeConfigMapObj;
onClose: (deleted: boolean) => void;
};

const DeleteConnectionTypeModal: React.FC<DeleteConnectionTypeModalProps> = ({
connectionType,
onClose,
}) => {
const [isDeleting, setIsDeleting] = React.useState(false);
const [error, setError] = React.useState<Error | undefined>();

const onBeforeClose = (deleted: boolean) => {
onClose(deleted);
setIsDeleting(false);
setError(undefined);
};

const deleteName = getDisplayNameFromK8sResource(connectionType);

return (
<DeleteModal
title="Delete connection type?"
isOpen={!!connectionType}
onClose={() => onBeforeClose(false)}
submitButtonLabel="Delete"
onDelete={() => {
setIsDeleting(true);
deleteConnectionType(connectionType.metadata.name).then(() => {
onBeforeClose(true);
});
}}
deleting={isDeleting}
error={error}
deleteName={deleteName}
>
The <b>{deleteName}</b> connection type will be deleted. Existing connections of this type
will not be affected.
</DeleteModal>
);
};

export default DeleteConnectionTypeModal;

0 comments on commit 1211510

Please sign in to comment.