mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-08-02 09:02:15 +03:00
Miscellaneous fixes (#23177)
* add optional onClick to EmptyCard * show EmptyCard in face rec when face library is empty * add loading indicator * add description to camera management pane * Cleanup when use snapshot but can't load snapshot * Migrate files * fix birdseye color distortion when configured aspect ratio is unsupported * Skip processing end for object descriptions * don't crash if stats is null * fix genai roles in migration * frigate+ pane updates - allow users to select a plus model from the select even when one was not previously loaded - always show model summary card - add model filter popover - add restart button totast * fix frigate+ pane layout and buttons to match other settings panes * match button layout in go2rtc settings view * make audio maintainer respond to dynamic config updates * check correct zone name in publish state * fix nested translation extraction for Optional dict and list fields * mypy --------- Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
This commit is contained in:
co-authored by
Nicolas Mowen
parent
c67170aa20
commit
4e90d254ed
@@ -1,5 +1,6 @@
|
||||
import AddFaceIcon from "@/components/icons/AddFaceIcon";
|
||||
import ActivityIndicator from "@/components/indicators/activity-indicator";
|
||||
import { EmptyCard } from "@/components/card/EmptyCard";
|
||||
import CreateFaceWizardDialog from "@/components/overlay/detail/FaceCreateWizardDialog";
|
||||
import TextEntryDialog from "@/components/overlay/dialog/TextEntryDialog";
|
||||
import UploadImageDialog from "@/components/overlay/dialog/UploadImageDialog";
|
||||
@@ -473,7 +474,9 @@ export default function FaceLibrary() {
|
||||
attemptImages={trainImages}
|
||||
faceNames={faces}
|
||||
selectedFaces={selectedFaces}
|
||||
isLoading={faceData === undefined}
|
||||
onClickFaces={onClickFaces}
|
||||
onAddFace={() => setAddFace(true)}
|
||||
onRefresh={refreshFaces}
|
||||
/>
|
||||
) : (
|
||||
@@ -691,7 +694,9 @@ type TrainingGridProps = {
|
||||
attemptImages: string[];
|
||||
faceNames: string[];
|
||||
selectedFaces: string[];
|
||||
isLoading: boolean;
|
||||
onClickFaces: (images: string[], ctrl: boolean) => void;
|
||||
onAddFace: () => void;
|
||||
onRefresh: (
|
||||
data?:
|
||||
| FaceLibraryData
|
||||
@@ -708,7 +713,9 @@ function TrainingGrid({
|
||||
attemptImages,
|
||||
faceNames,
|
||||
selectedFaces,
|
||||
isLoading,
|
||||
onClickFaces,
|
||||
onAddFace,
|
||||
onRefresh,
|
||||
}: TrainingGridProps) {
|
||||
const { t } = useTranslation(["views/faceLibrary"]);
|
||||
@@ -762,6 +769,25 @@ function TrainingGrid({
|
||||
]);
|
||||
|
||||
if (attemptImages.length == 0) {
|
||||
if (isLoading) {
|
||||
return (
|
||||
<ActivityIndicator className="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 items-center text-center" />
|
||||
);
|
||||
}
|
||||
|
||||
if (faceNames.length == 0) {
|
||||
return (
|
||||
<EmptyCard
|
||||
className="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 items-center text-center"
|
||||
icon={<AddFaceIcon className="size-16" />}
|
||||
title={t("train.emptyNoLibrary.title")}
|
||||
description={t("train.emptyNoLibrary.description")}
|
||||
buttonText={t("button.addFace")}
|
||||
onClick={onAddFace}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="absolute left-1/2 top-1/2 flex -translate-x-1/2 -translate-y-1/2 flex-col items-center justify-center text-center">
|
||||
<LuFolderCheck className="size-16" />
|
||||
|
||||
Reference in New Issue
Block a user