import React, { ChangeEvent, useCallback, useEffect, useState } from 'react'; import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; import Loading from 'components/loading/LoadingComponent'; import Page from 'components/Page'; import globalize from 'lib/globalize'; import { Alert, Box, Button, FormControlLabel, Stack, Switch, TextField, Typography } from '@mui/material'; import { type ActionFunctionArgs, Form, useActionData } from 'react-router-dom'; import ServerConnections from 'components/ServerConnections'; import { useServerLogs } from 'apps/dashboard/features/logs/api/useServerLogs'; import { useConfiguration } from 'hooks/useConfiguration'; import type { ServerConfiguration } from '@jellyfin/sdk/lib/generated-client/models/server-configuration'; import { ActionData } from 'types/actionData'; import LogItemList from 'apps/dashboard/features/logs/components/LogItemList'; export const action = async ({ request }: ActionFunctionArgs) => { const api = ServerConnections.getCurrentApi(); if (!api) throw new Error('No Api instance available'); const formData = await request.formData(); const { data: config } = await getConfigurationApi(api).getConfiguration(); const enableWarningMessage = formData.get('EnableWarningMessage'); config.EnableSlowResponseWarning = enableWarningMessage === 'on'; const responseTime = formData.get('SlowResponseTime'); if (responseTime) { config.SlowResponseThresholdMs = parseInt(responseTime.toString(), 10); } await getConfigurationApi(api) .updateConfiguration({ serverConfiguration: config }); return { isSaved: true }; }; const Logs = () => { const actionData = useActionData() as ActionData | undefined; const [ isSubmitting, setIsSubmitting ] = useState(false); const { isPending: isLogEntriesPending, data: logs } = useServerLogs(); const { isPending: isConfigurationPending, data: defaultConfiguration } = useConfiguration(); const [ loading, setLoading ] = useState(true); const [ configuration, setConfiguration ] = useState( {} ); useEffect(() => { if (!isConfigurationPending && defaultConfiguration) { setConfiguration(defaultConfiguration); setLoading(false); } }, [isConfigurationPending, defaultConfiguration]); const setLogWarningMessage = useCallback((_: ChangeEvent, checked: boolean) => { setConfiguration({ ...configuration, EnableSlowResponseWarning: checked }); }, [configuration]); const onResponseTimeChange = useCallback((event: ChangeEvent) => { setConfiguration({ ...configuration, SlowResponseThresholdMs: parseInt(event.target.value, 10) }); }, [configuration]); const onSubmit = useCallback(() => { setIsSubmitting(true); }, []); if (isLogEntriesPending || isConfigurationPending || loading || !logs) { return ; } return (
{globalize.translate('TabLogs')} {isSubmitting && actionData?.isSaved && ( {globalize.translate('SettingsSaved')} )} } label={globalize.translate('LabelSlowResponseEnabled')} />
); }; export default Logs;