Skip to content

Условия (кейсы)

Условие (кейс) — «объект-цель + поле + оператор + значение» — живёт в трёх контейнерах: реакции (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.