mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 15:25:59 +00:00
40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
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} />;
|
|
}
|