import axios from 'axios'; import { Field, Form, Formik } from 'formik'; import { useRouter } from 'next/router'; import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useToasts } from 'react-toast-notifications'; import useSWR from 'swr'; import { Language } from '../../../../../server/lib/settings'; import { UserType, useUser } from '../../../../hooks/useUser'; import Error from '../../../../pages/_error'; import Badge from '../../../Common/Badge'; import Button from '../../../Common/Button'; import LoadingSpinner from '../../../Common/LoadingSpinner'; import RegionSelector from '../../../RegionSelector'; const messages = defineMessages({ generalsettings: 'General Settings', displayName: 'Display Name', save: 'Save Changes', saving: 'Saving…', plexuser: 'Plex User', localuser: 'Local User', toastSettingsSuccess: 'Settings successfully saved!', toastSettingsFailure: 'Something went wrong while saving settings.', region: 'Discover Region', regionTip: 'Filter content by region (only applies to the "Popular" and "Upcoming" categories)', originallanguage: 'Discover Language', originallanguageTip: 'Filter content by original language (only applies to the "Popular" and "Upcoming" categories)', originalLanguageDefault: 'All Languages', }); const UserGeneralSettings: React.FC = () => { const intl = useIntl(); const { addToast } = useToasts(); const router = useRouter(); const { user, mutate } = useUser({ id: Number(router.query.userId) }); const { data, error, revalidate } = useSWR<{ username?: string; region?: string; originalLanguage?: string; }>(user ? `/api/v1/user/${user?.id}/settings/main` : null); const { data: languages, error: languagesError } = useSWR( '/api/v1/languages' ); if (!data && !error) { return ; } if (!languages && !languagesError) { return ; } if (!data || !languages) { return ; } return ( <>

{intl.formatMessage(messages.generalsettings)}

{ try { await axios.post(`/api/v1/user/${user?.id}/settings/main`, { username: values.displayName, region: values.region, originalLanguage: values.originalLanguage, }); addToast(intl.formatMessage(messages.toastSettingsSuccess), { autoDismiss: true, appearance: 'success', }); } catch (e) { addToast(intl.formatMessage(messages.toastSettingsFailure), { autoDismiss: true, appearance: 'error', }); } finally { revalidate(); mutate(); } }} > {({ errors, touched, isSubmitting, values, setFieldValue }) => { return (
Account Type
{user?.userType === UserType.PLEX ? ( {intl.formatMessage(messages.plexuser)} ) : ( {intl.formatMessage(messages.localuser)} )}
{errors.displayName && touched.displayName && (
{errors.displayName}
)}
{languages?.map((language) => ( ))}
); }}
); }; export default UserGeneralSettings;