検索可能アコーディオンSearchableAccordionExperimental
検索入力、カテゴリ、件数表示、該当なし表示を組み合わせたアコーディオンです。
プレビュー
状態とバリエーション
カテゴリ付き
検索語とカテゴリタブで FAQ やヘルプ項目を絞り込みます。
ヘルプ項目
検索語とカテゴリで項目を絞り込みます。
3 / 3 件を表示すべて
検索のみ
カテゴリが不要な短い一覧では検索だけを表示します。
3 / 3 件を表示All
該当なし
一致する項目がない場合は EmptyState と条件クリアを表示します。
0 / 3 件を表示すべて
一致する項目がありません
検索語やカテゴリを変更してください。
プロパティ
表は横にスクロールできます
| プロパティ | 型 | 初期値 | 説明 |
|---|---|---|---|
| items | SearchableAccordionItem[] | - | 表示する accordion 項目です。検索用に category / keywords / searchText を渡せます。 |
| searchValue / defaultSearchValue / onSearchValueChange | string / (value) => void | - | 検索語の controlled / uncontrolled API です。 |
| categoryValue / defaultCategoryValue / onCategoryValueChange | string / (value) => void | - | カテゴリタブの controlled / uncontrolled API です。 |
| openValue / defaultOpenValue / onOpenValueChange | string[] / (value) => void | - | 開いている項目の controlled / uncontrolled API です。 |
| labels | SearchableAccordionLabels | - | 検索、件数、該当なし、全展開操作の文言です。 |
使い方
import * as React from "react";
import { SearchableAccordion, type SearchableAccordionItem } from "@gunjo/ui";
const items: SearchableAccordionItem[] = [
{
"id": "billing",
"title": "請求先情報はどこで変更できますか?",
"body": "ワークスペース設定の請求から、請求先、支払い方法、請求メールの送信先を変更できます。",
"category": "account",
"keywords": [
"請求",
"支払い",
"メール"
]
},
{
"id": "invites",
"title": "メンバー招待が届かない場合は?",
"body": "迷惑メール、招待リンクの有効期限、許可ドメインを確認してください。",
"category": "team",
"keywords": [
"招待",
"メンバー",
"チーム"
]
},
{
"id": "mfa",
"title": "二要素認証を必須にできますか?",
"body": "管理者はセキュリティ設定から、全メンバーに二要素認証を必須化できます。",
"category": "security",
"keywords": [
"2FA",
"認証",
"セキュリティ"
]
}
];
export function HelpAccordion() {
const [searchValue, setSearchValue] = React.useState("");
return (
<SearchableAccordion
items={items}
searchValue={searchValue}
onSearchValueChange={setSearchValue}
categories={[
{ id: "account", label: "アカウント" },
{ id: "team", label: "チーム" },
{ id: "security", label: "セキュリティ" },
]}
labels={{
searchPlaceholder: "項目を検索...",
clearSearchLabel: "検索語を消去",
allCategoryLabel: "すべて",
resultCountLabel: (visible, total) =>
`${visible} / ${total} 件を表示`,
clearFiltersLabel: "条件をクリア",
emptyTitle: "一致する項目がありません",
emptyDescription: "検索語やカテゴリを変更してください。",
}}
/>
);
}