feat(electron): close inactive views when switching workspace (#9601)

fix AF-1355
This commit is contained in:
pengx17
2025-01-10 09:52:42 +00:00
parent 93c585a0e2
commit 7d2ee8d742

View File

@@ -1,12 +1,17 @@
import { Menu, type MenuProps } from '@affine/component'; import { Menu, type MenuProps } from '@affine/component';
import { useNavigateHelper } from '@affine/core/components/hooks/use-navigate-helper'; import { useNavigateHelper } from '@affine/core/components/hooks/use-navigate-helper';
import { GlobalContextService } from '@affine/core/modules/global-context'; import { GlobalContextService } from '@affine/core/modules/global-context';
import { WorkbenchService } from '@affine/core/modules/workbench';
import { import {
type WorkspaceMetadata, type WorkspaceMetadata,
WorkspacesService, WorkspacesService,
} from '@affine/core/modules/workspace'; } from '@affine/core/modules/workspace';
import { track } from '@affine/track'; import { track } from '@affine/track';
import { useLiveData, useServices } from '@toeverything/infra'; import {
useLiveData,
useServiceOptional,
useServices,
} from '@toeverything/infra';
import { useCallback, useEffect, useState } from 'react'; import { useCallback, useEffect, useState } from 'react';
import { UserWithWorkspaceList } from './user-with-workspace-list'; import { UserWithWorkspaceList } from './user-with-workspace-list';
@@ -124,22 +129,33 @@ export const WorkspaceNavigator = ({
...props ...props
}: WorkspaceSelectorProps) => { }: WorkspaceSelectorProps) => {
const { jumpToPage } = useNavigateHelper(); const { jumpToPage } = useNavigateHelper();
const workbench = useServiceOptional(WorkbenchService)?.workbench;
const handleClickWorkspace = useCallback( const handleClickWorkspace = useCallback(
(workspaceMetadata: WorkspaceMetadata) => { (workspaceMetadata: WorkspaceMetadata) => {
onSelectWorkspace?.(workspaceMetadata); onSelectWorkspace?.(workspaceMetadata);
const closeInactiveViews = () =>
workbench?.views$.value.forEach(view => {
if (workbench?.activeView$.value !== view) {
workbench?.close(view);
}
});
if (document.startViewTransition) { if (document.startViewTransition) {
document.startViewTransition(() => { document.startViewTransition(() => {
closeInactiveViews();
jumpToPage(workspaceMetadata.id, 'all'); jumpToPage(workspaceMetadata.id, 'all');
return new Promise(resolve => return new Promise(resolve =>
setTimeout(resolve, 150) setTimeout(resolve, 150)
); /* start transition after 150ms */ ); /* start transition after 150ms */
}); });
} else { } else {
closeInactiveViews();
jumpToPage(workspaceMetadata.id, 'all'); jumpToPage(workspaceMetadata.id, 'all');
} }
}, },
[onSelectWorkspace, jumpToPage] [jumpToPage, onSelectWorkspace, workbench]
); );
const handleCreatedWorkspace = useCallback( const handleCreatedWorkspace = useCallback(
(payload: { metadata: WorkspaceMetadata; defaultDocId?: string }) => { (payload: { metadata: WorkspaceMetadata; defaultDocId?: string }) => {