mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-20 03:26:47 +08:00
feat(editor): add user list services (#10555)
This commit is contained in:
@@ -59,7 +59,6 @@
|
|||||||
"./consts": "./src/consts/index.ts",
|
"./consts": "./src/consts/index.ts",
|
||||||
"./types": "./src/types/index.ts",
|
"./types": "./src/types/index.ts",
|
||||||
"./commands": "./src/commands/index.ts",
|
"./commands": "./src/commands/index.ts",
|
||||||
"./mixins": "./src/mixins/index.ts",
|
|
||||||
"./theme": "./src/theme/index.ts",
|
"./theme": "./src/theme/index.ts",
|
||||||
"./styles": "./src/styles/index.ts",
|
"./styles": "./src/styles/index.ts",
|
||||||
"./services": "./src/services/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 './sidebar-service';
|
||||||
export * from './telemetry-service';
|
export * from './telemetry-service';
|
||||||
export * from './theme-service';
|
export * from './theme-service';
|
||||||
|
export * from './user-service';
|
||||||
export * from './virtual-keyboard-service';
|
export * from './virtual-keyboard-service';
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
export * from './types';
|
||||||
|
export * from './user-list-service';
|
||||||
|
export * from './user-service';
|
||||||
@@ -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