Conform more of the codebase to strictNullChecks (#10842)
This commit is contained in:
committed by
GitHub
parent
5eea2c8b02
commit
82e32035fd
@@ -69,9 +69,9 @@ export default class ActiveWidgetStore extends EventEmitter {
|
||||
}
|
||||
};
|
||||
|
||||
public destroyPersistentWidget(widgetId: string, roomId: string): void {
|
||||
public destroyPersistentWidget(widgetId: string, roomId: string | null): void {
|
||||
if (!this.getWidgetPersistence(widgetId, roomId)) return;
|
||||
WidgetMessagingStore.instance.stopMessagingByUid(WidgetUtils.calcWidgetUid(widgetId, roomId));
|
||||
WidgetMessagingStore.instance.stopMessagingByUid(WidgetUtils.calcWidgetUid(widgetId, roomId ?? undefined));
|
||||
this.setWidgetPersistence(widgetId, roomId, false);
|
||||
}
|
||||
|
||||
@@ -102,29 +102,29 @@ export default class ActiveWidgetStore extends EventEmitter {
|
||||
|
||||
// Registers the given widget as being docked somewhere in the UI (not a PiP),
|
||||
// to allow its lifecycle to be tracked.
|
||||
public dockWidget(widgetId: string, roomId: string): void {
|
||||
const uid = WidgetUtils.calcWidgetUid(widgetId, roomId);
|
||||
public dockWidget(widgetId: string, roomId: string | null): void {
|
||||
const uid = WidgetUtils.calcWidgetUid(widgetId, roomId ?? undefined);
|
||||
const refs = this.dockedWidgetsByUid.get(uid) ?? 0;
|
||||
this.dockedWidgetsByUid.set(uid, refs + 1);
|
||||
if (refs === 0) this.emit(ActiveWidgetStoreEvent.Dock);
|
||||
}
|
||||
|
||||
public undockWidget(widgetId: string, roomId: string): void {
|
||||
const uid = WidgetUtils.calcWidgetUid(widgetId, roomId);
|
||||
public undockWidget(widgetId: string, roomId: string | null): void {
|
||||
const uid = WidgetUtils.calcWidgetUid(widgetId, roomId ?? undefined);
|
||||
const refs = this.dockedWidgetsByUid.get(uid);
|
||||
if (refs) this.dockedWidgetsByUid.set(uid, refs - 1);
|
||||
if (refs === 1) this.emit(ActiveWidgetStoreEvent.Undock);
|
||||
}
|
||||
|
||||
// Determines whether the given widget is docked anywhere in the UI (not a PiP)
|
||||
public isDocked(widgetId: string, roomId: string): boolean {
|
||||
const uid = WidgetUtils.calcWidgetUid(widgetId, roomId);
|
||||
public isDocked(widgetId: string, roomId: string | null): boolean {
|
||||
const uid = WidgetUtils.calcWidgetUid(widgetId, roomId ?? undefined);
|
||||
const refs = this.dockedWidgetsByUid.get(uid) ?? 0;
|
||||
return refs > 0;
|
||||
}
|
||||
|
||||
// Determines whether the given widget is being kept alive in the UI, including PiPs
|
||||
public isLive(widgetId: string, roomId: string): boolean {
|
||||
public isLive(widgetId: string, roomId: string | null): boolean {
|
||||
return this.isDocked(widgetId, roomId) || this.getWidgetPersistence(widgetId, roomId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,6 +38,10 @@ export interface IApp extends IWidget {
|
||||
avatar_url?: string; // MSC2765 https://github.com/matrix-org/matrix-doc/pull/2765
|
||||
}
|
||||
|
||||
export function isAppWidget(widget: IWidget | IApp): widget is IApp {
|
||||
return "roomId" in widget && typeof widget.roomId === "string";
|
||||
}
|
||||
|
||||
interface IRoomWidgets {
|
||||
widgets: IApp[];
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ import defaultDispatcher from "../../dispatcher/dispatcher";
|
||||
import { Action } from "../../dispatcher/actions";
|
||||
import { ElementWidgetActions, IHangupCallApiRequest, IViewRoomApiRequest } from "./ElementWidgetActions";
|
||||
import { ModalWidgetStore } from "../ModalWidgetStore";
|
||||
import { IApp } from "../WidgetStore";
|
||||
import { IApp, isAppWidget } from "../WidgetStore";
|
||||
import ThemeWatcher from "../../settings/watchers/ThemeWatcher";
|
||||
import { getCustomTheme } from "../../theme";
|
||||
import { ElementWidgetCapabilities } from "./ElementWidgetCapabilities";
|
||||
@@ -72,7 +72,7 @@ import { SdkContextClass } from "../../contexts/SDKContext";
|
||||
|
||||
interface IAppTileProps {
|
||||
// Note: these are only the props we care about
|
||||
app: IApp;
|
||||
app: IApp | IWidget;
|
||||
room?: Room; // without a room it is a user widget
|
||||
userId: string;
|
||||
creatorUserId: string;
|
||||
@@ -179,7 +179,7 @@ export class StopGapWidget extends EventEmitter {
|
||||
this.mockWidget = new ElementWidget(app);
|
||||
this.roomId = appTileProps.room?.roomId;
|
||||
this.kind = appTileProps.userWidget ? WidgetKind.Account : WidgetKind.Room; // probably
|
||||
this.virtual = app.eventId === undefined;
|
||||
this.virtual = isAppWidget(app) && app.eventId === undefined;
|
||||
}
|
||||
|
||||
private get eventListenerRoomId(): Optional<string> {
|
||||
|
||||
@@ -19,6 +19,7 @@ import { MatrixEvent } from "matrix-js-sdk/src/models/event";
|
||||
import { RoomStateEvent } from "matrix-js-sdk/src/models/room-state";
|
||||
import { Optional } from "matrix-events-sdk";
|
||||
import { compare, MapWithDefault, recursiveMapToObject } from "matrix-js-sdk/src/utils";
|
||||
import { IWidget } from "matrix-widget-api";
|
||||
|
||||
import SettingsStore from "../../settings/SettingsStore";
|
||||
import WidgetStore, { IApp } from "../WidgetStore";
|
||||
@@ -362,11 +363,11 @@ export class WidgetLayoutStore extends ReadyWatchingStore {
|
||||
}
|
||||
}
|
||||
|
||||
public getContainerWidgets(room: Optional<Room>, container: Container): IApp[] {
|
||||
public getContainerWidgets(room: Optional<Room>, container: Container): IWidget[] {
|
||||
return (room && this.byRoom.get(room.roomId)?.get(container)?.ordered) || [];
|
||||
}
|
||||
|
||||
public isInContainer(room: Room, widget: IApp, container: Container): boolean {
|
||||
public isInContainer(room: Room, widget: IWidget, container: Container): boolean {
|
||||
return this.getContainerWidgets(room, container).some((w) => w.id === widget.id);
|
||||
}
|
||||
|
||||
@@ -437,7 +438,7 @@ export class WidgetLayoutStore extends ReadyWatchingStore {
|
||||
this.updateUserLayout(room, localLayout);
|
||||
}
|
||||
|
||||
public moveWithinContainer(room: Room, container: Container, widget: IApp, delta: number): void {
|
||||
public moveWithinContainer(room: Room, container: Container, widget: IWidget, delta: number): void {
|
||||
const widgets = arrayFastClone(this.getContainerWidgets(room, container));
|
||||
const currentIdx = widgets.findIndex((w) => w.id === widget.id);
|
||||
if (currentIdx < 0) return; // no change needed
|
||||
@@ -460,7 +461,7 @@ export class WidgetLayoutStore extends ReadyWatchingStore {
|
||||
this.updateUserLayout(room, localLayout);
|
||||
}
|
||||
|
||||
public moveToContainer(room: Room, widget: IApp, toContainer: Container): void {
|
||||
public moveToContainer(room: Room, widget: IWidget, toContainer: Container): void {
|
||||
const allWidgets = this.getAllWidgets(room);
|
||||
if (!allWidgets.some(([w]) => w.id === widget.id)) return; // invalid
|
||||
// Prepare other containers (potentially move widgets to obey the following rules)
|
||||
|
||||
Reference in New Issue
Block a user