@peers-app/peers-ui 0.7.6 → 0.7.7
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.
|
@@ -41,12 +41,12 @@ const peers_sdk_1 = require("@peers-app/peers-sdk");
|
|
|
41
41
|
const lodash_1 = require("lodash");
|
|
42
42
|
const react_1 = __importStar(require("react"));
|
|
43
43
|
const react_infinite_scroll_component_1 = __importDefault(require("react-infinite-scroll-component"));
|
|
44
|
+
const loading_indicator_1 = require("../../components/loading-indicator");
|
|
44
45
|
const hooks_1 = require("../../hooks");
|
|
45
|
-
const color_mode_dropdown_1 = require("../settings/color-mode-dropdown");
|
|
46
46
|
const ui_loader_1 = require("../../ui-router/ui-loader");
|
|
47
|
+
const color_mode_dropdown_1 = require("../settings/color-mode-dropdown");
|
|
47
48
|
const log_display_1 = require("./log-display");
|
|
48
49
|
const log_filters_1 = require("./log-filters");
|
|
49
|
-
const loading_indicator_1 = require("../../components/loading-indicator");
|
|
50
50
|
const resizable_table_header_1 = require("./resizable-table-header");
|
|
51
51
|
const windowHeight = () => window.innerHeight;
|
|
52
52
|
const DEFAULT_COLUMNS = [
|
|
@@ -57,8 +57,7 @@ const DEFAULT_COLUMNS = [
|
|
|
57
57
|
{ key: 'message', label: 'Message', width: 600 },
|
|
58
58
|
];
|
|
59
59
|
const ConsoleLogsList = () => {
|
|
60
|
-
const
|
|
61
|
-
const logs = logsObs();
|
|
60
|
+
const logs = (0, hooks_1.useObservableState)([]);
|
|
62
61
|
const [allLogsLoaded, setAllLogsLoaded] = (0, react_1.useState)(false);
|
|
63
62
|
const [levelFilter, setLevelFilter] = (0, react_1.useState)('all');
|
|
64
63
|
const [processFilter, setProcessFilter] = (0, react_1.useState)('all');
|
|
@@ -142,14 +141,15 @@ const ConsoleLogsList = () => {
|
|
|
142
141
|
}
|
|
143
142
|
// Load older logs (prepend to list)
|
|
144
143
|
function prependLogs() {
|
|
145
|
-
const oldestLog = logs[0];
|
|
144
|
+
const oldestLog = logs()[0];
|
|
146
145
|
fetchLogs(oldestLog).then(fetchedLogs => {
|
|
147
146
|
if (fetchedLogs.length === 0) {
|
|
148
147
|
setAllLogsLoaded(true);
|
|
149
148
|
}
|
|
150
149
|
else {
|
|
151
|
-
|
|
152
|
-
|
|
150
|
+
let _logs = (0, lodash_1.sortBy)([...logs(), ...fetchedLogs], 'timestamp');
|
|
151
|
+
_logs = (0, lodash_1.uniqBy)(_logs, l => l.logId);
|
|
152
|
+
logs(_logs);
|
|
153
153
|
}
|
|
154
154
|
});
|
|
155
155
|
return false;
|
|
@@ -163,7 +163,7 @@ const ConsoleLogsList = () => {
|
|
|
163
163
|
}, [logs, levelFilter, processFilter, searchText]);
|
|
164
164
|
// Reset when filters change
|
|
165
165
|
(0, react_1.useEffect)(() => {
|
|
166
|
-
|
|
166
|
+
logs([]);
|
|
167
167
|
setAllLogsLoaded(false);
|
|
168
168
|
updateLogCount();
|
|
169
169
|
}, [levelFilter, processFilter, searchText]);
|
|
@@ -181,14 +181,13 @@ const ConsoleLogsList = () => {
|
|
|
181
181
|
return;
|
|
182
182
|
if (searchText && !log.message.toLowerCase().includes(searchText.toLowerCase()))
|
|
183
183
|
return;
|
|
184
|
-
// Don't add
|
|
185
|
-
if (logs.
|
|
186
|
-
return;
|
|
187
|
-
if (logs.length > batchSize && (0, lodash_1.min)(logs.map(l => l.timestamp)) > log.timestamp)
|
|
184
|
+
// Don't add we're only showing a limited batch and this is older
|
|
185
|
+
if (logs().length > batchSize && (0, lodash_1.min)(logs().map(l => l.timestamp)) > log.timestamp)
|
|
188
186
|
return;
|
|
189
187
|
if (evt.op === 'insert') {
|
|
190
|
-
|
|
191
|
-
|
|
188
|
+
let _logs = (0, lodash_1.sortBy)([...logs(), log], 'timestamp');
|
|
189
|
+
_logs = (0, lodash_1.uniqBy)(_logs, l => l.logId);
|
|
190
|
+
logs(_logs);
|
|
192
191
|
scrollToBottom('smooth');
|
|
193
192
|
}
|
|
194
193
|
});
|
|
@@ -196,7 +195,7 @@ const ConsoleLogsList = () => {
|
|
|
196
195
|
sub.unsubscribe();
|
|
197
196
|
};
|
|
198
197
|
});
|
|
199
|
-
}, [
|
|
198
|
+
}, [levelFilter, processFilter, searchText]);
|
|
200
199
|
function scrollToBottom(behavior, delay = 100) {
|
|
201
200
|
setTimeout(() => {
|
|
202
201
|
logsEndRef.current?.scrollIntoView({ behavior });
|
|
@@ -207,7 +206,7 @@ const ConsoleLogsList = () => {
|
|
|
207
206
|
try {
|
|
208
207
|
const table = await (0, peers_sdk_1.ConsoleLogs)();
|
|
209
208
|
await table.deleteOldLogs(Date.now());
|
|
210
|
-
|
|
209
|
+
logs([]);
|
|
211
210
|
setAllLogsLoaded(true);
|
|
212
211
|
setTotalLogCount(0);
|
|
213
212
|
}
|
|
@@ -216,6 +215,7 @@ const ConsoleLogsList = () => {
|
|
|
216
215
|
}
|
|
217
216
|
}
|
|
218
217
|
}
|
|
218
|
+
const _logs = (0, lodash_1.uniqBy)(logs(), l => l.logId);
|
|
219
219
|
return (react_1.default.createElement("div", { className: "container-fluid", style: { height: 'calc(100vh - 100px)', display: 'flex', flexDirection: 'column' } },
|
|
220
220
|
react_1.default.createElement(log_filters_1.LogFilters, { levelFilter: levelFilter, setLevelFilter: setLevelFilter, processFilter: processFilter, setProcessFilter: setProcessFilter, searchText: searchText, setSearchText: setSearchText }),
|
|
221
221
|
react_1.default.createElement("div", { ref: containerRef, style: {
|
|
@@ -234,15 +234,17 @@ const ConsoleLogsList = () => {
|
|
|
234
234
|
display: 'flex',
|
|
235
235
|
flexDirection: 'column-reverse',
|
|
236
236
|
} },
|
|
237
|
-
react_1.default.createElement(react_infinite_scroll_component_1.default, { dataLength:
|
|
237
|
+
react_1.default.createElement(react_infinite_scroll_component_1.default, { dataLength: _logs.length, next: prependLogs, style: { display: 'flex', flexDirection: 'column-reverse', overflow: 'hidden' }, inverse: true, hasMore: !allLogsLoaded, loader: react_1.default.createElement(loading_indicator_1.LoadingIndicator, null), scrollableTarget: "scrollableLogsDiv", endMessage: react_1.default.createElement(react_1.Fragment, null,
|
|
238
238
|
react_1.default.createElement("div", { className: "d-flex justify-content-center p-3" },
|
|
239
239
|
react_1.default.createElement("div", { className: "text-muted" },
|
|
240
240
|
react_1.default.createElement("i", null, "beginning of logs")))) },
|
|
241
241
|
react_1.default.createElement("div", { ref: logsEndRef }),
|
|
242
|
-
|
|
242
|
+
_logs.length === 0 && allLogsLoaded ? (react_1.default.createElement("div", { className: "text-center p-5 text-muted" },
|
|
243
243
|
react_1.default.createElement("i", { className: "bi bi-inbox display-1" }),
|
|
244
244
|
react_1.default.createElement("p", { className: "mt-2" }, "No logs found"))) : (react_1.default.createElement("table", { className: "table table-sm table-hover mb-0", style: { fontSize: '0.85rem', tableLayout: 'fixed', width: '100%' } },
|
|
245
|
-
react_1.default.createElement("tbody", null,
|
|
245
|
+
react_1.default.createElement("tbody", null, _logs.map((log) => (
|
|
246
|
+
// log.logId
|
|
247
|
+
react_1.default.createElement(log_display_1.LogDisplay, { key: log.logId, log: log, columns: columns }))))))))),
|
|
246
248
|
react_1.default.createElement("div", { style: {
|
|
247
249
|
position: 'fixed',
|
|
248
250
|
bottom: 0,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@peers-app/peers-ui",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.7",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/peers-app/peers-ui.git"
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"bootstrap": "^5.3.3",
|
|
30
|
-
"@peers-app/peers-sdk": "^0.7.
|
|
30
|
+
"@peers-app/peers-sdk": "^0.7.7",
|
|
31
31
|
"react": "^18.0.0",
|
|
32
32
|
"react-dom": "^18.0.0"
|
|
33
33
|
},
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"jest": "^29.7.0",
|
|
58
58
|
"jest-environment-jsdom": "^30.0.5",
|
|
59
59
|
"path-browserify": "^1.0.1",
|
|
60
|
-
"@peers-app/peers-sdk": "0.7.
|
|
60
|
+
"@peers-app/peers-sdk": "0.7.7",
|
|
61
61
|
"react": "^18.0.0",
|
|
62
62
|
"react-dom": "^18.0.0",
|
|
63
63
|
"string-width": "^7.1.0",
|
|
@@ -2,12 +2,12 @@ import { ConsoleLogs, DataFilter, IConsoleLog } from "@peers-app/peers-sdk";
|
|
|
2
2
|
import { min, sortBy, uniqBy } from 'lodash';
|
|
3
3
|
import React, { Fragment, useEffect, useMemo, useState } from 'react';
|
|
4
4
|
import InfiniteScroll from 'react-infinite-scroll-component';
|
|
5
|
+
import { LoadingIndicator } from '../../components/loading-indicator';
|
|
5
6
|
import { useObservable, useObservableState } from "../../hooks";
|
|
6
|
-
import { colorMode } from '../settings/color-mode-dropdown';
|
|
7
7
|
import { registerInternalPeersUI } from "../../ui-router/ui-loader";
|
|
8
|
+
import { colorMode } from '../settings/color-mode-dropdown';
|
|
8
9
|
import { LogDisplay } from './log-display';
|
|
9
10
|
import { LogFilters } from './log-filters';
|
|
10
|
-
import { LoadingIndicator } from '../../components/loading-indicator';
|
|
11
11
|
import { ResizableTableHeader } from './resizable-table-header';
|
|
12
12
|
|
|
13
13
|
const windowHeight = () => window.innerHeight;
|
|
@@ -27,8 +27,7 @@ const DEFAULT_COLUMNS: Column[] = [
|
|
|
27
27
|
];
|
|
28
28
|
|
|
29
29
|
export const ConsoleLogsList = () => {
|
|
30
|
-
const
|
|
31
|
-
const logs = logsObs();
|
|
30
|
+
const logs = useObservableState<IConsoleLog[]>([]);
|
|
32
31
|
const [allLogsLoaded, setAllLogsLoaded] = useState(false);
|
|
33
32
|
const [levelFilter, setLevelFilter] = useState<string>('all');
|
|
34
33
|
const [processFilter, setProcessFilter] = useState<string>('all');
|
|
@@ -132,13 +131,14 @@ export const ConsoleLogsList = () => {
|
|
|
132
131
|
|
|
133
132
|
// Load older logs (prepend to list)
|
|
134
133
|
function prependLogs() {
|
|
135
|
-
const oldestLog = logs[0];
|
|
134
|
+
const oldestLog = logs()[0];
|
|
136
135
|
fetchLogs(oldestLog).then(fetchedLogs => {
|
|
137
136
|
if (fetchedLogs.length === 0) {
|
|
138
137
|
setAllLogsLoaded(true);
|
|
139
138
|
} else {
|
|
140
|
-
|
|
141
|
-
|
|
139
|
+
let _logs = sortBy([...logs(), ...fetchedLogs], 'timestamp');
|
|
140
|
+
_logs = uniqBy(_logs, l => l.logId);
|
|
141
|
+
logs(_logs);
|
|
142
142
|
}
|
|
143
143
|
});
|
|
144
144
|
return false;
|
|
@@ -154,7 +154,7 @@ export const ConsoleLogsList = () => {
|
|
|
154
154
|
|
|
155
155
|
// Reset when filters change
|
|
156
156
|
useEffect(() => {
|
|
157
|
-
|
|
157
|
+
logs([]);
|
|
158
158
|
setAllLogsLoaded(false);
|
|
159
159
|
updateLogCount();
|
|
160
160
|
}, [levelFilter, processFilter, searchText]);
|
|
@@ -173,13 +173,13 @@ export const ConsoleLogsList = () => {
|
|
|
173
173
|
if (processFilter !== 'all' && log.process !== processFilter) return;
|
|
174
174
|
if (searchText && !log.message.toLowerCase().includes(searchText.toLowerCase())) return;
|
|
175
175
|
|
|
176
|
-
// Don't add
|
|
177
|
-
if (logs.
|
|
178
|
-
if (logs.length > batchSize && min(logs.map(l => l.timestamp))! > log.timestamp) return;
|
|
176
|
+
// Don't add we're only showing a limited batch and this is older
|
|
177
|
+
if (logs().length > batchSize && min(logs().map(l => l.timestamp))! > log.timestamp) return;
|
|
179
178
|
|
|
180
179
|
if (evt.op === 'insert') {
|
|
181
|
-
|
|
182
|
-
|
|
180
|
+
let _logs = sortBy([...logs(), log], 'timestamp');
|
|
181
|
+
_logs = uniqBy(_logs, l => l.logId);
|
|
182
|
+
logs(_logs);
|
|
183
183
|
scrollToBottom('smooth');
|
|
184
184
|
}
|
|
185
185
|
});
|
|
@@ -188,7 +188,7 @@ export const ConsoleLogsList = () => {
|
|
|
188
188
|
sub.unsubscribe();
|
|
189
189
|
};
|
|
190
190
|
});
|
|
191
|
-
}, [
|
|
191
|
+
}, [levelFilter, processFilter, searchText]);
|
|
192
192
|
|
|
193
193
|
function scrollToBottom(behavior: 'instant' | 'smooth', delay = 100) {
|
|
194
194
|
setTimeout(() => {
|
|
@@ -201,7 +201,7 @@ export const ConsoleLogsList = () => {
|
|
|
201
201
|
try {
|
|
202
202
|
const table = await ConsoleLogs();
|
|
203
203
|
await table.deleteOldLogs(Date.now());
|
|
204
|
-
|
|
204
|
+
logs([]);
|
|
205
205
|
setAllLogsLoaded(true);
|
|
206
206
|
setTotalLogCount(0);
|
|
207
207
|
} catch (err) {
|
|
@@ -210,6 +210,8 @@ export const ConsoleLogsList = () => {
|
|
|
210
210
|
}
|
|
211
211
|
}
|
|
212
212
|
|
|
213
|
+
const _logs = uniqBy(logs(), l => l.logId);
|
|
214
|
+
|
|
213
215
|
return (
|
|
214
216
|
<div className="container-fluid" style={{ height: 'calc(100vh - 100px)', display: 'flex', flexDirection: 'column' }}>
|
|
215
217
|
<LogFilters
|
|
@@ -251,7 +253,7 @@ export const ConsoleLogsList = () => {
|
|
|
251
253
|
}}
|
|
252
254
|
>
|
|
253
255
|
<InfiniteScroll
|
|
254
|
-
dataLength={
|
|
256
|
+
dataLength={_logs.length}
|
|
255
257
|
next={prependLogs}
|
|
256
258
|
style={{ display: 'flex', flexDirection: 'column-reverse', overflow: 'hidden' }}
|
|
257
259
|
inverse={true}
|
|
@@ -269,7 +271,7 @@ export const ConsoleLogsList = () => {
|
|
|
269
271
|
}
|
|
270
272
|
>
|
|
271
273
|
<div ref={logsEndRef} />
|
|
272
|
-
{
|
|
274
|
+
{_logs.length === 0 && allLogsLoaded ? (
|
|
273
275
|
<div className="text-center p-5 text-muted">
|
|
274
276
|
<i className="bi bi-inbox display-1"></i>
|
|
275
277
|
<p className="mt-2">No logs found</p>
|
|
@@ -277,7 +279,8 @@ export const ConsoleLogsList = () => {
|
|
|
277
279
|
) : (
|
|
278
280
|
<table className="table table-sm table-hover mb-0" style={{ fontSize: '0.85rem', tableLayout: 'fixed', width: '100%' }}>
|
|
279
281
|
<tbody>
|
|
280
|
-
{
|
|
282
|
+
{_logs.map((log) => (
|
|
283
|
+
// log.logId
|
|
281
284
|
<LogDisplay key={log.logId} log={log} columns={columns} />
|
|
282
285
|
))}
|
|
283
286
|
</tbody>
|