UNPKG

@graphteon/juricode

Version:

We are forging the future with lines of digital steel

62 lines 4.17 kB
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import React, { useState, useEffect } from 'react'; import { Box, Text, useInput, useApp } from 'ink'; import OpenHands from '../api/open-hands'; const SuggestedTasksTUI = ({ onBack, onSelectTask }) => { const [tasks, setTasks] = useState([]); const [selectedIndex, setSelectedIndex] = useState(0); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const { exit } = useApp(); useEffect(() => { const fetchSuggestedTasks = async () => { try { setLoading(true); const suggestedTasks = await OpenHands.getSuggestedTasks(); setTasks(suggestedTasks); setError(null); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to fetch suggested tasks'); } finally { setLoading(false); } }; fetchSuggestedTasks(); }, []); useInput((input, key) => { if (key.escape) { onBack(); return; } if (loading) return; if (key.upArrow && selectedIndex > 0) { setSelectedIndex(selectedIndex - 1); } if (key.downArrow && selectedIndex < tasks.length - 1) { setSelectedIndex(selectedIndex + 1); } if (key.return && tasks.length > 0) { onSelectTask(tasks[selectedIndex]); } if (input === 'q') { exit(); } }); const getDifficultyColor = (difficulty) => { switch (difficulty.toLowerCase()) { case 'easy': return 'green'; case 'medium': return 'yellow'; case 'hard': return 'red'; default: return 'gray'; } }; const truncateText = (text, maxLength) => { return text.length > maxLength ? text.substring(0, maxLength) + '...' : text; }; return (_jsxs(Box, { flexDirection: "column", height: "100%", children: [_jsx(Box, { borderStyle: "single", borderColor: "blue", paddingX: 1, children: _jsx(Text, { color: "blue", bold: true, children: "\uD83D\uDCA1 Suggested Tasks" }) }), _jsx(Box, { flexDirection: "column", flexGrow: 1, paddingX: 1, paddingY: 1, children: loading ? (_jsx(Box, { justifyContent: "center", alignItems: "center", height: "100%", children: _jsx(Text, { color: "yellow", children: "\u23F3 Loading suggested tasks..." }) })) : error ? (_jsx(Box, { justifyContent: "center", alignItems: "center", height: "100%", children: _jsxs(Text, { color: "red", children: ["\u274C Error: ", error] }) })) : tasks.length === 0 ? (_jsx(Box, { justifyContent: "center", alignItems: "center", height: "100%", children: _jsx(Text, { color: "gray", children: "No suggested tasks available at the moment." }) })) : (tasks.map((task, index) => (_jsx(Box, { marginBottom: 1, children: _jsx(Box, { borderStyle: "single", borderColor: index === selectedIndex ? 'green' : 'gray', paddingX: 1, paddingY: 0, children: _jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { children: _jsxs(Text, { color: index === selectedIndex ? 'green' : 'white', bold: true, children: [index === selectedIndex ? '▶ ' : ' ', task.title] }) }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "gray", children: "Repository: " }), _jsx(Text, { color: "cyan", children: task.repo }), _jsx(Text, { color: "gray", children: " | Provider: " }), _jsx(Text, { color: "blue", children: task.git_provider }), _jsx(Text, { color: "gray", children: " | Type: " }), _jsx(Text, { color: "yellow", children: task.task_type })] }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "gray", children: "Issue #" }), _jsx(Text, { color: "magenta", children: task.issue_number })] })] }) }) }, index)))) }), _jsx(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, children: _jsxs(Text, { color: "gray", children: [tasks.length > 0 ? '↑↓ Navigate • Enter Select • ' : '', "ESC Back \u2022 Q Quit"] }) })] })); }; export default SuggestedTasksTUI; //# sourceMappingURL=SuggestedTasksTUI.js.map