/* 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, { type JSX, type ReactNode } from "react"; import { logger } from "matrix-js-sdk/src/logger"; import EventIndexPeg from "../../../indexing/EventIndexPeg"; import { _t } from "../../../languageHandler"; import SdkConfig from "../../../SdkConfig"; import dis from "../../../dispatcher/dispatcher"; import { Action } from "../../../dispatcher/actions"; import { UserTab } from "../dialogs/UserTab"; import AccessibleButton, { type ButtonEvent } from "./AccessibleButton"; export enum WarningKind { Files, Search, } interface IProps { isRoomEncrypted?: boolean; kind: WarningKind; showLogo?: boolean; } export default function SearchWarning({ isRoomEncrypted, kind, showLogo = true }: IProps): JSX.Element { if (!isRoomEncrypted) return <>; if (EventIndexPeg.get()) return <>; if (EventIndexPeg.error) { return (
{_t( "seshat|error_initialising", {}, { a: (sub) => ( { evt.preventDefault(); dis.dispatch({ action: Action.ViewUserSettings, initialTabId: UserTab.Security, }); }} > {sub} ), }, )}
); } const brand = SdkConfig.get("brand"); const desktopBuilds = SdkConfig.getObject("desktop_builds"); let text: ReactNode | undefined; let logo: JSX.Element | undefined; if (desktopBuilds?.get("available")) { logo = ; const buildUrl = desktopBuilds.get("url"); switch (kind) { case WarningKind.Files: text = _t( "seshat|warning_kind_files_app", {}, { a: (sub) => ( {sub} ), }, ); break; case WarningKind.Search: text = _t( "seshat|warning_kind_search_app", {}, { a: (sub) => ( {sub} ), }, ); break; } } else { switch (kind) { case WarningKind.Files: text = _t("seshat|warning_kind_files", { brand }); break; case WarningKind.Search: text = _t("seshat|warning_kind_search", { brand }); break; } } // for safety if (!text) { logger.warn("Unknown desktop builds warning kind: ", kind); return <>; } return (
{showLogo ? logo : null} {text}
); }