feat(frontend): add french language file

also expanded translation coverage (still lots to do!)
This commit is contained in:
sct
2020-11-27 05:11:45 +00:00
parent 2aefcfdfb9
commit cd6d8a8216
18 changed files with 749 additions and 111 deletions

View File

@@ -1,11 +1,46 @@
import React, { useState, useEffect, useCallback, useRef } from 'react';
import Transition from '../Transition';
import Modal from '../Common/Modal';
import Transition from '../../Transition';
import Modal from '../../Common/Modal';
import { Formik, Field } from 'formik';
import type { RadarrSettings } from '../../../server/lib/settings';
import type { RadarrSettings } from '../../../../server/lib/settings';
import * as Yup from 'yup';
import axios from 'axios';
import { useToasts } from 'react-toast-notifications';
import { defineMessages, useIntl } from 'react-intl';
const messages = defineMessages({
createradarr: 'Create New Radarr Server',
editradarr: 'Edit Radarr Server',
validationHostnameRequired: 'You must provide a hostname/IP',
validationPortRequired: 'You must provide a port',
validationApiKeyRequired: 'You must provide an API key',
validationRootFolderRequired: 'You must select a root folder',
validationProfileRequired: 'You must select a profile',
toastRadarrTestSuccess: 'Radarr connection established!',
toastRadarrTestFailure: 'Failed to connect to Radarr Server',
saving: 'Saving...',
save: 'Save Changes',
add: 'Add Server',
test: 'Test',
testing: 'Testing...',
defaultserver: 'Default Server',
servername: 'Server Name',
servernamePlaceholder: 'A Radarr Server',
hostname: 'Hostname',
port: 'Port',
ssl: 'SSL',
apiKey: 'API Key',
apiKeyPlaceholder: 'Your Radarr API Key',
baseUrl: 'Base URL',
baseUrlPlaceholder: 'Example: /radarr',
qualityprofile: 'Quality Profile',
rootfolder: 'Root Folder',
minimumAvailability: 'Minimum Availability',
server4k: '4K Server',
selectQualityProfile: 'Select a Quality Profile',
selectRootFolder: 'Select a Root Folder',
selectMinimumAvailability: 'Select minimum availability',
});
interface TestResponse {
profiles: {
@@ -29,6 +64,7 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
radarr,
onSave,
}) => {
const intl = useIntl();
const initialLoad = useRef(false);
const { addToast } = useToasts();
const [isValidated, setIsValidated] = useState(radarr ? true : false);
@@ -38,11 +74,17 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
rootFolders: [],
});
const RadarrSettingsSchema = Yup.object().shape({
hostname: Yup.string().required('You must provide a hostname/IP'),
port: Yup.number().required('You must provide a port'),
apiKey: Yup.string().required('You must provide an API Key'),
rootFolder: Yup.string().required('You must select a root folder'),
activeProfileId: Yup.string().required('You must select a profile'),
hostname: Yup.string().required(
intl.formatMessage(messages.validationHostnameRequired)
),
port: Yup.number().required(
intl.formatMessage(messages.validationPortRequired)
),
apiKey: Yup.string().required(intl.formatMessage(messages.apiKey)),
rootFolder: Yup.string().required(intl.formatMessage(messages.rootfolder)),
activeProfileId: Yup.string().required(
intl.formatMessage(messages.validationProfileRequired)
),
});
const testConnection = useCallback(
@@ -75,7 +117,7 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
setIsValidated(true);
setTestResponse(response.data);
if (initialLoad.current) {
addToast('Radarr connection established!', {
addToast(intl.formatMessage(messages.toastRadarrTestSuccess), {
appearance: 'success',
autoDismiss: true,
});
@@ -83,7 +125,7 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
} catch (e) {
setIsValidated(false);
if (initialLoad.current) {
addToast('Failed to connect to Radarr server', {
addToast(intl.formatMessage(messages.toastRadarrTestFailure), {
appearance: 'error',
autoDismiss: true,
});
@@ -183,13 +225,17 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
okButtonType="primary"
okText={
isSubmitting
? 'Saving...'
? intl.formatMessage(messages.saving)
: !!radarr
? 'Save Changes'
: 'Add Server'
? intl.formatMessage(messages.save)
: intl.formatMessage(messages.add)
}
secondaryButtonType="warning"
secondaryText={isTesting ? 'Testing...' : 'Test'}
secondaryText={
isTesting
? intl.formatMessage(messages.testing)
: intl.formatMessage(messages.test)
}
onSecondary={() => {
if (values.apiKey && values.hostname && values.port) {
testConnection({
@@ -207,7 +253,9 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
okDisabled={!isValidated || isSubmitting || isTesting}
onOk={() => handleSubmit()}
title={
!radarr ? 'Create New Radarr Server' : 'Edit Radarr Server'
!radarr
? intl.formatMessage(messages.createradarr)
: intl.formatMessage(messages.editradarr)
}
>
<div className="mb-6">
@@ -216,7 +264,7 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
htmlFor="isDefault"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Default Server
{intl.formatMessage(messages.defaultserver)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<Field
@@ -232,7 +280,7 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
htmlFor="name"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Server Name
{intl.formatMessage(messages.servername)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<div className="max-w-lg flex rounded-md shadow-sm">
@@ -240,7 +288,9 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
id="name"
name="name"
type="text"
placeholder="A Radarr Server"
placeholder={intl.formatMessage(
messages.servernamePlaceholder
)}
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setIsValidated(false);
setFieldValue('name', e.target.value);
@@ -258,7 +308,7 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
htmlFor="hostname"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Hostname
{intl.formatMessage(messages.hostname)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<div className="max-w-lg flex rounded-md shadow-sm">
@@ -284,7 +334,7 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
htmlFor="port"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Port
{intl.formatMessage(messages.port)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<Field
@@ -308,7 +358,7 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
htmlFor="ssl"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
SSL
{intl.formatMessage(messages.ssl)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<Field
@@ -328,7 +378,7 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
htmlFor="apiKey"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
API Key
{intl.formatMessage(messages.apiKey)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<div className="max-w-lg flex rounded-md shadow-sm">
@@ -336,7 +386,9 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
id="apiKey"
name="apiKey"
type="text"
placeholder="Your Radarr API Key"
placeholder={intl.formatMessage(
messages.apiKeyPlaceholder
)}
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setIsValidated(false);
setFieldValue('apiKey', e.target.value);
@@ -354,7 +406,7 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
htmlFor="baseUrl"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Base URL
{intl.formatMessage(messages.baseUrl)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<div className="max-w-lg flex rounded-md shadow-sm">
@@ -362,7 +414,9 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
id="baseUrl"
name="baseUrl"
type="text"
placeholder="Example: /radarr"
placeholder={intl.formatMessage(
messages.baseUrlPlaceholder
)}
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setIsValidated(false);
setFieldValue('baseUrl', e.target.value);
@@ -380,7 +434,7 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
htmlFor="activeProfileId"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Quality Profile
{intl.formatMessage(messages.qualityprofile)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<div className="max-w-lg flex rounded-md shadow-sm">
@@ -390,6 +444,9 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
name="activeProfileId"
className="mt-1 form-select rounded-md block w-full pl-3 pr-10 py-2 text-base leading-6 bg-gray-700 border-gray-500 focus:outline-none focus:ring-blue focus:border-gray-500 sm:text-sm sm:leading-5"
>
<option value="">
{intl.formatMessage(messages.selectQualityProfile)}
</option>
{testResponse.profiles.length > 0 &&
testResponse.profiles.map((profile) => (
<option
@@ -413,7 +470,7 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
htmlFor="rootFolder"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Root Folder
{intl.formatMessage(messages.rootfolder)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<div className="max-w-lg flex rounded-md shadow-sm">
@@ -423,6 +480,9 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
name="rootFolder"
className="mt-1 form-select rounded-md block w-full pl-3 pr-10 py-2 text-base leading-6 bg-gray-700 border-gray-500 focus:outline-none focus:ring-blue focus:border-gray-500 sm:text-sm sm:leading-5"
>
<option value="">
{intl.formatMessage(messages.selectRootFolder)}
</option>
{testResponse.rootFolders.length > 0 &&
testResponse.rootFolders.map((folder) => (
<option
@@ -446,7 +506,7 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
htmlFor="minimumAvailability"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Minimum Availability
{intl.formatMessage(messages.minimumAvailability)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<div className="max-w-lg flex rounded-md shadow-sm">
@@ -456,6 +516,11 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
name="minimumAvailability"
className="mt-1 form-select rounded-md block w-full pl-3 pr-10 py-2 text-base leading-6 bg-gray-700 border-gray-500 focus:outline-none focus:ring-blue focus:border-gray-500 sm:text-sm sm:leading-5"
>
<option value="">
{intl.formatMessage(
messages.selectMinimumAvailability
)}
</option>
<option value="announced">Announced</option>
<option value="inCinemas">In Cinemas</option>
<option value="released">Released</option>
@@ -469,7 +534,7 @@ const RadarrModal: React.FC<RadarrModalProps> = ({
htmlFor="is4k"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Ultra HD Server
{intl.formatMessage(messages.server4k)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<Field

View File

@@ -14,6 +14,25 @@ import Transition from '../Transition';
import axios from 'axios';
import SonarrModal from './SonarrModal';
const messages = defineMessages({
radarrsettings: 'Radarr Settings',
radarrSettingsDescription:
'Configure your Radarr connection below. You can have multiple Radarr configurations but only two can be active as defaults at any time (one for standard HD and one for 4K). Administrations can override a titles connection to use in the manage title screen.',
sonarrsettings: 'Sonarr Settings',
sonarrSettingsDescription:
'Configure your Sonarr connection below. You can have multiple Sonarr configurations but only two can be active as defaults at any time (one for standard HD and one for 4K). Administrations can override a titles connection to use in the manage title screen.',
deleteserverconfirm: 'Are you sure you want to delete this server?',
edit: 'Edit',
delete: 'Delete',
ssl: 'SSL',
default: 'Default',
default4k: 'Default 4K',
address: 'Address',
activeProfile: 'Active Profile',
addradarr: 'Add Radarr Server',
addsonarr: 'Add Sonarr Server',
});
interface ServerInstanceProps {
name: string;
isDefault?: boolean;
@@ -45,16 +64,33 @@ const ServerInstance: React.FC<ServerInstanceProps> = ({
<h3 className="text-white text-sm leading-5 font-medium truncate">
{name}
</h3>
{isDefault && <Badge>Default</Badge>}
{isDefault4K && <Badge badgeType="warning">Default 4K</Badge>}
{isSSL && <Badge badgeType="success">SSL</Badge>}
{isDefault && (
<Badge>
<FormattedMessage {...messages.default} />
</Badge>
)}
{isDefault4K && (
<Badge badgeType="warning">
<FormattedMessage {...messages.default4k} />
</Badge>
)}
{isSSL && (
<Badge badgeType="success">
<FormattedMessage {...messages.ssl} />
</Badge>
)}
</div>
<p className="mt-1 text-gray-300 text-sm leading-5 truncate">
<span className="font-bold mr-2">Address</span>
<span className="font-bold mr-2">
<FormattedMessage {...messages.address} />
</span>
{address}
</p>
<p className="mt-1 text-gray-300 text-sm leading-5 truncate">
<span className="font-bold mr-2">Active Profile</span> {profileName}
<span className="font-bold mr-2">
<FormattedMessage {...messages.activeProfile} />
</span>{' '}
{profileName}
</p>
</div>
<img
@@ -78,7 +114,9 @@ const ServerInstance: React.FC<ServerInstanceProps> = ({
>
<path d="M13.586 3.586a2 2 0 112.828 2.828l-.793.793-2.828-2.828.793-.793zM11.379 5.793L3 14.172V17h2.828l8.38-8.379-2.83-2.828z" />
</svg>
<span className="ml-3">Edit</span>
<span className="ml-3">
<FormattedMessage {...messages.edit} />
</span>
</button>
</div>
<div className="-ml-px w-0 flex-1 flex">
@@ -98,7 +136,9 @@ const ServerInstance: React.FC<ServerInstanceProps> = ({
clipRule="evenodd"
/>
</svg>
<span className="ml-3">Delete</span>
<span className="ml-3">
<FormattedMessage {...messages.delete} />
</span>
</button>
</div>
</div>
@@ -155,13 +195,10 @@ const SettingsServices: React.FC = () => {
<>
<div>
<h3 className="text-lg leading-6 font-medium text-gray-200">
Radarr Settings
<FormattedMessage {...messages.radarrsettings} />
</h3>
<p className="mt-1 max-w-2xl text-sm leading-5 text-gray-500">
Configure your Radarr connection below. You can have multiple Radarr
configurations but only two can be active as defaults at any time (one
for standard HD and one for 4K). Administrations can override a titles
connection to use in the manage title screen.
<FormattedMessage {...messages.radarrSettingsDescription} />
</p>
</div>
{editRadarrModal.open && (
@@ -206,7 +243,7 @@ const SettingsServices: React.FC = () => {
}
title="Delete Server"
>
Are you sure you want to delete this server?
<FormattedMessage {...messages.deleteserverconfirm} />
</Modal>
</Transition>
<div className="mt-6 sm:mt-5">
@@ -252,7 +289,7 @@ const SettingsServices: React.FC = () => {
clipRule="evenodd"
/>
</svg>
Add Radarr Server
<FormattedMessage {...messages.addradarr} />
</Button>
</div>
</li>
@@ -261,13 +298,10 @@ const SettingsServices: React.FC = () => {
</div>
<div className="mt-10">
<h3 className="text-lg leading-6 font-medium text-gray-200">
Sonarr Settings
<FormattedMessage {...messages.sonarrsettings} />
</h3>
<p className="mt-1 max-w-2xl text-sm leading-5 text-gray-500">
Configure your Sonarr connection below. You can have multiple Sonarr
configurations but only two can be active as defaults at any time (one
for standard HD and one for 4K). Administrations can override a titles
connection to use in the manage title screen.
<FormattedMessage {...messages.sonarrSettingsDescription} />
</p>
</div>
<div className="mt-6 sm:mt-5">
@@ -314,7 +348,7 @@ const SettingsServices: React.FC = () => {
clipRule="evenodd"
/>
</svg>
Add Sonarr Server
<FormattedMessage {...messages.addsonarr} />
</Button>
</div>
</li>

View File

@@ -1,11 +1,45 @@
import React, { useState, useEffect, useCallback, useRef } from 'react';
import Transition from '../Transition';
import Modal from '../Common/Modal';
import Transition from '../../Transition';
import Modal from '../../Common/Modal';
import { Formik, Field } from 'formik';
import type { SonarrSettings } from '../../../server/lib/settings';
import type { SonarrSettings } from '../../../../server/lib/settings';
import * as Yup from 'yup';
import axios from 'axios';
import { useToasts } from 'react-toast-notifications';
import { useIntl, defineMessages } from 'react-intl';
const messages = defineMessages({
createsonarr: 'Create New Sonarr Server',
editsonarr: 'Edit Sonarr Server',
validationHostnameRequired: 'You must provide a hostname/IP',
validationPortRequired: 'You must provide a port',
validationApiKeyRequired: 'You must provide an API key',
validationRootFolderRequired: 'You must select a root folder',
validationProfileRequired: 'You must select a profile',
toastRadarrTestSuccess: 'Sonarr connection established!',
toastRadarrTestFailure: 'Failed to connect to Sonarr Server',
saving: 'Saving...',
save: 'Save Changes',
add: 'Add Server',
test: 'Test',
testing: 'Testing...',
defaultserver: 'Default Server',
servername: 'Server Name',
servernamePlaceholder: 'A Sonarr Server',
hostname: 'Hostname',
port: 'Port',
ssl: 'SSL',
apiKey: 'API Key',
apiKeyPlaceholder: 'Your Sonarr API Key',
baseUrl: 'Base URL',
baseUrlPlaceholder: 'Example: /sonarr',
qualityprofile: 'Quality Profile',
rootfolder: 'Root Folder',
seasonfolders: 'Season Folders',
server4k: '4K Server',
selectQualityProfile: 'Select a Quality Profile',
selectRootFolder: 'Select a Root Folder',
});
interface TestResponse {
profiles: {
@@ -29,6 +63,7 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
sonarr,
onSave,
}) => {
const intl = useIntl();
const initialLoad = useRef(false);
const { addToast } = useToasts();
const [isValidated, setIsValidated] = useState(sonarr ? true : false);
@@ -38,11 +73,21 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
rootFolders: [],
});
const SonarrSettingsSchema = Yup.object().shape({
hostname: Yup.string().required('You must provide a hostname/IP'),
port: Yup.number().required('You must provide a port'),
apiKey: Yup.string().required('You must provide an API Key'),
rootFolder: Yup.string().required('You must select a root folder'),
activeProfileId: Yup.string().required('You must select a profile'),
hostname: Yup.string().required(
intl.formatMessage(messages.validationHostnameRequired)
),
port: Yup.number().required(
intl.formatMessage(messages.validationPortRequired)
),
apiKey: Yup.string().required(
intl.formatMessage(messages.validationApiKeyRequired)
),
rootFolder: Yup.string().required(
intl.formatMessage(messages.validationRootFolderRequired)
),
activeProfileId: Yup.string().required(
intl.formatMessage(messages.validationProfileRequired)
),
});
const testConnection = useCallback(
@@ -183,13 +228,17 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
okButtonType="primary"
okText={
isSubmitting
? 'Saving...'
? intl.formatMessage(messages.saving)
: !!sonarr
? 'Save Changes'
: 'Add Server'
? intl.formatMessage(messages.save)
: intl.formatMessage(messages.add)
}
secondaryButtonType="warning"
secondaryText={isTesting ? 'Testing...' : 'Test'}
secondaryText={
isTesting
? intl.formatMessage(messages.testing)
: intl.formatMessage(messages.test)
}
onSecondary={() => {
if (values.apiKey && values.hostname && values.port) {
testConnection({
@@ -207,7 +256,9 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
okDisabled={!isValidated || isSubmitting || isTesting}
onOk={() => handleSubmit()}
title={
!sonarr ? 'Create New Sonarr Server' : 'Edit Sonarr Server'
!sonarr
? intl.formatMessage(messages.createsonarr)
: intl.formatMessage(messages.editsonarr)
}
>
<div className="mb-6">
@@ -216,7 +267,7 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
htmlFor="isDefault"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Default Server
{intl.formatMessage(messages.defaultserver)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<Field
@@ -232,7 +283,7 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
htmlFor="name"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Server Name
{intl.formatMessage(messages.servername)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<div className="max-w-lg flex rounded-md shadow-sm">
@@ -240,7 +291,9 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
id="name"
name="name"
type="text"
placeholder="A Sonarr Server"
placeholder={intl.formatMessage(
messages.servernamePlaceholder
)}
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setIsValidated(false);
setFieldValue('name', e.target.value);
@@ -258,7 +311,7 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
htmlFor="hostname"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Hostname
{intl.formatMessage(messages.hostname)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<div className="max-w-lg flex rounded-md shadow-sm">
@@ -284,7 +337,7 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
htmlFor="port"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Port
{intl.formatMessage(messages.port)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<Field
@@ -308,7 +361,7 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
htmlFor="ssl"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
SSL
{intl.formatMessage(messages.ssl)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<Field
@@ -328,7 +381,7 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
htmlFor="apiKey"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
API Key
{intl.formatMessage(messages.apiKey)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<div className="max-w-lg flex rounded-md shadow-sm">
@@ -336,7 +389,9 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
id="apiKey"
name="apiKey"
type="text"
placeholder="Your Sonarr API Key"
placeholder={intl.formatMessage(
messages.apiKeyPlaceholder
)}
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setIsValidated(false);
setFieldValue('apiKey', e.target.value);
@@ -354,7 +409,7 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
htmlFor="baseUrl"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Base URL
{intl.formatMessage(messages.baseUrl)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<div className="max-w-lg flex rounded-md shadow-sm">
@@ -362,7 +417,9 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
id="baseUrl"
name="baseUrl"
type="text"
placeholder="Example: /sonarr"
placeholder={intl.formatMessage(
messages.baseUrlPlaceholder
)}
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setIsValidated(false);
setFieldValue('baseUrl', e.target.value);
@@ -380,7 +437,7 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
htmlFor="activeProfileId"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Quality Profile
{intl.formatMessage(messages.qualityprofile)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<div className="max-w-lg flex rounded-md shadow-sm">
@@ -390,7 +447,9 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
name="activeProfileId"
className="mt-1 form-select rounded-md block w-full pl-3 pr-10 py-2 text-base leading-6 bg-gray-700 border-gray-500 focus:outline-none focus:ring-blue focus:border-gray-500 sm:text-sm sm:leading-5"
>
<option value="">Select a Quality Profile</option>
<option value="">
{intl.formatMessage(messages.selectQualityProfile)}
</option>
{testResponse.profiles.length > 0 &&
testResponse.profiles.map((profile) => (
<option
@@ -414,7 +473,7 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
htmlFor="rootFolder"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Root Folder
{intl.formatMessage(messages.rootfolder)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<div className="max-w-lg flex rounded-md shadow-sm">
@@ -424,7 +483,9 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
name="rootFolder"
className="mt-1 form-select block rounded-md w-full pl-3 pr-10 py-2 text-base leading-6 bg-gray-700 border-gray-500 focus:outline-none focus:ring-blue focus:border-gray-500 sm:text-sm sm:leading-5"
>
<option value="">Select a Root Folder</option>
<option value="">
{intl.formatMessage(messages.selectRootFolder)}
</option>
{testResponse.rootFolders.length > 0 &&
testResponse.rootFolders.map((folder) => (
<option
@@ -448,7 +509,7 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
htmlFor="is4k"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Ultra HD Server
{intl.formatMessage(messages.server4k)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<Field
@@ -464,7 +525,7 @@ const SonarrModal: React.FC<SonarrModalProps> = ({
htmlFor="enableSeasonFolders"
className="block text-sm font-medium leading-5 text-gray-400 sm:mt-px sm:pt-2"
>
Season Folders
{intl.formatMessage(messages.seasonfolders)}
</label>
<div className="mt-1 sm:mt-0 sm:col-span-2">
<Field