/* Copyright 2024 New Vector Ltd. Copyright 2020, 2021 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 { InfoIcon } from "@vector-im/compound-design-tokens/assets/web/icons"; import AccessibleButton from "./AccessibleButton"; import { type ValidatedServerConfig } from "../../../utils/ValidatedServerConfig"; import { _t } from "../../../languageHandler"; import TextWithTooltip from "./TextWithTooltip"; import SdkConfig from "../../../SdkConfig"; import Modal from "../../../Modal"; import ServerPickerDialog from "../dialogs/ServerPickerDialog"; import InfoDialog from "../dialogs/InfoDialog"; interface IProps { title?: string; dialogTitle?: string; serverConfig: ValidatedServerConfig; disabled?: boolean; onServerConfigChange?(config: ValidatedServerConfig): void; } const showPickerDialog = ( title: string | undefined, serverConfig: ValidatedServerConfig, onFinished: (config?: ValidatedServerConfig) => void, ): void => { const { finished } = Modal.createDialog(ServerPickerDialog, { title, serverConfig }); finished.then(([config]) => onFinished(config)); }; const onHelpClick = (): void => { const brand = SdkConfig.get().brand; Modal.createDialog( InfoDialog, { title: _t("auth|server_picker_title_default"), description: _t("auth|server_picker_description", { brand }), button: _t("action|dismiss"), hasCloseButton: false, fixedWidth: false, }, "mx_ServerPicker_helpDialog", ); }; const ServerPicker: React.FC = ({ title, dialogTitle, serverConfig, onServerConfigChange, disabled }) => { const disableCustomUrls = SdkConfig.get("disable_custom_urls"); let editBtn; if (!disableCustomUrls && onServerConfigChange) { const onClick = (): void => { showPickerDialog(dialogTitle, serverConfig, (config?: ValidatedServerConfig) => { if (config) { onServerConfigChange(config); } }); }; editBtn = ( {_t("action|edit")} ); } let serverName: React.ReactNode = serverConfig.isNameResolvable ? serverConfig.hsName : serverConfig.hsUrl; if (serverConfig.hsNameIsDifferent) { serverName = ( {serverConfig.hsName} ); } let desc; if (serverConfig.hsName === "matrix.org") { desc = {_t("auth|server_picker_description_matrix.org")}; } return (

{title || _t("common|homeserver")}

{!disableCustomUrls ? ( ) : null} {serverName} {editBtn} {desc}
); }; export default ServerPicker;