@@ -2,43 +2,86 @@ import PageLoader from 'components/common/PageLoader/PageLoader';
22import { Table } from 'components/common/table/Table/Table.styled' ;
33import TableHeaderCell from 'components/common/table/TableHeaderCell/TableHeaderCell' ;
44import { TopicMessage } from 'generated-sources' ;
5- import React , { useState } from 'react' ;
5+ import React , { useCallback , useEffect , useState } from 'react' ;
66import { Button } from 'components/common/Button/Button' ;
77import * as S from 'components/common/NewTable/Table.styled' ;
88import { usePaginateTopics , useIsLiveMode } from 'lib/hooks/useMessagesFilters' ;
99import { useMessageFiltersStore } from 'lib/hooks/useMessageFiltersStore' ;
10+ import useAppParams from 'lib/hooks/useAppParams' ;
11+ import { RouteParamsClusterTopic } from 'lib/paths' ;
12+ import { useLocalStorage } from 'lib/hooks/useLocalStorage' ;
1013
11- import PreviewModal from './PreviewModal' ;
1214import Message , { PreviewFilter } from './Message' ;
15+ import PreviewModal from './PreviewModal' ;
1316
1417export interface MessagesTableProps {
1518 messages : TopicMessage [ ] ;
1619 isFetching : boolean ;
1720}
1821
22+ interface MessagePreviewProps {
23+ [ key : string ] : {
24+ keyFilters : PreviewFilter [ ] ;
25+ contentFilters : PreviewFilter [ ] ;
26+ } ;
27+ }
28+
1929const MessagesTable : React . FC < MessagesTableProps > = ( {
2030 messages,
2131 isFetching,
2232} ) => {
2333 const paginate = usePaginateTopics ( ) ;
24- const [ previewFor , setPreviewFor ] = useState < string | null > ( null ) ;
25-
34+ const [ previewFor , setPreviewFor ] = useState < 'key' | 'content' | null > ( null ) ;
2635 const [ keyFilters , setKeyFilters ] = useState < PreviewFilter [ ] > ( [ ] ) ;
2736 const [ contentFilters , setContentFilters ] = useState < PreviewFilter [ ] > ( [ ] ) ;
2837 const nextCursor = useMessageFiltersStore ( ( state ) => state . nextCursor ) ;
2938 const isLive = useIsLiveMode ( ) ;
39+ const { topicName } = useAppParams < RouteParamsClusterTopic > ( ) ;
40+ const [ messagesPreview , setMessagesPreview ] =
41+ useLocalStorage < MessagePreviewProps > ( 'message-preview' , {
42+ [ topicName ] : {
43+ keyFilters : [ ] ,
44+ contentFilters : [ ] ,
45+ } ,
46+ } ) ;
47+
48+ useEffect ( ( ) => {
49+ setKeyFilters ( messagesPreview [ topicName ] ?. keyFilters || [ ] ) ;
50+ setContentFilters ( messagesPreview [ topicName ] ?. contentFilters || [ ] ) ;
51+ } , [ ] ) ;
52+
53+ const setFilters = useCallback (
54+ ( payload : PreviewFilter [ ] ) => {
55+ if ( previewFor === 'key' ) {
56+ setKeyFilters ( payload ) ;
57+ setMessagesPreview ( {
58+ ...messagesPreview ,
59+ [ topicName ] : {
60+ ...messagesPreview [ topicName ] ,
61+ keyFilters : payload ,
62+ } ,
63+ } ) ;
64+ } else {
65+ setContentFilters ( payload ) ;
66+ setMessagesPreview ( {
67+ ...messagesPreview ,
68+ [ topicName ] : {
69+ ...messagesPreview [ topicName ] ,
70+ contentFilters : payload ,
71+ } ,
72+ } ) ;
73+ }
74+ } ,
75+ [ previewFor , messagesPreview , topicName ]
76+ ) ;
3077
3178 return (
3279 < div style = { { position : 'relative' } } >
3380 { previewFor !== null && (
3481 < PreviewModal
3582 values = { previewFor === 'key' ? keyFilters : contentFilters }
3683 toggleIsOpen = { ( ) => setPreviewFor ( null ) }
37- setFilters = { ( payload : PreviewFilter [ ] ) =>
38- previewFor === 'key'
39- ? setKeyFilters ( payload )
40- : setContentFilters ( payload )
41- }
84+ setFilters = { setFilters }
4285 />
4386 ) }
4487 < Table isFullwidth >
0 commit comments