import { SaveIcon } from '@heroicons/react/outline'; import axios from 'axios'; import { Field, Form, Formik } from 'formik'; import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useToasts } from 'react-toast-notifications'; import useSWR, { mutate } from 'swr'; import type { MainSettings } from '../../../../server/lib/settings'; import globalMessages from '../../../i18n/globalMessages'; import Button from '../../Common/Button'; import LoadingSpinner from '../../Common/LoadingSpinner'; import PageTitle from '../../Common/PageTitle'; import PermissionEdit from '../../PermissionEdit'; import QuotaSelector from '../../QuotaSelector'; const messages = defineMessages({ users: 'Users', userSettings: 'User Settings', userSettingsDescription: 'Configure global and default user settings.', toastSettingsSuccess: 'User settings saved successfully!', toastSettingsFailure: 'Something went wrong while saving settings.', localLogin: 'Enable Local Sign-In', localLoginTip: 'Allow users to sign in using their email address and password, instead of Plex OAuth', newPlexLogin: 'Enable New Plex Sign-In', newPlexLoginTip: 'Allow Plex users to sign in without first being imported', movieRequestLimitLabel: 'Global Movie Request Limit', tvRequestLimitLabel: 'Global Series Request Limit', defaultPermissions: 'Default Permissions', defaultPermissionsTip: 'Initial permissions assigned to new users', }); const SettingsUsers: React.FC = () => { const { addToast } = useToasts(); const intl = useIntl(); const { data, error, mutate: revalidate, } = useSWR('/api/v1/settings/main'); if (!data && !error) { return ; } return ( <>

{intl.formatMessage(messages.userSettings)}

{intl.formatMessage(messages.userSettingsDescription)}

{ try { await axios.post('/api/v1/settings/main', { localLogin: values.localLogin, newPlexLogin: values.newPlexLogin, defaultQuotas: { movie: { quotaLimit: values.movieQuotaLimit, quotaDays: values.movieQuotaDays, }, tv: { quotaLimit: values.tvQuotaLimit, quotaDays: values.tvQuotaDays, }, }, defaultPermissions: values.defaultPermissions, }); mutate('/api/v1/settings/public'); addToast(intl.formatMessage(messages.toastSettingsSuccess), { autoDismiss: true, appearance: 'success', }); } catch (e) { addToast(intl.formatMessage(messages.toastSettingsFailure), { autoDismiss: true, appearance: 'error', }); } finally { revalidate(); } }} > {({ isSubmitting, values, setFieldValue }) => { return (
{ setFieldValue('localLogin', !values.localLogin); }} />
{ setFieldValue('newPlexLogin', !values.newPlexLogin); }} />
{intl.formatMessage(messages.defaultPermissions)} {intl.formatMessage(messages.defaultPermissionsTip)}
setFieldValue('defaultPermissions', newPermissions) } />
); }}
); }; export default SettingsUsers;