Panoramica
Un layout di pagina controlla come è organizzata la pagina di dettaglio di un record: quali schede compaiono e quali widget contengono. UsadefinePageLayout() per dichiarare un layout per un oggetto di tua proprietà, definePageLayoutTab() per aggiungere una singola scheda a un layout già esistente (tuo o uno standard di Twenty one), oppure definePageLayoutWidget() per aggiungere un singolo widget a una scheda già esistente.
definePageLayout
Usa questo quando possiedi l’intera pagina di dettaglio — in genere per un oggetto personalizzato che hai definito tu stesso.src/page-layouts/example-record-page-layout.ts
Punti chiave
typeè uno tra'RECORD_INDEX','RECORD_PAGE','DASHBOARD','STANDALONE_PAGE'o'RECORD_FORM'. Usa'RECORD_PAGE'per personalizzare la vista dei dettagli di un oggetto specifico.'RECORD_FORM'descrive il modulo di creazione di un oggetto e contiene widgetFORM_FIELD, ognuno dei quali visualizza un singolo campo. Twenty fornisce un layout'RECORD_FORM'per oggetto con un widget per ogni campo creabile, quindi raramente è necessario crearne uno; non esegue ancora il rendering dei moduli di record.objectUniversalIdentifierspecifica a quale oggetto si applica questo layout.- Ogni
tabdefinisce una sezione della pagina contitle,positionelayoutMode: usaVERTICAL_LISTper le pagine dei record e le pagine autonome, eGRIDper le dashboard. Una tabVERTICAL_LISTdispone i widget verticalmente. I widget integrati che gestiscono il proprio scorrimento, come timeline, file, note, attività, flussi di lavoro e conversazioni, riempiono un’area di visualizzazione per impostazione predefinita; i campi, i componenti front, i grafici e altri widget con adattamento al contenuto vengono visualizzati all’altezza del loro contenuto o all’altezza configurata. Una tabGRIDdispone sempre i widget come schede su una griglia di 12 colonne. - I widget in una tab
VERTICAL_LISTereditano la modalità di layout della tab e il loro ordine deriva dall’arraywidgets. Non impostareposition; imposta l’opzionaleheightBehaviordi primo livello su'TAB_VIEWPORT'quando un widget deve occupare una viewport completa della tab e gestire il proprio scorrimento, oppure su'FIT_CONTENT'per sovrascrivere un’impostazione predefinita integrata a tutta altezza. I widget precedenti non riducono tale altezza. È consentito un solo widgetTAB_VIEWPORTattivo per tab e deve trovarsi dopo i widget fit-content. - I widget
GRIDcontinuano a utilizzareposition: { layoutMode: PageLayoutTabLayoutMode.GRID, row, column, rowSpan, columnSpan }.heightBehaviordi livello superiore è valido solo per le schedeVERTICAL_LIST; utilizzarlo conGRIDoCANVASgenera un errore di convalida. - Le schede Canvas esistenti e le posizioni esplicite dei widget rimangono supportate. L’SDK mostra avvisi di deprecazione con le sostituzioni consigliate.
- Imposta esplicitamente
layoutMode. Ometterlo impostaVERTICAL_LISTsu unaSTANDALONE_PAGEeGRIDaltrove, il che raramente è ciò che vuoi per la pagina di un record. - Ogni
widgetall’interno di una scheda può renderizzare un front component, un elenco di relazioni o altri tipi di widget integrati. - Un widget
FRONT_COMPONENTpuò impostareheaderCommandMenuItemUniversalIdentifierssu un array ordinato di identificatori universali degli elementi del menu di comando della stessa app. Queste azioni vengono visualizzate come pulsanti con icona nell’intestazione della scheda del widget e mantengono la relativa disponibilità a livello di comando e i controlli delle autorizzazioni. Gli identificatori devono essere univoci e devono essere risolti quando l’app è installata. - Un widget
IFRAMEpuò utilizzare il microfono o la videocamera per i siti web approvati tramiterequestedIframeMediaPermissionsdell’app proprietaria. I membri selezionano Abilita e approvano una conferma nativa del browser che mostra l’app, l’origine del sito web e l’accesso richiesto al microfono o alla videocamera prima che inizi l’accesso. Le approvazioni di sicurezza dell’area di lavoro e le autorizzazioni di altre app non si applicano ai widget definiti dall’app. positionsulle schede controlla il loro ordine. Usa valori più alti (ad es., 50) per posizionare le schede personalizzate dopo quelle integrate.twenty app pullriscrive i layout di pagina con le relative schede e widget inclusi inline. Un widget che l’esportazione non può ancora includere, ad esempio uno che mostra il componente front della tua app o uno del tipoVIEWdeprecato, viene segnalato da pull anziché scritto; consulta ciò che pull non scrive.
Widget dei campi
Un widgetFIELD esegue il rendering di un campo del record corrente. Per i campi di relazione, può anche incorporare una vista dei record correlati al record corrente.
Per incorporare una vista che non è limitata al record corrente, usa un widget della tabella dei record.
fieldMetadataIdaccetta l’identificatore universale di un campo sull’oggetto del layout.fieldDisplayModepuò essere uno tra'FIELD','CARD','EDITOR','VIEW'o'TABLE'.TABLEincorpora una vista che elenca i record di un campo di relazione uno-a-molti.isUIEditablesi applica ai campi di relazione in modalità di visualizzazioneTABLE. Per impostazione predefinita ètrue; impostalo sufalseper impedire la modifica dei record dalla tabella incorporata o dal kanban.nestedRelationFieldMetadataIdè facoltativo e accetta l’identificatore universale di un campo di relazione uno-a-molti sull’oggetto di destinazione della relazione, per elencare i record a due salti di relazione di distanza (ad es. una pagina Company che elenca le opportunità delle persone dell’azienda, o una pagina Person che elenca le opportunità dell’azienda della persona). Il primo salto può essere un campo di relazione uno-a-molti o molti-a-uno, il secondo deve essere uno-a-molti (le relazioni di giunzione non sono supportate) e richiedefieldDisplayMode: 'TABLE'— combinarlo con qualsiasi altra modalità di visualizzazione genera un errore di convalida, poiché un widget annidato viene sempre renderizzato come una vista incorporata.
Widget della tabella dei record
Un widgetRECORD_TABLE incorpora una vista salvata in un dashboard, in una pagina del record o in una pagina autonoma. La vista salvata determina i record, i campi, i filtri, gli ordinamenti e il layout mostrati nel widget.
viewUniversalIdentifieridentifica la vista da visualizzare.recordLimitè facoltativo e limita il numero di record visualizzati dal widget.isUIEditablesi applica alle viste tabella e kanban. Abilita la modifica delle celle della tabella o la modifica, lo spostamento e la creazione delle schede kanban. Per impostazione predefinita ètruenei layoutRECORD_PAGEefalsenegli altri layout.isUIEditablecontrolla solo le azioni dell’interfaccia utente. Le autorizzazioni dei record continuano ad applicarsi e le impostazioni della vista rimangono modificabili solo nell’editor del layout di pagina.
definePageLayoutTab
Usa questo quando vuoi solo aggiungere una scheda a un layout esistente — per esempio, una scheda di analisi sulla pagina Company standard, o una scheda di riepilogo AI collegata al layout del tuo oggetto.src/page-layouts/example-extra-tab.ts
Punti chiave
-
pageLayoutUniversalIdentifierè obbligatorio e deve puntare a un layout di pagina che esiste già al momento dell’installazione — oppure un layout standard di Twenty o uno definito dalla tua app. I riferimenti tra app a layout di proprietà di un’altra app installata non sono attualmente supportati. Quando il layout di pagina padre manca, l’installazione non va a buon fine e restituisce un chiaro errore di validazione. -
Per i layout standard di Twenty, importa gli identificatori da
twenty-sdk/define:Ogni voce di layout espone anche i propritabse i relativiwidgets, così puoi fare riferimento a qualsiasi livello:È disponibile anche un alias breveSTANDARD_PAGE_LAYOUT: -
I
widgetssono limitati solo a questa scheda — fanno riferimento a front components, viste, ecc. esattamente come i widget definiti inline indefinePageLayout. -
positioncontrolla l’ordinamento rispetto alle schede esistenti nel layout di destinazione. Scegli un valore che collochi la tua scheda dove desideri rispetto alle schede integrate. -
Usa questo invece di
definePageLayoutquando vuoi solo aggiungere a un layout esistente. UsadefinePageLayoutquando possiedi l’intero layout. -
twenty app pullriscrive una scheda aggiunta a un layout di pagina di cui non sei proprietario come filedefinePageLayoutTab(), con i relativi widget inclusi inline, soggetti agli stessi limiti dei widget di undefinePageLayout().
definePageLayoutWidget
Usa questa opzione quando vuoi solo aggiungere un widget a una scheda già esistente, ad esempio un componente front nella scheda Home della pagina Company standard o un grafico nella scheda Home della pagina del record del tuo oggetto.src/page-layout-widgets/example-home-widget.ts
Punti chiave
-
pageLayoutTabUniversalIdentifierè obbligatorio e deve puntare a una scheda già esistente al momento dell’installazione: una scheda Twenty standard (STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.\<object>RecordPage.tabs.\<tab>.universalIdentifier), una scheda di uno dei tuoi layout o una scheda della pagina del record che Twenty genera per uno dei tuoi oggetti. Le schede generate hanno identificatori deterministici, quindi puoi calcolarli: -
positionè obbligatorio, poiché la scheda non fa parte del tuo manifest e la sua modalità di layout non può essere dedotta. Abbina la modalità di layout della scheda: le schede della pagina del record sono elenchi verticali, quindi usa{ layoutMode: PageLayoutTabLayoutMode.VERTICAL_LIST, index }con un indice superiore a quello dei widget integrati (il widget Fields è a 0). -
Per un elenco verticale, imposta
position.heightBehaviorsuPageLayoutWidgetVerticalListHeightBehavior.TAB_VIEWPORTper riempire la viewport di una scheda, oppure suPageLayoutWidgetVerticalListHeightBehavior.FIT_CONTENTper utilizzare il contenuto o l’altezza configurata del widget. Importa questa enum datwenty-sdk/define, come nell’esempio precedente. Se omesso, il widget mantiene il valore predefinito integrato. Solo un widget attivo per scheda può riempire la viewport e il suo indice deve posizionarlo dopo tutti i widget con adattamento al contenuto.heightBehaviornon è supportato nelle posizioniGRIDoCANVAS. -
configurationfunziona esattamente come un widget definito inline indefinePageLayoutodefinePageLayoutTab: fa riferimento a componenti front, viste, campi e così via. -
Usa questa opzione invece di
definePageLayoutTabquando la scheda esiste già e vuoi solo inserirvi un widget. UsadefinePageLayoutTabquando vuoi una scheda tutta tua. -
twenty app pullriscrive un widget aggiunto a una scheda di cui non sei proprietario come filedefinePageLayoutWidget(), soggetto agli stessi limiti dei widget di undefinePageLayout().