Add support for MSC2762's timeline functionality
See https://github.com/matrix-org/matrix-widget-api/pull/41
This commit is contained in:
parent
ee95e36a7c
commit
289ac34764
5 changed files with 119 additions and 48 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright 2020 The Matrix.org Foundation C.I.C.
|
||||
Copyright 2020 - 2021 The Matrix.org Foundation C.I.C.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -14,11 +14,22 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
import { Capability, EventDirection, MatrixCapabilities, WidgetEventCapability, WidgetKind } from "matrix-widget-api";
|
||||
import {
|
||||
Capability,
|
||||
EventDirection,
|
||||
getTimelineRoomIDFromCapability,
|
||||
isTimelineCapability,
|
||||
isTimelineCapabilityFor,
|
||||
MatrixCapabilities, Symbols,
|
||||
WidgetEventCapability,
|
||||
WidgetKind
|
||||
} from "matrix-widget-api";
|
||||
import { _t, _td, TranslatedString } from "../languageHandler";
|
||||
import { EventType, MsgType } from "matrix-js-sdk/src/@types/event";
|
||||
import { ElementWidgetCapabilities } from "../stores/widgets/ElementWidgetCapabilities";
|
||||
import React from "react";
|
||||
import { MatrixClientPeg } from "../MatrixClientPeg";
|
||||
import TextWithTooltip from "../components/views/elements/TextWithTooltip";
|
||||
|
||||
type GENERIC_WIDGET_KIND = "generic"; // eslint-disable-line @typescript-eslint/naming-convention
|
||||
const GENERIC_WIDGET_KIND: GENERIC_WIDGET_KIND = "generic";
|
||||
|
@ -138,8 +149,31 @@ export class CapabilityText {
|
|||
if (textForKind[GENERIC_WIDGET_KIND]) return { primary: _t(textForKind[GENERIC_WIDGET_KIND]) };
|
||||
|
||||
// ... we'll fall through to the generic capability processing at the end of this
|
||||
// function if we fail to locate a simple string and the capability isn't for an
|
||||
// event.
|
||||
// function if we fail to generate a string for the capability.
|
||||
}
|
||||
|
||||
// Try to handle timeline capabilities. The text here implies that the caller has sorted
|
||||
// the timeline caps to the end for UI purposes.
|
||||
if (isTimelineCapability(capability)) {
|
||||
if (isTimelineCapabilityFor(capability, Symbols.AnyRoom)) {
|
||||
return { primary: _t("The above, but in any room you are joined or invited to as well") };
|
||||
} else {
|
||||
const roomId = getTimelineRoomIDFromCapability(capability);
|
||||
const room = MatrixClientPeg.get().getRoom(roomId);
|
||||
return {
|
||||
primary: _t("The above, but in <Room /> as well", {}, {
|
||||
Room: () => {
|
||||
if (room) {
|
||||
return <TextWithTooltip tooltip={room.getCanonicalAlias() ?? roomId}>
|
||||
<b>{ room.name }</b>
|
||||
</TextWithTooltip>;
|
||||
} else {
|
||||
return <b><code>{ roomId }</code></b>;
|
||||
}
|
||||
},
|
||||
}),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// We didn't have a super simple line of text, so try processing the capability as the
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue