feat(editor): put current user in first on database user select (#13320)

This commit is contained in:
EYHN
2025-07-27 15:53:17 +08:00
committed by GitHub
parent be55442f38
commit 9899fad000
4 changed files with 46 additions and 9 deletions

View File

@@ -48,10 +48,24 @@ class MemberManager {
selectedMemberId = signal<string | null>(null);
filteredMembers = computed(() => {
return this.ops.userListService.users$.value.filter(
member =>
!member.removed && !this.selectedMembers.value.includes(member.id)
);
const isSearching = this.userListService.searchText$.value !== '';
if (isSearching) {
return this.ops.userListService.users$.value.filter(
member =>
!member.removed && !this.selectedMembers.value.includes(member.id)
);
} else {
const currentUser = this.ops.userService.currentUserInfo$.value;
return [
...(currentUser ? [currentUser] : []),
...this.ops.userListService.users$.value.filter(
member => member.id !== currentUser?.id
),
].filter(
member =>
!member.removed && !this.selectedMembers.value.includes(member.id)
);
}
});
constructor(private readonly ops: MemberManagerOptions) {}

View File

@@ -1,4 +1,4 @@
import { PublicUserService } from '@affine/core/modules/cloud';
import { AuthService, PublicUserService } from '@affine/core/modules/cloud';
import { MemberSearchService } from '@affine/core/modules/permissions';
import {
type ViewExtensionContext,
@@ -31,10 +31,11 @@ export class CloudViewExtension extends ViewExtensionProvider<CloudViewOptions>
}
const memberSearchService = framework.get(MemberSearchService);
const publicUserService = framework.get(PublicUserService);
const authService = framework.get(AuthService);
context.register([
patchUserListExtensions(memberSearchService),
patchUserExtensions(publicUserService),
patchUserExtensions(publicUserService, authService),
]);
}
}

View File

@@ -1,9 +1,30 @@
import type { PublicUserService } from '@affine/core/modules/cloud';
import type {
AuthService,
PublicUserService,
} from '@affine/core/modules/cloud';
import { UserFriendlyError } from '@affine/error';
import { UserServiceExtension } from '@blocksuite/affine/shared/services';
import {
type AffineUserInfo,
UserServiceExtension,
} from '@blocksuite/affine/shared/services';
export function patchUserExtensions(publicUserService: PublicUserService) {
export function patchUserExtensions(
publicUserService: PublicUserService,
authService: AuthService
) {
return UserServiceExtension({
// eslint-disable-next-line rxjs/finnish
currentUserInfo$: authService.session.account$.map(account => {
if (!account) {
return null;
}
return {
id: account.id,
name: account.label,
avatar: account.avatar,
removed: false,
} as AffineUserInfo;
}).signal,
// eslint-disable-next-line rxjs/finnish
userInfo$(id) {
return publicUserService.publicUser$(id).signal;