Skip to main content
Un layout de pagină controlează modul în care este aranjată pagina de detalii a unei înregistrări: ce file apar și ce widgeturi conțin acestea. Folosește definePageLayout() pentru a declara un layout pentru un obiect pe care îl deții sau definePageLayoutTab() pentru a adăuga o singură filă la un layout care există deja (al tău sau un layout standard Twenty).

definePageLayout

Folosește aceasta atunci când deții întreaga pagină de detalii — de obicei pentru un obiect personalizat pe care l-ai definit chiar tu.
src/page-layouts/example-record-page-layout.ts

Puncte cheie

  • type este unul dintre 'RECORD_INDEX', 'RECORD_PAGE', 'DASHBOARD' sau 'STANDALONE_PAGE'. Folosiți 'RECORD_PAGE' pentru a personaliza vizualizarea de detaliu a unui obiect specific.
  • objectUniversalIdentifier specifică la ce obiect se aplică această machetă.
  • Fiecare tab definește o secțiune a paginii cu un title, position și layoutMode: VERTICAL_LIST pentru paginile de înregistrări și paginile independente, GRID pentru dashboard-uri și CANVAS pentru un singur widget care ar trebui să umple zona de vizualizare a filei. O filă VERTICAL_LIST stivuiește widgeturile pe verticală. Widgeturile încorporate care își gestionează propria derulare, cum ar fi cronologiile, fișierele, notițele, sarcinile și fluxurile de lucru, umplu o zonă de vizualizare; câmpurile, componentele frontale, graficele și alte widgeturi fit-content se redau la înălțimea conținutului sau la înălțimea configurată. O filă GRID își aranjează întotdeauna widgeturile ca carduri pe o grilă cu 12 coloane. Un widget CANVAS nu are o poziție explicită; dacă o filă canvas conține mai multe widgeturi, acestea sunt redate la înălțimea conținutului lor în loc să umple zona de vizualizare.
  • Setează explicit layoutMode. Dacă îl omiți, vei obține VERTICAL_LIST pe un STANDALONE_PAGE și GRID în rest, ceea ce rareori îți dorești pe o pagină de înregistrare.
  • Fiecare widget dintr-o filă poate reda un front component, o listă de relații sau alte tipuri de widgeturi integrate.
  • Un widget FRONT_COMPONENT poate seta headerCommandMenuItemUniversalIdentifiers la o matrice ordonată de identificatori universali ai elementelor de meniu de comandă din aceeași aplicație. Aceste acțiuni apar ca butoane cu pictograme în antetul cardului widgetului și își păstrează verificările de disponibilitate și de permisiuni la nivel de comandă. Identificatorii trebuie să fie unici și trebuie să se rezolve atunci când aplicația este instalată.
  • position pe file le controlează ordinea. Folosește valori mai mari (de ex., 50) pentru a plasa filele personalizate după cele integrate.

Widget-uri Câmp

Un widget FIELD redă un câmp al înregistrării. Pentru câmpurile de relație, acesta poate încorpora și o listă de înregistrări asociate:
  • fieldMetadataId primește identificatorul universal al unui câmp de pe obiectul layout-ului.
  • fieldDisplayMode este unul dintre 'FIELD', 'CARD', 'EDITOR', 'VIEW' sau 'TABLE'. TABLE încorporează o vizualizare care listează înregistrările unui câmp de relație de tip unu-la-mulți.
  • nestedRelationFieldMetadataId este opțional și primește identificatorul universal al unui câmp de relație unu-la-mulți de pe obiectul țintă al relației, pentru a afișa în listă înregistrări aflate la două salturi de relație distanță (de ex., o pagină Company care afișează oportunitățile persoanelor companiei sau o pagină Person care afișează oportunitățile companiei persoanei). Primul salt poate fi un câmp de relație unu-la-mulți sau mulți-la-unu, al doilea trebuie să fie unu-la-mulți (relațiile de tip junction nu sunt acceptate) și necesită fieldDisplayMode: 'TABLE' — combinarea lui cu orice alt mod de afișare reprezintă o eroare de validare, deoarece un widget îmbricat este întotdeauna redat ca o vizualizare încorporată.

definePageLayoutTab

Folosește aceasta atunci când vrei doar să adaugi o filă la un layout existent — de exemplu, o filă de analize pe pagina standard Company sau o filă de rezumat AI atașată layoutului obiectului tău.
src/page-layouts/example-extra-tab.ts

Puncte cheie

  • pageLayoutUniversalIdentifier este obligatoriu și trebuie să indice către un layout de pagină care există deja la momentul instalării — fie un layout standard Twenty, fie unul definit de propria ta aplicație. Referințele cross-app către layouturi deținute de o altă aplicație instalată nu sunt acceptate în prezent. Când lipsește layoutul părinte, instalarea eșuează cu o eroare clară de validare.
  • Pentru layout-urile standard Twenty, importați identificatorii din twenty-sdk/define:
    Fiecare intrare de layout își expune, de asemenea, tabs și widgets, astfel încât puteți face referire la orice nivel:
    Este disponibil și un alias scurt STANDARD_PAGE_LAYOUT:
  • widgets sunt limitate doar la această filă — fac referire la front components, vizualizări etc., exact ca widgeturile definite inline în definePageLayout.
  • position controlează ordonarea în raport cu filele existente din layoutul țintă. Alege o valoare care să plaseze fila ta acolo unde dorești, relativ la filele predefinite.
  • Folosește aceasta în loc de definePageLayout atunci când vrei doar să adaugi la un layout existent. Folosește definePageLayout atunci când deții întregul layout.