FlowEngine
В NocoBase FlowEngine (поточный движок) — это ядро, управляющее визуальной конфигурацией. Блоки, поля, кнопки действий в интерфейсе NocoBase управляются через FlowEngine — включая их рендеринг, панели конфигурации и сохранение конфигурации.

Для разработчиков плагинов FlowEngine предоставляет два ключевых концепта:
- FlowModel — конфигурируемая модель компонента, отвечает за рендеринг UI и управление props
- Flow — процесс конфигурации, определяет панель конфигурации компонента и логику обработки данных
Если Ваш компонент должен появиться в меню «Добавить блок / поле / действие» или должен поддерживать визуальную конфигурацию пользователем в интерфейсе, его нужно обернуть через FlowModel. Если эти возможности не нужны, достаточно обычного React-компонента — см. Component vs FlowModel.
Что такое FlowModel
В отличие от обычного React-компонента, FlowModel помимо рендеринга UI также управляет источником props, определением панели конфигурации и сохранением конфигурации. Проще говоря: props обычного компонента жёстко заданы, а props FlowModel генерируются динамически через Flow.
Если хотите глубже разобраться в архитектуре FlowEngine, см. полную документацию FlowEngine. Ниже описано использование с точки зрения разработчика плагина.
Минимальный пример
Создание и регистрация FlowModel выполняется в три шага:
1. Унаследовать базовый класс, реализовать renderComponent
renderComponent() — это метод рендеринга этой модели, аналогичный render() React-компонента. tExpr() используется для отложенного перевода — потому что define() выполняется на этапе загрузки модуля, и в этот момент i18n ещё не инициализирован. Подробнее см. Распространённые возможности Context → tExpr.
2. Зарегистрировать в Plugin
3. Использовать в интерфейсе
После регистрации, после запуска плагина (см. включение плагина в Обзор разработки плагинов), создайте новую страницу в интерфейсе NocoBase, нажмите «Добавить блок» — и Вы увидите Ваш «Hello block».

Добавление пунктов конфигурации через registerFlow
Просто рендерить — этого мало. Ключевая ценность FlowModel — возможность конфигурации. Через registerFlow() можно добавить модели панель конфигурации, чтобы пользователь мог изменять свойства в интерфейсе.
Например, блок, поддерживающий редактирование HTML-содержимого:
Несколько ключевых моментов:
on: 'beforeRender'— указывает, что этот Flow выполняется перед рендерингом, значения панели конфигурации записываются вthis.propsдо рендерингаuiSchema— определяет UI панели конфигурации в формате JSON Schema, синтаксис см. в UI Schemahandler(ctx, params)—params— это значения, заполненные пользователем в панели конфигурации; черезctx.model.propsони устанавливаются на модельdefaultParams— значения по умолчанию для панели конфигурации
Распространённые приёмы написания uiSchema
uiSchema основан на JSON Schema. v2 совместима с синтаксисом uiSchema, но сценарии использования ограничены — в основном, для описания UI формы в панелях конфигурации Flow. Большая часть рендеринга компонентов во время выполнения рекомендуется выполнять напрямую через компоненты Antd, не используя uiSchema.
Здесь перечислены наиболее распространённые компоненты (полный справочник см. в UI Schema):
Каждое поле оборачивается через 'x-decorator': 'FormItem' — это автоматически добавит заголовок и компоновку.
Описание параметров define()
FlowModel.define() используется для установки метаданных модели, контролирующих способ её отображения в меню. В разработке плагинов чаще всего используется label, но также поддерживаются и другие параметры:
Большинству плагинов достаточно установить только label:
Если нужно управлять сортировкой или скрытием, добавьте sort и hide:
Выбор базового класса FlowModel
NocoBase предоставляет несколько базовых классов FlowModel — выбирайте в зависимости от типа расширения:
Обычно для блока таблицы используют TableBlockModel (наиболее распространённый, готовое решение); для полностью пользовательского рендеринга — CollectionBlockModel или BlockModel; для полей — FieldModel; для кнопок действий — ActionModel.
Связанные ссылки
- Расширение блоков — разработка блоков на базовых классах серии BlockModel
- Расширение полей — разработка пользовательских полей на FieldModel
- Расширение действий — разработка кнопок действий на ActionModel
- Component vs FlowModel — не уверены, какой подход выбрать?
- Определение FlowDefinition — полное описание параметров registerFlow и список типов событий
- Полная документация FlowEngine — полный справочник FlowModel, Flow, Context
- Быстрый старт FlowEngine — построение оркестрируемого компонента кнопки с нуля
- Обзор разработки плагинов — общее введение в разработку плагинов
- UI Schema — справочник по синтаксису uiSchema

