feat(editor): add sidebar service (#9761)

This commit is contained in:
L-Sun
2025-01-17 11:29:20 +00:00
parent 779029148e
commit ad814a0f4f
4 changed files with 40 additions and 0 deletions

View File

@@ -13,5 +13,6 @@ export * from './open-doc-config';
export * from './page-viewport-service'; export * from './page-viewport-service';
export * from './parse-url-service'; export * from './parse-url-service';
export * from './quick-search-service'; export * from './quick-search-service';
export * from './sidebar-service';
export * from './telemetry-service'; export * from './telemetry-service';
export * from './theme-service'; export * from './theme-service';

View File

@@ -0,0 +1,18 @@
import { createIdentifier } from '@blocksuite/global/di';
import type { ExtensionType } from '@blocksuite/store';
export interface SidebarService {
open: (tabId?: string) => void;
close: () => void;
getTabIds: () => string[];
}
export const SidebarExtensionIdentifier = createIdentifier<SidebarService>(
'AffineSidebarExtension'
);
export const SidebarExtension = (service: SidebarService): ExtensionType => ({
setup: di => {
di.addImpl(SidebarExtensionIdentifier, () => service);
},
});

View File

@@ -64,6 +64,7 @@ import {
patchPeekViewService, patchPeekViewService,
patchQuickSearchService, patchQuickSearchService,
patchReferenceRenderer, patchReferenceRenderer,
patchSideBarService,
type ReferenceReactRenderer, type ReferenceReactRenderer,
} from './specs/custom/spec-patchers'; } from './specs/custom/spec-patchers';
import { createEdgelessModeSpecs } from './specs/edgeless'; import { createEdgelessModeSpecs } from './specs/edgeless';
@@ -167,6 +168,7 @@ const usePatchSpecs = (mode: DocMode) => {
patched = patched.concat(patchParseDocUrlExtension(framework)); patched = patched.concat(patchParseDocUrlExtension(framework));
patched = patched.concat(patchGenerateDocUrlExtension(framework)); patched = patched.concat(patchGenerateDocUrlExtension(framework));
patched = patched.concat(patchQuickSearchService(framework)); patched = patched.concat(patchQuickSearchService(framework));
patched = patched.concat(patchSideBarService(framework));
if (BUILD_CONFIG.isMobileEdition) { if (BUILD_CONFIG.isMobileEdition) {
patched = patched.concat(patchForMobile()); patched = patched.concat(patchForMobile());
} }

View File

@@ -24,6 +24,7 @@ import {
} from '@affine/core/modules/quicksearch'; } from '@affine/core/modules/quicksearch';
import { ExternalLinksQuickSearchSession } from '@affine/core/modules/quicksearch/impls/external-links'; import { ExternalLinksQuickSearchSession } from '@affine/core/modules/quicksearch/impls/external-links';
import { JournalsQuickSearchSession } from '@affine/core/modules/quicksearch/impls/journals'; import { JournalsQuickSearchSession } from '@affine/core/modules/quicksearch/impls/journals';
import { WorkbenchService } from '@affine/core/modules/workbench';
import { WorkspaceService } from '@affine/core/modules/workspace'; import { WorkspaceService } from '@affine/core/modules/workspace';
import { DebugLogger } from '@affine/debug'; import { DebugLogger } from '@affine/debug';
import { I18n } from '@affine/i18n'; import { I18n } from '@affine/i18n';
@@ -61,6 +62,7 @@ import {
PeekViewExtension, PeekViewExtension,
QuickSearchExtension, QuickSearchExtension,
ReferenceNodeConfigExtension, ReferenceNodeConfigExtension,
SidebarExtension,
} from '@blocksuite/affine/blocks'; } from '@blocksuite/affine/blocks';
import { Bound } from '@blocksuite/affine/global/utils'; import { Bound } from '@blocksuite/affine/global/utils';
import { import {
@@ -665,3 +667,20 @@ export function patchForEdgelessNoteConfig(
reactToLit(<EdgelessNoteHeader note={note} />), reactToLit(<EdgelessNoteHeader note={note} />),
}); });
} }
export function patchSideBarService(framework: FrameworkProvider) {
const { workbench } = framework.get(WorkbenchService);
return SidebarExtension({
open: (tabId?: string) => {
workbench.openSidebar();
workbench.activeView$.value.activeSidebarTab(tabId ?? null);
},
close: () => {
workbench.closeSidebar();
},
getTabIds: () => {
return workbench.activeView$.value.sidebarTabs$.value.map(tab => tab.id);
},
});
}