Docyrus

DocyrusDataExportMenu

Toolbar export button that opens an action sheet (visible columns, all columns, or a column picker with Name / ID / Autonumber ID variants for relation, user and choice fields) and reports the selection for a server-side Docyrus export. API-aligned with the web DocyrusDataExportMenu.

iOSAndroid
Preview DocyrusDataExportMenu on your device

Scan with Expo Go

Download Expo Go, then scan the QR code to preview native components.

Installation

pnpm dlx @docyrus/cli add @docyrus/rn-docyrus-data-export-menu
Required Packages(1 package)
pnpm add tailwind-variants

The menu only reports what the user picked. It does not call the API. Wire onExport to useDocyrusDataExport, which POSTs to /v1/edge/run/query-export, writes the returned file into the cache directory and opens the share sheet. That hook uses the optional expo-file-system and expo-sharing peers.

Usage

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

import {
  DocyrusDataExportMenu,
  encodeDocyrusDataExportColumn,
  type DocyrusDataExportSelection
} from '@/components/docyrus-native/docyrus-data-export-menu';
import { useDocyrusDataExport } from '@/hooks/docyrus-native/use-docyrus-data-export';

export function ExportButton({ dataSourceId, fields, visibleSlugs, query }: Props) {
  const client = useDocyrusClient();
  const { exportData, isExporting } = useDocyrusDataExport({ client: client!, fileName: 'contacts' });

  const handleExport = async (selection: DocyrusDataExportSelection) => {
    const columns = selection.scope === 'all'
      ? '*'
      : selection.scope === 'visible'
        ? visibleSlugs
        : selection.columns.map(encodeDocyrusDataExportColumn);

    await exportData({ dataSourceId, columns, filters: query });
  };

  return (
    <DocyrusDataExportMenu
      onExport={handleExport}
      fields={fields.map(field => ({ slug: field.slug, name: field.name, type: field.type }))}
      visibleSlugs={visibleSlugs}
      isExporting={isExporting} />
  );
}

Behaviour

  • The trigger is an outline icon button (fal download) that shows a spinner while isExporting is set.
  • Pressing it opens an ActionSheet titled Export to Excel with Export visible columns, Export all columns and, when fields is non-empty, Select columns….
  • Select columns… opens a large-detent sheet with a description, a search input, Select all / Clear all for the filtered list, and one checkbox row per field (name + slug). Relation, user and choice fields get a ToggleGroup with Name, ID and, for relation fields only, Autonumber ID. The header has Cancel and Export. The sheet re-seeds its selection every time it opens: visibleSlugs start checked (all fields when omitted), and variant fields start on ['name'].
  • encodeDocyrusDataExportColumn turns { slug: 'country', variants: ['name', 'id'] } into country(id,name). Variants are always emitted in id, name, autonumber_id order.

API Reference

DocyrusDataExportMenuProps

PropTypeDefaultDescription
onExport(selection: DocyrusDataExportSelection) => void | Promise<void>—Called with the picked entry. Should start the server export (required).
fieldsReadonlyArray<DocyrusDataExportFieldOption>—Exportable fields. When set, the Select columns… entry appears.
visibleSlugsReadonlyArray<string>every fieldSlugs checked when the column sheet opens.
isExportingbooleanfalseShow a spinner on the trigger and disable interactions.
disabledbooleanfalseDisable the trigger (for example while the data source loads).
classNamestring—Extra classes for the trigger button.

DocyrusDataExportSelection

VariantDescription
{ scope: 'visible' }Export the columns currently visible in your list.
{ scope: 'all' }Export every exportable field (columns: '*').
{ scope: 'custom'; columns: ReadonlyArray<DocyrusDataExportColumn> }The columns picked in the sheet.

DocyrusDataExportColumn

FieldTypeDescription
slugstringField slug.
variantsReadonlyArray<DocyrusDataExportColumnVariant>'name' | 'id' | 'autonumber_id'. Empty keeps the server default.

DocyrusDataExportFieldOption

FieldTypeDescription
slugstringField slug.
namestringDisplay name.
typestringField type (field-relation, field-userSelect, field-select, …). Decides which variants are offered.

Variant fields: relation (field-relation, field-relatedField), user (field-userSelect, field-userMultiSelect) and choice (field-select, field-multiSelect, field-radioGroup, field-tagSelect, field-status, field-approvalStatus, field-enum, field-systemEnum).

Native differences

  • The dropdown menu is an ActionSheet, and the column dialog is a large-detent sheet with Cancel / Export in the header.
  • The column sheet opens after the menu sheet has dismissed (a short delay avoids stacking two iOS modals).
  • The export file is not downloaded by the browser. useDocyrusDataExport writes it with expo-file-system and shares it with expo-sharing (shared helpers in the internal lib/native-export).

Translation keys

ui.dataGrid.export, exportLabel, exportVisibleColumns, exportAllColumns, exportSelectColumns, exportSelectColumnsTitle, exportSelectColumnsDescription, exportSelectedSuffix, exportSearchColumns, exportSelectAll, exportClearAll, exportNoColumns, exportVariantName, exportVariantId, exportVariantAutonumber, exportSubmit, exportCancel (shared with web).

Components

ComponentDescription
DocyrusDataExportMenuTrigger + action sheet + column picker sheet.

Helpers

ExportDescription
encodeDocyrusDataExportColumn(column)Encodes a column entry as slug or slug(v1,v2).

Type Exports

TypeDescription
DocyrusDataExportMenuPropsComponent props.
DocyrusDataExportSelectionPicked entry.
DocyrusDataExportScope'visible' | 'all' | 'custom'.
DocyrusDataExportColumnA custom column entry.
DocyrusDataExportColumnVariant'name' | 'id' | 'autonumber_id'.
DocyrusDataExportFieldOption{ slug, name, type }.

On this page