36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
/*
|
|
Copyright 2024 New Vector Ltd.
|
|
Copyright 2020 The Matrix.org Foundation C.I.C.
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
|
|
Please see LICENSE files in the repository root for full details.
|
|
*/
|
|
|
|
// TODO: Move to matrix-widget-api
|
|
export class WidgetType {
|
|
public static readonly JITSI = new WidgetType("m.jitsi", "jitsi");
|
|
public static readonly STICKERPICKER = new WidgetType("m.stickerpicker", "m.stickerpicker");
|
|
public static readonly INTEGRATION_MANAGER = new WidgetType("m.integration_manager", "m.integration_manager");
|
|
public static readonly CUSTOM = new WidgetType("m.custom", "m.custom");
|
|
public static readonly CALL = new WidgetType("m.call", "m.call");
|
|
|
|
public constructor(
|
|
public readonly preferred: string,
|
|
public readonly legacy: string,
|
|
) {}
|
|
|
|
public matches(type: string): boolean {
|
|
return type === this.preferred || type === this.legacy;
|
|
}
|
|
|
|
public static fromString(type: string): WidgetType {
|
|
// First try and match it against something we're already aware of
|
|
const known = Object.values(WidgetType).filter((v) => v instanceof WidgetType);
|
|
const knownMatch = known.find((w) => w.matches(type));
|
|
if (knownMatch) return knownMatch;
|
|
|
|
// If that fails, invent a new widget type
|
|
return new WidgetType(type, type);
|
|
}
|
|
}
|