import PageTitle from '@app/components/Common/PageTitle'; import type { SettingsRoute } from '@app/components/Common/SettingsTabs'; import SettingsTabs from '@app/components/Common/SettingsTabs'; import useSettings from '@app/hooks/useSettings'; import globalMessages from '@app/i18n/globalMessages'; import { MediaServerType } from '@server/constants/server'; import getConfig from 'next/config'; import type React from 'react'; import { defineMessages, useIntl } from 'react-intl'; const messages = defineMessages({ menuGeneralSettings: 'General', menuUsers: 'Users', menuPlexSettings: 'Plex', menuJellyfinSettings: '{mediaServerName}', menuServices: 'Services', menuNotifications: 'Notifications', menuLogs: 'Logs', menuJobs: 'Jobs & Cache', menuAbout: 'About', }); type SettingsLayoutProps = { children: React.ReactNode; }; const SettingsLayout = ({ children }: SettingsLayoutProps) => { const intl = useIntl(); const { publicRuntimeConfig } = getConfig(); const settings = useSettings(); const settingsRoutes: SettingsRoute[] = [ { text: intl.formatMessage(messages.menuGeneralSettings), route: '/settings/main', regex: /^\/settings(\/main)?$/, }, { text: intl.formatMessage(messages.menuUsers), route: '/settings/users', regex: /^\/settings\/users/, }, settings.currentSettings.mediaServerType === MediaServerType.PLEX ? { text: intl.formatMessage(messages.menuPlexSettings), route: '/settings/plex', regex: /^\/settings\/plex/, } : { text: getAvailableMediaServerName(), route: '/settings/jellyfin', regex: /^\/settings\/jellyfin/, }, { text: intl.formatMessage(messages.menuServices), route: '/settings/services', regex: /^\/settings\/services/, }, { text: intl.formatMessage(messages.menuNotifications), route: '/settings/notifications/email', regex: /^\/settings\/notifications/, }, { text: intl.formatMessage(messages.menuLogs), route: '/settings/logs', regex: /^\/settings\/logs/, }, { text: intl.formatMessage(messages.menuJobs), route: '/settings/jobs', regex: /^\/settings\/jobs/, }, { text: intl.formatMessage(messages.menuAbout), route: '/settings/about', regex: /^\/settings\/about/, }, ]; return ( <>
{children}
); function getAvailableMediaServerName() { return intl.formatMessage(messages.menuJellyfinSettings, { mediaServerName: publicRuntimeConfig.JELLYFIN_TYPE === 'emby' ? 'Emby' : 'Jellyfin', }); } }; export default SettingsLayout;