mirror of
https://github.com/thegeneralist01/archivr
synced 2026-07-22 03:05:32 +02:00
EntryRow.jsx / ChildRow: - Index-based light/dark classes (child-entry-row--light/dark) replace nth-child rules; parity comes from children.map idx so no sibling — including the loading div — can shift the stripe order - Loading div moved outside .child-entries so it never affects child row ordering at all - Accept deletedUids prop; filter expanded children array before render so deleted children disappear immediately without waiting for reload EntriesView.jsx: thread deletedUids through to EntryRow App.jsx: - Add deletedUids state; handleEntryDeleted/handleBulkDeleted populate it - isRoot/hasChildDelete computed from entries before setEntries (safe in StrictMode — no side-effects inside updater functions) - Child delete triggers loadEntries to refresh stale parent child_count and total_artifact_bytes - handleRowClick ctrl/meta cache-miss branch uses det.summary (not det) from fetchEntryDetail; archiveId added to dep array - handleRowClick dep array includes archiveId
37 lines
1.4 KiB
JavaScript
37 lines
1.4 KiB
JavaScript
import SkeletonEntryRow from './SkeletonEntryRow';
|
|
|
|
import EntryRow from './EntryRow';
|
|
|
|
export default function EntriesView({ entries, selectedUids, onRowClick, archiveId, pendingCaptures = [], deletedUids }) {
|
|
return (
|
|
<section id="archive-view" className="view is-active">
|
|
<div className="entry-table">
|
|
<div className="entry-header-row">
|
|
<div className="col-check" aria-hidden="true" />
|
|
<div className="col-added">Added</div>
|
|
<div className="col-title">Title</div>
|
|
<div className="col-type">Type</div>
|
|
<div className="col-size">Size</div>
|
|
<div className="col-url">Original URL</div>
|
|
</div>
|
|
<div id="entries-body">
|
|
{pendingCaptures.filter(c => c.archiveId === archiveId).reverse().map(cap => (
|
|
<SkeletonEntryRow key={cap.id} />
|
|
))}
|
|
{entries.map(entry => (
|
|
<EntryRow
|
|
key={entry.entry_uid}
|
|
entry={entry}
|
|
archiveId={archiveId}
|
|
isSelected={selectedUids.size === 1 && selectedUids.has(entry.entry_uid)}
|
|
isMultiSelected={selectedUids.size >= 2 && selectedUids.has(entry.entry_uid)}
|
|
onRowClick={onRowClick}
|
|
selectedUids={selectedUids}
|
|
deletedUids={deletedUids}
|
|
/>
|
|
))}
|
|
</div>
|
|
</div>
|
|
</section>
|
|
);
|
|
}
|