1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2026-04-17 21:26:13 -04:00
Files
Sonarr/frontend/src/System/Events/useEvents.ts
2025-03-08 12:33:03 -08:00

93 lines
1.8 KiB
TypeScript

import { keepPreviousData } from '@tanstack/react-query';
import { useCallback, useMemo } from 'react';
import { Filter } from 'App/State/AppState';
import usePage from 'Helpers/Hooks/usePage';
import usePagedApiQuery from 'Helpers/Hooks/usePagedApiQuery';
import LogEvent from 'typings/LogEvent';
import translate from 'Utilities/String/translate';
import { useEventOptions } from './eventOptionsStore';
export const FILTERS: Filter[] = [
{
key: 'all',
label: () => translate('All'),
filters: [],
},
{
key: 'info',
label: () => translate('Info'),
filters: [
{
key: 'level',
value: 'info',
type: 'equal',
},
],
},
{
key: 'warn',
label: () => translate('Warn'),
filters: [
{
key: 'level',
value: 'warn',
type: 'equal',
},
],
},
{
key: 'error',
label: () => translate('Error'),
filters: [
{
key: 'level',
value: 'error',
type: 'equal',
},
],
},
];
const useEvents = () => {
const { page, goToPage } = usePage('events');
const { pageSize, selectedFilterKey, sortKey, sortDirection } =
useEventOptions();
const filters = useMemo(() => {
return FILTERS.find((f) => f.key === selectedFilterKey)?.filters;
}, [selectedFilterKey]);
const { refetch, ...query } = usePagedApiQuery<LogEvent>({
path: '/log',
page,
pageSize,
filters,
sortKey,
sortDirection,
queryOptions: {
placeholderData: keepPreviousData,
},
});
const handleGoToPage = useCallback(
(page: number) => {
goToPage(page);
refetch();
},
[goToPage, refetch]
);
return {
...query,
goToPage: handleGoToPage,
page,
refetch,
};
};
export default useEvents;
export const useFilters = () => {
return FILTERS;
};