TreeSelectは、階層データから選択するためのフォームコンポーネントです。
import { TreeSelect } from 'primereact/treeselect';
TreeSelectは、valueプロパティとonChangeプロパティ、そしてoptionsコレクションを使用して制御コンポーネントとして使用されます。内部的にはTreeコンポーネントが使用されているため、オプションモデルはTreeNode APIに基づいています。
シングルセレクションモードでは、値のバインドはノードのkey値である必要があります。
<TreeSelect value={selectedNodeKey} onChange={(e) => setSelectedNodeKey(e.value)} options={nodes}
className="md:w-20rem w-full" placeholder="Select Item"></TreeSelect>
selectionModeをmultipleに設定することで、複数のノードを選択できます。複数選択モードでは、デフォルトでmetaキーを押す(例:⌘)必要がありますが、metaKeySelectionプロパティを無効にすることで設定できます。タッチ対応デバイスでは、TreeSelectは常にmetaキーを無視することに注意してください。
複数選択モードでは、値のバインドはキーと値のペアである必要があります。キーはノードキー、値は選択を示すブール値です。
{
'0-0': true,
'0-1-0': true
}
<TreeSelect value={selectedNodeKeys} onChange={(e) => setSelectedNodeKeys(e.value)} options={nodes} metaKeySelection={false}
className="md:w-20rem w-full" selectionMode="multiple" placeholder="Select Items"></TreeSelect>
selectionModeをcheckboxとして設定することで、チェックボックスを使用して複数のノードを選択できます。
チェックボックス選択モードでは、値のバインドはキーと値のペアである必要があります。キーはノードキー、値はノードの状態を表すcheckedとpartialCheckedプロパティを持つオブジェクトです。
{
'0-0': {
partialChecked: false,
checked: true
}
}
<TreeSelect value={selectedNodeKeys} onChange={(e) => setSelectedNodeKeys(e.value)} options={nodes} metaKeySelection={false}
className="md:w-20rem w-full" selectionMode="checkbox" display="chip" placeholder="Select Items"></TreeSelect>
filterプロパティを追加することでフィルタリングを有効にできます。デフォルトでは、ノードのlabelプロパティがテキストフィールドの値と比較されます。検索時に使用するフィールドをカスタマイズするには、 filterByプロパティを定義します。さらに、filterModeはフィルタリング戦略を指定します。lenientモードでは、クエリがノードと一致すると、ノードの子はさらに検索されません。一方、strictモードでは、クエリがノードと一致すると、すべての子孫でフィルタリングが続けられます。
<TreeSelect value={selectedNodeKey} onChange={(e) => setSelectedNodeKey(e.value)} options={nodes}
filter className="md:w-20rem w-full" placeholder="Select Item"></TreeSelect>
showClearが有効になっている場合、TreeSelectをリセットするためのクリアアイコンが追加されます。
<TreeSelect value={selectedNodeKey} onChange={(e) => setSelectedNodeKey(e.value)} options={nodes}
className="md:w-20rem w-full" placeholder="Select Item"></TreeSelect>
ノードの展開状態は、expandedKeysプロパティとonToggleプロパティを使用してプログラムで管理されます。
<TreeSelect value={selectedNodeKey} onChange={(e) => setSelectedNodeKey(e.value)} options={nodes}
className="md:w-20rem w-full" placeholder="Select Item"
expandedKeys={expandedKeys} onToggle={(e) => setExpandedKeys(e.value)} panelHeaderTemplate={headerTemplate}></TreeSelect>
フォーカスされたときに、入力フィールドの上にフロートラベルが表示されます。FloatLabelのドキュメントで詳細を確認してください。
<FloatLabel className="w-full md:w-20rem">
<TreeSelect inputId="treeselect" value={selectedNodeKey} onChange={(e) => setSelectedNodeKey(e.value)} options={nodes}
className="w-full"></TreeSelect>
<label htmlFor="treeselect">TreeSelect</label>
</FloatLabel>
variantプロパティをfilledとして指定すると、デフォルトのoutlinedスタイルよりも視覚的に強調されたコンポーネントが表示されます。
<TreeSelect variant="filled" value={selectedNodeKey} onChange={(e) => setSelectedNodeKey(e.value)} options={nodes}
className="md:w-20rem w-full" placeholder="Select Item"></TreeSelect>
invalidプロパティを使用して無効な状態を表示し、検証エラーを示します。フォーム検証ライブラリと統合する際に使用できます。
<TreeSelect invalid value={selectedNodeKey} onChange={(e) => setSelectedNodeKey(e.value)} options={nodes}
className="md:w-20rem w-full" placeholder="Select Item"></TreeSelect>
disabledが存在する場合、要素は編集およびフォーカスできません。
<TreeSelect disabled placeholder="Select Item" className="md:w-20rem w-full" />
コンポーネントの説明となる値は、aria-labelledbyまたはaria-labelプロパティで指定できます。treeselect要素は、aria-haspopup属性とaria-expanded属性に加えて、comboboxロールを持ちます。comboboxとポップアップ間の関係は、ポップアップのIDを参照するaria-controlsによって作成されます。
ポップアップリストは、combobox要素のaria-controls属性を参照するIDを持ち、ロールとしてtreeを使用します。各リストアイテムは、aria-label、aria-selectedおよびaria-expanded属性とともにtreeitemロールを持ちます。チェックボックス選択では、aria-selectedの代わりにaria-checkedが使用されます。チェックボックスとトグルアイコンは、スクリーンリーダーから非表示になります。代わりに、treeitemロールと属性を持つ親要素が、リーダーとキーボードサポートに使用されます。treenodeのコンテナ要素は、groupロールを持ちます。aria-setsize、aria-posinset、aria-level属性は暗黙的に計算され、各treeitemに追加されます。
フィルタリングが有効になっている場合、filterInputPropsを定義して、aria-*プロパティを入力要素に与えることができます。
<span id="dd1">Options</span>
<TreeSelect aria-labelledby="dd1" />
<TreeSelect aria-label="Options" />
キー | 機能 |
---|---|
tab | フォーカスをtreeselect要素に移動します。 |
space | ポップアップを開き、視覚的なフォーカスを選択されたtreenodeに移動します。選択されていない場合、最初のtreenodeにフォーカスが移動します。 |
下矢印 | ポップアップを開き、視覚的なフォーカスを選択されたオプションに移動します。選択されていない場合、最初のオプションにフォーカスが移動します。 |
キー | 機能 |
---|---|
tab | ポップアップ内の次のフォーカス可能な要素にフォーカスを移動します。フォーカス可能な要素がない場合、最初のフォーカス可能な要素にフォーカスが移動します。 |
shift + tab | ポップアップ内の前のフォーカス可能な要素にフォーカスを移動します。フォーカス可能な要素がない場合、最後のフォーカス可能な要素にフォーカスが移動します。 |
enter | フォーカスされたオプションを選択し、選択モードがシングルであればポップアップを閉じます。 |
space | フォーカスされたオプションを選択し、選択モードがシングルであればポップアップを閉じます。 |
escape | ポップアップを閉じ、フォーカスをtreeselect要素に移動します。 |
下矢印 | 次のtreenodeにフォーカスを移動します。 |
上矢印 | 前のtreenodeにフォーカスを移動します。 |
右矢印 | ノードが閉じている場合、ノードを開きます。それ以外の場合は、最初のノードにフォーカスを移動します。 |
左矢印 | ノードが開いている場合、ノードを閉じます。それ以外の場合は、親ノードにフォーカスを移動します。 |
キー | 機能 |
---|---|
enter | ポップアップを閉じ、フォーカスをtreeselect要素に移動します。 |
escape | ポップアップを閉じ、フォーカスをtreeselect要素に移動します。 |
キー | 機能 |
---|---|
enter | ポップアップを閉じ、フォーカスをtreeselect要素に移動します。 |
space | ポップアップを閉じ、フォーカスをtreeselect要素に移動します。 |
escape | ポップアップを閉じ、フォーカスをtreeselect要素に移動します。 |