diff --git a/frontend/src/pages/Home/index.js b/frontend/src/pages/Home/index.js
index f8b683e7..880825d4 100644
--- a/frontend/src/pages/Home/index.js
+++ b/frontend/src/pages/Home/index.js
@@ -26,7 +26,7 @@ const Home = () => {
Excluir eletiva
diff --git a/frontend/src/pages/Recommendations/index.js b/frontend/src/pages/Recommendations/index.js
index dd621473..87980007 100644
--- a/frontend/src/pages/Recommendations/index.js
+++ b/frontend/src/pages/Recommendations/index.js
@@ -1,256 +1,170 @@
-import {React, useState} from "react";
-import { useFormik } from "formik";
-import { useNavigate } from "react-router-dom";
-import { ChakraProvider } from "@chakra-ui/react";
-import ButtonCadastrar from "../../components/Button";
-import * as C from "./styles";
-import axios from "axios";
-import Header from "../../components/Header";
-import Footer from "../../components/Footer";
+import React, { useState, useEffect } from 'react';
+import axios from 'axios';
+import { ChakraProvider, useDisclosure } from '@chakra-ui/react'
+import Header from "../../components/Header/index.js";
+import Footer from "../../components/Footer/index.js";
+
import {
- Input,
Box,
- Center,
- FormControl,
- FormLabel,
- Select,
- Text,
- Stack,
Flex,
+ Heading,
+ Table,
+ Thead,
+ Tbody,
+ Tfoot,
+ Tr,
+ Th,
+ Td,
+ Checkbox,
+ TableContainer,
+ Button,
+ AlertDialog,
+ AlertDialogOverlay,
+ AlertDialogContent,
+ AlertDialogHeader,
+ AlertDialogBody,
+ AlertDialogFooter,
Container,
Alert,
AlertIcon
-} from "@chakra-ui/react";
-import { useToast } from "@chakra-ui/react";
-import * as yup from "yup";
+} from "@chakra-ui/react"
+;
const Recommendations = () => {
- const navigate = useNavigate();
- const toast = useToast();
+ const [trilhas, setTrilhas] = useState([]);
+ const [trilhasSelecionadas, setTrilhasSelecionadas] = useState([]);
+
+ const { isOpen, onOpen, onClose } = useDisclosure()
+ const cancelRef = React.useRef()
const [showAlert, setShowAlert] = useState(false);
-
- const formik = useFormik({
- initialValues: {
- nomeEletiva: "",
- descricao: "",
- serie: "",
- professor: "",
- vagas: "",
- horario: "",
- },
- validationSchema: yup.object({
- nomeEletiva: yup
- .string()
- .required("O nome da eletiva é obrigatório")
- .min(3, "O nome da eletiva deve ter pelo menos 3 caracteres")
- .max(40, "O nome da eletiva deve ter no máximo 40 caracteres"),
- descricao: yup
- .string()
- .required("A breve descrição é obrigatória")
- .max(150, "A breve descrição deve ter no máximo 150 caracteres"),
- serie: yup.string().required("A série é obrigatória"),
- professor: yup
- .string()
- .required("O professor responsável é obrigatório")
- .matches(/^[A-Za-z\s]+$/, "O nome do professor responsável não pode conter números"),
- vagas: yup
- .number()
- .required("O número de vagas é obrigatório")
- .min(15, "O número de vagas deve ser no mínimo 15")
- .max(30, "O número de vagas deve ser no máximo 30"),
- horario: yup
- .number()
- .required("O horário da disciplina é obrigatório")
- .min(1, "O horário da disciplina deve ser no mínimo o primeiro horário(1)")
- .max(5, "O horário da disciplina deve ser no máximo o quinto horário(5)"),
- }),
- onSubmit: async (values) => {
+ // Carregar trilhas do backend ao carregar o componente
+ useEffect(() => {
+ async function fetchTrilhas() {
try {
- const data = {
- name: values.nomeEletiva,
- description: values.descricao,
- school_year: parseInt(values.serie),
- teacher: values.professor,
- vacancies: parseInt(values.vagas),
- schedules: parseInt(values.horario),
- };
-
- const response = await axios.post("http://localhost:3001/elective/createElective", data);
-
- if (response.status === 201) {
- toast({
- title: "Eletiva cadastrada.",
- description: "Eletiva cadastrada com sucesso!",
- status: "success",
- duration: 2800,
- isClosable: true,
- position: "top",
- });
-
- // Sucesso, redirecionar ou realizar outras ações necessárias
-
- setShowAlert(true);
- setTimeout(() => {
- navigate("/home");
- }, 1000);
-
- } else {
- // Exibir mensagem de erro
- toast({
- title: "Erro ao cadastrar eletiva.",
- description: response.data.message || "Erro desconhecido.",
- status: "error",
- duration: 2800,
- isClosable: true,
- position: "top",
- });
- }
+ const response = await axios.get('http://localhost:3001/learningpath/learningpath'); // Endpoint para buscar trilhas
+ setTrilhas(response.data); // Define as trilhas na state 'trilhas'
} catch (error) {
- if(error.response.status === 401){
- toast({
- title: "Erro ao cadastrar eletiva.",
- description: "Essa eletiva já existe!",
- status: "error",
- duration: 2800,
- isClosable: true,
- position: "top",
- });
- } else {
- toast({
- title: "Erro ao cadastrar eletiva.",
- description: "Tente novamente mais tarde.",
- status: "error",
- duration: 2800,
- isClosable: true,
- position: "top",
- })
-
- console.log(error)
- }
+ console.error('Erro ao buscar trilhas:', error);
}
- },
- });
-
+ }
+ fetchTrilhas();
+ }, []);
+
+ // Função para marcar/desmarcar trilha selecionada
+ const handleCheckboxChange = (id) => {
+ const isSelected = trilhasSelecionadas.includes(id);
+
+ if (isSelected) {
+ // Se já estiver selecionado, remova da lista de selecionados
+ setTrilhasSelecionadas(trilhasSelecionadas.filter((eleId) => eleId !== id));
+ } else {
+ // Se não estiver selecionado, adicione à lista de selecionados
+ setTrilhasSelecionadas([...trilhasSelecionadas, id]);
+ }
+
+ console.log(trilhasSelecionadas)
+ };
+
+
+ // Função para excluir trilhas selecionadas
+ const handleExcluirClick = async () => {
+ try {
+ // Enviar uma solicitação para excluir as eletivas selecionadas
+ trilhasSelecionadas.map(async (eletiva) => {
+ await axios.delete('http://localhost:3001/learningpath/deleteLearningPaths', {
+ data: { id: eletiva },
+ });
+ })
- return (
-
-
-
-
-
-
-
-
-
-
-
- CADASTRO DE ELETIVAS
-
-
- Nome da eletiva
-
- {formik.touched.nomeEletiva && formik.errors.nomeEletiva && (
-
- {formik.errors.nomeEletiva}
-
- )}
-
- Descrição da eletiva
-
- {formik.touched.descricao && formik.errors.descricao && (
-
- {formik.errors.descricao}
-
- )}
+ // Atualizar a lista de eletivas após a exclusão
+ const response = await axios.get('http://localhost:3001/learningpath/learningpath');
+ setTrilhas(response.data);
+
+ // Limpar a lista de eletivas selecionadas
+ setTrilhasSelecionadas([]);
+ onClose();
+ setTimeout(() => {
+ window.location.reload();;
+ }, 2000);
+ setShowAlert(true);
+ } catch (error) {
+ console.error('Erro ao excluir trilhas:', error);
+ }
+ };
- Série
-
- {formik.touched.serie && formik.errors.serie && (
-
- {formik.errors.serie}
-
- )}
- Professor Responsável
-
- {formik.touched.professor && formik.errors.professor && (
-
- {formik.errors.professor}
-
- )}
-
- Número de vagas
-
- {formik.touched.vagas && formik.errors.vagas && (
-
- {formik.errors.vagas}
-
- )}
-
- Horário da aula
-
- {formik.touched.horario && formik.errors.horario && (
-
- {formik.errors.horario}
-
- )}
-
-
+ return (
+
+
+
+
+
+
+ Exclusão de Trilhas
+
+
+
+
+
+ Nome da eletiva |
+ Ano letivo |
+ |
+
+
+
+ {trilhas.map((linha) => (
+
+ {linha.name} |
+ {linha.school_year} |
+ handleCheckboxChange(linha.id)}> |
+
+ ))}
+
+
+
+
+
+
+
+
+
+ Excluir Trilhas
+
+
+
+ Você tem certeza? Essa ação não pode ser desfeita.
+
+
+
+
+
+
+
+
+
+
+
+ {showAlert && (
+
+
+ Trilhas excluídas com sucesso!
+
+ )}
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
);
};
diff --git a/frontend/src/pages/Recommendations/styles.js b/frontend/src/pages/Recommendations/styles.js
index e69de29b..4ce76ca2 100644
--- a/frontend/src/pages/Recommendations/styles.js
+++ b/frontend/src/pages/Recommendations/styles.js
@@ -0,0 +1,68 @@
+import styled from "styled-components";
+
+export const Container = styled.div`
+ display: flex;
+ align-items: center;
+ //justify-content: center;
+
+ flex-direction: column;
+ gap: 10px;
+ height: 100vh;
+ background-color: 'white';
+`;
+
+export const Content = styled.div`
+ gap: 15px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+ width: 100%;
+ height: 100%;
+ box-shadow: 0 1px 2px #0003;
+ background-color: #f4f4f2;
+ max-width: 650px;
+ max-height: 85%;
+ margin-top: 2%;
+ border-radius: 60px;
+`;
+
+export const Label = styled.label`
+ font-size: 18px;
+ font-weight: 600;
+ color: #676767;
+`;
+
+export const LabelSignup = styled.label`
+ font-size: 16px;
+ color: #676767;
+`;
+
+export const labelError = styled.label`
+ font-size: 14px;
+ color: red;
+`;
+
+export const Strong = styled.strong`
+ cursor: pointer;
+
+ a {
+ text-decoration: none;
+ color: #676767;
+ }
+`;
+export const titulo = styled.div`
+ font-size: 150%;
+ font-weight: 600;
+ color: #243A69;
+ margin-left: 20px;
+ margin-top: 20px;
+ align: center;
+`;
+export const box = styled.div`
+`;
+
+export const texto = styled.label`
+ color: #243A69;
+
+`;
diff --git a/frontend/src/pages/SendStudents/index.js b/frontend/src/pages/SendStudents/index.js
index f982d9f6..81dd1782 100644
--- a/frontend/src/pages/SendStudents/index.js
+++ b/frontend/src/pages/SendStudents/index.js
@@ -1,10 +1,9 @@
import React, { useState } from 'react';
import axios from 'axios';
-import { Container, Flex} from "@chakra-ui/react";
+import { Container, Flex, Box, Text, Button, Input, Center } from "@chakra-ui/react";
import Header from "../../components/Header/index.js";
import Footer from "../../components/Footer/index.js";
import { ChakraProvider } from "@chakra-ui/react";
-
import { Link } from "react-router-dom";
const SendStudent = () => {
@@ -29,19 +28,60 @@ const SendStudent = () => {
}
return (
-
-
-
-
-
-
-
-
+
+
+
+
+
+ Importar dados
+
+
+
+
+
+
+
+
+
-
);
};
-export default SendStudent;
\ No newline at end of file
+export default SendStudent;
diff --git a/frontend/src/routes/index.js b/frontend/src/routes/index.js
index 93386e19..601fba6c 100644
--- a/frontend/src/routes/index.js
+++ b/frontend/src/routes/index.js
@@ -4,15 +4,13 @@ import useAuth from "../hooks/useAuth";
import Home from "../pages/Home";
import Signin from "../pages/Signin";
import Signup from "../pages/Signup";
-import ExclusionTrilhas from "../pages/ExclusionTrilhas";
-import ExclusionEletivas from "../pages/ExclusionEletivas"
+import ExclusionEletivas from "../pages/ExclusionEletivas";
import CreateEletivas from "../pages/CreateEletivas";
import CreateTrilhas from "../pages/CreateTrilhas";
-<<<<<<< HEAD
+import ExclusionTrilhas from "../pages/ExclusionTrilhas";
import Recommendations from "../pages/Recommendations";
-=======
import SendStudent from "../pages/SendStudents"
->>>>>>> bc0164d30f8969d8af6e0ab86b5dc006a0bdbfb9
+
const Private = ({ Item }) => {
const { signed } = useAuth();
@@ -31,7 +29,9 @@ const RoutesApp = () => {
} />
} />
} />
+ } />
} />
+ } />
diff --git a/frontend/src/styles/global.js b/frontend/src/styles/global.js
index 15c27d3d..65f1ae42 100644
--- a/frontend/src/styles/global.js
+++ b/frontend/src/styles/global.js
@@ -6,7 +6,7 @@ const GlobalStyle = createGlobalStyle`
margin: 0;
padding: 0;
box-sizing: border-box;
- //border: 1px solid hotpink;
+ border: 1px solid hotpink;
}
body {