feat(editor): add user list services (#10555)

This commit is contained in:
Saul-Mirone
2025-03-03 03:15:00 +00:00
parent 629aea48df
commit 4eae3cc66a
7 changed files with 77 additions and 2 deletions

View File

@@ -59,7 +59,6 @@
"./consts": "./src/consts/index.ts",
"./types": "./src/types/index.ts",
"./commands": "./src/commands/index.ts",
"./mixins": "./src/mixins/index.ts",
"./theme": "./src/theme/index.ts",
"./styles": "./src/styles/index.ts",
"./services": "./src/services/index.ts",

View File

@@ -1 +0,0 @@
export {};

View File

@@ -18,4 +18,5 @@ export * from './quick-search-service';
export * from './sidebar-service';
export * from './telemetry-service';
export * from './theme-service';
export * from './user-service';
export * from './virtual-keyboard-service';

View File

@@ -0,0 +1,3 @@
export * from './types';
export * from './user-list-service';
export * from './user-service';

View File

@@ -0,0 +1,25 @@
export type RemovedUserInfo = {
id: string;
removed: true;
};
export type ExistedUserInfo = {
id: string;
name: string;
avatar: string;
removed?: false;
};
export type AffineUserInfo = RemovedUserInfo | ExistedUserInfo;
export function isRemovedUserInfo(
userInfo: AffineUserInfo
): userInfo is RemovedUserInfo {
return Boolean('removed' in userInfo && userInfo.removed);
}
export function isExistedUserInfo(
userInfo: AffineUserInfo
): userInfo is ExistedUserInfo {
return !isRemovedUserInfo(userInfo);
}

View File

@@ -0,0 +1,26 @@
import { createIdentifier } from '@blocksuite/global/di';
import type { ExtensionType } from '@blocksuite/store';
import type { Signal } from '@preact/signals-core';
import type { AffineUserInfo } from './types';
export interface UserListService {
users$: Signal<AffineUserInfo[]>;
hasMore$: Signal<boolean>;
loadMore(): void;
search(keyword: string): void;
}
export const UserListProvider = createIdentifier<UserListService>(
'affine-user-list-service'
);
export function UserListServiceExtension(
service: UserListService
): ExtensionType {
return {
setup(di) {
di.addImpl(UserListProvider, () => service);
},
};
}

View File

@@ -0,0 +1,22 @@
import { createIdentifier } from '@blocksuite/global/di';
import type { ExtensionType } from '@blocksuite/store';
import type { Signal } from '@preact/signals-core';
import type { AffineUserInfo } from './types';
export interface UserService {
getCurrentUser(): AffineUserInfo;
getUserInfo(id: string): Signal<AffineUserInfo | null>;
}
export const UserProvider = createIdentifier<UserService>(
'affine-user-service'
);
export function UserServiceExtension(service: UserService): ExtensionType {
return {
setup(di) {
di.addImpl(UserProvider, () => service);
},
};
}