My App
RoomKitFrontend

useAvailability

Search for available rooms with debounced compound filters

Overview

useAvailability performs a debounced search for available rooms matching the given filters. It calls GET {apiUrl}/availability with query parameters.

import { useAvailability } from '@roomkit/react';

Usage

function RoomFinder() {
    const { data, isLoading, error, refetch } = useAvailability({
        filters: {
            timeRange: {
                startsAt: new Date('2026-03-02T10:00:00Z'),
                endsAt: new Date('2026-03-02T12:00:00Z'),
            },
            minCapacity: 30,
            capacityType: 'seated',
            requiredEquipment: ['projector'],
        },
        pagination: { limit: 10 },
        debounceMs: 300,
    });

    if (isLoading) return <div>Searching...</div>;
    if (error) return <div>Error: {error.message}</div>;

    return (
        <ul>
            {data?.items.map((item) => (
                <li key={item.room.id}>
                    {item.room.id} — Score: {item.score.toFixed(2)}
                </li>
            ))}
        </ul>
    );
}

UseAvailabilityOptions

interface UseAvailabilityOptions {
    filters: AvailabilityFilter;
    pagination?: Pagination;
    debounceMs?: number;
    onSuccess?: (data: AvailabilityResult) => void;
    onError?: (error: Error) => void;
}
OptionTypeRequiredDescription
filtersAvailabilityFilterYesSearch filters (time range, capacity, equipment, etc.)
paginationPaginationNoCursor-based pagination ({ cursor?, limit })
debounceMsnumberNoDebounce delay in milliseconds (default: 300)
onSuccess(data) => voidNoCalled when the request succeeds
onError(error) => voidNoCalled when the request fails

AvailabilityFilter

interface AvailabilityFilter {
    timeRange: { startsAt: Date; endsAt: Date };
    minCapacity?: number;
    capacityType?: 'seated' | 'exam' | 'standing';
    requiredEquipment?: string[];
    requiredAccessibility?: string[];
    locationScope?: string;
    excludeRoomIds?: string[];
}

Return Value

{ data: AvailabilityResult | null; isLoading: boolean; error: Error | null; refetch: () => Promise<void> }
FieldTypeDescription
dataAvailabilityResult | nullSearch results with scored rooms
isLoadingbooleantrue while the request is in flight
errorError | nullThe error if the request failed
refetch() => Promise<void>Manually re-fetch the data

API Endpoint

GET {apiUrl}/availability?startsAt=...&endsAt=...&minCapacity=...&capacityType=...&requiredEquipment=...

Query parameters are only included when the corresponding filter is provided. The request is automatically aborted if filters change before the previous request completes.

On this page