Implement delete

This commit is contained in:
Nicolas Mowen 2024-10-15 06:39:08 -06:00
parent 87c8aaf5f7
commit 2442fb8414
3 changed files with 31 additions and 5 deletions

View File

@ -1,4 +1,4 @@
import { useState } from "react"; import { useCallback, useState } from "react";
import TimeAgo from "../dynamic/TimeAgo"; import TimeAgo from "../dynamic/TimeAgo";
import useSWR from "swr"; import useSWR from "swr";
import { FrigateConfig } from "@/types/frigateConfig"; import { FrigateConfig } from "@/types/frigateConfig";
@ -24,15 +24,19 @@ import { FrigatePlusDialog } from "../overlay/dialog/FrigatePlusDialog";
import { Event } from "@/types/event"; import { Event } from "@/types/event";
import { FaArrowsRotate } from "react-icons/fa6"; import { FaArrowsRotate } from "react-icons/fa6";
import { baseUrl } from "@/api/baseUrl"; import { baseUrl } from "@/api/baseUrl";
import axios from "axios";
import { toast } from "sonner";
type SearchThumbnailProps = { type SearchThumbnailProps = {
searchResult: SearchResult; searchResult: SearchResult;
findSimilar: () => void; findSimilar: () => void;
refreshResults: () => void;
}; };
export default function SearchThumbnailFooter({ export default function SearchThumbnailFooter({
searchResult, searchResult,
findSimilar, findSimilar,
refreshResults,
}: SearchThumbnailProps) { }: SearchThumbnailProps) {
const { data: config } = useSWR<FrigateConfig>("config"); const { data: config } = useSWR<FrigateConfig>("config");
@ -40,6 +44,24 @@ export default function SearchThumbnailFooter({
const [showFrigatePlus, setShowFrigatePlus] = useState(false); 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 // date
const formattedDate = useFormattedTimestamp( const formattedDate = useFormattedTimestamp(
@ -124,7 +146,7 @@ export default function SearchThumbnailFooter({
<FaArrowsRotate className="mr-2 size-4" /> <FaArrowsRotate className="mr-2 size-4" />
<span>View object lifecycle</span> <span>View object lifecycle</span>
</DropdownMenuItem> </DropdownMenuItem>
<DropdownMenuItem> <DropdownMenuItem onClick={handleDelete}>
<LuTrash2 className="mr-2 size-4" /> <LuTrash2 className="mr-2 size-4" />
<span>Delete</span> <span>Delete</span>
</DropdownMenuItem> </DropdownMenuItem>

View File

@ -384,6 +384,7 @@ export default function Explore() {
searchFilter={searchFilter} searchFilter={searchFilter}
searchResults={searchResults} searchResults={searchResults}
isLoading={(isLoadingInitialData || isLoadingMore) ?? true} isLoading={(isLoadingInitialData || isLoadingMore) ?? true}
hasMore={!isReachingEnd}
setSearch={setSearch} setSearch={setSearch}
setSimilaritySearch={(search) => { setSimilaritySearch={(search) => {
setSearchFilter({ setSearchFilter({
@ -395,7 +396,7 @@ export default function Explore() {
setSearchFilter={setSearchFilter} setSearchFilter={setSearchFilter}
onUpdateFilter={setSearchFilter} onUpdateFilter={setSearchFilter}
loadMore={loadMore} loadMore={loadMore}
hasMore={!isReachingEnd} refresh={mutate}
/> />
)} )}
</> </>

View File

@ -41,12 +41,13 @@ type SearchViewProps = {
searchFilter?: SearchFilter; searchFilter?: SearchFilter;
searchResults?: SearchResult[]; searchResults?: SearchResult[];
isLoading: boolean; isLoading: boolean;
hasMore: boolean;
setSearch: (search: string) => void; setSearch: (search: string) => void;
setSimilaritySearch: (search: SearchResult) => void; setSimilaritySearch: (search: SearchResult) => void;
setSearchFilter: (filter: SearchFilter) => void; setSearchFilter: (filter: SearchFilter) => void;
onUpdateFilter: (filter: SearchFilter) => void; onUpdateFilter: (filter: SearchFilter) => void;
loadMore: () => void; loadMore: () => void;
hasMore: boolean; refresh: () => void;
}; };
export default function SearchView({ export default function SearchView({
search, search,
@ -54,12 +55,13 @@ export default function SearchView({
searchFilter, searchFilter,
searchResults, searchResults,
isLoading, isLoading,
hasMore,
setSearch, setSearch,
setSimilaritySearch, setSimilaritySearch,
setSearchFilter, setSearchFilter,
onUpdateFilter, onUpdateFilter,
loadMore, loadMore,
hasMore, refresh,
}: SearchViewProps) { }: SearchViewProps) {
const contentRef = useRef<HTMLDivElement | null>(null); const contentRef = useRef<HTMLDivElement | null>(null);
const { data: config } = useSWR<FrigateConfig>("config", { const { data: config } = useSWR<FrigateConfig>("config", {
@ -435,6 +437,7 @@ export default function SearchView({
setSimilaritySearch(value); setSimilaritySearch(value);
} }
}} }}
refreshResults={refresh}
/> />
</div> </div>
</div> </div>