diff options
| author | Factiven <[email protected]> | 2023-12-24 13:03:54 +0700 |
|---|---|---|
| committer | Factiven <[email protected]> | 2023-12-24 13:03:54 +0700 |
| commit | 50a0f0240d7fef133eb5acc1bea2b1168b08e9db (patch) | |
| tree | 307e09e505580415a58d64b5fc3580e9235869f1 /components/search/searchByImage.js | |
| parent | Update README.md (#104) (diff) | |
| download | moopa-50a0f0240d7fef133eb5acc1bea2b1168b08e9db.tar.xz moopa-50a0f0240d7fef133eb5acc1bea2b1168b08e9db.zip | |
migrate to typescript
Diffstat (limited to 'components/search/searchByImage.js')
| -rw-r--r-- | components/search/searchByImage.js | 119 |
1 files changed, 0 insertions, 119 deletions
diff --git a/components/search/searchByImage.js b/components/search/searchByImage.js deleted file mode 100644 index f61418f..0000000 --- a/components/search/searchByImage.js +++ /dev/null @@ -1,119 +0,0 @@ -import { PhotoIcon } from "@heroicons/react/24/outline"; -import { useRouter } from "next/router"; -import React, { useEffect } from "react"; -import { toast } from "sonner"; - -export default function SearchByImage({ - searchPalette = false, - setIsOpen, - setData, - setMedia, -}) { - const router = useRouter(); - - async function findImage(formData) { - const response = new Promise((resolve, reject) => { - fetch("https://api.trace.moe/search?anilistInfo", { - method: "POST", - body: formData, - }) - .then((resp) => { - resolve(resp.json()); - }) - .catch((error) => { - reject(error); - }); - }); - - toast.promise(response, { - loading: "Finding episodes...", - success: `Episodes found!`, - error: "Error", - }); - - response - .then((data) => { - if (data?.result?.length > 0) { - const id = data.result[0].anilist.id; - const datas = data.result.filter((i) => i.anilist.isAdult === false); - if (setData) setData(datas); - if (searchPalette) router.push(`/en/anime/${id}`); - if (setIsOpen) setIsOpen(false); - if (setMedia) setMedia(); - } - }) - .catch((error) => { - console.error("Error:", error); - }); - } - - const handleImageSelect = async (e) => { - const selectedImage = e.target.files[0]; - - if (selectedImage) { - const formData = new FormData(); - formData.append("image", selectedImage); - - try { - await findImage(formData); - } catch (error) { - console.error("An error occurred:", error); - } - } - }; - - useEffect(() => { - // Add a global event listener for the paste event - const handlePaste = async (e) => { - // e.preventDefault(); - - const items = e.clipboardData.items; - - for (let i = 0; i < items.length; i++) { - if (items[i].type.indexOf("image") !== -1) { - const blob = items[i].getAsFile(); - - // Create a FormData object and append the pasted image - const formData = new FormData(); - formData.append("image", blob); - - try { - // Send the pasted image to your API for processing - await findImage(formData); - } catch (error) { - console.error("An error occurred:", error); - } - break; // Stop after finding the first image - } - } - }; - - // Add the event listener to the document - document.addEventListener("paste", handlePaste); - - // Clean up the event listener when the component unmounts - return () => { - document.removeEventListener("paste", handlePaste); - }; - - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - return ( - <div> - <label - className={`${ - searchPalette ? "w-9 h-9" : "py-2 px-2" - } bg-secondary rounded flex justify-center items-center cursor-pointer hover:bg-opacity-75 transition-all duration-100 group`} - > - <PhotoIcon className="w-6 h-6" /> - <input - type="file" - name="image" - onChange={handleImageSelect} - className="hidden" - /> - </label> - </div> - ); -} |