-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConfigContext.tsx
More file actions
111 lines (98 loc) · 3.39 KB
/
ConfigContext.tsx
File metadata and controls
111 lines (98 loc) · 3.39 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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import React, { createContext, useState, useContext, ReactNode, useEffect } from 'react';
import { AppCategory, QuickAccessFolder } from '../../shared/types';
import { DEFAULT_APP_CATEGORIES, DEFAULT_QUICK_ACCESS_FOLDERS } from '../../shared/constants';
interface ConfigContextType {
appCategories: AppCategory[];
quickAccessFolders: QuickAccessFolder[];
scanlineIntensity: string;
crtEffect: boolean;
audioFeedback: boolean;
showWeather: boolean;
showBattery: boolean;
setAppCategories: (categories: AppCategory[]) => void;
setQuickAccessFolders: (folders: QuickAccessFolder[]) => void;
setScanlineIntensity: (intensity: string) => void;
setCrtEffect: (enabled: boolean) => void;
setAudioFeedback: (enabled: boolean) => void;
setShowWeather: (show: boolean) => void;
setShowBattery: (show: boolean) => void;
}
const defaultConfigContext: ConfigContextType = {
appCategories: DEFAULT_APP_CATEGORIES,
quickAccessFolders: DEFAULT_QUICK_ACCESS_FOLDERS,
scanlineIntensity: 'medium',
crtEffect: true,
audioFeedback: true,
showWeather: true,
showBattery: true,
setAppCategories: () => {},
setQuickAccessFolders: () => {},
setScanlineIntensity: () => {},
setCrtEffect: () => {},
setAudioFeedback: () => {},
setShowWeather: () => {},
setShowBattery: () => {}
};
export const ConfigContext = createContext<ConfigContextType>(defaultConfigContext);
interface ConfigProviderProps {
children: ReactNode;
}
export const ConfigProvider: React.FC<ConfigProviderProps> = ({ children }) => {
// 状态初始化
const [appCategories, setAppCategories] = useState<AppCategory[]>(DEFAULT_APP_CATEGORIES);
const [quickAccessFolders, setQuickAccessFolders] = useState<QuickAccessFolder[]>(DEFAULT_QUICK_ACCESS_FOLDERS);
const [scanlineIntensity, setScanlineIntensity] = useState<string>('medium');
const [crtEffect, setCrtEffect] = useState<boolean>(true);
const [audioFeedback, setAudioFeedback] = useState<boolean>(true);
const [showWeather, setShowWeather] = useState<boolean>(true);
const [showBattery, setShowBattery] = useState<boolean>(true);
// 加载配置
useEffect(() => {
// 在实际应用中,这里会从Electron的配置文件加载设置
// 目前使用默认值
// 更新扫描线强度
updateScanlineOpacity(scanlineIntensity);
}, []);
// 更新扫描线强度
const updateScanlineOpacity = (intensity: string) => {
let opacity = 0.1; // 默认值
switch (intensity) {
case 'low':
opacity = 0.05;
break;
case 'medium':
opacity = 0.1;
break;
case 'high':
opacity = 0.2;
break;
}
document.documentElement.style.setProperty('--scanline-opacity', opacity.toString());
};
// 处理扫描线强度变化
const handleScanlineIntensityChange = (intensity: string) => {
setScanlineIntensity(intensity);
updateScanlineOpacity(intensity);
};
return (
<ConfigContext.Provider value={{
appCategories,
quickAccessFolders,
scanlineIntensity,
crtEffect,
audioFeedback,
showWeather,
showBattery,
setAppCategories,
setQuickAccessFolders,
setScanlineIntensity: handleScanlineIntensityChange,
setCrtEffect,
setAudioFeedback,
setShowWeather,
setShowBattery
}}>
{children}
</ConfigContext.Provider>
);
};
export const useConfig = () => useContext(ConfigContext);