From 553f3c950113e1e975f2293e1e80d52a4633cec1 Mon Sep 17 00:00:00 2001 From: Phil Kuang Date: Thu, 23 Feb 2023 15:53:30 -0500 Subject: [PATCH] fix(SearchPagination): disable next button on last page Signed-off-by: Phil Kuang --- .changeset/empty-books-occur.md | 5 +++++ plugins/search-react/api-report.md | 7 ++++++- .../SearchPagination/SearchPagination.tsx | 18 ++++++++++++++++-- 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 .changeset/empty-books-occur.md diff --git a/.changeset/empty-books-occur.md b/.changeset/empty-books-occur.md new file mode 100644 index 0000000000..69218c5cfa --- /dev/null +++ b/.changeset/empty-books-occur.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-react': patch +--- + +Correctly disable next button in `SearchPagination` on last page diff --git a/plugins/search-react/api-report.md b/plugins/search-react/api-report.md index 375af20d5c..9be8d90395 100644 --- a/plugins/search-react/api-report.md +++ b/plugins/search-react/api-report.md @@ -234,6 +234,7 @@ export type SearchPaginationBaseProps = { className?: string; total?: number; cursor?: string; + hasNextPage?: boolean; onCursorChange?: (pageCursor: string) => void; limit?: number; limitLabel?: ReactNode; @@ -264,7 +265,11 @@ export type SearchPaginationLimitText = (params: { // @public export type SearchPaginationProps = Omit< SearchPaginationBaseProps, - 'pageLimit' | 'onPageLimitChange' | 'pageCursor' | 'onPageCursorChange' + | 'pageLimit' + | 'onPageLimitChange' + | 'pageCursor' + | 'onPageCursorChange' + | 'hasNextPage' >; // @public diff --git a/plugins/search-react/src/components/SearchPagination/SearchPagination.tsx b/plugins/search-react/src/components/SearchPagination/SearchPagination.tsx index 34b6deaff5..7ab9e8604c 100644 --- a/plugins/search-react/src/components/SearchPagination/SearchPagination.tsx +++ b/plugins/search-react/src/components/SearchPagination/SearchPagination.tsx @@ -77,6 +77,10 @@ export type SearchPaginationBaseProps = { * The cursor for the current page. */ cursor?: string; + /** + * Whether a next page exists + */ + hasNextPage?: boolean; /** * Callback fired when the current page cursor is changed. */ @@ -118,6 +122,7 @@ export const SearchPaginationBase = (props: SearchPaginationBaseProps) => { const { total: count = -1, cursor: pageCursor, + hasNextPage, onCursorChange: onPageCursorChange, limit: rowsPerPage = 25, limitLabel: labelRowsPerPage = 'Results per page:', @@ -151,6 +156,9 @@ export const SearchPaginationBase = (props: SearchPaginationBaseProps) => { component="div" count={count} page={page} + nextIconButtonProps={{ + ...(hasNextPage !== undefined && { disabled: !hasNextPage }), + }} onPageChange={handlePageChange} rowsPerPage={rowsPerPage} labelRowsPerPage={labelRowsPerPage} @@ -167,7 +175,11 @@ export const SearchPaginationBase = (props: SearchPaginationBaseProps) => { */ export type SearchPaginationProps = Omit< SearchPaginationBaseProps, - 'pageLimit' | 'onPageLimitChange' | 'pageCursor' | 'onPageCursorChange' + | 'pageLimit' + | 'onPageLimitChange' + | 'pageCursor' + | 'onPageCursorChange' + | 'hasNextPage' >; /** @@ -176,11 +188,13 @@ export type SearchPaginationProps = Omit< * @public */ export const SearchPagination = (props: SearchPaginationProps) => { - const { pageLimit, setPageLimit, pageCursor, setPageCursor } = useSearch(); + const { pageLimit, setPageLimit, pageCursor, setPageCursor, fetchNextPage } = + useSearch(); return (