Skip to content
Snippets Groups Projects
ChatterboxView.ts 2.38 KiB
Newer Older
David Langley's avatar
David Langley committed
Copyright 2025 New Vector Ltd.
Copyright 2022 The Matrix.org Foundation C.I.C.

David Langley's avatar
David Langley committed
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
RMidhunSuresh's avatar
RMidhunSuresh committed
import { TemplateView, TimelineView, AvatarView, viewClassForTile } from "hydrogen-view-sdk";
Midhun Suresh's avatar
Midhun Suresh committed
import { MessageComposer } from "hydrogen-view-sdk";
import { ChatterboxViewModel } from "../../viewmodels/ChatterboxViewModel";
RMidhunSuresh's avatar
RMidhunSuresh committed
import { FooterView } from "./FooterView";
RMidhunSuresh's avatar
RMidhunSuresh committed
import { LoadingView } from "./LoadingView";
RMidhunSuresh's avatar
RMidhunSuresh committed

Midhun Suresh's avatar
Midhun Suresh committed
export class ChatterboxView extends TemplateView<ChatterboxViewModel> {
Midhun Suresh's avatar
Midhun Suresh committed
    constructor(value) {
        super(value);
    }

RMidhunSuresh's avatar
RMidhunSuresh committed
    render(t, vm) {
RMidhunSuresh's avatar
RMidhunSuresh committed
        return t.div({ className: "ChatterboxView", },
            [
Midhun Suresh's avatar
Midhun Suresh committed
            t.mapView(
                (vm) => (vm.roomViewModel ? vm : null),
                (vm) => (vm ? new RoomHeaderView(vm) : null)
            ),
            t.mapView(
                (vm) => vm.timelineViewModel,
RMidhunSuresh's avatar
RMidhunSuresh committed
                (vm) => (vm ? new TimelineView(vm, viewClassForTile) : new LoadingView())
Midhun Suresh's avatar
Midhun Suresh committed
            ),
            t.mapView(
                (vm) => vm.messageComposerViewModel,
RMidhunSuresh's avatar
RMidhunSuresh committed
                (vm) => (vm?.kind === "composer" ? new MessageComposer(vm) : new WaitingForOperatorJoinView())
Midhun Suresh's avatar
Midhun Suresh committed
            ),
RMidhunSuresh's avatar
RMidhunSuresh committed
            t.view(new FooterView(vm.footerViewModel)),
Midhun Suresh's avatar
Midhun Suresh committed
        ]);
    }
}

class RoomHeaderView extends TemplateView<ChatterboxViewModel> {
Midhun Suresh's avatar
Midhun Suresh committed
    constructor(value) {
        super(value);
    }

    render(t, vm: ChatterboxViewModel) {
        const avatar = vm.customAvatarURL ? t.img({ className:"avatar", src: vm.customAvatarURL }) : t.view(new AvatarView(vm.roomViewModel, 30));
Midhun Suresh's avatar
Midhun Suresh committed
        return t.div({ className: "RoomHeaderView" }, [
            avatar,
            t.div({ className: "RoomHeaderView_name" }, vm => vm.roomName),
Midhun Suresh's avatar
Midhun Suresh committed
            t.div({ className: "RoomHeaderView_menu" }, [
RMidhunSuresh's avatar
RMidhunSuresh committed
                t.button({
                    className: "RoomHeaderView_menu_minimize", onClick: () => {
                        vm.minimize();
                    }
                })
Midhun Suresh's avatar
Midhun Suresh committed
            ]),
Midhun Suresh's avatar
Midhun Suresh committed
        ]);
    }
}
RMidhunSuresh's avatar
RMidhunSuresh committed

class WaitingForOperatorJoinView extends TemplateView {
    render(t) {
        return t.div({ className: "WaitingForOperatorJoinView" }, [
            t.div({ className: "FakeComposerContainer" }, [
                t.span("Waiting for operator to join "),
                t.div({ className: "loader" })]
            )]
        );
    }
}