Merge pull request #29678 from Jona-Soerensen/fix/entity-owner-picker

fix(useEntityListProvider): adjust the EntityListProvider to fix (#18710)
This commit is contained in:
Fredrik Adelöw
2025-04-28 16:50:05 +02:00
committed by GitHub
3 changed files with 147 additions and 1 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-react': patch
---
Fixed an issue causing entities of kind user and group to be empty when an owner was selected
@@ -32,6 +32,7 @@ import { catalogApiRef } from '../api';
import { MockStarredEntitiesApi, starredEntitiesApiRef } from '../apis';
import {
EntityKindFilter,
EntityOwnerFilter,
EntityTextFilter,
EntityTypeFilter,
EntityUserFilter,
@@ -298,6 +299,48 @@ describe('<EntityListProvider />', () => {
expect(result.current.pageInfo).toBeUndefined();
});
it('should omit owners filter when kind is "user"', async () => {
const { result } = renderHook(() => useEntityList(), {
wrapper: createWrapper({ pagination }),
});
act(() => {
result.current.updateFilters({
kind: new EntityKindFilter('user', 'User'),
owners: new EntityOwnerFilter(['user:default/guest']),
});
});
await waitFor(() => {
expect(mockCatalogApi.getEntities).toHaveBeenCalled();
});
expect(mockCatalogApi.getEntities).toHaveBeenCalledWith({
filter: { kind: 'user' },
});
});
it('should omit owners filter when kind is "group"', async () => {
const { result } = renderHook(() => useEntityList(), {
wrapper: createWrapper({ pagination }),
});
act(() => {
result.current.updateFilters({
kind: new EntityKindFilter('group', 'Group'),
owners: new EntityOwnerFilter(['group:default/team-a']),
});
});
await waitFor(() => {
expect(mockCatalogApi.getEntities).toHaveBeenCalled();
});
expect(mockCatalogApi.getEntities).toHaveBeenCalledWith({
filter: { kind: 'group' },
});
});
});
describe('<EntityListProvider pagination />', () => {
@@ -552,6 +595,52 @@ describe('<EntityListProvider pagination />', () => {
});
});
});
it('should omit owners filter when kind is "user"', async () => {
const { result } = renderHook(() => useEntityList(), {
wrapper: createWrapper({ pagination }),
});
act(() => {
result.current.updateFilters({
kind: new EntityKindFilter('user', 'User'),
owners: new EntityOwnerFilter(['user:default/guest']),
});
});
await waitFor(() => {
expect(mockCatalogApi.queryEntities).toHaveBeenCalled();
});
expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith(
expect.objectContaining({
filter: { kind: 'user' },
}),
);
});
it('should omit owners filter when kind is "group"', async () => {
const { result } = renderHook(() => useEntityList(), {
wrapper: createWrapper({ pagination }),
});
act(() => {
result.current.updateFilters({
kind: new EntityKindFilter('group', 'Group'),
owners: new EntityOwnerFilter(['group:default/team-a']),
});
});
await waitFor(() => {
expect(mockCatalogApi.queryEntities).toHaveBeenCalled();
});
expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith(
expect.objectContaining({
filter: { kind: 'group' },
}),
);
});
});
});
@@ -801,4 +890,50 @@ describe(`<EntityListProvider pagination={{ mode: 'offset' }} />`, () => {
expect(result.current.error).toBeDefined();
});
});
it('should omit owners filter when kind is "user"', async () => {
const { result } = renderHook(() => useEntityList(), {
wrapper: createWrapper({ pagination }),
});
act(() => {
result.current.updateFilters({
kind: new EntityKindFilter('user', 'User'),
owners: new EntityOwnerFilter(['user:default/guest']),
});
});
await waitFor(() => {
expect(mockCatalogApi.queryEntities).toHaveBeenCalled();
});
expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith(
expect.objectContaining({
filter: { kind: 'user' },
}),
);
});
it('should omit owners filter when kind is "group"', async () => {
const { result } = renderHook(() => useEntityList(), {
wrapper: createWrapper({ pagination }),
});
act(() => {
result.current.updateFilters({
kind: new EntityKindFilter('group', 'Group'),
owners: new EntityOwnerFilter(['group:default/team-a']),
});
});
await waitFor(() => {
expect(mockCatalogApi.queryEntities).toHaveBeenCalled();
});
expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith(
expect.objectContaining({
filter: { kind: 'group' },
}),
);
});
});
@@ -241,7 +241,13 @@ export const EntityListProvider = <EntityFilters extends DefaultEntityFilters>(
// based on the requested filters changing.
const [{ loading, error }, refresh] = useAsyncFn(
async () => {
const compacted = compact(Object.values(requestedFilters));
const kindValue =
requestedFilters.kind?.value?.toLocaleLowerCase('en-US');
const adjustedFilters =
kindValue === 'user' || kindValue === 'group'
? { ...requestedFilters, owners: undefined }
: requestedFilters;
const compacted = compact(Object.values(adjustedFilters));
const queryParams = Object.keys(requestedFilters).reduce(
(params, key) => {