import React, { useEffect, useState } from 'react'; import { Button, Form, Label, Modal, Pagination, Table } from 'semantic-ui-react'; import { API, openPage, showError, showSuccess, showWarning, timestamp2string } from '../helpers'; import { ITEMS_PER_PAGE } from '../constants'; function renderChannel(channel) { switch (channel) { case 'email': return ; case 'test': return ( ); case 'corp_app': return ( ); case 'corp': return ( ); case 'lark': return ( ); case 'ding': return ( ); case 'bark': return ( ); case 'client': return ( ); case 'telegram': return ( ); case 'discord': return ( ); case 'none': return ; default: return ; } } function renderTimestamp(timestamp) { return ( <> {timestamp2string(timestamp)} > ) } function renderStatus(status) { switch (status) { case 1: return ( ); case 2: return ( ); case 3: return ( ); default: return ( ); } } const MessagesTable = () => { const [messages, setMessages] = useState([]); const [loading, setLoading] = useState(true); const [activePage, setActivePage] = useState(1); const [searchKeyword, setSearchKeyword] = useState(''); const [searching, setSearching] = useState(false); const [message, setMessage] = useState({ title: '消息标题', description: '消息描述', content: '消息内容', link: '', }); // Message to be viewed const [viewModalOpen, setViewModalOpen] = useState(false); const loadMessages = async (startIdx) => { const res = await API.get(`/api/message/?p=${startIdx}`); const { success, message, data } = res.data; if (success) { if (startIdx === 0) { setMessages(data); } else { let newMessages = messages; newMessages.push(...data); setMessages(newMessages); } } else { showError(message); } setLoading(false); }; const onPaginationChange = (e, { activePage }) => { (async () => { if (activePage === Math.ceil(messages.length / ITEMS_PER_PAGE) + 1) { // In this case we have to load more data and then append them. await loadMessages(activePage - 1); } setActivePage(activePage); })(); }; const checkPermission = async () => { // Check global permission let res = await API.get('/api/status'); const { success, data } = res.data; if (success) { if (data.message_persistence) { return; } } // Check user permission { let res = await API.get('/api/user/self'); const { success, message, data } = res.data; if (success) { if (data.save_message_to_database !== 1) { showWarning('您没有消息持久化的权限,消息未保存,请联系管理员。'); } } else { showError(message); } } } useEffect(() => { loadMessages(0) .then() .catch((reason) => { showError(reason); }); checkPermission().then(); }, []); const viewMessage = async (id) => { setLoading(true); const res = await API.get(`/api/message/${id}`); const { success, message, data } = res.data; if (success) { setMessage(data); setViewModalOpen(true); } else { showError(message); } setLoading(false); }; const resendMessage = async (id) => { setLoading(true); const res = await API.post(`/api/message/resend/${id}`); const { success, message } = res.data; if (success) { showSuccess('消息已重新发送!'); } else { showError(message); } setLoading(false); }; const deleteMessage = async (id, idx) => { setLoading(true); const res = await API.delete(`/api/message/${id}`); const { success, message } = res.data; if (success) { showSuccess('操作成功完成!'); let newMessages = [...messages]; let realIdx = (activePage - 1) * ITEMS_PER_PAGE + idx; newMessages[realIdx].deleted = true; setMessages(newMessages); } else { showError(message); } setLoading(false); }; const searchMessages = async () => { if (searchKeyword === '') { // if keyword is blank, load files instead. await loadMessages(0); setActivePage(1); return; } setSearching(true); const res = await API.get(`/api/message/search?keyword=${searchKeyword}`); const { success, message, data } = res.data; if (success) { setMessages(data); setActivePage(1); } else { showError(message); } setSearching(false); }; const handleKeywordChange = async (e, { value }) => { setSearchKeyword(value.trim()); }; const sortMessage = (key) => { if (messages.length === 0) return; setLoading(true); let sortedMessages = [...messages]; sortedMessages.sort((a, b) => { return ('' + a[key]).localeCompare(b[key]); }); if (sortedMessages[0].id === messages[0].id) { sortedMessages.reverse(); } setMessages(sortedMessages); setLoading(false); }; return ( <>
{message.description}
: ''} {message.content ?{message.content}
: ''}