Skip to main content

useCADataverseDataTable

@spartanfx/react v1.2.2


@spartanfx/react / codeapps / useCADataverseDataTable

Function: useCADataverseDataTable()

function useCADataverseDataTable<TRecord>(config): UseCADataTableReturn<TRecord>;

Power Apps Code Apps DataTable hook backed by a Dataverse table.

Consumes a generated Dataverse service produced by pac code add-data-source -a dataverse -t <table-logical-name>.

Type Parameters

TRecord

TRecord = any

Configuration

Required

PropertyTypeDescription
serviceICATabularService<TRecord & CADataTableRecord, string>Generated tabular service from pac code add-data-source.

Options

PropertyTypeDescription
autoRefresh?booleanEnable auto-refresh after mutations (default: true).
cacheDuration?numberCache TTL for read results in ms (default: 60_000).
columns?( | IColumn | IDataTableColumn<TRecord>)[]Columns to display. May mix simplified IDataTableColumn and Fluent IColumn.
debug?booleanEnable verbose console logging (default: false).
fieldInfo?IDataTableFieldType[]Optional field metadata for renderers and tooltips. CodeApps services do not expose schema at runtime — supply this when you need rich column rendering (User, Lookup, Choice, DateTime, ...).
filterDiscoveryLimit?numberSample size for the default filter-options discovery (default: 1000). Only used when onGetFilterOptions is not provided.
filterOptionsCacheTTL?numberCache TTL for filter-options results in ms (default: 5 minutes). Filter values are far less volatile than table data.
groupByLevel1?stringField name for level-1 grouping.
groupByLevel2?stringField name for level-2 grouping.
groupByLevel3?stringField name for level-3 grouping.
groupsDefaultCollapsed?booleanWhether groups start collapsed.
inPlaceSearchText?stringDefault search text. Triggers a filter that matches any of searchFields against the value via contains().
odataFilter?stringOData $filter expression applied to every read. Always AND-combined with column filters and search text.
retryPolicy?ICARetryPolicyRetry policy for transient failures.
rowLimit?numberPage size (default: 100).
searchFields?string[]Columns to search across when onSearch is invoked. Required when search is enabled — OData has no built-in cross-column search.
translatedFields?string[]Fields whose filter values should be translated for display.

Events & callbacks

PropertyTypeDescription
inPlaceFilterItems?(item) => booleanClient-side post-filter. Applied after server-side filtering, useful for computed predicates the connector can't express.
onError?(error) => voidError callback. Called for every operational failure.
onGetFilterOptions?(fieldName, currentFilters) => Promise<IFilterCriteria[]>Override the filter-options discovery. Default implementation queries the data source for distinct values from a top-N sample, which is inexact for large tables — supply a custom implementation for accurate results.
onNotify?CANotifyFnNotification callback. If omitted, hook errors surface via error state only.
translate?(text) => stringTranslation function (rendered through component).

Appearance & theming

PropertyTypeDescription
appearance?AppearanceModeAppearance mode for theming.

Full type reference: IUseCADataverseDataTableConfig

Returns

UseCADataTableReturn<TRecord>

Example

import { AccountsService } from './generated/services/AccountsService';
import type { Accounts } from './generated/models/AccountsModel';
import { useCADataverseDataTable } from '@spartanfx/react/codeapps';

const columns = [
{ fieldName: 'name', detailsListColumn: { name: 'Name', minWidth: 200 } },
{ fieldName: 'accountnumber', detailsListColumn: { name: 'Account #' } },
{ fieldName: 'address1_city', detailsListColumn: { name: 'City' } },
];

const dataTableProps = useCADataverseDataTable<Accounts>({
service: AccountsService as any,
columns,
searchFields: ['name', 'accountnumber'],
odataFilter: "statecode eq 0",
rowLimit: 100,
});

return <DataTable {...dataTableProps} />;