@@ -15,7 +15,7 @@ See the License for the specific language governing permissions and
15
15
limitations under the License.
16
16
*/
17
17
18
- import React , { useCallback , useContext } from "react" ;
18
+ import React , { ReactElement , useCallback , useContext } from "react" ;
19
19
import { logger } from "matrix-js-sdk/src/logger" ;
20
20
import { MatrixEvent } from "matrix-js-sdk/src/models/event" ;
21
21
@@ -29,6 +29,8 @@ import { ViewRoomPayload } from "../../../dispatcher/payloads/ViewRoomPayload";
29
29
import RoomContext from "../../../contexts/RoomContext" ;
30
30
import { useRoomState } from "../../../hooks/useRoomState" ;
31
31
import SettingsStore from "../../../settings/SettingsStore" ;
32
+ import { Room } from "matrix-js-sdk/src/matrix" ;
33
+ import MatrixToPermalinkConstructor from "../../../utils/permalinks/MatrixToPermalinkConstructor" ;
32
34
33
35
interface IProps {
34
36
/** The m.room.create MatrixEvent that this tile represents */
@@ -86,7 +88,10 @@ export const RoomPredecessorTile: React.FC<IProps> = ({ mxEvent, timestamp }) =>
86
88
}
87
89
88
90
const prevRoom = MatrixClientPeg . get ( ) . getRoom ( predecessor . roomId ) ;
89
- if ( ! prevRoom ) {
91
+
92
+ // We need either the previous room, or some servers to find it with.
93
+ // Otherwise, we must bail out here
94
+ if ( ! prevRoom && ! predecessor . viaServers ) {
90
95
logger . warn ( `Failed to find predecessor room with id ${ predecessor . roomId } ` ) ;
91
96
return (
92
97
< EventTileBubble
@@ -104,14 +109,11 @@ export const RoomPredecessorTile: React.FC<IProps> = ({ mxEvent, timestamp }) =>
104
109
</ EventTileBubble >
105
110
) ;
106
111
}
107
- const permalinkCreator = new RoomPermalinkCreator ( prevRoom , predecessor . roomId ) ;
108
- permalinkCreator . load ( ) ;
109
- let predecessorPermalink : string ;
110
- if ( predecessor . eventId ) {
111
- predecessorPermalink = permalinkCreator . forEvent ( predecessor . eventId ) ;
112
- } else {
113
- predecessorPermalink = permalinkCreator . forRoom ( ) ;
114
- }
112
+
113
+ const predecessorPermalink = prevRoom
114
+ ? createLinkWithRoom ( prevRoom , predecessor . roomId , predecessor . eventId )
115
+ : createLinkWithoutRoom ( predecessor . roomId , predecessor . viaServers ) ;
116
+
115
117
const link = (
116
118
< a href = { predecessorPermalink } onClick = { onLinkClicked } >
117
119
{ _t ( "Click here to see older messages." ) }
@@ -126,4 +128,23 @@ export const RoomPredecessorTile: React.FC<IProps> = ({ mxEvent, timestamp }) =>
126
128
timestamp = { timestamp }
127
129
/>
128
130
) ;
131
+
132
+ function createLinkWithRoom ( room : Room , roomId : string , eventId ?: string ) : string {
133
+ const permalinkCreator = new RoomPermalinkCreator ( room , roomId ) ;
134
+ permalinkCreator . load ( ) ;
135
+ if ( eventId ) {
136
+ return permalinkCreator . forEvent ( eventId ) ;
137
+ } else {
138
+ return permalinkCreator . forRoom ( ) ;
139
+ }
140
+ }
141
+
142
+ function createLinkWithoutRoom ( roomId : string , viaServers : string [ ] , eventId ?: string ) : string {
143
+ const matrixToPermalinkConstructor = new MatrixToPermalinkConstructor ( ) ;
144
+ if ( eventId ) {
145
+ return matrixToPermalinkConstructor . forEvent ( roomId , eventId , viaServers ) ;
146
+ } else {
147
+ return matrixToPermalinkConstructor . forRoom ( roomId , viaServers ) ;
148
+ }
149
+ }
129
150
} ;
0 commit comments