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"
/>
>
);
}