import React, { useEffect, useState } from 'react'; import { StyleSheet, Text, View, Button, useColorScheme } from 'react-native'; import { SvgUri, SvgXml } from 'react-native-svg'; import { useSelector } from 'react-redux'; import { Kanji } from '../model/kanji'; import { KanjiListByGrade } from '../model/kanjiListByGrades'; import { KanjiMapper } from '../model/kanjiMapper'; import KanjiAnswerField from './KanjiAnswerField'; type KanjiProps = { kanji: string; } const KanjiCard = (props: KanjiProps) => { const kanjiCardStyle = useColorScheme() == 'light' ? kanjiCardStyle_light : kanjiCardStyle_dark; const options = { method: 'GET', headers: { 'X-RapidAPI-Key': '19516a9900mshce10de76f99976bp10f192jsn8c8d82222baa', 'X-RapidAPI-Host': 'kanjialive-api.p.rapidapi.com' } } const [loading, setLoading] = useState(true); const [kanji, setKanji] = useState((): Kanji | null => { return null }); const [imgXml, setImgXml] = useState(''); var kanjis: KanjiListByGrade = useSelector(state => state.kanjiReducer.kanjis); const allKanjis: Kanji[] = [].concat(...Object.values(kanjis)) const selectedKanji = allKanjis[Math.floor(Math.random() * allKanjis.length)] const fetchData = async () => { await fetch(`https://kanjialive-api.p.rapidapi.com/api/public/kanji/${props.kanji}`, options) .then(async response => { const data = await response.json() setKanji(KanjiMapper.ApiJsonToKanji(data)); }) .catch(err => console.log(err)); } const fetchXml = async () => { if (kanji) { const xml = await (await fetch(kanji?.image!)).text(); setImgXml(xml); } } useEffect(() => { setLoading(true); fetchData().then(_ => { setKanji(selectedKanji); setLoading(false); }); }, []); useEffect(() => { setLoading(true); fetchXml().then(_ => { setLoading(false); }); }, [kanji]); return ( {loading ? Loading... : {kanji?.onyomi}} {!loading && ( )} {loading ? : {kanji?.meaning}}