Skip to content

Commit 2d7702a

Browse files
authored
feat: terminal split screen operation supports single deletion (#3043)
1 parent 7c7ebf9 commit 2d7702a

2 files changed

Lines changed: 40 additions & 1 deletion

File tree

packages/terminal-next/src/browser/component/resize.module.less

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,32 @@
1616
justify-content: flex-end;
1717

1818
.resizeItem {
19+
position: relative;
1920
width: 100%;
2021
height: 100%;
2122
overflow: hidden;
22-
padding: 8px 2px 0 10px;
23+
padding: 8px 20px 0 10px;
24+
.closeBtn {
25+
display: none;
26+
position: absolute;
27+
right: 12px;
28+
top: 10px;
29+
cursor: pointer;
30+
border-radius: 4px;
31+
font-size: 14px;
32+
width: 16px;
33+
height: 16px;
34+
line-height: 16px;
35+
&:hover {
36+
background-color: var(--kt-icon-hoverBackground);
37+
transform: scale(1.1);
38+
}
39+
}
40+
&:hover {
41+
.closeBtn {
42+
display: block;
43+
}
44+
}
2345
}
2446
}
2547

packages/terminal-next/src/browser/component/resize.view.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
import clx from 'classnames';
12
import { observer } from 'mobx-react-lite';
23
import React from 'react';
34

5+
import { useInjectable, getIcon } from '@opensumi/ide-core-browser';
6+
7+
import { ITerminalGroupViewService } from '../../common/controller';
48
import { IWidget, IWidgetGroup } from '../../common/resize';
59

610
import ResizeDelegate from './resize.delegate';
@@ -23,6 +27,7 @@ export default observer((props: IResizeViewProps) => {
2327
const { group, shadow } = props;
2428
const [event, setEvent] = React.useState(false);
2529
const [wholeWidth, setWholeWidth] = React.useState(Infinity);
30+
const view = useInjectable<ITerminalGroupViewService>(ITerminalGroupViewService);
2631
const whole = React.useRef<HTMLDivElement | null>(null);
2732

2833
React.useEffect(() => {
@@ -31,6 +36,10 @@ export default observer((props: IResizeViewProps) => {
3136
}
3237
});
3338

39+
const handleRemoveWidget = React.useCallback((widgetId: string) => {
40+
view.removeWidget(widgetId);
41+
}, []);
42+
3443
return (
3544
<div className={styles.resizeWrapper} ref={whole}>
3645
<div
@@ -77,6 +86,14 @@ export default observer((props: IResizeViewProps) => {
7786
className={styles.resizeItem}
7887
>
7988
{props.draw(widget)}
89+
{group.widgets.length > 1 && (
90+
<div
91+
className={clx(styles.closeBtn, getIcon('close'))}
92+
onClick={() => {
93+
handleRemoveWidget(widget.id);
94+
}}
95+
/>
96+
)}
8097
</div>
8198
))}
8299
</div>

0 commit comments

Comments
 (0)