From fae00d139f6147b7d8d94708e17a163db3e576b8 Mon Sep 17 00:00:00 2001
From: Maria Sauer <mcs22@inf.ufpr.br>
Date: Wed, 3 Jul 2024 11:36:56 -0300
Subject: [PATCH] Issue #109: ADD delete learning object

---
 .../[id]/components/CreateCollectionModal.js  |  4 +-
 src/app/publicar/components/Form.js           | 47 +++++++++------
 src/app/publicar/components/UploadFile.js     |  1 +
 .../recurso/[id]/components/actionButtons.js  | 21 +++++++
 .../recurso/[id]/components/deleteModal.js    | 59 +++++++++++++++++++
 5 files changed, 111 insertions(+), 21 deletions(-)
 create mode 100644 src/app/recurso/[id]/components/deleteModal.js

diff --git a/src/app/perfil/[id]/components/CreateCollectionModal.js b/src/app/perfil/[id]/components/CreateCollectionModal.js
index debb292..3ff3938 100644
--- a/src/app/perfil/[id]/components/CreateCollectionModal.js
+++ b/src/app/perfil/[id]/components/CreateCollectionModal.js
@@ -21,7 +21,7 @@ export default function CreateCollectionModal({ open, onClose, idLogin }) {
         setName(e.target.value)
     }
 
-    const handleSubmit = (e) => {
+     const handleSubmit = async (e) => {
         if (name.length > 150) return;
 
         e.preventDefault();
@@ -40,7 +40,7 @@ export default function CreateCollectionModal({ open, onClose, idLogin }) {
         /**
          * Requisição para criação da coleção
          */
-        mecredApi.post("/collections", payload, {
+        await mecredApi.post("/collections", payload, {
             headers: {
                 "access-token": token,
                 "token-type": "Bearer",
diff --git a/src/app/publicar/components/Form.js b/src/app/publicar/components/Form.js
index eff47fc..5035ffd 100644
--- a/src/app/publicar/components/Form.js
+++ b/src/app/publicar/components/Form.js
@@ -21,25 +21,34 @@ export default function Form() {
   const uid = getStoredValue("uid");
 
   useEffect(() => {
-
-    setUserData(JSON.parse(getStoredValue("user_data")));
-    const url = `/learning_objects/`;
-    const payload = {};
-
-    if (draft) return;
-
-    mecredApi.post(url, payload, {
-      headers: {
-        "access-token": token,
-        "token-type": "Bearer",
-        client: client,
-        uid: uid,
-        Expires: 0,
-      },
-    })
-      .then((response) => (setDraft(response.data)))
-
-  }, [client, token, uid, draft])
+    const fetchData = async () => {
+      try {
+        setUserData(JSON.parse(getStoredValue("user_data")));
+        const url = `/learning_objects/`;
+        const payload = {};
+  
+        if (draft) return;
+  
+        const response = await mecredApi.post(url, payload, {
+          headers: {
+            "access-token": token,
+            "token-type": "Bearer",
+            client: client,
+            uid: uid,
+            Expires: 0,
+          },
+        });
+  
+        setDraft(response.data);
+      } catch (error) {
+        // Tratar erros, se necessário
+        console.error('Erro ao enviar dados:', error);
+      }
+    };
+  
+    fetchData();
+  }, [client, token, uid, draft]);
+  
 
   return (
     <>
diff --git a/src/app/publicar/components/UploadFile.js b/src/app/publicar/components/UploadFile.js
index 80c3bcb..c717278 100644
--- a/src/app/publicar/components/UploadFile.js
+++ b/src/app/publicar/components/UploadFile.js
@@ -49,6 +49,7 @@ export default function UploadFile({ setUploading, draft, file, setFile, attachm
             formData.append('file', fileSlice);
             formData.append('cancel', false);
 
+            console.log(draft)
             response = await mecredApi.post("/learning_objects/" + draft.id + "/chunk", formData,
                 headerConfig()
             )
diff --git a/src/app/recurso/[id]/components/actionButtons.js b/src/app/recurso/[id]/components/actionButtons.js
index 3929375..2a84438 100644
--- a/src/app/recurso/[id]/components/actionButtons.js
+++ b/src/app/recurso/[id]/components/actionButtons.js
@@ -5,6 +5,7 @@ import OpenInNewOutlinedIcon from "@mui/icons-material/OpenInNewOutlined";
 import ShareOutlinedIcon from "@mui/icons-material/ShareOutlined";
 import FavoriteOutlinedIcon from "@mui/icons-material/FavoriteOutlined";
 import FavoriteBorderOutlinedIcon from "@mui/icons-material/FavoriteBorderOutlined";
+import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined';
 import FlagOutlinedIcon from "@mui/icons-material/FlagOutlined";
 import FlagIcon from "@mui/icons-material/Flag";
 import mecredApi from "@/axiosConfig";
@@ -15,6 +16,7 @@ import ShareModal from "../../../components/ShareModal";
 import ReportModal from "./reportModal";
 import CollectModal from "./collectModal";
 import HomologationModal from "./homologationModal";
+import DeleteModal from "./deleteModal";
 
 function ChangeOnHover({ text, textOnHover }) {
   return (
@@ -34,6 +36,7 @@ export default function ActionButtons({ learningObject, setNeedLoginOpen, state
   const [collectOpen, setCollectOpen] = useState(false)
   const [userData, setUserData] = useState("");
   const [submitOpen, setSubmitOpen] = useState(false)
+  const [deleteOpen, setDeleteOpen] = useState(false)
   const [submitted, setSubmitted] = useState(state === "submitted" ? true : false)
 
   const token = getStoredValue("access_token");
@@ -47,6 +50,9 @@ export default function ActionButtons({ learningObject, setNeedLoginOpen, state
     setUserData(data);
   }, [token])
 
+
+  console.log(learningObject, userData)
+
   useEffect(() => {
     if (!learningObject?.id) return;
 
@@ -171,6 +177,20 @@ export default function ActionButtons({ learningObject, setNeedLoginOpen, state
       },
       extraProps: { disabled: reported },
     },
+    userData.id !== learningObject.publisher.id ? null :
+    {
+      name: "Deletar",
+      icon: <DeleteOutlinedIcon />,
+      action: () => {
+        if (!isLoggedIn()) {
+          setNeedLoginOpen(true);
+          return;
+        }
+
+        setDeleteOpen(true);
+      },
+      extraProps: {},
+    }
   ];
 
   let buttonKey = 0;
@@ -188,6 +208,7 @@ export default function ActionButtons({ learningObject, setNeedLoginOpen, state
 
   return (
     <>
+      <DeleteModal open={deleteOpen} onClose={() => setDeleteOpen(false)} idLogin={userData["id"]} resourceId={learningObject.id}  />
       <HomologationModal open={submitOpen} onClose={() => setSubmitOpen(false)} name={learningObject.name} id={learningObject.submission_id} setSubmitted={setSubmitted}/>
       <ShareModal open={shareOpen} onClose={() => setShareOpen(false)} />
       <ReportModal
diff --git a/src/app/recurso/[id]/components/deleteModal.js b/src/app/recurso/[id]/components/deleteModal.js
new file mode 100644
index 0000000..8778072
--- /dev/null
+++ b/src/app/recurso/[id]/components/deleteModal.js
@@ -0,0 +1,59 @@
+import mecredApi from "@/axiosConfig"
+import { Modal } from "@mui/material"
+import { getStoredValue } from "@/app/handlers/localStorageHandler"
+import { useRouter } from "next/navigation";
+
+/**
+ * 
+ * @param {Object} props
+ * @param {Boolean} props.open
+ * @param {Boolean} props.onClose
+ * @param {Number} props.resourceId Id do recurso a ser guardado 
+ * @returns Coleções que o usuário pode guardar tal recurso
+ */
+export default function DeleteModal({ open, onClose, resourceId }) {
+
+    const token = getStoredValue("access_token");
+    const client = getStoredValue("client");
+    const uid = getStoredValue("uid");
+    const router = useRouter()
+
+
+    const deleteResource = async () => {
+        const url = `/learning_objects/${resourceId}`
+        const headers = {headers: {
+            "access-token": token,
+            "token-type": "Bearer",
+            client: client,
+            uid: uid,
+            Expires: 0,
+        }}
+
+        await mecredApi.delete(url, headers)
+        .then(() => router.push("/busca?page=Collection"))
+        .catch((error) => console.error(error))
+
+        router.push("/busca?page=Collection")
+    }
+
+
+    return (
+        <Modal
+            open={open}
+            onClose={onClose}
+            className="grid place-items-center "
+        >
+            <div className="bg-main p-6 rounded-lg">
+                <div className="flex justify-center mb-4">
+
+                <p className="text-main-text text-xl font-bold ">Deletar recurso</p>
+                </div>
+                <p className="text-main-text text-lg ">Tem certeza que deseja deletar esse recurso?</p>
+                <div className="flex justify-end mt-4">
+                    <button onClick={onClose} className="rounded-lg p-3 bg-main hover:bg-main-hover text-main-text mr-1">Voltar ao recurso</button>
+                    <button onClick={() => deleteResource()} className="rounded-lg p-3 bg-secondary hover:bg-secondary-hover text-white">Confirmar</button>
+                </div>
+            </div>
+        </Modal>
+    )
+}
\ No newline at end of file
-- 
GitLab