fix(core): the member list is not refreshed after operating the member status (#9115)

close AF-1939 AF-1938

fix(core): the member list is not refreshed after operating the member status

chore: temporarily remove the workspace AI switch
This commit is contained in:
JimmFly
2024-12-12 06:33:10 +00:00
parent c0e0b12857
commit 01b6e43c1f
5 changed files with 49 additions and 42 deletions

View File

@@ -11,7 +11,6 @@ import { ArrowRightSmallIcon } from '@blocksuite/icons/rc';
import { FrameworkScope } from '@toeverything/infra'; import { FrameworkScope } from '@toeverything/infra';
import { useCallback } from 'react'; import { useCallback } from 'react';
import { AiSetting } from './ai';
import { DeleteLeaveWorkspace } from './delete-leave-workspace'; import { DeleteLeaveWorkspace } from './delete-leave-workspace';
import { EnableCloudPanel } from './enable-cloud'; import { EnableCloudPanel } from './enable-cloud';
import { DesktopExportPanel } from './export'; import { DesktopExportPanel } from './export';
@@ -73,7 +72,6 @@ export const WorkspaceSettingDetail = ({
<WorkspaceQuotaPanel /> <WorkspaceQuotaPanel />
<MembersPanel onChangeSettingState={onChangeSettingState} /> <MembersPanel onChangeSettingState={onChangeSettingState} />
</SettingWrapper> </SettingWrapper>
<AiSetting />
<SharingPanel /> <SharingPanel />
{BUILD_CONFIG.isElectron && ( {BUILD_CONFIG.isElectron && (
<SettingWrapper title={t['Storage and Export']()}> <SettingWrapper title={t['Storage and Export']()}>

View File

@@ -8,7 +8,10 @@ import { SettingRow } from '@affine/component/setting-components';
import { useAsyncCallback } from '@affine/core/components/hooks/affine-async-hooks'; import { useAsyncCallback } from '@affine/core/components/hooks/affine-async-hooks';
import { Upload } from '@affine/core/components/pure/file-upload'; import { Upload } from '@affine/core/components/pure/file-upload';
import { ServerService, SubscriptionService } from '@affine/core/modules/cloud'; import { ServerService, SubscriptionService } from '@affine/core/modules/cloud';
import { WorkspacePermissionService } from '@affine/core/modules/permissions'; import {
WorkspaceMembersService,
WorkspacePermissionService,
} from '@affine/core/modules/permissions';
import { WorkspaceQuotaService } from '@affine/core/modules/quota'; import { WorkspaceQuotaService } from '@affine/core/modules/quota';
import { copyTextToClipboard } from '@affine/core/utils/clipboard'; import { copyTextToClipboard } from '@affine/core/utils/clipboard';
import { emailRegex } from '@affine/core/utils/email-regex'; import { emailRegex } from '@affine/core/utils/email-regex';
@@ -50,6 +53,7 @@ export const CloudWorkspaceMembersPanel = ({
const hasPaymentFeature = useLiveData( const hasPaymentFeature = useLiveData(
serverService.server.features$.map(f => f?.payment) serverService.server.features$.map(f => f?.payment)
); );
const membersService = useService(WorkspaceMembersService);
const permissionService = useService(WorkspacePermissionService); const permissionService = useService(WorkspacePermissionService);
const isOwner = useLiveData(permissionService.permission.isOwner$); const isOwner = useLiveData(permissionService.permission.isOwner$);
const isAdmin = useLiveData(permissionService.permission.isAdmin$); const isAdmin = useLiveData(permissionService.permission.isAdmin$);
@@ -111,10 +115,11 @@ export const CloudWorkspaceMembersPanel = ({
message: t['Invitation sent hint'](), message: t['Invitation sent hint'](),
}); });
setOpen(false); setOpen(false);
membersService.members.revalidate();
} }
setIsMutating(false); setIsMutating(false);
}, },
[permissionService.permission, t] [membersService.members, permissionService.permission, t]
); );
const onImportCSV = useAsyncCallback( const onImportCSV = useAsyncCallback(

View File

@@ -116,6 +116,7 @@ const MemberItem = ({
const t = useI18n(); const t = useI18n();
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const [inputValue, setInputValue] = useState(''); const [inputValue, setInputValue] = useState('');
const membersService = useService(WorkspaceMembersService);
const workspace = useService(WorkspaceService).workspace; const workspace = useService(WorkspaceService).workspace;
const workspaceName = useLiveData(workspace.name$); const workspaceName = useLiveData(workspace.name$);
const permission = useService(WorkspacePermissionService).permission; const permission = useService(WorkspacePermissionService).permission;
@@ -139,6 +140,7 @@ const MemberItem = ({
name: member.name || member.email || member.id, name: member.name || member.email || member.id,
}), }),
}); });
membersService.members.revalidate();
} }
}) })
.catch(error => { .catch(error => {
@@ -147,7 +149,7 @@ const MemberItem = ({
message: error.message, message: error.message,
}); });
}); });
}, [permission, member, t]); }, [permission, member, t, membersService]);
const memberStatus = useMemo(() => getMemberStatus(member), [member]); const memberStatus = useMemo(() => getMemberStatus(member), [member]);

View File

@@ -1,6 +1,7 @@
import { MenuItem, notify, useConfirmModal } from '@affine/component'; import { MenuItem, notify, useConfirmModal } from '@affine/component';
import { import {
type Member, type Member,
WorkspaceMembersService,
WorkspacePermissionService, WorkspacePermissionService,
} from '@affine/core/modules/permissions'; } from '@affine/core/modules/permissions';
import { Permission, WorkspaceMemberStatus } from '@affine/graphql'; import { Permission, WorkspaceMemberStatus } from '@affine/graphql';
@@ -20,6 +21,7 @@ export const MemberOptions = ({
openAssignModal: () => void; openAssignModal: () => void;
}) => { }) => {
const t = useI18n(); const t = useI18n();
const membersService = useService(WorkspaceMembersService);
const permission = useService(WorkspacePermissionService).permission; const permission = useService(WorkspacePermissionService).permission;
const { openConfirmModal } = useConfirmModal(); const { openConfirmModal } = useConfirmModal();
@@ -44,6 +46,7 @@ export const MemberOptions = ({
title: successNotify.title, title: successNotify.title,
message: successNotify.message, message: successNotify.message,
}); });
membersService.members.revalidate();
} }
}) })
.catch(error => { .catch(error => {
@@ -54,7 +57,7 @@ export const MemberOptions = ({
}), }),
}); });
}, },
[member.id, openConfirmModal, permission, t] [member, membersService, openConfirmModal, permission, t]
); );
const handleAssignOwner = useCallback(() => { const handleAssignOwner = useCallback(() => {
@@ -83,6 +86,7 @@ export const MemberOptions = ({
} }
), ),
}); });
membersService.members.revalidate();
} }
}) })
.catch(error => { .catch(error => {
@@ -91,7 +95,7 @@ export const MemberOptions = ({
message: error.message, message: error.message,
}); });
}); });
}, [member, permission, t]); }, [member, membersService, permission, t]);
const handleDecline = useCallback(() => { const handleDecline = useCallback(() => {
openRemoveConfirmModal({ openRemoveConfirmModal({
@@ -124,6 +128,7 @@ export const MemberOptions = ({
name: member.name || member.email || member.id, name: member.name || member.email || member.id,
}), }),
}); });
membersService.members.revalidate();
} }
}) })
.catch(error => { .catch(error => {
@@ -132,7 +137,7 @@ export const MemberOptions = ({
message: error.message, message: error.message,
}); });
}); });
}, [member, permission, t]); }, [member, membersService, permission, t]);
const handleChangeToCollaborator = useCallback(() => { const handleChangeToCollaborator = useCallback(() => {
permission permission
.adjustMemberPermission(member.id, Permission.Write) .adjustMemberPermission(member.id, Permission.Write)
@@ -146,6 +151,7 @@ export const MemberOptions = ({
name: member.name || member.email || member.id, name: member.name || member.email || member.id,
}), }),
}); });
membersService.members.revalidate();
} }
}) })
.catch(error => { .catch(error => {
@@ -154,7 +160,7 @@ export const MemberOptions = ({
message: error.message, message: error.message,
}); });
}); });
}, [member, permission, t]); }, [member, membersService, permission, t]);
const operationButtonInfo = useMemo(() => { const operationButtonInfo = useMemo(() => {
return [ return [

View File

@@ -5,13 +5,12 @@ import {
catchErrorInto, catchErrorInto,
effect, effect,
Entity, Entity,
exhaustMapSwitchUntilChanged,
fromPromise, fromPromise,
LiveData, LiveData,
onComplete, onComplete,
onStart, onStart,
} from '@toeverything/infra'; } from '@toeverything/infra';
import { EMPTY, map, mergeMap } from 'rxjs'; import { EMPTY, map, mergeMap, switchMap } from 'rxjs';
import { isBackendError, isNetworkError } from '../../cloud'; import { isBackendError, isNetworkError } from '../../cloud';
import type { WorkspaceMembersStore } from '../stores/members'; import type { WorkspaceMembersStore } from '../stores/members';
@@ -38,9 +37,7 @@ export class WorkspaceMembers extends Entity {
readonly revalidate = effect( readonly revalidate = effect(
map(() => this.pageNum$.value), map(() => this.pageNum$.value),
exhaustMapSwitchUntilChanged( switchMap(pageNum => {
(a, b) => a === b,
pageNum => {
return fromPromise(async signal => { return fromPromise(async signal => {
return this.store.fetchMembers( return this.store.fetchMembers(
this.workspaceService.workspace.id, this.workspaceService.workspace.id,
@@ -68,8 +65,7 @@ export class WorkspaceMembers extends Entity {
}), }),
onComplete(() => this.isLoading$.setValue(false)) onComplete(() => this.isLoading$.setValue(false))
); );
} })
)
); );
setPageNum(pageNum: number) { setPageNum(pageNum: number) {