@@ -2,14 +2,11 @@ import { createContext, FC, ReactNode, useContext } from 'react'
2
2
import { useQuery } from '@tanstack/react-query'
3
3
import { AddonsDataState } from '@/types'
4
4
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'
10
7
11
8
interface AddonsContextValue {
12
- data : AddonsDataState
9
+ data : AddonsDataState [ ]
13
10
isPending : boolean
14
11
error : string | null
15
12
}
@@ -24,41 +21,41 @@ export const useAddonsContext = (): AddonsContextValue => {
24
21
return context
25
22
}
26
23
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
+ )
30
43
}
31
44
32
45
export 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 ) ,
46
49
refetchOnWindowFocus : false
47
50
} )
48
51
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
-
59
52
return (
60
53
< 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
+ } }
62
59
>
63
60
{ children }
64
61
</ AddonsContext . Provider >
0 commit comments