コンテンツにスキップ

フロントエンド共通コンポーネント

このドキュメントでは、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" などでパディングを微調整してください。