mirror of
https://github.com/vector-im/hydrogen-web.git
synced 2025-02-02 07:31:38 +01:00
Create views based on viewmodel
This commit is contained in:
parent
a1086a7139
commit
93d37aeb93
@ -32,4 +32,6 @@ export abstract class BaseToastNotificationViewModel<N extends object = SegmentT
|
||||
dismiss(): void {
|
||||
this.getOption("dismiss")();
|
||||
}
|
||||
|
||||
abstract get kind(): string;
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ limitations under the License.
|
||||
|
||||
import {ConcatList} from "../../../observable";
|
||||
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 {SegmentType} from "../../navigation";
|
||||
import type {BaseToastNotificationViewModel} from "./BaseToastNotificationViewModel";
|
||||
|
@ -46,6 +46,10 @@ export class CallToastNotificationViewModel<N extends MinimumNeededSegmentType =
|
||||
}));
|
||||
}
|
||||
|
||||
get kind(): "calls" {
|
||||
return "calls";
|
||||
}
|
||||
|
||||
async join(): Promise<void> {
|
||||
await this.logAndCatch("CallToastNotificationViewModel.join", async (log) => {
|
||||
const stream = await this.platform.mediaDevices.getMediaTracks(false, true);
|
||||
|
@ -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<ToastCollectionViewModel> {
|
||||
render(t: Builder<ToastCollectionViewModel>, 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),
|
||||
]);
|
||||
|
Loading…
x
Reference in New Issue
Block a user