feat: refactor app state provider

This commit is contained in:
QiShaoXuan
2023-01-09 16:40:23 +08:00
parent 761345a226
commit 28b2943dc6
28 changed files with 423 additions and 163 deletions

View File

@@ -7,22 +7,18 @@ const defaultOutLineWorkspaceId = 'affine';
// Cause it not just ensure workspace loaded, but also have router change.
export const useEnsureWorkspace = () => {
const [workspaceLoaded, setWorkspaceLoaded] = useState(false);
const { workspacesMeta, loadWorkspace, synced, user } = useAppState();
const { workspaceList, loadWorkspace, user } = useAppState();
const router = useRouter();
// const defaultOutLineWorkspaceId = '99ce7eb7';
// console.log(defaultOutLineWorkspaceId);
useEffect(() => {
if (!synced) {
setWorkspaceLoaded(false);
return;
}
// If router.query.workspaceId is not in workspace list, jump to 404 page
// If workspacesMeta is empty, we need to create a default workspace but not jump to 404
// If workspaceList is empty, we need to create a default workspace but not jump to 404
if (
workspacesMeta.length &&
workspaceList.length &&
router.query.workspaceId &&
workspacesMeta.findIndex(
workspaceList.findIndex(
meta => meta.id.toString() === router.query.workspaceId
) === -1
) {
@@ -40,13 +36,13 @@ export const useEnsureWorkspace = () => {
// }
const workspaceId = user
? (router.query.workspaceId as string) || workspacesMeta[0]?.id
? (router.query.workspaceId as string) || workspaceList[0]?.id
: (router.query.workspaceId as string) || defaultOutLineWorkspaceId;
loadWorkspace(workspaceId).finally(() => {
setWorkspaceLoaded(true);
});
}, [loadWorkspace, router, synced, user, workspacesMeta]);
}, [loadWorkspace, router, user, workspaceList]);
return {
workspaceLoaded,

View File

@@ -1,5 +1,5 @@
import { useRouter } from 'next/router';
import { useAppState } from '@/providers/app-state-provider/context';
import { useAppState } from '@/providers/app-state-provider';
import { useEffect, useRef, useState } from 'react';
export const useInitWorkspace = (disabled?: boolean) => {
@@ -8,15 +8,11 @@ export const useInitWorkspace = (disabled?: boolean) => {
const defaultOutLineWorkspaceId = useRef(new Date().getTime().toString());
const router = useRouter();
const {
workspacesMeta,
loadWorkspace,
currentWorkspace,
currentWorkspaceId,
} = useAppState();
const { workspaceList, loadWorkspace, currentWorkspace, currentWorkspaceId } =
useAppState();
const workspaceId =
(router.query.workspaceId as string) ||
workspacesMeta?.[0]?.id ||
workspaceList?.[0]?.id ||
defaultOutLineWorkspaceId.current;
useEffect(() => {