Hooks

useDocyrusDataGallery

Docyrus-backed card gallery for React Native — composes useDocyrusDataGrid for schema, saved views, server filters / sort / search / paging and pivot / side filters, and adds gallery-owned card + display config, a toolbar and props for the native DataGallery.

iOSAndroidExpo Go

Installation

pnpm dlx @docyrus/cli add @docyrus/rn-hooks-use-docyrus-data-gallery
Required Packages(5 packages)
pnpm add @docyrus/app-utils @docyrus/api-client @tanstack/react-query @tanstack/react-table @shopify/flash-list

A port of the web hook with the same options and result. It composes useDocyrusDataGrid (read-only, grid toolbar switched off) for the data layer and adds what a gallery owns: the card field bindings (auto-detected from the schema, or the saved view's galleryCardConfig), the display config (variant, columns, density, cover …), a debounced search that becomes the server filterKeyword, and a toolbar. Spread galleryProps onto the native DataGallery.

Usage

import { View } from 'react-native';

import { useDocyrusClient } from '@docyrus/signin/react-native';

import { DataGallery } from '@/components/docyrus-native/data-gallery';
import { useDocyrusDataGallery } from '@/hooks/docyrus-native/use-docyrus-data-gallery';

export function ContactGallery() {
  const client = useDocyrusClient();
  const { toolbar, galleryProps, sideFilters } = useDocyrusDataGallery<Record<string, unknown>>({
    client,
    appSlug: 'base',
    dataSourceSlug: 'contact',
    displayConfig: { cardVariant: 'profile' },
    persistState: true,
    onCardClick: record => openContact(record.id as string)
  });

  return (
    <View className="flex-1">
      {toolbar}
      {sideFilters}
      <DataGallery {...galleryProps} />
    </View>
  );
}

Saving or creating a view from the toolbar's view picker injects the current galleryCardConfig / galleryDisplayConfig into the payload, so the gallery layout travels with the view (and is shared with the grid's gallery display mode).

API Reference

Options (UseDocyrusDataGalleryOptions<TData>)

Every useDocyrusDataGrid option is accepted and forwarded (client, appSlug, dataSourceSlug, listParams, pivotFilters, enableSideFilters / sideFiltersConfig, persistState, onCardClick, users, formatDate, …) except the grid-only enableSearch, enableRowHeightMenu, enableRowMarkers, trackChanges, onSaveChanges, onRowAdd, readOnly (always read-only) and the grid's cardConfig. Gallery options:

OptionTypeDefaultDescription
cardConfigDataGalleryCardConfigSerializableauto-detectedInitial card bindings (saved view → this → detectCardConfigFromFields).
onCardConfigChange(config) => void—Fires on every card-config change.
displayConfigPartial<DataGalleryDisplayConfig>defaultsInitial display config (merged with the view's galleryDisplayConfig).
onDisplayConfigChange(config: DataGalleryDisplayConfig) => void—Fires on every display change.
showSelectColumnbooleantrueKeep row selection (long-press a card).
enableSearchInputbooleantrueSearch input (debounced 250 ms → filterKeyword).
enableFilterMenubooleantrueFilter chip.
enableSortMenubooleantrueSort chip.
enableGroupMenubooleantrueGroup chip.
enableDisplayMenubooleantrueDisplay sheet.
enableCardConfigMenubooleantrueCard fields sheet.
enableViewSelectbooleantrueSaved-view picker.
enableReloadButtonbooleantrueReload button.
viewSelectVariant'horizontal-tabs' | 'dropdown' | 'vertical-tabs''horizontal-tabs'View picker variant.
onAdd / addLabel() => void / string— / 'Add'Toolbar add button.
minCardWidthnumber260Card width floor for the column clamp.
estimatedCardHeight / overscannumber—Accepted for parity; ignored.

Result (UseDocyrusDataGalleryResult<TData>)

Everything useDocyrusDataGrid returns except gridProps, toolbar and sidePanel (table, items, fields, views, forms, activeViewId, setActiveViewId, activeViewForm, formViewProps, resolvedListParams, pagingMode, pivotFilterRule, pivotFiltersStrip, sideFilters, sideFiltersExpanded, setSideFiltersExpanded, sideFiltersQuery, selectedRows, selectedRowCount, reload, refetch, isLoading, error, hasNoViews, dataSource, gridViewSelectProps — wrapped to inject the gallery config on save), plus:

FieldTypeDescription
galleryPropsDocyrusDataGalleryProps<TData>Spread onto <DataGallery> (below).
toolbarReactNodePivot strips → view picker → search → scrollable chips (filter, sort, group, display, card fields, reload, add).
cardConfig / setCardConfigDataGalleryCardConfigSerializable / setter (value or updater)Card bindings.
displayConfig / setDisplayConfigDataGalleryDisplayConfig / setterDisplay config.
searchInput / setSearchInputstring / (value) => voidImmediate search value.
searchKeywordstringDebounced keyword sent as filterKeyword.

DocyrusDataGalleryProps<TData>:

FieldTypeDescription
table / tableMetaTanStackGrid table + meta.
displayConfigDataGalleryDisplayConfigCurrent display config.
onClearFilters / hasActiveFilters() => void / booleanEmpty-state reset (toolbar chips + search; side filters count as active).
selectedRowCount / getSelectedRowsnumber / () => TData[]Selection.
columnsPerRownumberMeasured column count.
onContainerLayout(event) => voidNative. Width measurement (web: containerRef).
minCardWidthnumberNative. Column clamp.
pagingMode'standard' | 'virtual-scroll'Resolved paging mode.
isReloadingbooleanBackground refetch.
onRefresh() => voidNative. Pull-to-refresh → reload.

Native deltas

  • galleryProps drops web containerRef / virtualizer (FlashList + onLayout) and adds onContainerLayout, minCardWidth, onRefresh.
  • estimatedCardHeight / overscan are accepted and ignored.
  • The toolbar uses the grids' stacked native layout (chips open bottom sheets).
  • persistState stores the gallery layer (search, card, display config) under the …:gallery key in lib/storage, next to the grid's own entry.

Exports

ExportDescription
useDocyrusDataGalleryThe hook.
detectCardConfigFromFields(fields)Re-exported card-slot auto-detection.

Type Exports

TypeDescription
UseDocyrusDataGalleryOptions<TData> / UseDocyrusDataGalleryResult<TData>Options / result.
DocyrusDataGalleryProps<TData>galleryProps shape.

On this page