@@ -17,6 +17,7 @@ limitations under the License.
17
17
import React , { useContext , useEffect , useRef , useState } from 'react' ;
18
18
import { EventTimelineSet } from 'matrix-js-sdk/src/models/event-timeline-set' ;
19
19
import { Thread , ThreadEvent } from 'matrix-js-sdk/src/models/thread' ;
20
+ import { Room } from 'matrix-js-sdk/src/models/room' ;
20
21
21
22
import BaseCard from "../views/right_panel/BaseCard" ;
22
23
import ResizeNotifier from '../../utils/ResizeNotifier' ;
@@ -37,8 +38,6 @@ interface IProps {
37
38
onClose : ( ) => void ;
38
39
resizeNotifier : ResizeNotifier ;
39
40
permalinkCreator : RoomPermalinkCreator ;
40
- allThreadsTimelineSet : EventTimelineSet ;
41
- myThreadsTimelineSet : EventTimelineSet ;
42
41
}
43
42
44
43
export enum ThreadFilterType {
@@ -156,22 +155,24 @@ const ThreadPanel: React.FC<IProps> = ({
156
155
roomId,
157
156
onClose,
158
157
permalinkCreator,
159
- myThreadsTimelineSet,
160
- allThreadsTimelineSet,
161
158
} ) => {
162
159
const mxClient = useContext ( MatrixClientContext ) ;
163
160
const roomContext = useContext ( RoomContext ) ;
164
161
const timelinePanel = useRef < TimelinePanel > ( ) ;
165
162
const card = useRef < HTMLDivElement > ( ) ;
166
163
167
164
const [ filterOption , setFilterOption ] = useState < ThreadFilterType > ( ThreadFilterType . All ) ;
168
- const [ room , setRoom ] = useState ( mxClient . getRoom ( roomId ) ) ;
165
+ const [ room , setRoom ] = useState < Room | null > ( null ) ;
169
166
const [ threadCount , setThreadCount ] = useState < number > ( 0 ) ;
170
167
const [ timelineSet , setTimelineSet ] = useState < EventTimelineSet | null > ( null ) ;
171
168
const [ narrow , setNarrow ] = useState < boolean > ( false ) ;
172
169
173
170
useEffect ( ( ) => {
174
- setRoom ( mxClient . getRoom ( roomId ) ) ;
171
+ const room = mxClient . getRoom ( roomId ) ;
172
+ room . createThreadsTimelineSets ( ) . then ( ( ) => {
173
+ setRoom ( room ) ;
174
+ setFilterOption ( ThreadFilterType . All ) ;
175
+ } ) ;
175
176
} , [ mxClient , roomId ] ) ;
176
177
177
178
useEffect ( ( ) => {
@@ -183,24 +184,28 @@ const ThreadPanel: React.FC<IProps> = ({
183
184
if ( timelineSet ) timelinePanel . current . refreshTimeline ( ) ;
184
185
}
185
186
186
- setThreadCount ( room . threads . size ) ;
187
+ if ( room ) {
188
+ setThreadCount ( room . threads . size ) ;
187
189
188
- room . on ( ThreadEvent . New , onNewThread ) ;
189
- room . on ( ThreadEvent . Update , refreshTimeline ) ;
190
+ room . on ( ThreadEvent . New , onNewThread ) ;
191
+ room . on ( ThreadEvent . Update , refreshTimeline ) ;
192
+ }
190
193
191
194
return ( ) => {
192
- room . removeListener ( ThreadEvent . New , onNewThread ) ;
193
- room . removeListener ( ThreadEvent . Update , refreshTimeline ) ;
195
+ room ? .removeListener ( ThreadEvent . New , onNewThread ) ;
196
+ room ? .removeListener ( ThreadEvent . Update , refreshTimeline ) ;
194
197
} ;
195
198
} , [ room , mxClient , timelineSet ] ) ;
196
199
197
200
useEffect ( ( ) => {
198
- if ( filterOption === ThreadFilterType . My ) {
199
- setTimelineSet ( myThreadsTimelineSet ) ;
200
- } else {
201
- setTimelineSet ( allThreadsTimelineSet ) ;
201
+ if ( room ) {
202
+ if ( filterOption === ThreadFilterType . My ) {
203
+ setTimelineSet ( room . threadsTimelineSets [ 1 ] ) ;
204
+ } else {
205
+ setTimelineSet ( room . threadsTimelineSets [ 0 ] ) ;
206
+ }
202
207
}
203
- } , [ filterOption , allThreadsTimelineSet , myThreadsTimelineSet ] ) ;
208
+ } , [ room , filterOption ] ) ;
204
209
205
210
useEffect ( ( ) => {
206
211
if ( timelineSet && ! Thread . hasServerSideSupport ) {
0 commit comments