Перейти к основному содержимому

FormSchemaNode

Defined in: form/types/schema-node.ts:64

Узел единой схемы M1 — layout-дерево, обходимое createForm({ model, schema }) и рендерерами (schema-валидация живёт отдельно — @reformer/core/validation).

Узел совмещает несколько ролей (различаются рантаймом по форме):

  • поле — несёт value: Signal (сигнал модели model.$.x) + component/validators;
  • массив{ array: model.<path>, item(itemModel) };
  • контейнер/ветка — вложенные узлы (children), опц. условие when;
  • record-of-fields — под-узлы под произвольными именованными ключами (индексная сигнатура).

Индексная сигнатура ([key: string]: unknown) отражает свободный рекурсивный обход: под-узлы допустимы под любым ключом. Известные поля типизированы (даёт автокомплит и проверку их типов).

Indexable

[key: string]: unknown

Свободная вложенность: record-of-fields и произвольные под-узлы.

Properties

array?

optional array: SchemaArrayControl;

Defined in: form/types/schema-node.ts:99

Реактивный массив модели (model.<path>) — маркер узла-массива (вместе с item).


children?

optional children: readonly (string | number | Signal<any> | FormSchemaNode)[];

Defined in: form/types/schema-node.ts:97

Содержимое узла: под-узлы (даёт контекстную типизацию вложенным литералам — value/validators/when) и текстовые части. Текст (литерал, число, сигнал модели) — такой же ребёнок, как узел: core его не интерпретирует (обход пропускает примитивы и не спускается внутрь сигнала), а рендерер выводит на своём месте в порядке следования.


component?

optional component: ElementType;

Defined in: form/types/schema-node.ts:76

UI-компонент либо нативный HTML-тег ('div', 'p', 'h3') для презентационной вёрстки прямо в схеме. Опционален: core-часть работает без UI (значение/валидация) и component не интерпретирует — он доезжает до рендерера как есть.


componentProps?

optional componentProps: Record<string, unknown>;

Defined in: form/types/schema-node.ts:78

Props компонента. Также «клапан» для вложенности под-узлов (напр. steps визарда).


debounce?

optional debounce: number;

Defined in: form/types/schema-node.ts:82

Задержка (мс) перед запуском асинхронной валидации.


disabled?

optional disabled: boolean;

Defined in: form/types/schema-node.ts:80


initialValue?

optional initialValue: unknown;

Defined in: form/types/schema-node.ts:107

Значение нового элемента массива для кнопки «Добавить»: либо готовое значение, либо фабрика () => value. Тип не различает варианты (union unknown | (() => unknown) схлопывается в unknown) — рантайм различает по typeof initialValue === 'function'.


item()?

optional item: (itemModel) => FormSchemaNode;

Defined in: form/types/schema-node.ts:101

Схема элемента массива: под-модель элемента → узел поддерева.

Parameters

itemModel

any

Returns

FormSchemaNode


selector?

optional selector: string;

Defined in: form/types/schema-node.ts:84

Идентификатор узла (для wizard/tabs/renderBehavior).


testId?

optional testId: string;

Defined in: form/types/schema-node.ts:90

⚠️ Рантайм этого поля НЕ ЧИТАЕТ — renderer-react берёт testId из componentProps.testId (иначе выводит из пути сигнала). Поле оставлено только потому, что RenderSchemaNode рендерера объявляет свой одноимённый; пишите componentProps: { testId: '…' }.


updateOn?

optional updateOn: "change" | "blur" | "submit";

Defined in: form/types/schema-node.ts:79


value?

optional value: unknown;

Defined in: form/types/schema-node.ts:70

«Ручка» значения поля — маркер узла-поля. Обычно сигнал модели (model.$.<path>), но форма зависит от таргета (для массива model.$.x — дерево сигналов; в renderer-типах сужается до Signal). Движок разбирает узел как поле рантаймом по value instanceof Signal.