Skip to content

Commit

Permalink
fix(core): the member list is not refreshed after operating the membe…
Browse files Browse the repository at this point in the history
…r 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
  • Loading branch information
JimmFly committed Dec 12, 2024
1 parent c0e0b12 commit 01b6e43
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import { ArrowRightSmallIcon } from '@blocksuite/icons/rc';
import { FrameworkScope } from '@toeverything/infra';
import { useCallback } from 'react';

import { AiSetting } from './ai';
import { DeleteLeaveWorkspace } from './delete-leave-workspace';
import { EnableCloudPanel } from './enable-cloud';
import { DesktopExportPanel } from './export';
Expand Down Expand Up @@ -73,7 +72,6 @@ export const WorkspaceSettingDetail = ({
<WorkspaceQuotaPanel />
<MembersPanel onChangeSettingState={onChangeSettingState} />
</SettingWrapper>
<AiSetting />
<SharingPanel />
{BUILD_CONFIG.isElectron && (
<SettingWrapper title={t['Storage and Export']()}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ import { SettingRow } from '@affine/component/setting-components';
import { useAsyncCallback } from '@affine/core/components/hooks/affine-async-hooks';
import { Upload } from '@affine/core/components/pure/file-upload';
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 { copyTextToClipboard } from '@affine/core/utils/clipboard';
import { emailRegex } from '@affine/core/utils/email-regex';
Expand Down Expand Up @@ -50,6 +53,7 @@ export const CloudWorkspaceMembersPanel = ({
const hasPaymentFeature = useLiveData(
serverService.server.features$.map(f => f?.payment)
);
const membersService = useService(WorkspaceMembersService);
const permissionService = useService(WorkspacePermissionService);
const isOwner = useLiveData(permissionService.permission.isOwner$);
const isAdmin = useLiveData(permissionService.permission.isAdmin$);
Expand Down Expand Up @@ -111,10 +115,11 @@ export const CloudWorkspaceMembersPanel = ({
message: t['Invitation sent hint'](),
});
setOpen(false);
membersService.members.revalidate();
}
setIsMutating(false);
},
[permissionService.permission, t]
[membersService.members, permissionService.permission, t]
);

const onImportCSV = useAsyncCallback(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ const MemberItem = ({
const t = useI18n();
const [open, setOpen] = useState(false);
const [inputValue, setInputValue] = useState('');
const membersService = useService(WorkspaceMembersService);
const workspace = useService(WorkspaceService).workspace;
const workspaceName = useLiveData(workspace.name$);
const permission = useService(WorkspacePermissionService).permission;
Expand All @@ -139,6 +140,7 @@ const MemberItem = ({
name: member.name || member.email || member.id,
}),
});
membersService.members.revalidate();
}
})
.catch(error => {
Expand All @@ -147,7 +149,7 @@ const MemberItem = ({
message: error.message,
});
});
}, [permission, member, t]);
}, [permission, member, t, membersService]);

const memberStatus = useMemo(() => getMemberStatus(member), [member]);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { MenuItem, notify, useConfirmModal } from '@affine/component';
import {
type Member,
WorkspaceMembersService,
WorkspacePermissionService,
} from '@affine/core/modules/permissions';
import { Permission, WorkspaceMemberStatus } from '@affine/graphql';
Expand All @@ -20,6 +21,7 @@ export const MemberOptions = ({
openAssignModal: () => void;
}) => {
const t = useI18n();
const membersService = useService(WorkspaceMembersService);
const permission = useService(WorkspacePermissionService).permission;
const { openConfirmModal } = useConfirmModal();

Expand All @@ -44,6 +46,7 @@ export const MemberOptions = ({
title: successNotify.title,
message: successNotify.message,
});
membersService.members.revalidate();
}
})
.catch(error => {
Expand All @@ -54,7 +57,7 @@ export const MemberOptions = ({
}),
});
},
[member.id, openConfirmModal, permission, t]
[member, membersService, openConfirmModal, permission, t]
);

const handleAssignOwner = useCallback(() => {
Expand Down Expand Up @@ -83,6 +86,7 @@ export const MemberOptions = ({
}
),
});
membersService.members.revalidate();
}
})
.catch(error => {
Expand All @@ -91,7 +95,7 @@ export const MemberOptions = ({
message: error.message,
});
});
}, [member, permission, t]);
}, [member, membersService, permission, t]);

const handleDecline = useCallback(() => {
openRemoveConfirmModal({
Expand Down Expand Up @@ -124,6 +128,7 @@ export const MemberOptions = ({
name: member.name || member.email || member.id,
}),
});
membersService.members.revalidate();
}
})
.catch(error => {
Expand All @@ -132,7 +137,7 @@ export const MemberOptions = ({
message: error.message,
});
});
}, [member, permission, t]);
}, [member, membersService, permission, t]);
const handleChangeToCollaborator = useCallback(() => {
permission
.adjustMemberPermission(member.id, Permission.Write)
Expand All @@ -146,6 +151,7 @@ export const MemberOptions = ({
name: member.name || member.email || member.id,
}),
});
membersService.members.revalidate();
}
})
.catch(error => {
Expand All @@ -154,7 +160,7 @@ export const MemberOptions = ({
message: error.message,
});
});
}, [member, permission, t]);
}, [member, membersService, permission, t]);

const operationButtonInfo = useMemo(() => {
return [
Expand Down
62 changes: 29 additions & 33 deletions packages/frontend/core/src/modules/permissions/entities/members.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@ import {
catchErrorInto,
effect,
Entity,
exhaustMapSwitchUntilChanged,
fromPromise,
LiveData,
onComplete,
onStart,
} from '@toeverything/infra';
import { EMPTY, map, mergeMap } from 'rxjs';
import { EMPTY, map, mergeMap, switchMap } from 'rxjs';

import { isBackendError, isNetworkError } from '../../cloud';
import type { WorkspaceMembersStore } from '../stores/members';
Expand All @@ -38,38 +37,35 @@ export class WorkspaceMembers extends Entity {

readonly revalidate = effect(
map(() => this.pageNum$.value),
exhaustMapSwitchUntilChanged(
(a, b) => a === b,
pageNum => {
return fromPromise(async signal => {
return this.store.fetchMembers(
this.workspaceService.workspace.id,
pageNum * this.PAGE_SIZE,
this.PAGE_SIZE,
signal
);
}).pipe(
mergeMap(data => {
this.memberCount$.setValue(data.memberCount);
this.pageMembers$.setValue(data.members);
return EMPTY;
}),
backoffRetry({
when: isNetworkError,
count: Infinity,
}),
backoffRetry({
when: isBackendError,
}),
catchErrorInto(this.error$),
onStart(() => {
this.pageMembers$.setValue(undefined);
this.isLoading$.setValue(true);
}),
onComplete(() => this.isLoading$.setValue(false))
switchMap(pageNum => {
return fromPromise(async signal => {
return this.store.fetchMembers(
this.workspaceService.workspace.id,
pageNum * this.PAGE_SIZE,
this.PAGE_SIZE,
signal
);
}
)
}).pipe(
mergeMap(data => {
this.memberCount$.setValue(data.memberCount);
this.pageMembers$.setValue(data.members);
return EMPTY;
}),
backoffRetry({
when: isNetworkError,
count: Infinity,
}),
backoffRetry({
when: isBackendError,
}),
catchErrorInto(this.error$),
onStart(() => {
this.pageMembers$.setValue(undefined);
this.isLoading$.setValue(true);
}),
onComplete(() => this.isLoading$.setValue(false))
);
})
);

setPageNum(pageNum: number) {
Expand Down

0 comments on commit 01b6e43

Please sign in to comment.