mirror of
https://github.com/fallenbagel/jellyseerr.git
synced 2026-01-11 09:06:55 -05:00
98 lines
2.9 KiB
TypeScript
98 lines
2.9 KiB
TypeScript
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 (
|
|
<>
|
|
<PageTitle title={intl.formatMessage(globalMessages.settings)} />
|
|
<div className="mt-6">
|
|
<SettingsTabs settingsRoutes={settingsRoutes} />
|
|
</div>
|
|
<div className="mt-10 text-white">{children}</div>
|
|
</>
|
|
);
|
|
function getAvailableMediaServerName() {
|
|
return intl.formatMessage(messages.menuJellyfinSettings, {
|
|
mediaServerName:
|
|
publicRuntimeConfig.JELLYFIN_TYPE === 'emby' ? 'Emby' : 'Jellyfin',
|
|
});
|
|
}
|
|
};
|
|
|
|
export default SettingsLayout;
|