({
onSelect,
onCancel,
isEmbedded = false
}: Props)
| 23 | const UPDATED_STRING = 'Updated'; |
| 24 | const SPACE_BETWEEN_TABLE_COLUMNS = ' '; |
| 25 | export function ResumeTask({ |
| 26 | onSelect, |
| 27 | onCancel, |
| 28 | isEmbedded = false |
| 29 | }: Props): React.ReactNode { |
| 30 | const { |
| 31 | rows |
| 32 | } = useTerminalSize(); |
| 33 | const [sessions, setSessions] = useState<CodeSession[]>([]); |
| 34 | const [currentRepo, setCurrentRepo] = useState<string | null>(null); |
| 35 | const [loading, setLoading] = useState(true); |
| 36 | const [loadErrorType, setLoadErrorType] = useState<LoadErrorType | null>(null); |
| 37 | const [retrying, setRetrying] = useState(false); |
| 38 | const [hasCompletedTeleportErrorFlow, setHasCompletedTeleportErrorFlow] = useState(false); |
| 39 | |
| 40 | // Track focused index for scroll position display in title |
| 41 | const [focusedIndex, setFocusedIndex] = useState(1); |
| 42 | const escKey = useShortcutDisplay('confirm:no', 'Confirmation', 'Esc'); |
| 43 | const loadSessions = useCallback(async () => { |
| 44 | try { |
| 45 | setLoading(true); |
| 46 | setLoadErrorType(null); |
| 47 | |
| 48 | // Detect current repository |
| 49 | const detectedRepo = await detectCurrentRepository(); |
| 50 | setCurrentRepo(detectedRepo); |
| 51 | logForDebugging(`Current repository: ${detectedRepo || 'not detected'}`); |
| 52 | const codeSessions = await fetchCodeSessionsFromSessionsAPI(); |
| 53 | |
| 54 | // Filter sessions by current repository if detected |
| 55 | let filteredSessions = codeSessions; |
| 56 | if (detectedRepo) { |
| 57 | filteredSessions = codeSessions.filter(session => { |
| 58 | if (!session.repo) return false; |
| 59 | const sessionRepo = `${session.repo.owner.login}/${session.repo.name}`; |
| 60 | return sessionRepo === detectedRepo; |
| 61 | }); |
| 62 | logForDebugging(`Filtered ${filteredSessions.length} sessions for repo ${detectedRepo} from ${codeSessions.length} total`); |
| 63 | } |
| 64 | |
| 65 | // Sort by updated_at (newest first) |
| 66 | const sortedSessions = [...filteredSessions].sort((a, b) => { |
| 67 | const dateA = new Date(a.updated_at); |
| 68 | const dateB = new Date(b.updated_at); |
| 69 | return dateB.getTime() - dateA.getTime(); |
| 70 | }); |
| 71 | setSessions(sortedSessions); |
| 72 | } catch (err) { |
| 73 | const errorMessage = err instanceof Error ? err.message : String(err); |
| 74 | logForDebugging(`Error loading code sessions: ${errorMessage}`); |
| 75 | setLoadErrorType(determineErrorType(errorMessage)); |
| 76 | } finally { |
| 77 | setLoading(false); |
| 78 | setRetrying(false); |
| 79 | } |
| 80 | }, []); |
| 81 | const handleRetry = () => { |
| 82 | setRetrying(true); |
nothing calls this directly
no test coverage detected