definePageLayout() для объявления макета для объекта, которым вы владеете, или definePageLayoutTab() для добавления одной вкладки к макету, который уже существует (вашему или стандартному Twenty).
definePageLayout
Используйте это, когда вы управляете всей страницей деталей — обычно для пользовательского объекта, который вы определили сами.src/page-layouts/example-record-page-layout.ts
Основные моменты
type— одно из значений'RECORD_INDEX','RECORD_PAGE','DASHBOARD'или'STANDALONE_PAGE'. Используйте'RECORD_PAGE'для настройки детального представления конкретного объекта.objectUniversalIdentifierуказывает, к какому объекту применяется этот макет.- Каждая
tabопределяет раздел страницы сtitle,positionиlayoutMode:VERTICAL_LISTдля страниц записей и автономных страниц,GRIDдля панелей мониторинга иCANVASдля одного виджета, который должен заполнять область просмотра вкладки. Во вкладкеVERTICAL_LISTвиджеты располагаются вертикально. Встроенные виджеты, которые самостоятельно управляют прокруткой, такие как временные шкалы, файлы, заметки, задачи и рабочие процессы, заполняют одну область просмотра; поля, фронтальные компоненты, графики и другие виджеты с подгонкой по содержимому отображаются с высотой по содержимому или заданной высотой. Во вкладкеGRIDвиджеты всегда размещаются в виде карточек в 12-колоночной сетке. ВиджетCANVASне имеет явно заданного положения; если вкладка холста содержит несколько виджетов, они отображаются на высоте своего содержимого, а не заполняют область просмотра. - Явно задайте
layoutMode. Если его не указывать, вы получитеVERTICAL_LISTнаSTANDALONE_PAGEиGRIDв остальных случаях, что редко бывает нужно на странице записи. - Каждый
widgetвнутри вкладки может отображать front component, список связей или другие встроенные типы виджетов. - Виджет
FRONT_COMPONENTможет задавать дляheaderCommandMenuItemUniversalIdentifiersупорядоченный массив универсальных идентификаторов элементов меню команд из того же приложения. Эти действия отображаются как кнопки со значками в заголовке карточки виджета и сохраняют доступность и проверки разрешений на уровне команд. Идентификаторы должны быть уникальными и разрешаться при установке приложения. positionу вкладок управляет их порядком. Используйте большие значения (например, 50), чтобы разместить пользовательские вкладки после встроенных.
Виджеты полей
ВиджетFIELD отображает одно поле записи. Для полей связи он также может встраивать список связанных записей:
fieldMetadataIdпринимает универсальный идентификатор поля в объекте макета.fieldDisplayModeможет иметь одно из следующих значений:'FIELD','CARD','EDITOR','VIEW'или'TABLE'.TABLEвстраивает представление, отображающее записи поля связи «один‑ко‑многим».nestedRelationFieldMetadataIdявляется необязательным и принимает универсальный идентификатор поля связи «один‑ко‑многим» на целевом объекте связи, чтобы перечислять записи на два перехода связи дальше (например, страница Company, перечисляющая сделки людей этой компании, или страница Person, перечисляющая сделки компании этого человека). Первый переход может быть полем связи «один‑ко‑многим» или «многие‑к‑одному», второй обязан быть «один‑ко‑многим» (соединительные связи не поддерживаются), и это требуетfieldDisplayMode: 'TABLE'— комбинирование его с любым другим режимом отображения является ошибкой валидации, поскольку вложенный виджет всегда отображается как встраиваемое представление.
definePageLayoutTab
Используйте это, когда вы хотите только добавить вкладку к существующему макету — например, вкладку аналитики на стандартной странице Company или вкладку с AI-сводкой, прикреплённую к макету вашего собственного объекта.src/page-layouts/example-extra-tab.ts
Основные моменты
-
pageLayoutUniversalIdentifierявляется обязательным и должен указывать на макет страницы, который уже существует на момент установки — либо стандартный макет Twenty, либо определённый вашим собственным приложением. Кросс-приложенческие ссылки на макеты, которыми владеет другое установленное приложение, на данный момент не поддерживаются. Если родительский макет отсутствует, установка завершается с понятной ошибкой проверки. -
Для стандартных макетов Twenty импортируйте идентификаторы из
twenty-sdk/define:Каждый элемент макета также предоставляет своиtabsи ихwidgets, поэтому вы можете ссылаться на любой уровень:Также доступен короткий псевдонимSTANDARD_PAGE_LAYOUT: -
widgetsограничены только этой вкладкой — они ссылаются на front components, представления и т. п. точно так же, как виджеты, определённые непосредственно вdefinePageLayout. -
positionуправляет порядком относительно существующих вкладок в целевом макете. Выберите значение, которое поместит вашу вкладку в нужное место относительно встроенных вкладок. -
Используйте это вместо
definePageLayout, когда вы хотите только добавить к существующему макету. ИспользуйтеdefinePageLayout, когда вы управляете всем макетом.