mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 22:26:01 +00:00
shell script runner
This commit is contained in:
39
packages/web/src/query/SocketMessagesView.js
Normal file
39
packages/web/src/query/SocketMessagesView.js
Normal file
@@ -0,0 +1,39 @@
|
||||
import _ from 'lodash';
|
||||
import React from 'react';
|
||||
import MessagesView from './MessagesView';
|
||||
import useSocket from '../utility/SocketProvider';
|
||||
|
||||
export default function SocketMessagesView({ eventName, onMessageClick = undefined, executeNumber }) {
|
||||
const [displayedMessages, setDisplayedMessages] = React.useState([]);
|
||||
const cachedMessagesRef = React.useRef([]);
|
||||
const socket = useSocket();
|
||||
|
||||
const displayCachedMessages = React.useMemo(
|
||||
() =>
|
||||
_.throttle(() => {
|
||||
setDisplayedMessages([...cachedMessagesRef.current]);
|
||||
}, 500),
|
||||
[]
|
||||
);
|
||||
|
||||
const handleInfo = React.useCallback((info) => {
|
||||
cachedMessagesRef.current.push(info);
|
||||
displayCachedMessages();
|
||||
}, []);
|
||||
|
||||
React.useEffect(() => {
|
||||
setDisplayedMessages([]);
|
||||
cachedMessagesRef.current = [];
|
||||
}, [executeNumber]);
|
||||
|
||||
React.useEffect(() => {
|
||||
if (eventName && socket) {
|
||||
socket.on(eventName, handleInfo);
|
||||
return () => {
|
||||
socket.off(eventName, handleInfo);
|
||||
};
|
||||
}
|
||||
}, [eventName, socket]);
|
||||
|
||||
return <MessagesView items={displayedMessages} onMessageClick={onMessageClick} />;
|
||||
}
|
||||
Reference in New Issue
Block a user