@@ -2,14 +2,11 @@ import { createContext, FC, ReactNode, useContext } from 'react'
22import { useQuery } from '@tanstack/react-query'
33import { AddonsDataState } from '@/types'
44
5- const urls : { [ key : string ] : string } = {
6- LichKing : 'https://raw.githubusercontent.com/PentSec/wowAddonsAPI/main/LK/lichking.json' ,
7- Cataclysm : 'https://raw.githubusercontent.com/PentSec/wowAddonsAPI/main/Cata/cataclysm.json' ,
8- Pandaria : 'https://raw.githubusercontent.com/PentSec/wowAddonsAPI/main/Panda/pandaria.json'
9- }
5+ const jsonUrl =
6+ 'https://raw.githubusercontent.com/PentSec/MaddonsManager/refs/heads/main/API/Maddons.json'
107
118interface AddonsContextValue {
12- data : AddonsDataState
9+ data : AddonsDataState [ ]
1310 isPending : boolean
1411 error : string | null
1512}
@@ -24,41 +21,41 @@ export const useAddonsContext = (): AddonsContextValue => {
2421 return context
2522}
2623
27- const fetchAddons = async ( key : string ) => {
28- const response = await fetch ( urls [ key ] ) . then ( ( res ) => res . json ( ) )
29- return response
24+ const fetchAddons = async ( url : string ) => {
25+ const response = await fetch ( url )
26+ const jsonData = await response . json ( )
27+ return Promise . all (
28+ jsonData . map ( async ( item : AddonsDataState ) => {
29+ const mdUrl = `https://raw.githubusercontent.com/PentSec/MaddonsManager/refs/heads/main/API/Addons/${ item . file_name } /post.md`
30+ const logoUrl = `https://raw.githubusercontent.com/PentSec/MaddonsManager/refs/heads/main/API/Addons/${ item . file_name } /${ item . file_name } .webp`
31+ const zipUrl = `https://github.com/PentSec/MaddonsManager/raw/refs/heads/main/API/Addons/${ item . file_name } /${ item . file_name } .zip`
32+
33+ const [ md ] = await Promise . all ( [
34+ fetch ( mdUrl ) . then ( ( res ) => {
35+ if ( ! res . ok ) throw new Error ( `Failed to fetch md for ${ item . file_name } ` )
36+ return res . text ( )
37+ } )
38+ ] )
39+
40+ return { ...item , md, logo : logoUrl , zip : zipUrl }
41+ } )
42+ )
3043}
3144
3245export const AddonsProvider : FC < { children : ReactNode } > = ( { children } ) => {
33- const lichKingQuery = useQuery ( {
34- queryKey : [ 'lichKing' ] ,
35- queryFn : ( ) => fetchAddons ( 'LichKing' ) ,
36- refetchOnWindowFocus : false
37- } )
38- const cataclysmQuery = useQuery ( {
39- queryKey : [ 'cataclysm' ] ,
40- queryFn : ( ) => fetchAddons ( 'Cataclysm' ) ,
41- refetchOnWindowFocus : false
42- } )
43- const pandariaQuery = useQuery ( {
44- queryKey : [ 'pandaria' ] ,
45- queryFn : ( ) => fetchAddons ( 'Pandaria' ) ,
46+ const { data, isPending, error } = useQuery ( {
47+ queryKey : [ 'addons' ] ,
48+ queryFn : ( ) => fetchAddons ( jsonUrl ) ,
4649 refetchOnWindowFocus : false
4750 } )
4851
49- const data : AddonsDataState = {
50- LichKing : lichKingQuery . data || [ ] ,
51- Cataclysm : cataclysmQuery . data || [ ] ,
52- Pandaria : pandariaQuery . data || [ ]
53- }
54-
55- const isPending = lichKingQuery . isPending || cataclysmQuery . isPending || pandariaQuery . isPending
56-
57- const error = lichKingQuery . error || cataclysmQuery . error || pandariaQuery . error
58-
5952 return (
6053 < AddonsContext . Provider
61- value = { { data, isPending, error : error ? ( error as Error ) . message : null } }
54+ value = { {
55+ data : data || [ ] ,
56+ isPending,
57+ error : error ? ( error as Error ) . message : null
58+ } }
6259 >
6360 { children }
6461 </ AddonsContext . Provider >
0 commit comments