definePageLayout() を使用し、既に存在するレイアウト(自分のもの、または標準の Twenty のレイアウト)に単一のタブを追加するには definePageLayoutTab() を使用します。
definePageLayout
自分が詳細ページ全体を所有している場合に使用します。通常は、自分で定義したカスタムオブジェクトに対して使用します。src/page-layouts/example-record-page-layout.ts
主なポイント
typeは'RECORD_INDEX'、'RECORD_PAGE'、'DASHBOARD'、'STANDALONE_PAGE'のいずれかです。 特定のオブジェクトの詳細ビューをカスタマイズするには'RECORD_PAGE'を使用します。objectUniversalIdentifierは、このレイアウトを適用するオブジェクトを指定します。- 各
tabは、title、position、layoutModeを持つページのセクションを定義します。レコードページおよびスタンドアロンページにはVERTICAL_LIST、ダッシュボードにはGRID、タブのビューポートを埋める単一のウィジェットにはCANVASを使用します。VERTICAL_LISTタブでは、ウィジェットが縦方向に積み重ねられます。 タイムライン、ファイル、メモ、タスク、ワークフローなど、独自のスクロールを管理する組み込みウィジェットは 1 つのビューポートを埋めます。フィールド、フロントコンポーネント、グラフ、その他のコンテンツに合わせたウィジェットは、そのコンテンツの高さまたは設定された高さでレンダリングされます。GRIDタブでは、ウィジェットは常に 12 列グリッド上のカードとして配置されます。CANVASウィジェットには明示的な位置がありません。キャンバスタブに複数のウィジェットが含まれる場合、それらはビューポート全体を埋めるのではなく、コンテンツの高さでレンダリングされます。 layoutModeを明示的に設定します。layoutModeを省略すると、STANDALONE_PAGEではVERTICAL_LIST、それ以外ではGRIDが適用されますが、これはレコードページで望ましい動作であることはほとんどありません。- タブ内の各
widgetは、front component、リレーションリスト、その他のビルトインウィジェットタイプをレンダリングできます。 FRONT_COMPONENTウィジェットでは、同じアプリのコマンドメニュー項目ユニバーサル識別子を順序付き配列としてheaderCommandMenuItemUniversalIdentifiersに設定できます。 これらのアクションはウィジェットカードヘッダーにアイコンボタンとして表示され、コマンドレベルの可用性チェックと権限チェックが維持されます。 識別子は一意である必要があり、アプリのインストール時に解決される必要があります。- タブの
positionは表示順を制御します。 組み込みタブの後にカスタムタブを配置するには、より大きな値(例:50)を使用します。
フィールド ウィジェット
FIELD ウィジェットは、レコードの 1 つのフィールドをレンダリングします。 リレーションフィールドの場合、関連レコードの一覧を埋め込むこともできます。
fieldMetadataIdは、レイアウトのオブジェクト上のフィールドのユニバーサル識別子を受け取ります。fieldDisplayModeは'FIELD'、'CARD'、'EDITOR'、'VIEW'、'TABLE'のいずれかです。TABLEは、1 対多のリレーションフィールドのレコードを一覧表示するビューを埋め込みます。nestedRelationFieldMetadataIdは任意で、リレーション先オブジェクト上の 1 対多リレーションフィールドのユニバーサル識別子を受け取り、2 ホップ先のリレーションにあるレコードを一覧表示するために使用されます(例: 会社ページでその会社の担当者が持つ商談を一覧表示する、または人物ページでその人物の所属する会社の商談を一覧表示する、など)。 最初のホップは 1 対多または多対 1 のリレーションフィールドのどちらでもかまいませんが、2 つ目は必ず 1 対多でなければなりません(ジャンクションリレーションはサポートされません)。また、fieldDisplayMode: 'TABLE'が必須であり、ネストされたウィジェットは常に埋め込みビューとしてレンダリングされるため、これを他の表示モードと組み合わせると検証エラーになります。
definePageLayoutTab
既存のレイアウトにタブを追加したい場合にのみ使用します。たとえば、標準の Company ページにアナリティクスタブを追加する場合や、自分のオブジェクトのレイアウトに AI サマリータブを追加する場合などです。src/page-layouts/example-extra-tab.ts
主なポイント
-
pageLayoutUniversalIdentifierは必須であり、インストール時点ですでに存在するページレイアウトを指している必要があります。標準の Twenty のレイアウト、または自分のアプリで定義したレイアウトのいずれかです。 別のインストール済みアプリが所有するレイアウトへのアプリ間参照は、現時点ではサポートされていません。 親レイアウトが存在しない場合、インストールは明確な検証エラーとともに失敗します。 -
標準の Twenty レイアウトの場合は、
twenty-sdk/defineから識別子を import します:各レイアウトエントリは、そのtabsとそのwidgetsも公開しているため、任意の階層を参照できます:短いエイリアスSTANDARD_PAGE_LAYOUTも利用できます: -
widgetsはこのタブのみにスコープされます。definePageLayout内でインライン定義されたウィジェットとまったく同様に、front components、views などを参照します。 -
positionは、対象のレイアウト上にある既存のタブとの順序を制御します。 組み込みタブとの相対位置が希望どおりになるような値を選択してください。 -
既存のレイアウトに追加だけを行いたい場合は、
definePageLayoutの代わりにこちらを使用してください。 レイアウト全体を自分が所有している場合は、definePageLayoutを使用してください。