import PageLoader from 'components/common/PageLoader/PageLoader'; import { Table } from 'components/common/table/Table/Table.styled'; import TableHeaderCell from 'components/common/table/TableHeaderCell/TableHeaderCell'; import { TopicMessage } from 'generated-sources'; import React, { useContext, useState } from 'react'; import { getTopicMessges, getIsTopicMessagesFetching, } from 'redux/reducers/topicMessages/selectors'; import TopicMessagesContext from 'components/contexts/TopicMessagesContext'; import { useAppSelector } from 'lib/hooks/redux'; import { Button } from 'components/common/Button/Button'; import { useSearchParams } from 'react-router-dom'; import { MESSAGES_PER_PAGE } from 'lib/constants'; import * as S from 'components/common/NewTable/Table.styled'; import PreviewModal from './PreviewModal'; import Message, { PreviewFilter } from './Message'; const MessagesTable: React.FC = () => { const [previewFor, setPreviewFor] = useState(null); const [keyFilters, setKeyFilters] = useState([]); const [contentFilters, setContentFilters] = useState([]); const [searchParams, setSearchParams] = useSearchParams(); const page = searchParams.get('page'); const { isLive } = useContext(TopicMessagesContext); const messages = useAppSelector(getTopicMessges); const isFetching = useAppSelector(getIsTopicMessagesFetching); const isTailing = isLive && isFetching; // Pagination is disabled in live mode, also we don't want to show the button // if we are fetching the messages or if we are at the end of the topic const isPaginationDisabled = isTailing || isFetching; const isNextPageButtonDisabled = isPaginationDisabled || messages.length < Number(MESSAGES_PER_PAGE); const isPrevPageButtonDisabled = isPaginationDisabled || !Number(searchParams.get('page')); const handleNextPage = () => { searchParams.set('page', String(Number(page || 0) + 1)); setSearchParams(searchParams); }; const handlePrevPage = () => { searchParams.set('page', String(Number(page || 0) - 1)); setSearchParams(searchParams); }; return (
{previewFor !== null && ( setPreviewFor(null)} setFilters={(payload: PreviewFilter[]) => previewFor === 'key' ? setKeyFilters(payload) : setContentFilters(payload) } /> )} setPreviewFor('key')} /> setPreviewFor('content')} /> {messages.map((message: TopicMessage) => ( ))} {isFetching && isLive && !messages.length && ( )} {messages.length === 0 && !isFetching && ( )}
No messages found
); }; export default MessagesTable;