Skip to content

Commit 889806f

Browse files
authored
feat: support launch editor UI (#2574)
* feat: implement the base launch UI * chore: improve code * feat: implement launch json editor (#2598) * feat: implement launch json schema editor * feat: implement launch json editor * chore: improve code * chore: improve select widget and beauty styles (#2635) * chore: support anyof field * feat: support additional and anyof/oneof field (#2692) * feat: support additional and anyof/oneof field * chore: improve code * fix: use i18n * feat: support add new properties (#2712) * feat: launch UI support delete properties (#2736) * feat: launch UI support delete properties * fix: bug * feat: support for mutual open between launch.json and launch editor (#2738) * fix: module error * feat: support json and launch editor data linkage (#2746) * feat: support json and launch editor data linkage * feat: implement add configuration * fix: typo * feat: support snippet items data linkage (#2755) * fix: enter keyboard remove array field * fix: additional template code * feat: implement configuration items data linkage * fix: array field undefined * fix: add lock * fix: ci * fix: ci * chore: improve styles
1 parent a7d5605 commit 889806f

49 files changed

Lines changed: 2558 additions & 46 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/components/src/button/index.tsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import classNames from 'classnames';
22
import React from 'react';
33

44
import { Dropdown } from '../dropdown';
5+
import { Placement } from '../dropdown/dropdown';
56
import { Icon, DefaultIconKeys, getIcon } from '../icon';
67
import './style.less';
78

@@ -27,6 +28,8 @@ interface MoreActionProps {
2728
more?: boolean;
2829
moreIconClass?: string;
2930
menu?: React.ReactNode;
31+
moreVisible?: boolean;
32+
placement?: Placement;
3033
onVisibleChange?: (visible: boolean) => void;
3134
}
3235

@@ -95,6 +98,8 @@ export const Button = React.memo(
9598
more,
9699
moreIconClass,
97100
menu,
101+
moreVisible,
102+
placement,
98103
title,
99104
onVisibleChange,
100105
...otherProps
@@ -127,9 +132,16 @@ export const Button = React.memo(
127132

128133
const iconNode = iconClass ? <Icon iconClass={iconClass} disabled={disabled} /> : null;
129134

130-
if (more) {
135+
if (menu) {
131136
return (
132-
<Dropdown className={'kt-menu'} overlay={menu} trigger={['click']} onVisibleChange={onVisibleChange}>
137+
<Dropdown
138+
visible={moreVisible}
139+
className={'kt-menu'}
140+
overlay={menu}
141+
trigger={['click']}
142+
onVisibleChange={onVisibleChange}
143+
placement={placement}
144+
>
133145
<button
134146
{...otherProps}
135147
disabled={disabled}

packages/components/src/button/style.less

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@
182182
color: var(--kt-button-disableForeground) !important;
183183
background-color: var(--kt-button-disableBackground) !important;
184184
// 这里是用 box-shadow 来实现边框的,因为 border 会破坏盒模型
185-
box-shadow: var(--kt-button-disableBorder) 0px 0px 0px 1px;
185+
box-shadow: var(--kt-button-disableBorder) 0px 0px 0px 1px inset;
186186
cursor: not-allowed;
187187

188188
& > .@{prefix}-button-secondary-more {

packages/components/src/dropdown/dropdown.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { tuple } from '../utils/type';
77
import { warning } from '../utils/warning';
88

99
const Placements = tuple('topLeft', 'topCenter', 'topRight', 'bottomLeft', 'bottomCenter', 'bottomRight');
10-
type Placement = (typeof Placements)[number];
10+
export type Placement = (typeof Placements)[number];
1111

1212
type OverlayFunc = () => React.ReactNode;
1313

packages/core-browser/src/common/common.command.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ export namespace COMMON_COMMANDS {
282282

283283
export const OPEN_LAUNCH_CONFIGURATION: Command = {
284284
id: 'core.launchConfiguration.open',
285+
label: '%debug.action.open.configuration%',
285286
};
286287

287288
export const ENVIRONMENT_VARIABLE: Command = {

packages/core-browser/src/menu/next/menu.interface.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,18 @@ export class SeparatorMenuItemNode extends MenuNode {
201201
}
202202
}
203203

204+
// 只展示 label 的 menu node
205+
export class LabelMenuItemNode extends MenuNode {
206+
static readonly ID = 'menu.item.node.label';
207+
208+
constructor(label: string) {
209+
super({
210+
id: LabelMenuItemNode.ID,
211+
label,
212+
});
213+
}
214+
}
215+
204216
export interface IMenu extends IDisposable {
205217
/**
206218
* menu-id
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import type { Ajv } from 'ajv';
2+
3+
let _ajv;
4+
export const acquireAjv = (): Ajv | undefined => {
5+
if (!_ajv) {
6+
const Ajv = require('ajv');
7+
_ajv = new Ajv();
8+
return _ajv;
9+
}
10+
return _ajv;
11+
};

packages/debug/__tests__/browser/debug-configuration-manager.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { DebugConfigurationManager } from '@opensumi/ide-debug/lib/browser/debug
1212
import { DebugPreferences } from '@opensumi/ide-debug/lib/browser/debug-preferences';
1313
import { createBrowserInjector } from '@opensumi/ide-dev-tool/src/injector-helper';
1414
import { WorkbenchEditorService } from '@opensumi/ide-editor';
15+
import { IEditorDocumentModelService } from '@opensumi/ide-editor/lib/browser';
1516
import { IFileServiceClient } from '@opensumi/ide-file-service';
1617
import { IWorkspaceService } from '@opensumi/ide-workspace';
1718

@@ -35,6 +36,11 @@ describe('Debug Configuration Manager', () => {
3536
const mockMonacoEditorModel = {
3637
getLineLastNonWhitespaceColumn: jest.fn(),
3738
getPositionAt: jest.fn(() => 1),
39+
getValue: jest.fn(
40+
() => `{
41+
"version": "0.2.0",
42+
"configurations": [`,
43+
),
3844
};
3945

4046
const mockMonacoEditor = {
@@ -165,6 +171,21 @@ describe('Debug Configuration Manager', () => {
165171
useValue: () => mockDebugStorage,
166172
});
167173

174+
mockInjector.overrideProviders({
175+
token: IEditorDocumentModelService,
176+
useValue: {
177+
createModelReference: (uri) => ({
178+
instance: {
179+
uri,
180+
getMonacoModel: () => ({
181+
getValue: jest.fn(() => ''),
182+
}),
183+
},
184+
dispose: jest.fn(),
185+
}),
186+
},
187+
});
188+
168189
debugConfigurationManager = mockInjector.get(DebugConfigurationManager);
169190

170191
await debugConfigurationManager.whenReady;

packages/debug/__tests__/browser/editor/debug-model-manager.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { DebugPreferences } from '@opensumi/ide-debug/lib/browser/debug-preferen
66
import { DebugModelManager } from '@opensumi/ide-debug/lib/browser/editor';
77
import { createBrowserInjector } from '@opensumi/ide-dev-tool/src/injector-helper';
88
import { EditorCollectionService, WorkbenchEditorService } from '@opensumi/ide-editor';
9+
import { IEditorDocumentModelService } from '@opensumi/ide-editor/lib/browser';
910
import { IFileServiceClient } from '@opensumi/ide-file-service';
1011
import { IWorkspaceStorageService, IWorkspaceService } from '@opensumi/ide-workspace';
1112

@@ -82,6 +83,11 @@ describe('Debug Model Manager', () => {
8283
useValue: {},
8384
});
8485

86+
mockInjector.overrideProviders({
87+
token: IEditorDocumentModelService,
88+
useValue: {},
89+
});
90+
8591
debugModelManager = mockInjector.get(DebugModelManager);
8692
});
8793

packages/debug/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
"@opensumi/ide-file-service": "workspace:*",
2424
"@opensumi/ide-task": "workspace:*",
2525
"@opensumi/ide-terminal-next": "workspace:*",
26+
"@rjsf/core": "^5.5.2",
27+
"@rjsf/utils": "^5.5.2",
28+
"@rjsf/validator-ajv8": "^5.5.2",
2629
"anser": "^1.4.9",
2730
"btoa": "^1.2.1"
2831
},

packages/debug/src/browser/components/floating-click-widget/index.module.less

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,8 @@
22
position: absolute;
33
right: 50px;
44
bottom: 30px;
5+
6+
* + * {
7+
margin-left: 12px;
8+
}
59
}

0 commit comments

Comments
 (0)