refactor: add workspace events (#1838)

This commit is contained in:
Himself65
2023-04-06 16:14:23 -05:00
committed by GitHub
parent b6bdf257e4
commit 5ac36b6f0a
13 changed files with 105 additions and 71 deletions

View File

@@ -1,30 +1,16 @@
import { currentAffineUserAtom } from '@affine/workspace/affine/atom';
import {
createAffineAuth,
parseIdToken,
setLoginStorage,
SignMethod,
} from '@affine/workspace/affine/login';
import { useSetAtom } from 'jotai';
import { WorkspaceFlavour } from '@affine/workspace/type';
import { useRouter } from 'next/router';
import { useCallback } from 'react';
import { toast } from '../../utils';
export const affineAuth = createAffineAuth();
import { WorkspacePlugins } from '../../plugins';
export function useAffineLogIn() {
const router = useRouter();
const setUser = useSetAtom(currentAffineUserAtom);
return useCallback(async () => {
const response = await affineAuth.generateToken(SignMethod.Google);
if (response) {
setLoginStorage(response);
const user = parseIdToken(response.token);
setUser(user);
router.reload();
} else {
toast('Login failed');
}
}, [router, setUser]);
await WorkspacePlugins[WorkspaceFlavour.AFFINE].Events[
'workspace:access'
]?.();
// todo: remove reload page requirement
router.reload();
}, [router]);
}

View File

@@ -1,26 +1,15 @@
import { currentAffineUserAtom } from '@affine/workspace/affine/atom';
import { clearLoginStorage } from '@affine/workspace/affine/login';
import { jotaiWorkspacesAtom } from '@affine/workspace/atom';
import { WorkspaceFlavour } from '@affine/workspace/type';
import { useSetAtom } from 'jotai';
import { useRouter } from 'next/router';
import { useCallback } from 'react';
import { WorkspacePlugins } from '../../plugins';
export function useAffineLogOut() {
const set = useSetAtom(jotaiWorkspacesAtom);
const router = useRouter();
const setCurrentUser = useSetAtom(currentAffineUserAtom);
return useCallback(() => {
set(workspaces =>
workspaces.filter(
workspace => workspace.flavour !== WorkspaceFlavour.AFFINE
)
);
WorkspacePlugins[WorkspaceFlavour.AFFINE].cleanup?.();
clearLoginStorage();
setCurrentUser(null);
return useCallback(async () => {
await WorkspacePlugins[WorkspaceFlavour.AFFINE].Events[
'workspace:revoke'
]?.();
router.reload();
}, [router, set, setCurrentUser]);
}, [router]);
}

View File

@@ -7,7 +7,7 @@ import {
} from '@affine/workspace/affine/login';
import useSWR from 'swr';
import { affineAuth } from './use-affine-log-in';
import { affineAuth } from '../../plugins/affine';
const logger = new DebugLogger('auth-token');

View File

@@ -1,14 +1,7 @@
import { DebugLogger } from '@affine/debug';
import { DEFAULT_WORKSPACE_NAME } from '@affine/env';
import { jotaiStore, jotaiWorkspacesAtom } from '@affine/workspace/atom';
import { WorkspaceFlavour } from '@affine/workspace/type';
import { createEmptyBlockSuiteWorkspace } from '@affine/workspace/utils';
import { assertEquals, assertExists, nanoid } from '@blocksuite/store';
import { useEffect } from 'react';
import { LocalPlugin } from '../plugins/local';
const logger = new DebugLogger('use-create-first-workspace');
import { WorkspacePlugins } from '../plugins';
export function useCreateFirstWorkspace() {
// may not need use effect at all, right?
@@ -24,22 +17,13 @@ export function useCreateFirstWorkspace() {
* Create a first workspace, only just once for a browser
*/
async function createFirst() {
const blockSuiteWorkspace = createEmptyBlockSuiteWorkspace(
nanoid(),
(_: string) => undefined
const Plugins = Object.values(WorkspacePlugins).sort(
(a, b) => a.loadPriority - b.loadPriority
);
blockSuiteWorkspace.meta.setName(DEFAULT_WORKSPACE_NAME);
const id = await LocalPlugin.CRUD.create(blockSuiteWorkspace);
const workspace = await LocalPlugin.CRUD.get(id);
assertExists(workspace);
assertEquals(workspace.id, id);
jotaiStore.set(jotaiWorkspacesAtom, [
{
id: workspace.id,
flavour: WorkspaceFlavour.LOCAL,
},
]);
logger.info('created local workspace', id);
for (const Plugin of Plugins) {
await Plugin.Events['app:first-init']?.();
}
}
});
}, []);