メインコンテンツへスキップ
コマンドメニュー項目は、ユーザーとフロントコンポーネントをつなぐブリッジです。 これは Twenty のコマンドメニュー (Cmd+K) にコンポーネントを登録し、必要に応じて、ページ右上のピン留めされたクイックアクションボタンとしても登録します。
src/command-menu-items/open-dashboard.command-menu-item.ts
import { defineCommandMenuItem } from 'twenty-sdk/define';

export default defineCommandMenuItem({
  universalIdentifier: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
  label: 'Open Dashboard',
  shortLabel: 'Dashboard',
  icon: 'IconLayoutDashboard',
  isPinned: true,
  availabilityType: 'GLOBAL',
  frontComponentUniversalIdentifier: '74c526eb-cb68-4cf7-b05c-0dd8c288d948',
});

設定フィールド

フィールド必須説明
universalIdentifierはいコマンドの安定した一意の ID
labelはいコマンドメニュー(Cmd+K)に表示されるフルラベル
frontComponentUniversalIdentifierはいこのコマンドが開くフロントコンポーネントの universalIdentifier
shortLabelいいえピン留めされたクイックアクションボタンに表示される短いラベル
iconいいえラベルの横に表示するアイコン名(例:‘IconBolt’、‘IconSend’)
isPinnedいいえtrue の場合、ページ右上にクイックアクションボタンとして表示します
availabilityTypeいいえコマンドの表示場所を制御します:‘GLOBAL’(常に利用可能)、‘RECORD_SELECTION’(レコード選択時のみ)、または ‘FALLBACK’(他のコマンドが一致しないときに表示)
availabilityObjectUniversalIdentifierいいえコマンドを特定のオブジェクトタイプのページに制限します(例:Company レコードのみ)
conditionalAvailabilityExpressionいいえ表示可否を動的に制御するブール式(下記参照)

ヘッドレスコマンド

ヘッドレスフロントコンポーネントとペアになったコマンドメニュー項目は、ワンクリックアクション(コードの実行、ナビゲーション、確認と実行)を提供するための一般的な方法です。 Front Components のページでは、アクション実行後にアンマウントするパターンを処理する SDK Command componentsCommandCommandLinkCommandModalCommandOpenSidePanelPage)について説明しています。 一般的なフロー:
src/front-components/run-action.tsx
import { defineFrontComponent } from 'twenty-sdk/define';
import { Command } from 'twenty-sdk/command';
import { CoreApiClient } from 'twenty-sdk/clients';

const RunAction = () => {
  const execute = async () => {
    const client = new CoreApiClient();
    await client.mutation({
      createTask: {
        __args: { data: { title: 'Created by my app' } },
        id: true,
      },
    });
  };

  return <Command execute={execute} />;
};

export default defineFrontComponent({
  universalIdentifier: 'e5f6a7b8-c9d0-1234-efab-345678901234',
  name: 'run-action',
  description: 'Creates a task from the command menu',
  component: RunAction,
  isHeadless: true,
});
src/command-menu-items/run-action.command-menu-item.ts
import { defineCommandMenuItem } from 'twenty-sdk/define';

export default defineCommandMenuItem({
  universalIdentifier: 'f6a7b8c9-d0e1-2345-fabc-456789012345',
  label: 'Run my action',
  icon: 'IconPlayerPlay',
  frontComponentUniversalIdentifier: 'e5f6a7b8-c9d0-1234-efab-345678901234',
});

条件付き可用性式

conditionalAvailabilityExpression フィールドにより、現在のページコンテキストに基づいてコマンドの表示タイミングを制御できます。 式を構築するために、twenty-sdk から型付きの変数と演算子をインポートします:
src/command-menu-items/bulk-update.command-menu-item.ts
import {
  defineCommandMenuItem,
  objectPermissions,
  everyEquals,
} from 'twenty-sdk/define';

export default defineCommandMenuItem({
  universalIdentifier: '...',
  label: 'Bulk Update',
  availabilityType: 'RECORD_SELECTION',
  frontComponentUniversalIdentifier: '...',
  conditionalAvailabilityExpression: everyEquals(
    objectPermissions,
    'canUpdateObjectRecords',
    true,
  ),
});
RECORD_SELECTION は、すでに空ではない選択状態を意味します。特定の件数を示す場合にのみ numberOfSelectedRecords を使用してください(例: >= 2)。

コンテキスト変数

これらは現在のページの状態を表します:
変数タイプ説明
pageTypestring現在のページタイプ(例:‘RecordIndexPage’、‘RecordShowPage’)
isInSidePanelbooleanコンポーネントがサイドパネル内でレンダリングされているかどうか
numberOfSelectedRecordsnumber現在選択されているレコード数
isSelectAllboolean「すべて選択」が有効かどうか
selectedRecordsarray選択されたレコードオブジェクト
favoriteRecordIdsarrayお気に入り登録されたレコードの ID
objectPermissionsobject現在のオブジェクトタイプの権限
targetObjectReadPermissionsobject対象オブジェクトの読み取り権限
targetObjectWritePermissionsobject対象オブジェクトの書き込み権限
featureFlagsobject有効な機能フラグ
objectMetadataItemobject現在のオブジェクトタイプのメタデータ
hasAnySoftDeleteFilterOnViewboolean現在のビューにソフトデリートフィルターがあるかどうか

演算子

変数を組み合わせてブール式を作成します:
演算子説明
isDefined(value)値が null/undefined でない場合は true
isNonEmptyString(value)値が空でない文字列の場合は true
includes(array, value)配列に値が含まれている場合は true
includesEvery(array, prop, value)すべての要素のプロパティに値が含まれている場合は true
every(array, prop)すべての要素でそのプロパティが truthy の場合は true
everyDefined(array, prop)すべての要素でそのプロパティが定義されている場合は true
everyEquals(array, prop, value)すべての要素でそのプロパティが値に等しい場合は true
some(array, prop)少なくとも 1 つの要素でそのプロパティが truthy の場合は true
someDefined(array, prop)少なくとも 1 つの要素でそのプロパティが定義されている場合は true
someEquals(array, prop, value)少なくとも 1 つの要素でそのプロパティが値に等しい場合は true
someNonEmptyString(array, prop)少なくとも 1 つの要素でそのプロパティが空でない文字列である場合は true
none(array, prop)すべての要素でそのプロパティが falsy の場合は true
noneDefined(array, prop)すべての要素でそのプロパティが未定義の場合は true
noneEquals(array, prop, value)どの要素でもそのプロパティが値に等しくない場合は true