@object-ui/plugin-list 17.5.0 → 17.6.0

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,418 @@
1
1
  # @object-ui/plugin-list
2
2
 
3
+ ## 17.6.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 0a73b51: `ObjectView` and `ListView` now flatten a view's `map` block through a
8
+ whitelist instead of spreading the whole (untyped) block to the top level.
9
+
10
+ Both `case 'map'` flatteners used to build the `object-map` schema with
11
+ `...(options.map || {})` — a raw spread of an untyped bag
12
+ (`NamedListView.options?: Record<string, any>`), so any key an author wrote in
13
+ the `map` block reached the top level unfiltered. `ObjectMap`'s own
14
+ `FlatMapConfigKeys = Omit<ObjectMapConfig, 'style'>` declares `style` OUT of
15
+ this flat form (`style` is also `BaseSchema.style`, inline CSS legal on every
16
+ node), so the two disagreed about the same shape. `style` was the live
17
+ specimen: `map: { style: '<url>' }` reached the top level as a CSS-shaped
18
+ `style` key it was never supposed to carry.
19
+
20
+ Behavior narrowing, stated because it changes what reaches the flattened
21
+ schema: a `map` block key that is not one of `ObjectMapConfig`'s declared
22
+ flat keys (`latitudeField` / `longitudeField` / `locationField` / `titleField`
23
+ / `descriptionField` / `zoom` / `center`) — including `style` — no longer
24
+ reaches the top level of the flattened `object-map` schema. This closes a gap
25
+ rather than removing working behavior: the pinned strict spec view schemas
26
+ accept no `map` block at all today, so no author-facing surface could reach
27
+ this path, and `ObjectMap` already stopped reading a top-level `style` as a
28
+ map style (a dev warning names the correct spelling instead).
29
+
30
+ The whitelist is DERIVED from `ObjectMapConfigSchema` (`@object-ui/types/zod`)
31
+ rather than hand-listed, so the flatteners and the declaration cannot drift
32
+ apart again — a key added to (or removed from) the schema reaches both
33
+ flatteners without a second edit. `ObjectMap`'s own `FLAT_MAP_CONFIG_KEYS` is
34
+ derived from the same schema for the same reason.
35
+ - f1d4748: Remove the retired `striped` / `bordered` / `virtualScroll` list-view surface
36
+
37
+ objectstack#7176 retired `list.striped`, `list.bordered` and `list.virtualScroll`
38
+ from the spec after measuring every objectui reader as pass-through: each one
39
+ copied the key onward and no renderer ever applied it. objectui stops declaring,
40
+ typing and forwarding them.
41
+
42
+ Off the chain: the `@objectstack/spec` list-view bridge in `@object-ui/react`,
43
+ `ListView`'s child-view props in `@object-ui/plugin-list`, both `ObjectView`
44
+ relays (`@object-ui/plugin-view` and `@object-ui/app-shell`), the `ObjectGridSchema`
45
+ and `NamedListView` declarations in `@object-ui/types` (interface and zod),
46
+ `ObjectGrid.component.yml` in `@object-ui/components`, and the page-block
47
+ inspector's `striped` / `bordered` toggles in the metadata-admin designer.
48
+
49
+ Behaviour is unchanged: nothing read these keys, so nothing rendered differently
50
+ for them. Stored view metadata that still carries one keeps validating — the keys
51
+ are simply no longer relayed. `ListViewSchema` continues to take the spec's
52
+ list-view fields by reference, so the protocol's own retirement tombstones
53
+ arrive with the next `@objectstack/spec` bump and reject the keys at the
54
+ authoring boundary. Restoring any of the three as live surface requires an
55
+ implementation card filed first, per the ruling.
56
+ - b1119ec: Project every declared `recordIdField`, and refuse an action that names no record
57
+
58
+ objectstack#8018. An `api` action declaring `recordIdParam` identifies the record
59
+ it acts on by a row field — `recordIdField`, default `id`. The grid built
60
+ `$select` from the listView columns, `id` and the predicate refs only, so an
61
+ action keyed on any other field asked the server for everything except the key
62
+ naming its own record. The row arrived without it, and the injection was skipped
63
+ silently: the request went out anyway, minus the parameter. A backend reading a
64
+ missing selector as "match nothing" then answers success for having changed
65
+ nothing, so a record-scoped mutation reports success and does nothing.
66
+
67
+ Two independent repairs, both in this change:
68
+
69
+ - **Projection.** `listViewPredicates` (`@object-ui/core`) now also harvests
70
+ `recordIdField` from `rowActionDefs`, `bulkActionDefs` and the object's
71
+ `actions`, spelled as a synthetic `record.<name>` so the one existing harvester
72
+ handles it. Both projection builders — `ObjectGrid` and `ListView` — read that
73
+ function, so both gain the key with no call-site change. The existing guards
74
+ still apply: a name the object does not declare, or one that is not a bare
75
+ identifier, is dropped rather than put in `$select`, because an unknown key
76
+ there is not ignored by every backend.
77
+ - **Loud failure.** New `resolveRecordIdParamSeed` (`@object-ui/core`) is the one
78
+ definition of "can this row identify the record?". `useConsoleActionRuntime`'s
79
+ api handler now refuses the dispatch — `{ success: false, error }`, before the
80
+ request — when the row lacks the key, or holds `null` for it. The two refusals
81
+ are worded differently because they point at different repairs: an absent key
82
+ is a projection or read-visibility problem, a null value is a data one. Falsy
83
+ real values (`0`, `''`, `false`) are values and still dispatch.
84
+
85
+ The second half is what closes the class rather than the common case: a row can
86
+ lack the key for reasons projection cannot fix — a server-side read mask that
87
+ strips the field regardless of `$select`, a partial payload, a field the
88
+ principal cannot read.
89
+
90
+ Behaviour change worth noting: an action that previously dispatched an
91
+ under-specified request now fails visibly instead. That is the point — the old
92
+ path could not report the failure it was causing.
93
+
94
+ ### Patch Changes
95
+
96
+ - 516663d: RecordAttachmentsPanel no longer offers a Retry for an api-disabled `sys_attachment` read.
97
+
98
+ `OBJECT_API_DISABLED` (404, `enable.apiEnabled: false`) and its sibling
99
+ `OBJECT_API_METHOD_NOT_ALLOWED` (405, the operation is absent from
100
+ `enable.apiMethods`) are pure functions of the object's metadata — no user, no
101
+ session, no request body — so every retry of every persona re-fetches the
102
+ identical refusal. Before this change both landed in `RecordAttachmentsPanel`'s
103
+ `unavailable` state and offered a Retry that was guaranteed to change nothing,
104
+ the same wrong advice `ListView`'s error panel already stops giving for list
105
+ reads.
106
+
107
+ The panel gains a fifth status, `api-unavailable`: no Retry button, and honest
108
+ copy ("The attachments list is not available on this object.", new
109
+ `detail.attachmentsApiUnavailable` key in all ten locale packs) instead of
110
+ "We couldn't load the attachments for this record." The pre-existing `denied`
111
+ (authorization) and `unavailable` (network/5xx/expired-session) states and
112
+ their affordances are unchanged.
113
+
114
+ `ListView.classifyLoadError` — the classifier that already separated this case
115
+ into its own `api-disabled` kind for list views — is lifted out of
116
+ `packages/plugin-list/src/ListView.tsx`'s module scope into
117
+ `@object-ui/react` (`classifyLoadError`, `LoadErrorKind`), so both surfaces
118
+ consume one classification instead of `RecordAttachmentsPanel` re-deriving it.
119
+ `ListView`'s own behavior is unchanged — it now imports the function it
120
+ previously defined locally. The classifier delegates its api-disabled check to
121
+ `isApiAccessDeniedError` (`@object-ui/data-objectstack`), removing a second,
122
+ independently-maintained copy of the same code list.
123
+ - a1609a6: Console list filters: a `between` range is submitted only when both bounds are filled, and six operator labels stop rendering as raw i18n keys.
124
+
125
+ Two defects in the list-view filter panel (objectstack#8815), both in the Console
126
+ render layer, with no workaround available downstream.
127
+
128
+ **A half-filled range no longer refuses the whole view.** Picking a date column
129
+ and 「介于」 draws two inputs — that part landed in objectui#3958 — but typing
130
+ only one bound produced `["2024-01-01", ""]`, and both write paths read "is this
131
+ row filled in?" with one shape-blind predicate (`null` / `''` / empty array).
132
+ An array of length 2 passed it, so the empty bound went to the server, which
133
+ refuses the query outright (`400 INVALID_FILTER`): the list showed
134
+ 「该视图的查询被拒绝」 and the filters the user had already applied stopped
135
+ applying too. The saved-view fold persisted the same half-range, so the refusal
136
+ came back on every later read of that view, for every user of it.
137
+
138
+ The spec cannot intercept this — `ViewFilterRuleSchema` accepts
139
+ `["2024-01-01", ""]` because it counts the two slots rather than what is in
140
+ them, while refusing a scalar or a one-element array. Authoring validation is
141
+ therefore green on exactly the shape that fails at query time, which makes not
142
+ emitting it the producer's job. `@object-ui/components` now exports
143
+ `isFilterValueComplete(operator, value)` — arity-aware, so a `pair` row needs
144
+ both bounds — and the two consumers that had each kept a copy of the old
145
+ predicate (`plugin-list`'s `convertFilterGroupToAST`, `app-shell`'s
146
+ `foldFilterGroupToSpecRules`) read it instead. A half-filled range is now
147
+ dropped exactly as a half-typed `equals` row already was: no filter, rather than
148
+ a filter the server will reject. Bounds of `0` and `false` stay real bounds.
149
+
150
+ **Six operator labels are translated in all ten locale packs.**
151
+ `startsWith`, `endsWith`, `isNull`, `isNotNull`, `exists` and `notExists` were
152
+ missing from every pack, so i18next resolved them to the raw key and the dropdown
153
+ showed `filterBuilder.operators.isNull` beside translated entries. The
154
+ component's own defaults table could not cover it: that table serves only the
155
+ no-provider path, and the Console mounts a provider. The report named four —
156
+ a `date` column's bucket offers the four nullness operators; a `text` column
157
+ showed all six.
158
+
159
+ Because the label key is built dynamically (`t(\`filterBuilder.operators.${op}\`)`),
160
+ no existing gate could see the gap: the call-site checker classifies a template
161
+ key as `missing-prefix` and only asks whether the prefix resolves, and
162
+ cross-pack parity is satisfied when all ten packs are missing a key together.
163
+ A new parity test pins the packs against `FILTER_BUILDER_OPERATORS` in both
164
+ directions, so an operator added to the dropdown now fails loudly until every
165
+ pack labels it.
166
+ - c1ef923: Grid and related-list column headers no longer offer a sort on a `formula` column.
167
+
168
+ A `formula` value is computed on read: no driver materialises a column for it, so
169
+ a server `$orderby` naming one has nothing to order by. That sort never worked.
170
+ Until objectstack#6994 the platform did not say so — the response carried the very
171
+ values it had been asked to order by, out of order, under a `200`, with ascending
172
+ and descending byte-identical on a real SQL driver — and it now answers
173
+ `400 INVALID_SORT`. So the header was wrong before the platform's refusal and is
174
+ wrong after it, for the same reason: it offers a sort that cannot be performed.
175
+
176
+ `ObjectGrid` withheld the affordance only from reference-bearing columns
177
+ (objectui#3096). Unmaterialized types are a SECOND reason a server sort is
178
+ impossible, not a different mechanism, so it now reads both — and so do the two
179
+ sort entry points of a related list (the embedded table's headers and the
180
+ sort-button row a `data-list` card keeps), which each derived that rule
181
+ separately.
182
+
183
+ Client-side sorting is deliberately unchanged. There the rows are all in the
184
+ browser and the formula value is the one the server hydrated on read, so ordering
185
+ by what the cell shows is honest — the same split the relational carve-out makes.
186
+ A sort DECLARED in view metadata is also unchanged: it still goes out and is still
187
+ refused by name, because silently dropping an author's declaration would hide the
188
+ authoring error instead of surfacing it (the toolbar's sort picker keeps such a
189
+ field listed for exactly that reason — it is the only way to remove it).
190
+
191
+ The membership — `formula` alone — moved out of a private set in `ListView` into
192
+ `@object-ui/core` (`UNMATERIALIZED_FIELD_TYPES` / `isUnmaterializedFieldType`),
193
+ bound to `@objectstack/spec`'s own storage predicate so the renderer cannot drift
194
+ from what the drivers actually store. It is deliberately narrower than the spec's
195
+ write contract `COMPUTED_VALUE_TYPES`: a `summary` and an `autonumber` each get a
196
+ real maintained column and sort correctly, and withholding their headers would
197
+ have broken two affordances that work.
198
+ - 616a2a5: The list filter builder no longer offers `Is set` / `Is not set`, which its query dialects cannot express.
199
+
200
+ **User-visible before/after.** The operator dropdown in the list toolbar's
201
+ filter popover — and in the Studio view/tab/page filter inspectors, the dataset
202
+ inspector and the generic `filter` config field — loses two rows: **"Is set"**
203
+ and **"Is not set"**. The sharing-rule criteria builder (`FilterConditionField`)
204
+ keeps both, unchanged. `Is null` / `Is not null` and `Is empty` / `Is not empty`
205
+ are untouched everywhere and remain the way to filter on a missing value from
206
+ the list.
207
+
208
+ Nothing that worked stops working. Every save path behind those two rows was
209
+ already broken, in three different ways depending on the surface:
210
+
211
+ - **Live grid** — `ListView.mapOperator` had no row for either id, so its
212
+ `default:` arm returned the id verbatim and the query went out as
213
+ `['name', 'exists', 'x']`. `exists` is not a member of the spec's
214
+ `VALID_AST_OPERATORS`, so `isFilterAST()` rejects the shape: an unfiltered
215
+ read or a 400, never the filter the user asked for.
216
+ - **Save as view** — `foldFilterGroupToSpecRules` normalizes through the spec's
217
+ `normalizeFilterOperator`, which does not know the pair, and
218
+ `ViewFilterRuleSchema`'s enum then refuses the rule.
219
+ - **Dataset inspector** — `groupToCondition` has no row either and drops the
220
+ condition silently, so the filter simply never applied.
221
+
222
+ **Why withheld rather than mapped.** Measured on `@objectstack/spec`
223
+ 17.0.0-rc.6: neither `VIEW_FILTER_OPERATORS` nor `VALID_AST_OPERATORS` contains
224
+ an existence operator, under any spelling — both sets have zero members matching
225
+ `/exist/`. Only the MongoDB-style `FieldOperatorsSchema` criteria carries
226
+ `$exists`, and that is precisely the dialect `FilterConditionField` writes, so
227
+ the pair moves behind the existing `OPT_IN_OPERATORS` gate and that widget opts
228
+ in. Collapsing them onto `isNotNull` / `isNull` was rejected: the builder
229
+ already draws those as their own rows, the round trip is lossy (a saved
230
+ `exists` reads back as `isNotNull`), and the spec's own note records `$exists` =
231
+ has-value as still unsettled across drivers — `driver-memory`'s live mingo path
232
+ and `driver-mongodb` read key-presence.
233
+
234
+ **The class is now closed by an assertion, not by discipline.** objectui's three
235
+ existing operator-parity guards all sweep spec vocabulary → objectui; none asked
236
+ whether an id the dropdown draws is an id the consumer can persist, which is the
237
+ direction that broke. `plugin-list`'s new
238
+ `list-offered-operator-expressible-parity.test.ts` forces the set the list
239
+ toolbar offers to **equal** the set its two dialects can express, in both
240
+ directions — so an unexpressible operator cannot be offered, and an operator
241
+ that becomes expressible upstream cannot stay needlessly withheld.
242
+ - dfc6975: Related-list "+ New" now honours `userActions.create` predicates, and the grid
243
+ toolbar's inline-edit affordance is gated on `update` permission (objectui#4646,
244
+ objectui#4647).
245
+
246
+ Two declared-but-unenforced gaps on the same toolbar surface.
247
+
248
+ **#4646 — `createPredicates` had a producer and no consumer.**
249
+ `@objectstack/spec@17.0.0` widened `userActions.create` to
250
+ `z.union([z.boolean(), RowCrudActionOverrideSchema])`, so `resolveCrudAffordances`
251
+ emits `createPredicates` — and nothing in objectui read them, against roughly
252
+ fifteen consumption sites apiece for `editPredicates` / `deletePredicates`. The
253
+ symptom: a parent record entering a frozen state correctly greyed its children's
254
+ row Edit/Delete while the related list's "+ New" stayed fully live, so the user
255
+ filled in the whole child form to earn a server 409. The related-list toolbar now
256
+ evaluates `visibleWhen` / `disabledWhen` **once against the host parent record**,
257
+ per the spec docblock's binding for this key, on top of the existing
258
+ `o.create ∧ can(child, 'create')` check. `visibleWhen` hides "+ New" and fails
259
+ CLOSED; `disabledWhen` greys it and fails SOFT — the same evaluator, fail
260
+ directions and hidden-vs-disabled split the record header already uses for
261
+ edit/delete (objectui#4419 / PR #4515). A bare-boolean `userActions.create` is
262
+ untouched: with no predicates there is nothing to evaluate.
263
+
264
+ **#4647 — the inline-edit toggle was the one ungated affordance on its toolbar.**
265
+ It rendered on "grid view ∧ the host wired `onInlineEditChange` ∧ not the compact
266
+ toolbar", and every host wires that callback unconditionally. New and Import are
267
+ hidden for an account without the grant and the bulk-delete entry on the same
268
+ toolbar ANDs `can(obj, 'delete')`, but a read-only principal could flip inline
269
+ edit, modify cells and press "Save all" to earn a server 403. It is now gated on
270
+ the object's resolved edit affordance ∧ `can(object, 'update')`, mirroring that
271
+ bulk-delete gate. The gate is applied at all three sites that carry this
272
+ affordance — the wide toolbar's toggle, the compact toolbar's settings-popover
273
+ entry (which previously had no gate at all, not even the callback), and the
274
+ `editable` mode handed to the grid, so a stored view carrying `inlineEdit: true`
275
+ can no longer drop a read-only principal into editable cells with no toggle to
276
+ press.
277
+
278
+ `ListViewSchema.userActions.editInline` is also consumed now: an explicit `false`
279
+ withholds the affordance wholesale, which authors previously could not do.
280
+
281
+ **Behaviour change for read-only users, stated plainly.** Where the UI used to
282
+ offer inline editing and let the server refuse it, it now declines to offer the
283
+ entry point at all. No data access changes — the server gate was and remains the
284
+ enforcement boundary; this only stops the UI walking users into round-trips
285
+ guaranteed to fail. Accounts *with* the grant see no change, and hosts with no
286
+ `PermissionProvider` mounted (standalone embeds, the Studio designer) keep
287
+ today's behaviour, since `can()` answers `true` there by design.
288
+
289
+ One deliberate non-change: the absent case of `userActions.editInline` defers to
290
+ the host's existing `inlineEdit` channel rather than enforcing the spec's
291
+ `.default(false)`. Enforcing that default would remove the toggle from every
292
+ stored console list view in one release, since nothing folds a legacy key into
293
+ `editInline` and no existing view declares it. This follows the rule the
294
+ surrounding toolbar-flag block already states for itself — defaults chosen to
295
+ match what the flags have always done. `InterfaceListPage`, the key's other
296
+ consumer, reads the absent case as OFF, because the ADR-0047 interface page has
297
+ no such host channel to defer to.
298
+ - 138ab04: Fix a list filter that silently applied nothing when the first thing you picked was **Is null** or **Is not null**.
299
+
300
+ Adding a filter seeds the row with no value, and changing the operator keeps it that way — which is correct for an operator that takes no value, since the panel draws no input for one. The live grid read that row as unfinished and dropped it: the filter appeared in the panel, the query went out without it, and every record came back with no error to explain it. Only `Is empty` / `Is not empty` were exempt; the builder renders six operators value-less.
301
+
302
+ Which operators are complete without a value now has a single owner — `VALUELESS_FILTER_BUILDER_OPERATORS`, exported from `@object-ui/components` beside the code that decides it. The live grid and the saved-view fold both read it instead of keeping their own lists, so the two halves of one interaction can no longer disagree about whether a row is finished.
303
+ - Updated dependencies [88085e3]
304
+ - Updated dependencies [69251bf]
305
+ - Updated dependencies [57e668f]
306
+ - Updated dependencies [516663d]
307
+ - Updated dependencies [41ac1b7]
308
+ - Updated dependencies [1eaf0a1]
309
+ - Updated dependencies [a09bc33]
310
+ - Updated dependencies [460c4d0]
311
+ - Updated dependencies [0ae27f7]
312
+ - Updated dependencies [2533ec5]
313
+ - Updated dependencies [78c0f9a]
314
+ - Updated dependencies [bbe8b86]
315
+ - Updated dependencies [8477be5]
316
+ - Updated dependencies [279fb13]
317
+ - Updated dependencies [2e82ab2]
318
+ - Updated dependencies [ad07b65]
319
+ - Updated dependencies [41f498b]
320
+ - Updated dependencies [ef0d150]
321
+ - Updated dependencies [f34226e]
322
+ - Updated dependencies [564b605]
323
+ - Updated dependencies [e1d4251]
324
+ - Updated dependencies [40d3a33]
325
+ - Updated dependencies [8b9dc62]
326
+ - Updated dependencies [1184192]
327
+ - Updated dependencies [a2a9747]
328
+ - Updated dependencies [65e88e6]
329
+ - Updated dependencies [a1609a6]
330
+ - Updated dependencies [53f23bc]
331
+ - Updated dependencies [c4533dc]
332
+ - Updated dependencies [be60815]
333
+ - Updated dependencies [37f6844]
334
+ - Updated dependencies [93de4f6]
335
+ - Updated dependencies [2b50261]
336
+ - Updated dependencies [384f30d]
337
+ - Updated dependencies [ac600e5]
338
+ - Updated dependencies [97fba31]
339
+ - Updated dependencies [232f61a]
340
+ - Updated dependencies [d374caf]
341
+ - Updated dependencies [5673576]
342
+ - Updated dependencies [c1ef923]
343
+ - Updated dependencies [911ceaa]
344
+ - Updated dependencies [98eab36]
345
+ - Updated dependencies [af5e292]
346
+ - Updated dependencies [3fbbea1]
347
+ - Updated dependencies [0bffb18]
348
+ - Updated dependencies [800f455]
349
+ - Updated dependencies [5458414]
350
+ - Updated dependencies [3241559]
351
+ - Updated dependencies [7f96b10]
352
+ - Updated dependencies [167ec42]
353
+ - Updated dependencies [616a2a5]
354
+ - Updated dependencies [6c68b13]
355
+ - Updated dependencies [0046d8f]
356
+ - Updated dependencies [f1d4748]
357
+ - Updated dependencies [bea374e]
358
+ - Updated dependencies [b1119ec]
359
+ - Updated dependencies [5607092]
360
+ - Updated dependencies [9f23d2b]
361
+ - Updated dependencies [578e025]
362
+ - Updated dependencies [af025ee]
363
+ - Updated dependencies [d109a4d]
364
+ - Updated dependencies [598c89a]
365
+ - Updated dependencies [4a0bd17]
366
+ - Updated dependencies [b8b9af4]
367
+ - Updated dependencies [d8b9259]
368
+ - Updated dependencies [31676be]
369
+ - Updated dependencies [8c0d52e]
370
+ - Updated dependencies [aff10e2]
371
+ - Updated dependencies [70a774b]
372
+ - Updated dependencies [9ce096f]
373
+ - Updated dependencies [e05db88]
374
+ - Updated dependencies [7458a41]
375
+ - Updated dependencies [ad13d63]
376
+ - Updated dependencies [5ffcc14]
377
+ - Updated dependencies [d971e51]
378
+ - Updated dependencies [97abb24]
379
+ - Updated dependencies [deb157a]
380
+ - Updated dependencies [9c60144]
381
+ - Updated dependencies [e7747f1]
382
+ - Updated dependencies [d2ce342]
383
+ - Updated dependencies [9695da7]
384
+ - Updated dependencies [ac2f332]
385
+ - Updated dependencies [a777058]
386
+ - Updated dependencies [75444e3]
387
+ - Updated dependencies [58b8346]
388
+ - Updated dependencies [2d0bd16]
389
+ - Updated dependencies [a9e17b4]
390
+ - Updated dependencies [b8ce7dc]
391
+ - Updated dependencies [dad51e5]
392
+ - Updated dependencies [1c9c342]
393
+ - Updated dependencies [787c738]
394
+ - Updated dependencies [8396656]
395
+ - Updated dependencies [dbbd38a]
396
+ - Updated dependencies [61556dc]
397
+ - Updated dependencies [8871c14]
398
+ - Updated dependencies [93fe362]
399
+ - Updated dependencies [dfc6975]
400
+ - Updated dependencies [3cf4de0]
401
+ - Updated dependencies [c9dc811]
402
+ - Updated dependencies [144ef9b]
403
+ - Updated dependencies [138ab04]
404
+ - Updated dependencies [a0b9e91]
405
+ - Updated dependencies [99bd015]
406
+ - Updated dependencies [21e4585]
407
+ - @object-ui/types@17.6.0
408
+ - @object-ui/fields@17.6.0
409
+ - @object-ui/i18n@17.6.0
410
+ - @object-ui/react@17.6.0
411
+ - @object-ui/components@17.6.0
412
+ - @object-ui/core@17.6.0
413
+ - @object-ui/permissions@17.6.0
414
+ - @object-ui/mobile@17.6.0
415
+
3
416
  ## 17.5.0
4
417
 
5
418
  ### Minor Changes
package/README.md CHANGED
@@ -244,9 +244,18 @@ relational ones labelled `(by ID)` — so existing view metadata round-trips
244
244
  instead of silently losing its sort, and a sort the server would refuse can
245
245
  still be edited away in the picker that otherwise hides its field.
246
246
 
247
- Column-header sorting inside the grid is unaffected: it is client-side over the
248
- rows already loaded, where the label the cell shows IS available, so it orders by
249
- that label (see `getSortValue` in `@object-ui/core`).
247
+ Column-header sorting inside the grid follows the **same two rules**, because a
248
+ header click is a server `$orderby` as well whenever the grid is showing one
249
+ window of a larger collection (`objectui#3106`) — not a client-side reorder of
250
+ the loaded rows. So on that path a relational or formula column carries no
251
+ clickable header either (`objectui#3950`); offering one would have been the same
252
+ illusion through a different control.
253
+
254
+ Where the sort really does stay in the browser — inline `data`, or the grouped
255
+ view, which holds every row it groups — both kinds of header stay live and order
256
+ by the value the cell shows: the resolved label for a relational column, the
257
+ server-hydrated result for a formula one (see `getSortValue` in
258
+ `@object-ui/core`).
250
259
 
251
260
  ## View Persistence
252
261
 
@@ -9,6 +9,37 @@ import { ListViewSchema } from '@object-ui/types';
9
9
  * LICENSE file in the root directory of this source tree.
10
10
  */
11
11
  import * as React from 'react';
12
+ /**
13
+ * The `case 'map'` branch below builds an `object-map` schema by flattening
14
+ * `schema.options.map`'s CONTENTS to the top level. Whitelisted to these keys —
15
+ * `ObjectMapConfigSchema`'s shape minus `style` — rather than the whole bag:
16
+ * `style` is ALSO `BaseSchema.style` (inline CSS, legal on every node), and
17
+ * spreading the raw `map` block collapsed the two namespaces onto one key
18
+ * (objectui#5177).
19
+ *
20
+ * HAND-LISTED, not derived at runtime — deliberately, and only here (`plugin-
21
+ * map`'s own `FLAT_MAP_CONFIG_KEYS` in `ObjectMap.tsx` DOES derive from
22
+ * `ObjectMapConfigSchema.shape`, and should stay that way): this file is
23
+ * reachable from `examples/console-starter`'s own `src/`, so it is part of the
24
+ * import graph `vite-alias-closure.test.ts` walks. That walker resolves a bare
25
+ * `@object-ui/*` specifier with plain `index.<ext>` conventions and cannot find
26
+ * `@object-ui/types/zod`'s actual barrel file (`zod/index.zod.ts` — a
27
+ * non-standard name) — a REAL runtime import of it here reproducibly fails
28
+ * that gate (measured on objectui#5177's first PR, PR #5231, CI run
29
+ * 32160288416), even though Vite's own alias table already resolves the
30
+ * specifier correctly (`examples/console-starter/vite.config.ts` has carried
31
+ * an explicit `@object-ui/types/zod` entry since PR #5156). `ObjectMap.tsx`
32
+ * gets away with the runtime import only because nothing in
33
+ * console-starter's graph reaches `@object-ui/plugin-map` today.
34
+ *
35
+ * Anti-drift is a TEST, not this comment: `ListView.mapFlatten.test.tsx` pins
36
+ * this exact list against `ObjectMapConfigSchema.shape` — imported only from
37
+ * that TEST file, which the alias-closure walker explicitly excludes from
38
+ * traversal — so a key added to or removed from the declaration still fails
39
+ * here, loudly and by name, without reintroducing the runtime edge that
40
+ * breaks the walker.
41
+ */
42
+ export declare const FLAT_MAP_CONFIG_KEYS: readonly ["latitudeField", "longitudeField", "locationField", "titleField", "descriptionField", "zoom", "center"];
12
43
  /**
13
44
  * The list view's props.
14
45
  *
@@ -107,6 +138,28 @@ export interface ListViewProps {
107
138
  * Exported for that test. @internal
108
139
  */
109
140
  export declare function mapOperator(op: string): string;
141
+ /**
142
+ * Opt-in `FilterBuilder` operators the list toolbar offers — deliberately NONE
143
+ * (objectui#4736).
144
+ *
145
+ * `OPT_IN_OPERATORS` in `@object-ui/components` withholds the operator ids that
146
+ * only the MongoDB-style criteria dialect can carry. This toolbar persists into
147
+ * the other two, and into BOTH of them at once:
148
+ *
149
+ * - the array/triplet filter AST, via `mapOperator` above, for the live grid;
150
+ * - `ViewFilterRule[]`, via app-shell's `foldFilterGroupToSpecRules`, when the
151
+ * user saves the panel's group as a view.
152
+ *
153
+ * Neither vocabulary has a case-insensitive contains or an existence operator,
154
+ * so this surface opts into nothing. Named and passed explicitly rather than
155
+ * omitted at the call site: this constant is the handle
156
+ * `list-offered-operator-expressible-parity.test.ts` reads to compute what the
157
+ * toolbar actually offers, and an inline `extraOperators` added later would
158
+ * otherwise widen the dropdown without the parity test noticing.
159
+ *
160
+ * @internal exported for that test
161
+ */
162
+ export declare const LIST_VIEW_EXTRA_OPERATORS: readonly string[];
110
163
  /**
111
164
  * Normalize a single filter condition: convert `in`/not-in operators
112
165
  * into backend-compatible `or`/`and` of equality conditions.
@@ -1 +1 @@
1
- {"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../src/ListView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../src/ListView.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserFilters.d.ts","sourceRoot":"","sources":["../src/UserFilters.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAuCvD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,GAAG,OAAO,GAAG,MAAM,CAMpG,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACnD,wDAAwD;IACxD,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,wCAAwC;IACxC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,yCAAyC;IACzC,cAAc,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IACzC,gGAAgG;IAChG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IACrE;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;CAC7F;AA6ED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,SAAS,EACT,IAAS,EACT,cAAc,EACd,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,kBAAkB,GACnB,EAAE,gBAAgB,4BA+ClB"}
1
+ {"version":3,"file":"UserFilters.d.ts","sourceRoot":"","sources":["../src/UserFilters.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAmDvD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,GAAG,OAAO,GAAG,MAAM,CAMpG,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACnD,wDAAwD;IACxD,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,wCAAwC;IACxC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,yCAAyC;IACzC,cAAc,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IACzC,gGAAgG;IAChG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IACrE;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;CAC7F;AA6ED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,SAAS,EACT,IAAS,EACT,cAAc,EACd,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,kBAAkB,GACnB,EAAE,gBAAgB,4BA+ClB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewSwitcher.d.ts","sourceRoot":"","sources":["../src/ViewSwitcher.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,QAAQ,GACR,SAAS,GACT,UAAU,GACV,UAAU,GACV,OAAO,GACP,KAAK,GACL,OAAO,GACP,MAAM,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,QAAQ,CAAC;IACtB,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAuFD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA0G5D,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAwDpD,CAAC"}
1
+ {"version":3,"file":"ViewSwitcher.d.ts","sourceRoot":"","sources":["../src/ViewSwitcher.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,QAAQ,GACR,SAAS,GACT,UAAU,GACV,UAAU,GACV,OAAO,GACP,KAAK,GACL,OAAO,GACP,MAAM,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,QAAQ,CAAC;IACtB,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA0GD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA0G5D,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAwDpD,CAAC"}