import React, { FunctionComponent, useCallback, useMemo, useState } from 'react'; import Dialog from '@mui/material/Dialog'; import Button from '@mui/material/Button'; import DialogActions from '@mui/material/DialogActions'; import DialogContent from '@mui/material/DialogContent'; import DialogTitle from '@mui/material/DialogTitle'; import MenuItem from '@mui/material/MenuItem'; import Stack from '@mui/material/Stack'; import TextField from '@mui/material/TextField'; import type { TaskTriggerInfo } from '@jellyfin/sdk/lib/generated-client/models/task-trigger-info'; import { TaskTriggerInfoType } from '@jellyfin/sdk/lib/generated-client/models/task-trigger-info-type'; import { DayOfWeek } from '@jellyfin/sdk/lib/generated-client/models/day-of-week'; import globalize from 'lib/globalize'; import { getTimeOfDayOptions } from '../utils/edit'; import { useLocale } from 'hooks/useLocale'; type IProps = { open: boolean, title: string, onClose?: () => void, onSubmit?: (trigger: TaskTriggerInfo) => void }; const NewTriggerForm: FunctionComponent = ({ open, title, onClose, onSubmit }: IProps) => { const { dateFnsLocale } = useLocale(); const [triggerType, setTriggerType] = useState('DailyTrigger'); const timeOfDayOptions = useMemo(() => getTimeOfDayOptions(dateFnsLocale), [dateFnsLocale]); const onTriggerTypeChange = useCallback((e: React.ChangeEvent) => { setTriggerType(e.target.value); }, []); return ( ) => { e.preventDefault(); const formData = new FormData(e.currentTarget); const data = Object.fromEntries(formData.entries()); const trigger: TaskTriggerInfo = { Type: data.TriggerType.toString() as TaskTriggerInfoType }; if (trigger.Type == TaskTriggerInfoType.WeeklyTrigger) { trigger.DayOfWeek = data.DayOfWeek.toString() as DayOfWeek; } if (trigger.Type == TaskTriggerInfoType.DailyTrigger || trigger.Type == TaskTriggerInfoType.WeeklyTrigger) { trigger.TimeOfDayTicks = parseInt(data.TimeOfDay.toString(), 10); } if (trigger.Type == TaskTriggerInfoType.IntervalTrigger) { trigger.IntervalTicks = parseInt(data.Interval.toString(), 10); } if (data.TimeLimit.toString()) { trigger.MaxRuntimeTicks = parseFloat(data.TimeLimit.toString()) * 3600000 * 1e4; } if (onSubmit) { onSubmit(trigger); } } }} > {title} {globalize.translate('OptionDaily')} {globalize.translate('OptionWeekly')} {globalize.translate('OptionOnInterval')} {globalize.translate('OnApplicationStartup')} {triggerType == 'WeeklyTrigger' && ( {globalize.translate('Sunday')} {globalize.translate('Monday')} {globalize.translate('Tuesday')} {globalize.translate('Wednesday')} {globalize.translate('Thursday')} {globalize.translate('Friday')} {globalize.translate('Saturday')} )} {['DailyTrigger', 'WeeklyTrigger'].includes(triggerType) && ( {timeOfDayOptions.map((option) => { return {option.name}; })} )} {triggerType == 'IntervalTrigger' && ( 15 minutes 30 minutes 45 minutes 1 hour 2 hours 3 hours 4 hours 6 hours 8 hours 12 hours 24 hours )} ); }; export default NewTriggerForm;