mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-09-22 03:33:06 +08:00
fix(core): cant leave workspace (#6999)
This commit is contained in:
+25
-10
@@ -8,7 +8,7 @@ import { ArrowRightSmallIcon } from '@blocksuite/icons';
|
|||||||
import {
|
import {
|
||||||
GlobalContextService,
|
GlobalContextService,
|
||||||
useLiveData,
|
useLiveData,
|
||||||
useService,
|
useServices,
|
||||||
WorkspaceService,
|
WorkspaceService,
|
||||||
WorkspacesService,
|
WorkspacesService,
|
||||||
} from '@toeverything/infra';
|
} from '@toeverything/infra';
|
||||||
@@ -24,25 +24,34 @@ import { WorkspaceSubPath } from '../../../../../../shared';
|
|||||||
import { WorkspaceDeleteModal } from './delete';
|
import { WorkspaceDeleteModal } from './delete';
|
||||||
|
|
||||||
export const DeleteLeaveWorkspace = () => {
|
export const DeleteLeaveWorkspace = () => {
|
||||||
|
const {
|
||||||
|
workspaceService,
|
||||||
|
globalContextService,
|
||||||
|
workspacePermissionService,
|
||||||
|
workspacesService,
|
||||||
|
} = useServices({
|
||||||
|
WorkspaceService,
|
||||||
|
GlobalContextService,
|
||||||
|
WorkspacePermissionService,
|
||||||
|
WorkspacesService,
|
||||||
|
});
|
||||||
const t = useAFFiNEI18N();
|
const t = useAFFiNEI18N();
|
||||||
const workspace = useService(WorkspaceService).workspace;
|
const workspace = workspaceService.workspace;
|
||||||
const { jumpToSubPath, jumpToIndex } = useNavigateHelper();
|
const { jumpToSubPath, jumpToIndex } = useNavigateHelper();
|
||||||
// fixme: cloud regression
|
// fixme: cloud regression
|
||||||
const [showDelete, setShowDelete] = useState(false);
|
const [showDelete, setShowDelete] = useState(false);
|
||||||
const [showLeave, setShowLeave] = useState(false);
|
const [showLeave, setShowLeave] = useState(false);
|
||||||
const setSettingModal = useSetAtom(openSettingModalAtom);
|
const setSettingModal = useSetAtom(openSettingModalAtom);
|
||||||
|
|
||||||
const workspacesService = useService(WorkspacesService);
|
|
||||||
const workspaceList = useLiveData(workspacesService.list.workspaces$);
|
const workspaceList = useLiveData(workspacesService.list.workspaces$);
|
||||||
const currentWorkspaceId = useLiveData(
|
const currentWorkspaceId = useLiveData(
|
||||||
useService(GlobalContextService).globalContext.workspaceId.$
|
globalContextService.globalContext.workspaceId.$
|
||||||
);
|
);
|
||||||
|
|
||||||
const permissionService = useService(WorkspacePermissionService);
|
const isOwner = useLiveData(workspacePermissionService.permission.isOwner$);
|
||||||
const isOwner = useLiveData(permissionService.permission.isOwner$);
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
permissionService.permission.revalidate();
|
workspacePermissionService.permission.revalidate();
|
||||||
}, [permissionService]);
|
}, [workspacePermissionService]);
|
||||||
|
|
||||||
const onLeaveOrDelete = useCallback(() => {
|
const onLeaveOrDelete = useCallback(() => {
|
||||||
if (isOwner !== null) {
|
if (isOwner !== null) {
|
||||||
@@ -73,18 +82,24 @@ export const DeleteLeaveWorkspace = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await workspacesService.deleteWorkspace(workspace.meta);
|
if (isOwner) {
|
||||||
|
await workspacesService.deleteWorkspace(workspace.meta);
|
||||||
|
} else {
|
||||||
|
await workspacePermissionService.leaveWorkspace();
|
||||||
|
}
|
||||||
notify.success({ title: t['Successfully deleted']() });
|
notify.success({ title: t['Successfully deleted']() });
|
||||||
}, [
|
}, [
|
||||||
setSettingModal,
|
setSettingModal,
|
||||||
currentWorkspaceId,
|
currentWorkspaceId,
|
||||||
workspace.id,
|
workspace.id,
|
||||||
workspace.meta,
|
workspace.meta,
|
||||||
workspacesService,
|
isOwner,
|
||||||
t,
|
t,
|
||||||
workspaceList,
|
workspaceList,
|
||||||
jumpToSubPath,
|
jumpToSubPath,
|
||||||
jumpToIndex,
|
jumpToIndex,
|
||||||
|
workspacesService,
|
||||||
|
workspacePermissionService,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import {
|
|||||||
type Framework,
|
type Framework,
|
||||||
WorkspaceScope,
|
WorkspaceScope,
|
||||||
WorkspaceService,
|
WorkspaceService,
|
||||||
|
WorkspacesService,
|
||||||
} from '@toeverything/infra';
|
} from '@toeverything/infra';
|
||||||
|
|
||||||
import { WorkspacePermission } from './entities/permission';
|
import { WorkspacePermission } from './entities/permission';
|
||||||
@@ -14,7 +15,11 @@ import { WorkspacePermissionStore } from './stores/permission';
|
|||||||
export function configurePermissionsModule(framework: Framework) {
|
export function configurePermissionsModule(framework: Framework) {
|
||||||
framework
|
framework
|
||||||
.scope(WorkspaceScope)
|
.scope(WorkspaceScope)
|
||||||
.service(WorkspacePermissionService)
|
.service(WorkspacePermissionService, [
|
||||||
|
WorkspaceService,
|
||||||
|
WorkspacesService,
|
||||||
|
WorkspacePermissionStore,
|
||||||
|
])
|
||||||
.store(WorkspacePermissionStore, [GraphQLService])
|
.store(WorkspacePermissionStore, [GraphQLService])
|
||||||
.entity(WorkspacePermission, [WorkspaceService, WorkspacePermissionStore]);
|
.entity(WorkspacePermission, [WorkspaceService, WorkspacePermissionStore]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,25 @@
|
|||||||
|
import type { WorkspaceService, WorkspacesService } from '@toeverything/infra';
|
||||||
import { Service } from '@toeverything/infra';
|
import { Service } from '@toeverything/infra';
|
||||||
|
|
||||||
import { WorkspacePermission } from '../entities/permission';
|
import { WorkspacePermission } from '../entities/permission';
|
||||||
|
import type { WorkspacePermissionStore } from '../stores/permission';
|
||||||
|
|
||||||
export class WorkspacePermissionService extends Service {
|
export class WorkspacePermissionService extends Service {
|
||||||
permission = this.framework.createEntity(WorkspacePermission);
|
permission = this.framework.createEntity(WorkspacePermission);
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private readonly workspaceService: WorkspaceService,
|
||||||
|
private readonly workspacesService: WorkspacesService,
|
||||||
|
private readonly store: WorkspacePermissionStore
|
||||||
|
) {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
async leaveWorkspace() {
|
||||||
|
await this.store.leaveWorkspace(
|
||||||
|
this.workspaceService.workspace.id,
|
||||||
|
this.workspaceService.workspace.name$.value ?? ''
|
||||||
|
);
|
||||||
|
this.workspacesService.list.revalidate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { GraphQLService } from '@affine/core/modules/cloud';
|
import type { GraphQLService } from '@affine/core/modules/cloud';
|
||||||
import { getIsOwnerQuery } from '@affine/graphql';
|
import { getIsOwnerQuery, leaveWorkspaceMutation } from '@affine/graphql';
|
||||||
import { Store } from '@toeverything/infra';
|
import { Store } from '@toeverything/infra';
|
||||||
|
|
||||||
export class WorkspacePermissionStore extends Store {
|
export class WorkspacePermissionStore extends Store {
|
||||||
@@ -18,4 +18,17 @@ export class WorkspacePermissionStore extends Store {
|
|||||||
|
|
||||||
return isOwner.isOwner;
|
return isOwner.isOwner;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param workspaceName for send email
|
||||||
|
*/
|
||||||
|
async leaveWorkspace(workspaceId: string, workspaceName: string) {
|
||||||
|
await this.graphqlService.gql({
|
||||||
|
query: leaveWorkspaceMutation,
|
||||||
|
variables: {
|
||||||
|
workspaceId,
|
||||||
|
workspaceName,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user