react-terminal-viewer-cicd 3.0.0-beta.13 → 3.0.0-beta.14
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/README.md +4 -2
- package/dist/esm/Addon/WorkerLog/LogWorker.js +1 -1
- package/dist/esm/Hooks/useThrottle.js +1 -1
- package/dist/esm/Hooks/useWorkerLogs.d.ts +1 -1
- package/dist/esm/Hooks/useWorkerLogs.js +1 -1
- package/dist/esm/TerminalViewer/index.d.ts +1 -1
- package/dist/esm/TerminalViewer/index.js +11 -3
- package/dist/esm/TerminalViewerBody/index.d.ts +1 -1
- package/dist/esm/TerminalViewerHeader/CollapseButton.d.ts +21 -0
- package/dist/esm/TerminalViewerHeader/CollapseButton.js +72 -0
- package/dist/esm/TerminalViewerHeader/index.d.ts +13 -3
- package/dist/esm/TerminalViewerHeader/index.js +32 -4
- package/dist/esm/TerminalViewerHeader/index.less +63 -4
- package/dist/esm/TerminalViewerToolBar/index.js +1 -1
- package/dist/esm/TerminalViewerVirtualDom/index.d.ts +6 -1
- package/dist/esm/TerminalViewerVirtualDom/index.js +14 -3
- package/dist/esm/TerminalViewerVirtualDom/useStreamStepWorkerLogs.d.ts +3 -0
- package/dist/esm/TerminalViewerVirtualDom/useStreamStepWorkerLogs.js +43 -6
- package/dist/esm/types.d.ts +6 -2
- package/dist/worker/.dumi/tmp/core/historyIntelli.d.ts +1 -1
- package/dist/worker/.dumi/tmp/core/pluginConfig.d.ts +131 -131
- package/dist/worker/.dumi/tmp/core/route.d.ts +9 -9
- package/dist/worker/.dumi/tmp/dumi/exports.d.ts +1 -1
- package/dist/worker/.dumi/tmp/dumi/locales/config.d.ts +97 -97
- package/dist/worker/.dumi/tmp/exports.d.ts +4 -4
- package/dist/worker/.dumi/tmp/testBrowser.d.ts +1 -1
- package/dist/worker/src/Hooks/useWorkerLogs.d.ts +1 -1
- package/dist/worker/src/TerminalViewer/index.d.ts +1 -1
- package/dist/worker/src/TerminalViewerBody/index.d.ts +1 -1
- package/dist/worker/src/TerminalViewerHeader/CollapseButton.d.ts +21 -0
- package/dist/worker/src/TerminalViewerHeader/index.d.ts +13 -3
- package/dist/worker/src/TerminalViewerVirtualDom/index.d.ts +6 -1
- package/dist/worker/src/TerminalViewerVirtualDom/useStreamStepWorkerLogs.d.ts +3 -0
- package/dist/worker/src/types.d.ts +6 -2
- package/package.json +108 -108
- package/dist/worker/.dumi/tmp/core/exportStaticRuntimePlugin.d.ts +0 -1
- package/dist/worker/.dumi/tmp/core/helmet.d.ts +0 -3
- package/dist/worker/.dumi/tmp/core/helmetContext.d.ts +0 -1
- package/dist/worker/.dumi/tmp/dumi/locales/runtime.d.ts +0 -2
- package/dist/worker/.dumi/tmp/dumi/meta/runtime.d.ts +0 -3
- package/dist/worker/Addon/EventEmiter.d.ts +0 -18
- package/dist/worker/Addon/HighlightAddon.d.ts +0 -26
- package/dist/worker/Addon/SearchAddon.d.ts +0 -140
- package/dist/worker/Addon/WorkerLog/GlobalContext.d.ts +0 -10
- package/dist/worker/Addon/WorkerLog/LimitMap.d.ts +0 -14
- package/dist/worker/Addon/WorkerLog/LogWorker.d.ts +0 -2
- package/dist/worker/Addon/WorkerLog/Logs.d.ts +0 -21
- package/dist/worker/Addon/WorkerLog/Mark.d.ts +0 -36
- package/dist/worker/Addon/WorkerLog/Searcher.d.ts +0 -16
- package/dist/worker/Addon/WorkerLog/WebWokerServer.d.ts +0 -10
- package/dist/worker/Addon/WorkerLog/WebWorkerClient.d.ts +0 -13
- package/dist/worker/Addon/WorkerLog/log.worker.d.ts +0 -1
- package/dist/worker/Addon/WorkerLog/types.d.ts +0 -18
- package/dist/worker/Addon/useAddon.d.ts +0 -9
- package/dist/worker/Hooks/useBatchProcess.d.ts +0 -2
- package/dist/worker/Hooks/useCache.d.ts +0 -31
- package/dist/worker/Hooks/useDebounceInput.d.ts +0 -3
- package/dist/worker/Hooks/useLocalStore.d.ts +0 -2
- package/dist/worker/Hooks/useRemote.d.ts +0 -30
- package/dist/worker/Hooks/useRemote.test.d.ts +0 -1
- package/dist/worker/Hooks/useThrottle.d.ts +0 -2
- package/dist/worker/Hooks/useWorkerLogs.d.ts +0 -9
- package/dist/worker/TerminalViewer/index.d.ts +0 -185
- package/dist/worker/TerminalViewer/index.test.d.ts +0 -1
- package/dist/worker/TerminalViewerBody/index.d.ts +0 -87
- package/dist/worker/TerminalViewerBody/index.test.d.ts +0 -1
- package/dist/worker/TerminalViewerHeader/index.d.ts +0 -88
- package/dist/worker/TerminalViewerToolBar/index.d.ts +0 -46
- package/dist/worker/TerminalViewerVirtualDom/index.d.ts +0 -71
- package/dist/worker/index.d.ts +0 -9
- package/dist/worker/log.worker.dev.js +0 -3291
- package/dist/worker/log.worker.dev.js.map +0 -1
- package/dist/worker/mock/index.d.ts +0 -15
- package/dist/worker/src/Addon/LineNumberAddon.d.ts +0 -39
- package/dist/worker/src/TerminalViewerVirtualDom/ReactVirtualized.d.ts +0 -71
- package/dist/worker/src/TerminalViewerVirtualDom/ReactVirtuoso.d.ts +0 -67
- package/dist/worker/src/TerminalViewerVirtualDom/StatusIcon.d.ts +0 -4
- package/dist/worker/src/TerminalViewerVirtualDom/parsePipelineLogs.d.ts +0 -21
- package/dist/worker/types.d.ts +0 -30
package/README.md
CHANGED
|
@@ -119,14 +119,16 @@ webpack 配置:
|
|
|
119
119
|
```
|
|
120
120
|
|
|
121
121
|
## 发布
|
|
122
|
+
|
|
122
123
|
打标签后使用流水线发布或使用常规方式手动发布:
|
|
123
124
|
|
|
124
125
|
```bash
|
|
125
126
|
npm version patch && npm publish
|
|
126
127
|
```
|
|
128
|
+
|
|
127
129
|
## 更新在线地址
|
|
128
130
|
|
|
129
|
-
合并代码后与打标签后使用流水线发布,使用常规方式合并代码与构建后,手动推送至deploy
|
|
131
|
+
合并代码后与打标签后使用流水线发布,使用常规方式合并代码与构建后,手动推送至 deploy
|
|
130
132
|
|
|
131
133
|
## 修复已知问题
|
|
132
134
|
|
|
@@ -144,7 +146,7 @@ npm version patch && npm publish
|
|
|
144
146
|
## API
|
|
145
147
|
|
|
146
148
|
| 属性名 | 描述 | 类型 | 默认值 |
|
|
147
|
-
| --- | --- | --- | --- |
|
|
149
|
+
| --- | --- | --- | --- | --- | --- |
|
|
148
150
|
| fit | 是否自动拉伸填充容器宽高 | boolean | true |
|
|
149
151
|
| autoScroll | 是否开启自动滚动到底部 | boolean | true |
|
|
150
152
|
| scrollToRow | 自动滚动到某一行,开启后自动滚动到底部失效 | number | -- |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
function LogWorker() {
|
|
2
2
|
var workerPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '/worker';
|
|
3
3
|
var worker = null;
|
|
4
|
-
var version = "3.0.0-beta.
|
|
4
|
+
var version = "3.0.0-beta.14" || '0.0.0';
|
|
5
5
|
var path = workerPath.includes('http') ? "".concat(workerPath, "/log.worker.js") : "".concat(window.location.origin).concat(workerPath, "/log.worker.js");
|
|
6
6
|
var blob = new Blob(["importScripts(\"".concat(path, "?v=").concat(version, "\")")], {
|
|
7
7
|
type: 'application/javascript'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useRef, useCallback, useEffect } from 'react';
|
|
2
1
|
import throttle from 'lodash.throttle';
|
|
2
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
3
3
|
var useThrottle = function useThrottle(cb) {
|
|
4
4
|
var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;
|
|
5
5
|
var cbRef = useRef(cb);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type {
|
|
2
|
+
import type { SearcherRef, SearcherResult, SearchResultCallback } from '../Addon/WorkerLog/types';
|
|
3
3
|
export declare const useWorkerLogs: (string: string, changeCallback?: SearchResultCallback) => {
|
|
4
4
|
logs: string[];
|
|
5
5
|
working: boolean;
|
|
@@ -7,9 +7,9 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
7
7
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
8
8
|
import { useEffect, useRef, useState } from 'react';
|
|
9
9
|
import { v4 as uuidv4 } from 'uuid';
|
|
10
|
-
import WebWorkerClient from "../Addon/WorkerLog/WebWorkerClient";
|
|
11
10
|
import globalContext from "../Addon/WorkerLog/GlobalContext";
|
|
12
11
|
import LogWorker from "../Addon/WorkerLog/LogWorker";
|
|
12
|
+
import WebWorkerClient from "../Addon/WorkerLog/WebWorkerClient";
|
|
13
13
|
export var useWorkerLogs = function useWorkerLogs(string, changeCallback) {
|
|
14
14
|
var prefixRef = useRef('prefix');
|
|
15
15
|
var _useState = useState([]),
|
|
@@ -181,5 +181,5 @@ export interface TerminalViewerProps {
|
|
|
181
181
|
*/
|
|
182
182
|
onRefresh?: () => void;
|
|
183
183
|
}
|
|
184
|
-
declare const TerminalViewer: React.ForwardRefExoticComponent<Omit<TerminalViewerProps, "ref"> & React.RefAttributes<TerminalRef | undefined>>;
|
|
184
|
+
declare const TerminalViewer: React.ForwardRefExoticComponent<Omit<TerminalViewerProps, "ref"> & React.RefAttributes<TerminalRef<import("@xterm/xterm").Terminal | import("../types").VirtualDomTerminal> | undefined>>;
|
|
185
185
|
export default TerminalViewer;
|
|
@@ -93,6 +93,10 @@ var TerminalViewer = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
93
93
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
94
94
|
searchResult = _useState8[0],
|
|
95
95
|
setSearchResult = _useState8[1];
|
|
96
|
+
var _useState9 = useState(false),
|
|
97
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
98
|
+
allCollapsed = _useState10[0],
|
|
99
|
+
setAllCollapsed = _useState10[1];
|
|
96
100
|
var searchOptionsRef = useRef(_objectSpread(_objectSpread({}, defaultSearchOptions), localSearchOptions));
|
|
97
101
|
useEffect(function () {
|
|
98
102
|
searchOptionsRef.current = _objectSpread(_objectSpread({}, defaultSearchOptions), localSearchOptions);
|
|
@@ -235,7 +239,9 @@ var TerminalViewer = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
235
239
|
onSearchPrev: handleSearchPrev,
|
|
236
240
|
onSearchNext: handleSearchNext,
|
|
237
241
|
onTitleChange: handleTitleChange,
|
|
238
|
-
onRefresh: handleRefresh
|
|
242
|
+
onRefresh: handleRefresh,
|
|
243
|
+
terminalRef: instanceRef,
|
|
244
|
+
allCollapsed: allCollapsed
|
|
239
245
|
}), Array.isArray(tabs) && tabs.map(function (tab, index) {
|
|
240
246
|
if (activeTabIndex === index) {
|
|
241
247
|
return /*#__PURE__*/React.createElement(ViewerBody, {
|
|
@@ -255,7 +261,8 @@ var TerminalViewer = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
255
261
|
terminalOptions: terminalOptions,
|
|
256
262
|
extraOptions: extraOptions,
|
|
257
263
|
onAddonReady: handleAddonReady,
|
|
258
|
-
onLoading: handleLoading
|
|
264
|
+
onLoading: handleLoading,
|
|
265
|
+
onCollapseStatusChange: setAllCollapsed
|
|
259
266
|
});
|
|
260
267
|
}
|
|
261
268
|
return null;
|
|
@@ -275,7 +282,8 @@ var TerminalViewer = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
275
282
|
terminalOptions: terminalOptions,
|
|
276
283
|
extraOptions: extraOptions,
|
|
277
284
|
onAddonReady: handleAddonReady,
|
|
278
|
-
onLoading: handleLoading
|
|
285
|
+
onLoading: handleLoading,
|
|
286
|
+
onCollapseStatusChange: setAllCollapsed
|
|
279
287
|
}), toolbar || /*#__PURE__*/React.createElement(TerminalViewerToolBar, {
|
|
280
288
|
icons: icons,
|
|
281
289
|
fullScreen: fullScreen,
|
|
@@ -83,5 +83,5 @@ export interface TerminalViewerBodyProps {
|
|
|
83
83
|
*/
|
|
84
84
|
onLoading?: (loading: boolean) => void;
|
|
85
85
|
}
|
|
86
|
-
declare const TerminalViewerBody: React.ForwardRefExoticComponent<TerminalViewerBodyProps & React.RefAttributes<TerminalRef | undefined>>;
|
|
86
|
+
declare const TerminalViewerBody: React.ForwardRefExoticComponent<TerminalViewerBodyProps & React.RefAttributes<TerminalRef<Terminal | import("../types").VirtualDomTerminal> | undefined>>;
|
|
87
87
|
export default TerminalViewerBody;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface CollapseButtonProps {
|
|
3
|
+
/**
|
|
4
|
+
* @description.zh-CN 类型:fold (折叠全部) | unfold (展开全部)
|
|
5
|
+
*/
|
|
6
|
+
type: 'fold' | 'unfold';
|
|
7
|
+
/**
|
|
8
|
+
* @description.zh-CN 点击回调
|
|
9
|
+
*/
|
|
10
|
+
onClick?: (e: React.MouseEvent<HTMLElement>) => void;
|
|
11
|
+
/**
|
|
12
|
+
* @description.zh-CN 提示文字
|
|
13
|
+
*/
|
|
14
|
+
title?: string;
|
|
15
|
+
/**
|
|
16
|
+
* @description.zh-CN 类名
|
|
17
|
+
*/
|
|
18
|
+
className?: string;
|
|
19
|
+
}
|
|
20
|
+
declare const CollapseButton: React.FC<CollapseButtonProps>;
|
|
21
|
+
export default CollapseButton;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
var FoldIcon = function FoldIcon() {
|
|
3
|
+
return /*#__PURE__*/React.createElement("svg", {
|
|
4
|
+
id: "fold",
|
|
5
|
+
className: "ruyi-icon ruyi-icon-fold",
|
|
6
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
7
|
+
width: "16",
|
|
8
|
+
height: "16",
|
|
9
|
+
viewBox: "0 0 16 16",
|
|
10
|
+
style: {
|
|
11
|
+
width: '16px',
|
|
12
|
+
height: '16px'
|
|
13
|
+
}
|
|
14
|
+
}, /*#__PURE__*/React.createElement("g", {
|
|
15
|
+
fill: "none"
|
|
16
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
17
|
+
d: "M8.49985 12.4826L8.49985 15.1367L7.49985 15.1367L7.49985 12.4826L5.80837 14.1741L5.10126 13.4669L7.6463 10.9219C7.84156 10.7267 8.15814 10.7267 8.3534 10.9219L10.8984 13.4669L10.1913 14.1741L8.49985 12.4826Z",
|
|
18
|
+
fill: "rgb(255,255,255)"
|
|
19
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
20
|
+
d: "M7.49991 3.65414L7.4999 1L8.4999 1L8.49991 3.65415L10.1914 1.96266L10.8985 2.66977L8.35346 5.21481C8.1582 5.41007 7.84162 5.41007 7.64635 5.21481L5.10132 2.66977L5.80842 1.96266L7.49991 3.65414Z",
|
|
21
|
+
fill: "rgb(255,255,255)"
|
|
22
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
23
|
+
d: "M15 8.06836C15 7.51608 14.5522 7.06836 14 7.06836C13.4478 7.06836 13 7.51608 13 8.06836C13 8.62064 13.4478 9.06836 14 9.06836C14.5522 9.06836 15 8.62064 15 8.06836ZM12 8.06836C12 7.51608 11.5522 7.06836 11 7.06836C10.4478 7.06836 10 7.51608 10 8.06836C10 8.62064 10.4478 9.06836 11 9.06836C11.5522 9.06836 12 8.62064 12 8.06836ZM8 7.06836C8.55225 7.06836 9 7.51608 9 8.06836C9 8.62064 8.55225 9.06836 8 9.06836C7.44775 9.06836 7 8.62064 7 8.06836C7 7.51608 7.44775 7.06836 8 7.06836ZM6 8.06836C6 7.51608 5.55225 7.06836 5 7.06836C4.44775 7.06836 4 7.51608 4 8.06836C4 8.62064 4.44775 9.06836 5 9.06836C5.55225 9.06836 6 8.62064 6 8.06836ZM2 7.06836C2.55225 7.06836 3 7.51608 3 8.06836C3 8.62064 2.55225 9.06836 2 9.06836C1.44775 9.06836 1 8.62064 1 8.06836C1 7.51608 1.44775 7.06836 2 7.06836Z",
|
|
24
|
+
fill: "rgb(255,255,255)",
|
|
25
|
+
fillRule: "evenodd",
|
|
26
|
+
clipRule: "evenodd"
|
|
27
|
+
})));
|
|
28
|
+
};
|
|
29
|
+
var UnFoldIcon = function UnFoldIcon() {
|
|
30
|
+
return /*#__PURE__*/React.createElement("svg", {
|
|
31
|
+
id: "unfold",
|
|
32
|
+
className: "ruyi-icon ruyi-icon-unfold",
|
|
33
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
34
|
+
width: "16",
|
|
35
|
+
height: "16",
|
|
36
|
+
viewBox: "0 0 16 16",
|
|
37
|
+
style: {
|
|
38
|
+
width: '16px',
|
|
39
|
+
height: '16px'
|
|
40
|
+
}
|
|
41
|
+
}, /*#__PURE__*/React.createElement("g", {
|
|
42
|
+
fill: "none"
|
|
43
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
44
|
+
d: "M7.49984 13.2249L7.49984 10.5684L8.49984 10.5684L8.49984 13.2249L10.1913 11.5335L10.8984 12.2406L8.3534 14.7856C8.15814 14.9809 7.84155 14.9809 7.64629 14.7856L5.10126 12.2406L5.80836 11.5335L7.49984 13.2249Z",
|
|
45
|
+
fill: "rgb(255,255,255)"
|
|
46
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
47
|
+
d: "M8.49985 2.91421L8.49985 5.56836L7.49985 5.56836L7.49985 2.91421L5.80837 4.60569L5.10126 3.89859L7.6463 1.35355C7.84156 1.15829 8.15814 1.15829 8.3534 1.35355L10.8984 3.89859L10.1913 4.6057L8.49985 2.91421Z",
|
|
48
|
+
fill: "rgb(255,255,255)"
|
|
49
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
50
|
+
d: "M15 8.06836C15 7.51608 14.5522 7.06836 14 7.06836C13.4478 7.06836 13 7.51608 13 8.06836C13 8.62064 13.4478 9.06836 14 9.06836C14.5522 9.06836 15 8.62064 15 8.06836ZM12 8.06836C12 7.51608 11.5522 7.06836 11 7.06836C10.4478 7.06836 10 7.51608 10 8.06836C10 8.62064 10.4478 9.06836 11 9.06836C11.5522 9.06836 12 8.62064 12 8.06836ZM8 7.06836C8.55225 7.06836 9 7.51608 9 8.06836C9 8.62064 8.55225 9.06836 8 9.06836C7.44775 9.06836 7 8.62064 7 8.06836C7 7.51608 7.44775 7.06836 8 7.06836ZM6 8.06836C6 7.51608 5.55225 7.06836 5 7.06836C4.44775 7.06836 4 7.51608 4 8.06836C4 8.62064 4.44775 9.06836 5 9.06836C5.55225 9.06836 6 8.62064 6 8.06836ZM2 7.06836C2.55225 7.06836 3 7.51608 3 8.06836C3 8.62064 2.55225 9.06836 2 9.06836C1.44775 9.06836 1 8.62064 1 8.06836C1 7.51608 1.44775 7.06836 2 7.06836Z",
|
|
51
|
+
fill: "rgb(255,255,255)",
|
|
52
|
+
fillRule: "evenodd",
|
|
53
|
+
clipRule: "evenodd"
|
|
54
|
+
})));
|
|
55
|
+
};
|
|
56
|
+
var CollapseButton = function CollapseButton(_ref) {
|
|
57
|
+
var type = _ref.type,
|
|
58
|
+
onClick = _ref.onClick,
|
|
59
|
+
title = _ref.title,
|
|
60
|
+
className = _ref.className;
|
|
61
|
+
var icon = type === 'fold' ? /*#__PURE__*/React.createElement(FoldIcon, null) : /*#__PURE__*/React.createElement(UnFoldIcon, null);
|
|
62
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
63
|
+
className: ['terminal-viewer-header-collapse-button', className].filter(Boolean).join(' '),
|
|
64
|
+
onClick: onClick,
|
|
65
|
+
title: title,
|
|
66
|
+
"data-tooltip": title,
|
|
67
|
+
style: {
|
|
68
|
+
cursor: 'pointer'
|
|
69
|
+
}
|
|
70
|
+
}, icon);
|
|
71
|
+
};
|
|
72
|
+
export default CollapseButton;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { Terminal } from '@xterm/xterm';
|
|
1
2
|
import React from 'react';
|
|
3
|
+
import { TerminalRef, VirtualDomTerminal } from '../types';
|
|
2
4
|
import './index.less';
|
|
3
|
-
export interface TerminalViewerHeaderProps {
|
|
5
|
+
export interface TerminalViewerHeaderProps<T extends Terminal | VirtualDomTerminal = Terminal | VirtualDomTerminal> {
|
|
4
6
|
/**
|
|
5
7
|
* @description.zh-CN 搜索框 placeholder
|
|
6
8
|
* @default 请输入
|
|
@@ -15,7 +17,7 @@ export interface TerminalViewerHeaderProps {
|
|
|
15
17
|
* @description.zh-CN 是否支持清除搜索框
|
|
16
18
|
* @default true
|
|
17
19
|
*/
|
|
18
|
-
clearable?:
|
|
20
|
+
clearable?: boolean;
|
|
19
21
|
/**
|
|
20
22
|
* @description.zh-CN 是否支持刷新
|
|
21
23
|
*/
|
|
@@ -83,6 +85,14 @@ export interface TerminalViewerHeaderProps {
|
|
|
83
85
|
*@description.zh-CN 点击刷新按钮后的回调
|
|
84
86
|
*/
|
|
85
87
|
onRefresh?: (e: React.SyntheticEvent<HTMLSpanElement>) => void;
|
|
88
|
+
/**
|
|
89
|
+
* @description.zh-CN 终端实例
|
|
90
|
+
*/
|
|
91
|
+
terminalRef?: React.MutableRefObject<TerminalRef<T> | undefined>;
|
|
92
|
+
/**
|
|
93
|
+
* @description.zh-CN 是否全部折叠
|
|
94
|
+
*/
|
|
95
|
+
allCollapsed?: boolean;
|
|
86
96
|
}
|
|
87
|
-
declare const TerminalViewerHeader: React.
|
|
97
|
+
declare const TerminalViewerHeader: <T extends Terminal | VirtualDomTerminal = Terminal | VirtualDomTerminal>({ placeholder, defaultValue, clearable, refreshable, loading, activeTitleIndex, titles, searchResult, inputAddonBefore, inputAddonAfter, icons, onTitleChange, onSearchPrev, onSearchNext, onSearchChange, onSearchClear, onRefresh, terminalRef, allCollapsed, }: TerminalViewerHeaderProps<T>) => React.JSX.Element;
|
|
88
98
|
export default TerminalViewerHeader;
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
1
2
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
3
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
4
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
5
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
6
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
7
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
8
|
+
import { CloseCircleFilled, DownOutlined, LoadingOutlined, ReloadOutlined, SearchOutlined, UpOutlined } from '@ant-design/icons';
|
|
7
9
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
8
|
-
import
|
|
10
|
+
import CollapseButton from "./CollapseButton";
|
|
9
11
|
import "./index.less";
|
|
10
12
|
var TerminalViewerHeader = function TerminalViewerHeader(_ref) {
|
|
13
|
+
var _terminalRef$current, _terminalRef$current$;
|
|
11
14
|
var _ref$placeholder = _ref.placeholder,
|
|
12
15
|
placeholder = _ref$placeholder === void 0 ? '请输入' : _ref$placeholder,
|
|
13
16
|
defaultValue = _ref.defaultValue,
|
|
@@ -29,7 +32,9 @@ var TerminalViewerHeader = function TerminalViewerHeader(_ref) {
|
|
|
29
32
|
onSearchNext = _ref.onSearchNext,
|
|
30
33
|
onSearchChange = _ref.onSearchChange,
|
|
31
34
|
onSearchClear = _ref.onSearchClear,
|
|
32
|
-
onRefresh = _ref.onRefresh
|
|
35
|
+
onRefresh = _ref.onRefresh,
|
|
36
|
+
terminalRef = _ref.terminalRef,
|
|
37
|
+
allCollapsed = _ref.allCollapsed;
|
|
33
38
|
var _useState = useState(defaultValue || ''),
|
|
34
39
|
_useState2 = _slicedToArray(_useState, 2),
|
|
35
40
|
value = _useState2[0],
|
|
@@ -51,6 +56,10 @@ var TerminalViewerHeader = function TerminalViewerHeader(_ref) {
|
|
|
51
56
|
onSearchNext(value || '');
|
|
52
57
|
}
|
|
53
58
|
};
|
|
59
|
+
var isVirtualDomTerminal = function isVirtualDomTerminal(term) {
|
|
60
|
+
return term !== null && _typeof(term) === 'object' && 'collapseAll' in term;
|
|
61
|
+
};
|
|
62
|
+
var termInstance = terminalRef === null || terminalRef === void 0 || (_terminalRef$current = terminalRef.current) === null || _terminalRef$current === void 0 || (_terminalRef$current$ = _terminalRef$current.terminal) === null || _terminalRef$current$ === void 0 ? void 0 : _terminalRef$current$.call(_terminalRef$current);
|
|
54
63
|
var handleSearchClear = function handleSearchClear(e) {
|
|
55
64
|
setValue('');
|
|
56
65
|
if (onSearchClear instanceof Function) {
|
|
@@ -99,7 +108,7 @@ var TerminalViewerHeader = function TerminalViewerHeader(_ref) {
|
|
|
99
108
|
onClick: loading ? undefined : onRefresh
|
|
100
109
|
}, loading ? (icons === null || icons === void 0 ? void 0 : icons.loading) || /*#__PURE__*/React.createElement(LoadingOutlined, null) : (icons === null || icons === void 0 ? void 0 : icons.refresh) || /*#__PURE__*/React.createElement(ReloadOutlined, null)), /*#__PURE__*/React.createElement("div", {
|
|
101
110
|
className: "terminal-viewer-input-wrapper"
|
|
102
|
-
}, /*#__PURE__*/React.createElement("input", {
|
|
111
|
+
}, (icons === null || icons === void 0 ? void 0 : icons.search) || /*#__PURE__*/React.createElement(SearchOutlined, null), /*#__PURE__*/React.createElement("input", {
|
|
103
112
|
ref: inputRef,
|
|
104
113
|
type: "text",
|
|
105
114
|
value: value,
|
|
@@ -124,6 +133,25 @@ var TerminalViewerHeader = function TerminalViewerHeader(_ref) {
|
|
|
124
133
|
}, (icons === null || icons === void 0 ? void 0 : icons.up) || /*#__PURE__*/React.createElement(UpOutlined, null)), /*#__PURE__*/React.createElement("span", {
|
|
125
134
|
className: "input-suffix-search-tool",
|
|
126
135
|
onClick: handleSearchNext
|
|
127
|
-
}, (icons === null || icons === void 0 ? void 0 : icons.down) || /*#__PURE__*/React.createElement(DownOutlined, null)), (
|
|
136
|
+
}, (icons === null || icons === void 0 ? void 0 : icons.down) || /*#__PURE__*/React.createElement(DownOutlined, null)))), inputAddonAfter, isVirtualDomTerminal(termInstance) && /*#__PURE__*/React.createElement("div", {
|
|
137
|
+
className: "terminal-viewer-header-collapse-actions",
|
|
138
|
+
style: {
|
|
139
|
+
display: 'flex',
|
|
140
|
+
gap: '4px',
|
|
141
|
+
marginLeft: '8px'
|
|
142
|
+
}
|
|
143
|
+
}, allCollapsed ? /*#__PURE__*/React.createElement(CollapseButton, {
|
|
144
|
+
type: "unfold",
|
|
145
|
+
title: "\u5C55\u5F00\u5168\u90E8",
|
|
146
|
+
onClick: function onClick() {
|
|
147
|
+
return termInstance.expandAll();
|
|
148
|
+
}
|
|
149
|
+
}) : /*#__PURE__*/React.createElement(CollapseButton, {
|
|
150
|
+
type: "fold",
|
|
151
|
+
title: "\u6298\u53E0\u5168\u90E8",
|
|
152
|
+
onClick: function onClick() {
|
|
153
|
+
return termInstance.collapseAll();
|
|
154
|
+
}
|
|
155
|
+
}))));
|
|
128
156
|
};
|
|
129
157
|
export default TerminalViewerHeader;
|
|
@@ -63,6 +63,12 @@
|
|
|
63
63
|
display: flex;
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
+
|
|
67
|
+
.anticon-search {
|
|
68
|
+
margin-right: 8px;
|
|
69
|
+
color: #fff;
|
|
70
|
+
font-size: 16px;
|
|
71
|
+
}
|
|
66
72
|
}
|
|
67
73
|
|
|
68
74
|
input.terminal-viewer-input {
|
|
@@ -95,10 +101,6 @@ input.terminal-viewer-input {
|
|
|
95
101
|
flex-shrink: 0;
|
|
96
102
|
align-items: center;
|
|
97
103
|
|
|
98
|
-
.anticon-search {
|
|
99
|
-
font-size: 16px;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
104
|
> * {
|
|
103
105
|
margin-left: 8px;
|
|
104
106
|
}
|
|
@@ -141,3 +143,60 @@ input.terminal-viewer-input {
|
|
|
141
143
|
font-size: 16px;
|
|
142
144
|
cursor: pointer;
|
|
143
145
|
}
|
|
146
|
+
|
|
147
|
+
.terminal-viewer-header-collapse-button {
|
|
148
|
+
position: relative;
|
|
149
|
+
display: inline-flex;
|
|
150
|
+
align-items: center;
|
|
151
|
+
justify-content: center;
|
|
152
|
+
width: 32px;
|
|
153
|
+
height: 32px;
|
|
154
|
+
border-radius: 4px;
|
|
155
|
+
transition: background-color 0.3s;
|
|
156
|
+
|
|
157
|
+
&:hover {
|
|
158
|
+
background-color: rgba(255, 255, 255, 0.1);
|
|
159
|
+
border-radius: 4px;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
&::after,
|
|
163
|
+
&::before {
|
|
164
|
+
position: absolute;
|
|
165
|
+
left: 50%;
|
|
166
|
+
z-index: 1070; // Antd tooltip z-index
|
|
167
|
+
opacity: 0;
|
|
168
|
+
transition: opacity 0.1s cubic-bezier(0.23, 1, 0.32, 1),
|
|
169
|
+
transform 0.1s cubic-bezier(0.23, 1, 0.32, 1);
|
|
170
|
+
pointer-events: none;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
&::after {
|
|
174
|
+
bottom: 100%;
|
|
175
|
+
padding: 6px 8px;
|
|
176
|
+
color: #fff;
|
|
177
|
+
font-size: 12px;
|
|
178
|
+
line-height: 1.5715;
|
|
179
|
+
white-space: nowrap;
|
|
180
|
+
background-color: #62656f;
|
|
181
|
+
border-radius: 2px;
|
|
182
|
+
box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08),
|
|
183
|
+
0 9px 28px 8px rgba(0, 0, 0, 0.05);
|
|
184
|
+
transform: translate(-50%, 4px) scale(0.9);
|
|
185
|
+
content: attr(data-tooltip);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
&::before {
|
|
189
|
+
bottom: 100%;
|
|
190
|
+
margin-bottom: -5px; // 箭头微调
|
|
191
|
+
border: 5px solid transparent;
|
|
192
|
+
border-top-color: #62656f;
|
|
193
|
+
transform: translate(-50%, 4px) scale(0.9);
|
|
194
|
+
content: '';
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
&:hover::after,
|
|
198
|
+
&:hover::before {
|
|
199
|
+
transform: translate(-50%, -8px) scale(1);
|
|
200
|
+
opacity: 1;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { FullscreenExitOutlined, FullscreenOutlined, VerticalAlignBottomOutlined, VerticalAlignTopOutlined } from '@ant-design/icons';
|
|
1
2
|
import React from 'react';
|
|
2
|
-
import { FullscreenOutlined, FullscreenExitOutlined, VerticalAlignTopOutlined, VerticalAlignBottomOutlined } from '@ant-design/icons';
|
|
3
3
|
import "./index.less";
|
|
4
4
|
var TerminalViewerToolBar = function TerminalViewerToolBar(_ref) {
|
|
5
5
|
var className = _ref.className,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="@xterm/xterm" />
|
|
1
2
|
import React from 'react';
|
|
2
3
|
import { IHighlightOptions } from '../Addon/HighlightAddon';
|
|
3
4
|
import type { SearcherRef } from '../Addon/WorkerLog/types';
|
|
@@ -62,6 +63,10 @@ export interface TerminalViewerVirtualDomProps {
|
|
|
62
63
|
* @description.zh-CN 加载状态变更后的回调
|
|
63
64
|
*/
|
|
64
65
|
onLoading?: (loading: boolean) => void;
|
|
66
|
+
/**
|
|
67
|
+
* @description.zh-CN 折叠状态变更后的回调
|
|
68
|
+
*/
|
|
69
|
+
onCollapseStatusChange?: (allCollapsed: boolean) => void;
|
|
65
70
|
}
|
|
66
71
|
/**
|
|
67
72
|
* 置顶时:滚动到第一个分组
|
|
@@ -69,5 +74,5 @@ export interface TerminalViewerVirtualDomProps {
|
|
|
69
74
|
* 最后一个分组折叠时,在折叠之前,添加底部空间
|
|
70
75
|
* 最后一个分组展开时,在展开之前,删除底部空间
|
|
71
76
|
*/
|
|
72
|
-
declare const ReactVirtuoso: React.ForwardRefExoticComponent<TerminalViewerVirtualDomProps & React.RefAttributes<TerminalRef | undefined>>;
|
|
77
|
+
declare const ReactVirtuoso: React.ForwardRefExoticComponent<TerminalViewerVirtualDomProps & React.RefAttributes<TerminalRef<import("src").Terminal | VirtualDomTerminal> | undefined>>;
|
|
73
78
|
export default ReactVirtuoso;
|
|
@@ -70,7 +70,8 @@ var ReactVirtuoso = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
70
70
|
highlightOptions = _ref.highlightOptions,
|
|
71
71
|
extraOptions = _ref.extraOptions,
|
|
72
72
|
onLoading = _ref.onLoading,
|
|
73
|
-
onAddonReady = _ref.onAddonReady
|
|
73
|
+
onAddonReady = _ref.onAddonReady,
|
|
74
|
+
onCollapseStatusChange = _ref.onCollapseStatusChange;
|
|
74
75
|
var domRef = useRef(null);
|
|
75
76
|
var mountedRef = useRef(false);
|
|
76
77
|
var virtuosoRef = useRef(null);
|
|
@@ -116,7 +117,10 @@ var ReactVirtuoso = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
116
117
|
parserRef = _useStreamStepWorkerL.parserRef,
|
|
117
118
|
stageStatsRef = _useStreamStepWorkerL.stageStatsRef,
|
|
118
119
|
hasUserCollapseRef = _useStreamStepWorkerL.hasUserCollapseRef,
|
|
119
|
-
lastCollapseRef = _useStreamStepWorkerL.lastCollapseRef
|
|
120
|
+
lastCollapseRef = _useStreamStepWorkerL.lastCollapseRef,
|
|
121
|
+
isAllCollapsed = _useStreamStepWorkerL.isAllCollapsed,
|
|
122
|
+
collapseAll = _useStreamStepWorkerL.collapseAll,
|
|
123
|
+
expandAll = _useStreamStepWorkerL.expandAll;
|
|
120
124
|
var lineNumberWidth = useMemo(function () {
|
|
121
125
|
var _extraOptionsRef$curr, _domRef$current;
|
|
122
126
|
if (!((_extraOptionsRef$curr = extraOptionsRef.current) !== null && _extraOptionsRef$curr !== void 0 && _extraOptionsRef$curr.showLineNumber)) {
|
|
@@ -311,6 +315,11 @@ var ReactVirtuoso = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
311
315
|
}, 16);
|
|
312
316
|
}
|
|
313
317
|
}, [autoScroll, logs.length, scrollToRow, searcherResult.count]);
|
|
318
|
+
useEffect(function () {
|
|
319
|
+
if (typeof onCollapseStatusChange === 'function') {
|
|
320
|
+
onCollapseStatusChange(isAllCollapsed);
|
|
321
|
+
}
|
|
322
|
+
}, [isAllCollapsed, onCollapseStatusChange]);
|
|
314
323
|
useEffect(function () {
|
|
315
324
|
if (typeof onLoading === 'function') {
|
|
316
325
|
onLoading(working || loading);
|
|
@@ -392,7 +401,9 @@ var ReactVirtuoso = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
392
401
|
});
|
|
393
402
|
}
|
|
394
403
|
isScrollTopRef.current = false;
|
|
395
|
-
}
|
|
404
|
+
},
|
|
405
|
+
collapseAll: collapseAll,
|
|
406
|
+
expandAll: expandAll
|
|
396
407
|
};
|
|
397
408
|
}
|
|
398
409
|
};
|
|
@@ -7,6 +7,8 @@ export declare const useStreamStepWorkerLogs: (string: string, changeCallback?:
|
|
|
7
7
|
searcherRef: import("react").MutableRefObject<SearcherRef | undefined>;
|
|
8
8
|
searcherResult: SearcherResult;
|
|
9
9
|
toggleStage: (groupIndex: number, count: any) => void;
|
|
10
|
+
collapseAll: () => void;
|
|
11
|
+
expandAll: () => void;
|
|
10
12
|
groupCounts: number[];
|
|
11
13
|
parserRef: import("react").MutableRefObject<{
|
|
12
14
|
stages: Stage[];
|
|
@@ -17,5 +19,6 @@ export declare const useStreamStepWorkerLogs: (string: string, changeCallback?:
|
|
|
17
19
|
}[]>;
|
|
18
20
|
hasUserCollapseRef: import("react").MutableRefObject<boolean>;
|
|
19
21
|
lastCollapseRef: import("react").MutableRefObject<boolean>;
|
|
22
|
+
isAllCollapsed: boolean;
|
|
20
23
|
};
|
|
21
24
|
export default useStreamStepWorkerLogs;
|
|
@@ -8,13 +8,15 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
8
8
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
9
9
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
10
10
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
11
|
+
/* eslint-disable function-paren-newline */
|
|
12
|
+
/* eslint-disable no-param-reassign */
|
|
11
13
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
12
14
|
/* eslint-disable no-plusplus */
|
|
13
15
|
/* eslint-disable no-bitwise */
|
|
14
16
|
/* eslint-disable max-len */
|
|
15
17
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
16
18
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
17
|
-
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
19
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
18
20
|
import { v4 as uuidv4 } from 'uuid';
|
|
19
21
|
import globalContext from "../Addon/WorkerLog/GlobalContext";
|
|
20
22
|
import LogWorker from "../Addon/WorkerLog/LogWorker";
|
|
@@ -75,8 +77,34 @@ export var useStreamStepWorkerLogs = function useStreamStepWorkerLogs(string, ch
|
|
|
75
77
|
return newCount;
|
|
76
78
|
});
|
|
77
79
|
}, []);
|
|
78
|
-
|
|
79
|
-
|
|
80
|
+
// 收起全部分组
|
|
81
|
+
var collapseAll = useCallback(function () {
|
|
82
|
+
var _stageStatsRef$curren2, _parserRef$current2;
|
|
83
|
+
hasUserCollapseRef.current = true;
|
|
84
|
+
stageStatsRef.current.forEach(function (stat) {
|
|
85
|
+
stat.collapse = true;
|
|
86
|
+
});
|
|
87
|
+
lastCollapseRef.current = ((_stageStatsRef$curren2 = stageStatsRef.current[Number((_parserRef$current2 = parserRef.current) === null || _parserRef$current2 === void 0 ? void 0 : _parserRef$current2.stages.length) - 1]) === null || _stageStatsRef$curren2 === void 0 ? void 0 : _stageStatsRef$curren2.collapse) || false;
|
|
88
|
+
setGroupCounts(function (pre) {
|
|
89
|
+
return pre.map(function () {
|
|
90
|
+
return 0;
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
}, []);
|
|
94
|
+
// 展开全部分组
|
|
95
|
+
var expandAll = useCallback(function () {
|
|
96
|
+
hasUserCollapseRef.current = true;
|
|
97
|
+
stageStatsRef.current.forEach(function (stat) {
|
|
98
|
+
stat.collapse = false;
|
|
99
|
+
});
|
|
100
|
+
lastCollapseRef.current = false;
|
|
101
|
+
setGroupCounts(function () {
|
|
102
|
+
return parserRef.current.stages.map(function (_, i) {
|
|
103
|
+
var _stageStatsRef$curren3, _stageStatsRef$curren4;
|
|
104
|
+
return (_stageStatsRef$curren3 = (_stageStatsRef$curren4 = stageStatsRef.current[i]) === null || _stageStatsRef$curren4 === void 0 ? void 0 : _stageStatsRef$curren4.totalCount) !== null && _stageStatsRef$curren3 !== void 0 ? _stageStatsRef$curren3 : 0;
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}, []);
|
|
80
108
|
useEffect(function () {
|
|
81
109
|
prefixRef.current = uuidv4();
|
|
82
110
|
}, []);
|
|
@@ -182,8 +210,8 @@ export var useStreamStepWorkerLogs = function useStreamStepWorkerLogs(string, ch
|
|
|
182
210
|
lastCollapseRef.current = false;
|
|
183
211
|
}
|
|
184
212
|
return stages.map(function (s, i) {
|
|
185
|
-
var _stageStatsRef$
|
|
186
|
-
var currentCollapseStatus = (_stageStatsRef$
|
|
213
|
+
var _stageStatsRef$curren5;
|
|
214
|
+
var currentCollapseStatus = (_stageStatsRef$curren5 = stageStatsRef.current) === null || _stageStatsRef$curren5 === void 0 || (_stageStatsRef$curren5 = _stageStatsRef$curren5[i]) === null || _stageStatsRef$curren5 === void 0 ? void 0 : _stageStatsRef$curren5.collapse;
|
|
187
215
|
// 计算实际在 flatLines 中的行数(不包含 START/END 行)
|
|
188
216
|
// 使用 startIndex 和 endIndex 来计算
|
|
189
217
|
var actualCount = 0;
|
|
@@ -241,17 +269,26 @@ export var useStreamStepWorkerLogs = function useStreamStepWorkerLogs(string, ch
|
|
|
241
269
|
worker === null || worker === void 0 || worker.off('search-log-success', onSearchSuccess);
|
|
242
270
|
};
|
|
243
271
|
}, []);
|
|
272
|
+
var isAllCollapsed = useMemo(function () {
|
|
273
|
+
if (groupCounts.length === 0) return false;
|
|
274
|
+
return groupCounts.every(function (count) {
|
|
275
|
+
return count === 0;
|
|
276
|
+
});
|
|
277
|
+
}, [groupCounts]);
|
|
244
278
|
return {
|
|
245
279
|
logs: logs,
|
|
246
280
|
working: working,
|
|
247
281
|
searcherRef: searcherRef,
|
|
248
282
|
searcherResult: searcherResult,
|
|
249
283
|
toggleStage: toggleStage,
|
|
284
|
+
collapseAll: collapseAll,
|
|
285
|
+
expandAll: expandAll,
|
|
250
286
|
groupCounts: groupCounts,
|
|
251
287
|
parserRef: parserRef,
|
|
252
288
|
stageStatsRef: stageStatsRef,
|
|
253
289
|
hasUserCollapseRef: hasUserCollapseRef,
|
|
254
|
-
lastCollapseRef: lastCollapseRef
|
|
290
|
+
lastCollapseRef: lastCollapseRef,
|
|
291
|
+
isAllCollapsed: isAllCollapsed
|
|
255
292
|
};
|
|
256
293
|
};
|
|
257
294
|
export default useStreamStepWorkerLogs;
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -26,8 +26,12 @@ export interface ExtraOptions {
|
|
|
26
26
|
export interface VirtualDomTerminal {
|
|
27
27
|
scrollToTop: () => void;
|
|
28
28
|
scrollToBottom: () => void;
|
|
29
|
+
/** 收起全部分组 */
|
|
30
|
+
collapseAll: () => void;
|
|
31
|
+
/** 展开全部分组 */
|
|
32
|
+
expandAll: () => void;
|
|
29
33
|
}
|
|
30
|
-
export interface TerminalRef {
|
|
34
|
+
export interface TerminalRef<T extends Terminal | VirtualDomTerminal = Terminal | VirtualDomTerminal> {
|
|
31
35
|
el?: HTMLDivElement | null;
|
|
32
36
|
refresh: () => void;
|
|
33
37
|
addons?: {
|
|
@@ -37,7 +41,7 @@ export interface TerminalRef {
|
|
|
37
41
|
highlight?: () => HighlightAddon | undefined;
|
|
38
42
|
canvas?: () => CanvasAddon | undefined;
|
|
39
43
|
} | undefined;
|
|
40
|
-
terminal?: () =>
|
|
44
|
+
terminal?: () => T | undefined;
|
|
41
45
|
}
|
|
42
46
|
export interface LogAfterProps {
|
|
43
47
|
index: number;
|
|
@@ -6,7 +6,7 @@ type IsRoot<T extends any> = 'parentId' extends keyof T ? false : true;
|
|
|
6
6
|
type GetAllRouteWithoutLayout<Item extends AllRoute> = Item extends any ? 'isWrapper' extends keyof Item ? never : 'isLayout' extends keyof Item ? never : Item : never;
|
|
7
7
|
type AllRouteWithoutLayout = GetAllRouteWithoutLayout<AllRoute>;
|
|
8
8
|
type IndexRoutePathname = '/' extends AllRouteWithoutLayout['path'] ? '/' : never;
|
|
9
|
-
type GetChildrens<T extends any> = T extends any ? IsRoot<T> extends true ? never : T : never;
|
|
9
|
+
type GetChildrens<T extends any> = T extends any ? (IsRoot<T> extends true ? never : T) : never;
|
|
10
10
|
type Childrens = GetChildrens<AllRoute>;
|
|
11
11
|
type Root = Exclude<AllRoute, Childrens>;
|
|
12
12
|
type AllIds = AllRoute['id'];
|