@elaraai/e3-ui 1.0.102 → 1.0.104
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/src/allocation/functions.d.ts +2 -1
- package/dist/src/allocation/functions.d.ts.map +1 -1
- package/dist/src/allocation/functions.js +3 -2
- package/dist/src/allocation/functions.js.map +1 -1
- package/dist/src/allocation/index.d.ts +120 -1
- package/dist/src/allocation/index.d.ts.map +1 -1
- package/dist/src/allocation/index.js +24 -4
- package/dist/src/allocation/index.js.map +1 -1
- package/dist/src/bind/data-indexed.d.ts +25 -4
- package/dist/src/bind/data-indexed.d.ts.map +1 -1
- package/dist/src/bind/data-indexed.js +58 -7
- package/dist/src/bind/data-indexed.js.map +1 -1
- package/dist/src/bind/data.d.ts +12 -14
- package/dist/src/bind/data.d.ts.map +1 -1
- package/dist/src/bind/data.js +11 -11
- package/dist/src/bind/data.js.map +1 -1
- package/dist/src/bind/func.d.ts +7 -2
- package/dist/src/bind/func.d.ts.map +1 -1
- package/dist/src/bind/func.js +10 -3
- package/dist/src/bind/func.js.map +1 -1
- package/dist/src/bind/record.d.ts +6 -6
- package/dist/src/bind/record.d.ts.map +1 -1
- package/dist/src/bind/record.js.map +1 -1
- package/dist/src/calendar/index.d.ts +148 -1
- package/dist/src/calendar/index.d.ts.map +1 -1
- package/dist/src/calendar/index.js +55 -5
- package/dist/src/calendar/index.js.map +1 -1
- package/dist/src/decision/bind.d.ts.map +1 -1
- package/dist/src/decision/index.d.ts +218 -218
- package/dist/src/decision/index.d.ts.map +1 -1
- package/dist/src/decision/types.d.ts.map +1 -1
- package/dist/src/flowchart/canvas.d.ts +32 -14
- package/dist/src/flowchart/canvas.d.ts.map +1 -1
- package/dist/src/flowchart/canvas.js +21 -6
- package/dist/src/flowchart/canvas.js.map +1 -1
- package/dist/src/flowchart/details.d.ts +469 -0
- package/dist/src/flowchart/details.d.ts.map +1 -0
- package/dist/src/flowchart/details.js +1035 -0
- package/dist/src/flowchart/details.js.map +1 -0
- package/dist/src/flowchart/flowchart.d.ts +16 -72
- package/dist/src/flowchart/flowchart.d.ts.map +1 -1
- package/dist/src/flowchart/flowchart.js +10 -1
- package/dist/src/flowchart/flowchart.js.map +1 -1
- package/dist/src/flowchart/index.d.ts +282 -251
- package/dist/src/flowchart/index.d.ts.map +1 -1
- package/dist/src/flowchart/index.js +234 -220
- package/dist/src/flowchart/index.js.map +1 -1
- package/dist/src/flowchart/kinds.d.ts +438 -0
- package/dist/src/flowchart/kinds.d.ts.map +1 -0
- package/dist/src/flowchart/kinds.js +799 -0
- package/dist/src/flowchart/kinds.js.map +1 -0
- package/dist/src/flowchart/library.d.ts +155 -740
- package/dist/src/flowchart/library.d.ts.map +1 -1
- package/dist/src/flowchart/library.js +191 -673
- package/dist/src/flowchart/library.js.map +1 -1
- package/dist/src/flowchart/payload.d.ts +3654 -7845
- package/dist/src/flowchart/payload.d.ts.map +1 -1
- package/dist/src/flowchart/payload.js +331 -469
- package/dist/src/flowchart/payload.js.map +1 -1
- package/dist/src/flowchart/templates.d.ts +657 -0
- package/dist/src/flowchart/templates.d.ts.map +1 -0
- package/dist/src/flowchart/templates.js +658 -0
- package/dist/src/flowchart/templates.js.map +1 -0
- package/dist/src/flowchart/types.d.ts +2258 -214
- package/dist/src/flowchart/types.d.ts.map +1 -1
- package/dist/src/flowchart/types.js +374 -124
- package/dist/src/flowchart/types.js.map +1 -1
- package/dist/src/index.d.ts +13 -15
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +24 -29
- package/dist/src/index.js.map +1 -1
- package/dist/src/internal.d.ts +5 -7
- package/dist/src/internal.d.ts.map +1 -1
- package/dist/src/internal.js +12 -19
- package/dist/src/internal.js.map +1 -1
- package/dist/src/ontology/index.d.ts +44 -15
- package/dist/src/ontology/index.d.ts.map +1 -1
- package/dist/src/ontology/index.js +19 -11
- package/dist/src/ontology/index.js.map +1 -1
- package/dist/src/plan/builders.d.ts +26 -26
- package/dist/src/plan/builders.d.ts.map +1 -1
- package/dist/src/plan/builders.js.map +1 -1
- package/dist/src/plan/event-rows.d.ts +59 -58
- package/dist/src/plan/event-rows.d.ts.map +1 -1
- package/dist/src/plan/event-rows.js +6 -4
- package/dist/src/plan/event-rows.js.map +1 -1
- package/dist/src/plan/factories.js.map +1 -1
- package/dist/src/plan/ir.d.ts +1 -0
- package/dist/src/plan/ir.d.ts.map +1 -1
- package/dist/src/plan/library.d.ts.map +1 -1
- package/dist/src/plan/nested-checks.js.map +1 -1
- package/dist/src/plan/plan.d.ts +567 -423
- package/dist/src/plan/plan.d.ts.map +1 -1
- package/dist/src/plan/plan.js +67 -3
- package/dist/src/plan/plan.js.map +1 -1
- package/dist/src/plan/series.d.ts.map +1 -1
- package/dist/src/plan/series.js.map +1 -1
- package/dist/src/plan/types.d.ts +173 -172
- package/dist/src/plan/types.d.ts.map +1 -1
- package/dist/src/query/builder.d.ts +368 -321
- package/dist/src/query/builder.d.ts.map +1 -1
- package/dist/src/query/builder.js +12 -1
- package/dist/src/query/builder.js.map +1 -1
- package/dist/src/query/index.d.ts +5 -1
- package/dist/src/query/index.d.ts.map +1 -1
- package/dist/src/query/index.js +3 -1
- package/dist/src/query/index.js.map +1 -1
- package/dist/src/query/library.d.ts +6 -6
- package/dist/src/query/queries.d.ts +3 -3
- package/dist/src/roster/fit.d.ts +5 -2
- package/dist/src/roster/fit.d.ts.map +1 -1
- package/dist/src/roster/fit.js +5 -3
- package/dist/src/roster/fit.js.map +1 -1
- package/dist/src/roster/index.d.ts +103 -2
- package/dist/src/roster/index.d.ts.map +1 -1
- package/dist/src/roster/index.js +45 -6
- package/dist/src/roster/index.js.map +1 -1
- package/dist/src/runtime/index.d.ts +1 -3
- package/dist/src/runtime/index.d.ts.map +1 -1
- package/dist/src/runtime/index.js +1 -3
- package/dist/src/runtime/index.js.map +1 -1
- package/dist/src/schedule/fields.js.map +1 -1
- package/dist/src/schedule/library.js.map +1 -1
- package/dist/src/schedule/record-window.d.ts +27 -26
- package/dist/src/schedule/record-window.d.ts.map +1 -1
- package/dist/src/schedule/types.d.ts +196 -196
- package/dist/src/schematic/index.d.ts +1 -1
- package/dist/src/schematic/index.d.ts.map +1 -1
- package/dist/src/schematic/index.js +1 -1
- package/dist/src/schematic/index.js.map +1 -1
- package/dist/src/schematic/kinds.d.ts +4 -24
- package/dist/src/schematic/kinds.d.ts.map +1 -1
- package/dist/src/schematic/kinds.js +8 -212
- package/dist/src/schematic/kinds.js.map +1 -1
- package/dist/src/schematic/library.d.ts.map +1 -1
- package/dist/src/schematic/payload.d.ts +1688 -1549
- package/dist/src/schematic/payload.d.ts.map +1 -1
- package/dist/src/schematic/payload.js +38 -1
- package/dist/src/schematic/payload.js.map +1 -1
- package/dist/src/schematic/shapes.d.ts.map +1 -1
- package/dist/src/schematic/types.d.ts +978 -978
- package/dist/src/schematic/types.d.ts.map +1 -1
- package/dist/src/schematic/types.js +4 -36
- package/dist/src/schematic/types.js.map +1 -1
- package/dist/src/schematic/window.d.ts +9 -42
- package/dist/src/schematic/window.d.ts.map +1 -1
- package/dist/src/schematic/window.js +10 -115
- package/dist/src/schematic/window.js.map +1 -1
- package/dist/src/sheet/actions.d.ts +388 -0
- package/dist/src/sheet/actions.d.ts.map +1 -0
- package/dist/src/sheet/actions.js +594 -0
- package/dist/src/sheet/actions.js.map +1 -0
- package/dist/src/sheet/bridge.d.ts +12 -1
- package/dist/src/sheet/bridge.d.ts.map +1 -1
- package/dist/src/sheet/bridge.js +30 -6
- package/dist/src/sheet/bridge.js.map +1 -1
- package/dist/src/sheet/columns.d.ts +5 -2
- package/dist/src/sheet/columns.d.ts.map +1 -1
- package/dist/src/sheet/columns.js.map +1 -1
- package/dist/src/sheet/draft-bridge.d.ts +9 -4
- package/dist/src/sheet/draft-bridge.d.ts.map +1 -1
- package/dist/src/sheet/draft-bridge.js +22 -7
- package/dist/src/sheet/draft-bridge.js.map +1 -1
- package/dist/src/sheet/editing-types.d.ts +71 -71
- package/dist/src/sheet/fields.d.ts +13 -0
- package/dist/src/sheet/fields.d.ts.map +1 -1
- package/dist/src/sheet/fields.js +3 -0
- package/dist/src/sheet/fields.js.map +1 -1
- package/dist/src/sheet/group.js.map +1 -1
- package/dist/src/sheet/index.d.ts +32 -2
- package/dist/src/sheet/index.d.ts.map +1 -1
- package/dist/src/sheet/index.js +18 -3
- package/dist/src/sheet/index.js.map +1 -1
- package/dist/src/sheet/library.d.ts +8 -0
- package/dist/src/sheet/library.d.ts.map +1 -1
- package/dist/src/sheet/library.js.map +1 -1
- package/dist/src/sheet/link.d.ts.map +1 -1
- package/dist/src/sheet/record.js.map +1 -1
- package/dist/src/sheet/root.d.ts +23 -1
- package/dist/src/sheet/root.d.ts.map +1 -1
- package/dist/src/sheet/root.js +40 -5
- package/dist/src/sheet/root.js.map +1 -1
- package/dist/src/sheet/sheet.d.ts +9332 -5621
- package/dist/src/sheet/sheet.d.ts.map +1 -1
- package/dist/src/sheet/sheet.js +41 -2
- package/dist/src/sheet/sheet.js.map +1 -1
- package/dist/src/sheet/templates.d.ts +4 -0
- package/dist/src/sheet/templates.d.ts.map +1 -1
- package/dist/src/sheet/types.d.ts +13020 -5839
- package/dist/src/sheet/types.d.ts.map +1 -1
- package/dist/src/sheet/types.js +114 -2
- package/dist/src/sheet/types.js.map +1 -1
- package/dist/src/studio/builder.d.ts +6 -6
- package/dist/src/studio/library.d.ts +9 -9
- package/dist/src/studio/pages.d.ts +6 -6
- package/dist/src/studio/publish.d.ts +3 -3
- package/dist/src/utils/derive.d.ts +1 -1
- package/dist/src/utils/derive.js +1 -1
- package/dist/src/utils/derive.js.map +1 -1
- package/dist/src/utils/key-visibility.d.ts +1 -1
- package/dist/src/utils/record-kind.d.ts +625 -0
- package/dist/src/utils/record-kind.d.ts.map +1 -0
- package/dist/src/utils/record-kind.js +450 -0
- package/dist/src/utils/record-kind.js.map +1 -0
- package/dist/src/utils/views.d.ts +55 -0
- package/dist/src/utils/views.d.ts.map +1 -0
- package/dist/src/utils/views.js +72 -0
- package/dist/src/utils/views.js.map +1 -0
- package/dist/src/utils/vocabulary.d.ts +48 -0
- package/dist/src/utils/vocabulary.d.ts.map +1 -0
- package/dist/src/utils/vocabulary.js +47 -0
- package/dist/src/utils/vocabulary.js.map +1 -0
- package/dist/test/allocation/allocation.examples.d.ts +3 -1
- package/dist/test/allocation/allocation.examples.d.ts.map +1 -1
- package/dist/test/allocation/allocation.examples.js +81 -2
- package/dist/test/allocation/allocation.examples.js.map +1 -1
- package/dist/test/bind/data/data.examples.d.ts +1 -1
- package/dist/test/bind/func/func.examples.d.ts +19 -1
- package/dist/test/bind/func/func.examples.d.ts.map +1 -1
- package/dist/test/bind/func/func.examples.js +36 -1
- package/dist/test/bind/func/func.examples.js.map +1 -1
- package/dist/test/calendar/calendar.examples.d.ts +2 -0
- package/dist/test/calendar/calendar.examples.d.ts.map +1 -1
- package/dist/test/calendar/calendar.examples.js +80 -2
- package/dist/test/calendar/calendar.examples.js.map +1 -1
- package/dist/test/decision/queue.examples.d.ts +1 -0
- package/dist/test/decision/queue.examples.d.ts.map +1 -1
- package/dist/test/decision/queue.examples.js +12 -0
- package/dist/test/decision/queue.examples.js.map +1 -1
- package/dist/test/examples-package.d.ts.map +1 -1
- package/dist/test/examples-package.js +5 -4
- package/dist/test/examples-package.js.map +1 -1
- package/dist/test/flowchart/flowchart.examples.d.ts +1250 -4605
- package/dist/test/flowchart/flowchart.examples.d.ts.map +1 -1
- package/dist/test/flowchart/flowchart.examples.js +861 -512
- package/dist/test/flowchart/flowchart.examples.js.map +1 -1
- package/dist/test/ontology/ontology.examples.d.ts +2 -3
- package/dist/test/ontology/ontology.examples.d.ts.map +1 -1
- package/dist/test/ontology/ontology.examples.js +32 -21
- package/dist/test/ontology/ontology.examples.js.map +1 -1
- package/dist/test/plan/plan-events.examples.d.ts +1 -0
- package/dist/test/plan/plan-events.examples.d.ts.map +1 -1
- package/dist/test/plan/plan-events.examples.js +44 -0
- package/dist/test/plan/plan-events.examples.js.map +1 -1
- package/dist/test/plan/plan-nested.examples.d.ts +15 -15
- package/dist/test/plan/plan-nested.examples.d.ts.map +1 -1
- package/dist/test/plan/plan-nested.examples.js +5 -5
- package/dist/test/plan/plan-nested.examples.js.map +1 -1
- package/dist/test/plan/plan-records.examples.d.ts.map +1 -1
- package/dist/test/plan/plan-records.examples.js +1 -1
- package/dist/test/plan/plan-records.examples.js.map +1 -1
- package/dist/test/plan/plan.examples.js.map +1 -1
- package/dist/test/query/query.examples.d.ts +2 -0
- package/dist/test/query/query.examples.d.ts.map +1 -1
- package/dist/test/query/query.examples.js +37 -1
- package/dist/test/query/query.examples.js.map +1 -1
- package/dist/test/roster/domain.examples.d.ts.map +1 -1
- package/dist/test/roster/roster.examples.d.ts +2 -0
- package/dist/test/roster/roster.examples.d.ts.map +1 -1
- package/dist/test/roster/roster.examples.js +76 -15
- package/dist/test/roster/roster.examples.js.map +1 -1
- package/dist/test/schematic/schematic-records.examples.d.ts.map +1 -1
- package/dist/test/schematic/schematic-records.examples.js +6 -4
- package/dist/test/schematic/schematic-records.examples.js.map +1 -1
- package/dist/test/schematic/schematic.examples.d.ts +1 -0
- package/dist/test/schematic/schematic.examples.d.ts.map +1 -1
- package/dist/test/schematic/schematic.examples.js +144 -0
- package/dist/test/schematic/schematic.examples.js.map +1 -1
- package/dist/test/sheet/sheet-actions.examples.d.ts +1264 -0
- package/dist/test/sheet/sheet-actions.examples.d.ts.map +1 -0
- package/dist/test/sheet/sheet-actions.examples.js +394 -0
- package/dist/test/sheet/sheet-actions.examples.js.map +1 -0
- package/dist/test/sheet/sheet-records.examples.d.ts +1 -1
- package/dist/test/sheet/sheet.examples.d.ts +1 -0
- package/dist/test/sheet/sheet.examples.d.ts.map +1 -1
- package/dist/test/sheet/sheet.examples.js +77 -0
- package/dist/test/sheet/sheet.examples.js.map +1 -1
- package/dist/test/studio/studio.examples.d.ts +1 -0
- package/dist/test/studio/studio.examples.d.ts.map +1 -1
- package/dist/test/studio/studio.examples.js +18 -8
- package/dist/test/studio/studio.examples.js.map +1 -1
- package/package.json +14 -13
- package/dist/src/diff/index.d.ts +0 -407
- package/dist/src/diff/index.d.ts.map +0 -1
- package/dist/src/diff/index.js +0 -203
- package/dist/src/diff/index.js.map +0 -1
- package/dist/src/experiment/index.d.ts +0 -1033
- package/dist/src/experiment/index.d.ts.map +0 -1
- package/dist/src/experiment/index.js +0 -197
- package/dist/src/experiment/index.js.map +0 -1
- package/dist/src/experiment/types.d.ts +0 -1093
- package/dist/src/experiment/types.d.ts.map +0 -1
- package/dist/src/experiment/types.js +0 -423
- package/dist/src/experiment/types.js.map +0 -1
- package/dist/src/flowchart/over.d.ts +0 -227
- package/dist/src/flowchart/over.d.ts.map +0 -1
- package/dist/src/flowchart/over.js +0 -213
- package/dist/src/flowchart/over.js.map +0 -1
- package/dist/src/flowchart/patch.d.ts +0 -64
- package/dist/src/flowchart/patch.d.ts.map +0 -1
- package/dist/src/flowchart/patch.js +0 -67
- package/dist/src/flowchart/patch.js.map +0 -1
- package/dist/src/flowchart/values.d.ts +0 -271
- package/dist/src/flowchart/values.d.ts.map +0 -1
- package/dist/src/flowchart/values.js +0 -220
- package/dist/src/flowchart/values.js.map +0 -1
- package/dist/src/flowchart/window.d.ts +0 -306
- package/dist/src/flowchart/window.d.ts.map +0 -1
- package/dist/src/flowchart/window.js +0 -63
- package/dist/src/flowchart/window.js.map +0 -1
- package/dist/src/runtime/diff.d.ts +0 -36
- package/dist/src/runtime/diff.d.ts.map +0 -1
- package/dist/src/runtime/diff.js +0 -34
- package/dist/src/runtime/diff.js.map +0 -1
- package/dist/src/runtime/experiment.d.ts +0 -48
- package/dist/src/runtime/experiment.d.ts.map +0 -1
- package/dist/src/runtime/experiment.js +0 -10
- package/dist/src/runtime/experiment.js.map +0 -1
- package/dist/test/diff/diff.examples.d.ts +0 -313
- package/dist/test/diff/diff.examples.d.ts.map +0 -1
- package/dist/test/diff/diff.examples.js +0 -452
- package/dist/test/diff/diff.examples.js.map +0 -1
- package/dist/test/experiment/experiment.examples.d.ts +0 -1512
- package/dist/test/experiment/experiment.examples.d.ts.map +0 -1
- package/dist/test/experiment/experiment.examples.js +0 -609
- package/dist/test/experiment/experiment.examples.js.map +0 -1
|
@@ -0,0 +1,594 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* `Sheet.column.action` — a variant's state machine as a column (#1474,
|
|
7
|
+
* `Sheet Actions - DX Proposal.md`).
|
|
8
|
+
*
|
|
9
|
+
* The column sits on a field of type `V` or `Option<V>`, `V` a variant. Each
|
|
10
|
+
* case of `V` is a state and the action that gets a row there: the author
|
|
11
|
+
* gives its words, the cases it may go to next (`next`, and `start` for a
|
|
12
|
+
* row with nothing taken), and what else taking it updates. The case's type
|
|
13
|
+
* decides how it is asked: `NullType` is a button, a variant whose every case
|
|
14
|
+
* is `NullType` a menu of those cases, anything else a form drawn with
|
|
15
|
+
* `Fields` — the inspectors' vocabulary. One optional function, `blocked`,
|
|
16
|
+
* says when a row cannot act for a reason the table cannot hold (a step
|
|
17
|
+
* waiting for the one before it).
|
|
18
|
+
*
|
|
19
|
+
* The builder only captures. {@link describeAction} checks the declaration
|
|
20
|
+
* against the row type at build time; {@link buildActionKind} compiles it into
|
|
21
|
+
* the closed wire kind over the sheet's bridge; {@link buildActionCodec} is the
|
|
22
|
+
* cell a row's case lands in.
|
|
23
|
+
*
|
|
24
|
+
* @packageDocumentation
|
|
25
|
+
*/
|
|
26
|
+
import { ArrayType, BlobType, DateTimeType, DictType, East, Expr, FunctionType, IntegerType, NullType, OptionType, StringType, StructType, VariantType, isTypeEqual, none, some, toEastTypeValue, variant, } from "@elaraai/east";
|
|
27
|
+
import { StatusValueType } from "@elaraai/east-ui";
|
|
28
|
+
import { FIELD_HINT, fieldSelect, fieldSpecs, resolveTag, spellOut, } from "@elaraai/east-ui/internal";
|
|
29
|
+
import { SheetActionCaseType, SheetActionCellType, SheetActionGateType, SheetActionKindType, SheetActionTakeType, SheetActionUpdatesType, SheetCellType, SheetContextType, sheetLinesOf, sheetRuleCell, SheetPatchTypeFor, } from "./types.js";
|
|
30
|
+
import { SheetDraftTypeFor } from "./transactions.js";
|
|
31
|
+
import { SheetDraftGroupTypeFor } from "./drafts.js";
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// The context `blocked`, `initial` and `updates` see
|
|
34
|
+
// ============================================================================
|
|
35
|
+
/**
|
|
36
|
+
* `Sheet.Types.ActionContext(R)` — what an action column's functions see on
|
|
37
|
+
* a flat sheet: the row as plain values, never a draft — a row whose draft
|
|
38
|
+
* is incomplete never acts (T6) — and its neighbours, each `none` while its
|
|
39
|
+
* own draft is incomplete.
|
|
40
|
+
*
|
|
41
|
+
* @typeParam R - The row type
|
|
42
|
+
* @param rowType - The row type value
|
|
43
|
+
* @returns The context type
|
|
44
|
+
*
|
|
45
|
+
* @property row - The row, as it stands before the action
|
|
46
|
+
* @property index - Its place among the rows
|
|
47
|
+
* @property rows - The resident rows, in order; `none` where a row's draft is incomplete
|
|
48
|
+
* @property group - Always `none` on a flat sheet
|
|
49
|
+
* @property today - UTC midnight
|
|
50
|
+
*/
|
|
51
|
+
export function SheetActionContextTypeFor(rowType) {
|
|
52
|
+
return StructType({
|
|
53
|
+
row: rowType,
|
|
54
|
+
index: IntegerType,
|
|
55
|
+
rows: ArrayType(OptionType(rowType)),
|
|
56
|
+
group: OptionType(NullType),
|
|
57
|
+
today: DateTimeType,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* `Sheet.Types.ActionContext(P, "lines")` — what an action column's
|
|
62
|
+
* functions see on a grouped sheet: the line as plain values, its group's
|
|
63
|
+
* lines, and the group.
|
|
64
|
+
*
|
|
65
|
+
* @typeParam P - The group type
|
|
66
|
+
* @typeParam F - The lines field
|
|
67
|
+
* @param groupType - The group type value
|
|
68
|
+
* @param lines - The lines field
|
|
69
|
+
* @returns The context type
|
|
70
|
+
*
|
|
71
|
+
* @property row - The line, as it stands before the action
|
|
72
|
+
* @property index - Its place among its group's lines
|
|
73
|
+
* @property rows - Its group's lines, in order; `none` where a line's draft is incomplete
|
|
74
|
+
* @property group - Its group; `none` while the group's own draft is incomplete, and for a loose row
|
|
75
|
+
* @property today - UTC midnight
|
|
76
|
+
*/
|
|
77
|
+
export function SheetGroupActionContextTypeFor(groupType, lines) {
|
|
78
|
+
const { lineType } = sheetLinesOf(groupType, lines);
|
|
79
|
+
return StructType({
|
|
80
|
+
row: lineType,
|
|
81
|
+
index: IntegerType,
|
|
82
|
+
rows: ArrayType(OptionType(lineType)),
|
|
83
|
+
group: OptionType(groupType),
|
|
84
|
+
today: DateTimeType,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
export function sheetActionContextType(first, second) {
|
|
88
|
+
return second === undefined ? SheetActionContextTypeFor(first) : SheetGroupActionContextTypeFor(first, second);
|
|
89
|
+
}
|
|
90
|
+
export function actionMenu(options = {}) {
|
|
91
|
+
if (options.of !== undefined)
|
|
92
|
+
return { [FIELD_HINT]: "action-register", of: options.of };
|
|
93
|
+
return { ...(options.labels !== undefined ? { labels: options.labels } : {}), [FIELD_HINT]: "action-menu" };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* A case's form — `Sheet.action.form({ fields, initial })`: its value's
|
|
97
|
+
* fields through `Sheet.field.*`, and what it opens with.
|
|
98
|
+
*
|
|
99
|
+
* @typeParam R - The row type
|
|
100
|
+
* @typeParam T - The case's value type
|
|
101
|
+
* @param options - The fields' hints and the opening value
|
|
102
|
+
* @returns The take
|
|
103
|
+
*/
|
|
104
|
+
export function actionForm(options = {}) {
|
|
105
|
+
return { ...options, [FIELD_HINT]: "action-form" };
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* An action column — `Sheet.column.action(R, V, config)`: a variant's state
|
|
109
|
+
* machine, each case a state and the action into it. Sits on a `V` or
|
|
110
|
+
* `Option<V>` field.
|
|
111
|
+
*
|
|
112
|
+
* @typeParam R - The row type (a grouped sheet's line)
|
|
113
|
+
* @typeParam V - The variant
|
|
114
|
+
* @param rowType - The row type value
|
|
115
|
+
* @param variantType - The variant the field holds
|
|
116
|
+
* @param config - The cases, `start`, `blocked` and the column's words ({@link SheetActionConfig})
|
|
117
|
+
* @returns The column
|
|
118
|
+
* @example
|
|
119
|
+
* ```tsx
|
|
120
|
+
* // .tsx file with the `@jsxImportSource @elaraai/e3-ui` pragma
|
|
121
|
+
* import { DictType, East, NullType, OptionType, StringType, StructType, VariantType, none, some, variant } from "@elaraai/east";
|
|
122
|
+
* import { Box, Reactive, UIComponentType } from "@elaraai/east-ui";
|
|
123
|
+
* import { Record, Sheet } from "@elaraai/e3-ui";
|
|
124
|
+
* import e3 from "@elaraai/e3";
|
|
125
|
+
*
|
|
126
|
+
* export const JobState = VariantType({ started: NullType, finished: NullType });
|
|
127
|
+
* export const ActionJob = StructType({ task: StringType, state: OptionType(JobState) });
|
|
128
|
+
* export const sheetActionJobs = e3.record("sheet_action_jobs", DictType(StringType, ActionJob), {
|
|
129
|
+
* initial: new Map([
|
|
130
|
+
* ["J-0001", { task: "Panel cutting", state: some(variant("finished", null)) }],
|
|
131
|
+
* ["J-0002", { task: "Edge banding", state: some(variant("started", null)) }],
|
|
132
|
+
* ["J-0003", { task: "CNC routing", state: none }],
|
|
133
|
+
* ]),
|
|
134
|
+
* mutations: (mutation) => ({
|
|
135
|
+
* // The jobs' patch door — every Save commits through it.
|
|
136
|
+
* patch: mutation.patch(),
|
|
137
|
+
* }),
|
|
138
|
+
* });
|
|
139
|
+
*
|
|
140
|
+
* const sheet = East.function([], UIComponentType, (_$) => (
|
|
141
|
+
* <Reactive>{$ => {
|
|
142
|
+
* const jobs = $.let(Record.bind(sheetActionJobs));
|
|
143
|
+
* return (
|
|
144
|
+
* <Box height="320px">
|
|
145
|
+
* <Sheet
|
|
146
|
+
* record={jobs}
|
|
147
|
+
* name="sheetActionsBasic"
|
|
148
|
+
* columns={{
|
|
149
|
+
* task: Sheet.column.text(ActionJob, { header: "Task", width: "240px" }),
|
|
150
|
+
* state: Sheet.column.action(ActionJob, JobState, {
|
|
151
|
+
* header: "State", width: "240px",
|
|
152
|
+
* start: ["started"],
|
|
153
|
+
* cases: {
|
|
154
|
+
* started: { label: "Start", state: "Started", tone: "info", icon: "play", next: ["finished"] },
|
|
155
|
+
* finished: { label: "Finish", state: "Finished", tone: "success", icon: "check" },
|
|
156
|
+
* },
|
|
157
|
+
* }),
|
|
158
|
+
* }}
|
|
159
|
+
* />
|
|
160
|
+
* </Box>
|
|
161
|
+
* );
|
|
162
|
+
* }}</Reactive>
|
|
163
|
+
* ));
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
export function action(rowType, variantType, config) {
|
|
167
|
+
return { kind: "action", config: config, rowType, variantType };
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Compiles an action column's cell codec: a value of `V` to its `Action`
|
|
171
|
+
* cell (its case and its value, beast2 at the case's type), and back.
|
|
172
|
+
*
|
|
173
|
+
* @param variantType - The variant
|
|
174
|
+
* @returns The codec
|
|
175
|
+
* @internal
|
|
176
|
+
*/
|
|
177
|
+
export function buildActionCodec(variantType) {
|
|
178
|
+
const cases = Object.entries(variantType.cases);
|
|
179
|
+
const encode = East.function([variantType], SheetCellType, (_$, v) => v.match(Object.fromEntries(cases.map(([name]) => [name,
|
|
180
|
+
(_$2, value) => East.value(variant("Action", { case: name, value: East.Blob.encodeBeast(value, "v2") }), SheetCellType),
|
|
181
|
+
]))));
|
|
182
|
+
const decode = East.function([SheetActionCellType], OptionType(variantType), ($, cell) => {
|
|
183
|
+
for (const [name, type] of cases) {
|
|
184
|
+
$.if(cell.case.equal(name), ($2) => {
|
|
185
|
+
$2.return(East.value(some(variant(name, cell.value.decodeBeast(type, "v2"))), OptionType(variantType)));
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
return East.value(none, OptionType(variantType));
|
|
189
|
+
});
|
|
190
|
+
return { variantType, encode, decode };
|
|
191
|
+
}
|
|
192
|
+
/** A short description of a type, for a refusal. */
|
|
193
|
+
function describeType(type) {
|
|
194
|
+
return type.type === "Struct" ? `a struct` : type.type === "Variant" ? "a variant" : `a ${type.type}`;
|
|
195
|
+
}
|
|
196
|
+
/** Whether a type is a variant whose every case is `NullType`. */
|
|
197
|
+
function isChoice(type) {
|
|
198
|
+
if (type.type !== "Variant")
|
|
199
|
+
return false;
|
|
200
|
+
const cases = Object.values(type.cases);
|
|
201
|
+
return cases.length > 0 && cases.every((t) => isTypeEqual(t, NullType));
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Checks an action column's declaration against its field: the field is `V`
|
|
205
|
+
* or `Option<V>`; `cases` names every case of `V` and no other; `start` and
|
|
206
|
+
* each `next` name cases of `V`, once each; `start` sits only on an
|
|
207
|
+
* `Option<V>` field; no `fill` or `value`.
|
|
208
|
+
*
|
|
209
|
+
* @param key - The column key
|
|
210
|
+
* @param col - The built column
|
|
211
|
+
* @param fieldType - The field's type
|
|
212
|
+
* @param optional - Whether the field is an `Option` of `V`
|
|
213
|
+
* @throws Error naming the column and the case
|
|
214
|
+
* @internal
|
|
215
|
+
*/
|
|
216
|
+
export function describeAction(key, col, fieldType, optional) {
|
|
217
|
+
const variantType = col.variantType;
|
|
218
|
+
const where = `Sheet: action column "${key}"`;
|
|
219
|
+
if (variantType === undefined || variantType.type !== "Variant") {
|
|
220
|
+
throw new Error(`${where} names no variant — Sheet.column.action(RowType, VariantType, { … })`);
|
|
221
|
+
}
|
|
222
|
+
const unwrapped = optional ? fieldType.cases["some"] : fieldType;
|
|
223
|
+
if (!isTypeEqual(unwrapped, variantType)) {
|
|
224
|
+
throw new Error(`${where} sits on ${describeType(fieldType)} field — it sits on a field of its variant, or an Option of it`);
|
|
225
|
+
}
|
|
226
|
+
const cfg = col.config;
|
|
227
|
+
if (cfg.fill !== undefined)
|
|
228
|
+
throw new Error(`${where} takes no \`fill\` — an action is taken, never filled`);
|
|
229
|
+
if (cfg.value !== undefined)
|
|
230
|
+
throw new Error(`${where} takes no \`value\` — it shows the field its actions write`);
|
|
231
|
+
const names = Object.keys(variantType.cases);
|
|
232
|
+
const declared = Object.keys(cfg.cases ?? {});
|
|
233
|
+
const missing = names.filter((n) => !declared.includes(n));
|
|
234
|
+
const stray = declared.filter((n) => !names.includes(n));
|
|
235
|
+
if (missing.length > 0)
|
|
236
|
+
throw new Error(`${where} declares no case for ${missing.map((n) => `"${n}"`).join(", ")} — \`cases\` gives every case of the variant its words`);
|
|
237
|
+
if (stray.length > 0)
|
|
238
|
+
throw new Error(`${where} declares ${stray.map((n) => `"${n}"`).join(", ")}, ${stray.length === 1 ? "a case" : "cases"} the variant does not have (${names.join(", ")})`);
|
|
239
|
+
const checkList = (list, what) => {
|
|
240
|
+
if (list === undefined)
|
|
241
|
+
return;
|
|
242
|
+
const seen = new Set();
|
|
243
|
+
for (const n of list) {
|
|
244
|
+
if (!names.includes(n))
|
|
245
|
+
throw new Error(`${where}'s ${what} names "${n}", a case the variant does not have (${names.join(", ")})`);
|
|
246
|
+
if (seen.has(n))
|
|
247
|
+
throw new Error(`${where}'s ${what} names "${n}" twice — each case is offered once`);
|
|
248
|
+
seen.add(n);
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
if (cfg.start !== undefined && !optional) {
|
|
252
|
+
throw new Error(`${where} has a \`start\`, and its field is always in a case — \`start\` is what a row with nothing taken may do, on an Option field; a new row's first case is \`newRow\`'s`);
|
|
253
|
+
}
|
|
254
|
+
checkList(cfg.start, "`start`");
|
|
255
|
+
for (const n of names)
|
|
256
|
+
checkList(cfg.cases[n].next, `case "${n}"'s \`next\``);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* The rule cells an action column projects: the row's summary, and its name
|
|
260
|
+
* and title where the column gives them.
|
|
261
|
+
*
|
|
262
|
+
* @param key - The column key
|
|
263
|
+
* @param col - The built column
|
|
264
|
+
* @param rowType - The row type (a grouped sheet's line)
|
|
265
|
+
* @returns The rule cells
|
|
266
|
+
* @throws Error naming the case whose summary does not return String or Option<String>
|
|
267
|
+
* @internal
|
|
268
|
+
*/
|
|
269
|
+
export function actionRuleCells(key, col, rowType) {
|
|
270
|
+
const cfg = col.config;
|
|
271
|
+
const variantType = col.variantType;
|
|
272
|
+
const fieldType = rowType.fields[key];
|
|
273
|
+
const optional = !isTypeEqual(fieldType, variantType);
|
|
274
|
+
const cases = Object.entries(variantType.cases);
|
|
275
|
+
const summaries = new Map();
|
|
276
|
+
for (const [name, type] of cases) {
|
|
277
|
+
const summary = cfg.cases[name].summary;
|
|
278
|
+
if (summary === undefined)
|
|
279
|
+
continue;
|
|
280
|
+
const fn = East.function([type, rowType], undefined, (_$, v, r) => summary(v, r));
|
|
281
|
+
const out = Expr.type(fn).output;
|
|
282
|
+
const asOption = isTypeEqual(out, OptionType(StringType));
|
|
283
|
+
if (!asOption && !isTypeEqual(out, StringType)) {
|
|
284
|
+
throw new Error(`Sheet: action column "${key}" case "${name}" has a \`summary\` returning ${describeType(out)} — it returns String or Option<String>`);
|
|
285
|
+
}
|
|
286
|
+
summaries.set(name, { fn, optional: asOption });
|
|
287
|
+
}
|
|
288
|
+
const summary = East.function([rowType], StringType, ($, r) => {
|
|
289
|
+
const bound = new Map([...summaries].map(([name, s]) => [name, { fn: $.const(s.fn), optional: s.optional }]));
|
|
290
|
+
const ofValue = (v) => v.match(Object.fromEntries(cases.map(([name]) => [name, (_$2, value) => {
|
|
291
|
+
const s = bound.get(name);
|
|
292
|
+
if (s === undefined)
|
|
293
|
+
return East.value("", StringType);
|
|
294
|
+
const out = s.fn(value, r);
|
|
295
|
+
return s.optional ? out.match({ some: (_$3, text) => text, none: () => "" }) : out;
|
|
296
|
+
}])));
|
|
297
|
+
const field = r[key];
|
|
298
|
+
return optional
|
|
299
|
+
? field.match({ some: (_$2, v) => ofValue(v), none: () => "" })
|
|
300
|
+
: ofValue(field);
|
|
301
|
+
});
|
|
302
|
+
const out = [{ key: sheetRuleCell("summary", key), fn: summary, tag: "String", optional: false }];
|
|
303
|
+
if (cfg.name !== undefined) {
|
|
304
|
+
const name = cfg.name;
|
|
305
|
+
out.push({ key: sheetRuleCell("name", key), fn: East.function([rowType], StringType, (_$, r) => name(r)), tag: "String", optional: false });
|
|
306
|
+
}
|
|
307
|
+
if (cfg.title !== undefined) {
|
|
308
|
+
const title = cfg.title;
|
|
309
|
+
out.push({ key: sheetRuleCell("title", key), fn: East.function([rowType], StringType, (_$, r) => title(r)), tag: "String", optional: false });
|
|
310
|
+
}
|
|
311
|
+
return out;
|
|
312
|
+
}
|
|
313
|
+
// ============================================================================
|
|
314
|
+
// The wire kind
|
|
315
|
+
// ============================================================================
|
|
316
|
+
/** Whether a type is `Option<T>`. */
|
|
317
|
+
function optionOf(type) {
|
|
318
|
+
if (type.type !== "Variant")
|
|
319
|
+
return undefined;
|
|
320
|
+
const cases = type.cases;
|
|
321
|
+
const keys = Object.keys(cases);
|
|
322
|
+
return keys.length === 2 && cases["none"] !== undefined && cases["some"] !== undefined && isTypeEqual(type, OptionType(cases["some"])) ? cases["some"] : undefined;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* A draft → the value it stands for, `none` while a field it needs is missing
|
|
326
|
+
* or unread: an `Option` field missing is `none`.
|
|
327
|
+
*/
|
|
328
|
+
function buildComplete(rowType) {
|
|
329
|
+
const draftType = SheetDraftTypeFor(rowType);
|
|
330
|
+
const fields = Object.entries(rowType.fields);
|
|
331
|
+
return East.function([draftType], OptionType(rowType), ($, d) => {
|
|
332
|
+
const draft = d;
|
|
333
|
+
const out = {};
|
|
334
|
+
for (const [name, type] of fields) {
|
|
335
|
+
const field = $.const(draft[name]);
|
|
336
|
+
$.if(field.hasTag("invalid"), ($2) => { $2.return(East.value(none, OptionType(rowType))); });
|
|
337
|
+
if (optionOf(type) !== undefined) {
|
|
338
|
+
out[name] = $.const(field.match({ value: (_$2, v) => v }, () => East.value(none, type)), type);
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
$.if(field.hasTag("missing"), ($2) => { $2.return(East.value(none, OptionType(rowType))); });
|
|
342
|
+
out[name] = $.const(field.unwrap("value"), type);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return East.value(some(out), OptionType(rowType));
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
/** A group's draft → the group it stands for, `none` while its own fields or any line is incomplete. */
|
|
349
|
+
function buildCompleteGroup(groupType, linesField, completeLine) {
|
|
350
|
+
const draftType = SheetDraftGroupTypeFor(groupType, linesField);
|
|
351
|
+
const lineType = sheetLinesOf(groupType, linesField).lineType;
|
|
352
|
+
const fields = Object.entries(groupType.fields);
|
|
353
|
+
return East.function([draftType], OptionType(groupType), ($, d) => {
|
|
354
|
+
const draft = d;
|
|
355
|
+
const line = $.const(completeLine);
|
|
356
|
+
const out = {};
|
|
357
|
+
for (const [name, type] of fields) {
|
|
358
|
+
if (name === linesField) {
|
|
359
|
+
const lines = $.const(draft[name].map((_$2, l) => line(l)), ArrayType(OptionType(lineType)));
|
|
360
|
+
$.if(lines.some((_$2, l) => l.hasTag("none")), ($2) => { $2.return(East.value(none, OptionType(groupType))); });
|
|
361
|
+
out[name] = $.const(lines.map((_$2, l) => l.unwrap("some")), ArrayType(lineType));
|
|
362
|
+
continue;
|
|
363
|
+
}
|
|
364
|
+
const field = $.const(draft[name]);
|
|
365
|
+
$.if(field.hasTag("invalid"), ($2) => { $2.return(East.value(none, OptionType(groupType))); });
|
|
366
|
+
if (optionOf(type) !== undefined) {
|
|
367
|
+
out[name] = $.const(field.match({ value: (_$2, v) => v }, () => East.value(none, type)), type);
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
$.if(field.hasTag("missing"), ($2) => { $2.return(East.value(none, OptionType(groupType))); });
|
|
371
|
+
out[name] = $.const(field.unwrap("value"), type);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
return East.value(some(out), OptionType(groupType));
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
/** A draft → the labels of the fields an action waits on: a required field missing, any field unread. */
|
|
378
|
+
function buildMissing(rowType, labels) {
|
|
379
|
+
const draftType = SheetDraftTypeFor(rowType);
|
|
380
|
+
const fields = Object.entries(rowType.fields);
|
|
381
|
+
return East.function([draftType], ArrayType(StringType), ($, d) => {
|
|
382
|
+
const draft = d;
|
|
383
|
+
const out = $.let([], ArrayType(StringType));
|
|
384
|
+
for (const [name, type] of fields) {
|
|
385
|
+
const field = $.const(draft[name]);
|
|
386
|
+
const waits = optionOf(type) !== undefined ? field.hasTag("invalid") : field.hasTag("invalid").or(() => field.hasTag("missing"));
|
|
387
|
+
$.if(waits, ($2) => { $2(out.pushLast(East.value(labels.get(name) ?? spellOut(name), StringType))); });
|
|
388
|
+
}
|
|
389
|
+
return out;
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Compiles an action column into its wire kind: the machine as names, each
|
|
394
|
+
* case's take resolved through `Fields`, and `blocked`, each `initial` and
|
|
395
|
+
* each `updates` bridged over the wire context.
|
|
396
|
+
*
|
|
397
|
+
* @param input - The column, the bridge, the registers and the group's encoding ({@link SheetActionKindInput})
|
|
398
|
+
* @returns The column's kind payload
|
|
399
|
+
* @throws Error naming the column and the case: a take that does not fit its case's type, a register the sheet does not declare, a group patch on a flat sheet, or a group patch of another type
|
|
400
|
+
* @internal
|
|
401
|
+
*/
|
|
402
|
+
export function buildActionKind(input) {
|
|
403
|
+
const { meta, bridge, metas, registers } = input;
|
|
404
|
+
const key = meta.key;
|
|
405
|
+
const where = `Sheet: action column "${key}"`;
|
|
406
|
+
const cfg = meta.config;
|
|
407
|
+
const variantType = meta.action.variantType;
|
|
408
|
+
const grouped = bridge.group !== undefined;
|
|
409
|
+
const lineType = bridge.lineType;
|
|
410
|
+
const groupType = bridge.group?.groupType;
|
|
411
|
+
const ctxType = (grouped
|
|
412
|
+
? SheetGroupActionContextTypeFor(groupType, bridge.group.linesField)
|
|
413
|
+
: SheetActionContextTypeFor(lineType));
|
|
414
|
+
const rowPatchType = SheetPatchTypeFor(lineType);
|
|
415
|
+
const groupPatchType = groupType !== undefined ? SheetPatchTypeFor(groupType) : undefined;
|
|
416
|
+
const authorUpdatesType = groupPatchType !== undefined
|
|
417
|
+
? StructType({ row: rowPatchType, group: groupPatchType })
|
|
418
|
+
: StructType({ row: rowPatchType });
|
|
419
|
+
// The draft context → the action context: the row complete, its neighbours each complete or none.
|
|
420
|
+
const completeLine = buildComplete(lineType);
|
|
421
|
+
const completeGroup = grouped ? buildCompleteGroup(groupType, bridge.group.linesField, completeLine) : undefined;
|
|
422
|
+
const toContext = East.function([bridge.ctxType], OptionType(ctxType), ($, c) => {
|
|
423
|
+
const ctx = c;
|
|
424
|
+
const complete = $.const(completeLine);
|
|
425
|
+
const row = $.const(complete(ctx["row"]));
|
|
426
|
+
$.if(row.hasTag("none"), ($2) => { $2.return(East.value(none, OptionType(ctxType))); });
|
|
427
|
+
const rows = $.const(ctx["rows"].map((_$2, r) => complete(r)), ArrayType(OptionType(lineType)));
|
|
428
|
+
let group;
|
|
429
|
+
if (completeGroup !== undefined) {
|
|
430
|
+
const whole = $.const(completeGroup);
|
|
431
|
+
group = $.const(ctx["group"].match({ some: (_$2, g) => whole(g), none: () => East.value(none, OptionType(groupType)) }), OptionType(groupType));
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
group = $.const(none, OptionType(NullType));
|
|
435
|
+
}
|
|
436
|
+
return East.value(some({ row: row.unwrap("some"), index: ctx["rowIndex"], rows, group, today: ctx["today"] }), OptionType(ctxType));
|
|
437
|
+
});
|
|
438
|
+
// Whether a row may act now: its draft complete, and not `blocked`.
|
|
439
|
+
const labels = new Map(metas.filter((m) => m.config.header !== undefined).map((m) => [m.field, m.config.header]));
|
|
440
|
+
const missing = buildMissing(lineType, labels);
|
|
441
|
+
const blockedRule = cfg.blocked;
|
|
442
|
+
const blocked = blockedRule !== undefined
|
|
443
|
+
? East.function([ctxType], OptionType(StringType), (_$, c) => blockedRule(c))
|
|
444
|
+
: undefined;
|
|
445
|
+
const gate = East.function([SheetContextType], SheetActionGateType, ($, wire) => {
|
|
446
|
+
const bridgeCtx = $.const(bridge.bridgeCtx);
|
|
447
|
+
const to = $.const(toContext);
|
|
448
|
+
const typed = $.const(bridgeCtx(wire), bridge.ctxType);
|
|
449
|
+
const ctx = $.const(to(typed));
|
|
450
|
+
$.if(ctx.hasTag("none"), ($2) => {
|
|
451
|
+
const waits = $2.const(missing);
|
|
452
|
+
$2.return(East.value(variant("incomplete", waits(typed["row"])), SheetActionGateType));
|
|
453
|
+
});
|
|
454
|
+
if (blocked === undefined)
|
|
455
|
+
return East.value(variant("open", null), SheetActionGateType);
|
|
456
|
+
const rule = $.const(blocked);
|
|
457
|
+
return rule(ctx.unwrap("some")).match({
|
|
458
|
+
some: (_$2, reason) => East.value(variant("blocked", reason), SheetActionGateType),
|
|
459
|
+
none: () => East.value(variant("open", null), SheetActionGateType),
|
|
460
|
+
});
|
|
461
|
+
});
|
|
462
|
+
// The author's order: the `cases` record's, as East keeps a variant's cases in name order.
|
|
463
|
+
const types = variantType.cases;
|
|
464
|
+
const ordered = Object.keys(cfg.cases).map((name) => [name, types[name]]);
|
|
465
|
+
const caseValues = ordered.map(([name, type]) => {
|
|
466
|
+
const at = `${where} case "${name}"`;
|
|
467
|
+
const cs = cfg.cases[name];
|
|
468
|
+
const take = cs.take;
|
|
469
|
+
const kind = take?.[FIELD_HINT];
|
|
470
|
+
let wireTake;
|
|
471
|
+
let formInitial;
|
|
472
|
+
if (isTypeEqual(type, NullType)) {
|
|
473
|
+
if (take !== undefined)
|
|
474
|
+
throw new Error(`${at} is NullType — it asks nothing, and is a button; it takes no \`take\``);
|
|
475
|
+
wireTake = East.value(variant("button", null), SheetActionTakeType);
|
|
476
|
+
}
|
|
477
|
+
else if (kind === "action-register") {
|
|
478
|
+
if (!isTypeEqual(type, StringType))
|
|
479
|
+
throw new Error(`${at} is ${describeType(type)} — Sheet.action.menu({ of }) chooses a register member, whose key is a String`);
|
|
480
|
+
if (registers[take.of] === undefined)
|
|
481
|
+
throw new Error(`${at}'s menu names register "${take.of}", which \`registers\` does not declare (${Object.keys(registers).join(", ") || "none declared"})`);
|
|
482
|
+
wireTake = East.value(variant("register", take.of), SheetActionTakeType);
|
|
483
|
+
}
|
|
484
|
+
else if (kind === "action-menu" || (kind === undefined && isChoice(type))) {
|
|
485
|
+
if (!isChoice(type))
|
|
486
|
+
throw new Error(`${at} is ${describeType(type)} — Sheet.action.menu({ labels }) chooses among a variant's cases, each NullType`);
|
|
487
|
+
let spec;
|
|
488
|
+
try {
|
|
489
|
+
spec = fieldSpecs(StructType({ [name]: type }), { [name]: fieldSelect({ labels: take?.labels ?? {} }) })[0];
|
|
490
|
+
}
|
|
491
|
+
catch (e) {
|
|
492
|
+
throw new Error(`${at}'s menu ${e.message.replace(/^Fields: "[^"]*" is .* field — /, "")}`);
|
|
493
|
+
}
|
|
494
|
+
wireTake = East.value(variant("menu", spec.editor.type === "select" ? spec.editor.value : []), SheetActionTakeType);
|
|
495
|
+
}
|
|
496
|
+
else if (kind === "action-form" || kind === undefined) {
|
|
497
|
+
const scalar = type.type !== "Struct";
|
|
498
|
+
const hints = take?.fields;
|
|
499
|
+
let specs;
|
|
500
|
+
try {
|
|
501
|
+
specs = scalar
|
|
502
|
+
? fieldSpecs(StructType({ [name]: type }), (hints === undefined ? {} : { [name]: hints }))
|
|
503
|
+
: fieldSpecs(type, (hints ?? {}));
|
|
504
|
+
}
|
|
505
|
+
catch (e) {
|
|
506
|
+
throw new Error(`${at}'s form — ${e.message.replace(/^Fields: /, "")}`);
|
|
507
|
+
}
|
|
508
|
+
for (const spec of specs) {
|
|
509
|
+
if (spec.editor.type === "reference" && registers[spec.editor.value.of] === undefined) {
|
|
510
|
+
throw new Error(`${at}'s form field "${spec.path.join(".")}" is a reference to "${spec.editor.value.of}", which is not one of the sheet's registers (${Object.keys(registers).join(", ") || "none declared"})`);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
wireTake = East.value(variant("form", { specs, scalar }), SheetActionTakeType);
|
|
514
|
+
formInitial = take?.initial;
|
|
515
|
+
}
|
|
516
|
+
else {
|
|
517
|
+
throw new Error(`${at}'s \`take\` is "${String(kind)}" — it is Sheet.action.menu(…) or Sheet.action.form(…)`);
|
|
518
|
+
}
|
|
519
|
+
// What the form opens with, encoded at the case's type.
|
|
520
|
+
const initial = formInitial !== undefined
|
|
521
|
+
? (() => {
|
|
522
|
+
const opening = East.function([ctxType], type, (_$, c) => formInitial(c));
|
|
523
|
+
return some(East.function([SheetContextType], BlobType, ($, wire) => {
|
|
524
|
+
const bridgeCtx = $.const(bridge.bridgeCtx);
|
|
525
|
+
const to = $.const(toContext);
|
|
526
|
+
const open = $.const(opening);
|
|
527
|
+
return East.Blob.encodeBeast(open(to(bridgeCtx(wire)).unwrap("some")), "v2");
|
|
528
|
+
}));
|
|
529
|
+
})()
|
|
530
|
+
: none;
|
|
531
|
+
// What else taking it writes, as the cells its patches set.
|
|
532
|
+
const updatesRule = cs.updates;
|
|
533
|
+
const updates = updatesRule !== undefined
|
|
534
|
+
? (() => {
|
|
535
|
+
const author = East.function([type, ctxType, DateTimeType], authorUpdatesType, (_$, v, c, moment) => {
|
|
536
|
+
const given = updatesRule(v, c, moment) ?? {};
|
|
537
|
+
if (given.group !== undefined && groupPatchType === undefined) {
|
|
538
|
+
throw new Error(`${at}'s \`updates\` returns a group patch, and the sheet declares no group — a flat sheet's action updates its row alone`);
|
|
539
|
+
}
|
|
540
|
+
const row = given.row !== undefined ? East.value(given.row) : East.value(emptyPatch(lineType), rowPatchType);
|
|
541
|
+
if (!isTypeEqual(Expr.type(row), rowPatchType)) {
|
|
542
|
+
throw new Error(`${at}'s \`updates\` returns a row patch of another type — build it with Sheet.patch(RowType, { … }) over the columns' type`);
|
|
543
|
+
}
|
|
544
|
+
if (groupPatchType === undefined)
|
|
545
|
+
return { row };
|
|
546
|
+
const group = given.group !== undefined ? East.value(given.group) : East.value(emptyPatch(groupType), groupPatchType);
|
|
547
|
+
if (!isTypeEqual(Expr.type(group), groupPatchType)) {
|
|
548
|
+
throw new Error(`${at}'s \`updates\` returns a group patch of another type — build it with Sheet.patch(GroupType, { … }) over the group's type`);
|
|
549
|
+
}
|
|
550
|
+
return { row, group };
|
|
551
|
+
});
|
|
552
|
+
return some(East.function([BlobType, SheetContextType, DateTimeType], SheetActionUpdatesType, ($, bytes, wire, moment) => {
|
|
553
|
+
const bridgeCtx = $.const(bridge.bridgeCtx);
|
|
554
|
+
const to = $.const(toContext);
|
|
555
|
+
const rule = $.const(author);
|
|
556
|
+
const encodeRow = $.const(bridge.seedCells);
|
|
557
|
+
const value = $.const(bytes.decodeBeast(type, "v2"));
|
|
558
|
+
const result = $.const(rule(value, to(bridgeCtx(wire)).unwrap("some"), moment));
|
|
559
|
+
const row = $.const(encodeRow(result.row));
|
|
560
|
+
if (input.encodeGroup === undefined || groupPatchType === undefined) {
|
|
561
|
+
return East.value({ row, group: new Map() }, SheetActionUpdatesType);
|
|
562
|
+
}
|
|
563
|
+
const encodeGroup = $.const(input.encodeGroup);
|
|
564
|
+
return East.value({ row, group: encodeGroup(result.group) }, SheetActionUpdatesType);
|
|
565
|
+
}));
|
|
566
|
+
})()
|
|
567
|
+
: none;
|
|
568
|
+
return East.value({
|
|
569
|
+
case: name,
|
|
570
|
+
label: cs.label,
|
|
571
|
+
state: cs.state,
|
|
572
|
+
tone: cs.tone !== undefined ? some(resolveTag(cs.tone, StatusValueType)) : none,
|
|
573
|
+
icon: cs.icon !== undefined ? some(cs.icon) : none,
|
|
574
|
+
next: [...(cs.next ?? [])],
|
|
575
|
+
take: wireTake,
|
|
576
|
+
valueType: toEastTypeValue(type),
|
|
577
|
+
initial,
|
|
578
|
+
updates,
|
|
579
|
+
}, SheetActionCaseType);
|
|
580
|
+
});
|
|
581
|
+
return East.value({
|
|
582
|
+
start: [...(cfg.start ?? [])],
|
|
583
|
+
cases: caseValues,
|
|
584
|
+
gate,
|
|
585
|
+
summary: sheetRuleCell("summary", key),
|
|
586
|
+
name: cfg.name !== undefined ? some(sheetRuleCell("name", key)) : none,
|
|
587
|
+
title: cfg.title !== undefined ? some(sheetRuleCell("title", key)) : none,
|
|
588
|
+
}, SheetActionKindType);
|
|
589
|
+
}
|
|
590
|
+
/** A patch of a struct that sets nothing — every field `none`. */
|
|
591
|
+
function emptyPatch(type) {
|
|
592
|
+
return Object.fromEntries(Object.keys(type.fields).map((name) => [name, none]));
|
|
593
|
+
}
|
|
594
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/sheet/actions.ts"],"names":[],"mappings":"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"}
|