Files
road-monitoring-ui/src/app/(modules)/clients/hooks/useClientQueries.ts

50 lines
1.3 KiB
TypeScript

'use client';
import { useMemo } from 'react';
import { useQuery } from '@tanstack/react-query';
import type { SortingState } from '@tanstack/react-table';
import { getServerSortParams } from '@/components/data-table/sorting';
import { clientService } from '@/services/api';
import type { ClientListParams } from '@/types';
import { clientKeys } from '../queries/clientKeys';
import type { ClientStatusFilter } from './useClientFilters';
interface UseClientsQueryParams {
skip: number;
limit: number;
searchTerm: string;
statusFilter: ClientStatusFilter;
sorting: SortingState;
}
function buildClientListParams({
skip,
limit,
searchTerm,
statusFilter,
sorting,
}: UseClientsQueryParams): ClientListParams {
return {
skip,
limit,
search_term: searchTerm || undefined,
is_active: statusFilter === 'all' ? undefined : statusFilter === 'active',
...getServerSortParams(sorting),
};
}
export function useClientsQuery(params: UseClientsQueryParams) {
const { skip, limit, searchTerm, statusFilter, sorting } = params;
const listParams = useMemo(
() =>
buildClientListParams({ skip, limit, searchTerm, statusFilter, sorting }),
[limit, searchTerm, skip, sorting, statusFilter],
);
return useQuery({
queryKey: clientKeys.list(listParams),
queryFn: () => clientService.getClients(listParams),
});
}