Skip to main content

Table

A configurable data table backed by an ArcGIS Feature Service layer, with sorting, pagination, per-column renderers (text, badge, status, progress, actions), tone rules, and row actions.

At a glance

Type keytable-card
Default size6 × 10 (min 3 × 4)
Data sourceA Feature Service layer
Emits
Receivesfilter (from a Map's map:extent-change)
Sourcesrc/widgets/widgets/table-card/

Configuration

Table

FieldTypeDefaultPurpose
subtitlestring"Table"Heading above the table.
showSubtitlebooleantrueShow/hide the subtitle bar.
featureServiceIdstring?Feature Service item id.
featureServiceTitlestring?Display title of the service.
featureLayerIdnumber?Sub-layer id within the service.
featureLayerNamestring?Display name of the sub-layer.
filterClausesclause[][]Attribute filter applied to the data source. Each clause is field operator operand; clauses join left-to-right with AND/OR into a SQL where.
maxRecordsnumber250Maximum number of features fetched from the service (1–2000). The server may impose a lower limit.
sortFieldsSortField[][]Server-side ordering applied to the query, in precedence order. Each is a field + direction (asc/desc).
editingEnabledbooleanfalseAllow in-cell editing that writes back to the Feature Service. Only selectable when the layer supports updates.
editableFieldsstring[][]Field names that can be edited in the table. A field is editable only if it is in this list and the layer marks it editable.
columnsTableColumn[][]Column definitions (see below).
rowsTableRowData[][]Row data: id + a cells key→value map.
sortablebooleantrueMaster toggle for header-click sorting.
showCountbooleantrueShow the row-count badge.
stripedbooleanfalseZebra-stripe rows.
paginatebooleanfalseSplit rows across pages.
pageSizenumber10Rows per page when paginating.
actionsstring[][]Enabled row actions from the row-actions registry.

Columns

Each TableColumn has:

FieldTypeDefaultPurpose
keystringField name in the row cells.
labelstring?Header label (falls back to the FS field alias).
renderer"text" | "badge" | "status" | "progress" | "actions""text"Cell render mode.
visiblebooleantrueShow/hide the column.
sortablebooleantrueAllow header-click sort.
align"left" | "center" | "right""left"Cell alignment.
toneStatusTone?Fallback color for badge/status cells.
toneRulesToneRule[][]Value→tone rules (equals/gte/lte; first match wins).
formatValueFormat?Optional display formatting for numeric text cells.

The optional format object is shared with the Indicator widget — it scales/formats numbers (decimal places, thousands grouping, standard/compact notation, a unit multiplier, and prefix/suffix) or renders epoch values as dates (date style and optional time). The prefix/suffix fields include an insert symbol palette for superscripts (m²), subscripts (CO₂), degrees, units, fractions, and currency. Formatting applies only to numeric values in text columns.

Config panel

  • Data — pick the Feature Service and sub-layer (a feature Layer or a Table), then edit columns (visibility, renderer, sort, tone, tone rules, and — for text columns — a per-column number/date Format via the hash button) and choose row actions. The selected Feature Service shows a preview card (thumbnail, title, summary, and an open-in-portal link); see Picking an ArcGIS data source. A Filter section under the layer picker limits the table to features matching a SQL expression you build clause by clause (field, operator, and a value or another field), joined with AND/OR. An Inline editing section lets you turn on in-cell editing and pick which fields are editable (see Inline editing below).
  • Appearance — toggle the subtitle (and edit its text), sorting, the count badge, striping, and pagination (with a page-size stepper).

Cross-widget actions

The Table receives a filter action carrying a MapExtentPayload. Wire a Map's map:extent-change to this table to narrow its rows to the features in the map's current extent.

The Table also emits a table:row-select action. In the config drawer's Actions section, wire Zoom, Pan, and/or Flash to a Map or 3D Scene on the same view. Selecting a row then acts on that map for the row's feature: Zoom frames it (point features use a fixed padding scale so the map never snaps to its deepest level), Pan recenters without changing the zoom, and Flash briefly pulses a highlight on the feature to draw the eye to it. The effects are independent and can target the same map; Zoom takes precedence over Pan when both are enabled, while Flash runs alongside either. The flash draws a solid core on the feature itself with a soft, borderless pulse that radiates off it — a point flashes from its center, while a polygon or line's pulse extends outward off its edge. It repeats a few times then clears itself, respects the OS reduced-motion setting (falling back to a single static highlight), and a new selection replaces any in-flight flash so highlights never pile up. When at least one Flash target is wired, a Flash appearance panel appears with controls for the highlight's Color, Size (small / medium / large), number of Flashes (1–5), and Speed (slow / normal / fast — the duration of each pulse, so the total time is flashes × speed); these travel with the row-select payload so the connected map renders the pulse exactly as configured. Feature geometry is only fetched once a row-select action is wired, so unconnected tables pay nothing extra. The navigation is purely geometric — the table and map need not share the same layer; the row's coordinates drive view.goTo, and the flash traces the feature's true outline (polygon/line) when available, otherwise a point marker or its bounding box.

Inline editing

When inline editing is enabled, double-clicking an editable cell opens an inline editor; pressing Enter saves the change and Escape cancels. Edits are written straight to the live Feature Service via applyEdits, so there is no draft or sandbox — saved values are immediately persisted.

  • Enabling — the Inline editing toggle in the config drawer's Data section is only available when the chosen layer supports updates (supportsUpdate). For read-only layers the toggle is disabled with a tooltip explaining why.
  • Choosing fields — with editing on, a checklist shows every field with a select-all / clear control. Fields the layer marks read-only appear disabled with a tooltip; only checked, layer-editable fields become editable in the table.
  • Per-type editors — the editor matches the field type: a text input for strings, a number input (honoring range-domain min/max) for numbers, a themed date picker for date fields, a true/false dropdown for booleans, and a dropdown of allowed values for coded-value domains.
  • Optimistic updates — the new value shows immediately. If the server rejects the edit, the cell reverts to its previous value and is briefly outlined in red with the error in its tooltip.
  • Coexists with row select — a single click still selects a row (for wired zoom/pan); a double-click enters edit mode.

Notable behavior

  • The live Feature Service schema is the source of truth for columns; config only carries per-column preferences. Added, removed, or renamed fields are reflected automatically.
  • Rows are fetched live and re-queried when the wired map extent changes.
  • Maximum records caps how many features the query returns (default 250).
  • Sort orders the query server-side (orderByFields) before the rows arrive; this is independent of clickable header sorting, which re-orders the fetched rows in the browser.
  • The optional attribute Filter is combined with the map-extent filter (both must match).
  • Fields with a coded-value domain display the human-readable label (e.g. "In Process") rather than the stored code (e.g. IN_PROCESS). The underlying code is still what gets saved when editing.
  • The progress renderer expects numeric values in the 0–100 range.
  • Per-column format applies only to numeric values in text columns; other renderers and non-numeric values are shown unformatted.