import { IconButton, ITextFieldStyles, Pivot, PivotItem, PrimaryButton, Stack, Text, TextField } from "@fluentui/react"; import { handleError } from "Common/ErrorHandlingUtils"; import { sendMessage } from "Common/MessageHandler"; import { MessageTypes } from "Contracts/ExplorerContracts"; import React, { useEffect, useState } from "react"; import { userContext } from "UserContext"; import { listKeys, listReadOnlyKeys } from "Utils/arm/generatedClients/cosmos/databaseAccounts"; import { DatabaseAccountListKeysResult, DatabaseAccountListReadOnlyKeysResult, } from "Utils/arm/generatedClients/cosmos/types"; export const ConnectTab: React.FC = (): JSX.Element => { const [primaryMasterKey, setPrimaryMasterKey] = useState(""); const [secondaryMasterKey, setSecondaryMasterKey] = useState(""); const [primaryReadonlyMasterKey, setPrimaryReadonlyMasterKey] = useState(""); const [secondaryReadonlyMasterKey, setSecondaryReadonlyMasterKey] = useState(""); const uri: string = userContext.databaseAccount.properties?.documentEndpoint; const primaryConnectionStr = `AccountEndpoint=${uri};AccountKey=${primaryMasterKey};`; const secondaryConnectionStr = `AccountEndpoint=${uri};AccountKey=${secondaryMasterKey};`; const primaryReadonlyConnectionStr = `AccountEndpoint=${uri};AccountKey=${primaryReadonlyMasterKey};`; const secondaryReadonlyConnectionStr = `AccountEndpoint=${uri};AccountKey=${secondaryReadonlyMasterKey};`; const maskedValue: string = "*********************************************************************************************************************************"; const [showPrimaryMasterKey, setShowPrimaryMasterKey] = useState(false); const [showSecondaryMasterKey, setShowSecondaryMasterKey] = useState(false); const [showPrimaryReadonlyMasterKey, setShowPrimaryReadonlyMasterKey] = useState(false); const [showSecondaryReadonlyMasterKey, setShowSecondaryReadonlyMasterKey] = useState(false); const [showPrimaryConnectionStr, setShowPrimaryConnectionStr] = useState(false); const [showSecondaryConnectionStr, setShowSecondaryConnectionStr] = useState(false); const [showPrimaryReadonlyConnectionStr, setShowPrimaryReadonlyConnectionStr] = useState(false); const [showSecondaryReadonlyConnectionStr, setShowSecondaryReadonlyConnectionStr] = useState(false); useEffect(() => { fetchKeys(); }, []); const fetchKeys = async (): Promise => { try { if (userContext.hasWriteAccess) { const listKeysResult: DatabaseAccountListKeysResult = await listKeys( userContext.subscriptionId, userContext.resourceGroup, userContext.databaseAccount.name, ); setPrimaryMasterKey(listKeysResult.primaryMasterKey); setSecondaryMasterKey(listKeysResult.secondaryMasterKey); setPrimaryReadonlyMasterKey(listKeysResult.primaryReadonlyMasterKey); setSecondaryReadonlyMasterKey(listKeysResult.secondaryReadonlyMasterKey); } else { const listReadonlyKeysResult: DatabaseAccountListReadOnlyKeysResult = await listReadOnlyKeys( userContext.subscriptionId, userContext.resourceGroup, userContext.databaseAccount.name, ); setPrimaryReadonlyMasterKey(listReadonlyKeysResult.primaryReadonlyMasterKey); setSecondaryReadonlyMasterKey(listReadonlyKeysResult.secondaryReadonlyMasterKey); } } catch (error) { handleError(error, "listKeys", "listKeys request has failed: "); throw error; } }; const onCopyBtnClicked = (selector: string): void => { const textfield: HTMLInputElement = document.querySelector(selector); textfield.select(); document.execCommand("copy"); }; const textfieldStyles: Partial = { root: { width: "100%" }, field: { backgroundColor: "var(--colorNeutralBackground3)", color: "var(--colorNeutralForeground1)", }, fieldGroup: { borderColor: "var(--colorNeutralStroke1)" }, suffix: { backgroundColor: "var(--colorNeutralBackground3)", margin: 0, padding: 0, }, subComponentStyles: { label: { root: { color: "var(--colorNeutralForeground1)", }, }, }, }; const renderCopyButton = (selector: string) => ( onCopyBtnClicked(selector)} styles={{ root: { height: "100%", backgroundColor: "var(--colorNeutralBackground3)", border: "none", color: "var(--colorNeutralForeground1)", }, rootHovered: { backgroundColor: "var(--colorNeutralBackground4)", }, rootPressed: { backgroundColor: "var(--colorNeutralBackground5)", }, icon: { color: "var(--colorNeutralForeground1)", }, }} /> ); const themeAwareIconButtonStyles = { root: { color: "var(--colorNeutralForeground1)", }, rootHovered: { backgroundColor: "var(--colorNeutralBackground3)", }, icon: { color: "var(--colorNeutralForeground1)", }, }; const pivotStyles = { root: { color: "var(--colorNeutralForeground1)", }, link: { color: "var(--colorNeutralForeground1)", backgroundColor: "transparent", selectors: { "&:hover": { color: "var(--colorNeutralForeground1)", backgroundColor: "var(--colorNeutralBackground3)", }, "&:active": { color: "var(--colorNeutralForeground1)", }, }, }, linkIsSelected: { color: "var(--colorNeutralForeground1)", selectors: { "&::before": { backgroundColor: "var(--colorBrandBackground)", }, }, }, text: { color: "var(--colorNeutralForeground1)", }, }; return (
renderCopyButton("#uriTextfield")} />
{userContext.hasWriteAccess && ( renderCopyButton("#primaryKeyTextfield"), })} /> setShowPrimaryMasterKey(!showPrimaryMasterKey)} styles={themeAwareIconButtonStyles} /> renderCopyButton("#secondaryKeyTextfield"), })} /> setShowSecondaryMasterKey(!showSecondaryMasterKey)} styles={themeAwareIconButtonStyles} /> renderCopyButton("#primaryConStrTextfield"), })} /> setShowPrimaryConnectionStr(!showPrimaryConnectionStr)} styles={themeAwareIconButtonStyles} /> renderCopyButton("#secondaryConStrTextfield"), })} /> setShowSecondaryConnectionStr(!showSecondaryConnectionStr)} styles={themeAwareIconButtonStyles} /> )} renderCopyButton("#primaryReadonlyKeyTextfield"), })} /> setShowPrimaryReadonlyMasterKey(!showPrimaryReadonlyMasterKey)} styles={themeAwareIconButtonStyles} /> renderCopyButton("#secondaryReadonlyKeyTextfield"), })} /> setShowSecondaryReadonlyMasterKey(!showSecondaryReadonlyMasterKey)} styles={themeAwareIconButtonStyles} /> renderCopyButton("#primaryReadonlyConStrTextfield"), })} /> setShowPrimaryReadonlyConnectionStr(!showPrimaryReadonlyConnectionStr)} styles={themeAwareIconButtonStyles} /> renderCopyButton("#secondaryReadonlyConStrTextfield"), })} /> setShowSecondaryReadonlyConnectionStr(!showSecondaryReadonlyConnectionStr)} styles={themeAwareIconButtonStyles} /> Download sample app Don't have an app ready? No worries, download one of our sample app with a platform of your choice. Connection string is already included in the app. sendMessage({ type: MessageTypes.OpenQuickstartBlade, }) } text="Download sample app" />
); };