import { Response } from '@/lib/api/response'; import { Button, LoadingOverlay, NumberInput, Paper, Select, SimpleGrid, Switch, TextInput, Title, } from '@mantine/core'; import { useForm } from '@mantine/form'; import { IconDeviceFloppy } from '@tabler/icons-react'; import { useRouter } from 'next/router'; import { useEffect } from 'react'; import { settingsOnSubmit } from '../settingsOnSubmit'; import { bytes } from '@/lib/bytes'; import ms from 'ms'; export default function ServerSettingsFiles({ swr: { data, isLoading }, }: { swr: { data: Response['/api/server/settings'] | undefined; isLoading: boolean }; }) { const router = useRouter(); const form = useForm<{ filesRoute: string; filesLength: number; filesDefaultFormat: string; filesDisabledExtensions: string; filesMaxFileSize: string; filesDefaultExpiration: string | null; filesAssumeMimetypes: boolean; filesDefaultDateFormat: string; filesRemoveGpsMetadata: boolean; }>({ initialValues: { filesRoute: '/u', filesLength: 6, filesDefaultFormat: 'random', filesDisabledExtensions: '', filesMaxFileSize: '100mb', filesDefaultExpiration: '', filesAssumeMimetypes: false, filesDefaultDateFormat: 'YYYY-MM-DD_HH:mm:ss', filesRemoveGpsMetadata: false, }, }); const onSubmit = async (values: typeof form.values) => { if (values.filesDefaultExpiration?.trim() === '' || !values.filesDefaultExpiration) { values.filesDefaultExpiration = null; } else { values.filesDefaultExpiration = values.filesDefaultExpiration.trim(); } if (!values.filesDisabledExtensions) { // @ts-ignore values.filesDisabledExtensions = []; } else if ( values.filesDisabledExtensions && typeof values.filesDisabledExtensions === 'string' && values.filesDisabledExtensions.trim() === '' ) { // @ts-ignore values.filesDisabledExtensions = []; } else { if (!Array.isArray(values.filesDisabledExtensions)) // @ts-ignore values.filesDisabledExtensions = values.filesDisabledExtensions .split(',') .map((ext) => ext.trim()) .filter((ext) => ext !== ''); } return settingsOnSubmit(router, form)(values); }; useEffect(() => { form.setValues({ filesRoute: data?.filesRoute ?? '/u', filesLength: data?.filesLength ?? 6, filesDefaultFormat: data?.filesDefaultFormat ?? 'random', filesDisabledExtensions: data?.filesDisabledExtensions.join(', ') ?? '', filesMaxFileSize: bytes(data?.filesMaxFileSize ?? 104857600), filesDefaultExpiration: data?.filesDefaultExpiration ? ms(data.filesDefaultExpiration) : '', filesAssumeMimetypes: data?.filesAssumeMimetypes ?? false, filesDefaultDateFormat: data?.filesDefaultDateFormat ?? 'YYYY-MM-DD_HH:mm:ss', filesRemoveGpsMetadata: data?.filesRemoveGpsMetadata ?? false, }); }, [data]); return ( Files