Files
AFFiNE-Mirror/packages/app/src/hooks/use-workspace-helper.ts
2023-01-11 14:57:36 +08:00

74 lines
2.2 KiB
TypeScript

import { useAppState } from '@/providers/app-state-provider';
import { useConfirm } from '@/providers/ConfirmProvider';
import { toast } from '@/ui/toast';
import { Workspace } from '@blocksuite/store';
import router from 'next/router';
export const useWorkspaceHelper = () => {
const { confirm } = useConfirm();
const { dataCenter, currentWorkspace, user, login, currentMetaWorkSpace } =
useAppState();
const createWorkspace = async (name: string) => {
const workspaceInfo = await dataCenter.createWorkspace({
name: name,
});
if (workspaceInfo && workspaceInfo.room) {
const workspace = await dataCenter.loadWorkspace(workspaceInfo.room);
return workspace;
}
return null;
};
// const updateWorkspace = async (workspace: Workspace) => {};
const publishWorkspace = async (workspaceId: string, publish: boolean) => {
await dataCenter.setWorkspacePublish(workspaceId, publish);
};
const updateWorkspace = async (
{ name, avatarBlob }: { name?: string; avatarBlob?: Blob },
workspace: Workspace
) => {
if (name) {
await dataCenter.updateWorkspaceMeta({ name }, workspace);
}
if (avatarBlob) {
const blobId = await dataCenter.setBlob(workspace, avatarBlob);
await dataCenter.updateWorkspaceMeta({ avatar: blobId }, workspace);
}
};
const enableWorkspace = async () => {
confirm({
title: 'Enable AFFiNE Cloud?',
content: `If enabled, the data in this workspace will be backed up and synchronized via AFFiNE Cloud.`,
confirmText: user ? 'Enable' : 'Sign in and Enable',
cancelText: 'Skip',
}).then(async confirm => {
if (confirm && currentWorkspace) {
if (user) {
await login();
}
const newWorkspaceId = await dataCenter.enableWorkspaceCloud(
currentWorkspace
);
router.push(`/workspace/${newWorkspaceId}/setting`);
toast('Enabled success');
}
});
};
const inviteMember = async (email: string) => {
currentMetaWorkSpace &&
(await dataCenter.inviteMember(currentMetaWorkSpace?.id, email));
};
return {
createWorkspace,
publishWorkspace,
updateWorkspace,
enableWorkspace,
inviteMember,
};
};