From d154a28ad182669afd123a25c860c080dec47daf Mon Sep 17 00:00:00 2001 From: MingLiang Wang Date: Sun, 8 Jan 2023 17:09:45 +0800 Subject: [PATCH] feat: add publish workspace --- packages/data-center/src/datacenter.ts | 28 ++++++++++++------- .../data-center/src/provider/affine/affine.ts | 5 ++++ packages/data-center/src/provider/base.ts | 6 ++++ .../data-center/src/workspaces/workspaces.ts | 4 +-- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/packages/data-center/src/datacenter.ts b/packages/data-center/src/datacenter.ts index 032f96b89a..a065228670 100644 --- a/packages/data-center/src/datacenter.ts +++ b/packages/data-center/src/datacenter.ts @@ -3,7 +3,7 @@ import { Workspace } from '@blocksuite/store'; import { BaseProvider } from './provider/base'; import { LocalProvider } from './provider/local/local'; import { AffineProvider } from './provider'; -import { Workspace as WS, WorkspaceMeta } from 'src/types'; +import type { Workspace as WS, WorkspaceMeta } from 'src/types'; import assert from 'assert'; import { getLogger } from './logger'; import { BlockSchema } from '@blocksuite/blocks/models'; @@ -136,6 +136,7 @@ export class DataCenter { /** * get user info by provider id * @param {string} providerId the provider name of workspace + * @returns {Promise} */ public async getUserInfo(providerId = 'affine') { // XXX: maybe return all user info @@ -146,6 +147,7 @@ export class DataCenter { /** * listen workspaces list change + * @param {Function} callback callback function */ public async onWorkspacesChange(callback: (workspaces: WS[]) => void) { this.workspaces.onWorkspacesChange(callback); @@ -171,7 +173,7 @@ export class DataCenter { w.doc.meta.setAvatar(avatar); update.avatar = avatar; } - this.workspaces.updateWorkspaceMeta(w.room, update); + this.workspaces.updateWorkspaceInfo(w.room, update); } /** @@ -184,13 +186,19 @@ export class DataCenter { assert(workspaceInfo, 'Workspace not found'); const provider = this.providerMap.get(workspaceInfo.provider); if (provider) { - provider.close(workspaceId); - provider.leave(workspaceId); + await provider.close(workspaceId); + await provider.leave(workspaceId); } } - public async setWorkspacePublish() { - // TODO: set workspace publish + public async setWorkspacePublish(workspaceId: string, isPublish: boolean) { + const workspaceInfo = this.workspaces.getWorkspace(workspaceId); + assert(workspaceInfo, 'Workspace not found'); + const provider = this.providerMap.get(workspaceInfo.provider); + if (provider) { + await provider.publish(workspaceId, isPublish); + this.workspaces.updateWorkspaceInfo(workspaceId, { isPublish }); + } } public async inviteMember(id: string, email: string) { @@ -198,7 +206,7 @@ export class DataCenter { assert(workspaceInfo, 'Workspace not found'); const provider = this.providerMap.get(workspaceInfo.provider); if (provider) { - provider.invite(id, email); + await provider.invite(id, email); } } @@ -211,7 +219,7 @@ export class DataCenter { assert(workspaceInfo, 'Workspace not found'); const provider = this.providerMap.get(workspaceInfo.provider); if (provider) { - provider.removeMember(permissionId); + await provider.removeMember(permissionId); } } @@ -227,7 +235,7 @@ export class DataCenter { assert(currentWorkspace, 'Workspace not found'); const provider = this.providerMap.get(currentWorkspace.provider); assert(provider, 'Provider not found'); - provider.close(currentWorkspace.id); + await provider.close(currentWorkspace.id); } private async _transWorkspaceProvider( @@ -261,7 +269,7 @@ export class DataCenter { } /** - * Enable workspace cloud flag + * Enable workspace cloud * @param {string} id ID of workspace. */ public async enableWorkspaceCloud( diff --git a/packages/data-center/src/provider/affine/affine.ts b/packages/data-center/src/provider/affine/affine.ts index c3ec22ca99..c1caa4048d 100644 --- a/packages/data-center/src/provider/affine/affine.ts +++ b/packages/data-center/src/provider/affine/affine.ts @@ -8,6 +8,7 @@ import { inviteMember, removeMember, createWorkspace, + updateWorkspace, } from './apis/workspace'; import { BaseProvider } from '../base'; import { User, Workspace as WS, WorkspaceMeta } from '../../types'; @@ -235,4 +236,8 @@ export class AffineProvider extends BaseProvider { this._logger('Local data loaded'); return nw; } + + public override async publish(id: string, isPublish: boolean): Promise { + await updateWorkspace({ id, public: isPublish }); + } } diff --git a/packages/data-center/src/provider/base.ts b/packages/data-center/src/provider/base.ts index e9c568fa3c..904b04d067 100644 --- a/packages/data-center/src/provider/base.ts +++ b/packages/data-center/src/provider/base.ts @@ -125,6 +125,12 @@ export class BaseProvider { return; } + public async publish(id: string, isPublish: boolean): Promise { + id; + isPublish; + return; + } + public async createWorkspace( meta: WorkspaceMeta ): Promise { diff --git a/packages/data-center/src/workspaces/workspaces.ts b/packages/data-center/src/workspaces/workspaces.ts index ec107dbe69..4dc704e8b7 100644 --- a/packages/data-center/src/workspaces/workspaces.ts +++ b/packages/data-center/src/workspaces/workspaces.ts @@ -91,10 +91,10 @@ export class Workspaces extends Observable { return this._workspaces.some(w => w.id === id); } - public updateWorkspaceMeta(id: string, meta: Partial) { + public updateWorkspaceInfo(id: string, info: Partial) { const index = this._workspaces.findIndex(w => w.id === id); if (index >= 0) { - this._workspaces[index] = { ...this._workspaces[index], ...meta }; + this._workspaces[index] = { ...this._workspaces[index], ...info }; this._updateWorkspaces(this._workspaces); } }