1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Fix configuration page link

This commit is contained in:
Bill Thornton 2024-07-12 13:37:50 -04:00
parent e928a2ff95
commit c143082f63
3 changed files with 27 additions and 5 deletions

View file

@ -0,0 +1,21 @@
import type { ConfigurationPageInfo } from '@jellyfin/sdk/lib/generated-client/models/configuration-page-info';
export const findBestConfigurationPage = (
configurationPages: ConfigurationPageInfo[],
pluginId: string
) => {
// Find candidates matching the plugin id
const candidates = configurationPages.filter(c => c.PluginId === pluginId);
// If none are found, return undefined
if (candidates.length === 0) return;
// If only one is found, return it
if (candidates.length === 1) return candidates[0];
// Prefer the first candidate with the EnableInMainMenu flag for consistency
const menuCandidate = candidates.find(c => !!c.EnableInMainMenu);
if (menuCandidate) return menuCandidate;
// Fallback to the first match
return candidates[0];
};

View file

@ -1,14 +1,14 @@
import type { PluginStatus, VersionInfo } from '@jellyfin/sdk/lib/generated-client'; import type { ConfigurationPageInfo, PluginStatus, VersionInfo } from '@jellyfin/sdk/lib/generated-client';
export interface PluginDetails { export interface PluginDetails {
canUninstall: boolean canUninstall: boolean
description?: string description?: string
hasConfiguration: boolean
id: string id: string
imageUrl?: string imageUrl?: string
isEnabled: boolean isEnabled: boolean
name?: string name?: string
owner?: string owner?: string
configurationPage?: ConfigurationPageInfo
status?: PluginStatus status?: PluginStatus
version?: VersionInfo version?: VersionInfo
versions: VersionInfo[] versions: VersionInfo[]

View file

@ -16,6 +16,7 @@ import Settings from '@mui/icons-material/Settings';
import React, { type FC, useEffect, useState, useCallback, useMemo } from 'react'; import React, { type FC, useEffect, useState, useCallback, useMemo } from 'react';
import { useSearchParams, Link as RouterLink, useParams } from 'react-router-dom'; import { useSearchParams, Link as RouterLink, useParams } from 'react-router-dom';
import { findBestConfigurationPage } from 'apps/dashboard/features/plugins/api/configurationPage';
import { findBestPluginInfo } from 'apps/dashboard/features/plugins/api/pluginInfo'; import { findBestPluginInfo } from 'apps/dashboard/features/plugins/api/pluginInfo';
import { useConfigurationPages } from 'apps/dashboard/features/plugins/api/useConfigurationPages'; import { useConfigurationPages } from 'apps/dashboard/features/plugins/api/useConfigurationPages';
import { useDisablePlugin } from 'apps/dashboard/features/plugins/api/useDisablePlugin'; import { useDisablePlugin } from 'apps/dashboard/features/plugins/api/useDisablePlugin';
@ -261,7 +262,6 @@ const PluginPage: FC = () => {
setPluginDetails({ setPluginDetails({
canUninstall: !!pluginInfo?.CanUninstall, canUninstall: !!pluginInfo?.CanUninstall,
description: pluginInfo?.Description || packageInfo?.description || packageInfo?.overview, description: pluginInfo?.Description || packageInfo?.description || packageInfo?.overview,
hasConfiguration: !!configurationPages?.some(page => page.PluginId === pluginId),
id: pluginId, id: pluginId,
imageUrl: imageUrl || packageInfo?.imageUrl || undefined, imageUrl: imageUrl || packageInfo?.imageUrl || undefined,
isEnabled: (isEnabledOverride && pluginInfo?.Status === PluginStatus.Restart) isEnabled: (isEnabledOverride && pluginInfo?.Status === PluginStatus.Restart)
@ -269,6 +269,7 @@ const PluginPage: FC = () => {
name: pluginName || pluginInfo?.Name || packageInfo?.name, name: pluginName || pluginInfo?.Name || packageInfo?.name,
owner: packageInfo?.owner, owner: packageInfo?.owner,
status: pluginInfo?.Status, status: pluginInfo?.Status,
configurationPage: findBestConfigurationPage(configurationPages || [], pluginId),
version, version,
versions: packageInfo?.versions || [] versions: packageInfo?.versions || []
}); });
@ -360,10 +361,10 @@ const PluginPage: FC = () => {
</FormGroup> </FormGroup>
)} )}
{!isLoading && pluginDetails?.hasConfiguration && ( {!isLoading && pluginDetails?.configurationPage?.Name && (
<Button <Button
component={RouterLink} component={RouterLink}
to={`/${getPluginUrl(pluginName)}`} to={`/${getPluginUrl(pluginDetails.configurationPage.Name)}`}
startIcon={<Settings />} startIcon={<Settings />}
> >
{globalize.translate('Settings')} {globalize.translate('Settings')}