-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathuseBadgeLoad.ts
65 lines (59 loc) · 2.07 KB
/
useBadgeLoad.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import { useEffect, useRef, useState } from 'react';
import { DEV_BADGES, GenesisRarity, GAMER_BADGES, GenesisClaim } from '@/constants';
import { AccountInfo, GamerInfoData } from '@/lib/types';
export const useDevBadgeLoad = (game: AccountInfo) => {
const [state, setState] = useState<{ src: string; isLoading: boolean }>({ src: '', isLoading: false });
const badgesRef = useRef(
new Map<GenesisRarity, boolean>([
[GenesisRarity.Legendary, false],
[GenesisRarity.Epic, false],
[GenesisRarity.Rekt, false],
[GenesisRarity.Uncommon, false],
]),
);
useEffect(() => {
if (!game.appid) return;
const item = DEV_BADGES[game.nft_level];
if (badgesRef.current.get(game.nft_level)) {
setState({ src: item.asset, isLoading: false });
return;
}
setState({ src: item.asset, isLoading: true });
const img = new Image();
img.src = item.asset;
img.onload = () => {
badgesRef.current.set(game.nft_level, true);
setState({ src: item.asset, isLoading: false });
};
}, [game]);
return state;
};
export const useGamerBadgeLoad = (gamer?: GamerInfoData) => {
const [state, setState] = useState<{ src: string; isLoading: boolean }>({ src: '', isLoading: false });
const badgesRef = useRef(
new Map<GenesisRarity, boolean>([
[GenesisRarity.Legendary, false],
[GenesisRarity.Epic, false],
[GenesisRarity.Rare, false],
[GenesisRarity.Uncommon, false],
[GenesisRarity.Common, false],
[GenesisRarity.Rare, false],
]),
);
useEffect(() => {
if (!gamer?.credential || gamer?.nft_claim !== GenesisClaim.Claimed) return;
const item = GAMER_BADGES[gamer?.nft_level!];
if (badgesRef.current.get(gamer?.nft_level!)) {
setState({ src: item.asset, isLoading: false });
return;
}
setState({ src: item.asset, isLoading: true });
const img = new Image();
img.src = item.asset;
img.onload = () => {
badgesRef.current.set(gamer.nft_level!, true);
setState({ src: item.asset, isLoading: false });
};
}, [gamer]);
return state;
};