diff --git a/src/viewmodels/ChatterboxViewModel.ts b/src/viewmodels/ChatterboxViewModel.ts index 9a786988b67bb06c015cee8fcd6a0ce8c6802db2..a31cc785831aa8f6d0bdf9e7c516cbc6dad3bc59 100644 --- a/src/viewmodels/ChatterboxViewModel.ts +++ b/src/viewmodels/ChatterboxViewModel.ts @@ -1,14 +1,5 @@ -import { RoomViewModel, ViewModel, RoomStatus, tileClassForEntry} from "hydrogen-view-sdk"; - -function createCustomTileClassForEntry(ownUserId: string) { - return function customTileClassForEntry(entry) { - if (entry.content?.membership === "join" && entry.sender !== ownUserId || - entry.eventType !== "m.room.member") { - return tileClassForEntry(entry); - } - return undefined; - } -} +import { RoomViewModel, ViewModel, RoomStatus } from "hydrogen-view-sdk"; +import { createCustomTileClassForEntry } from "./tiles"; export class ChatterboxViewModel extends ViewModel { private _roomViewModel?: typeof RoomViewModel; diff --git a/src/viewmodels/tiles.ts b/src/viewmodels/tiles.ts new file mode 100644 index 0000000000000000000000000000000000000000..aad096ee8d7ba60171ae341f6856cb7bd54bfc14 --- /dev/null +++ b/src/viewmodels/tiles.ts @@ -0,0 +1,77 @@ +import { TextTile, ImageTile, VideoTile, FileTile, LocationTile, RedactedTile, tileClassForEntry } from "hydrogen-view-sdk"; + +class ChatterboxTextTile extends TextTile { + get displayName() { + return this.isOwn? "me" : super.displayName; + } +} + +class ChatterboxImageTile extends ImageTile { + get displayName() { + return this.isOwn? "me" : super.displayName; + } +} + +class ChatterboxVideoTile extends VideoTile { + get displayName() { + return this.isOwn? "me" : super.displayName; + } +} + +class ChatterboxFileTile extends FileTile { + get displayName() { + return this.isOwn? "me" : super.displayName; + } +} + +class ChatterboxLocationTile extends LocationTile { + get displayName() { + return this.isOwn? "me" : super.displayName; + } +} + +class ChatterboxRedactedTile extends RedactedTile { + get displayName() { + return this.isOwn? "me" : super.displayName; + } +} + +export function createCustomTileClassForEntry(ownUserId: string) { + return function customTileClassForEntry(entry) { + switch (entry.eventType) { + case "m.room.message": + if (entry.isRedacted) { + return ChatterboxRedactedTile; + } + const content = entry.content; + const msgtype = content && content.msgtype; + switch (msgtype) { + case "m.text": + case "m.notice": + case "m.emote": + return ChatterboxTextTile; + case "m.image": + return ChatterboxImageTile; + case "m.video": + return ChatterboxVideoTile; + case "m.file": + return ChatterboxFileTile; + case "m.location": + return ChatterboxLocationTile; + default: + // unknown msgtype not rendered + return undefined; + } + case "m.room.member": + if (entry.content?.membership === "join" && entry.sender !== ownUserId) { + return tileClassForEntry(entry); + } + else { + return undefined; + } + default: + return tileClassForEntry(entry); + + } + } +}