From 2442fb8414aaae651fed2f5ac4d7b793fc2d06ff Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Tue, 15 Oct 2024 06:39:08 -0600 Subject: [PATCH] Implement delete --- .../components/card/SearchThumbnailFooter.tsx | 26 +++++++++++++++++-- web/src/pages/Explore.tsx | 3 ++- web/src/views/search/SearchView.tsx | 7 +++-- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/web/src/components/card/SearchThumbnailFooter.tsx b/web/src/components/card/SearchThumbnailFooter.tsx index b01b8b705..c9349cf61 100644 --- a/web/src/components/card/SearchThumbnailFooter.tsx +++ b/web/src/components/card/SearchThumbnailFooter.tsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useCallback, useState } from "react"; import TimeAgo from "../dynamic/TimeAgo"; import useSWR from "swr"; import { FrigateConfig } from "@/types/frigateConfig"; @@ -24,15 +24,19 @@ import { FrigatePlusDialog } from "../overlay/dialog/FrigatePlusDialog"; import { Event } from "@/types/event"; import { FaArrowsRotate } from "react-icons/fa6"; import { baseUrl } from "@/api/baseUrl"; +import axios from "axios"; +import { toast } from "sonner"; type SearchThumbnailProps = { searchResult: SearchResult; findSimilar: () => void; + refreshResults: () => void; }; export default function SearchThumbnailFooter({ searchResult, findSimilar, + refreshResults, }: SearchThumbnailProps) { const { data: config } = useSWR("config"); @@ -40,6 +44,24 @@ export default function SearchThumbnailFooter({ const [showFrigatePlus, setShowFrigatePlus] = useState(false); + const handleDelete = useCallback(() => { + axios + .delete(`events/${searchResult.id}`) + .then((resp) => { + if (resp.status == 200) { + toast.success("Deleted object successfully.", { + position: "top-center", + }); + refreshResults(); + } + }) + .catch(() => { + toast.error("Failed to delete object.", { + position: "top-center", + }); + }); + }, [searchResult, refreshResults]); + // date const formattedDate = useFormattedTimestamp( @@ -124,7 +146,7 @@ export default function SearchThumbnailFooter({ View object lifecycle - + Delete diff --git a/web/src/pages/Explore.tsx b/web/src/pages/Explore.tsx index 816618fe5..ffbef1060 100644 --- a/web/src/pages/Explore.tsx +++ b/web/src/pages/Explore.tsx @@ -384,6 +384,7 @@ export default function Explore() { searchFilter={searchFilter} searchResults={searchResults} isLoading={(isLoadingInitialData || isLoadingMore) ?? true} + hasMore={!isReachingEnd} setSearch={setSearch} setSimilaritySearch={(search) => { setSearchFilter({ @@ -395,7 +396,7 @@ export default function Explore() { setSearchFilter={setSearchFilter} onUpdateFilter={setSearchFilter} loadMore={loadMore} - hasMore={!isReachingEnd} + refresh={mutate} /> )} diff --git a/web/src/views/search/SearchView.tsx b/web/src/views/search/SearchView.tsx index 1df543b2c..f747c80f9 100644 --- a/web/src/views/search/SearchView.tsx +++ b/web/src/views/search/SearchView.tsx @@ -41,12 +41,13 @@ type SearchViewProps = { searchFilter?: SearchFilter; searchResults?: SearchResult[]; isLoading: boolean; + hasMore: boolean; setSearch: (search: string) => void; setSimilaritySearch: (search: SearchResult) => void; setSearchFilter: (filter: SearchFilter) => void; onUpdateFilter: (filter: SearchFilter) => void; loadMore: () => void; - hasMore: boolean; + refresh: () => void; }; export default function SearchView({ search, @@ -54,12 +55,13 @@ export default function SearchView({ searchFilter, searchResults, isLoading, + hasMore, setSearch, setSimilaritySearch, setSearchFilter, onUpdateFilter, loadMore, - hasMore, + refresh, }: SearchViewProps) { const contentRef = useRef(null); const { data: config } = useSWR("config", { @@ -435,6 +437,7 @@ export default function SearchView({ setSimilaritySearch(value); } }} + refreshResults={refresh} />