BlockBuilder Logo/
Документация/Компоненты
Быстрый стартAPIVueReactДемоИстория изменений
GitHub

Начало работы

Быстрый стартИстория изменений

Справочник API

Обзор APIМетодыСвойстваПоля формТемизация и локализацияУтилитыТипы

Vue 3

Быстрый стартКомпонентыСобытияNuxt (SSR)

React

Быстрый стартКомпонентыКолбэкиNext.js (SSR)
Следующая страница
Колбэки
→

Компоненты

React-компоненты BlockBuilder и их API

BlockBuilderComponent

Основной компонент для работы с BlockBuilder в React. Готовый UI: список блоков, формы создания и редактирования, смена порядка кнопками, удаление.

Импорт

Свойства (props)

configObject, опциональный

Конфигурация BlockBuilder с типами блоков и настройками. По умолчанию { availableBlockTypes: [] }

IBlockType:

blockManagementUseCaseBlockManagementUseCase, обязательный

Экземпляр use case для управления блоками. Создаётся через createBlockManagementUseCase()

apiSelectUseCaseApiSelectUseCase, опциональный

Экземпляр use case для работы с полями api-select

customFieldRendererRegistryICustomFieldRendererRegistry, опциональный

Реестр кастомных рендереров полей (type: "custom")

initialBlocksArray, опциональный

Массив начальных блоков для загрузки при инициализации

onSaveFunction, опциональный

Функция обратного вызова для сохранения блоков (например, отправка на сервер)

isEditBoolean, опциональный, по умолчанию: true

Режим редактирования. Если false, все контролы редактирования скрываются, остаётся только пользовательская верстка блоков в обёртке BlockBuilder.

controlsContainerClassString, опциональный

Кастомный CSS класс для контейнера контролов (кнопки и статистика)

controlsFixedPosition'top' | 'bottom', опциональный

Фиксирует панель управления (кнопки + статистика) сверху или снизу экрана

controlsOffsetNumber, опциональный

Отступ от края в пикселях (по умолчанию 0)

controlsOffsetVarString, опциональный

CSS переменная для учета высоты шапки/футера (например: --header-height)

locale'ru' | 'en', по умолчанию ru

Встроенная локализация UI BlockBuilder (кнопки, подписи контролов, confirm-тексты). Подписи полей блоков задаёт приложение.

uiStringsPartial<IUiStrings>, опциональный

Точечные переопределения строк поверх пресета locale.

themeTUiTheme, опциональный

Пресет темы UI: default (по умолчанию, если prop не передан) или dark. Переопределение токенов — через themeVars на .bb-app.

themeVarsRecord<--bb-*>, опциональный

Переопределение design tokens (--bb-color-primary, --bb-color-surface, radius, spacing…).

Тема, locale, themeVars →

warnOnPageLeaveBoolean, опциональный

Нативное предупреждение браузера при уходе со страницы с несохранёнными блоками (beforeunload). Срабатывает только при нативном покидании страницы (закрытие вкладки, перезагрузка, переход по внешней ссылке) — не связано с клиентским роутингом Vue Router / React Router. Для переходов внутри SPA отслеживайте несохранённые изменения самостоятельно (navigation guard, useBlocker, onbeforeunload + router hook — в зависимости от вашего стека).

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

  • Правила из fields[].rules проверяются автоматически в модалке BlockBuilder — отдельно подключать валидатор не нужно. Если пользователь нажал «Сохранить» с ошибками, сообщения появляются у полей и обновляются при каждом изменении.
  • Поле типа block-anchor сохраняет якорь (#block-id или URL). Скролл и переход по клику реализуйте в своих компонентах блоков. Для поля file с multiple: true редактор показывает отдельный UI загрузки.

Поля форм и rules → · Реактивная валидация (core) →

Колбэки

onBlockAdded(block: IBlock) => void

Создан или продублирован блок — в колбек приходит полный объект блока

onBlockUpdated(block: IBlock) => void

Обновлён блок — актуальный объект после изменения props, settings и т.д.

onBlockDeleted(blockId: TBlockId) => void

Удалён блок — только id (строка), не объект

Подробнее о колбэках → · тип IBlock →

Базовое использование

С сохранением на сервер

SSR-утилиты

Экспортируются из @mushket-co/block-builder/react:

  • prepareBlocksForDisplay — восстанавливает render из конфигурации типов
  • enrichBlockForDisplay — обогащение одного блока
  • seedRepositoryFromBlocks — синхронизация репозитория после гидрации
  • enableViewportBreakpointDetection — spacing после гидрации
  • canRenderVueBlock — можно ли отрендерить блок как Vue-компонент
  • canRenderReactBlock — можно ли отрендерить блок как React-компонент
  • resolveVueComponentForBlock — резолв Vue-компонента из блока и реестра
  • resolveReactComponentForBlock — резолв React-компонента из блока и реестра
  • getDefaultBreakpoint — имя брейкпоинта по умолчанию для spacing
  • isClient — true в браузере
  • isServer — true при SSR
  • isViewportBreakpointDetectionEnabled — активно ли определение брейкпоинта по viewport
  • resetViewportBreakpointDetection — сброс состояния определения брейкпоинта

Подробное руководство по SSR — Next.js (SSR).

Ваши компоненты блоков

Каждый тип блока использует ваш React-компонент для рендеринга. Компонент получает prop block с полной информацией о блоке.

Структура объекта block

Пример компонента блока

Пример компонента с изображением

При использовании поля type: "image" в компоненте нужно обрабатывать как строку (base64), так и объект (серверная загрузка):

Важно: при использовании uploadUrl (загрузка через сервер API клиента) ответ сервера ОБЯЗАТЕЛЬНО должен быть объектом с полем src, содержащим URL изображения. Если формат ответа отличается, используйте responseMapper для преобразования ответа к виду объекта с вашими полями и обязательным полем src. Подробнее — поля image и file →

Важно

  • •Компонент должен принимать prop block
  • •Отступы применяются автоматически: margin через inline стили, padding через CSS переменные (--spacing-padding-top, --spacing-padding-bottom и т.д.)
  • •Все кастомные props доступны через block.props
  • •Компонент должен быть зарегистрирован в getComponentRegistry() до рендера редактора

Полный список props типов блоков — в Поля форм. Отступы (margin/padding) — spacing.