mirror of
https://github.com/vector-im/hydrogen-web.git
synced 2025-02-02 15:41:41 +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 {
|
dismiss(): void {
|
||||||
this.getOption("dismiss")();
|
this.getOption("dismiss")();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract get kind(): string;
|
||||||
}
|
}
|
||||||
|
@ -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";
|
||||||
|
@ -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);
|
||||||
|
@ -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),
|
||||||
]);
|
]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user