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