diff --git a/packages/frontend/core/src/components/explorer/context.ts b/packages/frontend/core/src/components/explorer/context.ts index c3ccede0d6..bb35e4b860 100644 --- a/packages/frontend/core/src/components/explorer/context.ts +++ b/packages/frontend/core/src/components/explorer/context.ts @@ -27,14 +27,7 @@ export const createDocExplorerContext = () => selectMode$: new LiveData(false), selectedDocIds$: new LiveData([]), prevCheckAnchorId$: new LiveData(null), - filters$: new LiveData([ - { - type: 'system', - key: 'trash', - value: 'false', - method: 'is', - }, - ]), + filters$: new LiveData([]), groupBy$: new LiveData(undefined), orderBy$: new LiveData(undefined), displayProperties$: new LiveData( diff --git a/packages/frontend/core/src/components/member-selector/index.tsx b/packages/frontend/core/src/components/member-selector/index.tsx index 33762598be..fc5ee20128 100644 --- a/packages/frontend/core/src/components/member-selector/index.tsx +++ b/packages/frontend/core/src/components/member-selector/index.tsx @@ -90,7 +90,6 @@ export const MemberSelector = ({ if (value.length > 0) { setFocusedInlineIndex(selected.length); } - console.log('onInputChange', value); debouncedSearch(value.trim()); }, [debouncedSearch, selected.length] diff --git a/packages/frontend/core/src/desktop/pages/workspace/all-page/all-page.tsx b/packages/frontend/core/src/desktop/pages/workspace/all-page/all-page.tsx index 8dce932103..8162348a87 100644 --- a/packages/frontend/core/src/desktop/pages/workspace/all-page/all-page.tsx +++ b/packages/frontend/core/src/desktop/pages/workspace/all-page/all-page.tsx @@ -143,7 +143,25 @@ export const AllPage = () => { const collectionRulesService = useService(CollectionRulesService); useEffect(() => { const subscription = collectionRulesService - .watch(filters ?? [], groupBy, orderBy) + .watch( + [ + ...(filters ?? []), + { + type: 'system', + key: 'empty-journal', + method: 'is', + value: 'false', + }, + { + type: 'system', + key: 'trash', + method: 'is', + value: 'false', + }, + ], + groupBy, + orderBy + ) .subscribe({ next: result => { explorerContextValue.groups$.next(result.groups); diff --git a/packages/frontend/core/src/modules/cloud/entities/session.ts b/packages/frontend/core/src/modules/cloud/entities/session.ts index 83e2d05885..8081dd6d39 100644 --- a/packages/frontend/core/src/modules/cloud/entities/session.ts +++ b/packages/frontend/core/src/modules/cloud/entities/session.ts @@ -141,7 +141,6 @@ export class AuthSession extends Entity { async updateLabel(label: string) { await this.store.updateLabel(label); - console.log('updateLabel'); await this.waitForRevalidation(); } diff --git a/packages/frontend/core/src/modules/cloud/services/doc-created-by-updated-by-sync.ts b/packages/frontend/core/src/modules/cloud/services/doc-created-by-updated-by-sync.ts index 9e8682b562..302008eeed 100644 --- a/packages/frontend/core/src/modules/cloud/services/doc-created-by-updated-by-sync.ts +++ b/packages/frontend/core/src/modules/cloud/services/doc-created-by-updated-by-sync.ts @@ -106,7 +106,6 @@ export class DocCreatedByUpdatedBySyncService extends Service { .pipe( map(allDocsCreatedBy => { let missingCreatedBy = false; - console.log(allDocsCreatedBy); for (const createdBy of allDocsCreatedBy.values()) { if (!createdBy) { missingCreatedBy = true; diff --git a/packages/frontend/core/src/modules/collection-rules/impls/filters/empty-journal.ts b/packages/frontend/core/src/modules/collection-rules/impls/filters/empty-journal.ts new file mode 100644 index 0000000000..d8c29e72a9 --- /dev/null +++ b/packages/frontend/core/src/modules/collection-rules/impls/filters/empty-journal.ts @@ -0,0 +1,39 @@ +import type { DocsService } from '@affine/core/modules/doc'; +import { Service } from '@toeverything/infra'; +import { combineLatest, map, type Observable } from 'rxjs'; + +import type { FilterProvider } from '../../provider'; +import type { FilterParams } from '../../types'; + +export class EmptyJournalFilterProvider + extends Service + implements FilterProvider +{ + constructor(private readonly docsService: DocsService) { + super(); + } + + filter$(params: FilterParams): Observable> { + return combineLatest([ + this.docsService.allDocsUpdatedDate$(), + this.docsService.propertyValues$('journal'), + ]).pipe( + map(([updatedAts, journalValues]) => { + const match = new Set(); + + for (const { id, updatedDate } of updatedAts) { + const isJournal = journalValues.get(id); + const isEmptyJournal = updatedDate === undefined && isJournal; + if ( + (params.value === 'false' && !isEmptyJournal) || + (params.value === 'true' && isEmptyJournal) + ) { + match.add(id); + } + } + + return match; + }) + ); + } +} diff --git a/packages/frontend/core/src/modules/collection-rules/index.ts b/packages/frontend/core/src/modules/collection-rules/index.ts index 35646485c1..210a45464d 100644 --- a/packages/frontend/core/src/modules/collection-rules/index.ts +++ b/packages/frontend/core/src/modules/collection-rules/index.ts @@ -9,6 +9,7 @@ import { CreatedAtFilterProvider } from './impls/filters/created-at'; import { CreatedByFilterProvider } from './impls/filters/created-by'; import { DatePropertyFilterProvider } from './impls/filters/date'; import { DocPrimaryModeFilterProvider } from './impls/filters/doc-primary-mode'; +import { EmptyJournalFilterProvider } from './impls/filters/empty-journal'; import { JournalFilterProvider } from './impls/filters/journal'; import { PropertyFilterProvider } from './impls/filters/property'; import { SystemFilterProvider } from './impls/filters/system'; @@ -114,6 +115,9 @@ export function configureCollectionRulesModule(framework: Framework) { .impl(FilterProvider('system:updatedBy'), UpdatedByFilterProvider, [ DocsService, ]) + .impl(FilterProvider('system:empty-journal'), EmptyJournalFilterProvider, [ + DocsService, + ]) // --------------- Group By --------------- .impl(GroupByProvider('system'), SystemGroupByProvider) .impl(GroupByProvider('property'), PropertyGroupByProvider, [ diff --git a/packages/frontend/core/src/modules/collection-rules/services/collection-rules.ts b/packages/frontend/core/src/modules/collection-rules/services/collection-rules.ts index a5665928fd..e1d1a6ba62 100644 --- a/packages/frontend/core/src/modules/collection-rules/services/collection-rules.ts +++ b/packages/frontend/core/src/modules/collection-rules/services/collection-rules.ts @@ -159,7 +159,7 @@ export class CollectionRulesService extends Service { }[]; filterErrors: any[]; }> = grouped$.pipe( - throttleTime(500), // throttle the results to avoid too many re-renders + throttleTime(300, undefined, { leading: false, trailing: true }), // throttle the results to avoid too many re-renders map(({ grouped, ordered, filtered, filterErrors }) => { const result: { key: string; items: string[] }[] = []; diff --git a/packages/frontend/core/src/modules/doc/entities/record-list.ts b/packages/frontend/core/src/modules/doc/entities/record-list.ts index 3f8afd7a6d..7aa54c3b65 100644 --- a/packages/frontend/core/src/modules/doc/entities/record-list.ts +++ b/packages/frontend/core/src/modules/doc/entities/record-list.ts @@ -51,6 +51,11 @@ export class DocRecordList extends Entity { [] ); + public readonly nonTrashDocsIds$ = LiveData.from( + this.store.watchNonTrashDocIds(), + [] + ); + public readonly isReady$ = LiveData.from( this.store.watchDocListReady(), false diff --git a/packages/frontend/core/src/modules/doc/stores/docs.ts b/packages/frontend/core/src/modules/doc/stores/docs.ts index 6ecf6a5326..c5f1ac36cd 100644 --- a/packages/frontend/core/src/modules/doc/stores/docs.ts +++ b/packages/frontend/core/src/modules/doc/stores/docs.ts @@ -147,7 +147,7 @@ export class DocsStore extends Store { this.workspaceService.workspace.rootYDoc.getMap('meta'), 'pages' ).pipe( - switchMap(yjsObserveDeep), + switchMap(pages => yjsObservePath(pages, '*.trash')), map(meta => { if (meta instanceof YArray) { return meta @@ -165,7 +165,7 @@ export class DocsStore extends Store { this.workspaceService.workspace.rootYDoc.getMap('meta'), 'pages' ).pipe( - switchMap(yjsObserveDeep), + switchMap(pages => yjsObservePath(pages, '*.trash')), map(meta => { if (meta instanceof YArray) { return meta diff --git a/packages/frontend/core/src/modules/permissions/services/member-search.ts b/packages/frontend/core/src/modules/permissions/services/member-search.ts index e2bab0db46..b5a2f7c760 100644 --- a/packages/frontend/core/src/modules/permissions/services/member-search.ts +++ b/packages/frontend/core/src/modules/permissions/services/member-search.ts @@ -66,7 +66,6 @@ export class MemberSearchService extends Service { } search(searchText?: string) { - console.log('search', searchText); this.reset(); this.searchText$.setValue(searchText ?? ''); this.loadMore();