-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathuseStyle.ts
37 lines (27 loc) · 877 Bytes
/
useStyle.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
import { Theme } from '@fruits-chain/react-native-xiaoshu'
import type { TokensType } from '@fruits-chain/react-native-xiaoshu'
import { useThemeDark } from '~/contexts/theme'
type Creator<T> = (T: TokensType, isDark: boolean) => T
type KeyType = [TokensType, boolean, Creator<any>]
const StyleMap: Map<KeyType, any> = new Map()
const useStyle = <T>(creator: Creator<T>): T => {
const TOKENS = Theme.useThemeTokens()
const isThemeDark = useThemeDark()
let myStyle: T
for (let [key, value] of StyleMap) {
if (key[2] === creator) {
if (key[0] === TOKENS && key[1] === isThemeDark) {
myStyle = value
} else {
StyleMap.delete(key)
}
}
}
// @ts-ignore
if (!myStyle) {
myStyle = creator(TOKENS, isThemeDark)
StyleMap.set([TOKENS, isThemeDark, creator], myStyle)
}
return myStyle
}
export default useStyle