mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-04 08:38:34 +00:00
feat(editor): add user list services (#10555)
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
export {};
|
||||
@@ -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';
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
export * from './types';
|
||||
export * from './user-list-service';
|
||||
export * from './user-service';
|
||||
25
blocksuite/affine/shared/src/services/user-service/types.ts
Normal file
25
blocksuite/affine/shared/src/services/user-service/types.ts
Normal 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);
|
||||
}
|
||||
@@ -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);
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -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);
|
||||
},
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user