ArrayNode
Defined in: core/nodes/array-node.ts:44
ArrayNode - массив форм с реактивным состоянием
Example
const array = new ArrayNode({
title: { value: '', component: Input },
price: { value: 0, component: Input },
});
array.push({ title: 'Item 1', price: 100 });
array.at(0)?.title.setValue('Updated');
console.log(array.length.value); // 1
Extends
FormNode<T[]>
Type Parameters
T
T extends FormFields
Constructors
Constructor
new ArrayNode<T>(schema, initialItems): ArrayNode<T>;
Defined in: core/nodes/array-node.ts:84
Parameters
schema
FormSchema<T>
initialItems
Partial<T>[] = []
Returns
ArrayNode<T>
Overrides
Methods
applyBehaviorSchema()
applyBehaviorSchema(schemaFn): void;
Defined in: core/nodes/array-node.ts:459
Применить behavior schema ко всем элементам ArrayNode
Автоматически применяется к новым элементам при push/insert.
Parameters
schemaFn
unknown
Behavior schema функция
Returns
void
Example
import { addressBehavior } from './behaviors/address-behavior';
form.addresses.applyBehaviorSchema(addressBehavior);
applyValidationSchema()
applyValidationSchema(schemaFn): void;
Defined in: core/nodes/array-node.ts:430
Применить validation schema ко всем элементам массива
Validation schema будет применена к:
- Всем существующим элементам
- Всем новым элементам, добавляемым через push/insert
Parameters
schemaFn
unknown
Функция валидации для элемента массива
Returns
void
Example
import { propertyValidation } from './validation/property-validation';
form.properties.applyValidationSchema(propertyValidation);
at()
at(index): any;
Defined in: core/nodes/array-node.ts:192
Получить элемент по индексу
Parameters
index
number
Индекс элемента
Returns
any
Типизированный GroupNode или undefined если индекс вне границ
clear()
clear(): void;
Defined in: core/nodes/array-node.ts:183
Удалить все элементы массива
Returns
void
clearErrors()
clearErrors(): void;
Defined in: core/nodes/array-node.ts:292
Очистить ошибки валидации
Returns
void
Overrides
disable()
disable(): void;
Defined in: core/nodes/form-node.ts:370
Отключить узел
Template Method: обновляет статус в базовом классе, вызывает hook для кастомной логики в наследниках
Отключенные узлы не проходят валидацию и не включаются в getValue()
Returns
void
Inherited from
dispose()
dispose(): void;
Defined in: core/nodes/array-node.ts:572
Очистить все ресурсы узла Рекурсивно очищает все subscriptions и элементы массива
Returns
void
Example
useEffect(() => {
return () => {
arrayNode.dispose();
};
}, []);
Overrides
enable()
enable(): void;
Defined in: core/nodes/form-node.ts:381
Включить узел
Template Method: обновляет статус в базовом классе, вызывает hook для кастомной логики в наследниках
Returns
void
Inherited from
forEach()
forEach(callback): void;
Defined in: core/nodes/array-node.ts:344
Итерировать по элементам массива
Parameters
callback
(item, index) => void
Функция, вызываемая для каждого элемента с типизированным GroupNode
Returns
void
getErrors()
getErrors(options?): ValidationError[];
Defined in: core/nodes/form-node.ts:231
Получить ошибки валидации с фильтрацией
Позволяет фильтровать ошибки по различным критериям:
- По коду ошибки
- По сообщению (частичное совпадение)
- По параметрам
- Через кастомный предикат
Без параметров возвращает все ошибки (эквивалент errors.value)
Parameters
options?
Опции фильтрации ошибок
Returns
Отфильтрованный массив ошибок валидации
Example
// Все ошибки
const allErrors = form.getErrors();
// Ошибки с конкретным кодом
const requiredErrors = form.getErrors({ code: 'required' });
// Ошибки с несколькими кодами
const errors = form.getErrors({ code: ['required', 'email'] });
// Ошибки по сообщению
const passwordErrors = form.getErrors({ message: 'Password' });
// Ошибки по параметрам
const minLengthErrors = form.getErrors({
params: { minLength: 8 }
});
// Кастомная фильтрация
const customErrors = form.getErrors({
predicate: (err) => err.code.startsWith('custom_')
});
Inherited from
getValue()
getValue(): T[];
Defined in: core/nodes/array-node.ts:200
Получить значение узла (non-reactive) Использует .peek() для получения значения без создания зависимости
Returns
T[]
Overrides
insert()
insert(index, initialValue?): void;
Defined in: core/nodes/array-node.ts:164
Вставить элемент в массив
Parameters
index
number
Индекс для вставки
initialValue?
Partial<T>
Начальные значения для нового элемента
Returns
void
map()
map<R>(callback): R[];
Defined in: core/nodes/array-node.ts:355
Маппинг элементов массива
Type Parameters
R
R
Parameters
callback
(item, index) => R
Функция преобразования с типизированным GroupNode
Returns
R[]
Новый массив результатов
markAsDirty()
markAsDirty(): void;
Defined in: core/nodes/form-node.ts:313
Отметить узел как dirty (значение изменено)
Template Method: обновляет signal в базовом классе, вызывает hook для кастомной логики в наследниках
Returns
void
Inherited from
markAsPristine()
markAsPristine(): void;
Defined in: core/nodes/form-node.ts:324
Отметить узел как pristine (значение не изменено)
Template Method: обновляет signal в базовом классе, вызывает hook для кастомной логики в наследниках
Returns
void
Inherited from
markAsTouched()
markAsTouched(): void;
Defined in: core/nodes/form-node.ts:291
Отметить узел как touched (пользователь взаимодействовал)
Template Method: обновляет signal в базовом классе, вызывает hook для кастомной логики в наследниках
Returns
void
Inherited from
markAsUntouched()
markAsUntouched(): void;
Defined in: core/nodes/form-node.ts:302
Отметить узел как untouched
Template Method: обновляет signal в базовом классе, вызывает hook для кастомной логики в наследниках
Returns
void
Inherited from
onDisable()
protected onDisable(): void;
Defined in: core/nodes/array-node.ts:600
Hook: вызывается после disable()
Для ArrayNode: рекурсивно отключаем все элементы массива
Returns
void
Example
// Отключить весь массив полей
form.items.disable();
// Все элементы становятся disabled
form.items.forEach(item => {
console.log(item.status.value); // 'disabled'
});
Overrides
onEnable()
protected onEnable(): void;
Defined in: core/nodes/array-node.ts:622
Hook: вызывается после enable()
Для ArrayNode: рекурсивно включаем все элементы массива
Returns
void
Example
// Включить весь массив полей
form.items.enable();
// Все элементы становятся enabled
form.items.forEach(item => {
console.log(item.status.value); // 'valid' или 'invalid'
});
Overrides
onMarkAsDirty()
protected onMarkAsDirty(): void;
Defined in: core/nodes/array-node.ts:323
Hook: вызывается после markAsDirty()
Для ArrayNode: рекурсивно помечаем все элементы массива как dirty
Returns
void
Overrides
onMarkAsPristine()
protected onMarkAsPristine(): void;
Defined in: core/nodes/array-node.ts:332
Hook: вызывается после markAsPristine()
Для ArrayNode: рекурсивно помечаем все элементы массива как pristine
Returns
void
Overrides
onMarkAsTouched()
protected onMarkAsTouched(): void;
Defined in: core/nodes/array-node.ts:305
Hook: вызывается после markAsTouched()
Для ArrayNode: рекурсивно помечаем все элементы массива как touched
Returns
void
Overrides
onMarkAsUntouched()
protected onMarkAsUntouched(): void;
Defined in: core/nodes/array-node.ts:314
Hook: вызывается после markAsUntouched()
Для ArrayNode: рекурсивно помечаем все элементы массива как untouched
Returns
void
Overrides
patchValue()
patchValue(values): void;
Defined in: core/nodes/array-node.ts:217
Частично обновить значение узла Для FieldNode: работает как setValue Для GroupNode: обновляет только указанные поля Для ArrayNode: обновляет только указанные элементы
Parameters
values
(T | undefined)[]
Returns
void
Overrides
push()
push(initialValue?): void;
Defined in: core/nodes/array-node.ts:137
Добавить элемент в конец массива
Parameters
initialValue?
Partial<T>
Начальные значения для нового элемента
Returns
void
removeAt()
removeAt(index): void;
Defined in: core/nodes/array-node.ts:146
Удалить элемент по индексу
Parameters
index
number
Индекс элемента для удаления
Returns
void
reset()
reset(values?): void;
Defined in: core/nodes/array-node.ts:242
Сбросить массив к указанным значениям (или очистить)
Parameters
values?
T[]
опциональный массив значений для сброса
Returns
void
Remarks
Очищает текущий массив и заполняет новыми элементами
Example
// Очистить массив
arrayNode.reset();
// Сбросить к новым значениям
arrayNode.reset([{ name: 'Item 1' }, { name: 'Item 2' }]);
Overrides
resetToInitial()
resetToInitial(): void;
Defined in: core/nodes/array-node.ts:277
Сбросить массив к исходным значениям (initialItems)
Returns
void
Remarks
Восстанавливает массив в состояние, которое было при создании ArrayNode. Более явный способ сброса к начальным значениям по сравнению с reset()
Полезно когда:
- Пользователь нажал "Cancel" - вернуть массив к исходным элементам
- Массив был изменен через reset(newValues), но нужно вернуться к началу
- Явное намерение показать "отмена всех изменений"
Example
const arrayNode = new ArrayNode(
{ name: { value: '', component: Input } },
[{ name: 'Initial 1' }, { name: 'Initial 2' }]
);
arrayNode.push({ name: 'New Item' });
arrayNode.reset([{ name: 'Temp' }]);
console.log(arrayNode.length.value); // 1
arrayNode.resetToInitial();
console.log(arrayNode.length.value); // 2
console.log(arrayNode.at(0)?.name.value.value); // 'Initial 1'
setErrors()
setErrors(_errors): void;
Defined in: core/nodes/array-node.ts:287
Установить ошибки валидации извне
Parameters
_errors
Returns
void
Overrides
setValue()
setValue(values, options?): void;
Defined in: core/nodes/array-node.ts:204
Установить значение узла
Parameters
values
T[]
options?
опции установки значения
Returns
void
Overrides
touchAll()
touchAll(): void;
Defined in: core/nodes/form-node.ts:354
Пометить все поля (включая вложенные) как touched Алиас для markAsTouched(), но более явно показывает намерение пометить ВСЕ поля рекурсивно
Полезно для:
- Показа всех ошибок валидации перед submit
- Принудительного отображения ошибок при нажатии "Validate All"
- Отображения невалидных полей в wizard/step form
Returns
void
Example
// Показать все ошибки перед submit
form.touchAll();
const isValid = await form.validate();
if (!isValid) {
// Все ошибки теперь видны пользователю
}
// Или использовать submit() который уже вызывает touchAll
await form.submit(async (values) => {
await api.save(values);
});
Inherited from
validate()
validate(): Promise<boolean>;
Defined in: core/nodes/array-node.ts:282
Запустить валидацию узла
Returns
Promise<boolean>
Promise<boolean> - true если валидация успешна
Overrides
watchItems()
watchItems<K>(fieldKey, callback): () => void;
Defined in: core/nodes/array-node.ts:504
Подписка на изменения конкретного поля во всех элементах массива Срабатывает при изменении значения поля в любом элементе
Type Parameters
K
K extends string | number | symbol
Parameters
fieldKey
K
Ключ поля для отслеживания
callback
(values) => void | Promise<void>
Функция, вызываемая при изменении, получает массив всех значений и индекс измененного элемента
Returns
Функция отписки для cleanup
(): void;
Returns
void
Example
// Автоматический пересчет общей стоимости при изменении цен
const dispose = form.existingLoans.watchItems(
'remainingAmount',
(amounts) => {
const totalDebt = amounts.reduce((sum, amount) => sum + (amount || 0), 0);
form.totalDebt.setValue(totalDebt);
}
);
// При изменении любого remainingAmount → пересчитается totalDebt
form.existingLoans.at(0)?.remainingAmount.setValue(500000);
// Cleanup
useEffect(() => dispose, []);
watchLength()
watchLength(callback): () => void;
Defined in: core/nodes/array-node.ts:548
Подписка на изменение длины массива Срабатывает при добавлении/удалении элементов
Parameters
callback
(length) => void | Promise<void>
Функция, вызываемая при изменении длины, получает новую длину
Returns
Функция отписки для cleanup
(): void;
Returns
void
Example
// Обновление счетчика элементов в UI
const dispose = form.properties.watchLength((length) => {
console.log(`Количество объектов недвижимости: ${length}`);
form.propertyCount.setValue(length);
});
form.properties.push({ title: 'Квартира', value: 5000000 });
// Выведет: "Количество объектов недвижимости: 1"
// Cleanup
useEffect(() => dispose, []);
Properties
_dirty
protected _dirty: Signal<boolean>;
Defined in: core/nodes/form-node.ts:56
Значение узла было изменено (dirty) Protected: наследники могут читать/изменять через методы
Inherited from
_status
protected _status: Signal<FieldStatus>;
Defined in: core/nodes/form-node.ts:62
Текущий статус узла Protected: наследники могут читать/изменять через методы
Inherited from
_touched
protected _touched: Signal<boolean>;
Defined in: core/nodes/form-node.ts:50
Пользователь взаимодействовал с узлом (touched) Protected: наследники могут читать/изменять через методы
Inherited from
dirty
readonly dirty: ReadonlySignal<boolean>;
Defined in: core/nodes/array-node.ts:74
Значение узла было изменено (dirty) Computed из _dirty для предоставления readonly интерфейса
Overrides
disabled
readonly disabled: ReadonlySignal<boolean>;
Defined in: core/nodes/form-node.ts:99
Узел отключен (disabled)
Inherited from
enabled
readonly enabled: ReadonlySignal<boolean>;
Defined in: core/nodes/form-node.ts:104
Узел включен (enabled)
Inherited from
errors
readonly errors: ReadonlySignal<ValidationError[]>;
Defined in: core/nodes/array-node.ts:76
Массив ошибок валидации
Overrides
invalid
readonly invalid: ReadonlySignal<boolean>;
Defined in: core/nodes/array-node.ts:72
Узел невалиден (есть ошибки валидации)
Overrides
length
readonly length: ReadonlySignal<number>;
Defined in: core/nodes/array-node.ts:78
pending
readonly pending: ReadonlySignal<boolean>;
Defined in: core/nodes/array-node.ts:75
Выполняется асинхронная валидация
Overrides
pristine
readonly pristine: ReadonlySignal<boolean>;
Defined in: core/nodes/form-node.ts:88
Значение узла не было изменено (pristine)
Inherited from
status
readonly status: ReadonlySignal<FieldStatus>;
Defined in: core/nodes/array-node.ts:77
Текущий статус узла Computed из _status для предоставления readonly интерфейса
Overrides
touched
readonly touched: ReadonlySignal<boolean>;
Defined in: core/nodes/array-node.ts:73
Пользователь взаимодействовал с узлом (touched) Computed из _touched для предоставления readonly интерфейса
Overrides
untouched
readonly untouched: ReadonlySignal<boolean>;
Defined in: core/nodes/form-node.ts:77
Пользователь не взаимодействовал с узлом (untouched)
Inherited from
valid
readonly valid: ReadonlySignal<boolean>;
Defined in: core/nodes/array-node.ts:71
Узел валиден (все валидаторы прошли успешно)
Overrides
value
readonly value: ReadonlySignal<T[]>;
Defined in: core/nodes/array-node.ts:70
Текущее значение узла
- Для FieldNode: значение поля
- Для GroupNode: объект со значениями всех полей
- Для ArrayNode: массив значений элементов