import React, { useState, useEffect } from 'react'; import { Card } from './Card'; import { cardApi } from '../services/api'; import { Card as CardType } from '../types/card'; import '../styles/CardList.css'; interface CardMasterData { id: number; name: string; ja_name: string; description: string; base_cp_min: number; base_cp_max: number; } export const CardList: React.FC = () => { const [loading, setLoading] = useState(true); const [masterData, setMasterData] = useState([]); const [error, setError] = useState(null); useEffect(() => { loadMasterData(); }, []); const loadMasterData = async () => { try { setLoading(true); const response = await fetch('http://localhost:8000/api/v1/cards/master'); if (!response.ok) { throw new Error('Failed to fetch card master data'); } const data = await response.json(); setMasterData(data); } catch (err) { // Failed to load card master data setError(err instanceof Error ? err.message : 'Failed to load card data'); } finally { setLoading(false); } }; if (loading) { return (
Loading card data...
); } if (error) { return (
Error: {error}
); } // Create cards for all rarity patterns const rarityPatterns = ['normal', 'unique'] as const; const displayCards: Array<{card: CardType, data: CardMasterData, patternName: string}> = []; masterData.forEach(data => { rarityPatterns.forEach(pattern => { const card: CardType = { id: data.id, cp: Math.floor((data.base_cp_min + data.base_cp_max) / 2), status: pattern, skill: null, owner_did: 'sample', obtained_at: new Date().toISOString(), is_unique: pattern === 'unique', unique_id: pattern === 'unique' ? 'sample-unique-id' : null }; displayCards.push({ card, data, patternName: `${data.id}-${pattern}` }); }); }); return (

ai.card マスターリスト

全カード・全レアリティパターン表示

データソース: https://git.syui.ai/ai/ai/raw/branch/main/ai.json

{displayCards.map(({ card, data, patternName }) => (

ID: {data.id}

Name: {data.name}

日本語名: {data.ja_name}

レアリティ: {card.status}

CP: {card.cp}

CP範囲: {data.base_cp_min}-{data.base_cp_max}

{data.description && (

{data.description}

)}
))}
); };