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
2024-07-29 11:05:22 +00:00
parent 622715d2f3
commit 1efc1d0f5b
88 changed files with 3160 additions and 945 deletions

View File

@@ -1,11 +1,12 @@
import { z } from 'zod';
const _appConfigSchema = z.object({
export const appConfigSchema = z.object({
/** whether to show onboarding first */
onBoarding: z.boolean().optional().default(true),
});
export type AppConfigSchema = z.infer<typeof _appConfigSchema>;
export const defaultAppConfig = _appConfigSchema.parse({});
export type AppConfigSchema = z.infer<typeof appConfigSchema>;
export const defaultAppConfig = appConfigSchema.parse({});
const _storage: Record<number, any> = {};
let _inMemoryId = 0;
@@ -48,7 +49,7 @@ class Storage<T extends object> {
}
get(): T;
get(key: keyof T): T[keyof T];
get<K extends keyof T>(key: K): T[K];
/**
* get config, if key is provided, return the value of the key
* @param key

View File

@@ -105,6 +105,7 @@ export function setupEditorFlags(docCollection: DocCollection) {
type SetStateAction<Value> = Value | ((prev: Value) => Value);
// todo(@pengx17): use global state instead
const appSettingEffect = atomEffect(get => {
const settings = get(appSettingBaseAtom);
// some values in settings should be synced into electron side

View File

@@ -8,4 +8,4 @@ export { Framework } from './framework';
export { createIdentifier } from './identifier';
export type { ResolveOptions } from './provider';
export { FrameworkProvider } from './provider';
export type { GeneralIdentifier } from './types';
export type { GeneralIdentifier, Identifier } from './types';