import React, { useState, useEffect } from 'react'; import { atprotoOAuthService } from '../services/atproto-oauth'; import { Card } from './Card'; import '../styles/CardBox.css'; interface CardBoxProps { userDid: string; } export const CardBox: React.FC = ({ userDid }) => { const [boxData, setBoxData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [showJson, setShowJson] = useState(false); const [isDeleting, setIsDeleting] = useState(false); useEffect(() => { loadBoxData(); }, [userDid]); const loadBoxData = async () => { setLoading(true); setError(null); try { const data = await atprotoOAuthService.getCardsFromBox(); setBoxData(data); } catch (err) { console.error('カードボックス読み込みエラー:', err); setError(err instanceof Error ? err.message : 'カードボックスの読み込みに失敗しました'); } finally { setLoading(false); } }; const handleSaveToBox = async () => { // 現在のカードデータを取得してボックスに保存 // この部分は親コンポーネントから渡すか、APIから取得する必要があります alert('カードボックスへの保存機能は親コンポーネントから実行してください'); }; const handleDeleteBox = async () => { if (!window.confirm('カードボックスを削除してもよろしいですか?\nこの操作は取り消せません。')) { return; } setIsDeleting(true); setError(null); try { await atprotoOAuthService.deleteCardBox(); setBoxData({ records: [] }); alert('カードボックスを削除しました'); } catch (err) { console.error('カードボックス削除エラー:', err); setError(err instanceof Error ? err.message : 'カードボックスの削除に失敗しました'); } finally { setIsDeleting(false); } }; if (loading) { return (
カードボックスを読み込み中...
); } if (error) { return (
エラー: {error}
); } const records = boxData?.records || []; const selfRecord = records.find((record: any) => record.uri.includes('/self')); const cards = selfRecord?.value?.cards || []; return (

📦 atproto カードボックス

{cards.length > 0 && ( )}

📍 URI: at://did:plc:uqzpqmrjnptsxezjx4xuh2mn/ai.card.box/self

{showJson && (

Raw JSON データ:

            {JSON.stringify(boxData, null, 2)}
          
)}

総カード数: {cards.length}枚 {selfRecord?.value?.updated_at && ( <>
最終更新: {new Date(selfRecord.value.updated_at).toLocaleString()} )}

{cards.length > 0 ? ( <>
{cards.map((card: any, index: number) => (
ID: {card.id} | CP: {card.cp}
))}
) : (

カードボックスにカードがありません

カードを引いてからバックアップボタンを押してください

)}
); };