Local Provider
Queries and Filters
The local provider supports paginated tree and flat listings with provider-aware filters.
The local provider builds on Tulip query patterns.
Important query concepts
namespaceparentId- search
- sorting
pagination: { page, limit }- archive state filtering
Practical guidance
- use tree listing for file-manager screens
- use flat listing for cross-folder browsing or global search
- keep query state in URL params when you want shareable views
Filter descriptors
Drive filters use the same descriptor API as core query.
import {
arrayFilter,
booleanFilter,
defineFilters,
enumFilter,
stringFilter,
} from "@tulip-systems/query";
const driveNodeTypes = ["file", "folder"] as const;
export const driveTreeFilters = defineFilters({
types: arrayFilter(enumFilter(driveNodeTypes)).build((value) =>
value?.length ? { field: "type", operator: "in", value } : null,
),
contentTypes: arrayFilter(stringFilter).build((value) =>
value?.length ? { field: "contentType", operator: "in", value } : null,
),
nodeIds: arrayFilter(stringFilter).build((value) =>
value?.length ? { field: "id", operator: "in", value } : null,
),
isArchived: booleanFilter.build((value) =>
value === undefined ? null : { field: "isArchived", operator: "eq", value },
),
});Provider-specific filters can extend the shared tree filters:
const localNodeSubtypes = ["image", "video", "document"] as const;
export const localDriveFilters = defineFilters({
...driveTreeFilters,
subtypes: arrayFilter(enumFilter(localNodeSubtypes)).build((value) =>
value?.length ? { field: "subtype", operator: "in", value } : null,
),
hidden: booleanFilter.build((value) =>
value === undefined ? null : { field: "hidden", operator: "eq", value },
),
});The local provider compiles these portable filter conditions into provider-aware TanStack DB or server query predicates.