feat: 增加通用事件中心

release/desktop
moonrailgun 3 years ago
parent c558839f06
commit 7bf5c0e3d8

@ -1,6 +1,7 @@
import React, { useContext } from 'react';
import React, { useCallback, useContext } from 'react';
import { useStorage } from 'tailchat-shared';
import { parseColorScheme } from '../../web/src/utils/color-scheme-helper';
import { sharedEvent } from '../event';
const ColorSchemeContext = React.createContext<{
/**
@ -15,11 +16,19 @@ const ColorSchemeContext = React.createContext<{
ColorSchemeContext.displayName = 'ColorSchemeContext';
export const ColorSchemeContextProvider: React.FC = React.memo((props) => {
const [colorScheme = 'dark', { save: setColorScheme }] = useStorage(
const [colorScheme = 'dark', { save: saveColorScheme }] = useStorage(
'colorScheme',
'dark'
);
const setColorScheme = useCallback(
(colorScheme: string) => {
sharedEvent.emit('changeColorScheme', colorScheme);
saveColorScheme(colorScheme);
},
[saveColorScheme]
);
return (
<ColorSchemeContext.Provider value={{ colorScheme, setColorScheme }}>
{props.children}

@ -0,0 +1,32 @@
import { EventEmitter } from 'events';
/**
*
*/
export interface SharedEventMap {
/**
*
*/
changeColorScheme: (scheme: string) => void;
}
export type SharedEventType = keyof SharedEventMap;
const bus = new EventEmitter();
/**
*
*/
export const sharedEvent = {
on<T extends SharedEventType>(eventName: T, listener: SharedEventMap[T]) {
bus.on(eventName, listener);
},
off<T extends SharedEventType>(eventName: T, listener: SharedEventMap[T]) {
bus.off(eventName, listener);
},
emit<T extends SharedEventType>(
eventName: T,
...args: Parameters<SharedEventMap[T]>
) {
bus.emit(eventName, ...args);
},
};

@ -44,6 +44,10 @@ export {
useGroupInfoContext,
} from './contexts/GroupInfoContext';
// event
export { sharedEvent } from './event/index';
// helper
export { getDMConverseName } from './helper/converse-helper';
// i18n

@ -11,6 +11,7 @@
"axios": "^0.21.1",
"crc": "^3.8.0",
"dayjs": "^1.10.6",
"events": "^3.3.0",
"formik": "^2.2.9",
"i18next": "^20.3.2",
"i18next-http-backend": "^1.2.6",

@ -14,4 +14,5 @@ export {
getCachedUserInfo,
getCachedConverseInfo,
localTrans,
sharedEvent,
} from 'tailchat-shared';

@ -5012,6 +5012,11 @@ events@^3.2.0:
resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
events@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
execa@^5.0.0, execa@^5.1.1:
version "5.1.1"
resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"

Loading…
Cancel
Save