@@ -2,43 +2,86 @@ import PageLoader from 'components/common/PageLoader/PageLoader';
2
2
import { Table } from 'components/common/table/Table/Table.styled' ;
3
3
import TableHeaderCell from 'components/common/table/TableHeaderCell/TableHeaderCell' ;
4
4
import { TopicMessage } from 'generated-sources' ;
5
- import React , { useState } from 'react' ;
5
+ import React , { useCallback , useEffect , useState } from 'react' ;
6
6
import { Button } from 'components/common/Button/Button' ;
7
7
import * as S from 'components/common/NewTable/Table.styled' ;
8
8
import { usePaginateTopics , useIsLiveMode } from 'lib/hooks/useMessagesFilters' ;
9
9
import { 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' ;
10
13
11
- import PreviewModal from './PreviewModal' ;
12
14
import Message , { PreviewFilter } from './Message' ;
15
+ import PreviewModal from './PreviewModal' ;
13
16
14
17
export interface MessagesTableProps {
15
18
messages : TopicMessage [ ] ;
16
19
isFetching : boolean ;
17
20
}
18
21
22
+ interface MessagePreviewProps {
23
+ [ key : string ] : {
24
+ keyFilters : PreviewFilter [ ] ;
25
+ contentFilters : PreviewFilter [ ] ;
26
+ } ;
27
+ }
28
+
19
29
const MessagesTable : React . FC < MessagesTableProps > = ( {
20
30
messages,
21
31
isFetching,
22
32
} ) => {
23
33
const paginate = usePaginateTopics ( ) ;
24
- const [ previewFor , setPreviewFor ] = useState < string | null > ( null ) ;
25
-
34
+ const [ previewFor , setPreviewFor ] = useState < 'key' | 'content' | null > ( null ) ;
26
35
const [ keyFilters , setKeyFilters ] = useState < PreviewFilter [ ] > ( [ ] ) ;
27
36
const [ contentFilters , setContentFilters ] = useState < PreviewFilter [ ] > ( [ ] ) ;
28
37
const nextCursor = useMessageFiltersStore ( ( state ) => state . nextCursor ) ;
29
38
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
+ ) ;
30
77
31
78
return (
32
79
< div style = { { position : 'relative' } } >
33
80
{ previewFor !== null && (
34
81
< PreviewModal
35
82
values = { previewFor === 'key' ? keyFilters : contentFilters }
36
83
toggleIsOpen = { ( ) => setPreviewFor ( null ) }
37
- setFilters = { ( payload : PreviewFilter [ ] ) =>
38
- previewFor === 'key'
39
- ? setKeyFilters ( payload )
40
- : setContentFilters ( payload )
41
- }
84
+ setFilters = { setFilters }
42
85
/>
43
86
) }
44
87
< Table isFullwidth >
0 commit comments