Create views based on viewmodel

This commit is contained in:
RMidhunSuresh 2023-03-22 15:05:58 +05:30
parent a1086a7139
commit 93d37aeb93
No known key found for this signature in database
5 changed files with 19 additions and 2 deletions

View File

@ -32,4 +32,6 @@ export abstract class BaseToastNotificationViewModel<N extends object = SegmentT
dismiss(): void { dismiss(): void {
this.getOption("dismiss")(); this.getOption("dismiss")();
} }
abstract get kind(): string;
} }

View File

@ -16,7 +16,7 @@ limitations under the License.
import {ConcatList} from "../../../observable"; import {ConcatList} from "../../../observable";
import {ViewModel, Options as BaseOptions} from "../../ViewModel"; import {ViewModel, Options as BaseOptions} from "../../ViewModel";
import {CallToastCollectionViewModel} from "./calls/CallsToastCollectionVIewModel"; import {CallToastCollectionViewModel} from "./calls/CallsToastCollectionViewModel";
import type {Session} from "../../../matrix/Session.js"; import type {Session} from "../../../matrix/Session.js";
import type {SegmentType} from "../../navigation"; import type {SegmentType} from "../../navigation";
import type {BaseToastNotificationViewModel} from "./BaseToastNotificationViewModel"; import type {BaseToastNotificationViewModel} from "./BaseToastNotificationViewModel";

View File

@ -46,6 +46,10 @@ export class CallToastNotificationViewModel<N extends MinimumNeededSegmentType =
})); }));
} }
get kind(): "calls" {
return "calls";
}
async join(): Promise<void> { async join(): Promise<void> {
await this.logAndCatch("CallToastNotificationViewModel.join", async (log) => { await this.logAndCatch("CallToastNotificationViewModel.join", async (log) => {
const stream = await this.platform.mediaDevices.getMediaTracks(false, true); const stream = await this.platform.mediaDevices.getMediaTracks(false, true);

View File

@ -17,15 +17,26 @@ limitations under the License.
import {CallToastNotificationView} from "./CallToastNotificationView"; import {CallToastNotificationView} from "./CallToastNotificationView";
import {ListView} from "../../general/ListView"; import {ListView} from "../../general/ListView";
import {TemplateView, Builder} from "../../general/TemplateView"; import {TemplateView, Builder} from "../../general/TemplateView";
import type {IView} from "../../general/types";
import type {CallToastNotificationViewModel} from "../../../../../domain/session/toast/calls/CallToastNotificationViewModel"; import type {CallToastNotificationViewModel} from "../../../../../domain/session/toast/calls/CallToastNotificationViewModel";
import type {ToastCollectionViewModel} from "../../../../../domain/session/toast/ToastCollectionViewModel"; 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<ToastCollectionViewModel> { export class ToastCollectionView extends TemplateView<ToastCollectionViewModel> {
render(t: Builder<ToastCollectionViewModel>, vm: ToastCollectionViewModel) { render(t: Builder<ToastCollectionViewModel>, vm: ToastCollectionViewModel) {
const view = new ListView({ const view = new ListView({
list: vm.toastViewModels, list: vm.toastViewModels,
parentProvidesUpdates: false, parentProvidesUpdates: false,
}, (vm: CallToastNotificationViewModel) => new CallToastNotificationView(vm)); }, (vm: CallToastNotificationViewModel) => toastViewModelToView(vm));
return t.div({ className: "ToastCollectionView" }, [ return t.div({ className: "ToastCollectionView" }, [
t.view(view), t.view(view),
]); ]);