@elaraai/e3-ui 1.0.94 → 1.0.95
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/adapters.d.ts +159 -0
- package/dist/src/allocation/adapters.d.ts.map +1 -0
- package/dist/src/allocation/adapters.js +241 -0
- package/dist/src/allocation/adapters.js.map +1 -0
- package/dist/src/allocation/functions.d.ts +664 -0
- package/dist/src/allocation/functions.d.ts.map +1 -0
- package/dist/src/allocation/functions.js +782 -0
- package/dist/src/allocation/functions.js.map +1 -0
- package/dist/src/allocation/index.d.ts +2985 -0
- package/dist/src/allocation/index.d.ts.map +1 -0
- package/dist/src/allocation/index.js +499 -0
- package/dist/src/allocation/index.js.map +1 -0
- package/dist/src/allocation/types.d.ts +832 -0
- package/dist/src/allocation/types.d.ts.map +1 -0
- package/dist/src/allocation/types.js +360 -0
- package/dist/src/allocation/types.js.map +1 -0
- package/dist/src/bind/func.d.ts +14 -0
- package/dist/src/bind/func.d.ts.map +1 -1
- package/dist/src/bind/func.js +22 -1
- package/dist/src/bind/func.js.map +1 -1
- package/dist/src/calendar/index.d.ts +510 -1639
- package/dist/src/calendar/index.d.ts.map +1 -1
- package/dist/src/calendar/index.js +56 -29
- package/dist/src/calendar/index.js.map +1 -1
- package/dist/src/flowchart/canvas.d.ts +9 -21
- package/dist/src/flowchart/canvas.d.ts.map +1 -1
- package/dist/src/flowchart/canvas.js +10 -22
- package/dist/src/flowchart/canvas.js.map +1 -1
- package/dist/src/flowchart/flowchart.d.ts +19 -13
- package/dist/src/flowchart/flowchart.d.ts.map +1 -1
- package/dist/src/flowchart/flowchart.js.map +1 -1
- package/dist/src/flowchart/index.d.ts +44 -21
- package/dist/src/flowchart/index.d.ts.map +1 -1
- package/dist/src/flowchart/index.js +43 -20
- package/dist/src/flowchart/index.js.map +1 -1
- package/dist/src/flowchart/library.d.ts +166 -81
- package/dist/src/flowchart/library.d.ts.map +1 -1
- package/dist/src/flowchart/library.js +232 -105
- package/dist/src/flowchart/library.js.map +1 -1
- package/dist/src/flowchart/over.d.ts +9 -16
- package/dist/src/flowchart/over.d.ts.map +1 -1
- package/dist/src/flowchart/over.js +9 -16
- package/dist/src/flowchart/over.js.map +1 -1
- package/dist/src/flowchart/payload.d.ts +710 -508
- package/dist/src/flowchart/payload.d.ts.map +1 -1
- package/dist/src/flowchart/payload.js +128 -74
- package/dist/src/flowchart/payload.js.map +1 -1
- package/dist/src/flowchart/window.d.ts +132 -347
- package/dist/src/flowchart/window.d.ts.map +1 -1
- package/dist/src/flowchart/window.js +48 -55
- package/dist/src/flowchart/window.js.map +1 -1
- package/dist/src/index.d.ts +11 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +14 -6
- package/dist/src/index.js.map +1 -1
- package/dist/src/internal.d.ts +18 -7
- package/dist/src/internal.d.ts.map +1 -1
- package/dist/src/internal.js +28 -9
- package/dist/src/internal.js.map +1 -1
- package/dist/src/plan/event-rows.d.ts +26 -10
- package/dist/src/plan/event-rows.d.ts.map +1 -1
- package/dist/src/plan/event-rows.js +39 -13
- package/dist/src/plan/event-rows.js.map +1 -1
- package/dist/src/plan/ir.d.ts +244 -815
- package/dist/src/plan/ir.d.ts.map +1 -1
- package/dist/src/plan/ir.js +8 -6
- package/dist/src/plan/ir.js.map +1 -1
- package/dist/src/plan/library.d.ts +3 -0
- package/dist/src/plan/library.d.ts.map +1 -1
- package/dist/src/plan/library.js +1 -1
- package/dist/src/plan/library.js.map +1 -1
- package/dist/src/plan/ordered-source.d.ts +1 -0
- package/dist/src/plan/ordered-source.d.ts.map +1 -1
- package/dist/src/plan/plan.d.ts +559 -1667
- package/dist/src/plan/plan.d.ts.map +1 -1
- package/dist/src/plan/plan.js +123 -45
- package/dist/src/plan/plan.js.map +1 -1
- package/dist/src/plan/root.d.ts +16 -20
- package/dist/src/plan/root.d.ts.map +1 -1
- package/dist/src/plan/root.js +23 -33
- package/dist/src/plan/root.js.map +1 -1
- package/dist/src/roster/coverage.d.ts +17 -231
- package/dist/src/roster/coverage.d.ts.map +1 -1
- package/dist/src/roster/coverage.js +94 -90
- package/dist/src/roster/coverage.js.map +1 -1
- package/dist/src/roster/fit.d.ts +59 -0
- package/dist/src/roster/fit.d.ts.map +1 -0
- package/dist/src/roster/fit.js +155 -0
- package/dist/src/roster/fit.js.map +1 -0
- package/dist/src/roster/index.d.ts +2862 -3662
- package/dist/src/roster/index.d.ts.map +1 -1
- package/dist/src/roster/index.js +383 -81
- package/dist/src/roster/index.js.map +1 -1
- package/dist/src/roster/library.d.ts +37 -92
- package/dist/src/roster/library.d.ts.map +1 -1
- package/dist/src/roster/library.js +25 -64
- package/dist/src/roster/library.js.map +1 -1
- package/dist/src/roster/lists.d.ts +195 -0
- package/dist/src/roster/lists.d.ts.map +1 -0
- package/dist/src/roster/lists.js +233 -0
- package/dist/src/roster/lists.js.map +1 -0
- package/dist/src/roster/rules.d.ts +17 -260
- package/dist/src/roster/rules.d.ts.map +1 -1
- package/dist/src/roster/rules.js +135 -132
- package/dist/src/roster/rules.js.map +1 -1
- package/dist/src/roster/targets.d.ts +115 -0
- package/dist/src/roster/targets.d.ts.map +1 -0
- package/dist/src/roster/targets.js +213 -0
- package/dist/src/roster/targets.js.map +1 -0
- package/dist/src/roster/times.d.ts +251 -0
- package/dist/src/roster/times.d.ts.map +1 -0
- package/dist/src/roster/times.js +174 -0
- package/dist/src/roster/times.js.map +1 -0
- package/dist/src/roster/types.d.ts +828 -183
- package/dist/src/roster/types.d.ts.map +1 -1
- package/dist/src/roster/types.js +224 -97
- package/dist/src/roster/types.js.map +1 -1
- package/dist/src/schedule/accessor.d.ts +28 -0
- package/dist/src/schedule/accessor.d.ts.map +1 -0
- package/dist/src/schedule/accessor.js +39 -0
- package/dist/src/schedule/accessor.js.map +1 -0
- package/dist/src/schedule/events.d.ts +170 -42
- package/dist/src/schedule/events.d.ts.map +1 -1
- package/dist/src/schedule/events.js +431 -171
- package/dist/src/schedule/events.js.map +1 -1
- package/dist/src/schedule/index.d.ts +41 -4
- package/dist/src/schedule/index.d.ts.map +1 -1
- package/dist/src/schedule/index.js +35 -3
- package/dist/src/schedule/index.js.map +1 -1
- package/dist/src/schedule/library.d.ts +13 -3
- package/dist/src/schedule/library.d.ts.map +1 -1
- package/dist/src/schedule/library.js +11 -4
- package/dist/src/schedule/library.js.map +1 -1
- package/dist/src/schedule/periods.d.ts +115 -0
- package/dist/src/schedule/periods.d.ts.map +1 -0
- package/dist/src/schedule/periods.js +215 -0
- package/dist/src/schedule/periods.js.map +1 -0
- package/dist/src/schedule/record-window.d.ts +25 -3
- package/dist/src/schedule/record-window.d.ts.map +1 -1
- package/dist/src/schedule/record-window.js +31 -18
- package/dist/src/schedule/record-window.js.map +1 -1
- package/dist/src/schedule/resources.d.ts +82 -4
- package/dist/src/schedule/resources.d.ts.map +1 -1
- package/dist/src/schedule/resources.js +44 -14
- package/dist/src/schedule/resources.js.map +1 -1
- package/dist/src/schedule/session.d.ts +69 -0
- package/dist/src/schedule/session.d.ts.map +1 -0
- package/dist/src/schedule/session.js +121 -0
- package/dist/src/schedule/session.js.map +1 -0
- package/dist/src/schedule/templates.d.ts +14 -2
- package/dist/src/schedule/templates.d.ts.map +1 -1
- package/dist/src/schedule/templates.js +5 -3
- package/dist/src/schedule/templates.js.map +1 -1
- package/dist/src/schedule/types.d.ts +1671 -37
- package/dist/src/schedule/types.d.ts.map +1 -1
- package/dist/src/schedule/types.js +196 -5
- package/dist/src/schedule/types.js.map +1 -1
- package/dist/src/schedule/window.d.ts +14 -0
- package/dist/src/schedule/window.d.ts.map +1 -1
- package/dist/src/schedule/window.js +14 -4
- package/dist/src/schedule/window.js.map +1 -1
- package/dist/src/schedule/words.d.ts +22 -0
- package/dist/src/schedule/words.d.ts.map +1 -0
- package/dist/src/schedule/words.js +25 -0
- package/dist/src/schedule/words.js.map +1 -0
- package/dist/src/sheet/index.d.ts +61 -27
- package/dist/src/sheet/index.d.ts.map +1 -1
- package/dist/src/sheet/index.js +59 -25
- package/dist/src/sheet/index.js.map +1 -1
- package/dist/src/sheet/library.d.ts +21 -3
- package/dist/src/sheet/library.d.ts.map +1 -1
- package/dist/src/sheet/library.js +23 -6
- package/dist/src/sheet/library.js.map +1 -1
- package/dist/src/sheet/registers.d.ts +100 -85
- package/dist/src/sheet/registers.d.ts.map +1 -1
- package/dist/src/sheet/registers.js +100 -85
- package/dist/src/sheet/registers.js.map +1 -1
- package/dist/src/sheet/root.d.ts +8 -12
- package/dist/src/sheet/root.d.ts.map +1 -1
- package/dist/src/sheet/root.js +6 -40
- package/dist/src/sheet/root.js.map +1 -1
- package/dist/src/sheet/sheet.d.ts +598 -2349
- package/dist/src/sheet/sheet.d.ts.map +1 -1
- package/dist/src/sheet/sheet.js +124 -37
- package/dist/src/sheet/sheet.js.map +1 -1
- package/dist/src/sheet/sub-rows.d.ts +74 -28
- package/dist/src/sheet/sub-rows.d.ts.map +1 -1
- package/dist/src/sheet/sub-rows.js +74 -28
- package/dist/src/sheet/sub-rows.js.map +1 -1
- package/dist/src/sheet/templates.d.ts +98 -34
- package/dist/src/sheet/templates.d.ts.map +1 -1
- package/dist/src/sheet/templates.js +102 -58
- package/dist/src/sheet/templates.js.map +1 -1
- package/dist/src/sheet/types.d.ts +289 -1359
- package/dist/src/sheet/types.d.ts.map +1 -1
- package/dist/src/sheet/types.js +20 -26
- package/dist/src/sheet/types.js.map +1 -1
- package/dist/src/sheet/views.d.ts +10 -11
- package/dist/src/sheet/views.d.ts.map +1 -1
- package/dist/src/sheet/views.js +15 -20
- package/dist/src/sheet/views.js.map +1 -1
- package/dist/src/{roster/visibility.d.ts → utils/key-visibility.d.ts} +42 -7
- package/dist/src/utils/key-visibility.d.ts.map +1 -0
- package/dist/src/utils/key-visibility.js +36 -0
- package/dist/src/utils/key-visibility.js.map +1 -0
- package/dist/src/utils/ordered-source.d.ts +1 -0
- package/dist/src/utils/ordered-source.d.ts.map +1 -1
- package/dist/src/utils/ordered-source.js +8 -3
- package/dist/src/utils/ordered-source.js.map +1 -1
- package/dist/src/utils/record-sources.d.ts +107 -0
- package/dist/src/utils/record-sources.d.ts.map +1 -0
- package/dist/src/utils/record-sources.js +132 -0
- package/dist/src/utils/record-sources.js.map +1 -0
- package/dist/test/allocation/allocation.examples.d.ts +2902 -0
- package/dist/test/allocation/allocation.examples.d.ts.map +1 -0
- package/dist/test/allocation/allocation.examples.js +643 -0
- package/dist/test/allocation/allocation.examples.js.map +1 -0
- package/dist/test/allocation/fit.examples.d.ts +546 -0
- package/dist/test/allocation/fit.examples.d.ts.map +1 -0
- package/dist/test/allocation/fit.examples.js +171 -0
- package/dist/test/allocation/fit.examples.js.map +1 -0
- package/dist/test/allocation/kiln-yard.d.ts +181 -0
- package/dist/test/allocation/kiln-yard.d.ts.map +1 -0
- package/dist/test/allocation/kiln-yard.js +228 -0
- package/dist/test/allocation/kiln-yard.js.map +1 -0
- package/dist/test/bind/data/data.examples.d.ts +651 -1
- package/dist/test/bind/data/data.examples.d.ts.map +1 -1
- package/dist/test/bind/data/data.examples.js +140 -2
- package/dist/test/bind/data/data.examples.js.map +1 -1
- package/dist/test/bind/func/func.examples.d.ts +10 -1
- package/dist/test/bind/func/func.examples.d.ts.map +1 -1
- package/dist/test/bind/func/func.examples.js +8 -1
- package/dist/test/bind/func/func.examples.js.map +1 -1
- package/dist/test/bind/record/record.examples.d.ts +633 -1
- package/dist/test/bind/record/record.examples.d.ts.map +1 -1
- package/dist/test/bind/record/record.examples.js +26 -2
- package/dist/test/bind/record/record.examples.js.map +1 -1
- package/dist/test/calendar/calendar-records.examples.d.ts.map +1 -1
- package/dist/test/calendar/calendar-records.examples.js +18 -14
- package/dist/test/calendar/calendar-records.examples.js.map +1 -1
- package/dist/test/calendar/calendar.examples.d.ts +521 -16
- package/dist/test/calendar/calendar.examples.d.ts.map +1 -1
- package/dist/test/calendar/calendar.examples.js +182 -135
- package/dist/test/calendar/calendar.examples.js.map +1 -1
- package/dist/test/examples-package.d.ts +75 -0
- package/dist/test/examples-package.d.ts.map +1 -0
- package/dist/test/examples-package.js +263 -0
- package/dist/test/examples-package.js.map +1 -0
- package/dist/test/flowchart/flowchart.examples.d.ts +211 -19
- package/dist/test/flowchart/flowchart.examples.d.ts.map +1 -1
- package/dist/test/flowchart/flowchart.examples.js +102 -75
- package/dist/test/flowchart/flowchart.examples.js.map +1 -1
- package/dist/test/plan/plan-events.examples.d.ts +1439 -209
- package/dist/test/plan/plan-events.examples.d.ts.map +1 -1
- package/dist/test/plan/plan-events.examples.js +199 -59
- package/dist/test/plan/plan-events.examples.js.map +1 -1
- package/dist/test/plan/plan-records.examples.d.ts +420 -0
- package/dist/test/plan/plan-records.examples.d.ts.map +1 -1
- package/dist/test/plan/plan-records.examples.js +70 -19
- package/dist/test/plan/plan-records.examples.js.map +1 -1
- package/dist/test/plan/plan-windows.examples.d.ts +636 -55
- package/dist/test/plan/plan-windows.examples.d.ts.map +1 -1
- package/dist/test/plan/plan-windows.examples.js +69 -33
- package/dist/test/plan/plan-windows.examples.js.map +1 -1
- package/dist/test/plan/plan.examples.d.ts +153 -31
- package/dist/test/plan/plan.examples.d.ts.map +1 -1
- package/dist/test/plan/plan.examples.js +178 -101
- package/dist/test/plan/plan.examples.js.map +1 -1
- package/dist/test/roster/domain.examples.d.ts +467 -250
- package/dist/test/roster/domain.examples.d.ts.map +1 -1
- package/dist/test/roster/domain.examples.js +92 -29
- package/dist/test/roster/domain.examples.js.map +1 -1
- package/dist/test/roster/roster-records.examples.d.ts +430 -586
- package/dist/test/roster/roster-records.examples.d.ts.map +1 -1
- package/dist/test/roster/roster-records.examples.js +102 -43
- package/dist/test/roster/roster-records.examples.js.map +1 -1
- package/dist/test/roster/roster.examples.d.ts +2319 -606
- package/dist/test/roster/roster.examples.d.ts.map +1 -1
- package/dist/test/roster/roster.examples.js +456 -148
- package/dist/test/roster/roster.examples.js.map +1 -1
- package/dist/test/roster/warehouse.d.ts +172 -63
- package/dist/test/roster/warehouse.d.ts.map +1 -1
- package/dist/test/roster/warehouse.js +172 -39
- package/dist/test/roster/warehouse.js.map +1 -1
- package/dist/test/schedule/schedule.examples.d.ts +3499 -0
- package/dist/test/schedule/schedule.examples.d.ts.map +1 -0
- package/dist/test/schedule/schedule.examples.js +192 -0
- package/dist/test/schedule/schedule.examples.js.map +1 -0
- package/dist/test/sheet/sheet-records.examples.d.ts.map +1 -1
- package/dist/test/sheet/sheet-records.examples.js +22 -18
- package/dist/test/sheet/sheet-records.examples.js.map +1 -1
- package/dist/test/sheet/sheet.examples.d.ts +715 -26
- package/dist/test/sheet/sheet.examples.d.ts.map +1 -1
- package/dist/test/sheet/sheet.examples.js +204 -130
- package/dist/test/sheet/sheet.examples.js.map +1 -1
- package/package.json +17 -10
- package/dist/src/roster/people.d.ts +0 -50
- package/dist/src/roster/people.d.ts.map +0 -1
- package/dist/src/roster/people.js +0 -32
- package/dist/src/roster/people.js.map +0 -1
- package/dist/src/roster/visibility.d.ts.map +0 -1
- package/dist/src/roster/visibility.js +0 -25
- package/dist/src/roster/visibility.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/allocation/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,499 @@
|
|
|
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
|
+
* `<Allocation>` (#1371, `Builder Interfaces Spec.md` §6, `Allocation Spec.md`):
|
|
7
|
+
* a day's arrivals booked into timed lane slots, and each bin allocated to
|
|
8
|
+
* resources with room and time for its hold, over the app's own records, in the
|
|
9
|
+
* renderer's BuilderFrame. It writes the app's bins through the bin kind's roles
|
|
10
|
+
* (`Schedule.events`), reads its lanes and its resources (`Schedule.resources`)
|
|
11
|
+
* and what it books from (`Allocation.arrivals`), and publishes the app's days
|
|
12
|
+
* (`Schedule.periods`). It stores nothing in a shape of its own.
|
|
13
|
+
*
|
|
14
|
+
* The tag validates, builds the lanes, the resources and the arrivals from
|
|
15
|
+
* their accessors, and assembles the closed payload; it composes no East UI
|
|
16
|
+
* component and emits no layout, session or gesture program. The app's bin row
|
|
17
|
+
* type `R` crosses the payload as beast2 bytes, as Schedule's kinds' rows do:
|
|
18
|
+
* the app's `check` over bytes at `CheckContext(R)`, its columns over bytes at
|
|
19
|
+
* `R`, and the fit's binding checked against `FitRequest(R)`. The renderer
|
|
20
|
+
* compiles the Allocation's functions over `R`, the bin kind's `rowType`, and
|
|
21
|
+
* calls the fit, the app's `e3.function`, by name: it computes no fit of its own.
|
|
22
|
+
*
|
|
23
|
+
* @packageDocumentation
|
|
24
|
+
*/
|
|
25
|
+
import { ArrayType, BlobType, BooleanType, DateTimeType, East, Expr, FloatType, FunctionType, NullType, OptionType, StringType, StructType, VariantType, isTypeEqual, none, printType, some, variant, } from "@elaraai/east";
|
|
26
|
+
import { EastUI, StatusTokenType, TimeStepType } from "@elaraai/east-ui";
|
|
27
|
+
import { RecordSlicesChromeType, RowSourceType } from "@elaraai/east-ui/internal";
|
|
28
|
+
import { FuncBindingType, boundFuncSignature } from "../bind/func.js";
|
|
29
|
+
import { scheduleCheck } from "../schedule/index.js";
|
|
30
|
+
import { SCHEDULE_DEF } from "../schedule/resources.js";
|
|
31
|
+
import { ScheduleAllocationKindType, SchedulePeriodsKindType } from "../schedule/types.js";
|
|
32
|
+
import { recordSources } from "../utils/record-sources.js";
|
|
33
|
+
import { allocationArrivals, allocationArrivalsOf, allocationInitial, allocationLanesOf, allocationResourcesOf, isAllocationArrivals, } from "./adapters.js";
|
|
34
|
+
import { allocationAnswer, allocationCandidates, allocationCheck, allocationFit, allocationLoads, allocationLookahead, allocationSlots, } from "./functions.js";
|
|
35
|
+
import * as T from "./types.js";
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// The payload
|
|
38
|
+
// ============================================================================
|
|
39
|
+
/**
|
|
40
|
+
* A declared library tab.
|
|
41
|
+
*
|
|
42
|
+
* @property arrivals - Arrivals: overdue, ready, removed from the plan, booked
|
|
43
|
+
* @property resources - Resources: free, loading and busy today
|
|
44
|
+
*/
|
|
45
|
+
export const AllocationLibraryTabType = VariantType({ arrivals: NullType, resources: NullType });
|
|
46
|
+
/**
|
|
47
|
+
* One of the app's bin fields shown as a Table column and an inspector row.
|
|
48
|
+
*
|
|
49
|
+
* @property key - Its key
|
|
50
|
+
* @property label - Its heading (`Spec`)
|
|
51
|
+
* @property text - Its text, from the bin's row as bytes at the row type
|
|
52
|
+
* @property tone - Its tone, from the row as bytes; `none` for plain text
|
|
53
|
+
* @property table - Whether the Table shows it; the inspector always does
|
|
54
|
+
*/
|
|
55
|
+
export const AllocationColumnType = StructType({
|
|
56
|
+
key: StringType, label: StringType, text: FunctionType([BlobType], StringType),
|
|
57
|
+
tone: OptionType(FunctionType([BlobType], OptionType(StatusTokenType))), table: BooleanType,
|
|
58
|
+
});
|
|
59
|
+
/**
|
|
60
|
+
* One of the board's nouns, resolved: as a heading writes it, its plural, and its article.
|
|
61
|
+
*
|
|
62
|
+
* @property one - The singular, as a heading writes it (`Bay`)
|
|
63
|
+
* @property other - The plural (`Bays`)
|
|
64
|
+
* @property article - `a` or `an`, before the singular in running text
|
|
65
|
+
*/
|
|
66
|
+
export const AllocationNounType = StructType({ one: StringType, other: StringType, article: StringType });
|
|
67
|
+
/**
|
|
68
|
+
* The board's nouns, the app's, everywhere the board writes them (D12).
|
|
69
|
+
*
|
|
70
|
+
* @property lane - A lane (`Lane`)
|
|
71
|
+
* @property arrival - What the board books from (`Arrival`)
|
|
72
|
+
* @property resource - A resource (`Resource`)
|
|
73
|
+
* @property quantity - The quantity's heading word (`QTY`)
|
|
74
|
+
*/
|
|
75
|
+
export const AllocationLabelsType = StructType({ lane: AllocationNounType, arrival: AllocationNounType, resource: AllocationNounType, quantity: StringType });
|
|
76
|
+
/**
|
|
77
|
+
* One of the Table's time bands: it runs from its hour to the next band's, the last to midnight.
|
|
78
|
+
*
|
|
79
|
+
* @property from - Its first hour of the day, `0 ≤ from < 24` (a fraction is minutes: `7.5` is 07:30)
|
|
80
|
+
* @property label - Its heading; `none`, its hours (`06:00–12:00`)
|
|
81
|
+
*/
|
|
82
|
+
export const AllocationBandType = StructType({ from: FloatType, label: OptionType(StringType) });
|
|
83
|
+
/**
|
|
84
|
+
* The Table's options.
|
|
85
|
+
*
|
|
86
|
+
* @property bands - Its time bands, the first from 00:00, each later than the one before
|
|
87
|
+
*/
|
|
88
|
+
export const AllocationTableOptionsType = StructType({ bands: ArrayType(AllocationBandType) });
|
|
89
|
+
/**
|
|
90
|
+
* The board's settings.
|
|
91
|
+
*
|
|
92
|
+
* @property layout - The first layout
|
|
93
|
+
* @property date - The first day; today when `none`
|
|
94
|
+
* @property horizon - The Timeline's resource axis around the day
|
|
95
|
+
* @property title - The summary's heading
|
|
96
|
+
* @property readOnly - No edits; a published day is always read-only
|
|
97
|
+
*/
|
|
98
|
+
export const AllocationSettingsType = StructType({
|
|
99
|
+
layout: T.AllocationLayoutType, date: OptionType(DateTimeType), horizon: StructType({ before: TimeStepType, after: TimeStepType }),
|
|
100
|
+
title: StringType, readOnly: BooleanType,
|
|
101
|
+
});
|
|
102
|
+
/**
|
|
103
|
+
* The closed renderer payload (`Builder Interfaces Spec.md` §6). BuilderFrame
|
|
104
|
+
* is internal to the renderer.
|
|
105
|
+
*
|
|
106
|
+
* @property bin - The bin kind: the app's bins read and written through their roles, over bytes at the row type — its `unit` the quantity's, its `values` the fields no role maps
|
|
107
|
+
* @property lanes - Every lane, in order, from the lanes' resource kind's accessors
|
|
108
|
+
* @property every - The slot spacing
|
|
109
|
+
* @property resources - Every resource, from the resources' kind's accessors: the calculation scope, whatever the slice shows
|
|
110
|
+
* @property arrivals - Every arrival the day may book, from `Allocation.arrivals`' accessors
|
|
111
|
+
* @property initial - A booked bin's own fields, by its arrival's key, as bytes at the bin kind's `values`: what its `create` takes; `none`, their types' defaults
|
|
112
|
+
* @property periods - The app's days: their status, and Publish; `none`, no status chip and no Publish
|
|
113
|
+
* @property narrowed - Each narrowed source's keys, paged through its part of `slice`: the lanes, the resources and the arrivals that show
|
|
114
|
+
* @property fit - The app's fit, by its `e3.function`'s name
|
|
115
|
+
* @property check - The app's issues, from a `CheckContext(R)` as bytes
|
|
116
|
+
* @property columns - The app's bin fields as columns and inspector rows
|
|
117
|
+
* @property rules - The built-in rules
|
|
118
|
+
* @property library - The library's tabs, in order
|
|
119
|
+
* @property inspector - Whether the inspector pane shows: the bin kind's own `inspector`, or its form over `fields`, draws in it
|
|
120
|
+
* @property slice - The narrowing's chrome: a Slice over the bins', the lanes', the resources' and the arrivals' records, one rail
|
|
121
|
+
* @property settings - The board's settings
|
|
122
|
+
* @property id - Storage keys and drag-source ids
|
|
123
|
+
* @property labels - The board's nouns
|
|
124
|
+
* @property table - The Table's options
|
|
125
|
+
*/
|
|
126
|
+
export const AllocationPayloadType = StructType({
|
|
127
|
+
bin: ScheduleAllocationKindType,
|
|
128
|
+
lanes: ArrayType(T.AllocationLaneType),
|
|
129
|
+
every: TimeStepType,
|
|
130
|
+
resources: ArrayType(T.AllocationResourceType),
|
|
131
|
+
arrivals: ArrayType(T.AllocationArrivalType),
|
|
132
|
+
initial: FunctionType([StringType], OptionType(BlobType)),
|
|
133
|
+
periods: OptionType(SchedulePeriodsKindType),
|
|
134
|
+
narrowed: StructType({
|
|
135
|
+
lanes: OptionType(RowSourceType(ArrayType(StringType))), resources: OptionType(RowSourceType(ArrayType(StringType))),
|
|
136
|
+
arrivals: OptionType(RowSourceType(ArrayType(StringType))),
|
|
137
|
+
}),
|
|
138
|
+
fit: FuncBindingType,
|
|
139
|
+
check: OptionType(FunctionType([BlobType], ArrayType(T.AllocationIssueType))),
|
|
140
|
+
columns: ArrayType(AllocationColumnType),
|
|
141
|
+
rules: T.AllocationRulesType,
|
|
142
|
+
library: ArrayType(AllocationLibraryTabType),
|
|
143
|
+
inspector: BooleanType,
|
|
144
|
+
slice: OptionType(RecordSlicesChromeType),
|
|
145
|
+
settings: AllocationSettingsType,
|
|
146
|
+
id: OptionType(StringType),
|
|
147
|
+
labels: AllocationLabelsType,
|
|
148
|
+
table: AllocationTableOptionsType,
|
|
149
|
+
});
|
|
150
|
+
/** Carrier registered by e3-ui-components. */
|
|
151
|
+
export const AllocationComponent = EastUI.component("Allocation", AllocationPayloadType, { optional: true });
|
|
152
|
+
/** The bin kind, as the refusals write it. */
|
|
153
|
+
const BINS = "events={{ bin: Schedule.events(Record.bind(bins, [binsPatch]), { at, resource, arrival, quantity, parts, hold }) }}";
|
|
154
|
+
/** The arrivals' declaration, as the refusals write it. */
|
|
155
|
+
const ARRIVALS = "Allocation.arrivals(rows, { label, quantity, hold, … })";
|
|
156
|
+
/** The props §2 removed, each refused by name with the form that replaces it (B4). */
|
|
157
|
+
const REMOVED = [
|
|
158
|
+
["days", `\`days\` is gone — the Allocation writes the app's own bins, ${BINS}, and publishes the app's own days, ` +
|
|
159
|
+
"periods={Schedule.periods(Record.bind(days, [daysPatch]), { every: \"day\", status })}"],
|
|
160
|
+
["window", "`window` is gone — the Allocation reads a day's bins through the bin kind's source of its slice, an interval index from `at` to `at`: " +
|
|
161
|
+
"slice={{ slice: Slice.bindRecords(key, { bin: { source: Data.bindPaged(bins, { indexes: [byTime] }), range: \"at\" } }) }}, the kind given " +
|
|
162
|
+
"`entries`; or the record whole"],
|
|
163
|
+
["lanes", "`lanes` moves to `resources`: resources={{ <lanes>: Schedule.resources(rows, { name, icon, label, offset }), … }}, under the slot " +
|
|
164
|
+
"the bin kind's `resource.of` names — Allocation.lanes is gone"],
|
|
165
|
+
["publish", "`publish` is gone — Publish is the app's own days, periods={Schedule.periods(Record.bind(days, [daysPatch]), { every: \"day\", status })}; " +
|
|
166
|
+
"leave `periods` out for no Publish"],
|
|
167
|
+
["quantity", "`quantity` is gone — the unit is the bin kind's `quantity` role's: Schedule.events(record, { …, quantity: { field, unit: \"m³\" } })"],
|
|
168
|
+
];
|
|
169
|
+
/** A noun, resolved: its plural the singular and `s`, its article `an` before a vowel letter, unless given. */
|
|
170
|
+
function nounOf(input, fallback, prop) {
|
|
171
|
+
const given = input === undefined ? { one: fallback } : typeof input === "string" ? { one: input } : input;
|
|
172
|
+
if (given.one.trim() === "")
|
|
173
|
+
throw new Error(`Allocation: \`labels.${prop}\` must not be empty`);
|
|
174
|
+
return { one: given.one, other: given.other ?? `${given.one}s`, article: given.article ?? (/^[aeiou]/i.test(given.one) ? "an" : "a") };
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* The board's nouns, resolved (D12): each the app's, or Lane, Arrival and
|
|
178
|
+
* Resource, with its plural and article; the quantity's heading `QTY`.
|
|
179
|
+
*
|
|
180
|
+
* @param labels - The `labels` prop, if given
|
|
181
|
+
* @returns The nouns, as the payload carries them
|
|
182
|
+
* @throws {Error} For `labels.event`, which is gone, naming `labels.arrival`; and for a noun that is empty
|
|
183
|
+
* @internal
|
|
184
|
+
*/
|
|
185
|
+
export function allocationLabels(labels) {
|
|
186
|
+
if (labels !== undefined && labels["event"] !== undefined) {
|
|
187
|
+
throw new Error("Allocation: `labels.event` is gone — the board's noun for what it books is `labels.arrival`, \"Arrival\" by default");
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
lane: nounOf(labels?.lane, "Lane", "lane"), arrival: nounOf(labels?.arrival, "Arrival", "arrival"),
|
|
191
|
+
resource: nounOf(labels?.resource, "Resource", "resource"), quantity: labels?.quantity ?? "QTY",
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* The Table's bands, checked: from 00:00, increasing, inside the day; four by
|
|
196
|
+
* default.
|
|
197
|
+
*
|
|
198
|
+
* @param bands - `table.bands`, if given
|
|
199
|
+
* @returns The bands, as the payload carries them
|
|
200
|
+
* @throws {Error} When there is none, the first is not from 0, one does not start after the one before, or one starts outside the day
|
|
201
|
+
* @internal
|
|
202
|
+
*/
|
|
203
|
+
export function allocationBands(bands) {
|
|
204
|
+
const given = bands ?? [{ from: 0 }, { from: 6 }, { from: 12 }, { from: 18 }];
|
|
205
|
+
if (given.length === 0)
|
|
206
|
+
throw new Error("Allocation: `table.bands` needs at least one band, from 0");
|
|
207
|
+
given.forEach((band, i) => {
|
|
208
|
+
if (!Number.isFinite(band.from) || band.from < 0 || band.from >= 24)
|
|
209
|
+
throw new Error(`Allocation: \`table.bands\`' band ${i + 1} starts at ${band.from}: a band starts within the day, 0 to under 24`);
|
|
210
|
+
if (i === 0 && band.from !== 0)
|
|
211
|
+
throw new Error("Allocation: `table.bands`' first band starts at 0, so every slot of the day is in one");
|
|
212
|
+
if (i > 0 && band.from <= given[i - 1].from)
|
|
213
|
+
throw new Error(`Allocation: \`table.bands\` start in order: band ${i + 1} starts at ${band.from}, not after ${given[i - 1].from}`);
|
|
214
|
+
});
|
|
215
|
+
return given.map(band => ({ from: band.from, label: band.label === undefined ? none : some(band.label) }));
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* An app's function over a request of the bin row type, checked, then wrapped
|
|
219
|
+
* so the request crosses as bytes.
|
|
220
|
+
*
|
|
221
|
+
* @param fn - The app's function
|
|
222
|
+
* @param asks - The request type over the bin row type
|
|
223
|
+
* @param answers - What it answers
|
|
224
|
+
* @param refusal - What a function of another type is refused with, naming the prop
|
|
225
|
+
* @returns The function over bytes
|
|
226
|
+
* @throws {Error} With `refusal` when the function asks or answers another type
|
|
227
|
+
*/
|
|
228
|
+
function overBytes(fn, asks, answers, refusal) {
|
|
229
|
+
const author = East.value(fn);
|
|
230
|
+
const type = Expr.type(author);
|
|
231
|
+
if (type.type !== "Function" || type.inputs.length !== 1 || !isTypeEqual(type.inputs[0], asks) || !isTypeEqual(type.output, answers)) {
|
|
232
|
+
throw new Error(refusal);
|
|
233
|
+
}
|
|
234
|
+
return East.function([BlobType], answers, ($, bytes) => {
|
|
235
|
+
const call = $.const(author);
|
|
236
|
+
return call(bytes.decodeBeast(asks, "v2"));
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* The fit's binding, checked: `Func.bind` of an `e3.function` from `Allocation.Types.FitRequest(R)` to `Allocation.Types.FitResult`.
|
|
241
|
+
*
|
|
242
|
+
* @param fit - What the app passed as `fit`
|
|
243
|
+
* @param rowType - The bin kind's row type
|
|
244
|
+
* @returns The binding's descriptor, which names the function
|
|
245
|
+
* @throws {Error} When it is not a `Func.bind` handle, or its function asks or answers another type, naming it — a fit over
|
|
246
|
+
* another row type naming both row types
|
|
247
|
+
*/
|
|
248
|
+
function fitBinding(fit, rowType) {
|
|
249
|
+
const signature = boundFuncSignature(fit);
|
|
250
|
+
if (signature === undefined) {
|
|
251
|
+
throw new Error("Allocation: `fit` is Func.bind of the app's e3.function from Allocation.Types.FitRequest(R) to Allocation.Types.FitResult, R the bins' row type");
|
|
252
|
+
}
|
|
253
|
+
const asked = signature.asks;
|
|
254
|
+
if (!isTypeEqual(asked, T.AllocationFitRequestTypeFor(rowType))) {
|
|
255
|
+
// A FitRequest over another row: its day's bins' row.
|
|
256
|
+
const plan = asked.type === "Struct" ? asked.fields["plan"] : undefined;
|
|
257
|
+
const bins = plan?.type === "Struct" ? plan.fields["bins"] : undefined;
|
|
258
|
+
const theirs = bins?.type === "Dict" && bins.value.type === "Struct" ? bins.value.fields["row"] : undefined;
|
|
259
|
+
throw new Error(theirs !== undefined && isTypeEqual(asked, T.AllocationFitRequestTypeFor(theirs))
|
|
260
|
+
? `Allocation: \`fit\` is bound over bin rows ${printType(theirs)}, and the bin kind's rows are ${printType(rowType)} — bind a fit over Allocation.Types.FitRequest of the bins' row type`
|
|
261
|
+
: `Allocation: \`fit\` asks ${printType(asked)}, not Allocation.Types.FitRequest(${printType(rowType)})`);
|
|
262
|
+
}
|
|
263
|
+
if (!isTypeEqual(signature.answers, T.AllocationFitResultType)) {
|
|
264
|
+
throw new Error(`Allocation: \`fit\` answers ${printType(signature.answers)}, not Allocation.Types.FitResult`);
|
|
265
|
+
}
|
|
266
|
+
return fit.binding;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Validates the declarations and assembles the Allocation's interface. View
|
|
270
|
+
* and interaction behaviour belong to the renderer, not this factory.
|
|
271
|
+
*
|
|
272
|
+
* @typeParam R - The app's bin row type
|
|
273
|
+
* @param props - The board's props
|
|
274
|
+
* @returns The closed payload
|
|
275
|
+
* @throws {Error} Naming the change to make (B4): a removed prop — `days`, `window`, `lanes`, `publish`, `quantity`,
|
|
276
|
+
* `resources` as values, `inspector={{ bin }}` or `labels.event`; `events` holding other than one kind; a bin kind with
|
|
277
|
+
* no lane (`resource`) or no `parts`, or whose slot, lanes' slot or resources' slot names a source of the slice twice;
|
|
278
|
+
* `resources` holding other than the lanes' kind and the resources' kind, one read a window at a time, resources keyed
|
|
279
|
+
* by anything but String, or a resources kind with no `min` or `max`; `arrivals` that is not `Allocation.arrivals`, and
|
|
280
|
+
* its `values` returning another struct than the bin kind's own fields; `periods` that is not `Schedule.periods`; a
|
|
281
|
+
* `fit` that is not `Func.bind` of a function from `FitRequest(R)` to `FitResult`, one over another row type naming
|
|
282
|
+
* both; a `check` of another type; a library tab or a column key listed twice; a label that is empty; the Table's
|
|
283
|
+
* bands not starting at 0 and rising within the day; and as `Schedule`'s checks, the bin kind's build
|
|
284
|
+
* (`buildAllocation`) and the slice's (`recordSources`) do
|
|
285
|
+
* @internal
|
|
286
|
+
*/
|
|
287
|
+
export function createAllocationPayload(props) {
|
|
288
|
+
const given = props;
|
|
289
|
+
for (const [prop, refusal] of REMOVED) {
|
|
290
|
+
if (given[prop] !== undefined)
|
|
291
|
+
throw new Error(`Allocation: ${refusal}`);
|
|
292
|
+
}
|
|
293
|
+
if (given["resources"] instanceof Expr) {
|
|
294
|
+
throw new Error("Allocation: `resources` holds Schedule.resources kinds by slot — the lanes' (the bin kind's `resource.of`) and the resources' " +
|
|
295
|
+
"(its `parts.of`): resources={{ bays: Schedule.resources(rows, { …, offset }), kilns: Schedule.resources(rows, { …, min, max }) }} — " +
|
|
296
|
+
"Allocation.resources values are gone");
|
|
297
|
+
}
|
|
298
|
+
if (props.inspector !== undefined && typeof props.inspector !== "boolean") {
|
|
299
|
+
throw new Error("Allocation: `inspector` is true or false — a bin's own form is the bin kind's `inspector` (Schedule.events(record, { …, inspector }))");
|
|
300
|
+
}
|
|
301
|
+
const labels = allocationLabels(props.labels);
|
|
302
|
+
const bands = allocationBands(props.table?.bands);
|
|
303
|
+
// The bins: exactly one event kind.
|
|
304
|
+
const events = given["events"];
|
|
305
|
+
if (events instanceof Expr || (events !== undefined && (typeof events !== "object" || events === null))) {
|
|
306
|
+
throw new Error(`Allocation: \`events\` holds the bins, one Schedule.events kind — ${BINS}; what the board books from is arrivals={${ARRIVALS}}`);
|
|
307
|
+
}
|
|
308
|
+
const kinds = Object.entries(props.events ?? {});
|
|
309
|
+
if (kinds.length !== 1) {
|
|
310
|
+
throw new Error(kinds.length === 0
|
|
311
|
+
? `Allocation: \`events\` holds the bins — ${BINS}`
|
|
312
|
+
: `Allocation: \`events\` holds one kind, the bins — and it holds ${kinds.length} (${kinds.map(([slot]) => slot).join(", ")})`);
|
|
313
|
+
}
|
|
314
|
+
const [slot, kind] = kinds[0];
|
|
315
|
+
const resources = props.resources ?? {};
|
|
316
|
+
scheduleCheck(resources, props.events, "Allocation");
|
|
317
|
+
// The lanes' slot, the bin kind's `resource.of`; and the resources', its `parts.of`.
|
|
318
|
+
if (kind.takes.length === 0) {
|
|
319
|
+
throw new Error(`Allocation: events.${slot} books each bin into one lane — give it a \`resource\`, a String field naming a key of the lanes' kind: ` +
|
|
320
|
+
"resource: { field, of: \"<lanes>\" }");
|
|
321
|
+
}
|
|
322
|
+
if (kind.takes.length > 1) {
|
|
323
|
+
throw new Error(`Allocation: events.${slot} books each bin into one lane — its \`resource\` is a String field naming a key of the lanes' kind, ` +
|
|
324
|
+
`and this one names a kind per case (${kind.takes.join(", ")})`);
|
|
325
|
+
}
|
|
326
|
+
const lanesSlot = kind.takes[0];
|
|
327
|
+
const partsSlot = kind.partsOf;
|
|
328
|
+
if (partsSlot === undefined) {
|
|
329
|
+
throw new Error(`Allocation: events.${slot} allocates each bin to resources — give it \`parts\`, a Dict of String to Float field and the resources' slot: ` +
|
|
330
|
+
"parts: { field, of: \"<resources>\" }");
|
|
331
|
+
}
|
|
332
|
+
// The slice names a source after each: the bins, the lanes, the resources and the arrivals.
|
|
333
|
+
if (slot === "arrivals" || lanesSlot === "arrivals" || partsSlot === "arrivals" || slot === lanesSlot || slot === partsSlot) {
|
|
334
|
+
throw new Error(`Allocation: the slice names a source after the bins' slot ("${slot}"), the lanes' ("${lanesSlot}"), the resources' ("${partsSlot}") ` +
|
|
335
|
+
"and the arrivals (`arrivals`) — give the bins a slot of their own, and none of them `arrivals`");
|
|
336
|
+
}
|
|
337
|
+
for (const name of Object.keys(resources)) {
|
|
338
|
+
if (name !== lanesSlot && name !== partsSlot) {
|
|
339
|
+
throw new Error(`Allocation: \`resources\` holds the lanes' kind (\`${lanesSlot}\`, the slot events.${slot}'s resource names) and the resources' kind ` +
|
|
340
|
+
`(\`${partsSlot}\`, the slot its parts name) — and it holds \`${name}\``);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
const resourcesKind = resources[partsSlot];
|
|
344
|
+
if (resourcesKind === undefined) {
|
|
345
|
+
throw new Error(`Allocation: events.${slot}'s parts name the slot "${partsSlot}", and \`resources\` has no slot of that name (${Object.keys(resources).join(", ") || "none"})`);
|
|
346
|
+
}
|
|
347
|
+
if (!isTypeEqual(resourcesKind.keyType, StringType)) {
|
|
348
|
+
throw new Error(`Allocation: events.${slot}'s parts hold String keys of resources.${partsSlot}, which is keyed by ${printType(resourcesKind.keyType)} — key the resources by String`);
|
|
349
|
+
}
|
|
350
|
+
// The lanes' kind is there and keyed by String: `scheduleCheck` holds the slot the bin kind's resource names to it.
|
|
351
|
+
const lanesKind = resources[lanesSlot];
|
|
352
|
+
for (const [name, resourceKind, reads] of [
|
|
353
|
+
[lanesSlot, lanesKind, "the board draws every lane, and slots and checks read every one"],
|
|
354
|
+
[partsSlot, resourcesKind, "fits, checks and totals read every one"],
|
|
355
|
+
]) {
|
|
356
|
+
if (resourceKind.source === undefined) {
|
|
357
|
+
throw new Error(`Allocation: resources.${name} is read whole — ${reads} — so give the rows as a Dict, usually a record's read(), not a paged read`);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
if (resourcesKind.accessors.min === undefined || resourcesKind.accessors.max === undefined) {
|
|
361
|
+
throw new Error(`Allocation: resources.${partsSlot} gives each resource's \`min\` and \`max\` — ` +
|
|
362
|
+
`Schedule.resources(${partsSlot}.read(), { …, min: (k) => k.min, max: (k) => k.max })`);
|
|
363
|
+
}
|
|
364
|
+
// What the board books from.
|
|
365
|
+
if (!isAllocationArrivals(given["arrivals"])) {
|
|
366
|
+
throw new Error(`Allocation: \`arrivals\` is ${ARRIVALS} over the app's rows — every arrival the day may book` +
|
|
367
|
+
(given["arrivals"] instanceof Expr ? " — Allocation.Types.Arrival values are gone" : ""));
|
|
368
|
+
}
|
|
369
|
+
const arrivals = given["arrivals"];
|
|
370
|
+
const periods = props.periods;
|
|
371
|
+
if (periods !== undefined && periods[SCHEDULE_DEF] !== "periods") {
|
|
372
|
+
throw new Error("Allocation: `periods` is what the board publishes, the app's days — periods={Schedule.periods(Record.bind(days, [daysPatch]), { every: \"day\", status })}");
|
|
373
|
+
}
|
|
374
|
+
// The app's functions over the bin row type.
|
|
375
|
+
const rowType = kind.rowType;
|
|
376
|
+
const fit = fitBinding(props.fit, rowType);
|
|
377
|
+
const check = props.check === undefined ? undefined : overBytes(props.check, T.AllocationCheckContextTypeFor(rowType), ArrayType(T.AllocationIssueType), `Allocation: \`check\` is an East function from Allocation.Types.CheckContext(${printType(rowType)}) to Array<Allocation.Types.Issue>`);
|
|
378
|
+
// A booked bin's own fields, the ones no role maps: each arrival's `values`, at the bin kind's (B13).
|
|
379
|
+
const initial = allocationInitial(arrivals, kind.allocationValues);
|
|
380
|
+
// The app's columns over its bin row, as bytes.
|
|
381
|
+
const keys = new Set();
|
|
382
|
+
const columns = (props.columns ?? []).map(column => {
|
|
383
|
+
if (keys.has(column.key))
|
|
384
|
+
throw new Error(`Allocation: duplicate column ${column.key}`);
|
|
385
|
+
keys.add(column.key);
|
|
386
|
+
// An author's accessor may return a subtype (a tone of one case): widened to the column's type here.
|
|
387
|
+
const text = East.function([rowType], StringType, (_$, row) => East.as(column.text(row), StringType));
|
|
388
|
+
const tone = column.tone === undefined ? undefined
|
|
389
|
+
: East.function([rowType], OptionType(StatusTokenType), (_$, row) => East.as(column.tone(row), OptionType(StatusTokenType)));
|
|
390
|
+
return East.value({
|
|
391
|
+
key: column.key, label: column.label,
|
|
392
|
+
text: East.function([BlobType], StringType, ($, bytes) => {
|
|
393
|
+
const textOf = $.const(text);
|
|
394
|
+
return textOf(bytes.decodeBeast(rowType, "v2"));
|
|
395
|
+
}),
|
|
396
|
+
tone: tone === undefined ? none : some(East.function([BlobType], OptionType(StatusTokenType), ($, bytes) => {
|
|
397
|
+
const toneOf = $.const(tone);
|
|
398
|
+
return toneOf(bytes.decodeBeast(rowType, "v2"));
|
|
399
|
+
})),
|
|
400
|
+
table: column.table ?? true,
|
|
401
|
+
}, AllocationColumnType);
|
|
402
|
+
});
|
|
403
|
+
// The library's tabs, each once.
|
|
404
|
+
const seen = new Set();
|
|
405
|
+
const library = (props.library ?? []).map(tab => {
|
|
406
|
+
if (tab.kind !== "arrivals" && tab.kind !== "resources") {
|
|
407
|
+
throw new Error(`Allocation: a library tab is Allocation.library.arrivals() or Allocation.library.resources() — and this one is ${String(tab.kind)}`);
|
|
408
|
+
}
|
|
409
|
+
if (seen.has(tab.kind))
|
|
410
|
+
throw new Error(`Allocation: duplicate library tab ${tab.kind}`);
|
|
411
|
+
seen.add(tab.kind);
|
|
412
|
+
return East.value(variant(tab.kind, null), AllocationLibraryTabType);
|
|
413
|
+
});
|
|
414
|
+
// The narrowing: a source per record it narrows, named after what it narrows.
|
|
415
|
+
const narrowing = recordSources(props.slice, {
|
|
416
|
+
builder: "Allocation", names: [...new Set([slot, lanesSlot, partsSlot, "arrivals"])],
|
|
417
|
+
what: `its bins (${slot}), its lanes (${lanesSlot}), its resources (${partsSlot}) and its arrivals`,
|
|
418
|
+
});
|
|
419
|
+
return Expr.block($ => {
|
|
420
|
+
const bound = narrowing.bind($);
|
|
421
|
+
const shown = (name) => {
|
|
422
|
+
const source = bound.keys[name];
|
|
423
|
+
return source === undefined ? none : some(source);
|
|
424
|
+
};
|
|
425
|
+
return East.value({
|
|
426
|
+
// The bins, narrowed through their own source of the slice when the slice has one.
|
|
427
|
+
bin: kind.buildAllocation(slot, bound.parts[slot]),
|
|
428
|
+
lanes: allocationLanesOf(lanesKind),
|
|
429
|
+
every: props.every ?? variant("hours", 1.0),
|
|
430
|
+
resources: allocationResourcesOf(resourcesKind),
|
|
431
|
+
arrivals: allocationArrivalsOf(arrivals),
|
|
432
|
+
initial,
|
|
433
|
+
periods: periods === undefined ? none : some(periods.build()),
|
|
434
|
+
narrowed: { lanes: shown(lanesSlot), resources: shown(partsSlot), arrivals: shown("arrivals") },
|
|
435
|
+
fit,
|
|
436
|
+
check: check === undefined ? none : some(check),
|
|
437
|
+
columns,
|
|
438
|
+
rules: { under: props.rules?.under ?? true },
|
|
439
|
+
library,
|
|
440
|
+
inspector: props.inspector ?? false,
|
|
441
|
+
slice: narrowing.chrome,
|
|
442
|
+
settings: {
|
|
443
|
+
layout: variant(props.view?.layout ?? "timeline", null), date: props.view?.date === undefined ? none : some(props.view.date),
|
|
444
|
+
horizon: { before: props.horizon?.before ?? variant("days", 3.0), after: props.horizon?.after ?? variant("days", 10.0) },
|
|
445
|
+
title: props.title ?? "Allocation", readOnly: props.readOnly ?? false,
|
|
446
|
+
},
|
|
447
|
+
id: props.id === undefined ? none : some(props.id),
|
|
448
|
+
labels,
|
|
449
|
+
table: { bands },
|
|
450
|
+
}, AllocationPayloadType);
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
// ============================================================================
|
|
454
|
+
// The namespace
|
|
455
|
+
// ============================================================================
|
|
456
|
+
/** Declares the Arrivals tab. */
|
|
457
|
+
function allocationArrivalsTab() { return { kind: "arrivals" }; }
|
|
458
|
+
/** Declares the Resources tab. */
|
|
459
|
+
function allocationResourcesTab() { return { kind: "resources" }; }
|
|
460
|
+
/**
|
|
461
|
+
* Refuses a removed helper by name, with the form that replaces it.
|
|
462
|
+
*
|
|
463
|
+
* @param refusal - The words
|
|
464
|
+
* @returns A function that refuses
|
|
465
|
+
*/
|
|
466
|
+
function removed(refusal) {
|
|
467
|
+
return () => { throw new Error(refusal); };
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Books a day's arrivals into timed lane slots and allocates each bin to
|
|
471
|
+
* resources, over the app's own records, in an internal BuilderFrame.
|
|
472
|
+
*
|
|
473
|
+
* @param props - The bins, the lanes and resources, the arrivals and the fit, and the optional days, check, library, inspector and narrowing
|
|
474
|
+
* @returns The Allocation extension
|
|
475
|
+
* @remarks Every gesture is one undo step; Save sends each record's changes as its own request, and Publish saves, then the day's status. Issues never block either. Below 480px of main the same commands are explicit card actions.
|
|
476
|
+
*/
|
|
477
|
+
export const Allocation = Object.assign((props) => AllocationComponent.Root(createAllocationPayload(props)), {
|
|
478
|
+
arrivals: allocationArrivals, fit: allocationFit, loads: allocationLoads, candidates: allocationCandidates, answer: allocationAnswer,
|
|
479
|
+
lookahead: allocationLookahead, check: allocationCheck, slots: allocationSlots,
|
|
480
|
+
library: {
|
|
481
|
+
arrivals: allocationArrivalsTab, resources: allocationResourcesTab,
|
|
482
|
+
events: removed("Allocation.library.events is gone — the Arrivals tab is Allocation.library.arrivals()"),
|
|
483
|
+
},
|
|
484
|
+
events: removed(`Allocation.events is gone — what the board books from is arrivals={${ARRIVALS}}, and its \`events\` are its bins, ${BINS}`),
|
|
485
|
+
lanes: removed("Allocation.lanes is gone — the lanes are a Schedule.resources kind under the slot the bin kind's `resource` names: " +
|
|
486
|
+
"resources={{ <lanes>: Schedule.resources(rows, { name, icon, label, offset }), … }}"),
|
|
487
|
+
resources: removed("Allocation.resources is gone — the resources are a Schedule.resources kind under the slot the bin kind's `parts` name: " +
|
|
488
|
+
"resources={{ …, <resources>: Schedule.resources(rows, { name, icon, label, min, max }) }}"),
|
|
489
|
+
Types: {
|
|
490
|
+
Lane: T.AllocationLaneType, Status: T.AllocationStatusType, Bin: T.AllocationBinTypeFor, Day: T.AllocationDayTypeFor,
|
|
491
|
+
Interval: T.AllocationIntervalType, Job: T.AllocationJobType, Detail: T.AllocationDetailType, Arrival: T.AllocationArrivalType,
|
|
492
|
+
Resource: T.AllocationResourceType, Rules: T.AllocationRulesType, Context: T.AllocationContextType, LoadState: T.AllocationLoadStateType,
|
|
493
|
+
Load: T.AllocationLoadType, Candidate: T.AllocationCandidateType, Refusal: T.AllocationRefusalType, Fit: T.AllocationFitType,
|
|
494
|
+
FitAsk: T.AllocationFitAskType, FitRequest: T.AllocationFitRequestTypeFor, FitResult: T.AllocationFitResultType, Fix: T.AllocationFixType,
|
|
495
|
+
IssueKind: T.AllocationIssueKindType, Issue: T.AllocationIssueType, CheckContext: T.AllocationCheckContextTypeFor,
|
|
496
|
+
SlotStatus: T.AllocationSlotStatusType, Slot: T.AllocationSlotType, Layout: T.AllocationLayoutType,
|
|
497
|
+
},
|
|
498
|
+
});
|
|
499
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/allocation/index.ts"],"names":[],"mappings":"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"}
|