refactor: rename WorkspacePlugin to WorkspaceAdapter (#2330)

This commit is contained in:
Himself65
2023-05-12 01:43:39 +08:00
committed by LongYinan
parent 5516c215cd
commit 5008958e84
28 changed files with 189 additions and 83 deletions
+2 -2
View File
@@ -1,5 +1,5 @@
import { rootStore } from '@affine/workspace/atom';
import type { AffineWorkspace } from '@affine/workspace/type';
import type { AffineLegacyCloudWorkspace } from '@affine/workspace/type';
import { WorkspaceFlavour } from '@affine/workspace/type';
import { createEmptyBlockSuiteWorkspace } from '@affine/workspace/utils';
import { assertExists } from '@blocksuite/store';
@@ -70,7 +70,7 @@ export const fetcher = async (
workspaceApis: affineApis,
}
);
const remWorkspace: AffineWorkspace = {
const remWorkspace: AffineLegacyCloudWorkspace = {
...workspace,
flavour: WorkspaceFlavour.AFFINE,
blockSuiteWorkspace,
+14 -8
View File
@@ -11,8 +11,12 @@ import {
SignMethod,
} from '@affine/workspace/affine/login';
import { rootStore, rootWorkspacesMetadataAtom } from '@affine/workspace/atom';
import type { AffineWorkspace } from '@affine/workspace/type';
import { LoadPriority, WorkspaceFlavour } from '@affine/workspace/type';
import type { AffineLegacyCloudWorkspace } from '@affine/workspace/type';
import {
LoadPriority,
ReleaseType,
WorkspaceFlavour,
} from '@affine/workspace/type';
import {
cleanupWorkspace,
createEmptyBlockSuiteWorkspace,
@@ -33,7 +37,7 @@ import { useAffineRefreshAuthToken } from '../../hooks/affine/use-affine-refresh
import { BlockSuiteWorkspace } from '../../shared';
import { affineApis } from '../../shared/apis';
import { toast } from '../../utils';
import type { WorkspacePlugin } from '..';
import type { WorkspaceAdapter } from '..';
import { QueryKey } from './fetcher';
const storage = createJSONStorage(() => localStorage);
@@ -46,7 +50,7 @@ const schema = z.object({
const getPersistenceAllWorkspace = () => {
const items = storage.getItem(AFFINE_STORAGE_KEY, []);
const allWorkspaces: AffineWorkspace[] = [];
const allWorkspaces: AffineLegacyCloudWorkspace[] = [];
if (
Array.isArray(items) &&
items.every(item => schema.safeParse(item).success)
@@ -60,7 +64,7 @@ const getPersistenceAllWorkspace = () => {
workspaceApis: affineApis,
}
);
const affineWorkspace: AffineWorkspace = {
const affineWorkspace: AffineLegacyCloudWorkspace = {
...item,
flavour: WorkspaceFlavour.AFFINE,
blockSuiteWorkspace,
@@ -89,7 +93,8 @@ function AuthContext({ children }: PropsWithChildren): ReactElement {
return <>{children}</>;
}
export const AffinePlugin: WorkspacePlugin<WorkspaceFlavour.AFFINE> = {
export const AffinePlugin: WorkspaceAdapter<WorkspaceFlavour.AFFINE> = {
releaseType: ReleaseType.STABLE,
flavour: WorkspaceFlavour.AFFINE,
loadPriority: LoadPriority.HIGH,
Events: {
@@ -178,7 +183,8 @@ export const AffinePlugin: WorkspacePlugin<WorkspaceFlavour.AFFINE> = {
cleanupWorkspace(WorkspaceFlavour.AFFINE);
return null;
}
const workspaces: AffineWorkspace[] = await AffinePlugin.CRUD.list();
const workspaces: AffineLegacyCloudWorkspace[] =
await AffinePlugin.CRUD.list();
return (
workspaces.find(workspace => workspace.id === workspaceId) ?? null
);
@@ -239,7 +245,7 @@ export const AffinePlugin: WorkspacePlugin<WorkspaceFlavour.AFFINE> = {
storage.setItem(AFFINE_STORAGE_KEY, [...data]);
}
const affineWorkspace: AffineWorkspace = {
const affineWorkspace: AffineLegacyCloudWorkspace = {
...workspace,
flavour: WorkspaceFlavour.AFFINE,
blockSuiteWorkspace,
+31 -4
View File
@@ -3,12 +3,17 @@ import type {
WorkspaceCRUD,
WorkspaceUISchema,
} from '@affine/workspace/type';
import { LoadPriority, WorkspaceFlavour } from '@affine/workspace/type';
import {
LoadPriority,
ReleaseType,
WorkspaceFlavour,
} from '@affine/workspace/type';
import { AffinePlugin } from './affine';
import { LocalPlugin } from './local';
export interface WorkspacePlugin<Flavour extends WorkspaceFlavour> {
export interface WorkspaceAdapter<Flavour extends WorkspaceFlavour> {
releaseType: ReleaseType;
flavour: Flavour;
// Plugin will be loaded according to the priority
loadPriority: LoadPriority;
@@ -21,10 +26,32 @@ export interface WorkspacePlugin<Flavour extends WorkspaceFlavour> {
const unimplemented = () => {
throw new Error('Not implemented');
};
export const WorkspacePlugins = {
export const WorkspaceAdapters = {
[WorkspaceFlavour.AFFINE]: AffinePlugin,
[WorkspaceFlavour.LOCAL]: LocalPlugin,
[WorkspaceFlavour.AFFINE_CLOUD]: {
releaseType: ReleaseType.UNRELEASED,
flavour: WorkspaceFlavour.AFFINE_CLOUD,
loadPriority: LoadPriority.HIGH,
Events: {} as Partial<AppEvents>,
// todo: implement this
CRUD: {
get: unimplemented,
list: unimplemented,
delete: unimplemented,
create: unimplemented,
},
// todo: implement this
UI: {
Provider: unimplemented,
PageDetail: unimplemented,
PageList: unimplemented,
SettingsDetail: unimplemented,
},
},
[WorkspaceFlavour.PUBLIC]: {
releaseType: ReleaseType.UNRELEASED,
flavour: WorkspaceFlavour.PUBLIC,
loadPriority: LoadPriority.LOW,
Events: {} as Partial<AppEvents>,
@@ -44,5 +71,5 @@ export const WorkspacePlugins = {
},
},
} satisfies {
[Key in WorkspaceFlavour]: WorkspacePlugin<Key>;
[Key in WorkspaceFlavour]: WorkspaceAdapter<Key>;
};
+8 -3
View File
@@ -9,7 +9,11 @@ import {
saveWorkspaceToLocalStorage,
} from '@affine/workspace/local/crud';
import { createIndexedDBBackgroundProvider } from '@affine/workspace/providers';
import { LoadPriority, WorkspaceFlavour } from '@affine/workspace/type';
import {
LoadPriority,
ReleaseType,
WorkspaceFlavour,
} from '@affine/workspace/type';
import { createEmptyBlockSuiteWorkspace } from '@affine/workspace/utils';
import { nanoid } from '@blocksuite/store';
import React from 'react';
@@ -18,11 +22,12 @@ import { PageNotFoundError } from '../../components/affine/affine-error-eoundary
import { WorkspaceSettingDetail } from '../../components/affine/workspace-setting-detail';
import { BlockSuitePageList } from '../../components/blocksuite/block-suite-page-list';
import { PageDetailEditor } from '../../components/page-detail-editor';
import type { WorkspacePlugin } from '..';
import type { WorkspaceAdapter } from '..';
const logger = new DebugLogger('use-create-first-workspace');
export const LocalPlugin: WorkspacePlugin<WorkspaceFlavour.LOCAL> = {
export const LocalPlugin: WorkspaceAdapter<WorkspaceFlavour.LOCAL> = {
releaseType: ReleaseType.STABLE,
flavour: WorkspaceFlavour.LOCAL,
loadPriority: LoadPriority.LOW,
Events: {