useCADataverseDataTable
@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
| Property | Type | Description |
|---|---|---|
service | ICATabularService<TRecord & CADataTableRecord, string> | Generated tabular service from pac code add-data-source. |
Options
| Property | Type | Description |
|---|---|---|
autoRefresh? | boolean | Enable auto-refresh after mutations (default: true). |
cacheDuration? | number | Cache TTL for read results in ms (default: 60_000). |
columns? | ( | IColumn | IDataTableColumn<TRecord>)[] | Columns to display. May mix simplified IDataTableColumn and Fluent IColumn. |
debug? | boolean | Enable 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? | number | Sample size for the default filter-options discovery (default: 1000). Only used when onGetFilterOptions is not provided. |
filterOptionsCacheTTL? | number | Cache TTL for filter-options results in ms (default: 5 minutes). Filter values are far less volatile than table data. |
groupByLevel1? | string | Field name for level-1 grouping. |
groupByLevel2? | string | Field name for level-2 grouping. |
groupByLevel3? | string | Field name for level-3 grouping. |
groupsDefaultCollapsed? | boolean | Whether groups start collapsed. |
inPlaceSearchText? | string | Default search text. Triggers a filter that matches any of searchFields against the value via contains(). |
odataFilter? | string | OData $filter expression applied to every read. Always AND-combined with column filters and search text. |
retryPolicy? | ICARetryPolicy | Retry policy for transient failures. |
rowLimit? | number | Page 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
| Property | Type | Description |
|---|---|---|
inPlaceFilterItems? | (item) => boolean | Client-side post-filter. Applied after server-side filtering, useful for computed predicates the connector can't express. |
onError? | (error) => void | Error 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? | CANotifyFn | Notification callback. If omitted, hook errors surface via error state only. |
translate? | (text) => string | Translation function (rendered through component). |
Appearance & theming
| Property | Type | Description |
|---|---|---|
appearance? | AppearanceMode | Appearance 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} />;