feat(core): add user list service for blocksuite (#10627)

This commit is contained in:
EYHN
2025-03-05 10:06:13 +00:00
parent 47d01f5f66
commit 201c3438ba
9 changed files with 73 additions and 33 deletions
@@ -2,14 +2,14 @@ import {
DatabaseBlockDataSource,
type DatabaseBlockModel,
} from '@blocksuite/affine/blocks';
import { Service } from '@toeverything/infra';
import { LiveData, Service } from '@toeverything/infra';
import { isEqual } from 'lodash-es';
import { combineLatest, distinctUntilChanged, map, Observable } from 'rxjs';
import type { DocsService } from '../../doc';
import type { DocsSearchService } from '../../docs-search';
import type { DatabaseRow, DatabaseValueCell } from '../types';
import { signalToLiveData, signalToObservable } from '../utils';
import { signalToObservable } from '../utils';
const equalComparator = <T>(a: T, b: T) => {
return isEqual(a, b);
@@ -50,14 +50,14 @@ export class DocDatabaseBacklinksService extends Service {
.map<DatabaseValueCell>(id => {
return {
id,
value$: signalToLiveData(
value$: LiveData.fromSignal(
dataSource.cellValueGet$(rowId, id)
).distinctUntilChanged(equalComparator),
property: {
id,
type$: signalToLiveData(dataSource.propertyTypeGet$(id)),
name$: signalToLiveData(dataSource.propertyNameGet$(id)),
data$: signalToLiveData(dataSource.propertyDataGet$(id)),
type$: LiveData.fromSignal(dataSource.propertyTypeGet$(id)),
name$: LiveData.fromSignal(dataSource.propertyNameGet$(id)),
data$: LiveData.fromSignal(dataSource.propertyDataGet$(id)),
},
};
})
@@ -2,7 +2,6 @@ import { DebugLogger } from '@affine/debug';
import { BlockStdScope } from '@blocksuite/affine/block-std';
import { PageEditorBlockSpecs } from '@blocksuite/affine/blocks';
import type { Store } from '@blocksuite/affine/store';
import { LiveData } from '@toeverything/infra';
import { useMemo } from 'react';
import { Observable } from 'rxjs';
@@ -25,22 +24,6 @@ export function signalToObservable<T>(
});
}
export function signalToLiveData<T>(
signal: ReadonlySignal<T>,
defaultValue: T
): LiveData<T>;
export function signalToLiveData<T>(
signal: ReadonlySignal<T>
): LiveData<T | undefined>;
export function signalToLiveData<T>(
signal: ReadonlySignal<T>,
defaultValue?: T
) {
return LiveData.from(signalToObservable(signal), defaultValue);
}
// todo(pengx17): use rc pool?
export function createBlockStdScope(doc: Store) {
logger.debug('createBlockStdScope', doc.id);