Skip to main content
Um layout de página controla como a página de detalhes de um registro é organizada: quais abas aparecem e quais widgets elas contêm. Use definePageLayout() para declarar um layout para um objeto que você possui ou definePageLayoutTab() para adicionar uma única aba a um layout que já existe (seu ou um padrão da Twenty).

definePageLayout

Use isto quando você possuir toda a página de detalhes — normalmente para um objeto personalizado que você próprio definiu.
src/page-layouts/example-record-page-layout.ts

Pontos-chave

  • type é um dos seguintes: 'RECORD_INDEX', 'RECORD_PAGE', 'DASHBOARD' ou 'STANDALONE_PAGE'. Use 'RECORD_PAGE' para personalizar a visualização de detalhes de um objeto específico.
  • objectUniversalIdentifier especifica a qual objeto este layout se aplica.
  • Cada tab define uma seção da página com um title, position e layoutMode: VERTICAL_LIST para páginas de registro e páginas independentes, GRID para dashboards e CANVAS para um único widget que deve preencher a janela de visualização da aba. Uma aba VERTICAL_LIST empilha widgets verticalmente. Widgets integrados que gerenciam sua própria rolagem, como linhas do tempo, arquivos, notas, tarefas e fluxos de trabalho, preenchem uma janela de visualização; campos, componentes de front, gráficos e outros widgets fit-content são renderizados na altura de seu conteúdo ou na altura configurada. Uma aba GRID sempre organiza seus widgets como cartões em uma grade de 12 colunas. Um widget CANVAS não tem posição explícita; se uma aba de canvas contiver vários widgets, eles serão renderizados na altura do conteúdo, em vez de preencherem a viewport.
  • Defina layoutMode explicitamente. Omití-lo faz com que você obtenha VERTICAL_LIST em uma STANDALONE_PAGE e GRID em todos os outros casos, o que raramente é o que você deseja em uma página de registro.
  • Cada widget dentro de uma aba pode renderizar um front component, uma lista de relações ou outros tipos de widget nativos.
  • Um widget FRONT_COMPONENT pode definir headerCommandMenuItemUniversalIdentifiers como uma matriz ordenada de identificadores universais de itens de menu de comandos do mesmo app. Essas ações aparecem como botões de ícone no cabeçalho do cartão do widget e mantêm suas verificações de disponibilidade e permissões no nível do comando. Os identificadores devem ser exclusivos e devem ser resolvidos quando o app for instalado.
  • position nas abas controla sua ordem. Use valores mais altos (por exemplo, 50) para colocar abas personalizadas após as nativas.

Widgets de campos

Um widget FIELD renderiza um campo do registro. Para campos de relação, ele também pode incorporar uma lista de registros relacionados:
  • fieldMetadataId recebe o identificador universal de um campo no objeto do layout.
  • fieldDisplayMode é um dentre 'FIELD', 'CARD', 'EDITOR', 'VIEW' ou 'TABLE'. TABLE incorpora uma visualização que lista os registros de um campo de relação um-para-muitos.
  • nestedRelationFieldMetadataId é opcional e recebe o identificador universal de um campo de relação um-para-muitos no objeto de destino da relação, para listar registros a dois saltos de relação (por exemplo, uma página de Empresa listando as oportunidades das pessoas da empresa, ou uma página de Pessoa listando as oportunidades da empresa da pessoa). O primeiro salto pode ser um campo de relação um-para-muitos ou muitos-para-um, o segundo deve ser um-para-muitos (relações de junção não são compatíveis) e isso requer fieldDisplayMode: 'TABLE' — combiná-lo com qualquer outro modo de exibição é um erro de validação, já que um widget aninhado sempre é renderizado como uma visualização incorporada.

definePageLayoutTab

Use isto quando você quiser apenas adicionar uma aba a um layout existente — por exemplo, uma aba de analytics na página padrão de Company ou uma aba de resumo de IA anexada ao layout do seu próprio objeto.
src/page-layouts/example-extra-tab.ts

Pontos-chave

  • pageLayoutUniversalIdentifier é obrigatório e deve apontar para um layout de página que já exista no momento da instalação — seja um layout padrão da Twenty ou um definido pelo seu próprio aplicativo. Referências entre aplicativos para layouts pertencentes a outro aplicativo instalado não são compatíveis atualmente. Quando o layout pai estiver ausente, a instalação falha com um erro de validação claro.
  • Para layouts padrão do Twenty, importe identificadores de twenty-sdk/define:
    Cada entrada de layout também expõe suas tabs e seus widgets, para que você possa fazer referência a qualquer nível:
    Um alias abreviado STANDARD_PAGE_LAYOUT também está disponível:
  • widgets têm escopo apenas para esta aba — eles referenciam front components, visualizações etc., exatamente como widgets definidos inline em definePageLayout.
  • position controla a ordenação em relação às abas existentes no layout de destino. Escolha um valor que posicione sua aba onde você deseja em relação às abas nativas.
  • Use isto em vez de definePageLayout quando você quiser apenas adicionar a um layout existente. Use definePageLayout quando você possuir todo o layout.