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を使用します。VERTICAL_LISTタブでは、1 つのウィジェットのみの場合はそのウィジェットがフルブリードでタブ全体に表示され、複数のウィジェットがある場合はカードとして積み重なります。GRIDタブでは、ウィジェットの数に関係なく、常に 12 列グリッド上でカードとして配置されます。そのため、1 つのウィジェットにページ全体を使わせたい場合はVERTICAL_LISTを選択します。 layoutModeを明示的に設定します。layoutModeを省略すると、STANDALONE_PAGEではVERTICAL_LIST、それ以外ではGRIDが適用されますが、これはレコードページで望ましい動作であることはほとんどありません。- タブ内の各
widgetは、front component、リレーションリスト、その他のビルトインウィジェットタイプをレンダリングできます。 - タブの
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を使用してください。