import {useFormContext} from 'react-hook-form'; import {SettingsPanel} from '../../settings-panel'; import {FormSelect, Option} from '../../../../ui/forms/select/select'; import {AdminSettings} from '../../admin-settings'; import {SettingsErrorGroup} from '../../settings-error-group'; import {FormTextField} from '@common/ui/forms/input-field/text-field/text-field'; import {FormSwitch} from '@common/ui/forms/toggle/switch'; import {FormRadioGroup} from '@common/ui/forms/radio-group/radio-group'; import {FormRadio} from '@common/ui/forms/radio-group/radio'; import {SectionHelper} from '@common/ui/section-helper'; import {useMaxServerUploadSize} from './max-server-upload-size'; import {SettingsSeparator} from '../../settings-separator'; import {JsonChipField} from '../../json-chip-field'; import {FormFileSizeField} from '@common/ui/forms/input-field/file-size-field'; import {Trans} from '@common/i18n/trans'; import {Fragment} from 'react'; import {useUploadS3Cors} from './use-upload-s3-cors'; import {Button} from '@common/ui/buttons/button'; import {DropboxForm} from './dropbox-form/dropbox-form'; import {useAdminSettings} from '../../requests/use-admin-settings'; import {useTrans} from '@common/i18n/use-trans'; import {message} from '@common/i18n/message'; export function UploadingSettings() { const {trans} = useTrans(); return ( } description={ } > {isInvalid => ( } description={ } > )} } placeholder="Infinity" description={ } /> } description={ } /> } description={ } /> } placeholder={trans(message('Add extension...'))} description={ } /> } placeholder={trans(message('Add extension...'))} description={ } /> ); } function MaxUploadSizeSection() { const {data} = useMaxServerUploadSize(); return ( {chunks}}} /> } /> ); } function PrivateUploadSection() { const {watch, clearErrors} = useFormContext(); const isEnabled = watch('server.uploads_disk_driver'); if (!isEnabled) return null; return ( } description={ } onSelectionChange={() => { clearErrors(); }} > ); } function PublicUploadSection() { const {watch, clearErrors} = useFormContext(); const isEnabled = watch('server.public_disk_driver'); if (!isEnabled) return null; return ( } selectionMode="single" name="server.public_disk_driver" description={ } onSelectionChange={() => { clearErrors(); }} > ); } function CredentialsSection() { const {watch} = useFormContext(); const drives = [ watch('server.uploads_disk_driver'), watch('server.public_disk_driver'), ]; if (drives[0] === 'local' && drives[1] === 'local') { return null; } return ( {isInvalid => { if (drives.includes('s3')) { return ; } if (drives.includes('ftp')) { return ; } if (drives.includes('dropbox')) { return ; } if (drives.includes('digitalocean_s3')) { return ; } if (drives.includes('backblaze_s3')) { return ; } }} ); } export interface CredentialFormProps { isInvalid: boolean; } function S3Form({isInvalid}: CredentialFormProps) { return ( } required /> } required /> } pattern="[a-z1-9\-]+" placeholder="us-east-1" /> } required /> } description={ } /> ); } function DigitalOceanForm({isInvalid}: CredentialFormProps) { return ( } required /> } required /> } pattern="[a-z0-9\-]+" placeholder="us-east-1" required /> } required /> ); } function BackblazeForm({isInvalid}: CredentialFormProps) { return ( } required /> } required /> } pattern="[a-z0-9\-]+" placeholder="us-west-002" required /> } required /> ); } interface S3DirectUploadFieldProps { invalid: boolean; } function S3DirectUploadField({invalid}: S3DirectUploadFieldProps) { const uploadCors = useUploadS3Cors(); const {data: defaultSettings} = useAdminSettings(); const s3DriverEnabled = defaultSettings?.server.uploads_disk_driver?.endsWith('s3') || defaultSettings?.server.public_disk_driver?.endsWith('s3'); return (

} >
); } function FtpForm({isInvalid}: CredentialFormProps) { return ( <> } required /> } required /> } type="password" required /> } placeholder="/" /> } type="number" min={0} placeholder="21" /> ); }