Skip to content
Snippets Groups Projects
ChatterboxView.ts 2.73 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
    Copyright 2022 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.
    You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
    */
    
    
    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" })]
                )]
            );
        }
    }