Add ability to select all on desktop (#12044)

* Add ability to select all review items

* Refactor keybaord listener
This commit is contained in:
Nicolas Mowen
2024-06-18 08:32:17 -06:00
committed by GitHub
parent 4bca405e29
commit e6790d9a6a
6 changed files with 64 additions and 29 deletions

View File

@@ -51,6 +51,7 @@ import { toast } from "sonner";
import { cn } from "@/lib/utils";
import { FilterList, LAST_24_HOURS_KEY } from "@/types/filter";
import { GiSoundWaves } from "react-icons/gi";
import useKeyboardListener from "@/hooks/use-keyboard-listener";
type EventViewProps = {
reviewItems?: SegmentedReviewData;
@@ -158,6 +159,17 @@ export default function EventView({
},
[selectedReviews, setSelectedReviews, onOpenRecording, markItemAsReviewed],
);
const onSelectAllReviews = useCallback(() => {
if (!currentReviewItems || currentReviewItems.length == 0) {
return;
}
if (selectedReviews.length < currentReviewItems.length) {
setSelectedReviews(currentReviewItems.map((seg) => seg.id));
} else {
setSelectedReviews([]);
}
}, [currentReviewItems, selectedReviews]);
const exportReview = useCallback(
(id: string) => {
@@ -376,6 +388,7 @@ export default function EventView({
markItemAsReviewed={markItemAsReviewed}
markAllItemsAsReviewed={markAllItemsAsReviewed}
onSelectReview={onSelectReview}
onSelectAllReviews={onSelectAllReviews}
pullLatestData={pullLatestData}
/>
)}
@@ -417,6 +430,7 @@ type DetectionReviewProps = {
markItemAsReviewed: (review: ReviewSegment) => void;
markAllItemsAsReviewed: (currentItems: ReviewSegment[]) => void;
onSelectReview: (review: ReviewSegment, ctrl: boolean) => void;
onSelectAllReviews: () => void;
pullLatestData: () => void;
};
function DetectionReview({
@@ -434,6 +448,7 @@ function DetectionReview({
markItemAsReviewed,
markAllItemsAsReviewed,
onSelectReview,
onSelectAllReviews,
pullLatestData,
}: DetectionReviewProps) {
const reviewTimelineRef = useRef<HTMLDivElement>(null);
@@ -580,6 +595,18 @@ function DetectionReview({
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [startTime]);
// keyboard
useKeyboardListener(["a"], (key, modifiers) => {
if (modifiers.repeat || !modifiers.down) {
return;
}
if (key == "a" && modifiers.ctrl) {
onSelectAllReviews();
}
});
return (
<>
<div