diff --git a/packages/manager/.changeset/pr-13282-fixed-1768483343450.md b/packages/manager/.changeset/pr-13282-fixed-1768483343450.md new file mode 100644 index 00000000000..b5ccd623faa --- /dev/null +++ b/packages/manager/.changeset/pr-13282-fixed-1768483343450.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Fixed +--- + +IAM Delegation: User selector not working in Assign Role/Roles drawer ([#13282](https://github.com/linode/manager/pull/13282)) diff --git a/packages/manager/src/features/IAM/Delegations/AccountDelegations.test.tsx b/packages/manager/src/features/IAM/Delegations/AccountDelegations.test.tsx index 5dc6036b295..6351aec3157 100644 --- a/packages/manager/src/features/IAM/Delegations/AccountDelegations.test.tsx +++ b/packages/manager/src/features/IAM/Delegations/AccountDelegations.test.tsx @@ -82,7 +82,7 @@ describe('AccountDelegations', () => { }); await waitFor(() => { - const emptyElement = screen.getByText(/No users added/); + const emptyElement = screen.getByText(/No items to display/); expect(emptyElement).toBeInTheDocument(); }); }); diff --git a/packages/manager/src/features/IAM/Delegations/AccountDelegationsTable.tsx b/packages/manager/src/features/IAM/Delegations/AccountDelegationsTable.tsx index bcb5b668fca..8fb001661c1 100644 --- a/packages/manager/src/features/IAM/Delegations/AccountDelegationsTable.tsx +++ b/packages/manager/src/features/IAM/Delegations/AccountDelegationsTable.tsx @@ -10,7 +10,7 @@ import { TableRowError } from 'src/components/TableRowError/TableRowError'; import { TableRowLoading } from 'src/components/TableRowLoading/TableRowLoading'; import { TableSortCell } from 'src/components/TableSortCell'; -import { NO_DELEGATIONS_TEXT } from '../Shared/constants'; +import { NO_ITEMS_TO_DISPLAY_TEXT } from '../Shared/constants'; import { AccountDelegationsTableRow } from './AccountDelegationsTableRow'; import type { @@ -70,7 +70,7 @@ export const AccountDelegationsTable = ({ )} {!isLoading && !error && (!delegations || delegations.length === 0) && ( - + )} {!isLoading && !error && diff --git a/packages/manager/src/features/IAM/Roles/RolesTable/AssignSelectedRolesDrawer.tsx b/packages/manager/src/features/IAM/Roles/RolesTable/AssignSelectedRolesDrawer.tsx index 9194cfd11b1..80f19031356 100644 --- a/packages/manager/src/features/IAM/Roles/RolesTable/AssignSelectedRolesDrawer.tsx +++ b/packages/manager/src/features/IAM/Roles/RolesTable/AssignSelectedRolesDrawer.tsx @@ -23,6 +23,7 @@ import { Link } from 'src/components/Link'; import { StyledLinkButtonBox } from 'src/components/SelectFirewallPanel/SelectFirewallPanel'; import { AssignSingleSelectedRole } from 'src/features/IAM/Roles/RolesTable/AssignSingleSelectedRole'; +import { usePermissions } from '../../hooks/usePermissions'; import { INTERNAL_ERROR_NO_CHANGES_SAVED } from '../../Shared/constants'; import { mergeAssignedRolesIntoExistingRoles } from '../../Shared/utilities'; @@ -75,17 +76,22 @@ export const AssignSelectedRolesDrawer = ({ } : undefined; + const { data: permissions } = usePermissions('account', ['view_user']); + const { data: accountUsers, fetchNextPage, hasNextPage, isFetching: isFetchingAccountUsers, isLoading: isLoadingAccountUsers, - } = useAccountUsersInfiniteQuery({ - ...userSearchFilter, - '+order': 'asc', - '+order_by': 'username', - }); + } = useAccountUsersInfiniteQuery( + { + ...userSearchFilter, + '+order': 'asc', + '+order_by': 'username', + }, + permissions?.view_user + ); const getUserOptions = useCallback(() => { const users = accountUsers?.pages.flatMap((page) => page.data); diff --git a/packages/manager/src/features/IAM/Shared/constants.ts b/packages/manager/src/features/IAM/Shared/constants.ts index 4aefdba9001..d1538cd3d39 100644 --- a/packages/manager/src/features/IAM/Shared/constants.ts +++ b/packages/manager/src/features/IAM/Shared/constants.ts @@ -20,7 +20,8 @@ export const ERROR_STATE_TEXT = 'An unexpected error occurred. Refresh the page or try again later.'; // Delegation error messages -export const NO_DELEGATIONS_TEXT = 'No users added.'; +export const NO_ITEMS_TO_DISPLAY_TEXT = 'No items to display.'; +export const NO_DELEGATED_USERS_TEXT = 'No users added.'; export const DELEGATION_VALIDATION_ERROR = 'At least one user must be selected as a delegate.'; diff --git a/packages/manager/src/features/IAM/Users/UserDelegations/UserDelegations.tsx b/packages/manager/src/features/IAM/Users/UserDelegations/UserDelegations.tsx index 557f1904adc..b3ff008e566 100644 --- a/packages/manager/src/features/IAM/Users/UserDelegations/UserDelegations.tsx +++ b/packages/manager/src/features/IAM/Users/UserDelegations/UserDelegations.tsx @@ -20,6 +20,7 @@ import { TableRow } from 'src/components/TableRow'; import { TableRowEmpty } from 'src/components/TableRowEmpty/TableRowEmpty'; import { TableSortCell } from 'src/components/TableSortCell'; import { useIsIAMDelegationEnabled } from 'src/features/IAM/hooks/useIsIAMEnabled'; +import { NO_DELEGATED_USERS_TEXT } from 'src/features/IAM/Shared/constants'; import { useOrderV2 } from 'src/hooks/useOrderV2'; import { usePaginationV2 } from 'src/hooks/usePaginationV2'; @@ -139,7 +140,10 @@ export const UserDelegations = () => { }) => ( <> {paginatedData?.length === 0 && ( - + )} {paginatedData?.map((childAccount) => ( diff --git a/packages/queries/src/account/users.ts b/packages/queries/src/account/users.ts index b0acd3e9e88..228f260d7f2 100644 --- a/packages/queries/src/account/users.ts +++ b/packages/queries/src/account/users.ts @@ -40,8 +40,6 @@ export const useAccountUsersInfiniteQuery = ( filter: Filter = {}, enabled = true, ) => { - const { data: profile } = useProfile(); - return useInfiniteQuery, APIError[]>({ getNextPageParam: ({ page, pages }) => { if (page === pages) { @@ -51,7 +49,7 @@ export const useAccountUsersInfiniteQuery = ( }, initialPageParam: 1, ...accountQueries.users._ctx.infinite(filter), - enabled: enabled && !profile?.restricted, + enabled, placeholderData: keepPreviousData, }); };