Commit 5f1f4a8c authored by Carlos Rodríguez Morales's avatar Carlos Rodríguez Morales
Browse files

Enhance SubjectCard and SubjectValidationModal for improved prerequisite handling

- Updated SubjectCard.vue to pass structured prerequisite data to SubjectValidationModal, enhancing validation messaging.
- Introduced a computed property in SubjectCard to retrieve prerequisite information from the store.
- Enhanced SubjectValidationModal.vue to dynamically display prerequisite details, improving user clarity on subject requirements.
- Added a new getter in subjectsStore.js to fetch prerequisite information, streamlining data access.

These changes improve the user experience by providing clearer feedback on subject prerequisites and validation requirements.
parent 89995fd2
Showing with 42 additions and 7 deletions
+42 -7
......@@ -41,7 +41,10 @@
<SubjectValidationModal
v-if="showValidationModal"
:is-open="showValidationModal"
:prerequisite="store.prerequisites[code]"
:prerequisite="{
subject: name,
requiredSubject: prerequisiteInfo?.name || ''
}"
@close="handleValidationClose"
/>
</div>
......@@ -49,7 +52,7 @@
<script setup>
// Importaciones necesarias
import { defineProps, defineEmits, ref } from 'vue'
import { defineProps, defineEmits, ref, computed } from 'vue'
import { useSubjectsStore } from '@/stores/subjectsStore'
import StatusBanner from './subjects/StatusBanner.vue'
import CheckboxSection from './subjects/CheckboxSection.vue'
......@@ -70,7 +73,8 @@ const props = defineProps({
hasNormative: { type: Boolean, default: false }, // Indica si tiene normativa especial
normative: { type: Object, default: null }, // Objeto con la normativa si existe
requiresDocumentation: { type: Boolean, default: false }, // Nueva propiedad
requiresValidation: { type: Boolean, default: false }
requiresValidation: { type: Boolean, default: false },
prerequisite: { type: Object, default: null } // Añadimos esta prop
})
// Definición de eventos que emite el componente
......@@ -81,6 +85,11 @@ const store = useSubjectsStore()
const showDocumentationModal = ref(false)
const showValidationModal = ref(false)
// Computamos la información del prerequisito
const prerequisiteInfo = computed(() =>
store.getPrerequisiteInfo(props.prerequisite)
)
// Manejador de la selección de asignatura
const handleSubjectSelection = event => {
// Si la asignatura requiere validación y se está intentando seleccionar
......
<template>
<BaseModal :is-open="props.isOpen" @close="handleClose">
<template #title> Incompatibilidad de asignatura </template>
<template #title>Incompatibilidad de asignatura</template>
<template #description>
Para poder matricularte en Fisiología II tienes que tener aprobada Fisiología I. No
obstante, puedes utilizar este espacio para presentar tu reclamación y adjuntar
documentación si lo consideras necesario.
<template v-if="props.prerequisite">
Para poder matricularte en <strong>{{ props.prerequisite.subject }}</strong> tienes que tener aprobada
<strong>{{ props.prerequisite.requiredSubject }}</strong>. No obstante, puedes utilizar este espacio
para presentar tu reclamación y adjuntar documentación si lo consideras necesario.
</template>
</template>
<template #content>
......
......@@ -211,6 +211,30 @@ export const useSubjectsStore = defineStore('subjects', {
getUnreadNotificationsCount: state => {
return state.getSubjectNotifications.filter(notification => !notification.read)
.length
},
getPrerequisiteSubject: (state) => (code) => {
// Buscar en todos los cursos
for (const courseLevel in state.subjects) {
const subject = state.subjects[courseLevel][code]
if (subject && subject.prerequisite) {
return subject.prerequisite.requiredSubject
}
}
return ''
},
getPrerequisiteInfo: (state) => (prerequisite) => {
if (!prerequisite?.code) return null
// Buscamos la asignatura prerequisito en todos los cursos
for (const courseLevel in state.subjects) {
const subject = state.subjects[courseLevel][prerequisite.code]
if (subject) {
return subject
}
}
return null
}
},
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment