mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-10-10 03:28:03 +00:00
72 lines
2.2 KiB
TypeScript
72 lines
2.2 KiB
TypeScript
import { useState, useCallback, useRef, useEffect } from "react"
|
|
import { TelemetryEventName } from "@roo-code/types"
|
|
import { vscode } from "@/utils/vscode"
|
|
import { telemetryClient } from "@/utils/TelemetryClient"
|
|
import { useExtensionState } from "@/context/ExtensionStateContext"
|
|
|
|
interface UseCloudUpsellOptions {
|
|
onAuthSuccess?: () => void
|
|
autoOpenOnAuth?: boolean
|
|
}
|
|
|
|
export const useCloudUpsell = (options: UseCloudUpsellOptions = {}) => {
|
|
const { onAuthSuccess, autoOpenOnAuth = false } = options
|
|
const [isOpen, setIsOpen] = useState(false)
|
|
const [shouldOpenOnAuth, setShouldOpenOnAuth] = useState(false)
|
|
const { cloudIsAuthenticated, sharingEnabled, publicSharingEnabled } = useExtensionState()
|
|
const wasUnauthenticatedRef = useRef(false)
|
|
const initiatedAuthRef = useRef(false)
|
|
|
|
// Track authentication state changes
|
|
useEffect(() => {
|
|
if (!cloudIsAuthenticated || !sharingEnabled) {
|
|
wasUnauthenticatedRef.current = true
|
|
} else if (wasUnauthenticatedRef.current && cloudIsAuthenticated && sharingEnabled) {
|
|
// User just authenticated
|
|
if (initiatedAuthRef.current) {
|
|
// Auth was initiated from this hook
|
|
telemetryClient.capture(TelemetryEventName.ACCOUNT_CONNECT_SUCCESS)
|
|
setIsOpen(false) // Close the upsell dialog
|
|
|
|
if (autoOpenOnAuth && shouldOpenOnAuth) {
|
|
onAuthSuccess?.()
|
|
setShouldOpenOnAuth(false)
|
|
}
|
|
|
|
initiatedAuthRef.current = false // Reset the flag
|
|
}
|
|
wasUnauthenticatedRef.current = false
|
|
}
|
|
}, [cloudIsAuthenticated, sharingEnabled, onAuthSuccess, autoOpenOnAuth, shouldOpenOnAuth])
|
|
|
|
const openUpsell = useCallback(() => {
|
|
setIsOpen(true)
|
|
}, [])
|
|
|
|
const closeUpsell = useCallback(() => {
|
|
setIsOpen(false)
|
|
setShouldOpenOnAuth(false)
|
|
}, [])
|
|
|
|
const handleConnect = useCallback(() => {
|
|
// Mark that authentication was initiated from this hook
|
|
initiatedAuthRef.current = true
|
|
setShouldOpenOnAuth(true)
|
|
|
|
// Send message to VS Code to initiate sign in
|
|
vscode.postMessage({ type: "rooCloudSignIn" })
|
|
|
|
// Close the upsell dialog
|
|
closeUpsell()
|
|
}, [closeUpsell])
|
|
|
|
return {
|
|
isOpen,
|
|
openUpsell,
|
|
closeUpsell,
|
|
handleConnect,
|
|
isAuthenticated: cloudIsAuthenticated,
|
|
sharingEnabled,
|
|
publicSharingEnabled,
|
|
}
|
|
}
|