@jsenv/navi 0.29.96 → 0.29.97
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/dist/jsenv_navi.js +258 -44
- package/dist/jsenv_navi.js.map +13 -6
- package/docs/control_object.md +20 -1
- package/package.json +1 -1
package/docs/control_object.md
CHANGED
|
@@ -177,7 +177,7 @@ it. It matters most inside a picker's popup, where nothing else would bring the
|
|
|
177
177
|
value back down: a picker's value IS what the control in its popup holds, so the
|
|
178
178
|
façade never echoes it back.
|
|
179
179
|
|
|
180
|
-
|
|
180
|
+
Five things follow, and each of them was paid for twice before being written
|
|
181
181
|
here:
|
|
182
182
|
|
|
183
183
|
- **the group's value has to be the view that carries the MOST.** Four seats say
|
|
@@ -212,6 +212,25 @@ here:
|
|
|
212
212
|
Wrapping the two writes in a signal `batch()` does NOT help: the group
|
|
213
213
|
aggregates on each child's change, not on the render that follows.
|
|
214
214
|
|
|
215
|
+
- **and when the in-between cannot be avoided, the aggregate says so.** Two
|
|
216
|
+
people swapping seats means one leaves before the other arrives, whichever
|
|
217
|
+
order the writes take. What is avoidable is PUBLISHING that half-state: an
|
|
218
|
+
aggregate that returns **what the group already holds** says "not yet, ask me
|
|
219
|
+
again" — nothing is placed, nothing is handed to the row above, and the next
|
|
220
|
+
assembly publishes the whole answer. Returning `undefined` says the opposite
|
|
221
|
+
("there is no answer"), and wipes the row.
|
|
222
|
+
|
|
223
|
+
```js
|
|
224
|
+
// "not yet": the moving person is picked and seated nowhere, and it is not
|
|
225
|
+
// somebody who was just ticked — so this is a gesture in flight
|
|
226
|
+
const midMove = picked.some(
|
|
227
|
+
(id) => !seatedNow.includes(id) && lastAnswer.includes(id),
|
|
228
|
+
);
|
|
229
|
+
if (midMove) {
|
|
230
|
+
return lastAnswer; // what the group already holds
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
215
234
|
```jsx
|
|
216
235
|
// the seats are found by name, never as "everything that is not the list"
|
|
217
236
|
const seatChildren = (children) =>
|