feat(electron): multi tabs support (#7440)

use https://www.electronjs.org/docs/latest/api/web-contents-view to serve different tab views
added tabs view manager in electron to handle multi-view actions and events.

fix AF-1111
fix AF-999
fix PD-1459
fix AF-964
PD-1458
This commit is contained in:
pengx17 committed 2024-07-29 11:05:22 +00:00
1 parent 622715d2f3
commit 1efc1d0f5b
88 files changed
+3160 -945

No files matched your search

@@ -4,9 +4,12 @@ import '@affine/component/theme/theme.css';
import { NotificationCenter } from '@affine/component';
import { AffineContext } from '@affine/component/context';
import { GlobalLoading } from '@affine/component/global-loading';
import { registerAffineCommand } from '@affine/core/commands';
import { AppFallback } from '@affine/core/components/affine/app-container';
import { configureCommonModules } from '@affine/core/modules';
import { configureAppTabsHeaderModule } from '@affine/core/modules/app-tabs-header';
import { configureElectronStateStorageImpls } from '@affine/core/modules/storage';
import { configureDesktopWorkbenchModule } from '@affine/core/modules/workbench';
import {
configureBrowserWorkspaceFlavours,
configureSqliteWorkspaceEngineStorageProvider,
@@ -19,6 +22,7 @@ import {
import { Telemetry } from '@affine/core/telemetry';
import createEmotionCache from '@affine/core/utils/create-emotion-cache';
import { createI18n, setUpLanguage } from '@affine/i18n';
import { SettingsIcon } from '@blocksuite/icons/rc';
import { CacheProvider } from '@emotion/react';
import {
Framework,
@@ -85,6 +89,8 @@ configureCommonModules(framework);
configureElectronStateStorageImpls(framework);
configureBrowserWorkspaceFlavours(framework);
configureSqliteWorkspaceEngineStorageProvider(framework);
configureDesktopWorkbenchModule(framework);
configureAppTabsHeaderModule(framework);
const frameworkProvider = framework.provider();
// setup application lifecycle events, and emit application start event
@@ -121,3 +127,14 @@ export function App() {
</Suspense>
);
}
registerAffineCommand({
id: 'affine:reload',
category: 'affine:general',
label: 'Reload current tab',
icon: <SettingsIcon />,
keyBinding: '$mod+R',
run() {
location.reload();
},
});