Mark items as reviewed as a group with keyboard

This commit is contained in:
Nicolas Mowen 2026-03-24 10:33:37 -06:00
parent 334245bd3c
commit 32451b8c45
2 changed files with 25 additions and 20 deletions

View File

@ -409,8 +409,11 @@ export default function Events() {
// review status // review status
const markAllItemsAsReviewed = useCallback( const markItemsAsReviewed = useCallback(
async (currentItems: ReviewSegment[]) => { async (
currentItems: ReviewSegment[],
itemsToMarkReviewed: ReviewSegment[] | undefined = undefined,
) => {
if (currentItems.length == 0) { if (currentItems.length == 0) {
return; return;
} }
@ -435,13 +438,14 @@ export default function Events() {
{ revalidate: false, populateCache: true }, { revalidate: false, populateCache: true },
); );
const itemsToMarkReviewed = currentItems const reviewList =
?.filter((seg) => seg.end_time) itemsToMarkReviewed?.map((seg) => seg.id) ||
?.map((seg) => seg.id); currentItems?.filter((seg) => seg.end_time)?.map((seg) => seg.id) ||
[];
if (itemsToMarkReviewed.length > 0) { if (reviewList.length > 0) {
await axios.post(`reviews/viewed`, { await axios.post(`reviews/viewed`, {
ids: itemsToMarkReviewed, ids: reviewList,
reviewed: true, reviewed: true,
}); });
reloadData(); reloadData();
@ -611,7 +615,7 @@ export default function Events() {
setShowReviewed={setShowReviewed} setShowReviewed={setShowReviewed}
setSeverity={setSeverity} setSeverity={setSeverity}
markItemAsReviewed={markItemAsReviewed} markItemAsReviewed={markItemAsReviewed}
markAllItemsAsReviewed={markAllItemsAsReviewed} markItemsAsReviewed={markItemsAsReviewed}
onOpenRecording={setRecording} onOpenRecording={setRecording}
motionPreviewsCamera={motionPreviewsCamera ?? null} motionPreviewsCamera={motionPreviewsCamera ?? null}
setMotionPreviewsCamera={(camera) => setMotionPreviewsCamera={(camera) =>

View File

@ -110,7 +110,10 @@ type EventViewProps = {
setShowReviewed: (show: boolean) => void; setShowReviewed: (show: boolean) => void;
setSeverity: (severity: ReviewSeverity) => void; setSeverity: (severity: ReviewSeverity) => void;
markItemAsReviewed: (review: ReviewSegment) => void; markItemAsReviewed: (review: ReviewSegment) => void;
markAllItemsAsReviewed: (currentItems: ReviewSegment[]) => void; markItemsAsReviewed: (
currentItems: ReviewSegment[],
itemsToMarkReviewed?: ReviewSegment[] | undefined,
) => void;
onOpenRecording: (recordingInfo: RecordingStartingPoint) => void; onOpenRecording: (recordingInfo: RecordingStartingPoint) => void;
motionPreviewsCamera: string | null; motionPreviewsCamera: string | null;
setMotionPreviewsCamera: (camera: string | null) => void; setMotionPreviewsCamera: (camera: string | null) => void;
@ -132,7 +135,7 @@ export default function EventView({
setShowReviewed, setShowReviewed,
setSeverity, setSeverity,
markItemAsReviewed, markItemAsReviewed,
markAllItemsAsReviewed, markItemsAsReviewed,
onOpenRecording, onOpenRecording,
motionPreviewsCamera, motionPreviewsCamera,
setMotionPreviewsCamera, setMotionPreviewsCamera,
@ -498,7 +501,7 @@ export default function EventView({
loading={severity != severityToggle} loading={severity != severityToggle}
emptyCardData={emptyCardData} emptyCardData={emptyCardData}
markItemAsReviewed={markItemAsReviewed} markItemAsReviewed={markItemAsReviewed}
markAllItemsAsReviewed={markAllItemsAsReviewed} markItemsAsReviewed={markItemsAsReviewed}
onSelectReview={onSelectReview} onSelectReview={onSelectReview}
onSelectAllReviews={onSelectAllReviews} onSelectAllReviews={onSelectAllReviews}
setSelectedReviews={setSelectedReviews} setSelectedReviews={setSelectedReviews}
@ -549,7 +552,10 @@ type DetectionReviewProps = {
loading: boolean; loading: boolean;
emptyCardData: EmptyCardData; emptyCardData: EmptyCardData;
markItemAsReviewed: (review: ReviewSegment) => void; markItemAsReviewed: (review: ReviewSegment) => void;
markAllItemsAsReviewed: (currentItems: ReviewSegment[]) => void; markItemsAsReviewed: (
currentItems: ReviewSegment[],
itemsToMarkReviewed?: ReviewSegment[] | undefined,
) => void;
onSelectReview: ( onSelectReview: (
review: ReviewSegment, review: ReviewSegment,
ctrl: boolean, ctrl: boolean,
@ -573,7 +579,7 @@ function DetectionReview({
loading, loading,
emptyCardData, emptyCardData,
markItemAsReviewed, markItemAsReviewed,
markAllItemsAsReviewed, markItemsAsReviewed,
onSelectReview, onSelectReview,
onSelectAllReviews, onSelectAllReviews,
setSelectedReviews, setSelectedReviews,
@ -788,12 +794,7 @@ function DetectionReview({
break; break;
case "r": case "r":
if (selectedReviews.length > 0 && !modifiers.repeat) { if (selectedReviews.length > 0 && !modifiers.repeat) {
currentItems?.forEach((item) => { markItemsAsReviewed(currentItems || [], selectedReviews);
if (selectedReviews.some((r) => r.id === item.id)) {
item.has_been_reviewed = true;
markItemAsReviewed(item);
}
});
setSelectedReviews([]); setSelectedReviews([]);
return true; return true;
} }
@ -903,7 +904,7 @@ function DetectionReview({
variant="select" variant="select"
onClick={() => { onClick={() => {
setSelectedReviews([]); setSelectedReviews([]);
markAllItemsAsReviewed(currentItems ?? []); markItemsAsReviewed(currentItems ?? []);
}} }}
> >
{t("markTheseItemsAsReviewed")} {t("markTheseItemsAsReviewed")}