mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-12 19:03:47 +00:00
65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
import { useMemo } from 'react';
|
|
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
|
import { OntimeView, URLPreset } from 'ontime-types';
|
|
|
|
import { queryRefetchIntervalSlow } from '../../ontimeConfig';
|
|
import { URL_PRESETS } from '../api/constants';
|
|
import { deleteUrlPreset, getUrlPresets, postUrlPreset, putUrlPreset } from '../api/urlPresets';
|
|
|
|
interface FetchProps {
|
|
skip?: boolean;
|
|
}
|
|
|
|
export default function useUrlPresets({ skip = false }: FetchProps = {}) {
|
|
const { data, status, isError, refetch } = useQuery({
|
|
queryKey: URL_PRESETS,
|
|
queryFn: getUrlPresets,
|
|
placeholderData: (previousData, _previousQuery) => previousData,
|
|
refetchInterval: queryRefetchIntervalSlow,
|
|
enabled: !skip,
|
|
});
|
|
|
|
return { data: data ?? [], status, isError, refetch };
|
|
}
|
|
|
|
export function useViewUrlPresets(view: OntimeView) {
|
|
const { data } = useUrlPresets();
|
|
|
|
const viewPresets = useMemo(() => data.filter((preset) => preset.target === view), [data, view]);
|
|
|
|
return { viewPresets };
|
|
}
|
|
|
|
export function useUpdateUrlPreset() {
|
|
const queryClient = useQueryClient();
|
|
|
|
const addFn = useMutation({
|
|
mutationFn: postUrlPreset,
|
|
onSuccess: (newPresets) => {
|
|
queryClient.setQueryData(URL_PRESETS, newPresets);
|
|
},
|
|
});
|
|
|
|
const updateFn = useMutation({
|
|
mutationFn: ({ alias, data }: { alias: string; data: URLPreset }) => putUrlPreset(alias, data),
|
|
onSuccess: (newPresets) => {
|
|
queryClient.setQueryData(URL_PRESETS, newPresets);
|
|
},
|
|
});
|
|
|
|
const deleteFn = useMutation({
|
|
mutationFn: deleteUrlPreset,
|
|
onSuccess: (newPresets) => {
|
|
queryClient.setQueryData(URL_PRESETS, newPresets);
|
|
},
|
|
});
|
|
|
|
return {
|
|
addPreset: addFn.mutateAsync,
|
|
updatePreset: (alias: string, data: URLPreset) => updateFn.mutateAsync({ alias, data }),
|
|
deletePreset: deleteFn.mutateAsync,
|
|
isMutating: addFn.isPending || updateFn.isPending || deleteFn.isPending,
|
|
isMutationError: addFn.isError || updateFn.isError || deleteFn.isError,
|
|
};
|
|
}
|