diff --git a/.changeset/twenty-forks-cheat.md b/.changeset/twenty-forks-cheat.md new file mode 100644 index 0000000000..c0a7f03ee8 --- /dev/null +++ b/.changeset/twenty-forks-cheat.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Fix offset pagination to reset when updating filters in `useEntityList` diff --git a/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx b/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx index 2a922cf417..35e34b4063 100644 --- a/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx +++ b/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx @@ -23,7 +23,7 @@ import { identityApiRef, storageApiRef, } from '@backstage/core-plugin-api'; -import { TestApiProvider, mockApis } from '@backstage/test-utils'; +import { mockApis, TestApiProvider } from '@backstage/test-utils'; import { act, renderHook, waitFor } from '@testing-library/react'; import qs from 'qs'; import React, { PropsWithChildren } from 'react'; @@ -593,6 +593,7 @@ describe(``, () => { expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { kind: 'component' }, limit, + offset: 0, orderFields, fullTextFilter: { term: '2', @@ -620,6 +621,7 @@ describe(``, () => { expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { kind: 'component' }, limit, + offset: 0, orderFields, }); }); @@ -746,6 +748,7 @@ describe(``, () => { expect(mockCatalogApi.queryEntities).toHaveBeenNthCalledWith(2, { filter: { kind: 'api', 'spec.type': ['service'] }, limit, + offset: 0, orderFields, }); }); diff --git a/plugins/catalog-react/src/hooks/useEntityListProvider.tsx b/plugins/catalog-react/src/hooks/useEntityListProvider.tsx index fc2dfe6a73..e3ca95cebb 100644 --- a/plugins/catalog-react/src/hooks/useEntityListProvider.tsx +++ b/plugins/catalog-react/src/hooks/useEntityListProvider.tsx @@ -379,14 +379,19 @@ export const EntityListProvider = ( // TODO(vinzscam): this is currently causing issues at page reload // where the state is not kept. Unfortunately we need to rethink // the way filters work in order to fix this. - setCursor(undefined); + if (paginationMode === 'cursor') { + setCursor(undefined); + } else if (paginationMode === 'offset') { + // Same thing with offset + setOffset(0); + } setRequestedFilters(prevFilters => { const newFilters = typeof update === 'function' ? update(prevFilters) : update; return { ...prevFilters, ...newFilters }; }); }, - [], + [paginationMode], ); const pageInfo = useMemo(() => {