@electerm/electerm-react 1.40.20 → 1.50.31

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.
Files changed (104) hide show
  1. package/client/common/constants.js +57 -7
  2. package/client/common/new-terminal.js +2 -2
  3. package/client/components/auth/login.jsx +34 -57
  4. package/client/components/batch-op/batch-op.jsx +12 -11
  5. package/client/components/bookmark-form/index.jsx +2 -2
  6. package/client/components/bookmark-form/ssh-form.jsx +4 -1
  7. package/client/components/bookmark-form/tree-delete.jsx +5 -5
  8. package/client/components/context-menu/boomarks.jsx +8 -12
  9. package/client/components/context-menu/context-menu.jsx +10 -10
  10. package/client/components/context-menu/history.jsx +21 -24
  11. package/client/components/context-menu/menu-btn.jsx +11 -11
  12. package/client/components/context-menu/tabs.jsx +15 -19
  13. package/client/components/context-menu/zoom.jsx +25 -29
  14. package/client/components/footer/footer-entry.jsx +56 -56
  15. package/client/components/icons/split-icons.jsx +77 -0
  16. package/client/components/layout/layout-alg.js +260 -0
  17. package/client/components/layout/layout-item.jsx +94 -0
  18. package/client/components/layout/layout.jsx +167 -0
  19. package/client/components/layout/layout.styl +8 -0
  20. package/client/components/layout/layouts.jsx +72 -0
  21. package/client/components/layout/session-size-alg.js +31 -0
  22. package/client/components/main/custom-css.jsx +1 -1
  23. package/client/components/main/main.jsx +184 -110
  24. package/client/components/main/ui-theme.jsx +1 -1
  25. package/client/components/main/wrapper.styl +2 -4
  26. package/client/components/profile/profile-list.jsx +1 -3
  27. package/client/components/profile/profile-transport-mod.jsx +1 -1
  28. package/client/components/profile/profile-transport.jsx +6 -9
  29. package/client/components/quick-commands/quick-command-transport.jsx +6 -9
  30. package/client/components/quick-commands/quick-commands-box.jsx +144 -153
  31. package/client/components/quick-commands/quick-commands-select.jsx +10 -3
  32. package/client/components/rdp/rdp-session.jsx +3 -23
  33. package/client/components/rdp/resolution-edit.jsx +40 -42
  34. package/client/components/session/session.jsx +63 -328
  35. package/client/components/session/session.styl +1 -5
  36. package/client/components/session/sessions.jsx +140 -111
  37. package/client/components/setting-panel/bookmark-tree-list.jsx +1 -1
  38. package/client/components/setting-panel/setting-common.jsx +6 -4
  39. package/client/components/setting-panel/setting-modal.jsx +31 -31
  40. package/client/components/setting-panel/start-session-select.jsx +4 -4
  41. package/client/components/setting-panel/tab-settings.jsx +27 -5
  42. package/client/components/setting-sync/data-import.jsx +36 -39
  43. package/client/components/setting-sync/setting-sync-form.jsx +10 -10
  44. package/client/components/setting-sync/setting-sync.jsx +50 -52
  45. package/client/components/sftp/address-bookmark.jsx +57 -58
  46. package/client/components/sftp/confirm-modal-store.jsx +34 -40
  47. package/client/components/sftp/file-item.jsx +14 -3
  48. package/client/components/sftp/file-mode-modal.jsx +3 -0
  49. package/client/components/sftp/list-table-ui.jsx +4 -4
  50. package/client/components/sftp/sftp-entry.jsx +2 -2
  51. package/client/components/sftp/transfer-conflict-store.jsx +13 -17
  52. package/client/components/sftp/transport-action-store.jsx +38 -31
  53. package/client/components/sftp/transports-action-store.jsx +3 -3
  54. package/client/components/sftp/transports-ui-store.jsx +18 -23
  55. package/client/components/shortcuts/shortcut-handler.js +1 -0
  56. package/client/components/shortcuts/shortcuts-defaults.js +5 -5
  57. package/client/components/shortcuts/shortcuts.jsx +9 -12
  58. package/client/components/side-panel-r/right-side-panel.styl +40 -0
  59. package/client/components/side-panel-r/side-panel-r.jsx +102 -0
  60. package/client/components/sidebar/bookmark-select.jsx +40 -40
  61. package/client/components/sidebar/bookmark.jsx +63 -65
  62. package/client/components/sidebar/history.jsx +53 -50
  63. package/client/components/sidebar/index.jsx +195 -184
  64. package/client/components/sidebar/info-modal.jsx +202 -202
  65. package/client/components/sidebar/sidebar.styl +8 -2
  66. package/client/components/sidebar/transfer-history-modal.jsx +95 -100
  67. package/client/components/sidebar/transfer-list-control.jsx +2 -2
  68. package/client/components/sidebar/transfer-list.jsx +45 -42
  69. package/client/components/sidebar/transfer-modal.jsx +49 -52
  70. package/client/components/sidebar/transport-ui.jsx +1 -1
  71. package/client/components/tabs/index.jsx +261 -49
  72. package/client/components/tabs/tab.jsx +48 -66
  73. package/client/components/tabs/tabs.styl +6 -1
  74. package/client/components/tabs/window-control.jsx +46 -48
  75. package/client/components/terminal/attach-addon-custom.js +1 -1
  76. package/client/components/terminal/index.jsx +111 -113
  77. package/client/components/terminal/term-search.jsx +26 -24
  78. package/client/components/terminal-info/run-cmd.jsx +0 -25
  79. package/client/components/terminal-info/terminal-info.jsx +60 -0
  80. package/client/components/terminal-info/terminal-info.styl +1 -1
  81. package/client/components/tree-list/bookmark-transport.jsx +8 -9
  82. package/client/components/tree-list/tree-list.jsx +36 -26
  83. package/client/components/vnc/vnc-session.jsx +1 -6
  84. package/client/components/web/address-bar.jsx +50 -0
  85. package/client/components/web/web-session.jsx +32 -10
  86. package/client/entry/index.jsx +5 -6
  87. package/client/store/common.js +1 -1
  88. package/client/store/db-upgrade.js +1 -1
  89. package/client/store/event.js +2 -2
  90. package/client/store/index.js +21 -32
  91. package/client/store/init-state.js +15 -3
  92. package/client/store/load-data.js +1 -1
  93. package/client/store/quick-command.js +4 -4
  94. package/client/store/session.js +1 -1
  95. package/client/store/setting.js +10 -6
  96. package/client/store/system-menu.js +1 -10
  97. package/client/store/tab.js +91 -1
  98. package/client/store/transfer-list.js +5 -6
  99. package/client/store/watch.js +11 -6
  100. package/package.json +1 -1
  101. package/client/components/common/react-subx.jsx +0 -1
  102. package/client/components/common/resize-wrap.jsx +0 -222
  103. package/client/components/common/resize-wrap.styl +0 -9
  104. package/client/components/terminal-info/content.jsx +0 -152
@@ -0,0 +1,167 @@
1
+ import { auto } from 'manate/react'
2
+ import Layouts from './layouts'
3
+ import Sessions from '../session/sessions'
4
+ import {
5
+ splitConfig,
6
+ quickCommandBoxHeight,
7
+ footerHeight
8
+ } from '../../common/constants'
9
+ import layoutAlg from './layout-alg'
10
+ import calcSessionSize from './session-size-alg'
11
+ import TermSearch from '../terminal/term-search'
12
+ import Footer from '../footer/footer-entry'
13
+ import QuickCommandsFooterBox from '../quick-commands/quick-commands-box'
14
+ import { pick } from 'lodash-es'
15
+ import './layout.styl'
16
+
17
+ export default auto(function Layout (props) {
18
+ const handleMousedown = (e) => {
19
+
20
+ }
21
+
22
+ const calcLayoutStyle = () => {
23
+ const {
24
+ width,
25
+ height,
26
+ pinnedQuickCommandBar,
27
+ // tabsHeight,
28
+ leftSidebarWidth,
29
+ // infoPanelPinned,
30
+ pinned,
31
+ rightPanelVisible,
32
+ rightPanelPinned,
33
+ rightPanelWidth,
34
+ resizeTrigger
35
+ } = props.store
36
+ const h = height - footerHeight - (pinnedQuickCommandBar ? quickCommandBoxHeight : 0) + resizeTrigger
37
+ const l = pinned ? 43 + leftSidebarWidth : 43
38
+ const r = rightPanelVisible && rightPanelPinned ? rightPanelWidth : 0
39
+ return {
40
+ height: h,
41
+ top: 0,
42
+ left: l,
43
+ width: width - l - r
44
+ }
45
+ }
46
+
47
+ const buildLayoutStyles = () => {
48
+ const {
49
+ layout,
50
+ height,
51
+ width,
52
+ pinnedQuickCommandBar,
53
+ leftSidebarWidth,
54
+ infoPanelPinned,
55
+ pinned,
56
+ rightSidebarWidth
57
+ } = props.store
58
+ const l = pinned ? leftSidebarWidth : 0
59
+ const r = infoPanelPinned ? rightSidebarWidth : 0
60
+ const w = width - l - r - 42
61
+ const h = height - footerHeight - (pinnedQuickCommandBar ? quickCommandBoxHeight : 0)
62
+ return layoutAlg(layout, w, h)
63
+ }
64
+
65
+ function renderSessions (conf, layout) {
66
+ const {
67
+ width,
68
+ height
69
+ } = calcLayoutStyle()
70
+ const {
71
+ store
72
+ } = props
73
+ const { tabs } = store
74
+ const tabsBatch = {}
75
+ for (const tab of tabs) {
76
+ const { batch } = tab
77
+ if (!tabsBatch[batch]) {
78
+ tabsBatch[batch] = []
79
+ }
80
+ tabsBatch[batch].push(tab)
81
+ }
82
+ return calcSessionSize(layout, width, height).map((v, i) => {
83
+ const sessProps = {
84
+ batch: i,
85
+ layout,
86
+ ...v,
87
+ tabs: tabsBatch[i] || [],
88
+ ...pick(store, [
89
+ 'isMaximized',
90
+ 'config',
91
+ 'resolutions',
92
+ 'hideDelKeyTip',
93
+ 'fileOperation',
94
+ 'file',
95
+ 'pinnedQuickCommandBar',
96
+ 'tabsHeight',
97
+ 'appPath',
98
+ 'leftSidebarWidth',
99
+ 'pinned',
100
+ 'openedSideBar'
101
+ ])
102
+ }
103
+ return (
104
+ <Sessions
105
+ key={'sess' + i}
106
+ {...sessProps}
107
+ />
108
+ )
109
+ })
110
+ }
111
+
112
+ const { store } = props
113
+ const {
114
+ layout, config, currentTab
115
+ } = store
116
+ const conf = splitConfig[layout]
117
+ const layoutProps = {
118
+ layout,
119
+ ...buildLayoutStyles(conf, layout),
120
+ layoutStyle: calcLayoutStyle(),
121
+ handleMousedown
122
+ }
123
+ const termProps = {
124
+ currentTab,
125
+ config,
126
+ ...pick(store, [
127
+ 'currentTabId',
128
+ 'termSearchOpen',
129
+ 'termSearch',
130
+ 'termSearchOptions',
131
+ 'termSearchMatchCount',
132
+ 'termSearchMatchIndex'
133
+ ])
134
+ }
135
+ const footerProps = {
136
+ store,
137
+ currentTab
138
+ }
139
+ const qmProps = pick(store, [
140
+ 'quickCommandTags',
141
+ 'qmSortByFrequency',
142
+ 'openQuickCommandBar',
143
+ 'pinnedQuickCommandBar',
144
+ 'qmSortByFrequency',
145
+ 'inActiveTerminal',
146
+ 'leftSidebarWidth',
147
+ 'openedSideBar',
148
+ 'currentQuickCommands'
149
+ ])
150
+ return [
151
+ <Layouts {...layoutProps} key='layouts'>
152
+ {renderSessions(conf, layout)}
153
+ </Layouts>,
154
+ <TermSearch
155
+ key='TermSearch'
156
+ {...termProps}
157
+ />,
158
+ <QuickCommandsFooterBox
159
+ key='QuickCommandsFooterBox'
160
+ {...qmProps}
161
+ />,
162
+ <Footer
163
+ key='Footer'
164
+ {...footerProps}
165
+ />
166
+ ]
167
+ })
@@ -0,0 +1,8 @@
1
+ @require '../../css/includes/theme-default'
2
+ .layout-wrap
3
+ .layout-item
4
+ position absolute
5
+ background main
6
+ overflow hidden
7
+ &.drag-over
8
+ border 2px solid #08c
@@ -0,0 +1,72 @@
1
+ import { memo } from 'react'
2
+ import {
3
+ splitConfig
4
+ } from '../../common/constants'
5
+ import LayoutItem from './layout-item'
6
+
7
+ function pixed (style) {
8
+ return Object.keys(style).reduce((prev, k) => {
9
+ const v = style[k]
10
+ return {
11
+ ...prev,
12
+ [k]: isNaN(v) ? v : v + 'px'
13
+ }
14
+ }, {})
15
+ }
16
+ export default memo(function LayoutWrap (props) {
17
+ const {
18
+ children,
19
+ layout,
20
+ wrapStyles,
21
+ handleStyles,
22
+ layoutStyle,
23
+ handleMousedown
24
+ } = props
25
+ const {
26
+ children: childrenCount,
27
+ handle: handleCount
28
+ } = splitConfig[layout]
29
+ const wrapStyle = {
30
+ className: 'layout-wrap layout-wrap-' + layout,
31
+ style: pixed(layoutStyle)
32
+ }
33
+ return (
34
+ <div {...wrapStyle}>
35
+ {
36
+ new Array(childrenCount).fill(0).map((v, i) => {
37
+ const itemProps = {
38
+ i,
39
+ style: pixed(wrapStyles[i]),
40
+ className: 'layout-item v' + (i + 1),
41
+ batch: i
42
+ }
43
+ return (
44
+ <LayoutItem
45
+ key={i + 'layout-item'}
46
+ {...itemProps}
47
+ >
48
+ {children[i] || null}
49
+ </LayoutItem>
50
+ )
51
+ })
52
+ }
53
+ {
54
+ new Array(handleCount).fill(0).map((v, i) => {
55
+ const itemProps = {
56
+ className: 'layout-handle h' + (i + 1),
57
+ 'data-layout': layout,
58
+ 'data-index': i,
59
+ style: handleStyles[i],
60
+ onMouseDown: handleMousedown
61
+ }
62
+ return (
63
+ <div
64
+ key={i + 'layout-handle'}
65
+ {...itemProps}
66
+ />
67
+ )
68
+ })
69
+ }
70
+ </div>
71
+ )
72
+ })
@@ -0,0 +1,31 @@
1
+ const layoutConfigs = {
2
+ c1: { cols: 1, rows: 1 },
3
+ c2: { cols: 2, rows: 1 },
4
+ c3: { cols: 3, rows: 1 },
5
+ r2: { cols: 1, rows: 2 },
6
+ r3: { cols: 1, rows: 3 },
7
+ c2x2: { cols: 2, rows: 2 },
8
+ c1r2: { cols: 2, rows: 2, special: 'right', length: 3 },
9
+ r1c2: { cols: 2, rows: 2, special: 'bottom', length: 3 }
10
+ }
11
+
12
+ export default function calcSessionSize (layout, w, h) {
13
+ const { cols, rows, special, length = cols * rows } = layoutConfigs[layout] || layoutConfigs.c1
14
+ const spacing = 0
15
+
16
+ const sessionWidth = (w - (cols - 1) * spacing) / cols
17
+ const sessionHeight = (h - (rows - 1) * spacing) / rows
18
+
19
+ const sessions = new Array(length).fill(0).map((_, i) => ({
20
+ width: sessionWidth,
21
+ height: sessionHeight
22
+ }))
23
+
24
+ if (special === 'right') {
25
+ sessions[0].height = h
26
+ } else if (special === 'bottom') {
27
+ sessions[0].width = w
28
+ }
29
+
30
+ return sessions
31
+ }
@@ -3,7 +3,7 @@
3
3
  */
4
4
 
5
5
  import { useEffect } from 'react'
6
- import { useDelta, useConditionalEffect } from 'react-delta'
6
+ import { useDelta, useConditionalEffect } from 'react-delta-hooks'
7
7
  import eq from 'fast-deep-equal'
8
8
 
9
9
  const themeDomId = 'custom-css'
@@ -1,5 +1,6 @@
1
- import { Component } from '../common/react-subx'
2
- import Sessions from '../session/sessions'
1
+ import { auto } from 'manate/react'
2
+ import { useEffect } from 'react'
3
+ import Layout from '../layout/layout'
3
4
  import ContextMenu from '../context-menu/context-menu'
4
5
  import FileInfoModal from '../sftp/file-props-modal'
5
6
  import FileModeModal from '../sftp/file-mode-modal'
@@ -20,16 +21,20 @@ import classnames from 'classnames'
20
21
  import ShortcutControl from '../shortcuts/shortcut-control.jsx'
21
22
  import { isMac, isWin } from '../../common/constants'
22
23
  import TermFullscreenControl from './term-fullscreen-control'
24
+ import TerminalInfo from '../terminal-info/terminal-info'
23
25
  import { LoadingUI } from './loading'
24
26
  import { ConfigProvider, notification } from 'antd'
27
+ import InfoModal from '../sidebar/info-modal.jsx'
28
+ import RightSidePanel from '../side-panel-r/side-panel-r'
29
+ import { pick } from 'lodash-es'
25
30
  import './wrapper.styl'
26
31
 
27
- export default class Index extends Component {
28
- componentDidMount () {
32
+ export default auto(function Index (props) {
33
+ useEffect(() => {
29
34
  notification.config({
30
35
  placement: 'bottomRight'
31
36
  })
32
- const { store } = this.props
37
+ const { store } = props
33
38
  window.addEventListener('resize', store.onResize)
34
39
  store.onResize()
35
40
  store.initStoreEvents()
@@ -59,117 +64,186 @@ export default class Index extends Component {
59
64
  if (window.et.isWebApp) {
60
65
  window.onbeforeunload = store.beforeExit
61
66
  }
62
- store.isSencondInstance = window.pre.runSync('isSencondInstance')
67
+ store.isSecondInstance = window.pre.runSync('isSecondInstance')
63
68
  store.initData()
64
69
  store.checkForDbUpgrade()
65
70
  window.pre.runGlobalAsync('registerDeepLink')
66
- }
71
+ }, [])
67
72
 
68
- render () {
69
- const { store } = this.props
70
- const {
71
- configLoaded,
72
- config,
73
- terminalFullScreen,
74
- pinned,
75
- isSencondInstance,
76
- pinnedQuickCommandBar,
77
- wsInited,
78
- upgradeInfo,
79
- installSrc,
80
- uiThemeConfig
81
- } = store
82
- const cls = classnames({
83
- loaded: configLoaded,
84
- 'not-webapp': !window.et.isWebApp,
85
- 'system-ui': store.config.useSystemTitleBar,
86
- 'not-system-ui': !store.config.useSystemTitleBar,
87
- 'is-mac': isMac,
88
- 'not-mac': !isMac,
89
- 'is-win': isWin,
90
- pinned,
91
- 'qm-pinned': pinnedQuickCommandBar,
92
- 'term-fullscreen': terminalFullScreen,
93
- 'is-main': !isSencondInstance
94
- })
95
- const ext1 = {
96
- className: cls
97
- }
98
- const cpConf = config
99
- const confsCss = Object
100
- .keys((cpConf))
101
- .filter(d => d.startsWith('terminalBackground'))
102
- .reduce((p, k) => {
103
- return {
104
- ...p,
105
- [k]: cpConf[k]
106
- }
107
- }, {})
108
- const themeProps = {
109
- themeConfig: store.getUiThemeConfig()
110
- }
111
- const outerProps = {
112
- style: {
113
- opacity: config.opacity
73
+ const { store } = props
74
+ const {
75
+ configLoaded,
76
+ config,
77
+ terminalFullScreen,
78
+ pinned,
79
+ isSecondInstance,
80
+ pinnedQuickCommandBar,
81
+ wsInited,
82
+ upgradeInfo,
83
+ installSrc,
84
+ fileTransfers,
85
+ uiThemeConfig,
86
+ transferHistory,
87
+ transferToConfirm,
88
+ openResolutionEdit
89
+ } = store
90
+ const cls = classnames({
91
+ loaded: configLoaded,
92
+ 'not-webapp': !window.et.isWebApp,
93
+ 'system-ui': store.config.useSystemTitleBar,
94
+ 'not-system-ui': !store.config.useSystemTitleBar,
95
+ 'is-mac': isMac,
96
+ 'not-mac': !isMac,
97
+ 'is-win': isWin,
98
+ pinned,
99
+ 'qm-pinned': pinnedQuickCommandBar,
100
+ 'term-fullscreen': terminalFullScreen,
101
+ 'is-main': !isSecondInstance
102
+ })
103
+ const ext1 = {
104
+ className: cls
105
+ }
106
+ const cpConf = config
107
+ const confsCss = Object
108
+ .keys((cpConf))
109
+ .filter(d => d.startsWith('terminalBackground'))
110
+ .reduce((p, k) => {
111
+ return {
112
+ ...p,
113
+ [k]: cpConf[k]
114
114
  }
115
+ }, {})
116
+ const themeProps = {
117
+ themeConfig: store.getUiThemeConfig()
118
+ }
119
+ const outerProps = {
120
+ style: {
121
+ opacity: config.opacity
115
122
  }
116
- return (
117
- <ConfigProvider
118
- theme={uiThemeConfig}
119
- >
120
- <div {...ext1}>
121
- <ShortcutControl config={config} />
122
- <LoadingUI
123
- wsInited={wsInited}
124
- />
125
- <TermFullscreenControl
126
- terminalFullScreen={terminalFullScreen}
127
- />
128
- <CssOverwrite
129
- {...confsCss}
130
- wsInited={wsInited}
131
- />
132
- <TerminalInteractive />
133
- <UiTheme
134
- {...themeProps}
135
- buildTheme={store.buildTheme}
136
- />
137
- <CustomCss customCss={config.customCss} />
138
- <TextEditor customCss={cpConf.customCss} />
139
- <UpdateCheck
140
- skipVersion={cpConf.skipVersion}
141
- upgradeInfo={upgradeInfo}
142
- installSrc={installSrc}
143
- />
144
- <FileInfoModal />
145
- <FileModeModal />
146
- <SettingModal store={store} />
147
- <BatchOp store={store} />
148
- <div
149
- id='outside-context'
150
- {...outerProps}
151
- >
152
- <Sidebar store={store} />
153
- <Sessions
154
- store={store}
155
- config={cpConf}
156
- />
157
- </div>
158
- <ContextMenu store={store} />
159
- <ConfirmModalStore
160
- store={store}
161
- />
162
- <TransferConflictStore
163
- store={store}
164
- _fileTransfers={store._fileTransfers}
165
- />
166
- <TransportsActionStore
123
+ }
124
+ const sidebarProps = {
125
+ ...pick(store, [
126
+ 'activeItemId',
127
+ 'history',
128
+ 'showModal',
129
+ 'showInfoModal',
130
+ 'openedSideBar',
131
+ 'height',
132
+ 'settingTab',
133
+ 'settingItem',
134
+ 'isSyncingSetting',
135
+ 'leftSidebarWidth',
136
+ 'transferTab'
137
+ ]),
138
+ fileTransfers,
139
+ transferHistory,
140
+ upgradeInfo,
141
+ pinned
142
+ }
143
+
144
+ const infoModalProps = {
145
+ ...pick(store, [
146
+ 'infoModalTab',
147
+ 'showInfoModal',
148
+ 'commandLineHelp'
149
+ ]),
150
+ installSrc,
151
+ upgradeInfo
152
+ }
153
+ const conflictStoreProps = {
154
+ fileTransfers,
155
+ _fileTransfers: store._fileTransfers
156
+ }
157
+ const batchOpProps = {
158
+ transferHistory,
159
+ showModal: store.showModal,
160
+ innerWidth: store.innerWidth
161
+ }
162
+ const resProps = {
163
+ resolutions: store.resolutions,
164
+ openResolutionEdit
165
+ }
166
+ const contextMenuProps = {
167
+ ...pick(store, [
168
+ 'history'
169
+ ]),
170
+ tabs: store.getTabs(),
171
+ config
172
+ }
173
+ const rightPanelProps = {
174
+ rightPanelVisible: store.rightPanelVisible,
175
+ rightPanelPinned: store.rightPanelPinned,
176
+ rightPanelWidth: store.rightPanelWidth
177
+ }
178
+ const terminalInfoProps = {
179
+ ...store.terminalInfoProps,
180
+ ...pick(
181
+ config,
182
+ ['host', 'port', 'saveTerminalLogToFile', 'terminalInfos']
183
+ ),
184
+ ...pick(store, [
185
+ 'appPath'
186
+ ])
187
+ }
188
+ return (
189
+ <ConfigProvider
190
+ theme={uiThemeConfig}
191
+ >
192
+ <div {...ext1}>
193
+ <ShortcutControl config={config} />
194
+ <LoadingUI
195
+ wsInited={wsInited}
196
+ />
197
+ <TermFullscreenControl
198
+ terminalFullScreen={terminalFullScreen}
199
+ />
200
+ <CssOverwrite
201
+ {...confsCss}
202
+ wsInited={wsInited}
203
+ />
204
+ <TerminalInteractive />
205
+ <UiTheme
206
+ {...themeProps}
207
+ buildTheme={store.buildTheme}
208
+ />
209
+ <CustomCss customCss={config.customCss} />
210
+ <TextEditor customCss={cpConf.customCss} />
211
+ <UpdateCheck
212
+ skipVersion={cpConf.skipVersion}
213
+ upgradeInfo={upgradeInfo}
214
+ installSrc={installSrc}
215
+ />
216
+ <FileInfoModal />
217
+ <FileModeModal />
218
+ <SettingModal store={store} />
219
+ <BatchOp {...batchOpProps} />
220
+ <div
221
+ id='outside-context'
222
+ {...outerProps}
223
+ >
224
+ <Sidebar {...sidebarProps} />
225
+ <Layout
167
226
  store={store}
168
- _fileTransfers={store._fileTransfers}
169
227
  />
170
- <Resolutions store={store} />
171
228
  </div>
172
- </ConfigProvider>
173
- )
174
- }
175
- }
229
+ <ContextMenu {...contextMenuProps} />
230
+ <ConfirmModalStore
231
+ transferToConfirm={transferToConfirm}
232
+ />
233
+ <TransferConflictStore
234
+ {...conflictStoreProps}
235
+ transferToConfirm={transferToConfirm}
236
+ />
237
+ <TransportsActionStore
238
+ {...conflictStoreProps}
239
+ config={config}
240
+ />
241
+ <Resolutions {...resProps} />
242
+ <InfoModal {...infoModalProps} />
243
+ <RightSidePanel {...rightPanelProps}>
244
+ <TerminalInfo {...terminalInfoProps} />
245
+ </RightSidePanel>
246
+ </div>
247
+ </ConfigProvider>
248
+ )
249
+ })
@@ -3,7 +3,7 @@
3
3
  */
4
4
 
5
5
  import { useEffect } from 'react'
6
- import { useDelta, useConditionalEffect } from 'react-delta'
6
+ import { useDelta, useConditionalEffect } from 'react-delta-hooks'
7
7
  import eq from 'fast-deep-equal'
8
8
 
9
9
  const themeDomId = 'theme-css'
@@ -6,10 +6,8 @@
6
6
  white-space pre
7
7
  max-height 300px
8
8
  overflow scroll
9
- .sessions
10
- margin-left 43px
11
- .pinned .sessions
12
- margin-left 343px
9
+ // .pinned .sessions
10
+ // margin-left 343px
13
11
  .error-wrapper
14
12
  background main-light
15
13
  height 100%
@@ -60,9 +60,7 @@ export default class ProfileList extends List {
60
60
 
61
61
  renderTransport = () => {
62
62
  return (
63
- <ProfileTransport
64
- store={this.props.store}
65
- />
63
+ <ProfileTransport />
66
64
  )
67
65
  }
68
66
 
@@ -1,4 +1,4 @@
1
- import QmTransport from '../quick-commands/quick-command-transport'
1
+ import QmTransport from '../quick-commands/quick-command-transport-mod'
2
2
 
3
3
  export default class ProfileTransport extends QmTransport {
4
4
  name = 'profiles'
@@ -1,12 +1,9 @@
1
1
  import ProfileTransportMod from './profile-transport-mod'
2
- import { Component } from '../common/react-subx'
3
2
 
4
- export default class ProfileTransport extends Component {
5
- render () {
6
- return (
7
- <div className='pd1b'>
8
- <ProfileTransportMod store={this.props.store} />
9
- </div>
10
- )
11
- }
3
+ export default function ProfileTransport () {
4
+ return (
5
+ <div className='pd1b'>
6
+ <ProfileTransportMod store={window.store} />
7
+ </div>
8
+ )
12
9
  }