@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 +413 -0
- package/README.md +12 -3
- package/dist/ListView.d.ts +53 -0
- package/dist/ListView.d.ts.map +1 -1
- package/dist/UserFilters.d.ts.map +1 -1
- package/dist/ViewSwitcher.d.ts.map +1 -1
- package/dist/index.js +920 -905
- package/dist/index.umd.cjs +2 -2
- package/package.json +20 -20
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
|
|
248
|
-
|
|
249
|
-
|
|
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
|
|
package/dist/ListView.d.ts
CHANGED
|
@@ -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.
|
package/dist/ListView.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../src/ListView.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
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;
|
|
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;
|
|
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"}
|