-
Notifications
You must be signed in to change notification settings - Fork 30
/
hooks.js
122 lines (118 loc) · 3.81 KB
/
hooks.js
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
112
113
114
115
116
117
118
119
120
121
122
// import { createLocalStorageStateHook } from 'use-local-storage-state';
import { useLocalstorageState } from 'rooks';
import { useState, useEffect, useCallback } from 'react';
import { useAuthing } from '@authing/react-ui-components';
import { appId, appHost } from './InitialConfig';
import { Widgets } from './data';
// 小组件
const locale = navigator.language == 'zh-CN' ? 'zh-CN' : 'en-US';
const useWidgets = (keys = null) => {
const { getWidgetSetting, updateWidgetSetting } = useWidgetSettings();
let wgKeys = Object.entries(Widgets)
.filter(([, val]) => {
// 过滤掉不符合语言设置的
let isPreset = val.preset == true;
let isNoLocale = val.locales === undefined;
if (isNoLocale && isPreset) return true;
let isBingo = val.locales?.includes(locale);
return isBingo && isPreset;
})
.map(([key]) => key);
const initialKeys = getWidgetSetting({ key: 'local', name: 'widgets' }) || wgKeys;
console.log({ initialKeys, keys });
const [widgets, setWidgets] = useState(initialKeys);
useEffect(() => {
if (keys) {
setWidgets(keys);
}
}, [keys]);
const updateWidgetData = (list) => {
setWidgets(list);
updateWidgetSetting({ name: 'widgets', data: list });
};
const addWidget = (app) => {
setWidgets((prev) => {
let newData = [...prev, app];
updateWidgetSetting({ name: 'widgets', data: newData });
return newData;
});
};
const removeWidget = (key) => {
setWidgets((prev) => {
let newData = prev.filter((item) => {
return item !== key;
});
updateWidgetSetting({ name: 'widgets', data: newData });
return newData;
});
};
return { widgets, addWidget, removeWidget, updateWidgetData };
};
// 小组件的本地设置
const LOCAL_WG_SETTINGS_KEY = 'WIDGET_SETTINGS_DATA';
const defaultGetParams = { key: 'local', name: 'common' };
const useWidgetSettings = () => {
const [widgetSettings, setWidgetSettings] = useLocalstorageState(LOCAL_WG_SETTINGS_KEY, {});
const { authClient } = useAuthing({
appId,
appHost
});
const updateLocalData = async (newData) => {
if (newData == null) {
setWidgetSettings(newData);
return;
}
// 加个时间戳
newData.timestamp = new Date().getTime();
setWidgetSettings({ ...newData });
// }
// 如果已登录,同步数据到云端
let { status } = await authClient.checkLoginStatus();
if (status) {
authClient.setUdv('widget_data', JSON.stringify(newData));
}
};
let defaultUpdateParams = { name: 'common', key: 'local', data: null };
const updateWidgetSetting = (params = defaultUpdateParams) => {
const { key, name, data } = Object.assign({}, defaultUpdateParams, params);
console.log({ key, name, data });
let tmp = widgetSettings || {};
console.log('before update', tmp, tmp[name]);
if (tmp[name]) {
tmp[name] = { ...tmp[name], [key]: data };
} else {
tmp[name] = { [key]: data };
}
console.log('after update', tmp, tmp[name]);
updateLocalData(tmp);
};
const getWidgetSetting = useCallback(
(params = defaultGetParams) => {
const { key, name } = Object.assign({}, defaultGetParams, params);
if (!widgetSettings) return null;
// console.log({ widgetSettings });
let obj = widgetSettings[name];
if (obj) {
return obj[key] ? obj[key] : null;
}
return null;
},
[widgetSettings]
);
const clearWidgetSettings = () => {
// console.log({ widgetSettings });
updateLocalData(null);
};
const importWidgetSettings = (content) => {
// console.log({ widgetSettings });
updateLocalData(JSON.parse(content));
};
return {
widgetSettings,
getWidgetSetting,
updateWidgetSetting,
importWidgetSettings,
clearWidgetSettings
};
};
export { useWidgets, useWidgetSettings };