diff --git a/packages/manager/.changeset/pr-13285-fixed-1768558039969.md b/packages/manager/.changeset/pr-13285-fixed-1768558039969.md new file mode 100644 index 00000000000..83ba3e530b8 --- /dev/null +++ b/packages/manager/.changeset/pr-13285-fixed-1768558039969.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Fixed +--- + +IAM: changing entity/role can cause an empty page ([#13285](https://github.com/linode/manager/pull/13285)) diff --git a/packages/manager/src/features/IAM/Shared/AssignedEntitiesTable/AssignedEntitiesTable.tsx b/packages/manager/src/features/IAM/Shared/AssignedEntitiesTable/AssignedEntitiesTable.tsx index 0b96bc6f346..779dfbc82a6 100644 --- a/packages/manager/src/features/IAM/Shared/AssignedEntitiesTable/AssignedEntitiesTable.tsx +++ b/packages/manager/src/features/IAM/Shared/AssignedEntitiesTable/AssignedEntitiesTable.tsx @@ -170,8 +170,17 @@ export const AssignedEntitiesTable = ({ username }: Props) => { setSelectedRole(role); }; - const handleRemoveAssignmentDialogClose = () => { - setIsRemoveAssignmentDialogOpen(false); + /** + * Closes the appropriate assignment-related dialog and adjusts pagination if needed. + * + * @param drawerMode Optional mode indicating which dialog should be closed. + */ + const handleDialogClose = (drawerMode?: DrawerModes) => { + if (drawerMode && drawerMode === 'change-role-for-entity') { + setIsChangeRoleForEntityDrawerOpen(false); + } else { + setIsRemoveAssignmentDialogOpen(false); + } // If we just deleted the last one on a page, reset to the previous page. const removedLastOnPage = filteredAndSortedRoles.length % pagination.pageSize === 1; @@ -362,13 +371,13 @@ export const AssignedEntitiesTable = ({ username }: Props) => { setIsChangeRoleForEntityDrawerOpen(false)} + onClose={() => handleDialogClose(drawerMode)} open={isChangeRoleForEntityDrawerOpen} role={selectedRole} username={username} /> handleRemoveAssignmentDialogClose()} + onClose={() => handleDialogClose()} open={isRemoveAssignmentDialogOpen} role={selectedRole} username={username} diff --git a/packages/manager/src/features/IAM/Shared/AssignedRolesTable/AssignedRolesTable.tsx b/packages/manager/src/features/IAM/Shared/AssignedRolesTable/AssignedRolesTable.tsx index fd03017e6eb..338422e9542 100644 --- a/packages/manager/src/features/IAM/Shared/AssignedRolesTable/AssignedRolesTable.tsx +++ b/packages/manager/src/features/IAM/Shared/AssignedRolesTable/AssignedRolesTable.tsx @@ -166,9 +166,17 @@ export const AssignedRolesTable = () => { setSelectedRole(role); }; - const handleRemoveRoleDialogClose = () => { - setIsUnassignRoleDialogOpen(false); - + /** + * Closes the appropriate assignment-related dialog and adjusts pagination if needed. + * + * @param drawerMode Optional mode indicating which dialog should be closed. + */ + const handleDialogClose = (drawerMode?: DrawerModes) => { + if (drawerMode && drawerMode === 'change-role') { + setIsChangeRoleDrawerOpen(false); + } else { + setIsUnassignRoleDialogOpen(false); + } // If we just deleted the last one on a page, reset to the previous page. const removedLastOnPage = filteredAndSortedRoles.length % pagination.pageSize === 1; @@ -453,12 +461,12 @@ export const AssignedRolesTable = () => { /> setIsChangeRoleDrawerOpen(false)} + onClose={() => handleDialogClose(drawerMode)} open={isChangeRoleDrawerOpen} role={selectedRole} /> handleRemoveRoleDialogClose()} + onClose={() => handleDialogClose()} open={isUnassignRoleDialogOpen} role={selectedRole} />