Appearance
Условия (кейсы)
Условие (кейс) — «объект-цель + поле + оператор + значение» — живёт в трёх контейнерах: реакции (trigger[].cases), алармы (alarms[].cases) и логика драйвер-линков (driverLinks[].logic). Контракты полей кейсов собирает тот же декларативный слой, что и additional data команд (Additional data команд): generic-ветка — из геттеров сущности-цели, отклонения объявляются в schema.ts типа (пока единственное — mode-object State: ссылка на stateId вместо значения-литерала).
Контракт поля кейса
ts
/**
* Контракт одного поля кейса (пара объект-цель + objectField) для редактора
* условий. Generic-сборка — из деклараций типа (schema.ts) и геттеров
* сущности; специализированная ветка mode-object.State объявлена в schema.ts
* типа (reference-persistence + optionsProjection). Форма `caseValue`
* (`{ type, value }`) не меняется: enum-поля хранят ключ опции, mode-object
* State — stateId.
*/
export interface CaseFieldDefinition {
/** имя поля объекта (FieldCase / сужение типа) */
field: string;
label: string;
/** logicCase → лейбл (источник — availableOperators сущности) */
operators: Record<string, string>;
/** оператор нового кейса (defaultLogicCase сущности) */
defaultOperator: string;
valueKind: "enum" | "number";
widget: "dropdown" | "number";
/** дефолт editor-значения нового кейса */
defaultValue: unknown;
/** для вычисляемых enum-опций (например, состояния mode-object) */
optionsProjection?: FieldProjection;
/** для статичных enum-опций (availableStates сущности) */
staticOptions?: Record<string, string>;
/** границы number (источник — getCaseAdditionalData сущности) */
min?: number;
max?: number;
persistence: CaseFieldPersistence;
}ts
/**
* Что именно хранится в `case.caseValue.value`:
* `literal` — значение как есть (enum-строка статичного перечисления или число);
* `reference` — стабильный id доменной сущности, а не её имя/индекс
* (единственный refType — состояние mode-object, см. wire-перевод).
*/
export type CaseFieldPersistence =
| { kind: "literal" }
| { kind: "reference"; refType: "mode_state" };Контракт поля кейса для пары (цель, objectField). Возвращает undefined, если поле не объявлено у типа цели (availableObjectFields).
valueKind generic-ветки следует инварианту CaseValueSchemas типов (schema.ts): поле State — перечисление (z.literal STATE), прочие поля — число (z.literal INT); опции перечисления — статичный availableStates. Отклонения от literal-хранения объявляются в schema.ts типа: mode-object State хранит stateId (reference) с optionsProjection из settings.States.
Опции значения enum-поля кейса: статичный availableStates либо optionsProjection, прогнанный через projectionEngine (modeStateOptions по settings.States цели). Ключи опций — persisted-значения caseValue.value.
Mentioned In
None yet.