mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-09-01 14:19:40 +08:00
feat: add open app route (#3899)
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
import { pushNotificationAtom } from '@affine/component/notification-center';
|
||||
import { isDesktop } from '@affine/env/constant';
|
||||
import { WorkspaceSubPath } from '@affine/env/workspace';
|
||||
import { useAFFiNEI18N } from '@affine/i18n/hooks';
|
||||
import { rootWorkspacesMetadataAtom } from '@affine/workspace/atom';
|
||||
import { assertExists } from '@blocksuite/global/utils';
|
||||
import { arrayMove } from '@dnd-kit/sortable';
|
||||
@@ -8,7 +11,14 @@ import {
|
||||
} from '@toeverything/infra/atom';
|
||||
import { useAtom, useAtomValue, useSetAtom } from 'jotai';
|
||||
import type { ReactElement } from 'react';
|
||||
import { lazy, Suspense, useCallback, useTransition } from 'react';
|
||||
import {
|
||||
lazy,
|
||||
Suspense,
|
||||
useCallback,
|
||||
useEffect,
|
||||
useState,
|
||||
useTransition,
|
||||
} from 'react';
|
||||
|
||||
import type { SettingAtom } from '../atoms';
|
||||
import {
|
||||
@@ -32,6 +42,12 @@ const Auth = lazy(() =>
|
||||
}))
|
||||
);
|
||||
|
||||
const DesktopLogin = lazy(() =>
|
||||
import('../components/affine/desktop-login-modal').then(module => ({
|
||||
default: module.DesktopLoginModal,
|
||||
}))
|
||||
);
|
||||
|
||||
const WorkspaceListModal = lazy(() =>
|
||||
import('../components/pure/workspace-list-modal').then(module => ({
|
||||
default: module.WorkspaceListModal,
|
||||
@@ -129,6 +145,49 @@ export const AuthModal = (): ReactElement => {
|
||||
);
|
||||
};
|
||||
|
||||
export const DesktopLoginModal = (): ReactElement => {
|
||||
const [signingEmail, setSigningEmail] = useState<string>();
|
||||
const setAuthAtom = useSetAtom(authAtom);
|
||||
const pushNotification = useSetAtom(pushNotificationAtom);
|
||||
const t = useAFFiNEI18N();
|
||||
|
||||
// hack for closing the potentially opened auth modal
|
||||
const closeAuthModal = useCallback(() => {
|
||||
setAuthAtom(prev => ({ ...prev, openModal: false }));
|
||||
}, [setAuthAtom]);
|
||||
|
||||
useEffect(() => {
|
||||
return window.events?.ui.onStartLogin(opts => {
|
||||
setSigningEmail(opts.email);
|
||||
});
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
return window.events?.ui.onFinishLogin(({ success, email }) => {
|
||||
if (email !== signingEmail) {
|
||||
return;
|
||||
}
|
||||
setSigningEmail(undefined);
|
||||
closeAuthModal();
|
||||
if (success) {
|
||||
pushNotification({
|
||||
title: t['com.affine.auth.toast.title.signed-in'](),
|
||||
message: t['com.affine.auth.toast.message.signed-in'](),
|
||||
type: 'success',
|
||||
});
|
||||
} else {
|
||||
pushNotification({
|
||||
title: t['com.affine.auth.toast.title.failed'](),
|
||||
message: t['com.affine.auth.toast.message.failed'](),
|
||||
type: 'error',
|
||||
});
|
||||
}
|
||||
});
|
||||
}, [closeAuthModal, pushNotification, signingEmail, t]);
|
||||
|
||||
return <DesktopLogin signingEmail={signingEmail} />;
|
||||
};
|
||||
|
||||
export function CurrentWorkspaceModals() {
|
||||
const [currentWorkspace] = useCurrentWorkspace();
|
||||
const [openDisableCloudAlertModal, setOpenDisableCloudAlertModal] = useAtom(
|
||||
@@ -263,6 +322,7 @@ export const AllWorkspaceModals = (): ReactElement => {
|
||||
<Suspense>
|
||||
<AuthModal />
|
||||
</Suspense>
|
||||
{isDesktop && <DesktopLoginModal />}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user