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 { getIntervalOptions, getTimeOfDayOptions } from '../utils/edit'; import { useLocale } from 'hooks/useLocale'; type IProps = { open: boolean, title: string, onClose?: () => void, onAdd?: (trigger: TaskTriggerInfo) => void }; const NewTriggerForm: FunctionComponent = ({ open, title, onClose, onAdd }: IProps) => { const { dateFnsLocale } = useLocale(); const [triggerType, setTriggerType] = useState(TaskTriggerInfoType.DailyTrigger); const timeOfDayOptions = useMemo(() => getTimeOfDayOptions(dateFnsLocale), [dateFnsLocale]); const intervalOptions = useMemo(() => getIntervalOptions(dateFnsLocale), [dateFnsLocale]); const onTriggerTypeChange = useCallback((e: React.ChangeEvent) => { setTriggerType(e.target.value as TaskTriggerInfoType); }, []); const onSubmit = useCallback((e: React.FormEvent) => { 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()) * 36e9; } if (onAdd) { onAdd(trigger); } }, [ onAdd ]); return ( {title} {globalize.translate('OptionDaily')} {globalize.translate('OptionWeekly')} {globalize.translate('OptionOnInterval')} {globalize.translate('OnApplicationStartup')} {triggerType == TaskTriggerInfoType.WeeklyTrigger && ( {globalize.translate('Sunday')} {globalize.translate('Monday')} {globalize.translate('Tuesday')} {globalize.translate('Wednesday')} {globalize.translate('Thursday')} {globalize.translate('Friday')} {globalize.translate('Saturday')} )} {(triggerType == TaskTriggerInfoType.DailyTrigger || triggerType == TaskTriggerInfoType.WeeklyTrigger) && ( {timeOfDayOptions.map((option) => { return {option.name}; })} )} {triggerType == TaskTriggerInfoType.IntervalTrigger && ( {intervalOptions.map((option) => { return {option.name}; })} )} ); }; export default NewTriggerForm;