feat: use sse to fetch new messages (close #70)

This commit is contained in:
JustSong
2023-05-12 18:28:54 +08:00
parent 024fc97ced
commit 8f7e5456e5
6 changed files with 97 additions and 11 deletions
+24 -9
View File
@@ -1,12 +1,5 @@
import React, { useEffect, useRef, useState } from 'react';
import {
Button,
Form,
Label,
Modal,
Pagination,
Table,
} from 'semantic-ui-react';
import { Button, Form, Label, Modal, Pagination, Table } from 'semantic-ui-react';
import { API, openPage, showError, showSuccess, showWarning } from '../helpers';
import { ITEMS_PER_PAGE } from '../constants';
@@ -61,7 +54,7 @@ const MessagesTable = () => {
title: '消息标题',
description: '消息描述',
content: '消息内容',
link: '',
link: ''
}); // Message to be viewed
const [viewModalOpen, setViewModalOpen] = useState(false);
@@ -123,6 +116,17 @@ const MessagesTable = () => {
showError(reason);
});
checkPermission().then();
const eventSource = new EventSource('/api/message/stream');
eventSource.onerror = (e) => {
showError('服务端消息推送流连接出错!');
};
eventSource.onmessage = (e) => {
let newMessage = JSON.parse(e.data);
insertNewMessage(newMessage);
};
return () => {
eventSource.close();
};
}, []);
const viewMessage = async (id) => {
@@ -203,6 +207,17 @@ const MessagesTable = () => {
setLoading(false);
};
const insertNewMessage = (message) => {
console.log(messages);
setMessages(messages => {
let newMessages = [message];
newMessages.push(...messages);
return newMessages;
}
);
setActivePage(1);
};
const refresh = async () => {
await loadMessages(0);
setActivePage(1);