diff --git a/LearnIA/app/routes/_main.explora.jsx b/LearnIA/app/routes/_main.explora.jsx
index b683e98..61ee6c3 100644
--- a/LearnIA/app/routes/_main.explora.jsx
+++ b/LearnIA/app/routes/_main.explora.jsx
@@ -8,32 +8,61 @@ import ExploraCollapsibleSemestre from "../components/ExploraCollapsibleSemestre
import ExploraCollapsibleMateria from "../components/ExploraCollapsibleMateria";
function explora() {
+const courses = [
+ {
+ "semesters": [
+ {
+ "name": "Semestre 2",
+ "subjects": ["Programación Orientada a Objetos", "Modelación de sistemas electromagnéticos", "Biología computacional"]
+ },
+ {
+ "name": "Semestre 3",
+ "subjects": ["Algoritmos fundamentales", "Internet de las cosas"]
+ }
+ ]
+ }
+ ];
- return (
-
-
-
-
+ //Estado de inscripción
+ const [enrollmentStatus, setEnrollmentStatus] = useState({});
-
-
+ //Cambiar al estado anterior cada vez que se presiona el botón (Inscrito / No inscrito)
+ const handleEnrollmentClick = (subject) => {
+ setEnrollmentStatus((prevStatus) => ({
+ ...prevStatus,
+ [subject]: !prevStatus[subject]
+ }));
+ };
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam
- elementum faucibus mollis. Mauris vel lacinia libero. Proin
- luctus semper sem, ac posuere velit.
-
-
Inscribirse
-
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+ {courses[0].semesters.map((semester, index) => (
+
+
+ {semester.subjects.map((subject, subIndex) => (
+
+
+
{subject}
+
handleEnrollmentClick(subject)}
+ >
+ {enrollmentStatus[subject] ? "Dar de baja" : "Inscribirse"}
+
+
+
+ ))}
+
+
+ ))}
+
+
+
+ );
}
export default explora;
diff --git a/LearnIA/app/services/auth.server.js b/LearnIA/app/services/auth.server.js
index 81f9553..7691763 100644
--- a/LearnIA/app/services/auth.server.js
+++ b/LearnIA/app/services/auth.server.js
@@ -3,6 +3,7 @@ import { Authenticator } from "remix-auth";
import { GoogleStrategy, SocialsProvider } from "remix-auth-socials";
import { sessionStorage } from "../services/session.server";
import { config } from "dotenv";
+import prisma from "./prisma/prisma.js";
config();
diff --git a/LearnIA/app/styles/ExploraCollapsibleSection.css b/LearnIA/app/styles/ExploraCollapsibleSection.css
index d1ea4d0..d2d52ad 100644
--- a/LearnIA/app/styles/ExploraCollapsibleSection.css
+++ b/LearnIA/app/styles/ExploraCollapsibleSection.css
@@ -85,7 +85,7 @@
cursor: pointer;
padding: 18px;
width: calc(100% - 80px);
- border: 2px solid #132941;
+ border: 1.5px solid #132941;
text-align: left;
outline: none;
font-size: 25px;
@@ -134,7 +134,7 @@
padding: 0px 0px;
display: none;
overflow: hidden;
- background-color: #132941;
+ background-color: white;
border-radius: 0;
margin: 0 40px;
transition: border-radius 0.3s ease;
@@ -162,12 +162,13 @@
color: #132941;
cursor: pointer;
padding: 10px 18px;
+ padding-left: 30px;
width: calc(100%);
- border: 2px solid #132941;
+ border: 1.5px solid #132941;
text-align: left;
outline: none;
- font-size: 21px;
- font-weight: 500;
+ font-size: 18px;
+ font-weight: 600;
border-radius: 0px;
margin-left: 0px;
margin-right: 0px;
@@ -208,7 +209,7 @@
padding: 0px 0px;
display: none;
overflow: hidden;
- background-color: #f1f1f1;
+ background-color: white;
border-radius: 0;
margin: 0 0px;
transition: border-radius 0.3s ease;
@@ -237,11 +238,12 @@
color: #132941;
cursor: pointer;
padding: 5px 18px;
+ padding-left: 60px;
width: calc(100%);
- border: 2px solid #132941;
+ border: 1.3333333px solid #132941;
text-align: left;
outline: none;
- font-size: 21px;
+ font-size: 15px;
font-weight: 500;
border-radius: 0px;
margin-left: 0px;
diff --git a/LearnIA/prisma/schema.prisma b/LearnIA/prisma/schema.prisma
index 5d3d352..797f075 100644
--- a/LearnIA/prisma/schema.prisma
+++ b/LearnIA/prisma/schema.prisma
@@ -8,68 +8,72 @@ datasource db {
}
model Carrera {
- idCarrera Int @id @unique(map: "idCarrera_UNIQUE") @default(autoincrement())
- nombre String? @unique(map: "nombre_UNIQUE") @db.VarChar(45)
- escuela String? @unique(map: "escuela_UNIQUE") @db.VarChar(45)
- materias String? @unique(map: "materias_UNIQUE") @db.VarChar(45)
- estudiante Estudiante[]
- materia Materia[]
+ idCarrera Int @id @unique(map: "idCarrera_UNIQUE") @default(autoincrement())
+ siglasCarrera String? @db.VarChar(45)
+ escuela String? @db.VarChar(45)
+ nombre String? @db.VarChar(45)
+ estudiante Estudiante[]
+ materia Materia[]
}
model Curso {
- idCurso Int @id @unique(map: "idCurso_UNIQUE") @default(autoincrement())
- idEstudiante Int
- idMateria Int
- temasCompletados String? @db.VarChar(45)
- temasCursar String? @db.VarChar(45)
- plazo String? @db.VarChar(45)
- idEvaluaciones Int @unique(map: "idEvaluaciones_UNIQUE")
- estudiante Estudiante @relation(fields: [idEstudiante], references: [idEstudiante], onDelete: Cascade, map: "fk_Curso_Estudiante")
- evaluaciones Evaluaciones @relation(fields: [idEvaluaciones], references: [idEvaluaciones], onDelete: Cascade, map: "fk_Curso_Evaluaciones")
- materia Materia @relation(fields: [idMateria], references: [idMateria], onDelete: Cascade, map: "fk_Curso_Materia")
+ idCurso Int @id @unique(map: "idCurso_UNIQUE") @default(autoincrement())
+ idEstudiante Int
+ idMateria Int
+ plazo String? @db.VarChar(45)
+ idEvaluaciones Int @unique(map: "idEvaluaciones_UNIQUE")
+ descripcion String? @db.VarChar(45)
+ completado String? @db.VarChar(45)
+ proyectosRec String? @db.VarChar(45)
+ estudiante Estudiante @relation(fields: [idEstudiante], references: [idEstudiante], onDelete: Cascade, map: "fk_Curso_Estudiante")
+ evaluaciones Evaluaciones @relation(fields: [idEvaluaciones], references: [idEvaluaciones], onDelete: Cascade, map: "fk_Curso_Evaluaciones")
+ materia Materia @relation(fields: [idMateria], references: [idMateria], onDelete: Cascade, map: "fk_Curso_Materia")
+ Tema Tema[]
@@index([idEstudiante], map: "fk_Curso_Estudiante")
@@index([idMateria], map: "idMateria_idx")
}
model Estudiante {
- idEstudiante Int @id @unique(map: "idEstudiante_UNIQUE") @default(autoincrement())
- nombre String @db.VarChar(45)
- idCarrera Int?
- correo String @unique(map: "correo_UNIQUE") @db.VarChar(45)
- cursosCompletados String? @db.VarChar(45)
- cursosInscritos String? @db.VarChar(45)
- curso Curso[]
- carrera Carrera? @relation(fields: [idCarrera], references: [idCarrera], onDelete: Cascade, map: "idCarrera")
+ idEstudiante Int @id @unique(map: "idEstudiante_UNIQUE") @default(autoincrement())
+ nombre String @db.VarChar(45)
+ idCarrera Int?
+ correo String @unique(map: "correo_UNIQUE") @db.VarChar(45)
+ curso Curso[]
+ carrera Carrera? @relation(fields: [idCarrera], references: [idCarrera], onDelete: Cascade, map: "idCarrera")
+ Evaluaciones Evaluaciones[]
@@index([idCarrera], map: "idCarrera_idx")
}
model Evaluaciones {
- idEvaluaciones Int @id @unique(map: "idEvaluaciones_UNIQUE")
+ idEvaluaciones Int @id @unique(map: "idEvaluaciones_UNIQUE")
quizInicial Int
quiz1 Int?
quiz2 Int?
final Int?
+ idEstudiante Int
Curso Curso?
- quiz_Evaluaciones_finalToQuiz Quiz? @relation("Evaluaciones_finalToQuiz", fields: [final], references: [idQuiz], onDelete: Cascade, map: "final")
- quiz_Evaluaciones_quiz1ToQuiz Quiz? @relation("Evaluaciones_quiz1ToQuiz", fields: [quiz1], references: [idQuiz], onDelete: Cascade, map: "quiz1")
- quiz_Evaluaciones_quiz2ToQuiz Quiz? @relation("Evaluaciones_quiz2ToQuiz", fields: [quiz2], references: [idQuiz], onDelete: Cascade, map: "quiz2")
- quiz_Evaluaciones_quizInicialToQuiz Quiz @relation("Evaluaciones_quizInicialToQuiz", fields: [quizInicial], references: [idQuiz], onDelete: Cascade, map: "quizInicial")
+ quiz_Evaluaciones_finalToQuiz Quiz? @relation("Evaluaciones_finalToQuiz", fields: [final], references: [idQuiz], onDelete: NoAction, onUpdate: NoAction, map: "final")
+ Estudiante Estudiante @relation(fields: [idEstudiante], references: [idEstudiante], onDelete: NoAction, onUpdate: NoAction, map: "idEstudiante")
+ quiz_Evaluaciones_quiz1ToQuiz Quiz? @relation("Evaluaciones_quiz1ToQuiz", fields: [quiz1], references: [idQuiz], onDelete: NoAction, onUpdate: NoAction, map: "quiz1")
+ quiz_Evaluaciones_quiz2ToQuiz Quiz? @relation("Evaluaciones_quiz2ToQuiz", fields: [quiz2], references: [idQuiz], onDelete: NoAction, onUpdate: NoAction, map: "quiz2")
+ quiz_Evaluaciones_quizInicialToQuiz Quiz @relation("Evaluaciones_quizInicialToQuiz", fields: [quizInicial], references: [idQuiz], onDelete: NoAction, onUpdate: NoAction, map: "quizInicial")
- @@index([final], map: "final_idx")
+ @@index([final, idEvaluaciones], map: "final_idx")
@@index([quiz1], map: "quiz1_idx")
@@index([quiz2], map: "quiz2_idx")
@@index([quizInicial], map: "quizInicial_idx")
+ @@index([idEstudiante], map: "idEstudiante_idx")
}
model Materia {
idMateria Int @id @unique(map: "idMateria_UNIQUE")
idCarrera Int?
nombre String? @db.VarChar(45)
- temas String? @db.VarChar(45)
semestre Int?
idMateriaTec String @unique(map: "idMateriaTec_UNIQUE") @db.VarChar(45)
+ objetivos String? @db.VarChar(45)
curso Curso[]
carrera Carrera? @relation(fields: [idCarrera], references: [idCarrera], onDelete: Cascade, map: "fk_Materia_Carrera")
@@ -86,3 +90,12 @@ model Quiz {
evaluaciones_Evaluaciones_quiz2ToQuiz Evaluaciones[] @relation("Evaluaciones_quiz2ToQuiz")
evaluaciones_Evaluaciones_quizInicialToQuiz Evaluaciones[] @relation("Evaluaciones_quizInicialToQuiz")
}
+
+model Tema {
+ idTema Int @id
+ idCurso Int?
+ completado String? @db.VarChar(45)
+ Curso Curso? @relation(fields: [idCurso], references: [idCurso], onDelete: NoAction, onUpdate: NoAction, map: "idCurso")
+
+ @@index([idCurso], map: "idCurso_idx")
+}
diff --git a/LearnIA/vite.config.js.timestamp-1717282219478-1e339005fe794.mjs b/LearnIA/vite.config.js.timestamp-1717282219478-1e339005fe794.mjs
new file mode 100644
index 0000000..3b4a8c8
--- /dev/null
+++ b/LearnIA/vite.config.js.timestamp-1717282219478-1e339005fe794.mjs
@@ -0,0 +1,13 @@
+// vite.config.js
+import { vitePlugin as remix } from "file:///C:/Users/akzm2/Documents/Universidad%20TEC/Cuarto%20Semestre/LearnIA/LearnIA/LearnIA/node_modules/@remix-run/dev/dist/index.js";
+import { defineConfig } from "file:///C:/Users/akzm2/Documents/Universidad%20TEC/Cuarto%20Semestre/LearnIA/LearnIA/LearnIA/node_modules/vite/dist/node/index.js";
+var vite_config_default = defineConfig({
+ plugins: [remix()],
+ test: {
+ // ...
+ }
+});
+export {
+ vite_config_default as default
+};
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFxha3ptMlxcXFxEb2N1bWVudHNcXFxcVW5pdmVyc2lkYWQgVEVDXFxcXEN1YXJ0byBTZW1lc3RyZVxcXFxMZWFybklBXFxcXExlYXJuSUFcXFxcTGVhcm5JQVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcYWt6bTJcXFxcRG9jdW1lbnRzXFxcXFVuaXZlcnNpZGFkIFRFQ1xcXFxDdWFydG8gU2VtZXN0cmVcXFxcTGVhcm5JQVxcXFxMZWFybklBXFxcXExlYXJuSUFcXFxcdml0ZS5jb25maWcuanNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L1VzZXJzL2Frem0yL0RvY3VtZW50cy9Vbml2ZXJzaWRhZCUyMFRFQy9DdWFydG8lMjBTZW1lc3RyZS9MZWFybklBL0xlYXJuSUEvTGVhcm5JQS92aXRlLmNvbmZpZy5qc1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cclxuaW1wb3J0IHsgdml0ZVBsdWdpbiBhcyByZW1peCB9IGZyb20gXCJAcmVtaXgtcnVuL2RldlwiO1xyXG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tIFwidml0ZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcclxuXHRwbHVnaW5zOiBbcmVtaXgoKV0sXHJcblx0dGVzdDoge1xyXG5cdFx0Ly8gLi4uXHJcblx0fSxcclxufSk7XHJcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFDQSxTQUFTLGNBQWMsYUFBYTtBQUNwQyxTQUFTLG9CQUFvQjtBQUU3QixJQUFPLHNCQUFRLGFBQWE7QUFBQSxFQUMzQixTQUFTLENBQUMsTUFBTSxDQUFDO0FBQUEsRUFDakIsTUFBTTtBQUFBO0FBQUEsRUFFTjtBQUNELENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg==