@electerm/electerm-react 2.3.126 → 2.3.151
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/common/constants.js +2 -1
- package/client/common/db.js +2 -1
- package/client/common/download.jsx +15 -0
- package/client/common/init-setting-item.js +5 -0
- package/client/components/ai/ai-cache.jsx +1 -1
- package/client/components/batch-op/batch-op.jsx +4 -9
- package/client/components/bookmark-form/common/bookmark-group-tree-format.js +4 -3
- package/client/components/bookmark-form/common/color-picker.jsx +16 -5
- package/client/components/bookmark-form/common/color-picker.styl +1 -2
- package/client/components/bookmark-form/common/connection-hopping.jsx +1 -0
- package/client/components/bookmark-form/common/ssh-host-selector.jsx +1 -1
- package/client/components/bookmark-form/common/ssh-tunnels.jsx +1 -0
- package/client/components/bookmark-form/config/common-fields.js +1 -0
- package/client/components/bookmark-form/tree-delete.jsx +18 -15
- package/client/components/common/drawer.jsx +62 -0
- package/client/components/common/drawer.styl +34 -0
- package/client/components/common/input-auto-focus.jsx +16 -3
- package/client/components/common/logo-elem.jsx +1 -1
- package/client/components/common/password.jsx +1 -1
- package/client/components/footer/footer.styl +1 -0
- package/client/components/main/main.jsx +4 -1
- package/client/components/profile/profile-form.jsx +1 -1
- package/client/components/quick-commands/qm.styl +21 -1
- package/client/components/quick-commands/quick-commands-box.jsx +28 -36
- package/client/components/quick-commands/quick-commands-form.jsx +1 -1
- package/client/components/quick-commands/quick-commands-list-form.jsx +1 -0
- package/client/components/quick-commands/quick-commands-select.jsx +1 -1
- package/client/components/session/session.jsx +1 -1
- package/client/components/setting-panel/deep-link-control.jsx +1 -0
- package/client/components/setting-panel/list.jsx +1 -1
- package/client/components/setting-panel/list.styl +1 -1
- package/client/components/setting-panel/setting-common.jsx +2 -1
- package/client/components/setting-panel/setting-modal.jsx +13 -0
- package/client/components/setting-panel/setting-terminal.jsx +1 -1
- package/client/components/setting-panel/setting-wrap.jsx +5 -11
- package/client/components/setting-panel/setting-wrap.styl +8 -6
- package/client/components/setting-panel/start-session-select.jsx +3 -3
- package/client/components/setting-panel/tab-widgets.jsx +35 -0
- package/client/components/sftp/address-bookmark-item.jsx +1 -1
- package/client/components/sftp/paged-list.jsx +2 -1
- package/client/components/sftp/permission-render.jsx +1 -1
- package/client/components/sftp/sftp-entry.jsx +1 -1
- package/client/components/sftp/sftp.styl +13 -0
- package/client/components/sidebar/index.jsx +12 -2
- package/client/components/sidebar/transfer-history-modal.jsx +1 -1
- package/client/components/theme/theme-list-item.jsx +4 -3
- package/client/components/tree-list/move-item-modal.jsx +171 -36
- package/client/components/tree-list/tree-list.jsx +3 -15
- package/client/components/tree-list/tree-list.styl +6 -1
- package/client/components/vnc/vnc-session.jsx +1 -1
- package/client/components/widgets/widget-control.jsx +64 -0
- package/client/components/widgets/widget-form.jsx +115 -0
- package/client/components/widgets/widget-instance.jsx +46 -0
- package/client/components/widgets/widget-instances.jsx +10 -0
- package/client/components/widgets/widgets-list.jsx +155 -0
- package/client/store/init-state.js +9 -1
- package/client/store/setting.js +1 -3
- package/client/store/store.js +2 -0
- package/client/store/widgets.js +59 -0
- package/package.json +1 -1
package/client/common/db.js
CHANGED
|
@@ -5,7 +5,22 @@ import { notification } from 'antd'
|
|
|
5
5
|
import ShowItem from '../components/common/show-item'
|
|
6
6
|
import { chooseSaveDirectory } from './choose-save-folder'
|
|
7
7
|
|
|
8
|
+
function downloadForBrowser (filename, text) {
|
|
9
|
+
const blob = new Blob([text], { type: 'text/plain;charset=utf-8' })
|
|
10
|
+
const url = URL.createObjectURL(blob)
|
|
11
|
+
const a = document.createElement('a')
|
|
12
|
+
a.href = url
|
|
13
|
+
a.download = filename
|
|
14
|
+
document.body.appendChild(a)
|
|
15
|
+
a.click()
|
|
16
|
+
document.body.removeChild(a)
|
|
17
|
+
URL.revokeObjectURL(url)
|
|
18
|
+
}
|
|
19
|
+
|
|
8
20
|
export default async function download (filename, text) {
|
|
21
|
+
if (window.et.isWebApp) {
|
|
22
|
+
return downloadForBrowser(filename, text)
|
|
23
|
+
}
|
|
9
24
|
const savePath = await chooseSaveDirectory()
|
|
10
25
|
if (!savePath) {
|
|
11
26
|
return
|
|
@@ -11,9 +11,9 @@ import {
|
|
|
11
11
|
Input,
|
|
12
12
|
Button,
|
|
13
13
|
Table,
|
|
14
|
-
Drawer,
|
|
15
14
|
Tabs
|
|
16
15
|
} from 'antd'
|
|
16
|
+
import Drawer from '../common/drawer'
|
|
17
17
|
import {
|
|
18
18
|
sidebarWidth,
|
|
19
19
|
statusMap,
|
|
@@ -672,15 +672,10 @@ export default class BatchOp extends PureComponent {
|
|
|
672
672
|
const pops = {
|
|
673
673
|
open: showBatchOp,
|
|
674
674
|
onClose: this.handleCancel,
|
|
675
|
-
className: 'setting-wrap',
|
|
676
|
-
|
|
675
|
+
className: 'setting-wrap batch-op-wrap',
|
|
676
|
+
size: innerWidth - sidebarWidth,
|
|
677
677
|
zIndex: 888,
|
|
678
|
-
placement: 'left'
|
|
679
|
-
styles: {
|
|
680
|
-
header: {
|
|
681
|
-
display: 'none'
|
|
682
|
-
}
|
|
683
|
-
}
|
|
678
|
+
placement: 'left'
|
|
684
679
|
}
|
|
685
680
|
return (
|
|
686
681
|
<Drawer
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* create bookmark group tree data
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
export default (bookmarkGroups = [], disabledId = '', returnMap = false) => {
|
|
5
|
+
export default (bookmarkGroups = [], disabledId = '', returnMap = false, currentParentId = '') => {
|
|
6
6
|
const btree = new Map(bookmarkGroups.map(d => [d.id, d]))
|
|
7
7
|
function buildSubCats (id) {
|
|
8
8
|
const x = btree.get(id)
|
|
@@ -12,7 +12,8 @@ export default (bookmarkGroups = [], disabledId = '', returnMap = false) => {
|
|
|
12
12
|
const y = {
|
|
13
13
|
key: x.id,
|
|
14
14
|
value: x.id,
|
|
15
|
-
title: x.title
|
|
15
|
+
title: x.title,
|
|
16
|
+
disabled: x.id === disabledId || x.id === currentParentId
|
|
16
17
|
}
|
|
17
18
|
y.children = (x.bookmarkGroupIds || []).map(buildSubCats).filter(d => d)
|
|
18
19
|
if (!y.children.length) {
|
|
@@ -26,7 +27,7 @@ export default (bookmarkGroups = [], disabledId = '', returnMap = false) => {
|
|
|
26
27
|
title: d.title,
|
|
27
28
|
value: d.id,
|
|
28
29
|
key: d.id,
|
|
29
|
-
disabled: d.id === disabledId,
|
|
30
|
+
disabled: d.id === disabledId || d.id === currentParentId,
|
|
30
31
|
children: (d.bookmarkGroupIds || []).map(buildSubCats).filter(d => d)
|
|
31
32
|
}
|
|
32
33
|
return r
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React, { useState } from 'react'
|
|
2
|
-
import { Popover } from 'antd'
|
|
3
|
-
import { HexColorPicker, RgbaColorPicker } from 'react-colorful'
|
|
2
|
+
import { Popover, ColorPicker as AntColorPicker } from 'antd'
|
|
4
3
|
import { defaultColors, getRandomHexColor } from '../../../common/rand-hex-color.js'
|
|
5
4
|
import { HexInput } from './hex-input.jsx'
|
|
6
5
|
import './color-picker.styl'
|
|
@@ -18,8 +17,11 @@ export const ColorPicker = React.forwardRef((props, ref) => {
|
|
|
18
17
|
setVisible(vis)
|
|
19
18
|
}
|
|
20
19
|
|
|
20
|
+
function onColorChange (color) {
|
|
21
|
+
handleChange(props.isRgba ? color.toRgbString() : color.toHexString())
|
|
22
|
+
}
|
|
23
|
+
|
|
21
24
|
function renderContent () {
|
|
22
|
-
const Picker = props.isRgba ? RgbaColorPicker : HexColorPicker
|
|
23
25
|
return (
|
|
24
26
|
<div className='color-picker-box'>
|
|
25
27
|
<div className='fix'>
|
|
@@ -40,7 +42,10 @@ export const ColorPicker = React.forwardRef((props, ref) => {
|
|
|
40
42
|
}
|
|
41
43
|
</div>
|
|
42
44
|
<div className='fright'>
|
|
43
|
-
<
|
|
45
|
+
<AntColorPicker
|
|
46
|
+
value={value}
|
|
47
|
+
onChange={onColorChange}
|
|
48
|
+
/>
|
|
44
49
|
</div>
|
|
45
50
|
</div>
|
|
46
51
|
<div className='pd1y'>
|
|
@@ -57,7 +62,13 @@ export const ColorPicker = React.forwardRef((props, ref) => {
|
|
|
57
62
|
if (props.disabled) return inner
|
|
58
63
|
|
|
59
64
|
return (
|
|
60
|
-
<Popover
|
|
65
|
+
<Popover
|
|
66
|
+
content={renderContent()}
|
|
67
|
+
trigger='click'
|
|
68
|
+
open={visible}
|
|
69
|
+
placement='bottomLeft'
|
|
70
|
+
onOpenChange={handleVisibleChange}
|
|
71
|
+
>
|
|
61
72
|
{inner}
|
|
62
73
|
</Popover>
|
|
63
74
|
)
|
|
@@ -52,7 +52,7 @@ export default function SshHostSelector ({ ips = [], useIp, form, onBlur, onPast
|
|
|
52
52
|
<InputAutoFocus
|
|
53
53
|
name='host'
|
|
54
54
|
onBlur={props.onBlur}
|
|
55
|
-
onPaste={e =>
|
|
55
|
+
onPaste={e => onPaste(e, form)}
|
|
56
56
|
addonBefore={<ColorPickerItem />}
|
|
57
57
|
/>
|
|
58
58
|
</FormItem>
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import StartSessionSelect from '../setting-panel/start-session-select'
|
|
2
2
|
import {
|
|
3
3
|
Tree,
|
|
4
|
-
Button
|
|
4
|
+
Button,
|
|
5
|
+
Space
|
|
5
6
|
} from 'antd'
|
|
6
7
|
import { defaultBookmarkGroupId, settingMap } from '../../common/constants'
|
|
7
8
|
import deepCopy from 'json-deep-copy'
|
|
@@ -48,21 +49,23 @@ export default class BookmarkTreeDelete extends StartSessionSelect {
|
|
|
48
49
|
const len = checkedKeys.length
|
|
49
50
|
return (
|
|
50
51
|
<div>
|
|
51
|
-
<div className='
|
|
52
|
-
<
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
52
|
+
<div className='pd2'>
|
|
53
|
+
<Space.Compact>
|
|
54
|
+
<Button
|
|
55
|
+
type='primary'
|
|
56
|
+
disabled={!len}
|
|
57
|
+
onClick={this.handleDel}
|
|
58
|
+
>
|
|
59
|
+
{e('delSelected')} ({len})
|
|
60
|
+
</Button>
|
|
61
|
+
<Button
|
|
62
|
+
onClick={this.handleCancel}
|
|
63
|
+
>
|
|
64
|
+
{e('cancel')}
|
|
65
|
+
</Button>
|
|
66
|
+
</Space.Compact>
|
|
67
|
+
<Tree {...rProps} />
|
|
64
68
|
</div>
|
|
65
|
-
<Tree {...rProps} />
|
|
66
69
|
</div>
|
|
67
70
|
)
|
|
68
71
|
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple drawer component without animation
|
|
3
|
+
* Replaces antd Drawer for better performance
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import classnames from 'classnames'
|
|
7
|
+
import './drawer.styl'
|
|
8
|
+
|
|
9
|
+
export default function Drawer (props) {
|
|
10
|
+
const {
|
|
11
|
+
open,
|
|
12
|
+
placement = 'left',
|
|
13
|
+
size,
|
|
14
|
+
zIndex = 1000,
|
|
15
|
+
className,
|
|
16
|
+
children,
|
|
17
|
+
styles = {},
|
|
18
|
+
onClose
|
|
19
|
+
} = props
|
|
20
|
+
|
|
21
|
+
function handleMaskClick (e) {
|
|
22
|
+
if (e.target === e.currentTarget && onClose) {
|
|
23
|
+
onClose()
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (!open) {
|
|
28
|
+
return null
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const drawerStyle = {
|
|
32
|
+
zIndex
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const contentStyle = {
|
|
36
|
+
width: typeof size === 'number' ? `${size}px` : size,
|
|
37
|
+
...styles.content
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const cls = classnames(
|
|
41
|
+
'custom-drawer',
|
|
42
|
+
`custom-drawer-${placement}`,
|
|
43
|
+
className
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<div className={cls} style={drawerStyle}>
|
|
48
|
+
<div
|
|
49
|
+
className='custom-drawer-mask'
|
|
50
|
+
onClick={handleMaskClick}
|
|
51
|
+
/>
|
|
52
|
+
<div
|
|
53
|
+
className='custom-drawer-content-wrapper'
|
|
54
|
+
style={contentStyle}
|
|
55
|
+
>
|
|
56
|
+
<div className='custom-drawer-content'>
|
|
57
|
+
{children}
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
)
|
|
62
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
.custom-drawer
|
|
2
|
+
position fixed
|
|
3
|
+
top 0
|
|
4
|
+
left 43px
|
|
5
|
+
right 0
|
|
6
|
+
bottom 0
|
|
7
|
+
|
|
8
|
+
.custom-drawer-mask
|
|
9
|
+
position absolute
|
|
10
|
+
top 0
|
|
11
|
+
left 0
|
|
12
|
+
right 0
|
|
13
|
+
bottom 0
|
|
14
|
+
background rgba(0, 0, 0, 0.45)
|
|
15
|
+
|
|
16
|
+
.custom-drawer-content-wrapper
|
|
17
|
+
position absolute
|
|
18
|
+
top 0
|
|
19
|
+
bottom 0
|
|
20
|
+
background var(--main)
|
|
21
|
+
box-shadow 2px 0 8px rgba(0, 0, 0, 0.15)
|
|
22
|
+
overflow auto
|
|
23
|
+
color var(--text)
|
|
24
|
+
|
|
25
|
+
.custom-drawer-left .custom-drawer-content-wrapper
|
|
26
|
+
left 0
|
|
27
|
+
|
|
28
|
+
.custom-drawer-right .custom-drawer-content-wrapper
|
|
29
|
+
right 0
|
|
30
|
+
|
|
31
|
+
.custom-drawer-content
|
|
32
|
+
position relative
|
|
33
|
+
height 100%
|
|
34
|
+
width 100%
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
import Password from './password'
|
|
6
6
|
|
|
7
7
|
export default function InputAutoFocus (props) {
|
|
8
|
-
const { type, selectall = false, ...rest } = props
|
|
8
|
+
const { type, selectall = false, ref, ...rest } = props
|
|
9
9
|
const inputRef = useRef(null)
|
|
10
10
|
const isFirstRender = useRef(true)
|
|
11
11
|
|
|
@@ -14,7 +14,11 @@ export default function InputAutoFocus (props) {
|
|
|
14
14
|
const { value } = props
|
|
15
15
|
if (value && selectall && isFirstRender.current) {
|
|
16
16
|
inputRef.current.focus()
|
|
17
|
-
inputRef.current.setSelectionRange
|
|
17
|
+
if (inputRef.current.setSelectionRange) {
|
|
18
|
+
inputRef.current.setSelectionRange(0, value.length)
|
|
19
|
+
} else if (inputRef.current.select) {
|
|
20
|
+
inputRef.current.select()
|
|
21
|
+
}
|
|
18
22
|
isFirstRender.current = false
|
|
19
23
|
} else {
|
|
20
24
|
inputRef.current.focus()
|
|
@@ -31,9 +35,18 @@ export default function InputAutoFocus (props) {
|
|
|
31
35
|
InputComponent = Input
|
|
32
36
|
}
|
|
33
37
|
|
|
38
|
+
const handleRef = (node) => {
|
|
39
|
+
inputRef.current = node
|
|
40
|
+
if (typeof ref === 'function') {
|
|
41
|
+
ref(node)
|
|
42
|
+
} else if (ref) {
|
|
43
|
+
ref.current = node
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
34
47
|
return (
|
|
35
48
|
<InputComponent
|
|
36
|
-
ref={
|
|
49
|
+
ref={handleRef}
|
|
37
50
|
{...rest}
|
|
38
51
|
/>
|
|
39
52
|
)
|
|
@@ -56,7 +56,7 @@ export default forwardRef(function Password (props, ref) {
|
|
|
56
56
|
let capsPrefix = null
|
|
57
57
|
if (isCapsLockOn) {
|
|
58
58
|
capsPrefix = (
|
|
59
|
-
<Tag color='orange'
|
|
59
|
+
<Tag color='orange' className='mg1r' variant='solid'>CAPS</Tag>
|
|
60
60
|
)
|
|
61
61
|
}
|
|
62
62
|
|
|
@@ -29,6 +29,7 @@ import SshConfigLoadNotify from '../ssh-config/ssh-config-load-notify'
|
|
|
29
29
|
import LoadSshConfigs from '../ssh-config/load-ssh-configs'
|
|
30
30
|
import AIChat from '../ai/ai-chat'
|
|
31
31
|
import Opacity from '../common/opacity'
|
|
32
|
+
import MoveItemModal from '../tree-list/move-item-modal'
|
|
32
33
|
import InputContextMenu from '../common/input-context-menu'
|
|
33
34
|
import { pick } from 'lodash-es'
|
|
34
35
|
import deepCopy from 'json-deep-copy'
|
|
@@ -169,7 +170,8 @@ export default auto(function Index (props) {
|
|
|
169
170
|
'isSyncingSetting',
|
|
170
171
|
'leftSidebarWidth',
|
|
171
172
|
'transferTab',
|
|
172
|
-
'sidebarPanelTab'
|
|
173
|
+
'sidebarPanelTab',
|
|
174
|
+
'openWidgetsModal'
|
|
173
175
|
]),
|
|
174
176
|
fileTransfers: copiedTransfer,
|
|
175
177
|
transferHistory: copiedHistory,
|
|
@@ -273,6 +275,7 @@ export default auto(function Index (props) {
|
|
|
273
275
|
<FileInfoModal />
|
|
274
276
|
<SettingModal store={store} />
|
|
275
277
|
<BatchOp {...batchOpProps} />
|
|
278
|
+
<MoveItemModal store={store} />
|
|
276
279
|
<div
|
|
277
280
|
id='outside-context'
|
|
278
281
|
>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
.qm-list-wrap
|
|
2
2
|
max-height calc(100vh - 100px)
|
|
3
3
|
overflow-y scroll
|
|
4
|
+
padding 20px 0 10px 0
|
|
4
5
|
.qm-wrap-tooltip
|
|
5
6
|
background var(--main)
|
|
6
7
|
position absolute
|
|
@@ -19,14 +20,33 @@
|
|
|
19
20
|
.fil-keyword
|
|
20
21
|
.fil-label
|
|
21
22
|
.qm-item
|
|
22
|
-
color var(--text-
|
|
23
|
+
color var(--text-disabled)
|
|
23
24
|
.qm-item
|
|
24
25
|
&.name-match
|
|
25
26
|
&.label-match
|
|
26
27
|
font-weight bold
|
|
28
|
+
color var(--text)
|
|
29
|
+
|
|
30
|
+
.qm-search-input
|
|
31
|
+
max-width 200px
|
|
27
32
|
@media (max-width: 500px)
|
|
28
33
|
.qm-search-input
|
|
29
34
|
width 100px
|
|
30
35
|
|
|
31
36
|
.item-list-unit.dragover
|
|
32
37
|
border: 1px dashed var(--primary)
|
|
38
|
+
.qm-label-select
|
|
39
|
+
min-width 120px
|
|
40
|
+
|
|
41
|
+
.qm-flex
|
|
42
|
+
gap 8px
|
|
43
|
+
|
|
44
|
+
@media (max-width: 768px)
|
|
45
|
+
.qm-flex
|
|
46
|
+
flex-direction column
|
|
47
|
+
align-items flex-start
|
|
48
|
+
.qm-search-input
|
|
49
|
+
max-width none
|
|
50
|
+
width 100%
|
|
51
|
+
.qm-label-select
|
|
52
|
+
width 100%
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { useState, useRef } from 'react'
|
|
6
6
|
import { quickCommandLabelsLsKey } from '../../common/constants'
|
|
7
7
|
import { sortBy } from 'lodash-es'
|
|
8
|
-
import { Button, Input, Select, Space } from 'antd'
|
|
8
|
+
import { Button, Input, Select, Space, Flex } from 'antd'
|
|
9
9
|
import * as ls from '../../common/safe-local-storage'
|
|
10
10
|
import CmdItem from './quick-command-item'
|
|
11
11
|
import {
|
|
@@ -169,14 +169,11 @@ export default function QuickCommandsFooterBox (props) {
|
|
|
169
169
|
mode: 'multiple',
|
|
170
170
|
onChange: handleChangeLabels,
|
|
171
171
|
placeholder: e('labels'),
|
|
172
|
-
className: '
|
|
173
|
-
style: {
|
|
174
|
-
minWidth: '100px'
|
|
175
|
-
}
|
|
172
|
+
className: 'qm-label-select'
|
|
176
173
|
}
|
|
177
174
|
const tp = pinnedQuickCommandBar
|
|
178
175
|
? 'primary'
|
|
179
|
-
: '
|
|
176
|
+
: 'text'
|
|
180
177
|
const cls = classNames(
|
|
181
178
|
'qm-list-wrap',
|
|
182
179
|
{ 'fil-label': !!labels.length },
|
|
@@ -197,16 +194,14 @@ export default function QuickCommandsFooterBox (props) {
|
|
|
197
194
|
{...qmProps}
|
|
198
195
|
>
|
|
199
196
|
<div className='pd2'>
|
|
200
|
-
<
|
|
201
|
-
<
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
</span>
|
|
209
|
-
<span className='fleft mg1l'>
|
|
197
|
+
<Flex justify='space-between' className='qm-flex'>
|
|
198
|
+
<Input.Search
|
|
199
|
+
value={keyword}
|
|
200
|
+
onChange={handleChange}
|
|
201
|
+
placeholder=''
|
|
202
|
+
className='qm-search-input'
|
|
203
|
+
/>
|
|
204
|
+
<Flex gap='small'>
|
|
210
205
|
<Select
|
|
211
206
|
{...sprops}
|
|
212
207
|
>
|
|
@@ -215,31 +210,28 @@ export default function QuickCommandsFooterBox (props) {
|
|
|
215
210
|
)}
|
|
216
211
|
</Select>
|
|
217
212
|
<Button
|
|
218
|
-
className='mg1l iblock'
|
|
219
213
|
type={type}
|
|
220
214
|
onClick={window.store.handleSortByFrequency}
|
|
221
215
|
>
|
|
222
216
|
{e('sortByFrequency')}
|
|
223
217
|
</Button>
|
|
224
|
-
</
|
|
225
|
-
<
|
|
226
|
-
<
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
</span>
|
|
242
|
-
</div>
|
|
218
|
+
</Flex>
|
|
219
|
+
<Space.Compact className='mg2l'>
|
|
220
|
+
<Button
|
|
221
|
+
onClick={handleTogglePinned}
|
|
222
|
+
icon={<PushpinOutlined />}
|
|
223
|
+
type={tp}
|
|
224
|
+
/>
|
|
225
|
+
<Button
|
|
226
|
+
onClick={window.store.handleOpenQuickCommandsSetting}
|
|
227
|
+
icon={<EditOutlined />}
|
|
228
|
+
/>
|
|
229
|
+
<Button
|
|
230
|
+
onClick={handleClose}
|
|
231
|
+
icon={<CloseCircleOutlined />}
|
|
232
|
+
/>
|
|
233
|
+
</Space.Compact>
|
|
234
|
+
</Flex>
|
|
243
235
|
<div className={cls}>
|
|
244
236
|
{filtered.map(renderItem)}
|
|
245
237
|
</div>
|
|
@@ -736,7 +736,7 @@ export default class SessionWrapper extends Component {
|
|
|
736
736
|
const layout = direction === 'leftRight' ? 'horizontal' : 'vertical'
|
|
737
737
|
const [size1, size2] = this.state.splitSize
|
|
738
738
|
const splitterProps = {
|
|
739
|
-
layout,
|
|
739
|
+
orientation: layout,
|
|
740
740
|
onResize: this.onSplitResize,
|
|
741
741
|
onResizeEnd: this.onSplitResize,
|
|
742
742
|
className: notSplitVew ? 'not-split-view' : '',
|