diff --git a/packages/ui/src/elements/RelationshipTable/cells/DrawerLink/index.tsx b/packages/ui/src/elements/RelationshipTable/cells/DrawerLink/index.tsx index c44d6c841..6b4914b66 100644 --- a/packages/ui/src/elements/RelationshipTable/cells/DrawerLink/index.tsx +++ b/packages/ui/src/elements/RelationshipTable/cells/DrawerLink/index.tsx @@ -11,9 +11,10 @@ import { useCellProps } from '../../../TableColumns/RenderDefaultCell/index.js' import './index.scss' export const DrawerLink: React.FC<{ + readonly onDrawerDelete?: DocumentDrawerProps['onDelete'] readonly onDrawerSave?: DocumentDrawerProps['onSave'] }> = (props) => { - const { onDrawerSave: onDrawerSaveFromProps } = props + const { onDrawerDelete: onDrawerDeleteFromProps, onDrawerSave: onDrawerSaveFromProps } = props const cellProps = useCellProps() @@ -33,13 +34,24 @@ export const DrawerLink: React.FC<{ [closeDrawer, onDrawerSaveFromProps], ) + const onDrawerDelete = useCallback( + (args) => { + closeDrawer() + + if (typeof onDrawerDeleteFromProps === 'function') { + void onDrawerDeleteFromProps(args) + } + }, + [closeDrawer, onDrawerDeleteFromProps], + ) + return (
- +
) } diff --git a/packages/ui/src/elements/RelationshipTable/index.tsx b/packages/ui/src/elements/RelationshipTable/index.tsx index 8b755810b..399335497 100644 --- a/packages/ui/src/elements/RelationshipTable/index.tsx +++ b/packages/ui/src/elements/RelationshipTable/index.tsx @@ -194,6 +194,14 @@ export const RelationshipTable: React.FC = (pro [closeDrawer, onDrawerSave], ) + const onDrawerDelete = useCallback( + (args) => { + const newDocs = data.docs.filter((doc) => doc.id !== args.id) + void renderTable(newDocs) + }, + [data.docs, renderTable], + ) + const preferenceKey = `${relationTo}-list` const canCreate = allowCreate !== false && permissions?.collections?.[relationTo]?.create @@ -259,7 +267,9 @@ export const RelationshipTable: React.FC = (pro collectionSlug={relationTo} columnState={columnState} docs={data.docs} - LinkedCellOverride={} + LinkedCellOverride={ + + } preferenceKey={preferenceKey} renderRowTypes setTable={setTable} diff --git a/test/joins/e2e.spec.ts b/test/joins/e2e.spec.ts index e677cc6f1..cde95b5c3 100644 --- a/test/joins/e2e.spec.ts +++ b/test/joins/e2e.spec.ts @@ -291,6 +291,39 @@ test.describe('Join Field', () => { await expect(joinField.locator('tbody .row-1')).toContainText('Test Post 1 Updated') }) + test('should update relationship table when document is deleted', async () => { + await page.goto(categoriesURL.edit(categoryID)) + const joinField = page.locator('#field-group__relatedPosts.field-type.join') + await expect(joinField).toBeVisible() + + const expectedRows = 3 + const rows = joinField.locator('.relationship-table tbody tr') + await expect(rows).toHaveCount(expectedRows) + + const editButton = joinField.locator( + 'tbody tr:first-child td:nth-child(2) button.doc-drawer__toggler', + ) + await expect(editButton).toBeVisible() + await editButton.click() + const drawer = page.locator('[id^=doc-drawer_posts_1_]') + await expect(drawer).toBeVisible() + const popupButton = drawer.locator('button.popup-button') + await expect(popupButton).toBeVisible() + await popupButton.click() + const deleteButton = drawer.locator('#action-delete') + await expect(deleteButton).toBeVisible() + await deleteButton.click() + const deleteConfirmModal = page.locator('dialog[id^="delete-"][open]') + await expect(deleteConfirmModal).toBeVisible() + const confirmDeleteButton = deleteConfirmModal.locator('button#confirm-delete') + await expect(confirmDeleteButton).toBeVisible() + await confirmDeleteButton.click() + await expect(drawer).toBeHidden() + + // We should have one less row than we started with + await expect(rows).toHaveCount(expectedRows - 1) + }) + test('should create join collection from polymorphic relationships', async () => { await page.goto(categoriesURL.edit(categoryID)) const joinField = page.locator('#field-polymorphic.field-type.join')