diff --git a/src/app/collections/page.js b/src/app/colecoes/page.js similarity index 75% rename from src/app/collections/page.js rename to src/app/colecoes/page.js index 88df7d9203d4975cde5f8ddaeb7f016b7f0aed7b..516237f2118b6eeedaef52e3ea1e550ee9802b7c 100644 --- a/src/app/collections/page.js +++ b/src/app/colecoes/page.js @@ -1,10 +1,8 @@ "use client" -import React, { useEffect, useState } from "react"; import Content from "../components/Content"; export default function Collections() { - return ( <Content name={"Coleções"} /> ) diff --git a/src/app/components/About.js b/src/app/components/About.js index 97f239e422fa57ad9d1cf038799a93da43c16c34..3f4ca35c60cd790551833a444d50aa1cc8f5e794 100644 --- a/src/app/components/About.js +++ b/src/app/components/About.js @@ -7,6 +7,15 @@ import SubjectOutlinedIcon from '@mui/icons-material/SubjectOutlined'; export default function AboutComponent() { const [statistics, setStatistics] = useState({}); + useEffect(() => { + mecredApi + .get("/statistics") + .then(({ data }) => { + setStatistics(data); + }) + .catch((error) => console.error(error)); + }, []); + const StatisticInfo = ({ name, data, color, icon }) => { return ( <div className="flex flex-col items-center text-center"> @@ -15,11 +24,11 @@ export default function AboutComponent() { <div className={`h-24 w-24 my-5 mx-10 pt-4 flex justify-center rounded-full ${color["bg"]}`} > - {name === "Recursos Disponíveis" ? - <SubjectOutlinedIcon className="w-16 h-16 text-white"/> : - <Image className={`w-14 h-14 bg-${color}`} style={{ filter: 'invert(100%)' }} src={icon} width={10} height={10} /> + {name === "Recursos Disponíveis" ? + <SubjectOutlinedIcon className="w-16 h-16 text-white" /> : + <Image className={`w-14 h-14 bg-${color}`} style={{ filter: 'invert(100%)' }} alt={name} src={icon} width={10} height={10} /> - } + } </div> <h1 className={`text-xl font-bold ${color["text"]}`}>{data}</h1> <h2 className={`text-sm font-bold ${color["text"]}`}>{name}</h2> @@ -108,12 +117,13 @@ export default function AboutComponent() { return ( <div className="flex max-xl:flex-col max-xl:items-center my-5"> <div> - + <div className={`flex h-24 w-24 my-5 mx-10 rounded-full justify-center ${color}`} > <Image className={`w-14 h-14 mt-4 bg-${color} ${title === "Publicar o seu Recurso" && `rotate-180`}`} style={{ filter: 'invert(100%)' }} + alt={title} src={icon} width={10} height={10} /> @@ -171,15 +181,6 @@ export default function AboutComponent() { ); }; - useEffect(() => { - mecredApi - .get("/statistics") - .then(({ data }) => { - setStatistics(data); - }) - .catch((error) => console.log(error)); - }, []); - return ( <div className="flex flex-col text-center items-center m-10"> <div className="max-xl:hidden"> diff --git a/src/app/components/Actions.js b/src/app/components/Actions.js deleted file mode 100644 index fc9edfdfa23adba5da49461cf81d6abc43e46a2e..0000000000000000000000000000000000000000 --- a/src/app/components/Actions.js +++ /dev/null @@ -1,7 +0,0 @@ -// 'use server' - -// import { redirect } from 'next/navigation' - -// export async function navigate(data) { -// redirect(`/${data}`) -// } \ No newline at end of file diff --git a/src/app/components/Cards.js b/src/app/components/Cards.js index 27d611658280d6ca382d2d4debdb6936493eedc8..516a8cbb721bc776c9c736283ac51f61a63be0c3 100644 --- a/src/app/components/Cards.js +++ b/src/app/components/Cards.js @@ -5,26 +5,20 @@ import CardMedia from "@mui/material/CardMedia"; import Avatar from "@mui/material/Avatar"; import Typography from "@mui/material/Typography"; import Link from "next/link"; -import { useRef, useEffect } from "react"; - +/* +props do card: +id: id do recurso +title: titulo do recurso +author: autor do recurso +avatar: link avatar autor +image: link imagem recurso +shadow: sombra caso o card tenha sombra, exemplo: recursos do mec +updated_at: data da ultima modificaçao do recurso +*/ export default function Cards(props) { - /* - props do card: - id: id do recurso - title: titulo do recurso - author: autor do recurso - avatar: link avatar autor - image: link imagem recurso - shadow: sombra caso o card tenha sombra, exemplo: recursos do mec - updated_at: data da ultima modificaçao do recurso - */ - - const cardRef = useRef(false); - - const getDefaultThumbnail = (type) => { let thumbnail_url; @@ -77,56 +71,50 @@ export default function Cards(props) { return <p> há {ano} {ano === 1 ? "ano" : "anos"} </p> else if (((mes = Math.floor(dia / 31)) > 0)) return <p> há {mes} {mes === 1 ? "mês" : "meses"}</p> - + if (dia === 0) return <p>hoje</p> return <p>há {dia} {dia === 1 ? "dia" : "dias"}</p> } - - - - - - return ( - <Card - className={"active:bg-black-hover active:rounded-3xl transition ease-in-out items-center "} + <Card + className={"active:bg-black-hover active:rounded-3xl transition ease-in-out items-center "} + sx={{ + display: "flex", + flexDirection: props?.horizontal ? "row" : "column", + width: props?.width ?? 400, + height: props?.height ?? "auto", + backgroundColor: "transparent", + boxShadow: "none", + padding: "10px", + }} + component={Link} + href={`/recurso/${props["id"]}`} + > + + <CardMedia + className="hover:scale-105 z-1 hover:relative z-0 border border-gray-400 transition-transform rounded-xl flex-shrink-0 aspect-video" sx={{ - display: "flex", - flexDirection: props?.horizontal ? "row" : "column", - width: props?.width ?? 400, - height: props?.height ?? "auto", - backgroundColor: "transparent", - boxShadow: "none", - padding: "10px", + width: props?.thumbWidth ?? 400, + height: props?.thumbHeight ?? 225, + boxShadow: props?.shadow ?? "none," }} - component={Link} - href={`/recurso/${props["id"]}`} - > - - <CardMedia - className="hover:scale-105 z-1 hover:relative z-0 border border-gray-400 transition-transform rounded-xl flex-shrink-0 aspect-video" - sx={{ - width: props?.thumbWidth ?? 400, - height: props?.thumbHeight ?? 225, - boxShadow: props?.shadow ?? "none," - }} - component="img" - image={ - props["image"] === null - ? getDefaultThumbnail(props["type"]) - : `https://api.portalmec.c3sl.ufpr.br${props["image"]}` - } - alt="img" - /> - - <CardHeader - className="self-start flex-shrink" - avatar={props?.noAvatar ? null : - <Link href={`/perfil/${props["authorId"]}`}> + component="img" + image={ + props["image"] === null + ? getDefaultThumbnail(props["type"]) + : `https://api.portalmec.c3sl.ufpr.br${props["image"]}` + } + alt="img" + /> + + <CardHeader + className="self-start flex-shrink" + avatar={props?.noAvatar ? null : + <Link href={`/perfil/${props["authorId"]}`}> <Avatar src={`https://api.portalmec.c3sl.ufpr.br/${props["avatar"]}`} alt={props["author"]} @@ -137,33 +125,33 @@ export default function Cards(props) { marginTop: 0, bgcolor: "#00bacc", }} - /> - </Link> - } - title={ - <Typography variant="body2" color="" className="line-clamp-2 "> - {props["title"]} - </Typography> - } - subheader={ - <> - <Typography - variant="body2" - color="text.secondary" - className="line-clamp-1" - > - {props["author"]} - </Typography> - <Typography - variant="body3" - color="text.secondary" - className="line-clamp-1" - > - {timeFunction(props.updated_at)} - </Typography> - </> - } - /> - </Card> + /> + </Link> + } + title={ + <Typography variant="body2" color="" className="line-clamp-2 "> + {props["title"]} + </Typography> + } + subheader={ + <> + <Typography + variant="body2" + color="text.secondary" + className="line-clamp-1" + > + {props["author"]} + </Typography> + <Typography + variant="body3" + color="text.secondary" + className="line-clamp-1" + > + {timeFunction(props.updated_at)} + </Typography> + </> + } + /> + </Card> ); } diff --git a/src/app/components/Content.js b/src/app/components/Content.js index 255cc5cddd85b06ba08fddde18a13fde5a657c2b..452f8abe9cf6e21b78a657ccec8be73bd7a66502 100644 --- a/src/app/components/Content.js +++ b/src/app/components/Content.js @@ -25,23 +25,6 @@ export default function Content({ name }) { const [query, setQuery] = useState("*"); const [filterSubject, setFilterSubject] = useState(""); - const [filter, setFilter] = useState( - { - "type": tradutor(name), - "order":"publicationdesc", - "formats": null, - "subjects": null, - "educationalStages": null, - "languages": null, - "query": "*", - - } - ) - - - - - return ( <Overlay filterSubject={filterSubject} setFilterSubject={setFilterSubject} setQuery={setQuery} setSelectFilter={setSelectFilter} selectFilter={selectFilter} setTitlePage={setTitlePage} setNewSize={setNewSize} newSize={newSize}> {name != "MEC" ? diff --git a/src/app/components/DownloadButton.js b/src/app/components/DownloadButton.js index 054863bff0a1b3ad5c702b5a344606a7a216c2ed..8c46b5ceffc7e0ace7f731ce479b97f9d97e224c 100644 --- a/src/app/components/DownloadButton.js +++ b/src/app/components/DownloadButton.js @@ -2,7 +2,7 @@ import * as React from 'react'; import Button from '@mui/material/Button'; import DownloadIcon from '@mui/icons-material/Download'; -export default function DownloadButton({id, objects}) { +export default function DownloadButton({ id, objects }) { const handleDowloadCollection = (e) => { e.preventDefault(); @@ -26,7 +26,7 @@ export default function DownloadButton({id, objects}) { // Downloadable objects will get zipped and sent for download window.location = `https://api.portalmec.c3sl.ufpr.br/zipper/${id}`; } -} + } return ( @@ -35,7 +35,7 @@ export default function DownloadButton({id, objects}) { className=" border-secondary w-32 rounded-xl hover:bg-secondary-hover bg-secondary text-white max-md:my-3 font-bold normal-case flex " variant="outlined" onClick={handleDowloadCollection} - startIcon={<DownloadIcon className='text-white'/>}> + startIcon={<DownloadIcon className='text-white' />}> Baixar </Button> diff --git a/src/app/components/FiltersModal.js b/src/app/components/FiltersModal.js index 7d24522758d34346c4358154cddc4f189dea1aca..00e17f75574e4699a33c6dba3c29e8b6efdb3f8e 100644 --- a/src/app/components/FiltersModal.js +++ b/src/app/components/FiltersModal.js @@ -1,24 +1,11 @@ import * as React from 'react'; import { useState } from 'react'; import Button from '@mui/material/Button'; -import Typography from '@mui/material/Typography'; import Modal from '@mui/material/Modal'; import TuneIcon from '@mui/icons-material/Tune'; import { Divider } from '@mui/material'; import CloseIcon from '@mui/icons-material/Close'; -// const style = { -// position: 'absolute', -// top: '50%', -// left: '50%', -// transform: 'translate(-50%, -50%)', -// width: 400, -// bgcolor: 'background.paper', -// border: '2px solid #000', -// boxShadow: 24, -// p: 4, -// }; - export default function FiltersModal() { const [open, setOpen] = useState(false); const handleOpen = () => setOpen(true); @@ -35,14 +22,14 @@ export default function FiltersModal() { className='grid place-items-center ' > <div className=' flex flex-col w-[60%] h-[70%] p-6 bg-white overflow-x-auto rounded-lg'> - <div className='flex justify-between'> - <p className=' text-2xl font-bold text-text-filter pb-4 '> - Filtros de Pesquisa - </p> - <CloseIcon onClick={handleClose} sx={{ color: "#6c8080", fontSize: "35px" }} /> - </div> - <Divider /> - + <div className='flex justify-between'> + <p className=' text-2xl font-bold text-text-filter pb-4 '> + Filtros de Pesquisa + </p> + <CloseIcon onClick={handleClose} sx={{ color: "#6c8080", fontSize: "35px" }} /> + </div> + <Divider /> + </div> </Modal> </div> diff --git a/src/app/components/GroupButtonsFilters.js b/src/app/components/GroupButtonsFilters.js index c5c5bdb05fe52189beacd5fc8cb8a91aa1e01bb3..59789301cf49c0985247bf02ca5d1de60a4bb852 100644 --- a/src/app/components/GroupButtonsFilters.js +++ b/src/app/components/GroupButtonsFilters.js @@ -1,6 +1,4 @@ import { Button } from "@mui/material"; -import FiltersModal from "./FiltersModal"; -import { Style } from "@mui/icons-material"; const atalhos = [ { @@ -37,7 +35,7 @@ const atalhos = [ export default function GroupButtonsFilters({ setTitlePage, setSelectFilter, selectFilter }) { return ( <div className="flex justify-between pb-5 px-4 overflow-x-scroll no-scrollbar"> - <div className="flex "> + <div className="flex "> {atalhos.map((item, index) => { return ( <div key={index}> @@ -52,9 +50,6 @@ export default function GroupButtonsFilters({ setTitlePage, setSelectFilter, sel ) })} </div > - {/* <> - <FiltersModal/> - </> */} </div> ); } \ No newline at end of file diff --git a/src/app/components/GroupCardsCollections.js b/src/app/components/GroupCardsCollections.js index ba1565ba18e95bf137d6a4eac508fedf98a527bd..91e89fb4cf007560621334f7a096280371bc24be 100644 --- a/src/app/components/GroupCardsCollections.js +++ b/src/app/components/GroupCardsCollections.js @@ -1,39 +1,27 @@ "use client"; -import { use, useEffect, useLayoutEffect, useState } from "react"; +import { useEffect, useState } from "react"; import Cards from "./Cards"; -import mecredApi from "@/axiosConfig"; -import { Button, Divider } from "@mui/material"; -import Link from "next/link"; +import { Button } from "@mui/material"; export default function GroupCardsCollections({ data, cardsPerRow, boxShadow }) { const [expanded, setExpanded] = useState(false); const [showButton, setShowButton] = useState(false); const handleResize = (data) => { - setShowButton(data.length > cardsPerRow); + setShowButton(data.length > cardsPerRow); }; const toggleContent = () => { setExpanded(!expanded); }; - - useEffect(() => { handleResize(data); }), [cardsPerRow]; - return ( <div className="flex flex-col"> <div className="mx-1 flex flex-col"> - <div className="ml-6 inline-block"> - {/* <h1 className="text-xl font-bold mb-4 text-gray-600"> - <Link href="/perfil" className="pl-1"> - {title} - </Link> - </h1> */} - </div> <div id="contentSize" className={`flex content flex-wrap max-sm:justify-center max-sm:ml-0 md:ml-0 ml-8 ${expanded ? "" : "overflow-y-hidden h-[340px]"}`}> {data.length !== 0 ? data.map((item, index) => { @@ -48,15 +36,15 @@ export default function GroupCardsCollections({ data, cardsPerRow, boxShadow }) image={item["collectionable"]["thumbnail"]} shadow={boxShadow} updated_at={item["collectionable"]["updated_at"]} - + /> ); - }) - : - <div className="flex flex-col justify-center w-full items-center"> - <p className="text-main-text text-xl font-bold">Coleção Vazia</p> - <p className="text-main-text text-sm font-bold">Adicione novos recursos!</p> - </div> + }) + : + <div className="flex flex-col justify-center w-full items-center"> + <p className="text-main-text text-xl font-bold">Coleção Vazia</p> + <p className="text-main-text text-sm font-bold">Adicione novos recursos!</p> + </div> } </div> </div> @@ -72,7 +60,7 @@ export default function GroupCardsCollections({ data, cardsPerRow, boxShadow }) > <p className="hover:bg-main px-4 text-gray-600 text-lg rounded-md"> - {expanded ? "Ver menos..." : "Ver mais..."} + {expanded ? "Ver menos..." : "Ver mais..."} </p> </Button> ) : null} diff --git a/src/app/components/GroupCardsLearningObjects.js b/src/app/components/GroupCardsLearningObjects.js index b4a87da54ebf90cd9c8b5a3a7b37d4c40e5fed13..0994785b5434c2d75e69b480117c7ccd74faffcb 100644 --- a/src/app/components/GroupCardsLearningObjects.js +++ b/src/app/components/GroupCardsLearningObjects.js @@ -1,11 +1,10 @@ "use client"; -import { useCallback, useEffect, useLayoutEffect, useState } from "react"; +import { useEffect, useState } from "react"; import Cards from "./Cards"; import mecredApi from "@/axiosConfig"; import { Button, Divider } from "@mui/material"; -import Link from "next/link"; -export default function GroupCardsLearningObjects({title, cardsPerRow, url}) { +export default function GroupCardsLearningObjects({ title, cardsPerRow, url }) { const [expanded, setExpanded] = useState(false); const [showButton, setShowButton] = useState(false); const [learningObjects, setLearningObjects] = useState([]); @@ -30,7 +29,6 @@ export default function GroupCardsLearningObjects({title, cardsPerRow, url}) { setExpanded(!expanded); }; - return ( <div className="flex flex-col"> <div className=" mx-1 mt-2 flex flex-col "> @@ -39,7 +37,7 @@ export default function GroupCardsLearningObjects({title, cardsPerRow, url}) { Recursos mais {title} </h1> </div> - <div className={`flex content flex-wrap justify-center ${expanded ? "" : "overflow-y-hidden h-[300px]"}`}> + <div className={`flex content flex-wrap justify-center ${expanded ? "" : "overflow-y-hidden h-[300px]"}`}> {learningObjects.map((item, index) => { return ( <Cards @@ -58,17 +56,17 @@ export default function GroupCardsLearningObjects({title, cardsPerRow, url}) { </div> <Divider className="mr-8 max-md:mr-0 "> {showButton ? - ( - <Button - fullWidth - disableElevation - variant="outlined" - className="mt-2 border-secondary rounded-xl hover:border-secondary-hover text-gray-700 normal-case flex gap-2" - onClick={toggleContent} - > - {expanded ? "Fechar" : "Carregar mais"} - </Button> - ) : null} + ( + <Button + fullWidth + disableElevation + variant="outlined" + className="mt-2 border-secondary rounded-xl hover:border-secondary-hover text-gray-700 normal-case flex gap-2" + onClick={toggleContent} + > + {expanded ? "Fechar" : "Carregar mais"} + </Button> + ) : null} </Divider> </div> ); diff --git a/src/app/components/Header.js b/src/app/components/Header.js index 675ea0630381306f01fcf68f13d15ab0688ab3f6..1187d1e06d9f579a1c6c64194406bbb22fa11067 100644 --- a/src/app/components/Header.js +++ b/src/app/components/Header.js @@ -5,7 +5,6 @@ import Image from "next/image"; import Link from "next/link"; import Box from "@mui/material/Box"; import Menu from "@mui/material/Menu"; -import Badge from "@mui/material/Badge"; import Button from "@mui/material/Button"; import AppBar from "@mui/material/AppBar"; import Toolbar from "@mui/material/Toolbar"; @@ -60,7 +59,7 @@ export default function Header({ setQuery, handleOpenMenu }) { <p className="ml-2">Filtros</p> </MenuItem> <MenuItem> - <Link href="/submit"> + <Link href="/publicar"> <PublishIcon className="text-secondary" /> <p className="ml-2">Pubicar</p> </Link> @@ -99,10 +98,8 @@ export default function Header({ setQuery, handleOpenMenu }) { </div> <div className="flex w-[80%] justify-center max-lg:hidden "> <SearchComponent setQuery={setQuery} sizeWindow={true} /> - <Box sx={{ display: { sm: "none", lg: "flex" } }}> - {/* <Button className="bg-secondary hover:bg-secondary-hover text-white rounded-lg normal-case h-7 mt-0.5 p-4 px-6 ml-10 font-bold ">Filtros</Button> */} - <Link href="/submit"> + <Link href="/publicar"> <Button className="bg-orange hover:bg-orange-hover text-white rounded-lg normal-case h-7 p-4 mt-0.5 ml-8 font-bold "> +Publicar{" "} </Button> @@ -111,17 +108,6 @@ export default function Header({ setQuery, handleOpenMenu }) { </div> <Box sx={{ display: { xs: "none", lg: "flex" } }}> - {/* <IconButton - size="large" - aria-label="show 17 new notifications" - color="inherit" - className="left-2 " - > - <Badge> - <NotificationsActiveSharpIcon className="text-slate-400 text-3xl " /> - </Badge> - </IconButton> */} - <AccountMenu isOpen={openMenuProfile} /> </Box> <Box sx={{ display: { sm: "flex", lg: "none" } }}> diff --git a/src/app/components/HomePage.js b/src/app/components/HomePage.js deleted file mode 100644 index a10d466a3337e127f004d74f6774b0e7dc8ea2b4..0000000000000000000000000000000000000000 --- a/src/app/components/HomePage.js +++ /dev/null @@ -1,11 +0,0 @@ -"use client" -import Overlay from "./Overlay"; - - -export default function HomePage() { - - return ( - <Overlay /> - - ) -} diff --git a/src/app/components/InfiniteScroll.js b/src/app/components/InfiniteScroll.js index 5316be38e4cbee30e76d8749ce4eec1370331cc5..a40499fe081fabe100490841afe25e64ea1cdf5c 100644 --- a/src/app/components/InfiniteScroll.js +++ b/src/app/components/InfiniteScroll.js @@ -1,4 +1,4 @@ -import React, { useState, useEffect, useCallback, Suspense } from "react"; +import React, { useState, useEffect, useCallback } from "react"; import InfiniteScrollCards from "./InfiniteScrollCards"; import mecredApi from "@/axiosConfig"; import Loading from "./Loading"; @@ -9,7 +9,6 @@ export default function InfiniteScroll({ filterSubject, subject, query, type, fi const [page, setPage] = useState(0); const [isScroll, setIsScroll] = useState(false) - const fetchData = useCallback(async (page) => { setIsLoading(true); @@ -34,7 +33,7 @@ export default function InfiniteScroll({ filterSubject, subject, query, type, fi setPage(() => page + 1); } catch (error) { - console.log(error); + console.error(error); } finally { setIsLoading(false); setIsScroll(false) @@ -52,7 +51,6 @@ export default function InfiniteScroll({ filterSubject, subject, query, type, fi fetchData(page); }, [fetchData, isLoading, page]); - useEffect(() => { fetchData(0).then(() => { window.scrollTo(0, 0) }); setIsScroll(true); @@ -63,20 +61,14 @@ export default function InfiniteScroll({ filterSubject, subject, query, type, fi return () => window.removeEventListener("scroll", handleScroll); }, [isLoading, handleScroll]); - - - return ( <> - <div className={`${isScroll ? " blur-sm" : ""}`}> <InfiniteScrollCards setNewSize={setNewSize} newSize={newSize} data={items} type={type} /> </div> - {isLoading && <Loading type={type} scroll={isScroll} /> } - </> ); diff --git a/src/app/components/InfiniteScrollCards.js b/src/app/components/InfiniteScrollCards.js index c01144b3d0ea59a8ff31ed939d38a0f9ccc11259..fc231f70263a478cfdf5400eac5819b3422f70f4 100644 --- a/src/app/components/InfiniteScrollCards.js +++ b/src/app/components/InfiniteScrollCards.js @@ -9,12 +9,10 @@ export default function InfiniteScrollCards({ data, type = "Collection", setNewS const [cardsPerRow, setCardsPerRow] = useState(0); const [mecCollection, setMecCollection] = useState([]); - const getWidth = async () => { return document.getElementById('contentSize').scrollWidth; }; - useEffect(() => { getWidth().then((res) => { setCardsPerRow(Math.floor(res / 300)); @@ -23,28 +21,22 @@ export default function InfiniteScrollCards({ data, type = "Collection", setNewS }, [newSize, setNewSize]); const fetchCollections = async () => { - try { const { data } = await mecredApi .get("/users/35342/collections"); setMecCollection(data); } catch (error) { - console.log(error); + console.error(error); } - }; useEffect(() => { fetchCollections(); }, []); - - - const timeFunction = (updated_time) => { let data = new Date(updated_time) let dataAtual = new Date(); - let time = dataAtual.getTime() - data.getTime(); let dia = Math.floor(time / (1000 * 60 * 60 * 24)); let ano; @@ -58,22 +50,17 @@ export default function InfiniteScrollCards({ data, type = "Collection", setNewS if (dia === 0) return <span className="text-xs ">, hoje</span> return <span className="text-xs ">, há {dia} {dia === 1 ? "dia" : "dias"}</span> - } - - function returnContent(type) { switch (type) { case "Collection": return ( - <div className="flex flex-col"> {data.map((item, index) => ( <Fragment key={item['id']} > <div className="bg-white mb-10 pt-6 pl-4 mr-6 rounded-2xl"> <p className="text-2xl max-md:text-center font-bold mb-0 text-text-color mr-2 inline-block">{item['name']}</p> - <div className="flex flex-wrap justify-between mr-8 max-md:flex-col "> <p className=" ml-1 max-md:text-center text-gray-500 mb-0"> por <Link href={"/perfil/" + item["owner"]["id"]}> {item["owner"]["name"]}</Link>{timeFunction(item["updated_at"])} @@ -87,8 +74,6 @@ export default function InfiniteScrollCards({ data, type = "Collection", setNewS </Fragment> ))} </div> - - ) case "LearningObject": @@ -113,17 +98,14 @@ export default function InfiniteScrollCards({ data, type = "Collection", setNewS case "MEC": return ( <div className="flex flex-col"> - <p className="text-2xl max-sm:text-center font-bold mb-0 text-text-color ml-4 inline-block">Coleções Recomendadas pelo MEC</p> <Link href="/perfil/35342"> <p className=" ml-5 max-sm:text-center text-gray-500 mb-4" > por Ministério da Educação</p> </Link> - {mecCollection.map((item, index) => { return ( <Fragment key={item['id']}> <div className="bg-white mb-10 pt-4 pl-4 mr-8 rounded-2xl"> - <div className="flex flex-wrap justify-between mr-8 max-md:justify-center "> <p className="text-2xl max-sm:text-center font-bold mb-1 text-text-color ml-6 inline-block">{item["name"]}</p> <DownloadButton id={item['id']} objects={item['collection_items']} /> @@ -133,17 +115,11 @@ export default function InfiniteScrollCards({ data, type = "Collection", setNewS </Fragment> ) })} - - - </div> - ) - } } - return ( <div id="contentSize"> {returnContent(type)} diff --git a/src/app/components/Loading.js b/src/app/components/Loading.js index ebee60d5cd199709dc2fbba9752681942b54b402..5af5e91c21961c027eef54f50e71f048bf63b38f 100644 --- a/src/app/components/Loading.js +++ b/src/app/components/Loading.js @@ -1,11 +1,6 @@ - - - -export default function Loading({scroll }) { - +export default function Loading({ scroll }) { return ( <> - <div className={`text-center ${scroll ? "fixed w-screen left-[0%] top-[40%] " : "relative mb-8"} `}> <div role="status"> <svg aria-hidden="true" className="z-[9999] inline w-12 h-12 text-gray-200 animate-spin dark:text-gray-600 fill-orange" viewBox="0 0 100 101" fill="none" xmlns="http://www.w3.org/2000/svg"> @@ -15,7 +10,6 @@ export default function Loading({scroll }) { <span className="sr-only">Loading...</span> </div> </div> - </> ) } \ No newline at end of file diff --git a/src/app/components/MenuProfile.js b/src/app/components/MenuProfile.js index c55e0509b926f2debc1e04c0f1becd3074a54443..8ddcc3e203989719b88af2e2e402ef08791be37b 100644 --- a/src/app/components/MenuProfile.js +++ b/src/app/components/MenuProfile.js @@ -5,56 +5,22 @@ import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; import Divider from "@mui/material/Divider"; import IconButton from "@mui/material/IconButton"; -import Settings from "@mui/icons-material/Settings"; import Logout from "@mui/icons-material/Logout"; import { useState, useEffect } from "react"; import Link from "next/link"; -import ShieldIcon from "@mui/icons-material/Shield"; -import ContactSupportIcon from "@mui/icons-material/ContactSupport"; -import AccessibilityIcon from "@mui/icons-material/Accessibility"; -import FeedbackIcon from "@mui/icons-material/Feedback"; import { getStoredValue, removeFromLocalStorage, } from "../handlers/localStorageHandler"; -import { isLoggedIn, useLoginBarrier } from "../handlers/loginHandler"; +import { isLoggedIn } from "../handlers/loginHandler"; const items = []; -// const items = [ -// { -// href: '/configuracoes', -// icon: Settings, -// label: 'Configurações' -// }, -// { -// href: '/privacidade', -// icon: ShieldIcon, -// label: 'Privacidade' -// }, -// { -// href: '/ajuda', -// icon: ContactSupportIcon, -// label: 'Ajuda e suporte' -// }, -// { -// href: '/tela', -// icon: AccessibilityIcon, -// label: 'Tela e Acessibilidade' -// }, -// { -// href: '/feedback', -// icon: FeedbackIcon, -// label: 'Dar Feedback' -// } -// ]; export default function AccountMenu() { const [anchorEl, setAnchorEl] = useState(null); - const [authenticated, setAuthenticated] = useState(false); const [userData, setUserData] = useState({}); const open = Boolean(anchorEl); const [id, setId] = useState(null); - const loginBarrier = useLoginBarrier(); const [logged, setLogged] = useState(false); useEffect(() => { @@ -74,7 +40,6 @@ export default function AccountMenu() { }; const handleLogout = () => { - setAuthenticated(false); removeFromLocalStorage("access_token"); removeFromLocalStorage("user_data"); removeFromLocalStorage("uid"); @@ -87,7 +52,6 @@ export default function AccountMenu() { useEffect(() => { let token = getStoredValue("access_token"); if (token) { - setAuthenticated(true); let user = getStoredValue("user_data"); setUserData(JSON.parse(user)); } @@ -121,7 +85,7 @@ export default function AccountMenu() { </IconButton> </Box> ) : ( - <Link href={"/login"}> + <Link href={"/entrar"}> {" "} <IconButton size="large"> <Avatar sx={{ width: 38, height: 38 }} className="mt-1" /> @@ -150,7 +114,6 @@ export default function AccountMenu() { </Link> </MenuItem> <Divider /> - {items.map((item, index) => { return ( <MenuItem key={index} onClick={handleClose}> diff --git a/src/app/components/SearchComponent.js b/src/app/components/SearchComponent.js index ba7142966253d350463e3b99c46305927b4d1ee2..4f5793924486e66e8bcbe964fb6550275646a8ee 100644 --- a/src/app/components/SearchComponent.js +++ b/src/app/components/SearchComponent.js @@ -1,7 +1,7 @@ import { styled, alpha } from '@mui/material/styles'; import InputBase from '@mui/material/InputBase'; import SearchIcon from '@mui/icons-material/Search'; -import { useRouter, usePathname } from 'next/navigation'; +import { usePathname } from 'next/navigation'; import { useState } from 'react'; import { Button } from '@mui/material'; @@ -45,20 +45,16 @@ const StyledInputBase = styled(InputBase)(({ theme }) => ({ export default function SearchComponent({ setQuery, sizeWindow }) { const pathname = usePathname(); - const router = useRouter(); const [input, setInput] = useState(""); const handleSubmit = (e) => { - if (pathname !== "/collections" && pathname !== "/learningObjects") { - // NAO FUNCIONA ROUTER.PUSH - } else { + if (pathname === "/colecoes" || pathname === "/recursos") { e.preventDefault(); input === "" ? setQuery("*") : - setQuery(input); + setQuery(input); } } - return sizeWindow ? ( <form onSubmit={handleSubmit} className=" w-[50%] max-sm:w-[80%] "> <Search className="flex w-[90%] align-center row-reverse bg-white rounded-xl mr-4 "> diff --git a/src/app/components/shareModal.js b/src/app/components/ShareModal.js similarity index 99% rename from src/app/components/shareModal.js rename to src/app/components/ShareModal.js index 186632900f305b7b21a12fd47645e105f0c54260..46d45af0c386b2a1e93f9e58f792b5f75c8c0ac9 100644 --- a/src/app/components/shareModal.js +++ b/src/app/components/ShareModal.js @@ -81,10 +81,8 @@ export default function ShareModal({ open, onClose }) { <span>Copiar link</span> </Button> </div> - </div> <div className="flex justify-center"> - <button className="text-sm p-2 w-[20%] text-main-text border-main rounded-lg normal-case h-9 font-bold bg-main hover:bg-main-hover" onClick={() => onClose()} diff --git a/src/app/components/SideBar.js b/src/app/components/SideBar.js index 3879bd8eb5d35873849099ea648238ecbd394e88..645cca15e7455bc9b4557d87d859c8a97a3a4388 100644 --- a/src/app/components/SideBar.js +++ b/src/app/components/SideBar.js @@ -20,17 +20,17 @@ const acessoRapido = [ { title: "Coleções", icon: CollectionsBookmarkIcon, - href: "/collections", + href: "/colecoes", }, { title: "Recursos", icon: SubjectIcon, - href: "/learningObjects", + href: "/recursos", }, { title: "Sobre", icon: HelpIcon, - href: "/about", + href: "/sobre", }, ]; @@ -58,28 +58,26 @@ export default function SideBar({ setFilterSubject, openMenu }) { setSubjects(data); setSelectedSubject(data.map(() => false)); }) - .catch((error) => console.log(error)); + .catch((error) => console.error(error)); }, []); const handleFilterSubject = (index) => { - if (pathname === "/collections" || pathname === "/learningObjects") { + if (pathname === "/colecoes" || pathname === "/recursos") { const copySelectSubject = [...selectedSubject]; copySelectSubject[index] = !copySelectSubject[index]; setFilterSubject(handleStringSubject(copySelectSubject)); - setSelectedSubject(copySelectSubject); } else { - router.push("/collections"); + router.push("/colecoes"); } }; return ( <> <div - className={`top-14 sm:top-[60px] start-0 overflow-y-auto pb-24 bg-main pl-8 w-64 text-white fixed h-full z-40 ease-in-out duration-300 ${ - !openMenu ? "-translate-x-full " : "translate-x-0" - }`} + className={`top-14 sm:top-[60px] start-0 overflow-y-auto pb-24 bg-main pl-8 w-64 text-white fixed h-full z-40 ease-in-out duration-300 ${!openMenu ? "-translate-x-full " : "translate-x-0" + }`} > <div className="pt-4"> <a className="text-xl font-bold text-gray-500 ">Acesso Rápido</a> @@ -89,18 +87,16 @@ export default function SideBar({ setFilterSubject, openMenu }) { <Link href={item.href} key={index} - className={` pr-8 cursor-pointer rounded-xl pl-2 pb-1 pt-1 max-w-52 mb-1 ${ - pathname === item.href - ? "bg-secondary text-white hover:bg-secondary-hover" - : " hover:bg-slate-300" - } `} + className={` pr-8 cursor-pointer rounded-xl pl-2 pb-1 pt-1 max-w-52 mb-1 ${pathname === item.href + ? "bg-secondary text-white hover:bg-secondary-hover" + : " hover:bg-slate-300" + } `} > <item.icon - className={` cursor-pointer ${ - pathname === item.href - ? " text-white hover:bg-secondary-hover" - : "hover:bg-slate-300 text-gray-color" - }`} + className={` cursor-pointer ${pathname === item.href + ? " text-white hover:bg-secondary-hover" + : "hover:bg-slate-300 text-gray-color" + }`} />{" "} {item.title} </Link> @@ -110,33 +106,30 @@ export default function SideBar({ setFilterSubject, openMenu }) { </div> <div - className={`pt-5 ${ - pathname !== "/learningObjects" - ? "hidden" - : "" - }`} + className={`pt-5 ${pathname !== "/recursos" + ? "hidden" + : "" + }`} > <a className="text-xl font-bold text-gray-500 ">Grandes Áreas</a> <div className="flex flex-col text-gray-500 mt-2"> {subjects.map((item, index) => { return ( <a - className={` cursor-pointer rounded-xl pl-2 mb-1 p-[1px] max-w-52 ${ - selectedSubject[index] - ? "bg-secondary text-main hover:bg-secondary-hover" - : " hover:bg-slate-300" - }`} + className={` cursor-pointer rounded-xl pl-2 mb-1 p-[1px] max-w-52 ${selectedSubject[index] + ? "bg-secondary text-main hover:bg-secondary-hover" + : " hover:bg-slate-300" + }`} key={index} onClick={() => { handleFilterSubject(index); }} > <LocalLibraryIcon - className={` cursor-pointer mt-1 ${ - selectedSubject[index] - ? " text-main" - : " text-gray-color " - }`} + className={` cursor-pointer mt-1 ${selectedSubject[index] + ? " text-main" + : " text-gray-color " + }`} />{" "} {item.name} </a> @@ -155,14 +148,12 @@ export default function SideBar({ setFilterSubject, openMenu }) { key={index} alt={item.title} title={item.title} - className={`cursor-pointer hover:bg-slate-300 text-center text-xs rounded-lg p-2 mb-0 ${ - pathname === item.href ? "bg-slate-200 text-secondary-hover " : "text-gray-color" - }`} + className={`cursor-pointer hover:bg-slate-300 text-center text-xs rounded-lg p-2 mb-0 ${pathname === item.href ? "bg-slate-200 text-secondary-hover " : "text-gray-color" + }`} > <item.icon - className={` text-3xl rounded-xl cursor-pointer ${ - pathname === item.href ? "text-secondary-hover " : "text-gray-color" - } `} + className={` text-3xl rounded-xl cursor-pointer ${pathname === item.href ? "text-secondary-hover " : "text-gray-color" + } `} /> <div className="py-1">{item.title}</div> </Link> diff --git a/src/app/login/components/Highlights.js b/src/app/entrar/components/Highlights.js similarity index 50% rename from src/app/login/components/Highlights.js rename to src/app/entrar/components/Highlights.js index bf88e2427e440d137a5e111448792f12d3aaae4c..98cfecaa21dbcc3289712b898e31edd220632bce 100644 --- a/src/app/login/components/Highlights.js +++ b/src/app/entrar/components/Highlights.js @@ -1,4 +1,3 @@ -import Grid from "@mui/material/Unstable_Grid2"; import { useEffect, useState } from "react"; import mecredApi from "@/axiosConfig"; @@ -9,7 +8,7 @@ export default function Hightlights() { mecredApi .get("/statistics") .then(({ data }) => setStatistics(data)) - .catch((error) => console.log(error)); + .catch((error) => console.error(error)); }, []); return ( @@ -24,16 +23,6 @@ export default function Hightlights() { {statistics.count} recursos disponíveis | {statistics.month_downloads}{" "} recursos baixados este mês </h1> - {/*<div className="flex flex-wrap justify-center max-w-[70%] items-center"> - <div className="m-1 min-w-24 h-24 bg-black items-center"></div> - <div className="m-1 min-w-24 h-24 bg-black items-center"></div> - <div className="m-1 min-w-24 h-24 bg-black items-center"></div> - <div className="m-1 min-w-24 h-24 bg-black items-center"></div> - <div className="m-1 min-w-24 h-24 bg-black items-center"></div> - <div className="m-1 min-w-24 h-24 bg-black items-center"></div> - <div className="m-1 min-w-24 h-24 bg-black items-center"></div> - <div className="m-1 min-w-24 h-24 bg-black items-center"></div> - </div>*/} </div> ); } diff --git a/src/app/login/components/LoginForm.js b/src/app/entrar/components/LoginForm.js similarity index 96% rename from src/app/login/components/LoginForm.js rename to src/app/entrar/components/LoginForm.js index 7f82192557a66ee80e1372f0830ae2ff2c4bdad8..6312128cef37ec724a940796005b3f219ccae2c9 100644 --- a/src/app/login/components/LoginForm.js +++ b/src/app/entrar/components/LoginForm.js @@ -3,8 +3,6 @@ import Image from "next/image"; import { Button, Paper, - Divider, - SvgIcon, TextField, Alert, } from "@mui/material"; @@ -12,7 +10,7 @@ import theme from "@/app/theme"; import { ThemeProvider } from "@emotion/react"; import { useState } from "react"; import SignupModal from "./SignupModal"; -import PasswdModal from "./PasswdModal"; +import PasswordModal from "./PasswordModal"; import Title from "@/app/components/Title"; import { useRouter } from "next/navigation"; @@ -28,7 +26,6 @@ export default function LoginForm({ const handleOpenModalSignup = () => setOpenModalSignup(true); const handleCloseModalSignup = () => setOpenModalSignup(false); - const handleOpenModalPasswd = () => setOpenModalPasswd(true); const handleCloseModalPasswd = () => setOpenModalPasswd(false); @@ -79,7 +76,6 @@ export default function LoginForm({ > Entrar </Button> - <p className="mt-5 text-xs text-gray-400"> Esqueceu a senha?{" "} <a @@ -97,7 +93,7 @@ export default function LoginForm({ Cadastre-se. </a> </p> - <PasswdModal open={openModalPasswd} handleClose={handleCloseModalPasswd} /> + <PasswordModal open={openModalPasswd} handleClose={handleCloseModalPasswd} /> </Paper> </form> <Button @@ -119,7 +115,6 @@ export default function LoginForm({ <Image className="w-6 h-6" src="/google.svg" alt="google logo" width={10} height={10} /> <span>Entrar com o Google</span> </Button> - <SignupModal open={openModalSignup} handleClose={handleCloseModalSignup} /> </div> </div> diff --git a/src/app/login/components/LoginInfo.js b/src/app/entrar/components/LoginInfo.js similarity index 93% rename from src/app/login/components/LoginInfo.js rename to src/app/entrar/components/LoginInfo.js index d310363de5465bf932bb664beb885035e9ae312e..8c4cd8e664cd568411eeb3be9b7ba7bf2885f8ba 100644 --- a/src/app/login/components/LoginInfo.js +++ b/src/app/entrar/components/LoginInfo.js @@ -48,18 +48,16 @@ export default function LoginInfo() { return ( <div className="pt-20"> - <div className="max-[1280px]:hidden"> <Title /> </div> <div className="grid justify-items-center"> - <div className="flex flex-wrap justify-center max-w-[600px]"> {cards.map((card, i) => { return ( <div key={i} className={`bg-${card["color"]} p-4 rounded-lg m-2 w-[120px] grid justify-items-center`}> - <Image className={`w-14 h-14 ${card["name"] === "Contribua" && `rotate-180`}`} style={{ filter: 'invert(100%)' }} src={card["icon"]} width={10} height={10} /> + <Image className={`w-14 h-14 ${card["name"] === "Contribua" && `rotate-180`}`} alt={card["name"]} style={{ filter: 'invert(100%)' }} src={card["icon"]} width={10} height={10} /> <p className="text-white pt-1">{card["name"]}</p> </div> ) diff --git a/src/app/login/components/PasswdModal.js b/src/app/entrar/components/PasswordModal.js similarity index 91% rename from src/app/login/components/PasswdModal.js rename to src/app/entrar/components/PasswordModal.js index 2401f45c5a0328d221e9583d1a93093ddc894161..15259423e4973cb710c4b970205ae0ed6f6ca177 100644 --- a/src/app/login/components/PasswdModal.js +++ b/src/app/entrar/components/PasswordModal.js @@ -7,14 +7,14 @@ import { useState } from "react"; import mecredApi from "@/axiosConfig"; import { removeFromLocalStorage } from "@/app/handlers/localStorageHandler"; -export default function PasswdModal({ open, handleClose }) { +export default function PasswordModal({ open, handleClose }) { const [userEmail, setUserEmail] = useState(""); const [feedbackMessage, setfeedbackMessage] = useState(""); const [error, setError] = useState(false); - // const redirect_url = "http://localhost:3000/resetPassword" - const redirect_url = "https://mecredhomologa.c3sl.ufpr.br/resetPassword" - + // const redirect_url = "http://localhost:3000/novaSenha" + const redirect_url = "https://mecredhomologa.c3sl.ufpr.br/novaSenha" + const sendRecovery = async () => { mecredApi .post("/auth/password", { @@ -46,7 +46,7 @@ export default function PasswdModal({ open, handleClose }) { setError(true); resetForm(); } else { - sendRecovery(); + sendRecovery(); } }; diff --git a/src/app/login/components/SignupModal.js b/src/app/entrar/components/SignupModal.js similarity index 100% rename from src/app/login/components/SignupModal.js rename to src/app/entrar/components/SignupModal.js diff --git a/src/app/login/page.js b/src/app/entrar/page.js similarity index 70% rename from src/app/login/page.js rename to src/app/entrar/page.js index d8a847925c54e421df19d5dd0cb58e59cfc692c0..6fd9055d15354c9ed4b9dfa6a94885947845ba8a 100644 --- a/src/app/login/page.js +++ b/src/app/entrar/page.js @@ -9,7 +9,6 @@ import { } from "../handlers/localStorageHandler"; import { redirect, useRouter, useSearchParams } from "next/navigation"; import { Suspense } from 'react'; -import About from "../components/About"; import { ThemeProvider } from "@emotion/react"; import theme from "../theme"; import LoginInfo from "./components/LoginInfo"; @@ -18,13 +17,9 @@ function Login() { const [userEmail, setUserEmail] = useState(""); const [userPassword, setUserPassword] = useState(""); const [errorMessage, setErrorMessage] = useState(""); - const searchParams = useSearchParams(); - const access_token = getStoredValue("access_token"); - const redirectUrl = searchParams.get("redirect") ?? "/"; - const router = useRouter(); const handleEmailChange = (e) => { @@ -38,24 +33,23 @@ function Login() { const userLogin = async (event, email, password) => { event.preventDefault(); - mecredApi - .post("/auth/sign_in", { - email: userEmail, - password: userPassword, - }) - .then((response) => { - saveToLocalStorage("user_data", JSON.stringify(response.data["data"])); - saveToLocalStorage("access_token", response.headers["access-token"]); - saveToLocalStorage("client", response.headers["client"]) - saveToLocalStorage("uid", response.headers["uid"]) - saveToLocalStorage("expiry", response.headers["expiry"]) - saveToLocalStorage("token-type", response.headers["token-type"]) - router.push(redirectUrl); - }) - .catch((error) => { - setErrorMessage(error['response']['data']['errors'][0]) - }) - + mecredApi + .post("/auth/sign_in", { + email: userEmail, + password: userPassword, + }) + .then((response) => { + saveToLocalStorage("user_data", JSON.stringify(response.data["data"])); + saveToLocalStorage("access_token", response.headers["access-token"]); + saveToLocalStorage("client", response.headers["client"]) + saveToLocalStorage("uid", response.headers["uid"]) + saveToLocalStorage("expiry", response.headers["expiry"]) + saveToLocalStorage("token-type", response.headers["token-type"]) + router.push(redirectUrl); + }) + .catch((error) => { + setErrorMessage(error['response']['data']['errors'][0]) + }) }; useEffect(() => { @@ -66,7 +60,6 @@ function Login() { <ThemeProvider theme={theme}> <Grid container className="min-h-screen bg-[#f5f9f9]"> <Grid xs={12} xl={7} order={{ xs: 2, xl: 1 }}> - {/* <About /> */} <LoginInfo /> </Grid> <Grid xs={12} xl={5} order={{ xs: 1, xl: 2 }}> @@ -85,7 +78,7 @@ function Login() { export default function LoginWrapper() { return ( <Suspense> - <Login/> + <Login /> </Suspense> ); }; \ No newline at end of file diff --git a/src/app/handlers/loginHandler.js b/src/app/handlers/loginHandler.js index d7019a02ae9110511c1e3c3e5a3013cc5c9f9bad..455f7dc72dc6cc83ef443a4acfca4d3550286d27 100644 --- a/src/app/handlers/loginHandler.js +++ b/src/app/handlers/loginHandler.js @@ -25,8 +25,7 @@ export function useLoginBarrier(originalPath) { const params = new URLSearchParams(); params.set("redirect", pathname); - - router.push(`/login?${params.toString()}`); + router.push(`/entrar?${params.toString()}`); return false; }, [router, pathname]); diff --git a/src/app/mec/page.js b/src/app/mec/page.js index 0003be5a3d7ddd2fb52e9e98f2106e421497ac3e..93738ed7634c14d4ed44d6c793e918cd1d0abcea 100644 --- a/src/app/mec/page.js +++ b/src/app/mec/page.js @@ -1,21 +1,9 @@ "use client" -import React, { useEffect, useState } from "react"; -import Overlay from "../components/Overlay"; -import InfiniteScroll from "../components/InfiniteScroll"; -import Link from "next/link"; import Content from "../components/Content"; -export default function MEC() { - const [selectFilter, setSelectFilter] = useState("publicationdesc"); - const [titlePage, setTitlePage] = useState("Recentes"); - const [newSize, setNewSize] = useState(false); - const [query, setQuery] = useState("*"); - const [filterSubject, setFilterSubject] = useState(""); - - - +export default function Mec() { return ( - <Content name={"MEC"}/> + <Content name={"MEC"} /> ) }; \ No newline at end of file diff --git a/src/app/resetPassword/page.js b/src/app/novaSenha/page.js similarity index 87% rename from src/app/resetPassword/page.js rename to src/app/novaSenha/page.js index af73152aa762be0199bf549effcd64b4adf4d2ce..c474d7368fbf0b1b71d8728d0dbc4a3ffb94e7fc 100644 --- a/src/app/resetPassword/page.js +++ b/src/app/novaSenha/page.js @@ -13,7 +13,6 @@ import { useRouter } from "next/navigation"; import mecredApi from "@/axiosConfig"; import { removeFromLocalStorage } from "../handlers/localStorageHandler"; - export default function ResetPassword() { const [error, setError] = useState(false) @@ -43,7 +42,6 @@ export default function ResetPassword() { const resetPassword = urlParams.get("reset_password"); const token = urlParams.get("token"); const uid = urlParams.get("uid"); - const url = `/auth/password` const payload = { @@ -58,10 +56,10 @@ export default function ResetPassword() { } try { - const res = await mecredApi.put(url, payload) + await mecredApi.put(url, payload); removeFromLocalStorage("access_token"); setError(false); - router.push("/login"); + router.push("/entrar"); } catch (e) { setError(true); } @@ -71,14 +69,14 @@ export default function ResetPassword() { <ThemeProvider theme={theme}> <div className="grid grid-cols-1 h-screen"> <div className="flex flex-col justify-center items-center"> - <div className="my-10 mx-10"> - <h1 className="text-3xl max-lg:text-xl font-bold text-secondary my-10 text-center"> - Digite sua nova senha - </h1> - <h1 className="text-lg max-lg:text-base text-main-text text-balance mb-5 text-center"> - Assim que sua senha for alterada com sucesso você será redirecionado para o login - </h1> - </div> + <div className="my-10 mx-10"> + <h1 className="text-3xl max-lg:text-xl font-bold text-secondary my-10 text-center"> + Digite sua nova senha + </h1> + <h1 className="text-lg max-lg:text-base text-main-text text-balance mb-5 text-center"> + Assim que sua senha for alterada com sucesso você será redirecionado para o login + </h1> + </div> <form onSubmit={onSubmit} className="mb-5"> <Paper elevation={0} diff --git a/src/app/page.js b/src/app/page.js index 96dde13fede5f8bb4cc7a307c546cd17d70b0a25..4a5f97fb6fe5f98f3e118048bb0ca3d228315d1d 100644 --- a/src/app/page.js +++ b/src/app/page.js @@ -1,9 +1,8 @@ import { redirect } from 'next/navigation' - export default function Home() { return ( - redirect('/about') + redirect('/sobre') ); } diff --git a/src/app/perfil/[id]/components/AboutCard.js b/src/app/perfil/[id]/components/AboutCard.js index ba6f34a2230b64550b2e37dd2099e1afe94fc787..dcf4efa649ec6b4a833ee0fd13a5dfcbd6be8d8f 100644 --- a/src/app/perfil/[id]/components/AboutCard.js +++ b/src/app/perfil/[id]/components/AboutCard.js @@ -1,6 +1,5 @@ // components/Card.js import { useState } from 'react'; -import { Card } from '@mui/material'; import { useEffect } from 'react'; import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp'; @@ -14,22 +13,18 @@ const AboutCard = ({ title, content }) => { setShowButton(document.getElementById('content').scrollHeight > 50); }, []); - const toggleContent = () => { setExpanded(!expanded); }; return ( <div className="mt-10 min-w-[200px] overflow-hidden transition-height bg-white"> - <div className='p-4 rounded-md min-w-[200px] min-h-[180px] ' > - <h2 className="text-gray-500 text-2xl font-semibold ">{title}</h2> <div id="content" className="content pt-2"> <p className={` ${expanded ? '' : 'line-clamp-3'} text-sm text-gray-500 `}>{content}</p> </div> <div className='flex justify-center'> - {showButton && ( <button onClick={toggleContent} @@ -45,5 +40,4 @@ const AboutCard = ({ title, content }) => { ); }; - export default AboutCard; diff --git a/src/app/perfil/[id]/components/CardsHomologation.js b/src/app/perfil/[id]/components/CardsHomologation.js index 47d89beb812fb64a4161db3106f48c2db67141b8..01593f8f65c7be3546b11a0df70583a33c387cd0 100644 --- a/src/app/perfil/[id]/components/CardsHomologation.js +++ b/src/app/perfil/[id]/components/CardsHomologation.js @@ -44,79 +44,73 @@ const getDefaultThumbnail = (type) => { }; export default function CardsHomologation({ item, key }) { - return ( - - <Card - className="transition items-center mt-5 mx-2 min-h-[320px]" - variant="outlined" - sx={{ - display: "flex", - flexDirection: "column", - width: 300, - boxShadow: "none", - padding: "10px", - }} - key={key} - > - <CardMedia - className=" transition-transform rounded-xl " - sx={{ - height: 170, - width: 270, - }} - component="img" - image={ - item["learning_object"]["thumbnail"] === null - ? getDefaultThumbnail(item["learning_object"]["object_type"]) - : `https://api.portalmec.c3sl.ufpr.br${item["learning_object"]["thumbnail"]}` - } - alt="img" - /> - <CardHeader - className="self-start flex-shrink h-[100px]" - avatar={item["submitter"]["avatar"] === null ? null : - <Link href="/perfil"> - <Avatar - src={`https://api.portalmec.c3sl.ufpr.br/${item["submitter"]["avatar"]}`} - alt={item["submitter"]["name"]} - // className="-mt-9" - sx={{ - width: 28, - height: 28, - marginTop: 0, - bgcolor: "#00bacc", - }} - /> - </Link> - } - title={ - <Typography variant="body2" color="" className="line-clamp-2 "> - {item["learning_object"]["name"]} - </Typography> - } - subheader={ - <> - <Typography - variant="body2" - color="text.secondary" - className="line-clamp-1" - > - {item["submitter"]["name"]} - </Typography> - - - </> - } + return ( + <Card + className="transition items-center mt-5 mx-2 min-h-[320px]" + variant="outlined" + sx={{ + display: "flex", + flexDirection: "column", + width: 300, + boxShadow: "none", + padding: "10px", + }} + key={key} + > + <CardMedia + className=" transition-transform rounded-xl " + sx={{ + height: 170, + width: 270, + }} + component="img" + image={ + item["learning_object"]["thumbnail"] === null + ? getDefaultThumbnail(item["learning_object"]["object_type"]) + : `https://api.portalmec.c3sl.ufpr.br${item["learning_object"]["thumbnail"]}` + } + alt="img" + /> + <CardHeader + className="self-start flex-shrink h-[100px]" + avatar={item["submitter"]["avatar"] === null ? null : + <Link href="/perfil"> + <Avatar + src={`https://api.portalmec.c3sl.ufpr.br/${item["submitter"]["avatar"]}`} + alt={item["submitter"]["name"]} + // className="-mt-9" + sx={{ + width: 28, + height: 28, + marginTop: 0, + bgcolor: "#00bacc", + }} /> - <div className="flex items-end"> - - <Button variant="outlined" className=" "> - Avaliar - </Button> - </div> - - - </Card> - ); + </Link> + } + title={ + <Typography variant="body2" color="" className="line-clamp-2 "> + {item["learning_object"]["name"]} + </Typography> + } + subheader={ + <> + <Typography + variant="body2" + color="text.secondary" + className="line-clamp-1" + > + {item["submitter"]["name"]} + </Typography> + </> + } + /> + <div className="flex items-end"> + <Button variant="outlined" className=" "> + Avaliar + </Button> + </div> + </Card> + ); } diff --git a/src/app/perfil/[id]/components/CreateCollectionModal.js b/src/app/perfil/[id]/components/CreateCollectionModal.js index 02a42b6f637f31cfd1d482e920026767dfc5a84c..9d4f10a688147bbb1c0277c1b4dc250eaf76c2b5 100644 --- a/src/app/perfil/[id]/components/CreateCollectionModal.js +++ b/src/app/perfil/[id]/components/CreateCollectionModal.js @@ -1,25 +1,19 @@ import { FormLabel, Modal, TextField, RadioGroup, FormControlLabel, Radio } from "@mui/material"; -import { usePathname } from "next/navigation"; import { useState } from "react"; import { getStoredValue } from "@/app/handlers/localStorageHandler"; import mecredApi from "@/axiosConfig"; export default function CreateCollectionModal({ open, onClose, idLogin }) { const [name, setName] = useState("") - const pathname = usePathname() const token = getStoredValue("access_token"); const client = getStoredValue("client"); const uid = getStoredValue("uid"); - // if (typeof window !== "undefined" && window.location) - // url = window.location.origin + pathname; - const handleNameChange = (e) => { setName(e.target.value) } - const handleSubmit = (e) => { if (name.length > 150) return; @@ -31,7 +25,6 @@ export default function CreateCollectionModal({ open, onClose, idLogin }) { "owner_type": "User", "privacy": e.target["privacy-radio-group"].value } - }; mecredApi.post("/collections", payload, { @@ -43,7 +36,6 @@ export default function CreateCollectionModal({ open, onClose, idLogin }) { Expires: 0, }, }) - window.location.reload(); }; return ( @@ -56,7 +48,6 @@ export default function CreateCollectionModal({ open, onClose, idLogin }) { <div className="text-2xl font-bold text-main-text">Criar Coleção</div> <p className="text-lg text-main-text font-bold mb-1 mt-4">Nome da Coleção</p> <form onSubmit={handleSubmit}> - <TextField size="small" fullWidth @@ -95,7 +86,6 @@ export default function CreateCollectionModal({ open, onClose, idLogin }) { </button> </div> </form> - </div> </Modal> ) diff --git a/src/app/perfil/[id]/components/Favorites.js b/src/app/perfil/[id]/components/Favorites.js deleted file mode 100644 index fddbebce4fa6a359993716ff835176cb43116634..0000000000000000000000000000000000000000 --- a/src/app/perfil/[id]/components/Favorites.js +++ /dev/null @@ -1,87 +0,0 @@ -import { Card } from "@mui/material"; -import { useState, useEffect } from "react"; -import mecredApi from "@/axiosConfig"; -import { getStoredValue } from "@/app/handlers/localStorageHandler"; -import Cards from "@/app/components/Cards"; - -export default function Favorites({ id }) { - const [collections, setCollections] = useState([]) - const [resources, setResources] = useState([]) - const token = getStoredValue("access_token") - const client = getStoredValue("client") - const uid = getStoredValue("uid") - - useEffect(() => { - const fetchResources = async (id) => { - mecredApi - .get(`/users/${id}/learning_objects/liked`, { - headers: { - 'access-token': token, - 'token-type': 'Bearer', - 'client': client, - 'uid': uid, - 'Expires': 0 - } - }) - .then(({ data }) => { - setResources(data); - }); - } - - const fetchCollections = async (id) => { - mecredApi - .get(`/users/${id}/collections/liked`, { - headers: { - 'access-token': token, - 'token-type': 'Bearer', - 'client': client, - 'uid': uid, - 'Expires': 0 - } - }) - .then(({ data }) => { - setCollections(data); - }); - }; - fetchCollections(id); - fetchResources(id); - }, [client, id, token, uid]); - - return ( - <> - <Card className='p-3 my-10 rounded-md min-w-[200px] min-h-[180px] ' > - - <div className="text-gray-500 text-2xl font-semibold ">Favoritos</div> - - <div className="flex flex-wrap justify-center"> - - {collections.map((item, index) => { - - return ( - <Cards - key={index} - title={item["name"]} - author={item["owner"]["name"]} - avatar={item["owner"]["avatar"]} - image={item["items_thumbnails"]} - /> - ); - })} - {resources.map((resource, index) => { - return ( - <Cards - id={resource["id"]} - key={index} - title={resource["name"]} - author={resource["publisher"]["name"]} - avatar={resource["publisher"]["avatar"]} - image={resource["thumbnail"]} - /> - ); - })} - </div> - - </Card> - </> - ); -} \ No newline at end of file diff --git a/src/app/perfil/[id]/components/GroupButton.js b/src/app/perfil/[id]/components/GroupButton.js index fdd0722adea1f9e1ba9e003480986b6732050fb4..f3863e2d19fc06b9c6cf9e2825331d538908e0b2 100644 --- a/src/app/perfil/[id]/components/GroupButton.js +++ b/src/app/perfil/[id]/components/GroupButton.js @@ -1,20 +1,15 @@ import * as React from 'react'; -import Button from '@mui/material/Button'; import Grid from "@mui/material/Grid" import PersonAddIcon from '@mui/icons-material/PersonAdd'; import ShareIcon from '@mui/icons-material/Share'; -import ReportIcon from '@mui/icons-material/Report'; -import MessageIcon from '@mui/icons-material/Message'; import CheckIcon from '@mui/icons-material/Check'; import EditIcon from '@mui/icons-material/Edit'; import { useState, useEffect } from 'react'; import { getStoredValue } from '@/app/handlers/localStorageHandler'; import { useLoginBarrier } from '@/app/handlers/loginHandler'; import mecredApi from '@/axiosConfig'; -import ShareModal from '@/app/components/shareModal'; -import ReporrtProfileModal from './ReportProfileModal'; -import { FlagOutlined } from '@mui/icons-material'; -import { isLoggedIn } from '@/app/handlers/loginHandler'; +import ShareModal from '@/app/components/ShareModal'; +import ReportProfileModal from './ReportProfileModal'; export default function GroupButton({ profileData, idLogin }) { const loginBarrier = useLoginBarrier(); @@ -26,7 +21,6 @@ export default function GroupButton({ profileData, idLogin }) { const [reportOpen, setReportOpen] = useState(false); const [reported, setReported] = useState(false); - const followHandler = () => { if (!loginBarrier()) return @@ -44,7 +38,6 @@ export default function GroupButton({ profileData, idLogin }) { } ); setFollow(!follow); - } useEffect(() => { @@ -77,13 +70,9 @@ export default function GroupButton({ profileData, idLogin }) { return ( <div className=''> - <Grid container className=' pb-4 '> - - <Grid item md={6} xl={6} xs={12}> <div className='max-[1024px]:grid max-[1024px]:justify-items-center'> - {idLogin == profileData["id"] ? <button className={`text-sm rounded-lg normal-case h-9 font-bold w-[90%] mt-2 text-white bg-secondary hover:bg-secondary-hover `} @@ -102,19 +91,9 @@ export default function GroupButton({ profileData, idLogin }) { } </div> </Grid> - {/* <Grid item md={6} xl={3} xs={12}> - <button className="border text-sm text-gray-500 border-main rounded-lg normal-case h-9 font-bold w-[90%] mt-2 hover:bg-gray-100 "> - <MessageIcon className='m-1' fontSize='small' /> - {idLogin == profileData["id"] ? "Ver mensagens" : "Enviar mensagem"} - </button> - </Grid> */} - - <Grid item md={6} xl={6} xs={12}> <ShareModal open={shareOpen} onClose={() => setShareOpen(false)} /> <div className='max-[1024px]:grid max-[1024px]:justify-items-center'> - - <button className="border text-sm text-gray-500 border-main rounded-lg normal-case h-9 font-bold w-[90%] mt-2 hover:bg-gray-100 " onClick={() => setShareOpen(true)} @@ -125,15 +104,13 @@ export default function GroupButton({ profileData, idLogin }) { </div> </Grid> {/* <Grid item md={4} xl={4} xs={12}> - <ReporrtProfileModal + <ReportProfileModal profile={profileData} open={reportOpen} idLogin={idLogin} onClose={() => setReportOpen(false)} /> {idLogin !== profileData["id"] && - - <button className="border text-sm text-gray-500 border-main rounded-lg normal-case h-9 font-bold w-[90%] mt-2 hover:bg-gray-100 " onClick={() => { @@ -149,9 +126,7 @@ export default function GroupButton({ profileData, idLogin }) { </button> } </Grid> */} - </Grid> - </div> ); } \ No newline at end of file diff --git a/src/app/perfil/[id]/components/ProfileCollections.js b/src/app/perfil/[id]/components/ProfileCollections.js index e860b7ec029f5ad40c39820da0fd6be33fee3eac..e492c89f4e2f269c2657418e1349e2beab66182e 100644 --- a/src/app/perfil/[id]/components/ProfileCollections.js +++ b/src/app/perfil/[id]/components/ProfileCollections.js @@ -1,7 +1,6 @@ -import Cards from "@/app/components/Cards"; -import { Card, Button } from "@mui/material"; +import { Button } from "@mui/material"; import CreateCollectionModal from "./CreateCollectionModal"; -import { useEffect, useState, Fragment } from "react"; +import { useEffect, useState } from "react"; import { getStoredValue } from "@/app/handlers/localStorageHandler"; import DownloadButton from "@/app/components/DownloadButton"; import GroupCardsCollections from "@/app/components/GroupCardsCollections"; @@ -47,40 +46,30 @@ export default function ProfileCollections({ id, idLogin }) { fetchCollections(id); }, [id, client, uid, token, numberCards, idLogin]) - const toggleContent = () => { setNumberCards(numberCards + 4) }; - return ( - <div className='p-3 my-10 rounded-md min-w-[200px] min-h-[180px] ' > <div className="flex justify-between"> - <div className="text-gray-500 text-2xl font-semibold inline-block ">{idLogin === id ? "Minhas Coleções" : "Coleções"}</div> <CreateCollectionModal open={collectionOpen} onClose={() => setCollectionOpen(false)} id={idLogin} /> {idLogin === id && <button className=" inline-block px-2 text-sm text-main border-main rounded-lg normal-case h-9 font-bold bg-secondary hover:bg-secondary-hover" onClick={() => setCollectionOpen(true)} > - Criar Nova Coleção </button>} </div> - <div className="justify-center mt-5"> - - {collections.map((item, index) => { return ( <div className="" key={index}> - - <Fragment key={item['id']} > + <div key={item['id']} > <div className="bg-white mb-10 pt-6 pl-4 mr-6 rounded-2xl"> <p className="text-2xl max-md:text-center font-bold mb-0 text-text-color mr-2 inline-block">{item['name']}</p> - <div className="flex flex-wrap justify-between mr-8 max-md:flex-col "> <p className=" ml-1 max-md:text-center text-gray-500 mb-0"> por <Link href={"/perfil/" + item["owner"]["id"]}> {item["owner"]["name"]}</Link> @@ -91,14 +80,12 @@ export default function ProfileCollections({ id, idLogin }) { </div> <GroupCardsCollections cardsPerRow={4} data={item['collection_items']} /> </div> - </Fragment> - + </div> </div> ); })} </div> {numberCards < totalCount ? - <Button fullWidth disableElevation @@ -112,9 +99,6 @@ export default function ProfileCollections({ id, idLogin }) { </p> </Button> : <></>} - </div> - ); - } diff --git a/src/app/perfil/[id]/components/ProfileHomologation.js b/src/app/perfil/[id]/components/ProfileHomologation.js index 133fca4f0f7ca86361e77c81cbe5998f54ebf6c2..53ba4e74078b3e86b0282049adb9b52a3031f2eb 100644 --- a/src/app/perfil/[id]/components/ProfileHomologation.js +++ b/src/app/perfil/[id]/components/ProfileHomologation.js @@ -4,12 +4,9 @@ import mecredApi from "@/axiosConfig"; import { getStoredValue } from "@/app/handlers/localStorageHandler"; import CardsHomologation from "./CardsHomologation"; - - -export default function Favorites({ id }) { +export default function ProfileHomologation({ id }) { const [homologated, setHomologated] = useState([]) const [expanded, setExpanded] = useState(false); - const [showButton, setShowButton] = useState(false); const [numberCards, setNumberCards] = useState(0) const token = getStoredValue("access_token") const client = getStoredValue("client") @@ -29,8 +26,6 @@ export default function Favorites({ id }) { }) .then(({ data }) => { setHomologated(prevData => [...prevData, ...data]); - handleResize(data.length) - // setNumberCards(data.length) }); } @@ -42,16 +37,9 @@ export default function Favorites({ id }) { setExpanded(!expanded); }; - const handleResize = (length) => { - if (length > 12) { - setShowButton(true); - } - }; - return ( <Card className='p-3 my-10 rounded-md min-w-[200px] min-h-[180px] ' > <div className="text-gray-500 text-2xl font-semibold ">Homologação</div> - <div className={`flex content flex-wrap justify-center ${expanded ? "" : "overflow-y-hidden"}`}> {homologated.map((item, i) => { return <CardsHomologation item={item} key={i} /> @@ -59,7 +47,6 @@ export default function Favorites({ id }) { })} </div> <Divider className="mr-8 max-md:mr-0 mb-8"> - <Button fullWidth disableElevation @@ -69,7 +56,6 @@ export default function Favorites({ id }) { > {"Carregar mais"} </Button> - </Divider> </Card> ); diff --git a/src/app/perfil/[id]/components/ProfileOptions.js b/src/app/perfil/[id]/components/ProfileOptions.js index 2615c27d5c65ea9657abbbd421595883438a638b..8b1ccf97a4659ba53e89d7aa15a10bde6369c17c 100644 --- a/src/app/perfil/[id]/components/ProfileOptions.js +++ b/src/app/perfil/[id]/components/ProfileOptions.js @@ -3,16 +3,10 @@ import ProfileCollections from "./ProfileCollections"; import { useState, useEffect } from "react"; import mecredApi from "@/axiosConfig"; import ProfileResources from "./ProfileResources"; -import Favorites from "./Favorites"; import ProfileHomologation from "./ProfileHomologation" -import { getStoredValue } from "@/app/handlers/localStorageHandler"; export default function ProfileOptions ({ title, content, optButton, id, idLogin }){ - const [collections, setCollections] = useState([]) const [resources, setResources] = useState([]) - const token = getStoredValue("access_token"); - const client = getStoredValue("client"); - const uid = getStoredValue("uid"); useEffect(() => { const fetchResources = async (id) => { @@ -23,7 +17,6 @@ export default function ProfileOptions ({ title, content, optButton, id, idLogin }); } - fetchResources(id); }, [id]); @@ -35,8 +28,6 @@ export default function ProfileOptions ({ title, content, optButton, id, idLogin return <ProfileResources resources={resources} id={id} idLogin={idLogin}/> case 2: return <ProfileCollections id={id} idLogin={idLogin}/> - // case 3: - // return <Favorites id={id} /> case 3: return <ProfileHomologation id={id} /> default: diff --git a/src/app/perfil/[id]/components/ProfileResources.js b/src/app/perfil/[id]/components/ProfileResources.js index 0ebcf0cdaf666ad471ab7636a60d4d572a9bb4f6..16fe5e130d6ca2386983692f305528b2795e0a53 100644 --- a/src/app/perfil/[id]/components/ProfileResources.js +++ b/src/app/perfil/[id]/components/ProfileResources.js @@ -6,23 +6,18 @@ export default function ProfileResources({ resources, id, idLogin }) { return ( <> <div className="flex justify-between pt-10"> - <div className="text-gray-500 text-2xl font-semibold inline-block ">{idLogin === id ? "Meus Recursos" : "Recursos"}</div> {idLogin === id && - <Link href="/submit"> + <Link href="/publicar"> <button className=" inline-block px-2 text-sm text-main border-main rounded-lg normal-case h-9 font-bold bg-orange hover:bg-orange-hover" - > Publicar novo recurso </button> </Link>} </div> <Card className='p-3 my-5 rounded-md min-w-[200px] min-h-[180px] ' > - - <div className="flex flex-wrap justify-center"> - {resources.map((resource, index) => { return ( <Cards @@ -37,7 +32,6 @@ export default function ProfileResources({ resources, id, idLogin }) { ); })} </div> - </Card> </> ); diff --git a/src/app/perfil/[id]/components/SelectionButtons.js b/src/app/perfil/[id]/components/SelectionButtons.js index 0e60eac546ebe8dd11b01385e13f7896e6416585..2502afe7e32306bd329bd1939dc59850fa88fb32 100644 --- a/src/app/perfil/[id]/components/SelectionButtons.js +++ b/src/app/perfil/[id]/components/SelectionButtons.js @@ -1,23 +1,17 @@ -import * as React from 'react'; import Grid from "@mui/material/Grid" import { isLoggedIn } from '@/app/handlers/loginHandler'; - export default function SelectionButtons({ setOptButton, verifyCurator, idProfile, idLogin }) { const buttons = isLoggedIn() && idProfile == idLogin ? - (verifyCurator ? - ["Sobre", "Meus Recursos", "Minhas Coleções", "Homologação"] : - ["Sobre", "Meus Recursos", "Minhas Coleções"]) : + (verifyCurator ? + ["Sobre", "Meus Recursos", "Minhas Coleções", "Homologação"] : + ["Sobre", "Meus Recursos", "Minhas Coleções"]) : ["Sobre", "Recursos", "Coleções"] - - return ( - <Grid container className='' > { buttons.map((item, index) => { return ( - <Grid item key={index} xs={6} sm={12 / buttons.length} lg={12 / buttons.length}> <button className="h-12 text-gray-500 text-base normal-case font-bold w-[100%] hover:bg-gray-100 hover:text-secondary hover:border-b-2 hover:border-secondary focus:text-secondary focus:border-b-2 focus:border-secondary" diff --git a/src/app/perfil/[id]/components/UserCard.js b/src/app/perfil/[id]/components/UserCard.js index 310902fe999dc77a7bdb9d7f11cc4f4001102d7b..d30eb217777f7ccb7b2b7b5ec1139b96f18dad37 100644 --- a/src/app/perfil/[id]/components/UserCard.js +++ b/src/app/perfil/[id]/components/UserCard.js @@ -11,9 +11,6 @@ import axios from 'axios'; import mecredApi from '@/axiosConfig'; import { isLoggedIn, useLoginBarrier } from '@/app/handlers/loginHandler'; - - - const roles = [ { id: 1, @@ -140,36 +137,26 @@ export default function UserCard({ profileData, idLogin }) { <div className='flex pt-[5%] flex-col mx-[5%] max-[940px]:mx-[5%]'> <div className='rounded-md min-w-[200px] min-h-[200px] bg-white' > <Grid container> - - - {/* ao mudar para imagem manter proporções parecidas */} <Grid item lg={4} md={12} xs={12} className=''> - <div className='grid justify-items-center align-items-center h-full flex items-center max-[1024px]:pt-3'> - - {profileData["id"] === idLogin ? - <Avatar src={"https://api.portalmec.c3sl.ufpr.br/" + profileData["avatar_file_name"]} - sx={{ position: "inherit" }} - className=" min-h-[200px] min-w-[200px] " /> - : - <Avatar src={"https://api.portalmec.c3sl.ufpr.br/" + profileData["avatar"]} sx={{ position: "inherit" }} className=" min-h-[200px] min-w-[200px] " /> - } + <div className='grid justify-items-center align-items-center h-full items-center max-[1024px]:pt-3'> + {profileData["id"] === idLogin ? + <Avatar src={"https://api.portalmec.c3sl.ufpr.br/" + profileData["avatar_file_name"]} + sx={{ position: "inherit" }} + className=" min-h-[200px] min-w-[200px] " /> + : + <Avatar src={"https://api.portalmec.c3sl.ufpr.br/" + profileData["avatar"]} sx={{ position: "inherit" }} className=" min-h-[200px] min-w-[200px] " /> + } </div> </Grid> <Grid item lg={8} md={12} xs={12}> - <div className=' py-5 '> - <h2 className='max-[1024px]:flex max-[1024px]:justify-center max-sm:text-4xl text-gray-500 font-bold text-5xl pb-1'>{profileData["name"]}</h2> <p className='max-[1024px]:flex max-[1024px]:justify-center text-[#00bacc] max-sm:text-lg text-xl pb-1'>{profileData["email"]}</p> <div className='max-[1024px]:px-8 pb-1'> - - {translateItems && - <div className='max-[1024px]:flex max-[1024px]:justify-center mt-1 text-gray-600 text-lg max-sm:text-base'>{translateItems}</div> + {translateItems && + <div className='max-[1024px]:flex max-[1024px]:justify-center mt-1 text-gray-600 text-lg max-sm:text-base'>{translateItems}</div> } </div> - - {/* <p className="max-[1024px]:flex max-[1024px]:justify-center text-lg text-gray-400">Marabá(PA)</p> */} - {isLoggedIn() && <div className='max-[1024px]:flex max-[1024px]:justify-center pb-1'> <p className='inline text-[#00bacc] text-3xl max-sm:text-2xl font-bold'>{following}</p> <p className='inline pl-1 text-xl max-sm:text-lg text-gray-500'>Seguindo</p> @@ -180,15 +167,12 @@ export default function UserCard({ profileData, idLogin }) { </div> </Grid> </Grid> - </div> <div className='rounded-md min-w-[200px] mt-10 bg-white'> - {<SelectionButtons setOptButton={setOptButton} verifyCurator={verifyCurator} idLogin={idLogin} idProfile={profileData["id"]} />} </div> <ProfileOptions title="Sobre" content={profileData["description"]} optButton={optButton} id={profileData["id"]} idLogin={idLogin} /> </div> - </> ); } \ No newline at end of file diff --git a/src/app/perfil/[id]/page.js b/src/app/perfil/[id]/page.js index 5c565e362fe6054ed5b325a20f766c7632e6f48f..a00a9198972970e769e9109c8f46df62c6b74176 100644 --- a/src/app/perfil/[id]/page.js +++ b/src/app/perfil/[id]/page.js @@ -1,12 +1,10 @@ "use client" import UserCard from "./components/UserCard" -import Header from "../../components/Header" import { getStoredValue } from "../../handlers/localStorageHandler"; -import { useEffect, useRef, useState } from "react"; +import { useEffect, useState } from "react"; import Overlay from "../../components/Overlay"; import mecredApi from "@/axiosConfig"; -import { isLoggedIn, useLoginBarrier } from "@/app/handlers/loginHandler"; - +import { isLoggedIn } from "@/app/handlers/loginHandler"; export default function Perfil({ params }) { const [profileData, setProfileData] = useState(null); @@ -17,9 +15,9 @@ export default function Perfil({ params }) { useEffect(() => { if (isLoggedIn()) { - let data = getStoredValue("user_data") let dataJson = JSON.parse(data); + if (params.id == dataJson["id"]) { setProfileData(dataJson); } @@ -39,8 +37,10 @@ export default function Perfil({ params }) { setProfileData(data); }); } + fetchUser(params.id) } + setIdLogin(dataJson["id"]) } else { const fetchUser = async (id) => { @@ -58,22 +58,19 @@ export default function Perfil({ params }) { setProfileData(data); }); } + fetchUser(params.id) } }, [params.id, client, token, uid]) - return ( <> <Overlay> - <div className="bg-main " id="div-main-profile"> {profileData && <UserCard profileData={profileData} idLogin={idLogin} />} </div> </Overlay> - </> - ); } \ No newline at end of file diff --git a/src/app/submit/components/AuthorSelection.js b/src/app/publicar/components/AuthorSelection.js similarity index 100% rename from src/app/submit/components/AuthorSelection.js rename to src/app/publicar/components/AuthorSelection.js diff --git a/src/app/submit/components/FieldLabel.js b/src/app/publicar/components/FieldLabel.js similarity index 100% rename from src/app/submit/components/FieldLabel.js rename to src/app/publicar/components/FieldLabel.js diff --git a/src/app/submit/components/FileDrag.js b/src/app/publicar/components/FileDrag.js similarity index 54% rename from src/app/submit/components/FileDrag.js rename to src/app/publicar/components/FileDrag.js index 6b8d4c701010176fe6c0b9aa327ddaaad25a9965..6ebddb5eba3a9af427c59486c3067c823326649e 100644 --- a/src/app/submit/components/FileDrag.js +++ b/src/app/publicar/components/FileDrag.js @@ -1,23 +1,10 @@ "use client"; -import { - Button, - Divider, - Input, - TextField, - VisuallyHiddenInput, -} from "@mui/material"; -import { useState } from "react"; -import SubmitLink from "./SubmitLink"; import UploadFile from "./UploadFile"; export const FileUpload = ({ setDraft, draft, file, setFile, attachmentId, setAttachmentId }) => { - - return ( <> <UploadFile draft={draft} file={file} setFile={setFile} attachmentId={attachmentId} setAttachmentId={setAttachmentId}/> - {/* <Divider>OU</Divider> - <SubmitLink setDraft={setDraft} draft={draft} /> */} </> ); }; diff --git a/src/app/submit/components/Form.js b/src/app/publicar/components/Form.js similarity index 78% rename from src/app/submit/components/Form.js rename to src/app/publicar/components/Form.js index 5b09c7cf2f337400d18601ba321219feafef32c1..93d354d300efca400ea42b318d8777877ef69b3d 100644 --- a/src/app/submit/components/Form.js +++ b/src/app/publicar/components/Form.js @@ -21,29 +21,27 @@ export default function Form() { 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, - }, - }) + 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]) - + }, [client, token, uid, draft]) return ( <div className="w-[50%] max-xl:w-full mt-10"> <HorizontalLinearAlternativeLabelStepper step={step} /> - {step === 0 && <InfoForm setStep={setStep} draft={draft} setDraft={setDraft} authorType={authorType} setAuthorType={setAuthorType}/>} - {step === 1 && <UploadForm setStep={setStep} draft={draft} setDraft={setDraft} file={file} setFile={setFile} attachmentId={attachmentId} setAttachmentId={setAttachmentId}/>} - {step === 2 && <RevisionForm setStep={setStep} draft={draft} setDraft={setDraft}/>} + {step === 0 && <InfoForm setStep={setStep} draft={draft} setDraft={setDraft} authorType={authorType} setAuthorType={setAuthorType} />} + {step === 1 && <UploadForm setStep={setStep} draft={draft} setDraft={setDraft} file={file} setFile={setFile} attachmentId={attachmentId} setAttachmentId={setAttachmentId} />} + {step === 2 && <RevisionForm setStep={setStep} draft={draft} setDraft={setDraft} />} </div> ); } diff --git a/src/app/submit/components/InfoForm.js b/src/app/publicar/components/InfoForm.js similarity index 84% rename from src/app/submit/components/InfoForm.js rename to src/app/publicar/components/InfoForm.js index 54beac1ff52fb22bf017b2cc61994bc7b03a38eb..d7f7afc7ed3edcfb8d05d52bd18e89edace4f114 100644 --- a/src/app/submit/components/InfoForm.js +++ b/src/app/publicar/components/InfoForm.js @@ -1,45 +1,15 @@ import { Checkbox, FormGroup, Paper, TextField, Button } from "@mui/material"; -import { FileUpload } from "./FileDrag"; import { useState, useEffect } from "react"; import FieldLabel from "./FieldLabel"; -import Radio from "@mui/material/Radio"; -import RadioGroup from "@mui/material/RadioGroup"; import FormControlLabel from "@mui/material/FormControlLabel"; -import FormControl from "@mui/material/FormControl"; -import FormLabel from "@mui/material/FormLabel"; import SubjectSelection from "./SubjectSelection"; import ObjectTypeSelection from "./ObjectTypeSelection"; -import { objectTypes } from "@/app/components/ObjectTypes"; import LicenseSelection from "./LicenseSelection"; -import Chip from "@mui/material/Chip"; import TagInput from "./TagsInput"; import AuthorSelection from "./AuthorSelection"; import mecredApi from "@/axiosConfig"; export default function UploadForm({ setStep, draft, setDraft, authorType, setAuthorType }) { - // const languagesAvailable = [ - // "Português", - // "Inglês", - // "Espanhol", - // "Francês", - // "Alemão", - // "Italiano", - // "Mandarim", - // "Russo", - // "Japonês", - // "LIBRAS", - // "Outro", - // ]; - - // const scholarityLevel = [ - // "Educação Infantil", - // "Ensino Fundamental I (1° até o 5° ano)", - // "Ensino Fundamental II (do 6° até o 9º ano)", - // "Ensino Médio", - // "Ensino Superior", - // "Outros ", - // ]; - const [languagesAvailable, setLanguagesAvailable] = useState([]); const [scholarityLevelsAvailable, setScholarityLevelAvailable] = useState([]); @@ -58,15 +28,14 @@ export default function UploadForm({ setStep, draft, setDraft, authorType, setAu const [languageIds, setLanguageIds] = useState(draft?.language_ids ?? []); const [scholarityLevelsId, setScholarityLevelsId] = useState(draft?.educational_stages_id ?? []); - useEffect(() => { mecredApi.get("/languages") - .then((response) => {setLanguagesAvailable(response.data)}); + .then((response) => { setLanguagesAvailable(response.data) }); }, []); - + useEffect(() => { mecredApi.get("/educational_stages") - .then((response) => {setScholarityLevelAvailable(response.data)}); + .then((response) => { setScholarityLevelAvailable(response.data) }); }, []); const handleTitleChange = (e) => setTitle(e.target.value); @@ -89,8 +58,7 @@ export default function UploadForm({ setStep, draft, setDraft, authorType, setAu }; const handleLanguagesChange = (e) => { - const lang = JSON.parse(e.target.value); - console.log(lang) + const lang = JSON.parse(e.target.value); if (languages.includes(lang.name)) { setLanguages(l => l.filter((language) => language !== lang.name)); setLanguageIds(l => l.filter((language) => language !== lang.id)); @@ -108,10 +76,9 @@ export default function UploadForm({ setStep, draft, setDraft, authorType, setAu }; const handleScholarityChange = (e) => { - const sl = JSON.parse(e.target.value); - console.log(sl) - if (scholarityLevelsName.includes(sl.name)){ - setScholarityLevelsName(s => s.filter(( educational_stages) => educational_stages!== sl.name)); + const sl = JSON.parse(e.target.value); + if (scholarityLevelsName.includes(sl.name)) { + setScholarityLevelsName(s => s.filter((educational_stages) => educational_stages !== sl.name)); setScholarityLevelsId(scholarityLevelsId.filter((educational_stages) => educational_stages !== (JSON.stringify(sl.id)))); } else { @@ -134,7 +101,7 @@ export default function UploadForm({ setStep, draft, setDraft, authorType, setAu tags: tags, author: author, object_type_id: objectTypes[0], - object_type:objectTypes, + object_type: objectTypes, language_ids: languageIds, language: languages, educational_stages: scholarityLevelsId, @@ -142,13 +109,11 @@ export default function UploadForm({ setStep, draft, setDraft, authorType, setAu subjects: subjects, license_id: licenseValue, })); - //salvar aqui para atingir a opção de finalizar mais tarde setStep((curr) => curr + 1); - } - + return ( - <form className="mb-10" onSubmit={handleSubmit} onKeyDown={(e)=>{ if(e.key === "Enter") e.preventDefault()}} > + <form className="mb-10" onSubmit={handleSubmit} onKeyDown={(e) => { if (e.key === "Enter") e.preventDefault() }} > <Paper className="rounded-lg p-10 max-xl:p-5 max-xl:mx-5" elevation={1}> <h1 className="text-main-text font-light text-2xl text-center"> Os campos marcados com * são obrigatórios @@ -205,7 +170,7 @@ export default function UploadForm({ setStep, draft, setDraft, authorType, setAu <FormControlLabel onChange={handleLanguagesChange} key={index} - control={<Checkbox checked={languages.includes(language.name)}/>} + control={<Checkbox checked={languages.includes(language.name)} />} value={JSON.stringify(language)} label={<span className="text-main-text">{language.name}</span>} /> @@ -237,7 +202,7 @@ export default function UploadForm({ setStep, draft, setDraft, authorType, setAu </Paper> <div className="flex w-full justify-end p-5"> <Button - type="button" + type="button" variant="text" className="normal-case w-36 text-base text-main-text font-bold" > diff --git a/src/app/submit/components/LicenseSelection.js b/src/app/publicar/components/LicenseSelection.js similarity index 87% rename from src/app/submit/components/LicenseSelection.js rename to src/app/publicar/components/LicenseSelection.js index 7618296603e80ca3402f6e582641afbc8b29b2b0..7829c9ad6563c0d6e5b2b8ed340609a9d122b13a 100644 --- a/src/app/submit/components/LicenseSelection.js +++ b/src/app/publicar/components/LicenseSelection.js @@ -5,19 +5,16 @@ import { licenses } from "./Licenses"; import FieldLabel from "./FieldLabel"; export default function LicenseSelection({ handleRadioChange, selectedValue }) { - console.log(selectedValue) return ( <div className="flex flex-col items-start"> - <FieldLabel name="Licensa do Uso do Conteúdo*"/> + <FieldLabel name="Licensa do Uso do Conteúdo*" /> <RadioGroup aria-labelledby="demo-radio-buttons-group-label" name="radio-buttons-group" className="mb-5" value={selectedValue} - - > - {licenses.map((license, index) => ( + {licenses.map((license) => ( <div key={license.id}> <FormControlLabel onChange={handleRadioChange} diff --git a/src/app/submit/components/Licenses.js b/src/app/publicar/components/Licenses.js similarity index 100% rename from src/app/submit/components/Licenses.js rename to src/app/publicar/components/Licenses.js diff --git a/src/app/submit/components/ObjectTypeSelection.js b/src/app/publicar/components/ObjectTypeSelection.js similarity index 99% rename from src/app/submit/components/ObjectTypeSelection.js rename to src/app/publicar/components/ObjectTypeSelection.js index 6521b29c52a14e93858cc2fec1979322d7859d8e..a8ca3bcf1bc8f913ac45eea3a9bc4336c4136816 100644 --- a/src/app/submit/components/ObjectTypeSelection.js +++ b/src/app/publicar/components/ObjectTypeSelection.js @@ -13,7 +13,6 @@ export default function ObjectTypeSelection({ selected, handleSelection }) { selected={selected} handleSelection={handleSelection} subject={subject} - /> ))} </div> diff --git a/src/app/submit/components/RevisionForm.js b/src/app/publicar/components/RevisionForm.js similarity index 93% rename from src/app/submit/components/RevisionForm.js rename to src/app/publicar/components/RevisionForm.js index a31d85ddeadb7e460da56cfc225a55d4bd49dab6..92968508654562479f9bde7e4f1c590d0383b706 100644 --- a/src/app/submit/components/RevisionForm.js +++ b/src/app/publicar/components/RevisionForm.js @@ -2,7 +2,6 @@ import mecredApi from "@/axiosConfig" import { Button, Paper } from "@mui/material" import { getStoredValue } from "@/app/handlers/localStorageHandler"; - function headerConfig() { return { headers: { @@ -16,7 +15,6 @@ function headerConfig() { } export default function RevisionForm({ setStep, draft, setDraft }) { - let data = { attachmentID: draft.attachmentID, file: draft.file, @@ -51,15 +49,9 @@ export default function RevisionForm({ setStep, draft, setDraft }) { }} - - // () => mecredApi - // .get("/learning_objects/" + draft.id, headerConfig()) - // .then ((response) => (console.log(response.data))) ) - } - return ( <form> <Paper className="rounded-lg p-10 max-xl:mx-5" elevation={1}> @@ -88,16 +80,13 @@ export default function RevisionForm({ setStep, draft, setDraft }) { Voltar </Button> <Button - // href="/" className=" border-secondary w-36 rounded-lg hover:bg-secondary-hover bg-secondary text-base text-white font-bold normal-case flex " variant="outlined" onClick={submitHomologation} > submeter </Button> - </div> </form> ) - } \ No newline at end of file diff --git a/src/app/submit/components/SelectOption.js b/src/app/publicar/components/SelectOption.js similarity index 94% rename from src/app/submit/components/SelectOption.js rename to src/app/publicar/components/SelectOption.js index 627e61e23907e3b8cbd393e9606be5889e89e931..228b8a1a5e1e8588447c38686db0b090e2d03675 100644 --- a/src/app/submit/components/SelectOption.js +++ b/src/app/publicar/components/SelectOption.js @@ -1,4 +1,3 @@ -import { Checkbox } from "@mui/material"; import Image from "next/image"; export default function SelectOption({ selected, handleSelection, subject }) { diff --git a/src/app/submit/components/Stepper.js b/src/app/publicar/components/Stepper.js similarity index 95% rename from src/app/submit/components/Stepper.js rename to src/app/publicar/components/Stepper.js index 7ebf2a8d40bd03b11024f37c80fcc967035502a6..c5bf94065ca81c659728085804ab16e36432b3b6 100644 --- a/src/app/submit/components/Stepper.js +++ b/src/app/publicar/components/Stepper.js @@ -1,4 +1,3 @@ -import * as React from 'react'; import Box from '@mui/material/Box'; import Stepper from '@mui/material/Stepper'; import Step from '@mui/material/Step'; diff --git a/src/app/submit/components/SubjectSelection.js b/src/app/publicar/components/SubjectSelection.js similarity index 100% rename from src/app/submit/components/SubjectSelection.js rename to src/app/publicar/components/SubjectSelection.js diff --git a/src/app/submit/components/SubmitLink.js b/src/app/publicar/components/SubmitLink.js similarity index 53% rename from src/app/submit/components/SubmitLink.js rename to src/app/publicar/components/SubmitLink.js index c5775a5749609645e998b8905d3498db41da12a0..958b3445d03c5f868c0579db86ec42e9bec0d4ab 100644 --- a/src/app/submit/components/SubmitLink.js +++ b/src/app/publicar/components/SubmitLink.js @@ -3,10 +3,8 @@ import { TextField, } from "@mui/material"; import { useState } from "react"; -import mecredApi from "@/axiosConfig"; export default function SubmitLink({ setDraft, draft }) { - console.log(draft) const [link, setLink] = useState(draft.link !== undefined ? draft.link : "") const handleLink = (e) => { @@ -17,7 +15,6 @@ export default function SubmitLink({ setDraft, draft }) { "(?:(?:(?:https?|ftp):\/\/))(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,}))\.?)(?::\d{2,5})*(?:[/?#]\S*)?", "i" ) let flag = (urlRegex.test(userInput)) - console.log(flag) setLink(userInput) } @@ -29,30 +26,28 @@ export default function SubmitLink({ setDraft, draft }) { ...curr, link: link })) - } return ( - - <div className="flex flex-col w-full min-h-72 items-center justify-around"> - <div className={`flex h-24 w-24 my-5 mx-10 rounded-full bg-main`} /> - <div className="flex flex-col"> - <h1 className="h-full flex flex-col justify-center text-center text-2xl text-main-text"> - Envie o link de um recurso a partir de outro site. - </h1> - <TextField - fullWidth label="Link" - className="my-5" - onChange={handleLink} - /> - </div> - <Button - variant="contained" - className="text-main font-bold px-10 mb-10 rounded-lg w-64 bg-secondary hover:bg-secondary-hover" - onClick={handleSubmit} - > - ENVIAR LINK - </Button> + <div className="flex flex-col w-full min-h-72 items-center justify-around"> + <div className={`flex h-24 w-24 my-5 mx-10 rounded-full bg-main`} /> + <div className="flex flex-col"> + <h1 className="h-full flex flex-col justify-center text-center text-2xl text-main-text"> + Envie o link de um recurso a partir de outro site. + </h1> + <TextField + fullWidth label="Link" + className="my-5" + onChange={handleLink} + /> </div> + <Button + variant="contained" + className="text-main font-bold px-10 mb-10 rounded-lg w-64 bg-secondary hover:bg-secondary-hover" + onClick={handleSubmit} + > + ENVIAR LINK + </Button> + </div> ) } \ No newline at end of file diff --git a/src/app/submit/components/TagsInput.js b/src/app/publicar/components/TagsInput.js similarity index 82% rename from src/app/submit/components/TagsInput.js rename to src/app/publicar/components/TagsInput.js index 642388b81445b49cfa23baa4566465946aebf693..4f15e941b6c9c47af0cea7da62b1b10fd923fa7a 100644 --- a/src/app/submit/components/TagsInput.js +++ b/src/app/publicar/components/TagsInput.js @@ -1,7 +1,6 @@ import Chip from '@mui/material/Chip'; -export default function TagInput ({ tags, handleTagDelete }) { - +export default function TagInput({ tags, handleTagDelete }) { return ( <div className="flex min-h-5 flex-wrap"> {tags.map((tag, index) => ( diff --git a/src/app/submit/components/UploadFile.js b/src/app/publicar/components/UploadFile.js similarity index 94% rename from src/app/submit/components/UploadFile.js rename to src/app/publicar/components/UploadFile.js index c3f8458ee4b9a797b06e238cef2287992df9ac5d..bbb002b0d278da12eddb91fbe86696421ca687c6 100644 --- a/src/app/submit/components/UploadFile.js +++ b/src/app/publicar/components/UploadFile.js @@ -1,11 +1,10 @@ "use client"; -import { useState } from "react"; import { Button } from "@mui/material" import mecredApi from "@/axiosConfig"; import { getStoredValue } from "@/app/handlers/localStorageHandler"; import FileDownloadIcon from '@mui/icons-material/FileDownload'; -const chunkSize = 262144 +const chunkSize = 262144; function headerConfig() { return { @@ -21,14 +20,11 @@ function headerConfig() { export default function UploadFile({ draft, file, setFile, attachmentId, setAttachmentId }) { const fileUpload = async (file) => { - - // Número de chunks para mandar let numChunksToSend = Math.ceil(file.size / chunkSize); let start = 0; let response = null; - console.log("mandando arquivo") for (let i = 0; i < numChunksToSend; i++) { // Queremos um slice de chunkSize, mas o último slice pode ser menor que chunkSize. let fileSlice = file.slice(start, Math.min(start + chunkSize, file.size)); @@ -48,14 +44,9 @@ export default function UploadFile({ draft, file, setFile, attachmentId, setAtta headerConfig() ); - console.log("mandado " + (i + 1) + "/" + numChunksToSend); - console.log(response); - start += chunkSize; } - console.log("terminado", response); setAttachmentId(response.data.id) - } const handleDelete = async () => { @@ -67,13 +58,10 @@ export default function UploadFile({ draft, file, setFile, attachmentId, setAtta .then(setAttachmentId(null)) } - const onFileChange = (e) => { e.preventDefault() - console.log(e); const fileInput = e.target?.files[0]; setFile(fileInput); - console.log(fileInput); if (!fileInput) return; @@ -144,7 +132,6 @@ export default function UploadFile({ draft, file, setFile, attachmentId, setAtta variant="contained" onClick={handleDelete} > - Excluir arquivo </Button> </div> diff --git a/src/app/submit/components/UploadForm.js b/src/app/publicar/components/UploadForm.js similarity index 99% rename from src/app/submit/components/UploadForm.js rename to src/app/publicar/components/UploadForm.js index eda91c11376469506becbb73d82c0dba104af5c0..3ce0202728092ef5a9d790cf25885a3cdf89fa81 100644 --- a/src/app/submit/components/UploadForm.js +++ b/src/app/publicar/components/UploadForm.js @@ -38,9 +38,7 @@ export default function UploadForm({ setStep, draft, setDraft, file, setFile, at ...curr, attachmentID: (JSON.stringify(attachmentId)), file: file?.name - })) - }} > Continuar diff --git a/src/app/submit/page.js b/src/app/publicar/page.js similarity index 100% rename from src/app/submit/page.js rename to src/app/publicar/page.js diff --git a/src/app/recurso/[id]/components/actionButtons.js b/src/app/recurso/[id]/components/actionButtons.js index 7a6cf6d12ded9902d2d9e1dbcd1b4e7bf9f5d902..a8419c1a30e52f276bbf987ccd1329e62886b0a2 100644 --- a/src/app/recurso/[id]/components/actionButtons.js +++ b/src/app/recurso/[id]/components/actionButtons.js @@ -3,7 +3,6 @@ import DownloadOutlinedIcon from "@mui/icons-material/DownloadOutlined"; import BookmarkBorderOutlinedIcon from "@mui/icons-material/BookmarkBorderOutlined"; import OpenInNewOutlinedIcon from "@mui/icons-material/OpenInNewOutlined"; import ShareOutlinedIcon from "@mui/icons-material/ShareOutlined"; -import StarHalfOutlinedIcon from "@mui/icons-material/StarHalfOutlined"; import FavoriteOutlinedIcon from "@mui/icons-material/FavoriteOutlined"; import FavoriteBorderOutlinedIcon from "@mui/icons-material/FavoriteBorderOutlined"; import FlagOutlinedIcon from "@mui/icons-material/FlagOutlined"; @@ -12,7 +11,7 @@ import mecredApi from "@/axiosConfig"; import { isLoggedIn, useLoginBarrier } from "@/app/handlers/loginHandler"; import { getStoredValue } from "@/app/handlers/localStorageHandler"; import { useState, useEffect } from "react"; -import ShareModal from "../../../components/shareModal"; +import ShareModal from "../../../components/ShareModal"; import ReportModal from "./reportModal"; import CollectModal from "./collectModal"; @@ -33,7 +32,7 @@ export default function ActionButtons({ learningObject, setNeedLoginOpen }) { const [reported, setReported] = useState(false); const [collectOpen, setCollectOpen] = useState(false) const [userData, setUserData] = useState(""); - + const token = getStoredValue("access_token"); const client = getStoredValue("client"); const uid = getStoredValue("uid"); @@ -51,7 +50,7 @@ export default function ActionButtons({ learningObject, setNeedLoginOpen }) { mecredApi .get( "https://api.portalmec.c3sl.ufpr.br/v1/learning_objects_complaints/" + - learningObject.id, + learningObject.id, {}, { headers: { @@ -126,19 +125,21 @@ export default function ActionButtons({ learningObject, setNeedLoginOpen }) { if (typeof window !== "undefined") { window.open( mecredApi.getUri() + - `/learning_objects/${learningObject.id}/download` + `/learning_objects/${learningObject.id}/download` ); } }, extraProps: {}, }, - { name: "Colecionar", icon: <BookmarkBorderOutlinedIcon />, action: () => { - if (!isLoggedIn()) { - setNeedLoginOpen(true); - return; + { + name: "Colecionar", icon: <BookmarkBorderOutlinedIcon />, action: () => { + if (!isLoggedIn()) { + setNeedLoginOpen(true); + return; + } + setCollectOpen(true) } - setCollectOpen(true) - } }, + }, { name: "Compartilhar", icon: <ShareOutlinedIcon />, @@ -147,7 +148,6 @@ export default function ActionButtons({ learningObject, setNeedLoginOpen }) { }, extraProps: {}, }, - //{ name: "Avaliar", icon: <StarHalfOutlinedIcon />, action: () => {} }, { name: reported ? "Reportado" : "Reportar", icon: reported ? <FlagIcon /> : <FlagOutlinedIcon />, @@ -185,7 +185,7 @@ export default function ActionButtons({ learningObject, setNeedLoginOpen }) { open={reportOpen} onClose={() => setReportOpen(false)} /> - {userData && <CollectModal open={collectOpen} onClose={() => setCollectOpen(false)} idLogin={userData["id"]} resourceId={learningObject.id}/>} + {userData && <CollectModal open={collectOpen} onClose={() => setCollectOpen(false)} idLogin={userData["id"]} resourceId={learningObject.id} />} <div className="flex justify-start py-4 flex-wrap overflow-x-auto"> {buttonInfo.map(genButton)} </div> diff --git a/src/app/recurso/[id]/components/collectModal.js b/src/app/recurso/[id]/components/collectModal.js index 6756fa009aebfb5399cbffc33aa020acdbd4f7ff..f6cbf755c45dd34ec4cfd07f87833c822b21e28a 100644 --- a/src/app/recurso/[id]/components/collectModal.js +++ b/src/app/recurso/[id]/components/collectModal.js @@ -47,6 +47,7 @@ export default function CollectModal({ open, onClose, idLogin, resourceId }) { setCollections(data) }) } + fetchTotalCount(idLogin) fetchCollections(idLogin, totalCount) }, [idLogin, token, client, uid, totalCount]) @@ -59,7 +60,6 @@ export default function CollectModal({ open, onClose, idLogin, resourceId }) { } } - mecredApi.post(url, payload, { headers: { "access-token": token, @@ -70,7 +70,7 @@ export default function CollectModal({ open, onClose, idLogin, resourceId }) { }, }).then(({ data }) => { if (data.errors.length !== 0) { - if (data.errors[0].error_type === "repeated"){ + if (data.errors[0].error_type === "repeated") { setRepeatedOpen(true) } } else { @@ -82,7 +82,7 @@ export default function CollectModal({ open, onClose, idLogin, resourceId }) { const ModalRepeat = ({ open, onClose }) => { return ( <Modal open={open} onClose={onClose} className="grid place-items-center"> - <div className="flex flex-col grid justify-items-center bg-main p-3 rounded mx-2 "> + <div className="flex flex-col justify-items-center bg-main p-3 rounded mx-2"> <p className="text-xl text-main-text mb-2">Você já guardou esse recurso nessa coleção!</p> <button className=" text-sm p-2 w-[20%] text-main-text border-main rounded-lg normal-case h-9 font-bold bg-main hover:bg-main-hover" @@ -91,7 +91,6 @@ export default function CollectModal({ open, onClose, idLogin, resourceId }) { Ok </button> </div> - </Modal> ) } @@ -99,7 +98,7 @@ export default function CollectModal({ open, onClose, idLogin, resourceId }) { const ModalSucess = ({ open, onClose }) => { return ( <Modal open={open} onClose={onClose} className="grid place-items-center"> - <div className="flex flex-col grid justify-items-center bg-main p-3 rounded"> + <div className="flex flex-col justify-items-center bg-main p-3 rounded"> <p className="text-xl text-main-text mb-2">Recurso guardado com sucesso!</p> <button className=" text-sm p-2 w-[20%] text-main-text border-main rounded-lg normal-case h-9 font-bold bg-main hover:bg-main-hover" @@ -108,14 +107,12 @@ export default function CollectModal({ open, onClose, idLogin, resourceId }) { Ok </button> </div> - </Modal> ) } return ( - <Modal open={open} onClose={onClose} @@ -127,18 +124,15 @@ export default function CollectModal({ open, onClose, idLogin, resourceId }) { <p className="text-2xl font-bold text-main-text">Guardar Recurso</p> <p className="text-xl text-main-text mb-2">Escolha a coleção que deseja guardar esse recurso</p> <div className="overflow-auto -mx-2"> - {collections.map((item, i) => { return ( <div key={i} className="flex flex-col justify-between mx-2"> <div className="flex justify-between py-1 "> <div> - {item["privacy"] === "private" ? <LockIcon className="mr-2 text-main-text" /> : <LockOpenIcon className="mr-2 text-main-text" /> } - <p className=" text-main-text text-lg inline"> {item["name"]} </p> @@ -150,16 +144,12 @@ export default function CollectModal({ open, onClose, idLogin, resourceId }) { Guardar </button> </div> - {i < collections.length - 1 && <Divider flexItem className="my-2" />} - </div> - ) })} </div> <div className="flex justify-center"> - <button className="text-sm p-2 w-[20%] text-main-text border-main rounded-lg normal-case h-9 font-bold bg-main hover:bg-main-hover" onClick={() => onClose()} diff --git a/src/app/recurso/[id]/components/metrics.js b/src/app/recurso/[id]/components/metrics.js index b5eebd74e688c822e6fe20b63ddcecd04c506544..37451ea33c233aa3eb610fa7ca82309529d3463c 100644 --- a/src/app/recurso/[id]/components/metrics.js +++ b/src/app/recurso/[id]/components/metrics.js @@ -12,7 +12,6 @@ const genMetric = ({ icon, name, data }) => { <div className="m-1 text-main-text"> {data} </div> - </div> ); } diff --git a/src/app/recurso/[id]/components/publisherInfo.js b/src/app/recurso/[id]/components/publisherInfo.js index 8ea6d06c367d45d859c90299a765a03831212542..5b75b07d612220b6869b2b4cbcfac4e8feb23115 100644 --- a/src/app/recurso/[id]/components/publisherInfo.js +++ b/src/app/recurso/[id]/components/publisherInfo.js @@ -11,7 +11,6 @@ export default function PublisherInfo({ publisher }) { const token = getStoredValue("access_token") const client = getStoredValue("client") const uid = getStoredValue("uid") - const expiry = getStoredValue("expiry") useEffect(() => { setFollowed(publisher?.followed ?? false); @@ -58,7 +57,7 @@ export default function PublisherInfo({ publisher }) { </div> <div className="font-normal text-md truncate"> {publisher.description} - </div> + </div> </div> <div className="flex justify-end flex-grow flex-shrink-0 p-3 truncate"> <Button diff --git a/src/app/recurso/[id]/components/relatedResources.js b/src/app/recurso/[id]/components/relatedResources.js index bc092d88b69d267e4790b2663e0cf5667f131fa5..04aabe8a5a1b133213821080055ddcc8b60c215d 100644 --- a/src/app/recurso/[id]/components/relatedResources.js +++ b/src/app/recurso/[id]/components/relatedResources.js @@ -5,7 +5,7 @@ import { useMediaQuery } from "@mui/material"; const NUM_RELATED = 12; -export default function RelatedResources({learningObject}) { +export default function RelatedResources({ learningObject }) { const [related, setRelated] = useState([]); useEffect(() => { diff --git a/src/app/recurso/[id]/components/reportModal.js b/src/app/recurso/[id]/components/reportModal.js index 5c9a4f9ef72b7c7ed9c48dba9bd13fae61bc0bf0..e452935afe16ed9c6f9b08b9dc1f060f50ff8107 100644 --- a/src/app/recurso/[id]/components/reportModal.js +++ b/src/app/recurso/[id]/components/reportModal.js @@ -2,15 +2,11 @@ import { Button, FormControl, FormControlLabel, - FormLabel, Modal, Radio, RadioGroup, TextField, } from "@mui/material"; -import Image from "next/image"; -import ContentCopyIcon from "@mui/icons-material/ContentCopy"; -import { usePathname } from "next/navigation"; import { useState, useEffect } from "react"; import { getStoredValue } from "@/app/handlers/localStorageHandler"; import mecredApi from "@/axiosConfig"; @@ -27,7 +23,7 @@ export default function ReportModal({ open, onClose, learningObject }) { useEffect(() => { if (!isLoggedIn()) return; - + const userData = JSON.parse(getStoredValue("user_data")); setUser(userData); }, []); diff --git a/src/app/recurso/[id]/components/resourceInfo.js b/src/app/recurso/[id]/components/resourceInfo.js index 74be1278155111d6a03676a1c20183d51c562e9c..25dbaab47a5f2f5bf8aa114d527eaed6232b7413 100644 --- a/src/app/recurso/[id]/components/resourceInfo.js +++ b/src/app/recurso/[id]/components/resourceInfo.js @@ -10,9 +10,7 @@ export default function ResourceInfo({ learningObject }) { const viewMoreComponentRef = createRef(null); const [value, setValue] = useState("description"); - const [viewMore, setViewMore] = useState(true); - const [showViewMore, setShowViewMore] = useState(false); useLayoutEffect(() => { diff --git a/src/app/recurso/[id]/components/resourcePreview.js b/src/app/recurso/[id]/components/resourcePreview.js index 786c110f8795b84531b3ff14dbb1424a6260d337..efc82ec76ba7232545f7f84643fbf4a4e7fa324c 100644 --- a/src/app/recurso/[id]/components/resourcePreview.js +++ b/src/app/recurso/[id]/components/resourcePreview.js @@ -1,13 +1,9 @@ -import mecredApi from "@/axiosConfig"; -import { Paper } from "@mui/material"; -import OpenInNewOutlinedIcon from "@mui/icons-material/OpenInNewOutlined"; import Image from "next/image"; function youtubeURLtoID(url) { if (!url) return null; - let regex = - /^(?:https?:\/\/)?(?:m\.|www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; + let regex = /^(?:https?:\/\/)?(?:m\.|www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; let result = url.match(regex); if (result) return result[1]; @@ -19,9 +15,6 @@ export default function ResourcePreview({ learningObject }) { const uri = "https://api.portalmec.c3sl.ufpr.br/inline/" + learningObject.id; - - - const getDefaultThumbnail = (type) => { let thumbnail_url; @@ -56,26 +49,22 @@ export default function ResourcePreview({ learningObject }) { thumbnail_url = "/images/red.png"; break; } - return thumbnail_url; }; - - - let content = ( <div className="relative aspect-video w-full h-full"> - < Image - sizes="100vw" - fill - style={{ - width: '100%', - objectFit: 'cover' - }} - src={getDefaultThumbnail(learningObject.object_type)} - alt={learningObject.name} - /> - </div> + < Image + sizes="100vw" + fill + style={{ + width: '100%', + objectFit: 'cover' + }} + src={getDefaultThumbnail(learningObject.object_type)} + alt={learningObject.name} + /> + </div> ); let youtubeID = youtubeURLtoID(learningObject.link); @@ -127,7 +116,7 @@ export default function ResourcePreview({ learningObject }) { controls > <source src={uri} type={learningObject.default_mime_type} /> - </audio> + </audio> </div> </div> ); @@ -140,7 +129,7 @@ export default function ResourcePreview({ learningObject }) { style={{ width: '100%', objectFit: 'cover' - }} + }} src={"https://api.portalmec.c3sl.ufpr.br" + learningObject.thumbnail} alt={learningObject.name} /> diff --git a/src/app/recurso/[id]/components/specifications.js b/src/app/recurso/[id]/components/specifications.js index fd67e1b9a33180da911dae7a90c28bb38d347a76..5872eb0815ae181a158606c750f1de1f8e461dc9 100644 --- a/src/app/recurso/[id]/components/specifications.js +++ b/src/app/recurso/[id]/components/specifications.js @@ -2,25 +2,24 @@ import StarHalfOutlinedIcon from "@mui/icons-material/StarHalfOutlined"; const genSpecification = ({ icon, name, data }) => { return ( - <div key={name} className="p-0 flex items-center"> - <div className="p-2 text-main-text"> - {icon} - </div> - <div className="text-main-text font-bold "> - {name}: - </div> - <div className="m-1 text-main-text"> - {data} + <div key={name} className="p-0 flex items-center"> + <div className="p-2 text-main-text"> + {icon} + </div> + <div className="text-main-text font-bold "> + {name}: + </div> + <div className="m-1 text-main-text"> + {data} + </div> </div> - - </div> ); } function formatSize(size) { - if (size < 1000) + if (size < 1000) return `${size} b`; - + if (size < 1000000) return `${(size / 1000).toFixed(2)} Kb`; @@ -29,11 +28,11 @@ function formatSize(size) { export default function Specifications({ learningObject }) { const specInfo = [ - {icon: <StarHalfOutlinedIcon/>, enabled: true, name: "Idioma", data: learningObject.language.map((lang) => lang.name).join(", ") ?? "Não Informado"}, - {icon: <StarHalfOutlinedIcon/>, enabled: true, name: "Nível de Ensino", data: learningObject.educational_stages.map((stage) => stage.name).join(", ")}, - {icon: <StarHalfOutlinedIcon/>, enabled: true, name: "Tipo de Mídia", data: learningObject.object_type}, - {icon: <StarHalfOutlinedIcon/>, enabled: true, name: "Disciplina", data: learningObject.subjects.map((subject) => subject.name).join(", ")}, - {icon: <StarHalfOutlinedIcon/>, enabled: !learningObject.link, name: "Tamanho", data: formatSize(learningObject?.attachments[0]?.size)}, + { icon: <StarHalfOutlinedIcon />, enabled: true, name: "Idioma", data: learningObject.language.map((lang) => lang.name).join(", ") ?? "Não Informado" }, + { icon: <StarHalfOutlinedIcon />, enabled: true, name: "Nível de Ensino", data: learningObject.educational_stages.map((stage) => stage.name).join(", ") }, + { icon: <StarHalfOutlinedIcon />, enabled: true, name: "Tipo de Mídia", data: learningObject.object_type }, + { icon: <StarHalfOutlinedIcon />, enabled: true, name: "Disciplina", data: learningObject.subjects.map((subject) => subject.name).join(", ") }, + { icon: <StarHalfOutlinedIcon />, enabled: !learningObject.link, name: "Tamanho", data: formatSize(learningObject?.attachments[0]?.size) }, ]; return ( <div className="flex flex-col p-1 text-main-text"> diff --git a/src/app/recurso/[id]/components/tags.js b/src/app/recurso/[id]/components/tags.js index 9532f8a9c7b8bef9705093c6ba2e6dcb3551c37d..ae809ec0e8f29f579b4c057d04e43043c8cf2fd5 100644 --- a/src/app/recurso/[id]/components/tags.js +++ b/src/app/recurso/[id]/components/tags.js @@ -1,11 +1,9 @@ -import Link from "next/link"; - export default function Tags({ tags }) { if (!Array.isArray(tags)) return <></>; if (tags.length === 0) return <></>; - + let genLink = (tag) => <div className="underline px-1 flex-shrink-0 text-md font-bold" key={tag.id}>{tag.name}</div> return ( diff --git a/src/app/recurso/[id]/page.js b/src/app/recurso/[id]/page.js index b375afa8c927515d66314ade61e0de005112d22b..2d6abbc60504b14ddb3c914ff1c658a44cac7204 100644 --- a/src/app/recurso/[id]/page.js +++ b/src/app/recurso/[id]/page.js @@ -1,7 +1,4 @@ "use client"; -import Grid from "@mui/material/Unstable_Grid2/Grid2"; -import Header from "../../components/Header"; -import { Paper } from "@mui/material"; import { useEffect, useState } from "react"; import Tags from "./components/tags"; import ActionButtons from "./components/actionButtons"; @@ -9,7 +6,7 @@ import PublisherInfo from "./components/publisherInfo"; import Overlay from "../../components/Overlay"; import ResourceInfo from "./components/resourceInfo"; import RelatedResources from "./components/relatedResources"; -import { isLoggedIn, useLoginBarrier } from "@/app/handlers/loginHandler"; +import { isLoggedIn} from "@/app/handlers/loginHandler"; import mecredApi from "@/axiosConfig"; import { getStoredValue } from "@/app/handlers/localStorageHandler"; import Loading from "@/app/components/Loading"; diff --git a/src/app/learningObjects/page.js b/src/app/recursos/page.js similarity index 97% rename from src/app/learningObjects/page.js rename to src/app/recursos/page.js index 4d20c80d447b021b0ffde62be84ab7f52b06fcbe..c55069c521346eb87b5dc84f6c0c68409b95ba97 100644 --- a/src/app/learningObjects/page.js +++ b/src/app/recursos/page.js @@ -1,11 +1,7 @@ "use client" - import Content from "../components/Content" - export default function LearningObjects() { - - return ( <Content name={"Recursos"}/> ) diff --git a/src/app/register/index.js b/src/app/register/index.js deleted file mode 100644 index 9c3ae12236203526b553553c6c4f260b7152d64a..0000000000000000000000000000000000000000 --- a/src/app/register/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function Register() { - return <h1>REGIRTEAS</h1> -} \ No newline at end of file diff --git a/src/app/about/page.js b/src/app/sobre/page.js similarity index 86% rename from src/app/about/page.js rename to src/app/sobre/page.js index edc2d2040eaece4cb20a31ba9c4c9a54f01f3cae..e4d8dbb35f95e23ee5d07fd00f86d241a1e84286 100644 --- a/src/app/about/page.js +++ b/src/app/sobre/page.js @@ -6,7 +6,7 @@ export default function About() { return ( <Overlay> - <AboutComponent/> + <AboutComponent /> </Overlay> ) } \ No newline at end of file