@@ -236,7 +296,7 @@ function StatsBar({ issues, fetchedAt, stale, onRefresh, refreshing }) {
/* ─── Dev log entry ──────────────────────────────────────────────────────── */
-function DevLogEntry({ entry }) {
+function DevLogEntry({ entry }: { entry: DevLogEntryData }) {
const [open, setOpen] = useState(false);
return (
@@ -262,10 +322,10 @@ function DevLogEntry({ entry }) {
{entry.status}
)}
- {entry.filesModified?.length > 0 && (
+ {(entry.filesModified?.length ?? 0) > 0 && (
- {entry.filesModified.length} files
+ {entry.filesModified?.length} files
)}
@@ -275,11 +335,11 @@ function DevLogEntry({ entry }) {
- {entry.agents?.length > 0 && (
+ {(entry.agents?.length ?? 0) > 0 && (
Agents
- {entry.agents.map((agent, idx) => (
+ {entry.agents?.map((agent, idx) => (
)}
- {entry.filesModified?.length > 0 && (
+ {(entry.filesModified?.length ?? 0) > 0 && (
Files Modified
- {entry.filesModified.map((file, idx) => (
+ {entry.filesModified?.map((file, idx) => (
{file}
@@ -306,11 +366,11 @@ function DevLogEntry({ entry }) {
)}
- {entry.workCompleted?.length > 0 && (
+ {(entry.workCompleted?.length ?? 0) > 0 && (
Work Completed
- {entry.workCompleted.map((work, idx) => (
+ {entry.workCompleted?.map((work, idx) => (
-
✓
{work}
@@ -330,20 +390,20 @@ function DevLogEntry({ entry }) {
/* ─── Main page ──────────────────────────────────────────────────────────── */
export default function RoadmapPage() {
- const [roadmapData, setRoadmapData] = useState(null);
- const [devLogData, setDevLogData] = useState(null);
+ const [roadmapData, setRoadmapData] = useState(null);
+ const [devLogData, setDevLogData] = useState(null);
const [roadmapLoading, setRoadmapLoading] = useState(true);
const [roadmapRefreshing,setRoadmapRefreshing]= useState(false);
const [devLogLoading, setDevLogLoading] = useState(false);
- const [roadmapError, setRoadmapError] = useState(null);
- const [devLogError, setDevLogError] = useState(null);
+ const [roadmapError, setRoadmapError] = useState(null);
+ const [devLogError, setDevLogError] = useState(null);
useEffect(() => {
let cancelled = false;
setRoadmapLoading(true);
api.roadmap()
- .then(data => { if (!cancelled) setRoadmapData(data); })
- .catch(err => { if (!cancelled) setRoadmapError(err.message || 'Failed to load issues'); })
+ .then(data => { if (!cancelled) setRoadmapData(data as RoadmapData); })
+ .catch(err => { if (!cancelled) setRoadmapError(errMessage(err, 'Failed to load issues')); })
.finally(() => { if (!cancelled) setRoadmapLoading(false); });
return () => { cancelled = true; };
}, []);
@@ -351,7 +411,7 @@ export default function RoadmapPage() {
const handleRefresh = () => {
setRoadmapRefreshing(true);
api.roadmap(true)
- .then(data => setRoadmapData(data))
+ .then(data => setRoadmapData(data as RoadmapData))
.catch(() => {})
.finally(() => setRoadmapRefreshing(false));
};
@@ -361,8 +421,8 @@ export default function RoadmapPage() {
let cancelled = false;
setDevLogLoading(true);
api.devLog()
- .then(data => { if (!cancelled) setDevLogData(data); })
- .catch(err => { if (!cancelled) setDevLogError(err.message || 'Failed to load activity log'); })
+ .then(data => { if (!cancelled) setDevLogData(data as DevLogData); })
+ .catch(err => { if (!cancelled) setDevLogError(errMessage(err, 'Failed to load activity log')); })
.finally(() => { if (!cancelled) setDevLogLoading(false); });
return () => { cancelled = true; };
}, [devLogData, devLogLoading]);
@@ -480,7 +540,7 @@ export default function RoadmapPage() {
) : devLogData ? (
- {devLogData.entries.map((entry, idx) => (
+ {devLogData.entries?.map((entry, idx) => (
))}