aboutsummaryrefslogtreecommitdiff
path: root/components/search/searchByImage.js
diff options
context:
space:
mode:
authorFactiven <[email protected]>2023-12-24 13:03:54 +0700
committerFactiven <[email protected]>2023-12-24 13:03:54 +0700
commit50a0f0240d7fef133eb5acc1bea2b1168b08e9db (patch)
tree307e09e505580415a58d64b5fc3580e9235869f1 /components/search/searchByImage.js
parentUpdate README.md (#104) (diff)
downloadmoopa-50a0f0240d7fef133eb5acc1bea2b1168b08e9db.tar.xz
moopa-50a0f0240d7fef133eb5acc1bea2b1168b08e9db.zip
migrate to typescript
Diffstat (limited to 'components/search/searchByImage.js')
-rw-r--r--components/search/searchByImage.js119
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>
- );
-}