Skip to content
Snippets Groups Projects
ChatterboxView.ts 1.66 KiB
Newer Older
RMidhunSuresh's avatar
RMidhunSuresh committed
import { TemplateView, TimelineView, AvatarView } 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);
    }

    render(t) {
        return t.div({ className: "ChatterboxView" }, [
            t.mapView(
                (vm) => (vm.roomViewModel ? vm : null),
                (vm) => (vm ? new RoomHeaderView(vm) : null)
            ),
            t.mapView(
                (vm) => vm.timelineViewModel,
                (vm) => (vm ? new TimelineView(vm) : new LoadingView())
            ),
            t.mapView(
                (vm) => vm.messageComposerViewModel,
                (vm) => (vm ? new MessageComposer(vm) : null)
            ),
RMidhunSuresh's avatar
RMidhunSuresh committed
            t.view(new FooterView()),
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" }, [
                t.button({ className: "RoomHeaderView_menu_minimize", onClick: () => (window as any).sendMinimizeToParent() })
Midhun Suresh's avatar
Midhun Suresh committed
            ]),
Midhun Suresh's avatar
Midhun Suresh committed
        ]);
    }
}