From d0b7453cffdd1be11f60b501146d80b2bba85716 Mon Sep 17 00:00:00 2001 From: its-mitesh-kumar Date: Sun, 3 May 2026 00:46:45 +0530 Subject: [PATCH 1/5] fix(extensions): preserve pagination state on search and add i18n support Signed-off-by: its-mitesh-kumar --- .../extensions/src/alpha/translations/de.ts | 3 +++ .../extensions/src/alpha/translations/es.ts | 3 +++ .../extensions/src/alpha/translations/fr.ts | 3 +++ .../extensions/src/alpha/translations/it.ts | 3 +++ .../extensions/src/alpha/translations/ja.ts | 3 +++ .../extensions/src/alpha/translations/ref.ts | 4 ++++ .../InstalledPackagesTable.tsx | 23 +++++++++++++++++-- 7 files changed, 40 insertions(+), 2 deletions(-) diff --git a/workspaces/extensions/plugins/extensions/src/alpha/translations/de.ts b/workspaces/extensions/plugins/extensions/src/alpha/translations/de.ts index 6068437766..dc469cb63c 100644 --- a/workspaces/extensions/plugins/extensions/src/alpha/translations/de.ts +++ b/workspaces/extensions/plugins/extensions/src/alpha/translations/de.ts @@ -176,6 +176,9 @@ const extensionsTranslationDe = createTranslationMessages({ 'Keine Ergebnisse gefunden. Versuchen Sie es mit einem anderen Suchbegriff.', 'installedPackages.table.emptyMessages.noRecords': 'Keine Datensätze zum Anzeigen vorhanden', + 'installedPackages.table.pagination.labelRowsPerPage': 'Zeilen', + 'installedPackages.table.pagination.labelDisplayedRows': + '{from}-{to} von {count}', 'actions.install': 'Installieren', 'actions.view': 'Anzeigen', 'actions.edit': 'Bearbeiten', diff --git a/workspaces/extensions/plugins/extensions/src/alpha/translations/es.ts b/workspaces/extensions/plugins/extensions/src/alpha/translations/es.ts index 8cd44aa99b..2d3541e355 100644 --- a/workspaces/extensions/plugins/extensions/src/alpha/translations/es.ts +++ b/workspaces/extensions/plugins/extensions/src/alpha/translations/es.ts @@ -177,6 +177,9 @@ const extensionsTranslationEs = createTranslationMessages({ 'No se encontraron resultados. Pruebe con un término de búsqueda diferente.', 'installedPackages.table.emptyMessages.noRecords': 'No hay registros para mostrar', + 'installedPackages.table.pagination.labelRowsPerPage': 'filas', + 'installedPackages.table.pagination.labelDisplayedRows': + '{from}-{to} de {count}', 'actions.install': 'Instalar', 'actions.view': 'Ver', 'actions.edit': 'Modificar', diff --git a/workspaces/extensions/plugins/extensions/src/alpha/translations/fr.ts b/workspaces/extensions/plugins/extensions/src/alpha/translations/fr.ts index 933c719439..07666a8d7f 100644 --- a/workspaces/extensions/plugins/extensions/src/alpha/translations/fr.ts +++ b/workspaces/extensions/plugins/extensions/src/alpha/translations/fr.ts @@ -176,6 +176,9 @@ const extensionsTranslationFr = createTranslationMessages({ 'Aucun résultat trouvé. Essayez un autre terme de recherche.', 'installedPackages.table.emptyMessages.noRecords': 'Aucun enregistrement à afficher', + 'installedPackages.table.pagination.labelRowsPerPage': 'lignes', + 'installedPackages.table.pagination.labelDisplayedRows': + '{from}-{to} sur {count}', 'actions.install': 'Installer', 'actions.view': 'Voir', 'actions.edit': 'Modifier', diff --git a/workspaces/extensions/plugins/extensions/src/alpha/translations/it.ts b/workspaces/extensions/plugins/extensions/src/alpha/translations/it.ts index 2b8c951564..a791fa9d0e 100644 --- a/workspaces/extensions/plugins/extensions/src/alpha/translations/it.ts +++ b/workspaces/extensions/plugins/extensions/src/alpha/translations/it.ts @@ -179,6 +179,9 @@ const extensionsTranslationIt = createTranslationMessages({ 'Nessun risultato trovato. Provare un termine di ricerca diverso.', 'installedPackages.table.emptyMessages.noRecords': 'Nessun record da visualizzare', + 'installedPackages.table.pagination.labelRowsPerPage': 'righe', + 'installedPackages.table.pagination.labelDisplayedRows': + '{from}-{to} di {count}', 'actions.install': 'Installa', 'actions.view': 'Visualizza', 'actions.edit': 'Modifica', diff --git a/workspaces/extensions/plugins/extensions/src/alpha/translations/ja.ts b/workspaces/extensions/plugins/extensions/src/alpha/translations/ja.ts index bae3802569..6b7cba8d73 100644 --- a/workspaces/extensions/plugins/extensions/src/alpha/translations/ja.ts +++ b/workspaces/extensions/plugins/extensions/src/alpha/translations/ja.ts @@ -177,6 +177,9 @@ const extensionsTranslationJa = createTranslationMessages({ '結果が見つかりません。別の検索語句を試してください。', 'installedPackages.table.emptyMessages.noRecords': '表示するレコードがありません', + 'installedPackages.table.pagination.labelRowsPerPage': '行', + 'installedPackages.table.pagination.labelDisplayedRows': + '{from}-{to} / {count}', 'actions.install': 'インストール', 'actions.view': '表示', 'actions.edit': '編集', diff --git a/workspaces/extensions/plugins/extensions/src/alpha/translations/ref.ts b/workspaces/extensions/plugins/extensions/src/alpha/translations/ref.ts index 0147817b0a..b2bf68dcb9 100644 --- a/workspaces/extensions/plugins/extensions/src/alpha/translations/ref.ts +++ b/workspaces/extensions/plugins/extensions/src/alpha/translations/ref.ts @@ -222,6 +222,10 @@ export const extensionsMessages = { noResults: 'No results found. Try a different search term.', noRecords: 'No records to display', }, + pagination: { + labelRowsPerPage: 'rows', + labelDisplayedRows: '{from}-{to} of {count}', + }, }, }, diff --git a/workspaces/extensions/plugins/extensions/src/components/InstalledPackages/InstalledPackagesTable.tsx b/workspaces/extensions/plugins/extensions/src/components/InstalledPackages/InstalledPackagesTable.tsx index 1cb74da41f..8d8acbf385 100644 --- a/workspaces/extensions/plugins/extensions/src/components/InstalledPackages/InstalledPackagesTable.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/InstalledPackages/InstalledPackagesTable.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { useState } from 'react'; +import { useState, useRef, useEffect } from 'react'; import { ResponseErrorPanel, Table, @@ -69,6 +69,12 @@ export const InstalledPackagesTable = () => { const dynamicPluginInfo = useApi(dynamicPluginsInfoApiRef); const extensionsApi = useExtensionsApi(); const fullTextSearch = useQueryFullTextSearch(); + const searchTerm = fullTextSearch.current; + const tableRef = useRef(null); + + useEffect(() => { + tableRef.current?.onQueryChange(); + }, [searchTerm]); const showUninstall = false; const isProductionEnvironment = @@ -330,7 +336,8 @@ export const InstalledPackagesTable = () => { { toolbar: { searchPlaceholder: t('installedPackages.table.searchPlaceholder'), }, + pagination: { + labelRowsPerPage: t( + 'installedPackages.table.pagination.labelRowsPerPage', + ), + labelRowsSelect: t( + 'installedPackages.table.pagination.labelRowsPerPage', + ), + labelDisplayedRows: t( + 'installedPackages.table.pagination.labelDisplayedRows', + {}, + ), + }, }} /> Date: Sun, 3 May 2026 13:26:33 +0530 Subject: [PATCH 2/5] updating api report Signed-off-by: its-mitesh-kumar --- workspaces/extensions/plugins/extensions/report-alpha.api.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/workspaces/extensions/plugins/extensions/report-alpha.api.md b/workspaces/extensions/plugins/extensions/report-alpha.api.md index e00833ae93..40caf1a704 100644 --- a/workspaces/extensions/plugins/extensions/report-alpha.api.md +++ b/workspaces/extensions/plugins/extensions/report-alpha.api.md @@ -361,6 +361,8 @@ export const extensionsTranslationRef: TranslationRef< readonly 'installedPackages.table.tooltips.disablePackage': string; readonly 'installedPackages.table.emptyMessages.noResults': string; readonly 'installedPackages.table.emptyMessages.noRecords': string; + readonly 'installedPackages.table.pagination.labelRowsPerPage': string; + readonly 'installedPackages.table.pagination.labelDisplayedRows': string; readonly 'button.update': string; readonly 'button.install': string; readonly 'button.uninstall': string; From 6106d3b8bbc45c623a7f5406866bf8095556b84c Mon Sep 17 00:00:00 2001 From: its-mitesh-kumar Date: Sun, 3 May 2026 22:05:52 +0530 Subject: [PATCH 3/5] retaining state even after opening drwaer Signed-off-by: its-mitesh-kumar --- .../plugins/extensions/report-alpha.api.md | 3 +++ .../extensions/plugins/extensions/report.api.md | 6 ++++++ .../components/InstalledPackages/RowActions.tsx | 15 ++++++++------- .../extensions/plugins/extensions/src/routes.ts | 7 +++++++ 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/workspaces/extensions/plugins/extensions/report-alpha.api.md b/workspaces/extensions/plugins/extensions/report-alpha.api.md index 40caf1a704..230e41a1d1 100644 --- a/workspaces/extensions/plugins/extensions/report-alpha.api.md +++ b/workspaces/extensions/plugins/extensions/report-alpha.api.md @@ -144,6 +144,9 @@ const extensionsPlugin: OverridableFrontendPlugin< >; catalogTabRouteRef: SubRouteRef; installedTabRouteRef: SubRouteRef; + installedPackageRouteRef: SubRouteRef< + PathParams<'/installed-packages/:namespace/:name'> + >; }, {}, { diff --git a/workspaces/extensions/plugins/extensions/report.api.md b/workspaces/extensions/plugins/extensions/report.api.md index 15a12b2dce..473bb6cedb 100644 --- a/workspaces/extensions/plugins/extensions/report.api.md +++ b/workspaces/extensions/plugins/extensions/report.api.md @@ -49,6 +49,9 @@ export const extensionsPlugin: BackstagePlugin< >; catalogTabRouteRef: SubRouteRef; installedTabRouteRef: SubRouteRef; + installedPackageRouteRef: SubRouteRef< + PathParams<'/installed-packages/:namespace/:name'> + >; }, {}, {} @@ -88,6 +91,9 @@ export const marketplacePlugin: BackstagePlugin< >; catalogTabRouteRef: SubRouteRef; installedTabRouteRef: SubRouteRef; + installedPackageRouteRef: SubRouteRef< + PathParams<'/installed-packages/:namespace/:name'> + >; }, {}, {} diff --git a/workspaces/extensions/plugins/extensions/src/components/InstalledPackages/RowActions.tsx b/workspaces/extensions/plugins/extensions/src/components/InstalledPackages/RowActions.tsx index c4f61a5ed7..10a11f5302 100644 --- a/workspaces/extensions/plugins/extensions/src/components/InstalledPackages/RowActions.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/InstalledPackages/RowActions.tsx @@ -30,7 +30,7 @@ import Box from '@mui/material/Box'; import { ExtensionsPackageInstallStatus } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { useTranslation } from '../../hooks/useTranslation'; -import { packageInstallRouteRef, packageRouteRef } from '../../routes'; +import { packageInstallRouteRef, installedPackageRouteRef } from '../../routes'; import { usePackageConfig } from '../../hooks/usePackageConfig'; import { usePackage } from '../../hooks/usePackage'; import { downloadPackageYAML } from '../../utils/downloadPackageYaml'; @@ -433,12 +433,13 @@ export const UninstallPackage = ({ pkg }: { pkg: InstalledPackageRow }) => { }; export const PackageName = ({ pkg }: { pkg: InstalledPackageRow }) => { - const packagePath = useRouteRef(packageRouteRef); + const packagePath = useRouteRef(installedPackageRouteRef); + const [searchParams] = useSearchParams(); if (!pkg.hasEntity) return <>{pkg.displayName}; - return ( - - {pkg.displayName} - - ); + + const path = packagePath({ namespace: pkg.namespace!, name: pkg.name! }); + const searchParamString = searchParams.size > 0 ? `?${searchParams}` : ''; + + return {pkg.displayName}; }; diff --git a/workspaces/extensions/plugins/extensions/src/routes.ts b/workspaces/extensions/plugins/extensions/src/routes.ts index 12fdfbacde..62ee5cf02c 100644 --- a/workspaces/extensions/plugins/extensions/src/routes.ts +++ b/workspaces/extensions/plugins/extensions/src/routes.ts @@ -80,6 +80,12 @@ export const installedTabRouteRef = createSubRouteRef({ parent: rootRouteRef, }); +export const installedPackageRouteRef = createSubRouteRef({ + id: 'extensions/installed-package', + path: '/installed-packages/:namespace/:name', + parent: rootRouteRef, +}); + export const allRoutes = { rootRouteRef, pluginsRouteRef, @@ -92,4 +98,5 @@ export const allRoutes = { collectionRouteRef, catalogTabRouteRef, installedTabRouteRef, + installedPackageRouteRef, }; From 9ba7ac5e1a3c0996ee70a200ec7452388db19952 Mon Sep 17 00:00:00 2001 From: its-mitesh-kumar Date: Mon, 4 May 2026 00:50:48 +0530 Subject: [PATCH 4/5] fixing author filter Signed-off-by: its-mitesh-kumar --- .../extensions/src/components/ExtensionsPluginContent.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginContent.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginContent.tsx index 1112d6cdf7..73938af231 100644 --- a/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginContent.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginContent.tsx @@ -586,7 +586,7 @@ export const ExtensionsPluginContent = ({ {index > 0 ? t('metadata.comma') : t('metadata.by')} e.stopPropagation()} > @@ -604,7 +604,7 @@ export const ExtensionsPluginContent = ({ {t('metadata.by')}{' '} e.stopPropagation()} > From f6f2c85b0005f75078e1f86ff095ef8d8a70545c Mon Sep 17 00:00:00 2001 From: its-mitesh-kumar Date: Mon, 4 May 2026 00:54:31 +0530 Subject: [PATCH 5/5] adding changeset Signed-off-by: its-mitesh-kumar --- .../extensions/.changeset/fix-pagination-drawer-state.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 workspaces/extensions/.changeset/fix-pagination-drawer-state.md diff --git a/workspaces/extensions/.changeset/fix-pagination-drawer-state.md b/workspaces/extensions/.changeset/fix-pagination-drawer-state.md new file mode 100644 index 0000000000..af804508b5 --- /dev/null +++ b/workspaces/extensions/.changeset/fix-pagination-drawer-state.md @@ -0,0 +1,5 @@ +--- +'@red-hat-developer-hub/backstage-plugin-extensions': patch +--- + +Fix pagination state reset when searching in the Installed Packages table, add localization support for pagination labels, fix table state being lost when opening package drawer, and fix author filter appearing cleared when clicking author link in plugin drawer.