import React, { createContext, ReactNode, useContext, useState } from 'react'; import { MATCH_FRENZY_SCOREBOARD_KEY } from '../constants'; import IListeningPracticeQuestion from '../interfaces/IListeningPracticeQuestion'; import { ConnectiveRevisionAllResult } from './ConnectiveRevisionRanking'; import { MatchingFrenzyResult, MatchingFrezyRanking } from './MatchingFrezyRanking'; import { useMyIonStore } from './MyIonStore'; const MyIonQuizContext = createContext(undefined); export const MyIonQuizProvider: React.FC<{ children: ReactNode }> = ({ children }) => { const [my_context, setMyContext] = useState('initial value'); const { myIonStoreRead, myIonStoreWrite } = useMyIonStore(); function Helloworld() { listening_practice_correction_list; } const [listening_practice_result, setListeningPracticeResult] = useState(0); const [listening_practice_current_test, setListeningPracticeCurrentTest] = useState(0); const [listening_practice_correction_list, setListeningPracticeCorrectionList] = useState([]); // function appendToListeningPracticeCorrectionList(question: IListeningPracticeQuestion) { setListeningPracticeCorrectionList([...listening_practice_correction_list, question]); } // function resetListeningPracticeCorrectionList() { setListeningPracticeCorrectionList([]); } // const [matching_frenzy_result, setMatchingFrenzyResult] = useState(0); const [matching_frenzy_current_test, setMatchingFrenzyCurrentTest] = useState(0); // const getCategoryKey = (category: string) => `${MATCH_FRENZY_SCOREBOARD_KEY}/${category}`; // async function loadMatchingFrenzyScoreBoard(cat_name: string): Promise { let category_key = getCategoryKey(cat_name); let current_result = JSON.parse(await myIonStoreRead(category_key)); if (!current_result || JSON.stringify(current_result) == '{}') { current_result = { ranking: [] }; } return current_result; } async function saveMatchingFrenzyResultToScoreBoard(cat_name: string, result: MatchingFrenzyResult) { let category_key = getCategoryKey(cat_name); let current_result: MatchingFrezyRanking = await loadMatchingFrenzyScoreBoard(cat_name); current_result['ranking'] = [...current_result['ranking'], result]; current_result['ranking'].sort((a: MatchingFrenzyResult, b: MatchingFrenzyResult) => b.result - a.result).splice(3); myIonStoreWrite(category_key, JSON.stringify(current_result)); } // const [connective_revision_progress, setConnectiveRevisionProgress] = useState(0); const [connective_revision_current_test, setConnectiveRevisionCurrentTest] = useState(0); // const CONNECT_REVISION_SCOREBOARD_KEY = 'connective_revision_scoreboard'; async function loadConnectiveRevisionScoreBoard(): Promise { let current_result = JSON.parse(await myIonStoreRead(CONNECT_REVISION_SCOREBOARD_KEY)); if (!current_result || JSON.stringify(current_result) == '{}') { current_result = {}; } return current_result; } const [connective_revision_score, setConnectiveRevisionScore] = useState(0); async function saveConnectiveRevisionResultToScoreBoard(quiz_index: string, progress: number) { let current_result: ConnectiveRevisionAllResult = await loadConnectiveRevisionScoreBoard(); current_result = { ...current_result, [quiz_index]: progress }; myIonStoreWrite(CONNECT_REVISION_SCOREBOARD_KEY, JSON.stringify(current_result)); } return ( {children} ); }; export const useMyIonQuizContext = (): MyContextProps => { const context = useContext(MyIonQuizContext); if (!context) { throw new Error('useMyContext must be used within a MyProvider'); } return context; }; interface MyContextProps { my_context: string; setMyContext: React.Dispatch>; // // listening_practice_result: number; setListeningPracticeResult: React.Dispatch>; // listening_practice_current_test: number; setListeningPracticeCurrentTest: React.Dispatch>; // listening_practice_correction_list: IListeningPracticeQuestion[]; setListeningPracticeCorrectionList: React.Dispatch>; appendToListeningPracticeCorrectionList: (question: IListeningPracticeQuestion) => void; resetListeningPracticeCorrectionList: () => void; // matching_frenzy_result: number; setMatchingFrenzyResult: React.Dispatch>; matching_frenzy_current_test: number; setMatchingFrenzyCurrentTest: React.Dispatch>; loadMatchingFrenzyScoreBoard: (cat_name: string) => Promise; saveMatchingFrenzyResultToScoreBoard: (cat_name: string, result: MatchingFrenzyResult) => Promise; // connective_revision_progress: number; setConnectiveRevisionProgress: React.Dispatch>; // connective_revision_score: number; setConnectiveRevisionScore: React.Dispatch>; connective_revision_current_test: number; setConnectiveRevisionCurrentTest: React.Dispatch>; loadConnectiveRevisionScoreBoard: () => Promise; saveConnectiveRevisionResultToScoreBoard: (quiz_index: string, progress: number) => Promise; // Helloworld: () => void; }