feat: add message center (#1486)
This commit is contained in:
30
apps/web/src/components/pure/message-center/index.tsx
Normal file
30
apps/web/src/components/pure/message-center/index.tsx
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
import { toast } from '@affine/component';
|
||||||
|
import { MessageCode } from '@affine/datacenter';
|
||||||
|
import { messages } from '@affine/datacenter';
|
||||||
|
import React, { useEffect } from 'react';
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
interface DocumentEventMap {
|
||||||
|
'affine-error': CustomEvent<{
|
||||||
|
code: MessageCode;
|
||||||
|
}>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const MessageCenter: React.FC = () => {
|
||||||
|
useEffect(() => {
|
||||||
|
const listener = (
|
||||||
|
event: CustomEvent<{
|
||||||
|
code: MessageCode;
|
||||||
|
}>
|
||||||
|
) => {
|
||||||
|
toast(messages[event.detail.code].message);
|
||||||
|
};
|
||||||
|
|
||||||
|
document.addEventListener('affine-error', listener);
|
||||||
|
return () => {
|
||||||
|
document.removeEventListener('affine-error', listener);
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
return null;
|
||||||
|
};
|
||||||
@@ -15,6 +15,7 @@ import { jotaiStore } from '../atoms';
|
|||||||
import { AffineErrorBoundary } from '../components/affine/affine-error-eoundary';
|
import { AffineErrorBoundary } from '../components/affine/affine-error-eoundary';
|
||||||
import { ProviderComposer } from '../components/provider-composer';
|
import { ProviderComposer } from '../components/provider-composer';
|
||||||
import { PageLoading } from '../components/pure/loading';
|
import { PageLoading } from '../components/pure/loading';
|
||||||
|
import { MessageCenter } from '../components/pure/message-center';
|
||||||
import { AffineSWRConfigProvider } from '../providers/AffineSWRConfigProvider';
|
import { AffineSWRConfigProvider } from '../providers/AffineSWRConfigProvider';
|
||||||
import { ThemeProvider } from '../providers/ThemeProvider';
|
import { ThemeProvider } from '../providers/ThemeProvider';
|
||||||
import { NextPageWithLayout } from '../shared';
|
import { NextPageWithLayout } from '../shared';
|
||||||
@@ -57,6 +58,7 @@ const App = function App({
|
|||||||
<CacheProvider value={emotionCache}>
|
<CacheProvider value={emotionCache}>
|
||||||
<I18nextProvider i18n={i18n}>
|
<I18nextProvider i18n={i18n}>
|
||||||
<DebugAtoms />
|
<DebugAtoms />
|
||||||
|
<MessageCenter />
|
||||||
<AffineErrorBoundary router={useRouter()}>
|
<AffineErrorBoundary router={useRouter()}>
|
||||||
<Suspense fallback={<PageLoading key="RootPageLoading" />}>
|
<Suspense fallback={<PageLoading key="RootPageLoading" />}>
|
||||||
<ProviderComposer
|
<ProviderComposer
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ export const getDataCenter = _initializeDataCenter();
|
|||||||
|
|
||||||
export type { DataCenter };
|
export type { DataCenter };
|
||||||
export * from './message';
|
export * from './message';
|
||||||
|
export { messages } from './message/code';
|
||||||
export { AffineProvider } from './provider/affine';
|
export { AffineProvider } from './provider/affine';
|
||||||
export * from './provider/affine/apis';
|
export * from './provider/affine/apis';
|
||||||
export { getAuthorizer, GoogleAuth } from './provider/affine/apis/google';
|
export { getAuthorizer, GoogleAuth } from './provider/affine/apis/google';
|
||||||
|
|||||||
@@ -62,4 +62,4 @@ export const messages = {
|
|||||||
[MessageCode.refreshTokenError]: {
|
[MessageCode.refreshTokenError]: {
|
||||||
message: 'Refresh token failed',
|
message: 'Refresh token failed',
|
||||||
},
|
},
|
||||||
};
|
} as const;
|
||||||
|
|||||||
@@ -26,6 +26,13 @@ export class MessageCenter extends Observable<string> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _send(provider: string, messageCode: MessageCode) {
|
private _send(provider: string, messageCode: MessageCode) {
|
||||||
|
document.dispatchEvent(
|
||||||
|
new CustomEvent('affine-error', {
|
||||||
|
detail: {
|
||||||
|
code: messageCode,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
);
|
||||||
this.emit('message', [
|
this.emit('message', [
|
||||||
{ ...this._messages[messageCode], provider, code: messageCode },
|
{ ...this._messages[messageCode], provider, code: messageCode },
|
||||||
]);
|
]);
|
||||||
|
|||||||
Reference in New Issue
Block a user