import {ipcRenderer, remote} from "electron"; import {html} from "../../../../common/html"; import * as t from "../../../../common/translation-util"; import {generateNodeFromHTML} from "../../components/base"; import * as DomainUtil from "../../utils/domain-util"; import * as LinkUtil from "../../utils/link-util"; const {dialog} = remote; interface NewServerFormProps { $root: Element; onChange: () => void; } export function initNewServerForm(props: NewServerFormProps): void { const $newServerForm = generateNodeFromHTML(html`
${t.__("Organization URL")}

${t.__("OR")}
${t.__("Network and Proxy Settings")} open_in_new
`); const $saveServerButton: HTMLButtonElement = $newServerForm.querySelector( "#connect", )!; props.$root.textContent = ""; props.$root.append($newServerForm); const $newServerUrl: HTMLInputElement = $newServerForm.querySelector( "input.setting-input-value", )!; async function submitFormHandler(): Promise { $saveServerButton.textContent = "Connecting..."; let serverConf; try { serverConf = await DomainUtil.checkDomain($newServerUrl.value.trim()); } catch (error: unknown) { $saveServerButton.textContent = "Connect"; await dialog.showMessageBox({ type: "error", message: error instanceof Error ? `${error.name}: ${error.message}` : "Unknown error", buttons: ["OK"], }); return; } await DomainUtil.addDomain(serverConf); props.onChange(); } $saveServerButton.addEventListener("click", async () => { await submitFormHandler(); }); $newServerUrl.addEventListener("keypress", async (event) => { if (event.key === "Enter") { await submitFormHandler(); } }); // Open create new org link in default browser const link = "https://zulip.com/new/"; const externalCreateNewOrgElement = document.querySelector( "#open-create-org-link", )!; externalCreateNewOrgElement.addEventListener("click", async () => { await LinkUtil.openBrowser(new URL(link)); }); const networkSettingsId = document.querySelector(".server-network-option")!; networkSettingsId.addEventListener("click", () => { ipcRenderer.send("forward-message", "open-network-settings"); }); }