From 93d37aeb93f98fc6b5845877438ec7c38584aa25 Mon Sep 17 00:00:00 2001 From: RMidhunSuresh Date: Wed, 22 Mar 2023 15:05:58 +0530 Subject: [PATCH] Create views based on viewmodel --- .../session/toast/BaseToastNotificationViewModel.ts | 2 ++ .../session/toast/ToastCollectionViewModel.ts | 2 +- .../toast/calls/CallToastNotificationViewModel.ts | 4 ++++ ...IewModel.ts => CallsToastCollectionViewModel.ts} | 0 .../web/ui/session/toast/ToastCollectionView.ts | 13 ++++++++++++- 5 files changed, 19 insertions(+), 2 deletions(-) rename src/domain/session/toast/calls/{CallsToastCollectionVIewModel.ts => CallsToastCollectionViewModel.ts} (100%) diff --git a/src/domain/session/toast/BaseToastNotificationViewModel.ts b/src/domain/session/toast/BaseToastNotificationViewModel.ts index 41e20e42..133a8d36 100644 --- a/src/domain/session/toast/BaseToastNotificationViewModel.ts +++ b/src/domain/session/toast/BaseToastNotificationViewModel.ts @@ -32,4 +32,6 @@ export abstract class BaseToastNotificationViewModel { await this.logAndCatch("CallToastNotificationViewModel.join", async (log) => { const stream = await this.platform.mediaDevices.getMediaTracks(false, true); diff --git a/src/domain/session/toast/calls/CallsToastCollectionVIewModel.ts b/src/domain/session/toast/calls/CallsToastCollectionViewModel.ts similarity index 100% rename from src/domain/session/toast/calls/CallsToastCollectionVIewModel.ts rename to src/domain/session/toast/calls/CallsToastCollectionViewModel.ts diff --git a/src/platform/web/ui/session/toast/ToastCollectionView.ts b/src/platform/web/ui/session/toast/ToastCollectionView.ts index 3f38609d..a3d734d2 100644 --- a/src/platform/web/ui/session/toast/ToastCollectionView.ts +++ b/src/platform/web/ui/session/toast/ToastCollectionView.ts @@ -17,15 +17,26 @@ limitations under the License. import {CallToastNotificationView} from "./CallToastNotificationView"; import {ListView} from "../../general/ListView"; import {TemplateView, Builder} from "../../general/TemplateView"; +import type {IView} from "../../general/types"; import type {CallToastNotificationViewModel} from "../../../../../domain/session/toast/calls/CallToastNotificationViewModel"; import type {ToastCollectionViewModel} from "../../../../../domain/session/toast/ToastCollectionViewModel"; +import type {BaseToastNotificationViewModel} from "../../../../../domain/session/toast/BaseToastNotificationViewModel"; + +function toastViewModelToView(vm: BaseToastNotificationViewModel): IView { + switch (vm.kind) { + case "calls": + return new CallToastNotificationView(vm as CallToastNotificationViewModel); + default: + throw new Error(`Cannot find view class for notification kind ${vm.kind}`); + } +} export class ToastCollectionView extends TemplateView { render(t: Builder, vm: ToastCollectionViewModel) { const view = new ListView({ list: vm.toastViewModels, parentProvidesUpdates: false, - }, (vm: CallToastNotificationViewModel) => new CallToastNotificationView(vm)); + }, (vm: CallToastNotificationViewModel) => toastViewModelToView(vm)); return t.div({ className: "ToastCollectionView" }, [ t.view(view), ]);