From b403ff2b139de724d9d4f656f1cae8933f7ad2f1 Mon Sep 17 00:00:00 2001 From: Factiven Date: Fri, 28 Apr 2023 01:48:47 +0700 Subject: Editor List v0.1 --- components/listEditor.js | 116 +++++++++++++++++++++++++++++++++++++++++++++++ components/useAlert.js | 20 ++++++++ 2 files changed, 136 insertions(+) create mode 100644 components/listEditor.js create mode 100644 components/useAlert.js (limited to 'components') diff --git a/components/listEditor.js b/components/listEditor.js new file mode 100644 index 0000000..35f153a --- /dev/null +++ b/components/listEditor.js @@ -0,0 +1,116 @@ +import { useState } from "react"; +import useAlert from "./useAlert"; +import { motion as m } from "framer-motion"; + +const ListEditor = ({ animeId, session, stats, prg, max }) => { + const { message, type, showAlert } = useAlert(); + const [status, setStatus] = useState(stats ?? ""); + const [progress, setProgress] = useState(prg ?? 0); + + console.log(progress); + + // function success() { + // window.location.reload(); + // } + + const handleSubmit = async (e) => { + e.preventDefault(); + try { + const response = await fetch("https://graphql.anilist.co/", { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${session.user.token}`, + }, + body: JSON.stringify({ + query: ` + mutation ($mediaId: Int!, $progress: Int, $status: MediaListStatus) { + SaveMediaListEntry (mediaId: $mediaId, progress: $progress, status: $status) { + id + mediaId + progress + status + } + } + `, + variables: { + mediaId: animeId, + progress: progress ? parseInt(progress) : null, + status: status || null, + }, + }), + }); + const { data } = await response.json(); + console.log("Saved media list entry", data); + // success(); + showAlert("Media list entry saved", "success"); + } catch (error) { + showAlert("Something went wrong", "error"); + console.error(error); + } + }; + + return ( +
+ {message && ( + + {message} + + )} +
+
+ + +
+
+ + setProgress(e.target.value)} + className="rounded-md px-2 py-1" + min="0" + /> +
+ +
+
+ ); +}; + +export default ListEditor; diff --git a/components/useAlert.js b/components/useAlert.js new file mode 100644 index 0000000..7426096 --- /dev/null +++ b/components/useAlert.js @@ -0,0 +1,20 @@ +import { useState } from "react"; + +const useAlert = () => { + const [message, setMessage] = useState(""); + const [type, setType] = useState(""); + + const showAlert = (message, type = "success") => { + setMessage(message); + setType(type); + setTimeout(() => { + setMessage(""); + setType(""); + window.location.reload(); + }, 5000); + }; + + return { message, type, showAlert }; +}; + +export default useAlert; -- cgit v1.2.3