Skip to content

Commit 78aada0

Browse files
Revert "fix: [UIE-9733] - Performance improvement in IAM users pages (#13159)" (#13167)
This reverts commit bbddca5.
1 parent f95ccd4 commit 78aada0

File tree

18 files changed

+125
-596
lines changed

18 files changed

+125
-596
lines changed

packages/api-v4/src/entities/types.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,8 @@ export type EntityType =
1212
| 'volume'
1313
| 'vpc';
1414

15-
export type EntityId = number | string;
16-
1715
export interface AccountEntity {
18-
id: EntityId;
16+
id: number;
1917
label: string;
2018
type: EntityType;
2119
}

packages/api-v4/src/iam/iam.ts

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -142,30 +142,3 @@ export const getUserEntitiesByPermission = ({
142142
setParams(params),
143143
setXFilter(filter),
144144
);
145-
146-
/**
147-
* getUserEntities
148-
*
149-
* Returns the available entities for a given user.
150-
* It is using the getUserEntitiesByPermission method, but without the permission parameter.
151-
* This is used to get all entities for a given user, per entity type.
152-
*/
153-
export interface GetUserEntitiesParams {
154-
entityType: EntityType;
155-
filter?: Filter;
156-
params?: Params;
157-
username: string;
158-
}
159-
160-
export const getUserEntities = ({
161-
username,
162-
entityType,
163-
params,
164-
filter,
165-
}: GetUserEntitiesParams) =>
166-
Request<ResourcePage<EntityByPermission>>(
167-
setURL(`${BETA_API_ROOT}/iam/users/${username}/entities/${entityType}`),
168-
setMethod('GET'),
169-
setParams(params),
170-
setXFilter(filter),
171-
);

packages/api-v4/src/iam/types.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { EntityId, EntityType } from '../entities/types';
1+
import type { EntityType } from '../entities/types';
22

33
export type AccountType = 'account';
44

@@ -436,7 +436,7 @@ export interface IamUserRoles {
436436
}
437437

438438
export interface EntityAccess {
439-
id: EntityId;
439+
id: number;
440440
roles: EntityRoleType[];
441441
type: AccessType;
442442
}
@@ -457,7 +457,7 @@ export interface Roles {
457457
permissions: PermissionType[];
458458
}
459459
export interface EntityByPermission {
460-
id: EntityId;
460+
id: number | string;
461461
label: string;
462462
type: EntityType;
463463
}

packages/manager/.changeset/pr-13159-fixed-1764841164025.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

packages/manager/src/features/IAM/Shared/AssignedEntitiesTable/AssignedEntitiesTable.test.tsx

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,27 @@ import { renderWithTheme } from 'src/utilities/testHelpers';
99
import { AssignedEntitiesTable } from '../../Shared/AssignedEntitiesTable/AssignedEntitiesTable';
1010

1111
const queryMocks = vi.hoisted(() => ({
12+
useAllAccountEntities: vi.fn().mockReturnValue({}),
1213
useParams: vi.fn().mockReturnValue({}),
1314
useSearch: vi.fn().mockReturnValue({}),
1415
useUserRoles: vi.fn().mockReturnValue({}),
15-
useGetUserEntities: vi.fn().mockReturnValue({}),
1616
}));
1717

1818
vi.mock('@linode/queries', async () => {
19-
const actual = await vi.importActual('@linode/queries');
19+
const actual = await vi.importActual<any>('@linode/queries');
2020
return {
2121
...actual,
2222
useUserRoles: queryMocks.useUserRoles,
2323
};
2424
});
2525

26-
vi.mock('../../hooks/useGetUserEntities', () => ({
27-
useGetUserEntities: queryMocks.useGetUserEntities,
28-
}));
26+
vi.mock('src/queries/entities/entities', async () => {
27+
const actual = await vi.importActual('src/queries/entities/entities');
28+
return {
29+
...actual,
30+
useAllAccountEntities: queryMocks.useAllAccountEntities,
31+
};
32+
});
2933

3034
vi.mock('@tanstack/react-router', async () => {
3135
const actual = await vi.importActual('@tanstack/react-router');
@@ -52,11 +56,6 @@ describe('AssignedEntitiesTable', () => {
5256
queryMocks.useSearch.mockReturnValue({
5357
query: '',
5458
});
55-
queryMocks.useGetUserEntities.mockReturnValue({
56-
userEntities: mockEntities,
57-
isLoading: false,
58-
error: null,
59-
});
6059
});
6160

6261
it('should display no roles text if there are no roles assigned to user', async () => {
@@ -74,6 +73,10 @@ describe('AssignedEntitiesTable', () => {
7473
data: userRolesFactory.build(),
7574
});
7675

76+
queryMocks.useAllAccountEntities.mockReturnValue({
77+
data: mockEntities,
78+
});
79+
7780
renderWithTheme(<AssignedEntitiesTable />);
7881

7982
expect(screen.getByText('no_devices')).toBeVisible();
@@ -95,6 +98,10 @@ describe('AssignedEntitiesTable', () => {
9598
data: userRolesFactory.build(),
9699
});
97100

101+
queryMocks.useAllAccountEntities.mockReturnValue({
102+
data: mockEntities,
103+
});
104+
98105
renderWithTheme(<AssignedEntitiesTable />);
99106

100107
const searchInput = screen.getByPlaceholderText('Search');
@@ -110,6 +117,10 @@ describe('AssignedEntitiesTable', () => {
110117
data: userRolesFactory.build(),
111118
});
112119

120+
queryMocks.useAllAccountEntities.mockReturnValue({
121+
data: mockEntities,
122+
});
123+
113124
renderWithTheme(<AssignedEntitiesTable />);
114125

115126
const searchInput = screen.getByPlaceholderText('Search');
@@ -125,6 +136,10 @@ describe('AssignedEntitiesTable', () => {
125136
data: userRolesFactory.build(),
126137
});
127138

139+
queryMocks.useAllAccountEntities.mockReturnValue({
140+
data: mockEntities,
141+
});
142+
128143
renderWithTheme(<AssignedEntitiesTable />);
129144

130145
const autocomplete = screen.getByPlaceholderText('All Entities');

packages/manager/src/features/IAM/Shared/AssignedEntitiesTable/AssignedEntitiesTable.tsx

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ import { TableRowError } from 'src/components/TableRowError/TableRowError';
2121
import { TableRowLoading } from 'src/components/TableRowLoading/TableRowLoading';
2222
import { TableSortCell } from 'src/components/TableSortCell';
2323
import { usePaginationV2 } from 'src/hooks/usePaginationV2';
24+
import { useAllAccountEntities } from 'src/queries/entities/entities';
2425

2526
import { useIsDefaultDelegationRolesForChildAccount } from '../../hooks/useDelegationRole';
26-
import { useGetUserEntities } from '../../hooks/useGetUserEntities';
2727
import { usePermissions } from '../../hooks/usePermissions';
2828
import {
2929
addEntityNamesToRoles,
@@ -102,6 +102,12 @@ export const AssignedEntitiesTable = ({ username }: Props) => {
102102
React.useState<boolean>(false);
103103
const [selectedRole, setSelectedRole] = React.useState<EntitiesRole>();
104104

105+
const {
106+
data: entities,
107+
error: entitiesError,
108+
isLoading: entitiesLoading,
109+
} = useAllAccountEntities({});
110+
105111
const {
106112
data: assignedUserRoles,
107113
error: assignedUserRolesError,
@@ -132,20 +138,11 @@ export const AssignedEntitiesTable = ({ username }: Props) => {
132138
? permissions?.update_default_delegate_access
133139
: permissions?.is_account_admin;
134140

135-
const {
136-
userEntities,
137-
isLoading: entitiesLoading,
138-
error: entitiesError,
139-
} = useGetUserEntities({
140-
username: username ?? '',
141-
userRoles: assignedRoles,
142-
});
143-
144141
const { filterableOptions, roles } = React.useMemo(() => {
145-
if (!assignedRoles || !userEntities) {
142+
if (!assignedRoles || !entities) {
146143
return { filterableOptions: [], roles: [] };
147144
}
148-
const transformedEntities = groupAccountEntitiesByType(userEntities);
145+
const transformedEntities = groupAccountEntitiesByType(entities);
149146

150147
const roles = addEntityNamesToRoles(assignedRoles, transformedEntities);
151148

@@ -155,7 +152,7 @@ export const AssignedEntitiesTable = ({ username }: Props) => {
155152
];
156153

157154
return { filterableOptions, roles };
158-
}, [assignedRoles, userEntities]);
155+
}, [assignedRoles, entities]);
159156

160157
const handleChangeRole = (role: EntitiesRole, mode: DrawerModes) => {
161158
setIsChangeRoleForEntityDrawerOpen(true);
@@ -214,11 +211,11 @@ export const AssignedEntitiesTable = ({ username }: Props) => {
214211
);
215212
}
216213

217-
if (!userEntities || !assignedRoles || filteredRoles.length === 0) {
214+
if (!entities || !assignedRoles || filteredRoles.length === 0) {
218215
return <TableRowEmpty colSpan={3} message={'No items to display.'} />;
219216
}
220217

221-
if (assignedRoles && userEntities) {
218+
if (assignedRoles && entities) {
222219
return (
223220
<>
224221
{filteredAndSortedRoles

packages/manager/src/features/IAM/Shared/AssignedRolesTable/AssignedRolesTable.test.tsx

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ import { renderWithTheme } from 'src/utilities/testHelpers';
1010
import { AssignedRolesTable } from './AssignedRolesTable';
1111

1212
const queryMocks = vi.hoisted(() => ({
13+
useAllAccountEntities: vi.fn().mockReturnValue({}),
1314
useParams: vi.fn().mockReturnValue({}),
1415
useAccountRoles: vi.fn().mockReturnValue({}),
1516
useUserRoles: vi.fn().mockReturnValue({}),
1617
useGetDefaultDelegationAccessQuery: vi.fn().mockReturnValue({}),
1718
useIsDefaultDelegationRolesForChildAccount: vi.fn().mockReturnValue({
1819
isDefaultDelegationRolesForChildAccount: false,
1920
}),
20-
useGetUserEntities: vi.fn().mockReturnValue({}),
2121
}));
2222

2323
vi.mock('@linode/queries', async () => {
@@ -31,6 +31,14 @@ vi.mock('@linode/queries', async () => {
3131
};
3232
});
3333

34+
vi.mock('src/queries/entities/entities', async () => {
35+
const actual = await vi.importActual('src/queries/entities/entities');
36+
return {
37+
...actual,
38+
useAllAccountEntities: queryMocks.useAllAccountEntities,
39+
};
40+
});
41+
3442
vi.mock('@tanstack/react-router', async () => {
3543
const actual = await vi.importActual('@tanstack/react-router');
3644
return {
@@ -44,10 +52,6 @@ vi.mock('../../hooks/useDelegationRole', () => ({
4452
queryMocks.useIsDefaultDelegationRolesForChildAccount,
4553
}));
4654

47-
vi.mock('../../hooks/useGetUserEntities', () => ({
48-
useGetUserEntities: queryMocks.useGetUserEntities,
49-
}));
50-
5155
const mockEntities = [
5256
accountEntityFactory.build({
5357
id: 7,
@@ -68,11 +72,6 @@ describe('AssignedRolesTable', () => {
6872
queryMocks.useParams.mockReturnValue({
6973
username: 'test_user',
7074
});
71-
queryMocks.useGetUserEntities.mockReturnValue({
72-
userEntities: mockEntities,
73-
isLoading: false,
74-
error: null,
75-
});
7675
});
7776

7877
it('should display no roles text if there are no roles assigned to user', async () => {
@@ -94,6 +93,10 @@ describe('AssignedRolesTable', () => {
9493
data: mockAccountRoles,
9594
});
9695

96+
queryMocks.useAllAccountEntities.mockReturnValue({
97+
data: mockEntities,
98+
});
99+
97100
renderWithTheme(<AssignedRolesTable />);
98101

99102
expect(screen.getByText('account_linode_admin')).toBeVisible();
@@ -118,6 +121,10 @@ describe('AssignedRolesTable', () => {
118121
data: mockAccountRoles,
119122
});
120123

124+
queryMocks.useAllAccountEntities.mockReturnValue({
125+
data: mockEntities,
126+
});
127+
121128
renderWithTheme(<AssignedRolesTable />);
122129

123130
const searchInput = screen.getByPlaceholderText('Search');
@@ -137,6 +144,10 @@ describe('AssignedRolesTable', () => {
137144
data: mockAccountRoles,
138145
});
139146

147+
queryMocks.useAllAccountEntities.mockReturnValue({
148+
data: mockEntities,
149+
});
150+
140151
renderWithTheme(<AssignedRolesTable />);
141152

142153
const searchInput = screen.getByPlaceholderText('Search');
@@ -156,6 +167,10 @@ describe('AssignedRolesTable', () => {
156167
data: mockAccountRoles,
157168
});
158169

170+
queryMocks.useAllAccountEntities.mockReturnValue({
171+
data: mockEntities,
172+
});
173+
159174
renderWithTheme(<AssignedRolesTable />);
160175

161176
const autocomplete = screen.getByPlaceholderText('All Assigned Roles');
@@ -179,6 +194,10 @@ describe('AssignedRolesTable', () => {
179194
data: mockAccountRoles,
180195
});
181196

197+
queryMocks.useAllAccountEntities.mockReturnValue({
198+
data: mockEntities,
199+
});
200+
182201
renderWithTheme(<AssignedRolesTable />);
183202

184203
expect(screen.getByText('Add New Default Roles')).toBeVisible();

packages/manager/src/features/IAM/Shared/AssignedRolesTable/AssignedRolesTable.tsx

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ import { TableRow } from 'src/components/TableRow';
1919
import { TableRowEmpty } from 'src/components/TableRowEmpty/TableRowEmpty';
2020
import { TableSortCell } from 'src/components/TableSortCell/TableSortCell';
2121
import { usePaginationV2 } from 'src/hooks/usePaginationV2';
22+
import { useAllAccountEntities } from 'src/queries/entities/entities';
2223

2324
import { useIsDefaultDelegationRolesForChildAccount } from '../../hooks/useDelegationRole';
24-
import { useGetUserEntities } from '../../hooks/useGetUserEntities';
2525
import { usePermissions } from '../../hooks/usePermissions';
2626
import { AssignedEntities } from '../../Users/UserRoles/AssignedEntities';
2727
import { AssignNewRoleDrawer } from '../../Users/UserRoles/AssignNewRoleDrawer';
@@ -168,11 +168,9 @@ export const AssignedRolesTable = () => {
168168

169169
const { data: accountRoles, isLoading: accountPermissionsLoading } =
170170
useAccountRoles();
171-
172-
const { userEntities, isLoading: entitiesLoading } = useGetUserEntities({
173-
username: username ?? '',
174-
userRoles: assignedRoles,
175-
});
171+
const { data: entities, isLoading: entitiesLoading } = useAllAccountEntities(
172+
{}
173+
);
176174

177175
const { filterableOptions, roles } = React.useMemo(() => {
178176
if (!assignedRoles || !accountRoles) {
@@ -187,13 +185,14 @@ export const AssignedRolesTable = () => {
187185
...mapEntityTypesForSelect(roles, ' Roles'),
188186
];
189187

190-
if (userEntities) {
191-
const transformedEntities = groupAccountEntitiesByType(userEntities);
188+
if (entities) {
189+
const transformedEntities = groupAccountEntitiesByType(entities);
190+
192191
roles = addEntitiesNamesToRoles(roles, transformedEntities);
193192
}
194193

195194
return { filterableOptions, roles };
196-
}, [assignedRoles, accountRoles, userEntities]);
195+
}, [assignedRoles, accountRoles, entities]);
197196

198197
const [query, setQuery] = React.useState('');
199198

0 commit comments

Comments
 (0)