Skip to content

Commit a4d67b7

Browse files
authored
feat: use design theme as default theme (#100)
1 parent 0af7a38 commit a4d67b7

9 files changed

Lines changed: 50 additions & 72 deletions

File tree

packages/core/src/api/createApp.tsx

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import { disposeMode, disposableCollection } from '../core/patch';
3030

3131
import { modules } from '../core/modules';
3232
import { IconSlim, IDETheme } from '../core/extension/metadata';
33-
import { mergeConfig, getThemeTypeByPreferenceThemeId } from '../core/utils';
33+
import { mergeConfig } from '../core/utils';
3434
import { LayoutComponent, getDefaultLayoutConfig } from '../core/layout';
3535
import { IConfig, IAppInstance } from './types';
3636
import { EXT_WORKER_HOST, WEBVIEW_ENDPOINT } from '../core/env';
@@ -119,18 +119,6 @@ export function createApp({ appConfig, runtimeConfig }: IConfig): IAppInstance {
119119
injector,
120120
}) as IAppInstance;
121121

122-
Object.defineProperty(app, 'currentThemeType', {
123-
get() {
124-
const themeId = getPreferenceThemeId() || opts.defaultPreferences?.['general.theme'];
125-
return getThemeTypeByPreferenceThemeId(themeId, opts.extensionMetadata);
126-
},
127-
});
128-
129-
const _start = app.start;
130-
app.start = async (container: HTMLElement | IAppRenderer) => {
131-
await _start.call(app, container);
132-
};
133-
134122
let destroyed = false;
135123
app.destroy = () => {
136124
if (destroyed) {

packages/core/src/api/createEditor.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ const getDefaultAppConfig = (): IAppOpts => ({
4242
extWorkerHost: EXT_WORKER_HOST,
4343
webviewEndpoint: WEBVIEW_ENDPOINT,
4444
defaultPreferences: {
45-
'general.theme': 'opensumi-light',
45+
'general.theme': 'opensumi-design-light',
4646
'application.confirmExit': 'never',
4747
'editor.autoSave': 'afterDelay',
4848
'editor.guides.bracketPairs': false,
@@ -98,11 +98,6 @@ export function createEditor({ appConfig, runtimeConfig }: IConfig): IAppInstanc
9898

9999
const app = new ClientApp({ ...opts, injector }) as IAppInstance;
100100

101-
const _start = app.start;
102-
app.start = async (container: HTMLElement | IAppRenderer) => {
103-
await _start.call(app, container);
104-
};
105-
106101
let destroyed = false;
107102
app.destroy = () => {
108103
if (destroyed) {

packages/core/src/api/renderApp.tsx

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,13 @@
1-
import React, { useState, useEffect, useRef, useMemo } from 'react';
2-
import { createRoot } from 'react-dom/client';
3-
import { IReporterService, localize, getDebugLogger } from '@opensumi/ide-core-common';
41
import { REPORT_NAME, RuntimeConfig } from '@codeblitzjs/ide-sumi-core';
5-
import { createApp } from './createApp';
2+
import { getDebugLogger, IReporterService, localize } from '@opensumi/ide-core-common';
3+
import React, { useEffect, useMemo, useRef, useState } from 'react';
4+
import { createRoot } from 'react-dom/client';
5+
import { useConstant } from '../core/hooks';
66
import { Root } from '../core/Root';
7-
import { RootProps, LandingProps } from '../core/types';
8-
import {
9-
setSingleInjector,
10-
singleInjector,
11-
useConstant,
12-
isRendered,
13-
setRendered,
14-
setSingleApp,
15-
singleApp,
16-
} from '../core/hooks';
17-
import { IConfig, IAppInstance } from './types';
187
import styles from '../core/style.module.less';
19-
import { IAppRenderer } from '@opensumi/ide-core-browser';
8+
import { LandingProps, RootProps } from '../core/types';
9+
import { createApp } from './createApp';
10+
import { IAppInstance, IConfig } from './types';
2011

2112
export interface IAppRendererProps extends IConfig {
2213
onLoad?(app: IAppInstance): void;
@@ -30,15 +21,15 @@ export const renderApp = (domElement: HTMLElement, props: IAppRendererProps) =>
3021
const className = opts.runtimeConfig.hideEditorTab ? styles['hide-editor-tab'] : '';
3122
const root = createRoot(domElement);
3223

33-
root.render(<Root status="loading" theme={themeType} Landing={Landing} className={className} />);
24+
root.render(<Root status='loading' theme={themeType} Landing={Landing} className={className} />);
3425

3526
app
3627
.start((Children) => {
3728
return new Promise((resolve) => {
3829
root.render(
39-
<Root status="success" theme={themeType} className={className}>
30+
<Root status='success' theme={themeType} className={className}>
4031
<Children />
41-
</Root>
32+
</Root>,
4233
);
4334
});
4435
})
@@ -47,13 +38,13 @@ export const renderApp = (domElement: HTMLElement, props: IAppRendererProps) =>
4738
})
4839
.catch((err: Error) => {
4940
root.render(
50-
<Root status="error" error={err?.message || localize('error.unknown')} theme={themeType} />
41+
<Root status='error' error={err?.message || localize('error.unknown')} theme={themeType} />,
5142
);
5243

5344
(app.injector.get(IReporterService) as IReporterService).point(
5445
REPORT_NAME.ALEX_APP_START_ERROR,
5546
err?.message,
56-
{ error: err }
47+
{ error: err },
5748
);
5849
getDebugLogger().error(err);
5950
setTimeout(() => {
@@ -99,7 +90,7 @@ export const AppRenderer: React.FC<IAppRendererProps> = ({ onLoad, Landing, ...o
9990
err?.message,
10091
{
10192
error: err,
102-
}
93+
},
10394
);
10495
getDebugLogger().error(err);
10596
setTimeout(() => {
@@ -114,7 +105,7 @@ export const AppRenderer: React.FC<IAppRendererProps> = ({ onLoad, Landing, ...o
114105

115106
const rootClassName = useMemo(
116107
() => (opts.runtimeConfig.hideEditorTab ? styles['hide-editor-tab'] : ''),
117-
[opts.runtimeConfig.hideEditorTab]
108+
[opts.runtimeConfig.hideEditorTab],
118109
);
119110

120111
return (

packages/core/src/core/utils.ts

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -46,23 +46,3 @@ export const mergeConfig = (target: IAppOpts, source: IAppConfig) => {
4646
});
4747
return target;
4848
};
49-
50-
export const getThemeTypeByPreferenceThemeId = (
51-
themeId: string,
52-
extensionMetadata: IExtensionBasicMetadata[] | undefined
53-
) => {
54-
let uiTheme: BuiltinTheme | undefined;
55-
if (themeId && extensionMetadata) {
56-
for (const ext of extensionMetadata) {
57-
const theme: IThemeContribution | undefined = ext.packageJSON.contributes?.themes?.find(
58-
(contrib: IThemeContribution) => contrib && getThemeId(contrib) === themeId
59-
);
60-
61-
if (theme?.uiTheme) {
62-
uiTheme = theme.uiTheme;
63-
break;
64-
}
65-
}
66-
}
67-
return getThemeType(uiTheme || 'vs-dark');
68-
};

packages/startup/src/editor/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ const App = () => {
155155
plugins: [editorPlugin],
156156
workspaceDir: project,
157157
defaultPreferences: {
158-
'general.theme': 'opensumi-light',
158+
'general.theme': 'opensumi-design-light',
159159
'editor.scrollBeyondLastLine': false,
160160
'lsif.documentScheme': 'file',
161161
'lsif.enable': true,

packages/startup/src/filesystem/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ const App = () => {
166166
appConfig={{
167167
workspaceDir: 'filesystem',
168168
defaultPreferences: {
169-
'general.theme': 'opensumi-light',
169+
'general.theme': 'opensumi-design-light',
170170
},
171171
}}
172172
runtimeConfig={{

packages/sumi-core/src/client/index.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,18 @@ import {
77
PreferenceScope,
88
PreferenceProvider,
99
IContextKeyService,
10+
getPreferenceThemeId,
1011
} from '@opensumi/ide-core-browser';
1112
import { ClientApp as BasicClientApp } from '@opensumi/ide-core-browser/lib/bootstrap/app';
1213

13-
import { Disposable } from '@opensumi/ide-core-common';
14+
import { Disposable, GeneralSettingsId } from '@opensumi/ide-core-common';
1415

1516
import { OpenSumiExtFsProvider, KtExtFsProviderContribution } from './extension';
1617
import { TextmateLanguageGrammarContribution } from './textmate-language-grammar/index.contribution';
1718
import { ILanguageGrammarRegistrationService } from './textmate-language-grammar/base';
1819
import { LanguageGrammarRegistrationService } from './textmate-language-grammar/language-grammar.service';
1920
import { injectDebugPreferences } from './debug';
20-
import { IServerApp, RootFS, RuntimeConfig } from '../common';
21+
import { IServerApp, RootFS } from '../common';
2122
import { IServerAppOpts, ServerApp } from '../server/core/app';
2223
import {
2324
FileTreeCustomContribution,
@@ -43,14 +44,9 @@ import {
4344
} from './override/vscodeContributesService';
4445

4546
import {
46-
IMonacoCommandServiceProxy,
4747
monacoCommandServiceProxy,
4848
} from './override/monacoOverride/commandService';
49-
import { ICommandServiceToken } from '@opensumi/ide-monaco/lib/browser/contrib/command';
50-
import { MonacoCommandService } from '@opensumi/ide-editor/lib/browser/monaco-contrib/command/command.service';
5149
import {
52-
IMonacoCodeService,
53-
MonacoCodeService,
5450
monacoCodeServiceProxy,
5551
} from './override/monacoOverride/codeEditorService';
5652
import { MonacoContextKeyServiceOverride } from './override/monacoOverride/contextKeyService';
@@ -63,6 +59,7 @@ import { CodeBlitzConnectionHelper } from './override/webConnectionHelper';
6359
import { WebConnectionHelper } from '@opensumi/ide-core-browser/lib/application/runtime';
6460
import { CodeBlitzAINativeContribution } from './ai-native';
6561
import { injectAINativePreferences } from './ai-native/preferences';
62+
import { getThemeTypeByPreferenceThemeId } from '../common/theme';
6663
export * from './override/monacoOverride/codeEditorService';
6764

6865
export { ExtensionManagerModule as ExtensionClientManagerModule } from './extension-manager';
@@ -215,6 +212,11 @@ export class ClientApp extends BasicClientApp {
215212
}
216213
}
217214

215+
get currentThemeType() {
216+
const themeId = getPreferenceThemeId() || this.opts.defaultPreferences?.[GeneralSettingsId.Theme];
217+
return getThemeTypeByPreferenceThemeId(themeId, (this.opts as IAppOpts).extensionMetadata);
218+
}
219+
218220
async dispose() {
219221
super.dispose();
220222
this.disposer.dispose();
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { IExtensionBasicMetadata } from "@codeblitzjs/ide-common";
2+
import { BuiltinTheme, IThemeContribution, getThemeId, getThemeType } from "@opensumi/ide-theme";
3+
4+
export const getThemeTypeByPreferenceThemeId = (
5+
themeId: string,
6+
extensionMetadata: IExtensionBasicMetadata[] | undefined
7+
) => {
8+
let uiTheme: BuiltinTheme | undefined;
9+
if (themeId && extensionMetadata) {
10+
for (const ext of extensionMetadata) {
11+
const theme: IThemeContribution | undefined = ext.packageJSON.contributes?.themes?.find(
12+
(contrib: IThemeContribution) => contrib && getThemeId(contrib) === themeId
13+
);
14+
15+
if (theme?.uiTheme) {
16+
uiTheme = theme.uiTheme;
17+
break;
18+
}
19+
}
20+
}
21+
return getThemeType(uiTheme || 'vs-dark');
22+
};

packages/toolkit/playground/main.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ const App: React.FC = () => {
146146
layoutComponent: LayoutComponent,
147147
// 默认偏好设置
148148
defaultPreferences: {
149-
// 主题色 opensumi-light | opensumi-dark
149+
// 主题色 opensumi-design-light | opensumi-design-dark
150150
'general.theme': 'opensumi-design-dark',
151151
'editor.previewMode': false,
152152
// 'editor.forceReadOnly': true,

0 commit comments

Comments
 (0)