Query
Typed filtering, sorting, and pagination primitives for server, client, and local data flows.
The query module owns query input concerns for Tulip data surfaces.
Use it to define URL-backed filters, typed sorting, offset pagination, API input schemas, and portable compiler input that can be consumed by database, local, provider-specific, and table layers.
Responsibilities
- define filter descriptors and convert them into portable condition trees
- define sort options and convert them into portable sort arrays
- own pagination state, URL search params, API schemas, and response DTOs
- expose client hooks for resolved query input
- keep data-table strategies focused on table state instead of query construction
Entry Points
Use the server-safe entrypoint for definitions, schemas, parsers, DTOs, and converters:
import {
defineFilters,
defineSorting,
offsetPaginationResponse,
offsetPaginationSchema,
resolveFiltersSchema,
resolveSortingSchema,
stringFilter,
} from "@tulip-systems/query";Use the client entrypoint for hooks and interactive filter UI:
import {
FilterCombobox,
FilterSearch,
useFilters,
usePagination,
useSorting,
} from "@tulip-systems/query/client";The server entrypoint mirrors the server-safe exports:
import { defineFilters, offsetPaginationResponse } from "@tulip-systems/query/server";Query Input Shape
Most server-backed tables and collections use the same shape:
const input = useDeferredValue({
pagination: pagination.input,
filters: filtering.input,
sorts: sorting.input,
});pagination.input, filtering.input, and sorting.input are already resolved with defaults and constraints. Pass those values to queries instead of rebuilding search-param state in the table layer.
Module Boundaries
Query owns query state and query input. Data tables consume the resolved controllers.
const pagination = usePagination(offsetPagination);
const filtering = useFilters(projectFilters);
const sorting = useSorting(projectSorting);
const strategy = usePaginationStrategy({ pagination });
const config = createTableConfig({
queryData: data,
columns,
strategy,
pagination,
filtering,
sorting,
});Import query APIs from @tulip-systems/query or @tulip-systems/query/client. Do not import filters, sorting, or pagination definitions from data-tables.