From 9fd0fcc175c8b677db7fae9b2e8b7cd06c90e7db Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 14 Jul 2025 17:28:17 -0400 Subject: [PATCH] Remove plugin catalog code --- src/apps/dashboard/constants/helpLinks.ts | 5 +- .../plugins/components/PackageCard.tsx | 28 ------ .../plugins/utils/getPackageCategories.ts | 17 ---- .../plugins/utils/getPackagesByCategory.ts | 17 ---- src/apps/dashboard/routes/plugins/catalog.tsx | 98 ------------------- src/strings/en-us.json | 1 - 6 files changed, 1 insertion(+), 165 deletions(-) delete mode 100644 src/apps/dashboard/features/plugins/components/PackageCard.tsx delete mode 100644 src/apps/dashboard/features/plugins/utils/getPackageCategories.ts delete mode 100644 src/apps/dashboard/features/plugins/utils/getPackagesByCategory.ts delete mode 100644 src/apps/dashboard/routes/plugins/catalog.tsx diff --git a/src/apps/dashboard/constants/helpLinks.ts b/src/apps/dashboard/constants/helpLinks.ts index 69d55e0bd..6cce009cc 100644 --- a/src/apps/dashboard/constants/helpLinks.ts +++ b/src/apps/dashboard/constants/helpLinks.ts @@ -22,10 +22,7 @@ export const HelpLinks = [ paths: ['/dashboard/playback/transcoding'], url: 'https://jellyfin.org/docs/general/server/transcoding' }, { - paths: [ - '/dashboard/plugins', - '/dashboard/plugins/catalog' - ], + paths: ['/dashboard/plugins'], url: 'https://jellyfin.org/docs/general/server/plugins/' }, { paths: ['/dashboard/plugins/repositories'], diff --git a/src/apps/dashboard/features/plugins/components/PackageCard.tsx b/src/apps/dashboard/features/plugins/components/PackageCard.tsx deleted file mode 100644 index 0145a2eac..000000000 --- a/src/apps/dashboard/features/plugins/components/PackageCard.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react'; -import type { PackageInfo } from '@jellyfin/sdk/lib/generated-client/models/package-info'; -import ExtensionIcon from '@mui/icons-material/Extension'; -import BaseCard from 'apps/dashboard/components/BaseCard'; -import { useLocation } from 'react-router-dom'; - -type IProps = { - pkg: PackageInfo; -}; - -const PackageCard = ({ pkg }: IProps) => { - const location = useLocation(); - - return ( - } - to={{ - pathname: `/dashboard/plugins/${pkg.guid}`, - search: `?name=${encodeURIComponent(pkg.name || '')}`, - hash: location.hash - }} - /> - ); -}; - -export default PackageCard; diff --git a/src/apps/dashboard/features/plugins/utils/getPackageCategories.ts b/src/apps/dashboard/features/plugins/utils/getPackageCategories.ts deleted file mode 100644 index 74a9932be..000000000 --- a/src/apps/dashboard/features/plugins/utils/getPackageCategories.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { PackageInfo } from '@jellyfin/sdk/lib/generated-client/models/package-info'; - -const getPackageCategories = (packages?: PackageInfo[]) => { - if (!packages) return []; - - const categories: string[] = []; - - for (const pkg of packages) { - if (pkg.category && !categories.includes(pkg.category)) { - categories.push(pkg.category); - } - } - - return categories.sort((a, b) => a.localeCompare(b)); -}; - -export default getPackageCategories; diff --git a/src/apps/dashboard/features/plugins/utils/getPackagesByCategory.ts b/src/apps/dashboard/features/plugins/utils/getPackagesByCategory.ts deleted file mode 100644 index fcaa21ad4..000000000 --- a/src/apps/dashboard/features/plugins/utils/getPackagesByCategory.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { PackageInfo } from '@jellyfin/sdk/lib/generated-client/models/package-info'; - -const getPackagesByCategory = (packages: PackageInfo[] | undefined, category: string) => { - if (!packages) return []; - - return packages - .filter(pkg => pkg.category === category) - .sort((a, b) => { - if (a.name && b.name) { - return a.name.localeCompare(b.name); - } else { - return 0; - } - }); -}; - -export default getPackagesByCategory; diff --git a/src/apps/dashboard/routes/plugins/catalog.tsx b/src/apps/dashboard/routes/plugins/catalog.tsx deleted file mode 100644 index cd98de672..000000000 --- a/src/apps/dashboard/routes/plugins/catalog.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import Settings from '@mui/icons-material/Settings'; -import Box from '@mui/material/Box'; -import Grid from '@mui/material/Grid2'; -import IconButton from '@mui/material/IconButton'; -import Stack from '@mui/material/Stack'; -import TextField from '@mui/material/TextField'; -import Typography from '@mui/material/Typography'; -import React, { useCallback, useMemo, useState } from 'react'; -import { Link } from 'react-router-dom'; - -import { usePackages } from 'apps/dashboard/features/plugins/api/usePackages'; -import PackageCard from 'apps/dashboard/features/plugins/components/PackageCard'; -import { PluginCategory } from 'apps/dashboard/features/plugins/constants/pluginCategory'; -import { CATEGORY_LABELS } from 'apps/dashboard/features/plugins/constants/categoryLabels'; -import getPackageCategories from 'apps/dashboard/features/plugins/utils/getPackageCategories'; -import getPackagesByCategory from 'apps/dashboard/features/plugins/utils/getPackagesByCategory'; -import Loading from 'components/loading/LoadingComponent'; -import Page from 'components/Page'; -import globalize from 'lib/globalize'; - -export const Component = () => { - const { data: packages, isPending: isPackagesPending } = usePackages(); - const [ searchQuery, setSearchQuery ] = useState(''); - - const filteredPackages = useMemo(() => { - return packages?.filter(i => i.name?.toLocaleLowerCase().includes(searchQuery.toLocaleLowerCase())); - }, [ packages, searchQuery ]); - - const packageCategories = getPackageCategories(filteredPackages); - - const updateSearchQuery = useCallback((e: React.ChangeEvent) => { - setSearchQuery(e.target.value); - }, []); - - const getCategoryLabel = (category: string) => { - const categoryKey = category.replace(/\s/g, '') as PluginCategory; - - if (CATEGORY_LABELS[categoryKey]) { - return globalize.translate(CATEGORY_LABELS[categoryKey]); - } - - console.warn('[AvailablePlugins] unmapped category label', category); - return category; - }; - - if (isPackagesPending) { - return ; - } - - return ( - - - - - {globalize.translate('TabCatalog')} - - - - - - - - {packageCategories.map(category => ( - - {getCategoryLabel(category)} - - - {getPackagesByCategory(filteredPackages, category).map(pkg => ( - - - - ))} - - - ))} - - - - ); -}; - -Component.displayName = 'PluginsCatalogPage'; diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 71acbbdd2..bf999b735 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1605,7 +1605,6 @@ "TabAccess": "Access", "TabAdvanced": "Advanced", "HeaderBackups": "Backups", - "TabCatalog": "Catalog", "TabDashboard": "Dashboard", "TabLatest": "Recently Added", "TabLogs": "Logs",