@khester/create-dynamics-app 3.4.0 → 3.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/artifacts/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAGlB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AA8JpB;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,kBAAkB,EA4hBzC,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAEtE;AAED,wBAAgB,kBAAkB,IAAI,kBAAkB,EAAE,CAEzD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAW1E,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/artifacts/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAGlB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AA8JpB;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,kBAAkB,EA0iBzC,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAEtE;AAED,wBAAgB,kBAAkB,IAAI,kBAAkB,EAAE,CAEzD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAW1E,CAAC"}
@@ -484,7 +484,21 @@ export const ARTIFACTS = [
484
484
  // It is now a control-type="virtual" PCF control on the platform-served React 16.14.0
485
485
  // + Fluent 8.121.1, in the nested `<componentName>/` layout, with pcfconfig.json,
486
486
  // featureconfig.json and .eslintrc.json.
487
- templateVersion: '3.1.0',
487
+ //
488
+ // 3.1.1 — contract corrections (#309, released in create-dynamics-app 3.4.1). `stopEditing`
489
+ // was typed `(cancel?: boolean)`; the boolean is `suppressNavigateAfterEdit` and stopEditing
490
+ // IS the commit. Both override maps key on `CustomRendererType || dataType`, both handlers
491
+ // take an undocumented third argument, and `charPress` is delivered as `keyPress`. A patch
492
+ // because nothing gained a capability — but it changes a signature user code compiles
493
+ // against, so the artifact version records it.
494
+ //
495
+ // 3.1.2 — the dev harness classified columns from `AttributeType` alone, which carries no
496
+ // `Format`: Email/URL/Phone columns were dispatched as 'Text', every DateOnly column as
497
+ // 'DateAndTime', and multi-select choice columns (AttributeType 'Virtual') as 'Text'. So the
498
+ // harness exercised the wrong override handler — the one failure mode it exists to prevent.
499
+ // Now resolved from AttributeTypeName + a per-type Format cast, against a live-org measured
500
+ // table. Patch: no new capability, and the emitted control is unchanged.
501
+ templateVersion: '3.1.2',
488
502
  available: true,
489
503
  },
490
504
  {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/artifacts/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/artifacts/registry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@khester/create-dynamics-app",
3
- "version": "3.4.0",
3
+ "version": "3.4.2",
4
4
  "license": "MIT",
5
5
  "description": "Unified CLI to scaffold Dynamics 365 / Power Platform artifacts",
6
6
  "main": "dist/index.js",
@@ -23,10 +23,11 @@
23
23
  "test:e2e": "tsc --noEmit -p tsconfig.e2e.json && vitest run --config vitest.e2e.config.ts",
24
24
  "typecheck": "tsc --noEmit",
25
25
  "lint": "eslint src --ext .ts,.tsx",
26
- "clean": "rimraf dist tsconfig.tsbuildinfo"
26
+ "clean": "rimraf dist tsconfig.tsbuildinfo",
27
+ "check:published-templates": "node scripts/check-published-template-drift.mjs"
27
28
  },
28
29
  "dependencies": {
29
- "@dataverse-kit/export-engine": "^1.34.1",
30
+ "@dataverse-kit/export-engine": "^1.34.4",
30
31
  "@khester/dynamics-ui-components": "^1.0.0",
31
32
  "chalk": "^5.3.0",
32
33
  "commander": "^11.1.0",
@@ -25,8 +25,8 @@ npm run build # pcf-scripts build → out/controls/{{componentName}}/
25
25
  `npm start` (the stock `pcf-scripts` harness) will load the control and show a **blank
26
26
  canvas**. That is correct, not a bug: the harness has no OneGrid, so nothing ever calls the
27
27
  overrides. `npm run dev` runs a stand-in grid that calls the RENDERER overrides exactly as the platform
28
- does. (Edit mode dispatches the editor overrides by the same rules, but commit fidelity is
29
- unverified — see Edit mode below.)
28
+ does. (Edit mode dispatches the editor overrides by the same rules; see Edit mode below for what
29
+ it does and does not prove.)
30
30
 
31
31
  ## Local development
32
32
 
@@ -64,11 +64,13 @@ With the shipped config nothing is opted in, so every cell falls through to a pl
64
64
  a column logical name in **Progress columns** and that column's `Decimal` cells become the
65
65
  clamped `SpinButton` from `CellEditorOverrides.tsx` instead.
66
66
 
67
- > ⚠️ **What edit mode does NOT prove.** The platform owns commit. This harness treats
68
- > `defaultProps.onChange` as authoritative and writes straight to its own row data; a real grid
69
- > also has `editorParams.onCellValueChanged` and `stopEditing`, and which of those actually
70
- > persists a value to Dataverse has not been verified against a live editable grid. Edit mode
71
- > proves your editor is *reached, keyed and narrowed* correctly — not that the write lands.
67
+ > ⚠️ **What edit mode does and does not prove.** The **naming** is settled: `defaultProps.onChange`
68
+ > *is* `editorParams.onCellValueChanged` — one function, two names. But it **stages** a value;
69
+ > **`stopEditing` is what commits** (`getValue()` → `saveNewValue()` → `setDataValue`). So calling
70
+ > `onChange` alone defers the commit to the end of the edit session, while also calling
71
+ > `stopEditing()` flushes immediately — a real behavioural difference under cancel. Edit mode
72
+ > shows you the handler is reached, keyed and narrowed; it cannot show you commit timing, and it
73
+ > cannot show the Dataverse round-trip.
72
74
 
73
75
  ## Customizing it
74
76
 
@@ -15,7 +15,7 @@ import type {
15
15
  * to customize during local development.
16
16
  *
17
17
  * ★ Its whole value is that it calls the overrides EXACTLY the way the real grid does:
18
- * - looks the handler up by the column's `ColumnDataType`, never by its logical name;
18
+ * - looks the handler up by `CustomRendererType || ColumnDataType`, never by logical name;
19
19
  * - passes `(CellRendererProps, GetRendererParams)`, with `colDefs` + `columnIndex` so a
20
20
  * handler can narrow to one column;
21
21
  * - treats a `null`/`undefined` return as "use the default renderer" rather than as an
@@ -30,16 +30,17 @@ import type {
30
30
  * without it that half of the contract had never been executed anywhere — the map shipped
31
31
  * empty, the only example lived in a docblock, and "it typechecks" was the whole of its
32
32
  * coverage. Edit mode dispatches editors by the same rules as renderers:
33
- * - keyed by `ColumnDataType`, never by column name;
33
+ * - keyed by `CustomRendererType || ColumnDataType` (never by column NAME);
34
34
  * - `(CellEditorProps, GetEditorParams)`, with `colDefs` + `columnIndex` for narrowing;
35
35
  * - `undefined` means "use the platform's own editor", NOT "render nothing".
36
36
  * ⚠️ The double-click GESTURE is the harness's own invention — the platform also has a
37
- * type-to-edit path that seeds `charPress`, which this never populates.
37
+ * type-to-edit path that seeds `keyPress`, which this never populates.
38
38
  *
39
- * ⚠️ What it CANNOT tell you: whether the real grid commits the value the way this does. The
40
- * platform owns commit (`onChange` vs `onCellValueChanged` vs `stopEditing`) and none of that
41
- * is observable here. Edit mode proves the map is reached, keyed and narrowed correctly; it
42
- * does not prove a write lands in Dataverse.
39
+ * ⚠️ What it CANNOT tell you: COMMIT TIMING. In the platform, `onChange` only stages a value and
40
+ * `stopEditing` flushes it (`getValue()` → `saveNewValue()` → `setDataValue`); this harness
41
+ * commits straight to its own row data on `onChange`, so it cannot show you the difference
42
+ * between deferring to session end and flushing immediately — nor the Dataverse round-trip.
43
+ * Edit mode proves the map is reached, keyed and narrowed. Nothing more.
43
44
  */
44
45
 
45
46
  /** One column of the fake grid: the platform's `ColumnDefinition` plus a display width. */
@@ -50,8 +51,13 @@ export interface HarnessColumn {
50
51
  width?: number;
51
52
  /** Per-column editability. The platform sets this from metadata/security, not per grid. */
52
53
  editable?: boolean;
54
+ /** ★ Takes PRECEDENCE over `dataType` in the override lookup, exactly as the platform does. */
55
+ customRendererType?: string;
53
56
  }
54
57
 
58
+ /** Stand-in for the platform's localized strings — the undocumented third handler argument. */
59
+ const HARNESS_LOCALIZED_STRINGS: Record<string, unknown> = {};
60
+
55
61
  /** One cell: the raw value the platform would pass, and the text it would have painted. */
56
62
  export interface HarnessCell {
57
63
  raw: unknown;
@@ -126,6 +132,8 @@ export const MockGrid: React.FC<MockGridProps> = ({
126
132
  name: c.name,
127
133
  displayName: c.displayName,
128
134
  dataType: c.dataType,
135
+ // Surfaced so a handler narrowing through colDefs sees what the LOOKUP used.
136
+ CustomRendererType: c.customRendererType,
129
137
  isPrimary: i === 0,
130
138
  }));
131
139
 
@@ -186,8 +194,13 @@ export const MockGrid: React.FC<MockGridProps> = ({
186
194
  rowData: { __rec_id: String(rowIndex) },
187
195
  };
188
196
 
189
- const handler = overrides[col.dataType];
190
- const custom = handler ? handler(props, params) : undefined;
197
+ // ★ Composite key, as the platform does: `CustomRendererType || dataType`.
198
+ // Keying on dataType alone silently misses a column that declares one.
199
+ const rKey = (col.customRendererType || col.dataType) as ColumnDataType;
200
+ const handler = overrides[rKey];
201
+ // ★ Third argument: the platform passes its localized strings. Undocumented,
202
+ // but a handler that reads it must not receive `undefined` here by accident.
203
+ const custom = handler ? handler(props, params, HARNESS_LOCALIZED_STRINGS) : undefined;
191
204
 
192
205
  let content: React.ReactNode;
193
206
  if (isEditing) {
@@ -200,10 +213,15 @@ export const MockGrid: React.FC<MockGridProps> = ({
200
213
  rowHeight,
201
214
  columnDataType: col.dataType,
202
215
  isRequired: false,
203
- charPress: null,
216
+ // ★ `keyPress` is what the platform delivers; `charPress` is not sent.
217
+ keyPress: null,
204
218
  // The documented commit path. The harness treats it as authoritative and
205
219
  // writes straight through to the row data.
206
220
  onChange: commit,
221
+ // The platform surfaces the flush on the props too. Without it, a handler
222
+ // following the docs and calling `defaultProps.onStopEditing?.()` would hit a
223
+ // silent no-op here — editor never closes, nothing commits.
224
+ onStopEditing: () => stopEditing(),
207
225
  };
208
226
  const editorParams: GetEditorParams = {
209
227
  colDefs,
@@ -214,9 +232,10 @@ export const MockGrid: React.FC<MockGridProps> = ({
214
232
  rowData: { __rec_id: String(rowIndex) },
215
233
  stopEditing,
216
234
  };
217
- const editorHandler = editorOverrides?.[col.dataType];
235
+ const eKey = (col.customRendererType || col.dataType) as ColumnDataType;
236
+ const editorHandler = editorOverrides?.[eKey];
218
237
  const customEditor = editorHandler
219
- ? editorHandler(editorProps, editorParams)
238
+ ? editorHandler(editorProps, editorParams, HARNESS_LOCALIZED_STRINGS)
220
239
  : undefined;
221
240
 
222
241
  content = (
@@ -13,8 +13,10 @@ import type { HarnessColumn, HarnessRow } from './MockGrid';
13
13
  * value cannot work — a Currency and a Decimal are both `number` over the wire, a Picklist
14
14
  * and an Integer are both `number`, a DateOnly and a DateAndTime are both strings — so the
15
15
  * harness would exercise the wrong handler (or none) and tell you nothing. It therefore
16
- * reads the real `AttributeType` from entity metadata, the same classification the platform
17
- * uses when it decides which override to call.
16
+ * reads the real column classification from entity metadata, the same one the platform uses when
17
+ * it decides which override to call. ⚠️ That is `AttributeTypeName` + `Format` — NOT `AttributeType`
18
+ * alone, which carries no Format and cannot separate Email/URL/Phone from Text, DateOnly from
19
+ * DateAndTime, or a multi-select choice column from any other `Virtual` attribute.
18
20
  *
19
21
  * All calls go through the same-origin `/api/data` proxy in `vite.config.ts`, which injects
20
22
  * the bearer token server-side — no token ever reaches the browser. READ-ONLY: the harness
@@ -23,7 +25,15 @@ import type { HarnessColumn, HarnessRow } from './MockGrid';
23
25
 
24
26
  export type { HttpError } from '@dataverse-kit/pcf-dev-harness/shell';
25
27
 
26
- /** What the grid contract calls a column, keyed by Dataverse's `AttributeTypeCode`. */
28
+ /**
29
+ * What the grid contract calls a column, keyed by Dataverse's `AttributeTypeCode`.
30
+ *
31
+ * ⚠️ `AttributeType` ALONE is not sufficient, and three entries here were wrong until
32
+ * 2026-08-11 because of it — see `FORMAT_TO_COLUMN_TYPE` and `resolveColumnType` below.
33
+ * `AttributeType` carries no `Format`, so it cannot separate `Email`/`URL`/`Phone` from
34
+ * `Text`, nor `DateOnly` from `DateAndTime`; and a multi-select choice column reports
35
+ * `Virtual`, which this table used to map to `Text`.
36
+ */
27
37
  const ATTRIBUTE_TYPE_TO_COLUMN_TYPE: Readonly<Record<string, ColumnDataType>> = {
28
38
  // The three that actually drive this template's overrides.
29
39
  Picklist: 'OptionSet',
@@ -37,17 +47,78 @@ const ATTRIBUTE_TYPE_TO_COLUMN_TYPE: Readonly<Record<string, ColumnDataType>> =
37
47
  // is dispatched correctly without touching this file.
38
48
  Integer: 'Integer',
39
49
  BigInt: 'Integer',
40
- String: 'Text',
50
+ String: 'Text', // refined by Format — see FORMAT_TO_COLUMN_TYPE
41
51
  Memo: 'TextArea',
42
- DateTime: 'DateAndTime',
52
+ DateTime: 'DateAndTime', // refined by Format — a DateOnly column keys 'DateOnly'
43
53
  Lookup: 'Lookup',
44
54
  Customer: 'Customer',
45
55
  Owner: 'Owner',
46
- Virtual: 'Text',
56
+ // ⚠️ `Virtual` covers MORE than multi-select: ImageType and FileType are Virtual too, and
57
+ // 'Image' is both a ColumnDataType member and a live generator key — so an image column is
58
+ // still classified 'Text' here and will exercise the wrong handler. NOT measured, so it is
59
+ // recorded rather than guessed at; measure before mapping it (cf. TickerSymbol).
60
+ Virtual: 'Text', // refined by AttributeTypeName — MultiSelectPicklistType keys 'MultiSelectPicklist'
47
61
  Uniqueidentifier: 'Text',
48
62
  EntityName: 'Text',
49
63
  };
50
64
 
65
+ /**
66
+ * ★★ `Format` → `ColumnDataType`, **measured against a live org** (`orge2e285aa`, 2026-08-11) by
67
+ * binding a diagnostic customizer that renders the key OneGrid dispatched under into the cell.
68
+ * This is not inferred from the union's member names.
69
+ *
70
+ * ```
71
+ * String Format=Text -> Text Memo Format=TextArea -> TextArea
72
+ * String Format=Email -> Email DateTime DateOnly -> DateOnly
73
+ * String Format=Url -> URL DateTime DateAndTime -> DateAndTime
74
+ * String Format=Phone -> Phone MultiSelectPicklist -> MultiSelectPicklist
75
+ * String Format=TickerSymbol -> Text ★ NOT 'Ticker'
76
+ * ```
77
+ *
78
+ * ★ **`TickerSymbol` is why this table is measured rather than derived.** `Ticker` IS a member of
79
+ * `ColumnDataType`, so the obvious mapping — `TickerSymbol → 'Ticker'` — is the one any reasonable
80
+ * person would write. The platform dispatches those columns as **`Text`**. Every other format in
81
+ * the set mapped to the name you would guess; this one did not, and nothing short of asking the
82
+ * platform would have revealed it. Absent formats therefore fall back to the `AttributeType`
83
+ * mapping rather than being guessed from their name.
84
+ *
85
+ * ⚠️ `PhoneticGuide` is a real `Format` (on `yominame`) and is deliberately absent: it was not
86
+ * measured, so it falls back to `Text` via `AttributeType` instead of being guessed at.
87
+ */
88
+ const FORMAT_TO_COLUMN_TYPE: Readonly<Record<string, ColumnDataType>> = {
89
+ Email: 'Email',
90
+ Url: 'URL',
91
+ Phone: 'Phone',
92
+ TextArea: 'TextArea',
93
+ DateOnly: 'DateOnly',
94
+ DateAndTime: 'DateAndTime',
95
+ // ⚠️ `Text` is deliberately ABSENT. A String with Format=Text already resolves to 'Text' via
96
+ // AttributeType, and a **Memo** with Format=Text (a real maker choice — MemoFormatName offers
97
+ // Text or RichText) must resolve to 'TextArea', which only the AttributeType fallback gets
98
+ // right. Adding `Text: 'Text'` here silently reclassifies every rich-text/notes column.
99
+ };
100
+
101
+ /**
102
+ * The platform's classification for one column.
103
+ *
104
+ * Precedence, and each step exists because a real column needs it:
105
+ * 1. `AttributeTypeName` for the **Virtual** case — a multi-select choice column reports
106
+ * `AttributeType: 'Virtual'` and `AttributeTypeName.Value: 'MultiSelectPicklistType'`. The
107
+ * legacy `AttributeType` enum has no `MultiSelectPicklist` member at all, so a test against it
108
+ * never matches. (Same trap as the option-set metadata cast in `pcf-field`.)
109
+ * 2. `Format`, which separates Email/URL/Phone from Text and DateOnly from DateAndTime.
110
+ * 3. `AttributeType`, for everything whose type alone is decisive.
111
+ */
112
+ function resolveColumnType(meta: AttributeMetadata | undefined): ColumnDataType {
113
+ if (!meta) return 'Text';
114
+ if (meta.AttributeTypeName?.Value === 'MultiSelectPicklistType') return 'MultiSelectPicklist';
115
+ // Only `Format` is ever populated here: `fetchColumnTypes` merges the cast read in under
116
+ // that name, and `FormatName` cannot come back from the uncast collection (it 400s).
117
+ const format = meta.Format;
118
+ if (format && FORMAT_TO_COLUMN_TYPE[format]) return FORMAT_TO_COLUMN_TYPE[format];
119
+ return ATTRIBUTE_TYPE_TO_COLUMN_TYPE[meta.AttributeType] ?? 'Text';
120
+ }
121
+
51
122
  /**
52
123
  * ★ Lookup-typed columns are mapped above but cannot be LOADED by this harness. Dataverse
53
124
  * requires the `_<name>_value` form in `$select` for a lookup, while the metadata call wants
@@ -60,9 +131,66 @@ const ATTRIBUTE_TYPE_TO_COLUMN_TYPE: Readonly<Record<string, ColumnDataType>> =
60
131
  interface AttributeMetadata {
61
132
  LogicalName: string;
62
133
  AttributeType: string;
134
+ /** Present only on the derived types, via a cast — see `fetchAttributeFormats`. */
135
+ Format?: string;
136
+ FormatName?: { Value: string };
137
+ AttributeTypeName?: { Value: string };
63
138
  DisplayName?: { UserLocalizedLabel?: { Label?: string } | null } | null;
64
139
  }
65
140
 
141
+ /**
142
+ * `LogicalName` → `Format`, for the attribute types that have one.
143
+ *
144
+ * ★★ **`Format` and `FormatName` are NOT properties of `AttributeMetadata`.** Selecting either on
145
+ * the uncast `/Attributes` collection is a **400**, not a silent `undefined` — the platform's own
146
+ * words: *"Could not find a property named 'FormatName' on type
147
+ * 'Microsoft.Dynamics.CRM.AttributeMetadata'."* They exist only on the derived types, reached
148
+ * through a cast. (A declared property is not a fetched one; the TypeScript interface above
149
+ * declares both, and declaring them is what makes the mistake look wired.)
150
+ *
151
+ * ⚠️ **Which property differs BY TYPE, and getting it uniform is a 400:**
152
+ * ```
153
+ * String / Memo -> FormatName (Format also present, same values)
154
+ * DateTime -> Format ONLY; FormatName does not exist and 400s
155
+ * ```
156
+ *
157
+ * Three COLLECTION-level casts merged by `LogicalName` — 3 requests for the whole table, not the
158
+ * per-attribute N+1 a naive version would do. Never throws: a metadata enrichment that fails must
159
+ * not fail the grid, it just falls back to the `AttributeType` mapping.
160
+ */
161
+ async function fetchAttributeFormats(logicalName: string): Promise<Map<string, string>> {
162
+ const casts: [string, 'FormatName' | 'Format'][] = [
163
+ ['StringAttributeMetadata', 'FormatName'],
164
+ ['MemoAttributeMetadata', 'FormatName'],
165
+ ['DateTimeAttributeMetadata', 'Format'],
166
+ ];
167
+ const out = new Map<string, string>();
168
+ await Promise.all(
169
+ casts.map(async ([castType, prop]) => {
170
+ try {
171
+ const res = await apiFetch(
172
+ `/api/data/v9.2/EntityDefinitions(LogicalName='${logicalName}')/Attributes/Microsoft.Dynamics.CRM.${castType}?$select=LogicalName,${prop}`,
173
+ );
174
+ if (!res.ok) {
175
+ // ★ Not silent: losing this read reverts every date column to 'DateAndTime' and every
176
+ // Email/URL/Phone column to 'Text' — i.e. back to the exact bug this function fixes,
177
+ // in a harness whose only job is to report the key the platform would dispatch.
178
+ console.warn(`[harness] ${castType} format read failed (HTTP ${res.status}); columns of this type fall back to their AttributeType classification.`);
179
+ return;
180
+ }
181
+ const body = (await res.json()) as { value?: AttributeMetadata[] };
182
+ for (const a of body.value ?? []) {
183
+ const v = prop === 'FormatName' ? a.FormatName?.Value : a.Format;
184
+ if (v) out.set(a.LogicalName, v);
185
+ }
186
+ } catch (err) {
187
+ console.warn(`[harness] ${castType} format read threw; falling back to AttributeType.`, err);
188
+ }
189
+ }),
190
+ );
191
+ return out;
192
+ }
193
+
66
194
  /** OData annotation carrying the text the platform itself would paint in the cell. */
67
195
  const FORMATTED = '@OData.Community.Display.V1.FormattedValue';
68
196
 
@@ -94,22 +222,28 @@ async function fetchColumnTypes(
94
222
  logicalName: string,
95
223
  fields: string[],
96
224
  ): Promise<HarnessColumn[]> {
97
- const params = new URLSearchParams({ $select: 'LogicalName,AttributeType,DisplayName' });
98
- const res = await apiFetch(
99
- `/api/data/v9.2/EntityDefinitions(LogicalName='${logicalName}')/Attributes?${params}`,
100
- );
225
+ // ★ `AttributeTypeName` IS selectable on the uncast collection (unlike Format) — it is what
226
+ // separates a multi-select choice column from every other `Virtual` attribute.
227
+ const params = new URLSearchParams({
228
+ $select: 'LogicalName,AttributeType,AttributeTypeName,DisplayName',
229
+ });
230
+ const [res, formats] = await Promise.all([
231
+ apiFetch(`/api/data/v9.2/EntityDefinitions(LogicalName='${logicalName}')/Attributes?${params}`),
232
+ fetchAttributeFormats(logicalName),
233
+ ]);
101
234
  if (!res.ok) throw await toHttpError(res);
102
235
  const body = (await res.json()) as { value?: AttributeMetadata[] };
103
236
 
104
237
  const byName = new Map((body.value ?? []).map((a) => [a.LogicalName, a]));
105
238
  return fields.map((f, i) => {
106
239
  const meta = byName.get(f);
240
+ const format = formats.get(f);
107
241
  return {
108
242
  name: f,
109
243
  displayName: meta?.DisplayName?.UserLocalizedLabel?.Label ?? f,
110
244
  // An unknown or missing attribute falls back to Text — it then renders through the
111
245
  // default path, which is the honest outcome for a column we cannot classify.
112
- dataType: (meta && ATTRIBUTE_TYPE_TO_COLUMN_TYPE[meta.AttributeType]) ?? 'Text',
246
+ dataType: resolveColumnType(meta && format ? { ...meta, Format: format } : meta),
113
247
  width: i === 0 ? 220 : 160,
114
248
  };
115
249
  });
@@ -15,15 +15,32 @@ import { PROGRESS_COLUMNS, PROGRESS_MAX, toNumber } from './config';
15
15
  * renderer, a wrong editor WRITES BAD DATA rather than merely looking wrong. Only `Decimal` is
16
16
  * registered here, and only for the columns you opt in.
17
17
  *
18
- * ⚠️ **Runtime coverage is LOCAL only.** This map is exercised by the dev harness (`npm run dev`
19
- * → Edit mode) and by a unit test that invokes it. It has NOT been driven by a real editable
20
- * grid in an org: doing that needs a live editable subgrid, and the customizer contract's commit
21
- * semantics (`onChange` vs `editorParams.onCellValueChanged` vs `stopEditing`) are therefore
22
- * UNVERIFIED here. This file calls `defaultProps.onChange` because it is the only value-carrying
23
- * callback on `CellEditorProps` — **not** because Microsoft documents it; their editable-grid
24
- * page has no editor sample, and their own reference control returns `null`. If you hit a commit
25
- * that does not stick in an org, that is the first thing to re-check — and please record the
26
- * answer here.
18
+ * ⚠️ **Commit semantics — PARTIALLY resolved, and an earlier revision of this comment got the
19
+ * central point backwards.** Corrected 2026-08-09 after review re-read the bundle one level
20
+ * deeper. What the platform actually does:
21
+ *
22
+ * ```js
23
+ * // the editor wrapper OneGrid registers with ag-Grid
24
+ * _onCellValueChanged = e => { this.value = e }; // STAGES. No write.
25
+ * getValue = () => this.value; // read back at STOP time
26
+ * // ending the session:
27
+ * takeValueFromCellEditor() -> getValue() -> saveNewValue() -> rowNode.setDataValue(…)
28
+ * ```
29
+ *
30
+ * ★★ `defaultProps.onChange` IS `editorParams.onCellValueChanged` (one function, two names) —
31
+ * that part was right. But it **stages**; it does not commit. **`stopEditing` is the flush.**
32
+ *
33
+ * ★★ Therefore the two conventions in this repo are **NOT equivalent**, and the earlier claim
34
+ * that they were is withdrawn:
35
+ * - `onChange` alone (this file) — defers the commit to whenever the grid ends the session;
36
+ * a cancel discards it.
37
+ * - `onChange` + `editorParams.stopEditing()` (export-engine's PA-grid emitter) — commits
38
+ * immediately and deterministically.
39
+ * Which is *wanted* depends on whether an in-progress edit should survive a cancel. Reconciling
40
+ * them is a real open question, not a style difference.
41
+ *
42
+ * ⚠️ Still unobserved: the Dataverse round-trip at the end of the save queue, AND the timing
43
+ * difference above under a real cancel. The dev harness cannot show either.
27
44
  */
28
45
 
29
46
  /** Per-instance knobs, mirroring `RendererOptions` so the harness can retarget the same map. */
@@ -50,7 +67,11 @@ export function createCellEditorOverrides(options: EditorOptions = {}): CellEdit
50
67
  // default, so a scaffold that has not been configured registers this handler and then
51
68
  // falls through on every cell — the editor path is inert until you opt a column in, which
52
69
  // is the conservative default for something that writes.
53
- Decimal: (defaultProps: CellEditorProps, editorParams: GetEditorParams) => {
70
+ Decimal: (
71
+ defaultProps: CellEditorProps,
72
+ editorParams: GetEditorParams,
73
+ customizerLocalizedStrings?: Record<string, unknown>,
74
+ ) => {
54
75
  const name = columnName(editorParams);
55
76
  if (!name || !progressColumns.includes(name)) return undefined;
56
77
 
@@ -61,21 +82,22 @@ export function createCellEditorOverrides(options: EditorOptions = {}): CellEdit
61
82
  //
62
83
  // Do not add `onValidate`: Fluent v8's SpinButton calls `onValidate(entered)` and then
63
84
  // feeds the result through `useControllableValue`, which calls `onChange` as well — so a
64
- // single committed edit fires this twice (measured: typing 900 then blurring commits
65
- // [100, 100]; junk input commits the unchanged value twice). Fluent's built-in validation
66
- // already clamps to `min`/`max`, so the clamp below is defence-in-depth, not the mechanism.
85
+ // single committed edit fires this handler twice. ⚠️ The measured [100, 100] was measured
86
+ // in THIS TEMPLATE'S HARNESS, which commits straight through on `onChange`; against the
87
+ // platform — which only STAGES on `onChange` — the second call is an idempotent
88
+ // re-assignment, not a second write. The prohibition still stands (firing a user callback
89
+ // twice per edit is wrong regardless, and Fluent's built-in validation already clamps, so
90
+ // `onValidate` buys nothing), but not for the reason first recorded.
67
91
  //
68
- // Nor `editorParams.onCellValueChanged` — that is a separate member of the contract and
69
- // firing both risks the same double write.
92
+ // (Calling `editorParams.onCellValueChanged` as well is redundant, not harmful — it is the
93
+ // same function. An earlier revision called that a "double write"; it is an idempotent
94
+ // re-assignment.)
70
95
  //
71
- // ⚠️ Why `onChange` and not one of the others: it is the ONLY value-carrying callback on
72
- // `CellEditorProps` (see ../types.ts). Microsoft's editable-grid page documents no editor
73
- // sample at all — their own PowerAppsGridCustomizerControl ships `return null` — so this
74
- // is inference from the type, not a documented guarantee. See the header caveat.
75
- // ⚠️ `packages/export-engine`'s PA-grid emitter uses a DIFFERENT convention for the same
76
- // undocumented contract (`onChange` followed by `editorParams.stopEditing()`, and empty →
77
- // `onChange(null)`). They disagree; whoever verifies against a live editable grid should
78
- // settle both at once.
96
+ // ★ `onChange` IS `editorParams.onCellValueChanged` (one function, two names), and it
97
+ // STAGES rather than writes — the platform flushes on `stopEditing`. So this handler
98
+ // defers its commit to the end of the edit session. export-engine's emitter instead
99
+ // calls `stopEditing()` to flush immediately; that is a real behavioural difference
100
+ // under cancel, not a style choice. See the header.
79
101
  const commit = (raw?: string): void => {
80
102
  // Empty means "clear the cell", not "re-commit what was there" — matching the
81
103
  // export-engine emitter. Without this a user can never blank an opted-in column.
@@ -89,6 +111,11 @@ export function createCellEditorOverrides(options: EditorOptions = {}): CellEdit
89
111
 
90
112
  return (
91
113
  <SpinButton
114
+ // Consumes the undocumented third argument, so the declared arity is load-bearing and
115
+ // a test can detect it being dropped. Falls back when the platform sends nothing.
116
+ ariaLabel={
117
+ (customizerLocalizedStrings?.percentEditorLabel as string | undefined) ?? 'Percent complete'
118
+ }
92
119
  min={0}
93
120
  max={PROGRESS_MAX}
94
121
  step={5}
@@ -22,7 +22,11 @@ export interface PAOneGridCustomizer {
22
22
  }
23
23
 
24
24
  /**
25
- * ★ Keyed by COLUMN DATA TYPE, never by column logical name.
25
+ * ★ Keyed by `CustomRendererType || ColumnDataType` — never by column logical name.
26
+ *
27
+ * ⚠️ The `CustomRendererType` half is a HAZARD, not a feature: a column declaring one is looked
28
+ * up under that string FIRST, so a `Decimal:` entry silently never fires for it — and the closed
29
+ * `ColumnDataType` union gives you no way to register under it. Identical for editors.
26
30
  *
27
31
  * A `{ statuscode: renderer }` entry silently never fires — `statuscode` is not a
28
32
  * `ColumnDataType`. To scope a renderer to one column, register under its data type and
@@ -35,14 +39,39 @@ export type CellRendererOverrides = {
35
39
  [dataType in ColumnDataType]?: (
36
40
  props: CellRendererProps,
37
41
  rendererParams: GetRendererParams,
42
+ localizedStrings?: Record<string, unknown>,
38
43
  ) => React.ReactElement | null | undefined;
39
44
  };
40
45
 
41
- /** Same keying + fall-through rules as CellRendererOverrides. */
46
+ /**
47
+ * Same fall-through rule as `CellRendererOverrides`, and — contrary to what this file said
48
+ * before 2026-08-09 — the SAME keying. Both maps are looked up as:
49
+ *
50
+ * ```js
51
+ * overrides[colDef.CustomRendererType || colDef.dataType]
52
+ * ```
53
+ *
54
+ * ⚠️ **A column declaring a `CustomRendererType` is looked up under THAT STRING FIRST**, so a
55
+ * `Decimal:` entry silently never fires for it — the exact silent-miss class these docs exist to
56
+ * prevent. You cannot currently register under one: the map is keyed by the closed
57
+ * `ColumnDataType` union. A hazard to know about, not a feature to use.
58
+ *
59
+ * Both handlers also receive an undocumented THIRD argument — renderers get
60
+ * `props.localizedStrings`, editors get `customizerLocalizedStrings`. Different prop names, same
61
+ * idea. Typed loosely; Microsoft publishes no shape for either.
62
+ *
63
+ * ★ SOURCE for everything below: Microsoft's shipped OneGrid bundle, read 2026-08-09.
64
+ * https://content.powerapps.com/resource/uci-infra-web/controlsAssets/PowerAppsOneGrid.1D7C81F.js
65
+ * ⚠️ That filename is CONTENT-HASHED and rotates with every platform update — there is no
66
+ * unhashed alias (the bare name 404s). To re-derive it: open any model-driven grid, then
67
+ * `document.querySelector('script[src*=PowerAppsOneGrid]').src`. Search terms that still
68
+ * locate the logic: `customCellEditor`, `_customCellRenderer`, `takeValueFromCellEditor`.
69
+ */
42
70
  export type CellEditorOverrides = {
43
71
  [dataType in ColumnDataType]?: (
44
72
  defaultProps: CellEditorProps,
45
73
  editorParams: GetEditorParams,
74
+ customizerLocalizedStrings?: Record<string, unknown>,
46
75
  ) => React.ReactElement | null | undefined;
47
76
  };
48
77
 
@@ -90,9 +119,38 @@ export interface CellEditorProps {
90
119
  readonly isRTLMode?: boolean;
91
120
  readonly rowHeight?: number;
92
121
  readonly isRequired?: boolean;
122
+ /** ⚠️ Not delivered under this name — the platform's props literal carries `keyPress`. */
93
123
  readonly charPress?: string | null;
124
+ /** What the platform actually passes for type-to-edit. */
125
+ readonly keyPress?: string | null;
94
126
  readonly columnDataType?: ColumnDataType;
127
+ /**
128
+ * ★★ THE SAME FUNCTION AS `GetEditorParams.onCellValueChanged` — the platform builds these
129
+ * props as `{ …, onChange: m }` where `m = editorParams.onCellValueChanged`. One reference,
130
+ * two names.
131
+ *
132
+ * ★★ **It STAGES a value; it does not write one.** The editor wrapper is literally
133
+ * `_onCellValueChanged = e => { this.value = e }`, and ag-Grid reads it back through
134
+ * `getValue()` only when the edit session ends. Calling it twice is an idempotent
135
+ * re-assignment — noisy, not damaging. (An earlier revision called that a "double write".
136
+ * That was wrong, and so was the claim below it that `stopEditing` is inert.)
137
+ */
95
138
  readonly onChange: (newValue: unknown) => void;
139
+ /**
140
+ * Also surfaced as `GetEditorParams.stopEditing`.
141
+ *
142
+ * ★★ **THIS is the commit.** Ending the session runs `takeValueFromCellEditor()` →
143
+ * `getValue()` → `saveNewValue()` → `rowNode.setDataValue(…)`. Until it happens, whatever
144
+ * `onChange` staged is uncommitted, and a cancel discards it.
145
+ *
146
+ * ⚠️ The boolean is **NOT** `cancel` — it is `suppressNavigateAfterEdit`. `stopEditing(true)`
147
+ * still COMMITS; it only skips post-edit navigation. ⚠️ **A customizer has NO cancel hook.**
148
+ * ag-Grid would consult the editor's `isCancelAfterEnd()`, but the editor here is OneGrid's own
149
+ * wrapper, which does not implement one — your element renders *inside* it with no way to
150
+ * install one. The only cancel is the platform's own Escape handler. Anything wiring
151
+ * `stopEditing(true)` to Escape is committing, not cancelling.
152
+ */
153
+ readonly onStopEditing?: (suppressNavigateAfterEdit?: boolean) => void;
96
154
  }
97
155
 
98
156
  export interface GetEditorParams {
@@ -100,7 +158,7 @@ export interface GetEditorParams {
100
158
  readonly columnIndex: number;
101
159
  readonly onCellValueChanged: (newValue: unknown) => void;
102
160
  readonly rowData?: RowData;
103
- readonly stopEditing: (cancel?: boolean) => void;
161
+ readonly stopEditing: (suppressNavigateAfterEdit?: boolean) => void;
104
162
  }
105
163
 
106
164
  export interface GetHeaderParams {