feat(core): add open link in app to doc menu (#8597)

add "open in desktop app" menu item for editor

fix AF-1547
This commit is contained in:
pengx17
2024-10-29 05:49:49 +00:00
committed by Peng Xiao
parent 5690720652
commit 835fdc33c0
21 changed files with 222 additions and 117 deletions

View File

@@ -11,7 +11,7 @@ import { I18nProvider } from '@affine/core/modules/i18n';
import { configureElectronStateStorageImpls } from '@affine/core/modules/storage';
import { CustomThemeModifier } from '@affine/core/modules/theme-editor';
import {
ClientSchemaProvider,
ClientSchemeProvider,
PopupWindowProvider,
} from '@affine/core/modules/url';
import { configureSqliteUserspaceStorageProvider } from '@affine/core/modules/userspace';
@@ -71,9 +71,9 @@ framework.impl(PopupWindowProvider, {
});
},
});
framework.impl(ClientSchemaProvider, {
getClientSchema() {
return appInfo?.schema;
framework.impl(ClientSchemeProvider, {
getClientScheme() {
return appInfo?.scheme;
},
});
framework.impl(ValidatorProvider, {

View File

@@ -6,6 +6,7 @@ import { buildType, isDev } from './config';
import { logger } from './logger';
import { uiSubjects } from './ui';
import {
addTab,
getMainWindow,
openUrlInHiddenWindow,
openUrlInMainWindow,
@@ -81,6 +82,24 @@ async function handleAffineUrl(url: string) {
method,
payload,
});
} else if (
urlObj.searchParams.get('new-tab') &&
urlObj.pathname.startsWith('/workspace')
) {
// @todo(@forehalo): refactor router utilities
// basename of /workspace/xxx/yyy is /workspace/xxx
const basename = urlObj.pathname.split('/').slice(0, 3).join('/');
const pathname = '/' + urlObj.pathname.split('/').slice(3).join('/');
await addTab({
basename,
show: true,
view: {
path: {
pathname: pathname,
},
},
});
} else {
const hiddenWindow = urlObj.searchParams.get('hidden')
? await openUrlInHiddenWindow(urlObj)

View File

@@ -41,9 +41,9 @@ const ReleaseTypeSchema = z.enum(['stable', 'beta', 'canary', 'internal']);
const envBuildType = (process.env.BUILD_TYPE || 'canary').trim().toLowerCase();
const buildType = ReleaseTypeSchema.parse(envBuildType);
const isDev = process.env.NODE_ENV === 'development';
let schema =
let scheme =
buildType === 'stable' ? 'affine' : (`affine-${envBuildType}` as Schema);
schema = isDev ? 'affine-dev' : schema;
scheme = isDev ? 'affine-dev' : scheme;
export const appInfo = {
electron: true,
@@ -53,7 +53,7 @@ export const appInfo = {
viewId:
process.argv.find(arg => arg.startsWith('--view-id='))?.split('=')[1] ??
'unknown',
schema,
scheme,
};
function getMainAPIs() {

View File

@@ -7,10 +7,8 @@ import { configureCommonModules } from '@affine/core/modules';
import { AuthService, WebSocketAuthProvider } from '@affine/core/modules/cloud';
import { I18nProvider } from '@affine/core/modules/i18n';
import { configureLocalStorageStateStorageImpls } from '@affine/core/modules/storage';
import {
ClientSchemaProvider,
PopupWindowProvider,
} from '@affine/core/modules/url';
import { PopupWindowProvider } from '@affine/core/modules/url';
import { ClientSchemeProvider } from '@affine/core/modules/url/providers/client-schema';
import { configureIndexedDBUserspaceStorageProvider } from '@affine/core/modules/userspace';
import { configureBrowserWorkbenchModule } from '@affine/core/modules/workbench';
import {
@@ -51,8 +49,8 @@ framework.impl(PopupWindowProvider, {
}).catch(console.error);
},
});
framework.impl(ClientSchemaProvider, {
getClientSchema() {
framework.impl(ClientSchemeProvider, {
getClientScheme() {
return 'affine';
},
});