From 9712c1f34ad3022f3636c684323ce58ba03a501d Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Fri, 21 Mar 2025 08:14:28 -0600 Subject: [PATCH] Adjust selection method for mobile --- web/src/pages/FaceLibrary.tsx | 151 +++++++++++++++++++++++----------- web/src/types/face.ts | 4 + 2 files changed, 105 insertions(+), 50 deletions(-) diff --git a/web/src/pages/FaceLibrary.tsx b/web/src/pages/FaceLibrary.tsx index 73fd54c7a..29d1408d9 100644 --- a/web/src/pages/FaceLibrary.tsx +++ b/web/src/pages/FaceLibrary.tsx @@ -32,11 +32,11 @@ import { useFormattedTimestamp } from "@/hooks/use-date-utils"; import useKeyboardListener from "@/hooks/use-keyboard-listener"; import useOptimisticState from "@/hooks/use-optimistic-state"; import { cn } from "@/lib/utils"; -import { RecognizedFaceData } from "@/types/face"; +import { FaceLibraryData, RecognizedFaceData } from "@/types/face"; import { FrigateConfig } from "@/types/frigateConfig"; import axios from "axios"; import { useCallback, useEffect, useMemo, useRef, useState } from "react"; -import { isDesktop } from "react-device-detect"; +import { isDesktop, isMobile } from "react-device-detect"; import { useTranslation } from "react-i18next"; import { LuImagePlus, LuRefreshCw, LuScanFace, LuTrash2 } from "react-icons/lu"; import { toast } from "sonner"; @@ -55,11 +55,11 @@ export default function FaceLibrary() { const [page, setPage] = useState(); const [pageToggle, setPageToggle] = useOptimisticState(page, setPage, 100); - const tabsRef = useRef(null); // face data - const { data: faceData, mutate: refreshFaces } = useSWR("faces"); + const { data: faceData, mutate: refreshFaces } = + useSWR("faces"); const faces = useMemo( () => @@ -233,50 +233,13 @@ export default function FaceLibrary() { />
- -
- { - if (value) { - setPageToggle(value); - } - }} - > - {trainImages.length > 0 && ( - <> - -
{t("train.title")}
-
-
|
- - )} - - {Object.values(faces).map((item) => ( - -
- {item} ({faceData[item].length}) -
-
- ))} -
- -
-
+ {selectedFaces?.length > 0 ? (
+ + + {Object.values(faces).map((face) => ( + setPageToggle(face)} + > + {face} ({faceData?.[face].length}) + + ))} + + + ); +} + type TrainingGridProps = { config: FrigateConfig; attemptImages: string[]; @@ -579,7 +622,12 @@ type FaceGridProps = { }; function FaceGrid({ faceImages, pageToggle, onDelete }: FaceGridProps) { return ( -
+
{faceImages.map((image: string) => (
- +
diff --git a/web/src/types/face.ts b/web/src/types/face.ts index e8f426a5b..37521340f 100644 --- a/web/src/types/face.ts +++ b/web/src/types/face.ts @@ -1,3 +1,7 @@ +export type FaceLibraryData = { + [faceName: string]: string[]; +}; + export type RecognizedFaceData = { timestamp: number; eventId: string;