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.objectUniversalIdentifierespecifica a qual objeto este layout se aplica.- Cada
tabdefine uma seção da página com umtitle,positionelayoutMode:VERTICAL_LISTpara páginas de registro e páginas independentes,GRIDpara dashboards eCANVASpara um único widget que deve preencher a janela de visualização da aba. Uma abaVERTICAL_LISTempilha 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 abaGRIDsempre organiza seus widgets como cartões em uma grade de 12 colunas. Um widgetCANVASnã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
layoutModeexplicitamente. Omití-lo faz com que você obtenhaVERTICAL_LISTem umaSTANDALONE_PAGEeGRIDem todos os outros casos, o que raramente é o que você deseja em uma página de registro. - Cada
widgetdentro de uma aba pode renderizar um front component, uma lista de relações ou outros tipos de widget nativos. - Um widget
FRONT_COMPONENTpode definirheaderCommandMenuItemUniversalIdentifierscomo 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. positionnas abas controla sua ordem. Use valores mais altos (por exemplo, 50) para colocar abas personalizadas após as nativas.
Widgets de campos
Um widgetFIELD renderiza um campo do registro. Para campos de relação, ele também pode incorporar uma lista de registros relacionados:
fieldMetadataIdrecebe o identificador universal de um campo no objeto do layout.fieldDisplayModeé um dentre'FIELD','CARD','EDITOR','VIEW'ou'TABLE'.TABLEincorpora 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 requerfieldDisplayMode: '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 suastabse seuswidgets, para que você possa fazer referência a qualquer nível:Um alias abreviadoSTANDARD_PAGE_LAYOUTtambém está disponível: -
widgetstêm escopo apenas para esta aba — eles referenciam front components, visualizações etc., exatamente como widgets definidos inline emdefinePageLayout. -
positioncontrola 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
definePageLayoutquando você quiser apenas adicionar a um layout existente. UsedefinePageLayoutquando você possuir todo o layout.