-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Expand file tree
/
Copy pathconfig-provider.tsx
More file actions
90 lines (81 loc) · 1.63 KB
/
config-provider.tsx
File metadata and controls
90 lines (81 loc) · 1.63 KB
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import React, { FC, ReactNode, useContext } from 'react'
import { Locale } from '../../locales/base'
import zhCN from '../../locales/zh-CN'
type Config = {
locale: Locale
checkList?: {
activeIcon?: ReactNode
}
collapse?: {
arrowIcon?: ReactNode | ((active: boolean) => ReactNode)
}
dropdown?: {
arrowIcon?: ReactNode
}
form?: {
helpIcon?: ReactNode
}
input?: {
clearIcon?: ReactNode
}
list?: {
arrowIcon?: ReactNode
}
navBar?: {
backIcon?: ReactNode
}
noticeBar?: {
icon?: ReactNode
closeIcon?: ReactNode
}
popup?: {
closeIcon?: ReactNode
}
result?: {
successIcon?: ReactNode
errorIcon?: ReactNode
infoIcon?: ReactNode
waitingIcon?: ReactNode
warningIcon?: ReactNode
}
searchBar?: {
searchIcon?: ReactNode
}
textArea?: {
clearIcon?: ReactNode
}
}
export const defaultConfigRef: {
current: Config
} = {
current: {
locale: zhCN,
},
}
export function setDefaultConfig(config: Config) {
defaultConfigRef.current = config
}
export function getDefaultConfig() {
return defaultConfigRef.current
}
const ConfigContext = React.createContext<Config | null>(null)
export type ConfigProviderProps = Partial<Config> & {
children?: ReactNode
}
export const ConfigProvider: FC<ConfigProviderProps> = props => {
const { children, ...config } = props
const parentConfig = useConfig()
return (
<ConfigContext.Provider
value={{
...parentConfig,
...config,
}}
>
{children}
</ConfigContext.Provider>
)
}
export function useConfig() {
return useContext(ConfigContext) ?? getDefaultConfig()
}