Skip to main content

NodeFactory

Defined in: core/factories/node-factory.ts:44

Фабрика для создания узлов формы

Определяет тип конфига и создает соответствующий узел (FieldNode, GroupNode, ArrayNode)

Constructors

Constructor

new NodeFactory(): NodeFactory;

Returns

NodeFactory

Methods

createNode()

createNode<T>(config): FormNode<T>;

Defined in: core/factories/node-factory.ts:90

Создает узел формы на основе конфигурации

✅ ОБНОВЛЕНО: Теперь поддерживает массивы напрямую

Автоматически определяет тип узла:

  • FieldNode: имеет value и component
  • ArrayNode: массив [schema, ...items] или { schema, initialItems }
  • GroupNode: объект без value, component, schema

Type Parameters

T

T

Parameters

config

unknown

Конфигурация узла

Returns

FormNode<T>

Экземпляр FieldNode, GroupNode или ArrayNode

Throws

Error если конфиг не соответствует ни одному типу

Example

const factory = new NodeFactory();

// FieldNode
const field = factory.createNode({
value: 'test@mail.com',
component: Input,
validators: [required, email]
});

// GroupNode
const group = factory.createNode({
email: { value: '', component: Input },
password: { value: '', component: Input }
});

// ArrayNode (объект)
const array = factory.createNode({
schema: { title: { value: '', component: Input } },
initialItems: [{ title: 'Item 1' }]
});

// ArrayNode (массив) - новый формат
const array2 = factory.createNode([
{ title: { value: '', component: Input } }, // schema
{ title: 'Item 1' }, // initial item 1
{ title: 'Item 2' } // initial item 2
]);

extractValues()

extractValues(schema): unknown;

Defined in: core/factories/node-factory.ts:204

Извлечь значения из схемы (рекурсивно)

✅ НОВОЕ: Извлечено из GroupNode для централизации логики

Преобразует схему формы в объект со значениями:

  • { name: { value: 'John', component: Input } } → { name: 'John' }
  • Поддерживает вложенные группы
  • Поддерживает массивы

Parameters

schema

unknown

Схема формы

Returns

unknown

Объект со значениями полей

Example

const factory = new NodeFactory();

const schema = {
name: { value: 'John', component: Input },
age: { value: 30, component: Input },
address: {
city: { value: 'Moscow', component: Input }
}
};

factory.extractValues(schema);
// { name: 'John', age: 30, address: { city: 'Moscow' } }

isArrayConfig()

isArrayConfig(config): boolean;

Defined in: core/factories/node-factory.ts:276

Проверяет, является ли конфиг конфигурацией массива (ArrayConfig)

ArrayConfig имеет обязательное свойство:

  • schema: схема для элементов массива

И НЕ имеет:

  • value (отличие от FieldConfig)

Parameters

config

unknown

Проверяемая конфигурация

Returns

boolean

true если config является ArrayConfig

Example

const factory = new NodeFactory();

factory.isArrayConfig({ schema: {}, initialItems: [] }); // true
factory.isArrayConfig({ value: '', component: Input }); // false
factory.isArrayConfig({ email: { value: '' } }); // false

isFieldConfig()

isFieldConfig(config): boolean;

Defined in: core/factories/node-factory.ts:249

Проверяет, является ли конфиг конфигурацией поля (FieldConfig)

FieldConfig имеет обязательные свойства:

  • value: начальное значение поля
  • component: React-компонент для отображения

Parameters

config

unknown

Проверяемая конфигурация

Returns

boolean

true если config является FieldConfig

Example

const factory = new NodeFactory();

factory.isFieldConfig({ value: '', component: Input }); // true
factory.isFieldConfig({ email: { value: '' } }); // false
factory.isFieldConfig(null); // false

isGroupConfig()

isGroupConfig(config): boolean;

Defined in: core/factories/node-factory.ts:307

Проверяет, является ли конфиг конфигурацией группы (GroupConfig)

GroupConfig - это объект, который:

  • НЕ является FieldConfig (нет value/component)
  • НЕ является ArrayConfig (нет schema)
  • Содержит вложенные конфиги полей/групп/массивов

Parameters

config

unknown

Проверяемая конфигурация

Returns

boolean

true если config является GroupConfig

Example

const factory = new NodeFactory();

factory.isGroupConfig({
email: { value: '', component: Input },
password: { value: '', component: Input }
}); // true

factory.isGroupConfig({ value: '', component: Input }); // false
factory.isGroupConfig({ schema: {} }); // false
factory.isGroupConfig(null); // false