mirror of
https://github.com/thegeneralist01/archivr
synced 2026-07-22 03:05:32 +02:00
- Scaffold Vite+React project in frontend/ (bun, react 18, @vitejs/plugin-react) - vite.config.js outputs to crates/archivr-server/static/ directly - src/utils.js: formatBytes, valueText, formatTimestamp, SOURCE_ICONS, sourceIconSvg - src/api.js: typed fetch wrappers for all API endpoints - App.jsx: full state management, archive switching, debounced search, tag filter, view routing, capture dialog orchestration - components/Topbar.jsx: archive switcher, nav, capture button - components/CaptureDialog.jsx: native <dialog> ref with showModal/close, Escape key support, locator validation - components/EntriesView.jsx + EntryRow.jsx: flex table with source icons, type pills, keyboard selection - components/ContextRail.jsx: parallel detail+tags fetch, stale-race guard via selectSeqRef, inline tag assign/remove - components/RunsView.jsx: runs kept as <table> (matches original) - components/AdminView.jsx: mounted archives list - components/TagsView.jsx: recursive tag tree with active state - Remove old app.js; styles.css moved to frontend/src/ (Vite bundles it)
24 lines
707 B
JavaScript
24 lines
707 B
JavaScript
export default function RunsView({ runs }) {
|
|
return (
|
|
<section id="runs-view" className="view is-active">
|
|
<table className="entry-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Started</th><th>Status</th><th>Requested</th><th>Completed</th><th>Failed</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{runs.map((run, i) => (
|
|
<tr key={i}>
|
|
<td>{run.started_at ?? ''}</td>
|
|
<td>{run.status ?? ''}</td>
|
|
<td>{run.requested_count ?? ''}</td>
|
|
<td>{run.completed_count ?? ''}</td>
|
|
<td>{run.failed_count ?? ''}</td>
|
|
</tr>
|
|
))}
|
|
</tbody>
|
|
</table>
|
|
</section>
|
|
)
|
|
}
|