Resumen
Un page layout controla cómo se organiza la página de detalle de un registro: qué pestañas aparecen y qué widgets contienen. UsadefinePageLayout() para declarar un diseño para un objeto de tu propiedad, definePageLayoutTab() para añadir una sola pestaña a un diseño que ya existe (tuyo o uno estándar de Twenty), o definePageLayoutWidget() para añadir un solo widget a una pestaña que ya existe.
definePageLayout
Usa esto cuando eres propietario de toda la página de detalle; normalmente para un objeto personalizado que definiste tú mismo.src/page-layouts/example-record-page-layout.ts
Puntos clave
typees uno de'RECORD_INDEX','RECORD_PAGE','DASHBOARD','STANDALONE_PAGE'o'RECORD_FORM'. Use'RECORD_PAGE'para personalizar la vista de detalles de un objeto específico.'RECORD_FORM'describe el formulario de creación de un objeto y contiene widgetsFORM_FIELD, cada uno de los cuales representa un único campo. Twenty proporciona un diseño'RECORD_FORM'por objeto con un widget por campo que se puede crear, por lo que rara vez necesita crear uno; aún no representa formularios de registros.objectUniversalIdentifierespecifica a qué objeto se aplica este diseño.- Cada
tabdefine una sección de la página con untitle,positionylayoutMode: useVERTICAL_LISTpara páginas de registros y páginas independientes, yGRIDpara paneles. Una pestañaVERTICAL_LISTapila los widgets verticalmente. Los widgets integrados que gestionan su propio desplazamiento, como líneas de tiempo, archivos, notas, tareas, flujos de trabajo y conversaciones, ocupan una ventana gráfica de forma predeterminada; los campos, los componentes frontales, los gráficos y otros widgets de ajuste al contenido se representan con la altura de su contenido o la configurada. Una pestañaGRIDsiempre distribuye sus widgets como tarjetas en una cuadrícula de 12 columnas. - Los widgets de una pestaña
VERTICAL_LISTheredan el modo de diseño de la pestaña, y su orden proviene de la matrizwidgets. No establezcaposition; establezca elheightBehavioropcional de nivel superior en'TAB_VIEWPORT'cuando un widget deba ocupar una ventana gráfica completa de la pestaña y gestionar su propio desplazamiento, o en'FIT_CONTENT'para anular un valor predeterminado integrado de altura completa. Los widgets anteriores no reducen esa altura. Solo se permite un widgetTAB_VIEWPORTactivo por pestaña, y debe ir después de los widgets de ajuste al contenido. - Los widgets
GRIDsiguen usandoposition: { layoutMode: PageLayoutTabLayoutMode.GRID, row, column, rowSpan, columnSpan }.heightBehaviorde nivel superior solo es válido para las pestañasVERTICAL_LIST; usarlo conGRIDoCANVASproduce un error de validación. - Las pestañas de Canvas existentes y las posiciones explícitas de los widgets siguen siendo compatibles. El SDK muestra advertencias de desuso con los reemplazos recomendados.
- Establece
layoutModeexplícitamente. Omitirlo te daVERTICAL_LISTen unaSTANDALONE_PAGEyGRIDen todos los demás casos, lo cual rara vez es lo que quieres en una página de registro. - Cada
widgetdentro de una pestaña puede renderizar un componente de frontend, una lista de relaciones u otros tipos de widget integrados. - Un widget
FRONT_COMPONENTpuede establecerheaderCommandMenuItemUniversalIdentifiersen una matriz ordenada de identificadores universales de elementos de menú de comandos de la misma aplicación. Estas acciones aparecen como botones de icono en el encabezado de la tarjeta del widget y conservan sus comprobaciones de disponibilidad y permisos a nivel de comando. Los identificadores deben ser únicos y deben resolverse cuando se instale la aplicación. - Un widget de
IFRAMEpuede usar el micrófono o la cámara en sitios web aprobados medianterequestedIframeMediaPermissionsde la aplicación a la que pertenece. Los miembros seleccionan Habilitar y aprueban una confirmación nativa del navegador que muestra la aplicación, el origen del sitio web y el acceso solicitado al micrófono o a la cámara antes de que comience el acceso. Las aprobaciones de seguridad del espacio de trabajo y las concesiones de otras aplicaciones no se aplican a los widgets definidos por la aplicación. positionen las pestañas controla su orden. Usa valores más altos (p. ej., 50) para colocar pestañas personalizadas después de las integradas.twenty app pullvuelve a escribir los diseños de página con sus pestañas y widgets integrados. Un widget que la exportación todavía no puede incluir, como uno que muestra el propio componente frontal de su aplicación o uno del tipoVIEWobsoleto, se informa mediante pull en lugar de escribirse; consulte lo que pull no escribe.
Widgets de campos
Un widgetFIELD representa un campo del registro actual. Para los campos de relación, también puede incrustar una vista de los registros relacionados con el registro actual.
Para incrustar una vista que no se limite al registro actual, use un widget de tabla de registros.
fieldMetadataIdtoma el identificador universal de un campo en el objeto del layout.fieldDisplayModees uno de'FIELD','CARD','EDITOR','VIEW'o'TABLE'.TABLEincrusta una vista que lista los registros de un campo de relación de uno a muchos.isUIEditablese aplica a los campos de relación en el modo de visualizaciónTABLE. De forma predeterminada, estrue; configúrelo comofalsepara impedir la edición de registros desde la tabla o el kanban incrustados.nestedRelationFieldMetadataIdes opcional y toma el identificador universal de un campo de relación de uno a muchos en el objeto de destino de la relación, para enumerar registros a dos saltos de relación (por ejemplo, una página de Company que enumera las oportunidades de las personas de la compañía, o una página de Person que enumera las oportunidades de la compañía de la persona). El primer salto puede ser un campo de relación de uno a muchos o de muchos a uno, el segundo debe ser de uno a muchos (las relaciones de unión no son compatibles) y requierefieldDisplayMode: 'TABLE'— combinarlo con cualquier otro modo de visualización es un error de validación, ya que un widget anidado siempre se representa como una vista incrustada.
Widgets de tabla de registros
Un widgetRECORD_TABLE incrusta una vista guardada en un panel, una página de registro o una página independiente. La vista guardada determina los registros, campos, filtros, ordenaciones y diseño que se muestran en el widget.
viewUniversalIdentifieridentifica la vista que se mostrará.recordLimites opcional y limita la cantidad de registros que muestra el widget.isUIEditablese aplica a las vistas de tabla y kanban. Habilita la edición de celdas de tabla o la edición, el movimiento y la creación de tarjetas kanban. De forma predeterminada, estrueen los diseñosRECORD_PAGEyfalseen otros diseños.isUIEditablecontrola únicamente las acciones de la interfaz de usuario. Los permisos de los registros siguen aplicándose, y la configuración de la vista solo se puede editar en el editor de diseño de página.
definePageLayoutTab
Usa esto cuando solo quieras agregar una pestaña a un layout existente; por ejemplo, una pestaña de analíticas en la página estándar de Company o una pestaña de resumen de IA añadida al layout de tu propio objeto.src/page-layouts/example-extra-tab.ts
Puntos clave
-
pageLayoutUniversalIdentifieres obligatorio y debe apuntar a un page layout que ya exista en el momento de la instalación, ya sea un layout estándar de Twenty o uno definido por tu propia app. Las referencias entre apps a layouts que pertenecen a otra app instalada no son compatibles hoy en día. Cuando falta el layout padre, la instalación falla con un error de validación claro. -
Para los diseños estándar de Twenty, importa los identificadores desde
twenty-sdk/define:Cada entrada de diseño también expone sustabsy suswidgets, para que puedas hacer referencia a cualquier nivel:También hay disponible un alias cortoSTANDARD_PAGE_LAYOUT: -
widgetsestán limitados solo a esta pestaña: hacen referencia a componentes de frontend, vistas, etc., exactamente igual que los widgets definidos en línea endefinePageLayout. -
positioncontrola el orden con respecto a las pestañas existentes en el diseño de página de destino. Elige un valor que sitúe tu pestaña donde la quieras, en relación con las pestañas integradas. -
Usa esto en lugar de
definePageLayoutcuando solo quieras agregar a un layout existente. UsadefinePageLayoutcuando eres propietario de todo el layout. -
twenty app pullvuelve a escribir una pestaña que añadiste a un diseño de página que no posees como un archivodefinePageLayoutTab(), con sus widgets integrados, bajo los mismos límites que los widgets de undefinePageLayout().
definePageLayoutWidget
Usa esto cuando solo quieras agregar un widget a una pestaña que ya existe; por ejemplo, un front component en la pestaña Inicio de la página estándar de Company o un gráfico en la pestaña Inicio de la página de registro de tu propio objeto.src/page-layout-widgets/example-home-widget.ts
Puntos clave
-
pageLayoutTabUniversalIdentifieres obligatorio y debe apuntar a una pestaña que ya exista en el momento de la instalación: una pestaña estándar de Twenty (STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.\<object>RecordPage.tabs.\<tab>.universalIdentifier), una pestaña de uno de tus propios layouts o una pestaña de la página de registro que Twenty genera para uno de tus objetos. Las pestañas generadas tienen identificadores deterministas, por lo que puedes calcularlos: -
positiones obligatorio, ya que la pestaña no forma parte de tu manifiesto y no se puede inferir su modo de layout. Haz coincidir el modo de layout de la pestaña: las pestañas de las páginas de registro son listas verticales, así que usa{ layoutMode: PageLayoutTabLayoutMode.VERTICAL_LIST, index }con un índice superior al de los widgets integrados (el widget Fields está en 0). -
Para una lista vertical, establezca
position.heightBehaviorenPageLayoutWidgetVerticalListHeightBehavior.TAB_VIEWPORTpara ocupar el área visible de una pestaña, o enPageLayoutWidgetVerticalListHeightBehavior.FIT_CONTENTpara usar el contenido o la altura configurada del widget. Importe esta enumeración desdetwenty-sdk/define, como en el ejemplo anterior. Si se omite, el widget conserva su valor predeterminado integrado. Solo un widget activo por pestaña puede ocupar el área visible, y su índice debe colocarlo después de todos los widgets con ajuste al contenido.heightBehaviorno es compatible con las posicionesGRIDniCANVAS. -
configurationfunciona exactamente como un widget definido en línea endefinePageLayoutodefinePageLayoutTab: hace referencia a front components, vistas, campos, etc. -
Usa esto en lugar de
definePageLayoutTabcuando la pestaña ya exista y solo quieras colocar un widget en ella. UsadefinePageLayoutTabcuando quieras una pestaña propia. -
twenty app pullvuelve a escribir un widget que añadiste a una pestaña que no posees como un archivodefinePageLayoutWidget(), bajo los mismos límites que los widgets de undefinePageLayout().