フロントエンド共通コンポーネント¶
このドキュメントでは、Storefront で使用される共通コンポーネントの仕様と使用ガイドラインをまとめます。
EmptyState¶
データが空の状態(お気に入りがない、検索結果がゼロ、カートが空など)を表示するための共通コンポーネントです。
- ファイル:
apps/storefront/src/components/common/empty-state.tsx - Storybook:
Components/Common/EmptyState
プロパティ (Props)¶
| プロパティ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
icon |
LucideIcon |
- | 表示するアイコン(Lucide React) |
title |
string |
- | メインの見出しテキスト |
description |
ReactNode |
- | 説明文(文字列またはJSX) |
action |
ReactNode |
- | アクションボタンなどのJSX |
variant |
"default" \| "card" |
"default" |
表示スタイル(下記参照) |
className |
string |
- | 追加のCSSクラス |
testId |
string |
- | E2Eテスト用の data-testid |
バリエーション¶
1. default (デフォルト)¶
アイコンを中心に配置し、上下に広めの余白(py-16)を持つスタイルです。マイページのお気に入り一覧や注文履歴など、ページ全体のメインコンテンツが空の場合に適しています。
使用例:
<EmptyState
icon={Heart}
title="お気に入り商品はまだありません"
description="商品ページでハートアイコンをクリックしてお気に入りに追加できます"
action={<Button>商品を探す</Button>}
/>
2. card (カード形式)¶
枠線(border)と背景色(bg-card)を持ち、比較的コンパクトなスタイルです。検索結果リストの途中や、サイドバー、特定のセクション内での「該当なし」表示に適しています。
使用例:
<EmptyState
variant="card"
title="該当する商品が見つかりませんでした"
description="検索条件を変更して再度お試しください。"
/>
導入済み箇所¶
- お気に入り一覧:
favorites-page-content.tsx - 商品一覧(検索結果):
products-page-content.tsx - カートページ:
cart-page-content.tsx - カートドロワー:
cart-sheet.tsx - 注文履歴:
account-order-list.tsx - 登録済み配送先:
account-addresses.tsx - キャンペーン一覧:
campaigns-page-content.tsx - 記事一覧:
articles-page-content.tsx - お知らせ一覧:
announcements-page-content.tsx
実装上の注意点¶
- E2Eテストの安定性を維持するため、既存の
data-testidを継承して使用してください。 variant="card"の場合、必要に応じてclassName="p-6"などでパディングを微調整してください。