1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
This commit is contained in:
viown 2025-02-23 14:54:25 +03:00
parent 934a05cffa
commit 145c0700b1
7 changed files with 48 additions and 46 deletions

View file

@ -13,11 +13,6 @@ const fetchTask = async (
params: ScheduledTasksApiGetTaskRequest,
options?: AxiosRequestConfig
) => {
if (!api) {
console.warn('[fetchTasks] No API instance available');
return;
}
const response = await getScheduledTasksApi(api).getTask(params, options);
return response.data;

View file

@ -22,7 +22,7 @@ export const useTasks = (params?: ScheduledTasksApiGetTasksRequest) => {
const { api } = useApi();
return useQuery({
queryKey: [QUERY_KEY],
queryKey: [ QUERY_KEY ],
queryFn: ({ signal }) =>
fetchTasks(api!, params, { signal }),
enabled: !!api

View file

@ -3,7 +3,7 @@ import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task
import { useMutation } from '@tanstack/react-query';
import { useApi } from 'hooks/useApi';
import { queryClient } from 'utils/query/queryClient';
import { QUERY_KEY } from './useTasks';
import { QUERY_KEY } from './useTask';
export const useUpdateTask = () => {
const { api } = useApi();

View file

@ -18,29 +18,21 @@ type IProps = {
open: boolean,
title: string,
onClose?: () => void,
onSubmit?: (trigger: TaskTriggerInfo) => void
onAdd?: (trigger: TaskTriggerInfo) => void
};
const NewTriggerForm: FunctionComponent<IProps> = ({ open, title, onClose, onSubmit }: IProps) => {
const NewTriggerForm: FunctionComponent<IProps> = ({ open, title, onClose, onAdd }: IProps) => {
const { dateFnsLocale } = useLocale();
const [triggerType, setTriggerType] = useState('DailyTrigger');
const timeOfDayOptions = useMemo(() => getTimeOfDayOptions(dateFnsLocale), [dateFnsLocale]);
const intervalOptions = useMemo(() => getIntervalOptions(dateFnsLocale), [dateFnsLocale]);
const onTriggerTypeChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {
setTriggerType(e.target.value);
}, []);
return (
<Dialog
open={open}
maxWidth={'xs'}
fullWidth
PaperProps={{
component: 'form',
onSubmit: (e: React.FormEvent<HTMLFormElement>) => {
const onSubmit = useCallback((e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
const formData = new FormData(e.currentTarget);
@ -65,10 +57,19 @@ const NewTriggerForm: FunctionComponent<IProps> = ({ open, title, onClose, onSub
trigger.MaxRuntimeTicks = parseFloat(data.TimeLimit.toString()) * 3600000 * 1e4;
}
if (onSubmit) {
onSubmit(trigger);
}
if (onAdd) {
onAdd(trigger);
}
}, [onAdd]);
return (
<Dialog
open={open}
maxWidth={'xs'}
fullWidth
PaperProps={{
component: 'form',
onSubmit: onSubmit
}}
>
<DialogTitle>{title}</DialogTitle>
@ -116,7 +117,10 @@ const NewTriggerForm: FunctionComponent<IProps> = ({ open, title, onClose, onSub
label={globalize.translate('LabelTime')}
>
{timeOfDayOptions.map((option) => {
return <MenuItem key={option.value} value={option.value}>{option.name}</MenuItem>;
return <MenuItem
key={option.value}
value={option.value}
>{option.name}</MenuItem>;
})}
</TextField>
)}
@ -130,7 +134,10 @@ const NewTriggerForm: FunctionComponent<IProps> = ({ open, title, onClose, onSub
label={globalize.translate('LabelEveryXMinutes')}
>
{intervalOptions.map((option) => {
return <MenuItem key={option.value} value={option.value}>{option.name}</MenuItem>;
return <MenuItem
key={option.value}
value={option.value}
>{option.name}</MenuItem>;
})}
</TextField>
)}

View file

@ -1,4 +1,4 @@
export const INTERVAL_DURATION: number[] = [
export const INTERVAL_DURATIONS: number[] = [
9000000000, // 15 minutes
18000000000, // 30 minutes
27000000000, // 45 minutes

View file

@ -1,7 +1,7 @@
import type { TaskTriggerInfo } from '@jellyfin/sdk/lib/generated-client/models/task-trigger-info';
import { format, formatDistanceStrict, Locale, parse } from 'date-fns';
import globalize from 'lib/globalize';
import { INTERVAL_DURATION } from '../constants/intervalDuration';
import { INTERVAL_DURATIONS } from '../constants/intervalDurations';
function getDisplayTime(ticks: number, locale: Locale) {
const ms = ticks / 1e4;
@ -27,7 +27,7 @@ export function getTimeOfDayOptions(locale: Locale) {
export function getIntervalOptions(locale: Locale) {
const options = [];
for (const ticksDuration of INTERVAL_DURATION) {
for (const ticksDuration of INTERVAL_DURATIONS) {
const durationMs = Math.floor(ticksDuration / 1e4);
const unit = durationMs < 36e5 ? 'minute' : 'hour';
options.push({

View file

@ -60,7 +60,7 @@ const TaskEdit = () => {
setIsAddTriggerDialogOpen(false);
}, []);
const onNewTriggerSubmit = useCallback((trigger: TaskTriggerInfo) => {
const onNewTriggerAdd = useCallback((trigger: TaskTriggerInfo) => {
if (task?.Triggers && task?.Id) {
const triggers = [...task.Triggers, trigger];
@ -150,7 +150,7 @@ const TaskEdit = () => {
open={isAddTriggerDialogOpen}
title={globalize.translate('ButtonAddScheduledTaskTrigger')}
onClose={handleNewTriggerDialogClose}
onSubmit={onNewTriggerSubmit}
onAdd={onNewTriggerAdd}
/>
<Box className='content-primary'>
<Box className='readOnlyContent'>