/* 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 OR LicenseRef-Element-Commercial Please see LICENSE files in the repository root for full details. */ import React from "react"; import { _t } from "../languageHandler"; import SdkConfig from "../SdkConfig"; import GenericToast from "../components/views/toasts/GenericToast"; import ToastStore from "../stores/ToastStore"; import QuestionDialog from "../components/views/dialogs/QuestionDialog"; import ChangelogDialog, { checkVersion } from "../components/views/dialogs/ChangelogDialog"; import PlatformPeg from "../PlatformPeg"; import Modal from "../Modal"; const TOAST_KEY = "update"; function installUpdate(): void { PlatformPeg.get()?.installUpdate(); } export const showToast = (version: string, newVersion: string, releaseNotes?: string): void => { function onReject(): void { PlatformPeg.get()?.deferUpdate(newVersion); } let onAccept; let acceptLabel = _t("update|see_changes_button"); if (releaseNotes) { onAccept = () => { Modal.createDialog(QuestionDialog, { title: _t("update|release_notes_toast_title"), description:
{releaseNotes}
, button: _t("action|update"), onFinished: (update) => { if (update && PlatformPeg.get()) { PlatformPeg.get()!.installUpdate(); } }, }); }; } else if (checkVersion(version) && checkVersion(newVersion)) { onAccept = () => { Modal.createDialog(ChangelogDialog, { version, newVersion, onFinished: (update) => { if (update && PlatformPeg.get()) { PlatformPeg.get()!.installUpdate(); } }, }); }; } else { onAccept = installUpdate; acceptLabel = _t("action|update"); } const brand = SdkConfig.get().brand; ToastStore.sharedInstance().addOrReplaceToast({ key: TOAST_KEY, title: _t("update|toast_title", { brand }), props: { description: _t("update|toast_description", { brand }), primaryLabel: acceptLabel, onPrimaryClick: onAccept, secondaryLabel: _t("action|dismiss"), onSecondaryClick: onReject, }, component: GenericToast, priority: 20, }); }; export const hideToast = (): void => { ToastStore.sharedInstance().dismissToast(TOAST_KEY); };