Skip to main content
Layout entities control how your app surfaces inside Twenty’s UI — what lives in the sidebar, which saved views ship with the app, and how a record detail page is arranged.

Layout concepts

Views, navigation items, and page layouts reference each other by universalIdentifier:
  • A navigation menu item of type VIEW points at a defineView identifier, so the sidebar link opens that saved view.
  • A page layout of type RECORD_PAGE targets an object and can embed front components inside its tabs as widgets.
Представления — это сохранённые конфигурации отображения записей объекта: какие поля видны, их порядок, а также применённые фильтры и группы. Используйте defineView() для поставки преднастроенных представлений вместе с вашим приложением:
src/views/example-view.ts
Основные моменты:
  • objectUniversalIdentifier указывает, к какому объекту применяется это представление.
  • key определяет тип представления (например, ViewKey.INDEX для основного списка).
  • fields управляет тем, какие столбцы отображаются и в каком порядке. Каждое поле ссылается на fieldMetadataUniversalIdentifier.
  • Также вы можете определить filters, filterGroups, groups и fieldGroups для более продвинутых конфигураций.
  • position управляет порядком, когда для одного и того же объекта существует несколько представлений.
Пункты навигационного меню добавляют пользовательские элементы в боковую панель рабочего пространства. Используйте defineNavigationMenuItem() для ссылок на представления, внешние URL или объекты:
src/navigation-menu-items/example-navigation-menu-item.ts
Основные моменты:
  • type определяет, на что ссылается пункт меню: NavigationMenuItemType.VIEW для сохранённого представления или NavigationMenuItemType.LINK для внешнего URL.
  • Для ссылок на представления укажите viewUniversalIdentifier. Для внешних ссылок укажите link.
  • position управляет порядком в боковой панели.
  • icon и color (необязательно) настраивают внешний вид.
Макеты страниц позволяют настраивать вид страницы с деталями записи: какие вкладки отображаются, какие виджеты внутри каждой вкладки и как они расположены. Используйте definePageLayout() для поставки пользовательских макетов вместе с вашим приложением:
src/page-layouts/example-record-page-layout.ts
Основные моменты:
  • type обычно равен 'RECORD_PAGE' для настройки детального представления конкретного объекта.
  • objectUniversalIdentifier указывает, к какому объекту применяется этот макет.
  • Каждая tab определяет раздел страницы с title, position и layoutMode (CANVAS для свободного макета).
  • Каждый widget внутри вкладки может отображать компонент фронтенда, список связей или другие встроенные типы виджетов.
  • position у вкладок управляет их порядком. Используйте большие значения (например, 50), чтобы разместить пользовательские вкладки после встроенных.