mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
feat: rename Account tab to Cloud tab (#7558)
Co-authored-by: Roo Code <roomote@roocode.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
This commit is contained in:
parent
68b68a22cd
commit
ec45503a98
49 changed files with 114 additions and 109 deletions
|
|
@ -35,7 +35,7 @@ export const commandIds = [
|
|||
"historyButtonClicked",
|
||||
"marketplaceButtonClicked",
|
||||
"popoutButtonClicked",
|
||||
"accountButtonClicked",
|
||||
"cloudButtonClicked",
|
||||
"settingsButtonClicked",
|
||||
|
||||
"openInNewTab",
|
||||
|
|
|
|||
|
|
@ -74,16 +74,16 @@ export const registerCommands = (options: RegisterCommandOptions) => {
|
|||
|
||||
const getCommandsMap = ({ context, outputChannel, provider }: RegisterCommandOptions): Record<CommandId, any> => ({
|
||||
activationCompleted: () => {},
|
||||
accountButtonClicked: () => {
|
||||
cloudButtonClicked: () => {
|
||||
const visibleProvider = getVisibleProviderOrLog(outputChannel)
|
||||
|
||||
if (!visibleProvider) {
|
||||
return
|
||||
}
|
||||
|
||||
TelemetryService.instance.captureTitleButtonClicked("account")
|
||||
TelemetryService.instance.captureTitleButtonClicked("cloud")
|
||||
|
||||
visibleProvider.postMessageToWebview({ type: "action", action: "accountButtonClicked" })
|
||||
visibleProvider.postMessageToWebview({ type: "action", action: "cloudButtonClicked" })
|
||||
},
|
||||
plusButtonClicked: async () => {
|
||||
const visibleProvider = getVisibleProviderOrLog(outputChannel)
|
||||
|
|
|
|||
|
|
@ -1506,7 +1506,7 @@ public async clearTask(): Promise<void> {
|
|||
// Check MDM compliance and send user to account tab if not compliant
|
||||
// Only redirect if there's an actual MDM policy requiring authentication
|
||||
if (this.mdmService?.requiresCloudAuth() && !this.checkMdmCompliance()) {
|
||||
await this.postMessageToWebview({ type: "action", action: "accountButtonClicked" })
|
||||
await this.postMessageToWebview({ type: "action", action: "cloudButtonClicked" })
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2034,9 +2034,9 @@ export const webviewMessageHandler = async (
|
|||
await provider.postStateToWebview()
|
||||
break
|
||||
}
|
||||
case "accountButtonClicked": {
|
||||
// Navigate to the account tab.
|
||||
provider.postMessageToWebview({ type: "action", action: "accountButtonClicked" })
|
||||
case "cloudButtonClicked": {
|
||||
// Navigate to the cloud tab.
|
||||
provider.postMessageToWebview({ type: "action", action: "cloudButtonClicked" })
|
||||
break
|
||||
}
|
||||
case "rooCloudSignIn": {
|
||||
|
|
|
|||
|
|
@ -101,9 +101,9 @@
|
|||
"icon": "$(link-external)"
|
||||
},
|
||||
{
|
||||
"command": "roo-cline.accountButtonClicked",
|
||||
"title": "%command.account.title%",
|
||||
"icon": "$(account)"
|
||||
"command": "roo-cline.cloudButtonClicked",
|
||||
"title": "%command.cloud.title%",
|
||||
"icon": "$(cloud)"
|
||||
},
|
||||
{
|
||||
"command": "roo-cline.settingsButtonClicked",
|
||||
|
|
@ -234,7 +234,7 @@
|
|||
"when": "view == roo-cline.SidebarProvider"
|
||||
},
|
||||
{
|
||||
"command": "roo-cline.accountButtonClicked",
|
||||
"command": "roo-cline.cloudButtonClicked",
|
||||
"group": "navigation@4",
|
||||
"when": "view == roo-cline.SidebarProvider"
|
||||
},
|
||||
|
|
@ -276,7 +276,7 @@
|
|||
"when": "activeWebviewPanelId == roo-cline.TabPanelProvider"
|
||||
},
|
||||
{
|
||||
"command": "roo-cline.accountButtonClicked",
|
||||
"command": "roo-cline.cloudButtonClicked",
|
||||
"group": "navigation@4",
|
||||
"when": "activeWebviewPanelId == roo-cline.TabPanelProvider"
|
||||
},
|
||||
|
|
|
|||
2
src/package.nls.ca.json
generated
2
src/package.nls.ca.json
generated
|
|
@ -23,7 +23,7 @@
|
|||
"command.history.title": "Historial",
|
||||
"command.marketplace.title": "Mercat",
|
||||
"command.openInEditor.title": "Obrir a l'Editor",
|
||||
"command.account.title": "Compte",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "Configuració",
|
||||
"command.documentation.title": "Documentació",
|
||||
"configuration.title": "Roo Code",
|
||||
|
|
|
|||
2
src/package.nls.de.json
generated
2
src/package.nls.de.json
generated
|
|
@ -23,7 +23,7 @@
|
|||
"command.history.title": "Verlauf",
|
||||
"command.marketplace.title": "Marktplatz",
|
||||
"command.openInEditor.title": "Im Editor Öffnen",
|
||||
"command.account.title": "Konto",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "Einstellungen",
|
||||
"command.documentation.title": "Dokumentation",
|
||||
"configuration.title": "Roo Code",
|
||||
|
|
|
|||
2
src/package.nls.es.json
generated
2
src/package.nls.es.json
generated
|
|
@ -23,7 +23,7 @@
|
|||
"command.history.title": "Historial",
|
||||
"command.marketplace.title": "Mercado",
|
||||
"command.openInEditor.title": "Abrir en Editor",
|
||||
"command.account.title": "Cuenta",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "Configuración",
|
||||
"command.documentation.title": "Documentación",
|
||||
"configuration.title": "Roo Code",
|
||||
|
|
|
|||
2
src/package.nls.fr.json
generated
2
src/package.nls.fr.json
generated
|
|
@ -23,7 +23,7 @@
|
|||
"command.history.title": "Historique",
|
||||
"command.marketplace.title": "Marché",
|
||||
"command.openInEditor.title": "Ouvrir dans l'Éditeur",
|
||||
"command.account.title": "Compte",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "Paramètres",
|
||||
"command.documentation.title": "Documentation",
|
||||
"configuration.title": "Roo Code",
|
||||
|
|
|
|||
2
src/package.nls.hi.json
generated
2
src/package.nls.hi.json
generated
|
|
@ -23,7 +23,7 @@
|
|||
"command.history.title": "इतिहास",
|
||||
"command.marketplace.title": "मार्केटप्लेस",
|
||||
"command.openInEditor.title": "एडिटर में खोलें",
|
||||
"command.account.title": "खाता",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "सेटिंग्स",
|
||||
"command.documentation.title": "दस्तावेज़ीकरण",
|
||||
"configuration.title": "Roo Code",
|
||||
|
|
|
|||
2
src/package.nls.id.json
generated
2
src/package.nls.id.json
generated
|
|
@ -11,7 +11,7 @@
|
|||
"command.history.title": "Riwayat",
|
||||
"command.marketplace.title": "Marketplace",
|
||||
"command.openInEditor.title": "Buka di Editor",
|
||||
"command.account.title": "Akun",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "Pengaturan",
|
||||
"command.documentation.title": "Dokumentasi",
|
||||
"command.openInNewTab.title": "Buka di Tab Baru",
|
||||
|
|
|
|||
2
src/package.nls.it.json
generated
2
src/package.nls.it.json
generated
|
|
@ -23,7 +23,7 @@
|
|||
"command.history.title": "Cronologia",
|
||||
"command.marketplace.title": "Marketplace",
|
||||
"command.openInEditor.title": "Apri nell'Editor",
|
||||
"command.account.title": "Account",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "Impostazioni",
|
||||
"command.documentation.title": "Documentazione",
|
||||
"configuration.title": "Roo Code",
|
||||
|
|
|
|||
2
src/package.nls.ja.json
generated
2
src/package.nls.ja.json
generated
|
|
@ -11,7 +11,7 @@
|
|||
"command.history.title": "履歴",
|
||||
"command.marketplace.title": "マーケットプレイス",
|
||||
"command.openInEditor.title": "エディタで開く",
|
||||
"command.account.title": "アカウント",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "設定",
|
||||
"command.documentation.title": "ドキュメント",
|
||||
"command.openInNewTab.title": "新しいタブで開く",
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
"command.history.title": "History",
|
||||
"command.marketplace.title": "Marketplace",
|
||||
"command.openInEditor.title": "Open in Editor",
|
||||
"command.account.title": "Account",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "Settings",
|
||||
"command.documentation.title": "Documentation",
|
||||
"command.openInNewTab.title": "Open In New Tab",
|
||||
|
|
|
|||
2
src/package.nls.ko.json
generated
2
src/package.nls.ko.json
generated
|
|
@ -23,7 +23,7 @@
|
|||
"command.history.title": "기록",
|
||||
"command.marketplace.title": "마켓플레이스",
|
||||
"command.openInEditor.title": "에디터에서 열기",
|
||||
"command.account.title": "계정",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "설정",
|
||||
"command.documentation.title": "문서",
|
||||
"configuration.title": "Roo Code",
|
||||
|
|
|
|||
2
src/package.nls.nl.json
generated
2
src/package.nls.nl.json
generated
|
|
@ -11,7 +11,7 @@
|
|||
"command.history.title": "Geschiedenis",
|
||||
"command.marketplace.title": "Marktplaats",
|
||||
"command.openInEditor.title": "Openen in Editor",
|
||||
"command.account.title": "Account",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "Instellingen",
|
||||
"command.documentation.title": "Documentatie",
|
||||
"command.openInNewTab.title": "Openen in Nieuw Tabblad",
|
||||
|
|
|
|||
2
src/package.nls.pl.json
generated
2
src/package.nls.pl.json
generated
|
|
@ -23,7 +23,7 @@
|
|||
"command.history.title": "Historia",
|
||||
"command.marketplace.title": "Marketplace",
|
||||
"command.openInEditor.title": "Otwórz w Edytorze",
|
||||
"command.account.title": "Konto",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "Ustawienia",
|
||||
"command.documentation.title": "Dokumentacja",
|
||||
"configuration.title": "Roo Code",
|
||||
|
|
|
|||
2
src/package.nls.pt-BR.json
generated
2
src/package.nls.pt-BR.json
generated
|
|
@ -23,7 +23,7 @@
|
|||
"command.history.title": "Histórico",
|
||||
"command.marketplace.title": "Marketplace",
|
||||
"command.openInEditor.title": "Abrir no Editor",
|
||||
"command.account.title": "Conta",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "Configurações",
|
||||
"command.documentation.title": "Documentação",
|
||||
"configuration.title": "Roo Code",
|
||||
|
|
|
|||
2
src/package.nls.ru.json
generated
2
src/package.nls.ru.json
generated
|
|
@ -11,7 +11,7 @@
|
|||
"command.history.title": "История",
|
||||
"command.marketplace.title": "Маркетплейс",
|
||||
"command.openInEditor.title": "Открыть в редакторе",
|
||||
"command.account.title": "Аккаунт",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "Настройки",
|
||||
"command.documentation.title": "Документация",
|
||||
"command.openInNewTab.title": "Открыть в новой вкладке",
|
||||
|
|
|
|||
2
src/package.nls.tr.json
generated
2
src/package.nls.tr.json
generated
|
|
@ -23,7 +23,7 @@
|
|||
"command.history.title": "Geçmiş",
|
||||
"command.marketplace.title": "Marketplace",
|
||||
"command.openInEditor.title": "Düzenleyicide Aç",
|
||||
"command.account.title": "Hesap",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "Ayarlar",
|
||||
"command.documentation.title": "Dokümantasyon",
|
||||
"configuration.title": "Roo Code",
|
||||
|
|
|
|||
2
src/package.nls.vi.json
generated
2
src/package.nls.vi.json
generated
|
|
@ -23,7 +23,7 @@
|
|||
"command.history.title": "Lịch Sử",
|
||||
"command.marketplace.title": "Marketplace",
|
||||
"command.openInEditor.title": "Mở trong Trình Soạn Thảo",
|
||||
"command.account.title": "Tài khoản",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "Cài Đặt",
|
||||
"command.documentation.title": "Tài Liệu",
|
||||
"configuration.title": "Roo Code",
|
||||
|
|
|
|||
2
src/package.nls.zh-CN.json
generated
2
src/package.nls.zh-CN.json
generated
|
|
@ -23,7 +23,7 @@
|
|||
"command.history.title": "历史记录",
|
||||
"command.marketplace.title": "应用市场",
|
||||
"command.openInEditor.title": "在编辑器中打开",
|
||||
"command.account.title": "账户",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "设置",
|
||||
"command.documentation.title": "文档",
|
||||
"configuration.title": "Roo Code",
|
||||
|
|
|
|||
2
src/package.nls.zh-TW.json
generated
2
src/package.nls.zh-TW.json
generated
|
|
@ -23,7 +23,7 @@
|
|||
"command.history.title": "歷史記錄",
|
||||
"command.marketplace.title": "應用市場",
|
||||
"command.openInEditor.title": "在編輯器中開啟",
|
||||
"command.account.title": "帳戶",
|
||||
"command.cloud.title": "Cloud",
|
||||
"command.settings.title": "設定",
|
||||
"command.documentation.title": "文件",
|
||||
"configuration.title": "Roo Code",
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@ export interface ExtensionMessage {
|
|||
| "historyButtonClicked"
|
||||
| "promptsButtonClicked"
|
||||
| "marketplaceButtonClicked"
|
||||
| "accountButtonClicked"
|
||||
| "cloudButtonClicked"
|
||||
| "didBecomeVisible"
|
||||
| "focusInput"
|
||||
| "switchTab"
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@ export interface WebviewMessage {
|
|||
| "toggleApiConfigPin"
|
||||
| "setHistoryPreviewCollapsed"
|
||||
| "hasOpenedModeSelector"
|
||||
| "accountButtonClicked"
|
||||
| "cloudButtonClicked"
|
||||
| "rooCloudSignIn"
|
||||
| "rooCloudSignOut"
|
||||
| "condenseTaskContextRequest"
|
||||
|
|
@ -223,7 +223,7 @@ export interface WebviewMessage {
|
|||
| "openRouterImageGenerationSelectedModel"
|
||||
text?: string
|
||||
editedMessageContent?: string
|
||||
tab?: "settings" | "history" | "mcp" | "modes" | "chat" | "marketplace" | "account"
|
||||
tab?: "settings" | "history" | "mcp" | "modes" | "chat" | "marketplace" | "cloud"
|
||||
disabled?: boolean
|
||||
context?: string
|
||||
dataUri?: string
|
||||
|
|
|
|||
|
|
@ -21,12 +21,12 @@ import ModesView from "./components/modes/ModesView"
|
|||
import { HumanRelayDialog } from "./components/human-relay/HumanRelayDialog"
|
||||
import { DeleteMessageDialog, EditMessageDialog } from "./components/chat/MessageModificationConfirmationDialog"
|
||||
import ErrorBoundary from "./components/ErrorBoundary"
|
||||
import { AccountView } from "./components/account/AccountView"
|
||||
import { CloudView } from "./components/cloud/CloudView"
|
||||
import { useAddNonInteractiveClickListener } from "./components/ui/hooks/useNonInteractiveClick"
|
||||
import { TooltipProvider } from "./components/ui/tooltip"
|
||||
import { STANDARD_TOOLTIP_DELAY } from "./components/ui/standard-tooltip"
|
||||
|
||||
type Tab = "settings" | "history" | "mcp" | "modes" | "chat" | "marketplace" | "account"
|
||||
type Tab = "settings" | "history" | "mcp" | "modes" | "chat" | "marketplace" | "cloud"
|
||||
|
||||
interface HumanRelayDialogState {
|
||||
isOpen: boolean
|
||||
|
|
@ -58,7 +58,7 @@ const tabsByMessageAction: Partial<Record<NonNullable<ExtensionMessage["action"]
|
|||
mcpButtonClicked: "mcp",
|
||||
historyButtonClicked: "history",
|
||||
marketplaceButtonClicked: "marketplace",
|
||||
accountButtonClicked: "account",
|
||||
cloudButtonClicked: "cloud",
|
||||
}
|
||||
|
||||
const App = () => {
|
||||
|
|
@ -107,7 +107,7 @@ const App = () => {
|
|||
(newTab: Tab) => {
|
||||
// Only check MDM compliance if mdmCompliant is explicitly false (meaning there's an MDM policy and user is non-compliant)
|
||||
// If mdmCompliant is undefined or true, allow tab switching
|
||||
if (mdmCompliant === false && newTab !== "account") {
|
||||
if (mdmCompliant === false && newTab !== "cloud") {
|
||||
// Notify the user that authentication is required by their organization
|
||||
vscode.postMessage({ type: "showMdmAuthRequiredNotification" })
|
||||
return
|
||||
|
|
@ -249,8 +249,8 @@ const App = () => {
|
|||
targetTab={currentMarketplaceTab as "mcp" | "mode" | undefined}
|
||||
/>
|
||||
)}
|
||||
{tab === "account" && (
|
||||
<AccountView
|
||||
{tab === "cloud" && (
|
||||
<CloudView
|
||||
userInfo={cloudUserInfo}
|
||||
isAuthenticated={cloudIsAuthenticated}
|
||||
cloudApiUrl={cloudApiUrl}
|
||||
|
|
|
|||
|
|
@ -90,11 +90,11 @@ vi.mock("@src/components/marketplace/MarketplaceView", () => ({
|
|||
},
|
||||
}))
|
||||
|
||||
vi.mock("@src/components/account/AccountView", () => ({
|
||||
AccountView: function AccountView({ onDone }: { onDone: () => void }) {
|
||||
vi.mock("@src/components/cloud/CloudView", () => ({
|
||||
CloudView: function CloudView({ onDone }: { onDone: () => void }) {
|
||||
return (
|
||||
<div data-testid="account-view" onClick={onDone}>
|
||||
Account View
|
||||
<div data-testid="cloud-view" onClick={onDone}>
|
||||
Cloud View
|
||||
</div>
|
||||
)
|
||||
},
|
||||
|
|
|
|||
|
|
@ -245,34 +245,34 @@ export const ShareButton = ({ item, disabled = false, showLabel = false }: Share
|
|||
<DialogContent className="max-w-sm">
|
||||
<DialogHeader className="text-center">
|
||||
<DialogTitle className="text-lg font-medium text-vscode-foreground">
|
||||
{t("account:cloudBenefitsTitle")}
|
||||
{t("cloud:cloudBenefitsTitle")}
|
||||
</DialogTitle>
|
||||
</DialogHeader>
|
||||
|
||||
<div className="flex flex-col space-y-6">
|
||||
<div>
|
||||
<p className="text-md text-vscode-descriptionForeground mb-4">
|
||||
{t("account:cloudBenefitsSubtitle")}
|
||||
{t("cloud:cloudBenefitsSubtitle")}
|
||||
</p>
|
||||
<ul className="text-sm text-vscode-descriptionForeground space-y-2">
|
||||
<li className="flex items-start">
|
||||
<span className="mr-2 text-vscode-foreground">•</span>
|
||||
{t("account:cloudBenefitSharing")}
|
||||
{t("cloud:cloudBenefitSharing")}
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<span className="mr-2 text-vscode-foreground">•</span>
|
||||
{t("account:cloudBenefitHistory")}
|
||||
{t("cloud:cloudBenefitHistory")}
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<span className="mr-2 text-vscode-foreground">•</span>
|
||||
{t("account:cloudBenefitMetrics")}
|
||||
{t("cloud:cloudBenefitMetrics")}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col gap-4">
|
||||
<Button onClick={handleConnectToCloud} className="w-full">
|
||||
{t("account:connect")}
|
||||
{t("cloud:connect")}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -42,12 +42,12 @@ vi.mock("react-i18next", () => ({
|
|||
"chat:task.connectToCloud": "Connect to Cloud",
|
||||
"chat:task.connectToCloudDescription": "Sign in to Roo Code Cloud to share tasks",
|
||||
"chat:task.sharingDisabledByOrganization": "Sharing disabled by organization",
|
||||
"account:cloudBenefitsTitle": "Connect to Roo Code Cloud",
|
||||
"account:cloudBenefitsSubtitle": "Sign in to Roo Code Cloud to share tasks",
|
||||
"account:cloudBenefitHistory": "Access your task history from anywhere",
|
||||
"account:cloudBenefitSharing": "Share tasks with your team",
|
||||
"account:cloudBenefitMetrics": "Track usage and costs",
|
||||
"account:connect": "Connect",
|
||||
"cloud:cloudBenefitsTitle": "Connect to Roo Code Cloud",
|
||||
"cloud:cloudBenefitsSubtitle": "Sign in to Roo Code Cloud to share tasks",
|
||||
"cloud:cloudBenefitHistory": "Access your task history from anywhere",
|
||||
"cloud:cloudBenefitSharing": "Share tasks with your team",
|
||||
"cloud:cloudBenefitMetrics": "Track usage and costs",
|
||||
"cloud:connect": "Connect",
|
||||
}
|
||||
return translations[key] || key
|
||||
},
|
||||
|
|
@ -260,7 +260,7 @@ describe("TaskActions", () => {
|
|||
// Verify popover is not open initially
|
||||
expect(screen.queryByText("Share with Organization")).not.toBeInTheDocument()
|
||||
|
||||
// Simulate user becoming authenticated (e.g., from AccountView)
|
||||
// Simulate user becoming authenticated (e.g., from CloudView)
|
||||
mockUseExtensionState.mockReturnValue({
|
||||
sharingEnabled: true,
|
||||
cloudIsAuthenticated: true,
|
||||
|
|
|
|||
|
|
@ -11,14 +11,14 @@ import { ToggleSwitch } from "@/components/ui/toggle-switch"
|
|||
|
||||
import { History, PiggyBank, SquareArrowOutUpRightIcon } from "lucide-react"
|
||||
|
||||
type AccountViewProps = {
|
||||
type CloudViewProps = {
|
||||
userInfo: CloudUserInfo | null
|
||||
isAuthenticated: boolean
|
||||
cloudApiUrl?: string
|
||||
onDone: () => void
|
||||
}
|
||||
|
||||
export const AccountView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }: AccountViewProps) => {
|
||||
export const CloudView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }: CloudViewProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
const { remoteControlEnabled, setRemoteControlEnabled } = useExtensionState()
|
||||
const wasAuthenticatedRef = useRef(false)
|
||||
|
|
@ -31,25 +31,30 @@ export const AccountView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }:
|
|||
wasAuthenticatedRef.current = true
|
||||
} else if (wasAuthenticatedRef.current && !isAuthenticated) {
|
||||
// User just logged out successfully
|
||||
// NOTE: Telemetry events use ACCOUNT_* naming for continuity with existing analytics
|
||||
// and to maintain historical data consistency, even though the UI now uses "Cloud" terminology
|
||||
telemetryClient.capture(TelemetryEventName.ACCOUNT_LOGOUT_SUCCESS)
|
||||
wasAuthenticatedRef.current = false
|
||||
}
|
||||
}, [isAuthenticated])
|
||||
|
||||
const handleConnectClick = () => {
|
||||
// Send telemetry for account connect action
|
||||
// Send telemetry for cloud connect action
|
||||
// NOTE: Using ACCOUNT_* telemetry events for backward compatibility with analytics
|
||||
telemetryClient.capture(TelemetryEventName.ACCOUNT_CONNECT_CLICKED)
|
||||
vscode.postMessage({ type: "rooCloudSignIn" })
|
||||
}
|
||||
|
||||
const handleLogoutClick = () => {
|
||||
// Send telemetry for account logout action
|
||||
// Send telemetry for cloud logout action
|
||||
// NOTE: Using ACCOUNT_* telemetry events for backward compatibility with analytics
|
||||
telemetryClient.capture(TelemetryEventName.ACCOUNT_LOGOUT_CLICKED)
|
||||
vscode.postMessage({ type: "rooCloudSignOut" })
|
||||
}
|
||||
|
||||
const handleVisitCloudWebsite = () => {
|
||||
// Send telemetry for cloud website visit
|
||||
// NOTE: Using ACCOUNT_* telemetry events for backward compatibility with analytics
|
||||
telemetryClient.capture(TelemetryEventName.ACCOUNT_CONNECT_CLICKED)
|
||||
const cloudUrl = cloudApiUrl || "https://app.roocode.com"
|
||||
vscode.postMessage({ type: "openExternal", url: cloudUrl })
|
||||
|
|
@ -64,7 +69,7 @@ export const AccountView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }:
|
|||
return (
|
||||
<div className="flex flex-col h-full">
|
||||
<div className="flex justify-between items-center mb-6">
|
||||
<h1 className="text-xl font-medium text-vscode-foreground">{t("account:title")}</h1>
|
||||
<h1 className="text-xl font-medium text-vscode-foreground">{t("cloud:title")}</h1>
|
||||
<VSCodeButton appearance="secondary" onClick={onDone}>
|
||||
{t("settings:common.done")}
|
||||
</VSCodeButton>
|
||||
|
|
@ -77,7 +82,7 @@ export const AccountView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }:
|
|||
{userInfo?.picture ? (
|
||||
<img
|
||||
src={userInfo.picture}
|
||||
alt={t("account:profilePicture")}
|
||||
alt={t("cloud:profilePicture")}
|
||||
className="w-full h-full object-cover"
|
||||
/>
|
||||
) : (
|
||||
|
|
@ -114,13 +119,13 @@ export const AccountView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }:
|
|||
checked={remoteControlEnabled}
|
||||
onChange={handleRemoteControlToggle}
|
||||
size="medium"
|
||||
aria-label={t("account:remoteControl")}
|
||||
aria-label={t("cloud:remoteControl")}
|
||||
data-testid="remote-control-toggle"
|
||||
/>
|
||||
<span className="font-medium text-vscode-foreground">{t("account:remoteControl")}</span>
|
||||
<span className="font-medium text-vscode-foreground">{t("cloud:remoteControl")}</span>
|
||||
</div>
|
||||
<div className="text-vscode-descriptionForeground text-sm mt-1 mb-4 ml-8">
|
||||
{t("account:remoteControlDescription")}
|
||||
{t("cloud:remoteControlDescription")}
|
||||
</div>
|
||||
<hr className="border-vscode-widget-border mb-4" />
|
||||
</div>
|
||||
|
|
@ -128,10 +133,10 @@ export const AccountView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }:
|
|||
|
||||
<div className="flex flex-col gap-2 mt-4">
|
||||
<VSCodeButton appearance="secondary" onClick={handleVisitCloudWebsite} className="w-full">
|
||||
{t("account:visitCloudWebsite")}
|
||||
{t("cloud:visitCloudWebsite")}
|
||||
</VSCodeButton>
|
||||
<VSCodeButton appearance="secondary" onClick={handleLogoutClick} className="w-full">
|
||||
{t("account:logOut")}
|
||||
{t("cloud:logOut")}
|
||||
</VSCodeButton>
|
||||
</div>
|
||||
</>
|
||||
|
|
@ -156,27 +161,27 @@ export const AccountView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }:
|
|||
|
||||
<div className="flex flex-col mb-6 text-center">
|
||||
<h2 className="text-xl font-bold text-vscode-foreground mb-2">
|
||||
{t("account:cloudBenefitsTitle")}
|
||||
{t("cloud:cloudBenefitsTitle")}
|
||||
</h2>
|
||||
<ul className="text-vscode-descriptionForeground space-y-3 mx-auto px-8">
|
||||
<li className="flex items-start text-left gap-4">
|
||||
<SquareArrowOutUpRightIcon size="16" className="shrink-0" />
|
||||
{t("account:cloudBenefitSharing")}
|
||||
{t("cloud:cloudBenefitSharing")}
|
||||
</li>
|
||||
<li className="flex items-start text-left gap-4">
|
||||
<History size="16" className="shrink-0" />
|
||||
{t("account:cloudBenefitHistory")}
|
||||
{t("cloud:cloudBenefitHistory")}
|
||||
</li>
|
||||
<li className="flex items-start text-left gap-4">
|
||||
<PiggyBank size="16" className="shrink-0" />
|
||||
{t("account:cloudBenefitMetrics")}
|
||||
{t("cloud:cloudBenefitMetrics")}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col items-center gap-4">
|
||||
<VSCodeButton appearance="primary" onClick={handleConnectClick} className="w-1/2">
|
||||
{t("account:connect")}
|
||||
{t("cloud:connect")}
|
||||
</VSCodeButton>
|
||||
</div>
|
||||
</>
|
||||
|
|
@ -1,26 +1,26 @@
|
|||
import { render, screen } from "@/utils/test-utils"
|
||||
|
||||
import { AccountView } from "../AccountView"
|
||||
import { CloudView } from "../CloudView"
|
||||
|
||||
// Mock the translation context
|
||||
vi.mock("@src/i18n/TranslationContext", () => ({
|
||||
useAppTranslation: () => ({
|
||||
t: (key: string) => {
|
||||
const translations: Record<string, string> = {
|
||||
"account:title": "Account",
|
||||
"cloud:title": "Cloud",
|
||||
"settings:common.done": "Done",
|
||||
"account:signIn": "Connect to Roo Code Cloud",
|
||||
"account:cloudBenefitsTitle": "Connect to Roo Code Cloud",
|
||||
"account:cloudBenefitSharing": "Share tasks with others",
|
||||
"account:cloudBenefitHistory": "Access your task history",
|
||||
"account:cloudBenefitMetrics": "Get a holistic view of your token consumption",
|
||||
"account:logOut": "Log out",
|
||||
"account:connect": "Connect Now",
|
||||
"account:visitCloudWebsite": "Visit Roo Code Cloud",
|
||||
"account:remoteControl": "Roomote Control",
|
||||
"account:remoteControlDescription":
|
||||
"cloud:signIn": "Connect to Roo Code Cloud",
|
||||
"cloud:cloudBenefitsTitle": "Connect to Roo Code Cloud",
|
||||
"cloud:cloudBenefitSharing": "Share tasks with others",
|
||||
"cloud:cloudBenefitHistory": "Access your task history",
|
||||
"cloud:cloudBenefitMetrics": "Get a holistic view of your token consumption",
|
||||
"cloud:logOut": "Log out",
|
||||
"cloud:connect": "Connect Now",
|
||||
"cloud:visitCloudWebsite": "Visit Roo Code Cloud",
|
||||
"cloud:remoteControl": "Roomote Control",
|
||||
"cloud:remoteControlDescription":
|
||||
"Enable following and interacting with tasks in this workspace with Roo Code Cloud",
|
||||
"account:profilePicture": "Profile picture",
|
||||
"cloud:profilePicture": "Profile picture",
|
||||
}
|
||||
return translations[key] || key
|
||||
},
|
||||
|
|
@ -55,10 +55,10 @@ Object.defineProperty(window, "IMAGES_BASE_URI", {
|
|||
writable: true,
|
||||
})
|
||||
|
||||
describe("AccountView", () => {
|
||||
describe("CloudView", () => {
|
||||
it("should display benefits when user is not authenticated", () => {
|
||||
render(
|
||||
<AccountView
|
||||
<CloudView
|
||||
userInfo={null}
|
||||
isAuthenticated={false}
|
||||
cloudApiUrl="https://app.roocode.com"
|
||||
|
|
@ -83,7 +83,7 @@ describe("AccountView", () => {
|
|||
}
|
||||
|
||||
render(
|
||||
<AccountView
|
||||
<CloudView
|
||||
userInfo={mockUserInfo}
|
||||
isAuthenticated={true}
|
||||
cloudApiUrl="https://app.roocode.com"
|
||||
|
|
@ -112,7 +112,7 @@ describe("AccountView", () => {
|
|||
}
|
||||
|
||||
render(
|
||||
<AccountView
|
||||
<CloudView
|
||||
userInfo={mockUserInfo}
|
||||
isAuthenticated={true}
|
||||
cloudApiUrl="https://app.roocode.com"
|
||||
|
|
@ -136,7 +136,7 @@ describe("AccountView", () => {
|
|||
}
|
||||
|
||||
render(
|
||||
<AccountView
|
||||
<CloudView
|
||||
userInfo={mockUserInfo}
|
||||
isAuthenticated={true}
|
||||
cloudApiUrl="https://app.roocode.com"
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "Compte",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "Imatge de perfil",
|
||||
"logOut": "Tancar sessió",
|
||||
"testApiAuthentication": "Provar autenticació d'API",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "Konto",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "Profilbild",
|
||||
"logOut": "Abmelden",
|
||||
"testApiAuthentication": "API-Authentifizierung testen",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "Account",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "Profile picture",
|
||||
"logOut": "Log out",
|
||||
"testApiAuthentication": "Test API Authentication",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "Cuenta",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "Foto de perfil",
|
||||
"logOut": "Cerrar sesión",
|
||||
"testApiAuthentication": "Probar autenticación de API",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "Compte",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "Photo de profil",
|
||||
"logOut": "Déconnexion",
|
||||
"testApiAuthentication": "Tester l'authentification API",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "खाता",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "प्रोफाइल चित्र",
|
||||
"logOut": "लॉग आउट",
|
||||
"testApiAuthentication": "API प्रमाणीकरण का परीक्षण करें",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "Akun",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "Foto profil",
|
||||
"logOut": "Keluar",
|
||||
"testApiAuthentication": "Uji Autentikasi API",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "Account",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "Immagine del profilo",
|
||||
"logOut": "Disconnetti",
|
||||
"testApiAuthentication": "Verifica autenticazione API",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "アカウント",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "プロフィール画像",
|
||||
"logOut": "ログアウト",
|
||||
"testApiAuthentication": "API認証をテスト",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "계정",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "프로필 사진",
|
||||
"logOut": "로그아웃",
|
||||
"testApiAuthentication": "API 인증 테스트",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "Account",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "Profielfoto",
|
||||
"logOut": "Uitloggen",
|
||||
"testApiAuthentication": "API-authenticatie testen",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "Konto",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "Zdjęcie profilowe",
|
||||
"logOut": "Wyloguj",
|
||||
"testApiAuthentication": "Testuj uwierzytelnianie API",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "Conta",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "Foto de perfil",
|
||||
"logOut": "Sair",
|
||||
"testApiAuthentication": "Testar Autenticação de API",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "Учетная запись",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "Фото профиля",
|
||||
"logOut": "Выход",
|
||||
"testApiAuthentication": "Проверить аутентификацию API",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "Hesap",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "Profil resmi",
|
||||
"logOut": "Çıkış yap",
|
||||
"testApiAuthentication": "API Kimlik Doğrulamayı Test Et",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "Tài khoản",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "Ảnh hồ sơ",
|
||||
"logOut": "Đăng xuất",
|
||||
"testApiAuthentication": "Kiểm tra xác thực API",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "账户",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "头像",
|
||||
"logOut": "退出登录",
|
||||
"testApiAuthentication": "测试 API 认证",
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "帳號",
|
||||
"title": "Cloud",
|
||||
"profilePicture": "個人圖片",
|
||||
"logOut": "登出",
|
||||
"testApiAuthentication": "測試 API 認證",
|
||||
Loading…
Add table
Reference in a new issue