Handle thread bundled relationships coming from the server via MSC3666 (#8292)
This commit is contained in:
parent
1e442b2260
commit
391ec4c7e2
1 changed files with 16 additions and 3 deletions
|
@ -23,7 +23,7 @@ limitations under the License.
|
||||||
import React, { createRef } from 'react';
|
import React, { createRef } from 'react';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { IRecommendedVersion, NotificationCountType, Room, RoomEvent } from "matrix-js-sdk/src/models/room";
|
import { IRecommendedVersion, NotificationCountType, Room, RoomEvent } from "matrix-js-sdk/src/models/room";
|
||||||
import { MatrixEvent, MatrixEventEvent } from "matrix-js-sdk/src/models/event";
|
import { IThreadBundledRelationship, MatrixEvent, MatrixEventEvent } from "matrix-js-sdk/src/models/event";
|
||||||
import { EventSubscription } from "fbemitter";
|
import { EventSubscription } from "fbemitter";
|
||||||
import { ISearchResults } from 'matrix-js-sdk/src/@types/search';
|
import { ISearchResults } from 'matrix-js-sdk/src/@types/search';
|
||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
|
@ -35,6 +35,7 @@ import { throttle } from "lodash";
|
||||||
import { MatrixError } from 'matrix-js-sdk/src/http-api';
|
import { MatrixError } from 'matrix-js-sdk/src/http-api';
|
||||||
import { ClientEvent } from "matrix-js-sdk/src/client";
|
import { ClientEvent } from "matrix-js-sdk/src/client";
|
||||||
import { CryptoEvent } from "matrix-js-sdk/src/crypto";
|
import { CryptoEvent } from "matrix-js-sdk/src/crypto";
|
||||||
|
import { THREAD_RELATION_TYPE } from 'matrix-js-sdk/src/models/thread';
|
||||||
|
|
||||||
import shouldHideEvent from '../../shouldHideEvent';
|
import shouldHideEvent from '../../shouldHideEvent';
|
||||||
import { _t } from '../../languageHandler';
|
import { _t } from '../../languageHandler';
|
||||||
|
@ -1358,7 +1359,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
||||||
this.handleSearchResult(searchPromise);
|
this.handleSearchResult(searchPromise);
|
||||||
};
|
};
|
||||||
|
|
||||||
private handleSearchResult(searchPromise: Promise<any>): Promise<boolean> {
|
private handleSearchResult(searchPromise: Promise<ISearchResults>): Promise<boolean> {
|
||||||
// keep a record of the current search id, so that if the search terms
|
// keep a record of the current search id, so that if the search terms
|
||||||
// change before we get a response, we can ignore the results.
|
// change before we get a response, we can ignore the results.
|
||||||
const localSearchId = this.searchId;
|
const localSearchId = this.searchId;
|
||||||
|
@ -1367,7 +1368,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
||||||
searchInProgress: true,
|
searchInProgress: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
return searchPromise.then((results) => {
|
return searchPromise.then(async (results) => {
|
||||||
debuglog("search complete");
|
debuglog("search complete");
|
||||||
if (this.unmounted ||
|
if (this.unmounted ||
|
||||||
this.state.timelineRenderingType !== TimelineRenderingType.Search ||
|
this.state.timelineRenderingType !== TimelineRenderingType.Search ||
|
||||||
|
@ -1394,6 +1395,18 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
||||||
return b.length - a.length;
|
return b.length - a.length;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Process all thread roots returned in this batch of search results
|
||||||
|
// XXX: This won't work for results coming from Seshat which won't include the bundled relationship
|
||||||
|
for (const result of results.results) {
|
||||||
|
for (const event of result.context.getTimeline()) {
|
||||||
|
const bundledRelationship = event
|
||||||
|
.getServerAggregatedRelation<IThreadBundledRelationship>(THREAD_RELATION_TYPE.name);
|
||||||
|
if (!bundledRelationship || event.getThread()) continue;
|
||||||
|
const room = this.context.getRoom(event.getRoomId());
|
||||||
|
event.setThread(room.findThreadForEvent(event) ?? room.createThread(event, [], true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
searchHighlights: highlights,
|
searchHighlights: highlights,
|
||||||
searchResults: results,
|
searchResults: results,
|
||||||
|
|
Loading…
Reference in a new issue