adds the LvMenu as dropdown options to the MyLV

This commit is contained in:
SimonGschnell
2024-09-17 12:34:47 +02:00
parent 5ca639101c
commit 6edc411a95
5 changed files with 115 additions and 15 deletions
+20 -1
View File
@@ -9,6 +9,10 @@ export default {
type:Array,
default:null,
},
preselectedMenu: {
type: Object,
default: null,
},
},
data(){
return{
@@ -44,11 +48,26 @@ export default {
},
back: function(){
if(this.preselectedMenu){
this.$emit('hideModal');
}else{
this.$emit('update:isMenuSelected', false);
}
},
},
watch:{
'preselectedMenu': function (newValue) {
if (newValue) {
this.selectedMenu = newValue;
this.$emit("update:isMenuSelected", true);
}
}
},
template:/*html*/`
<div v-if="selectedMenu" class="d-flex flex-column h-100">
<div class="d-flex mb-2">
<button v-if="selectedMenu" @click="$emit('update:isMenuSelected', false)" class="btn btn-secondary me-2"><i class="fa fa-chevron-left"></i> Back</button>
<button v-if="selectedMenu" @click="back" class="btn btn-secondary me-2"><i class="fa fa-chevron-left"></i> Back</button>
<h2>{{selectedMenu.name}}</h2>
</div>
<iframe class="h-100 w-100" :src="selectedMenu.c4_link" :title="selectedMenu.name"></iframe>
+17 -8
View File
@@ -7,7 +7,13 @@ export default {
type:Object,
required:true,
default:null,
}
},
// prop used to preselect a menu item and skip the grid overview
preselectedMenu: {
type: Object,
required: false,
default: null,
}
},
data(){
return {
@@ -28,12 +34,15 @@ export default {
this.isMenuSelected = false;
},
showModal: function(){
this.$fhcApi.factory.addons.getLvMenu(this.event.lehrveranstaltung_id, this.event.studiensemester_kurzbz).then(res =>{
if(res.data){
this.menu = res.data;
}
});
if(!this.preselectedMenu){
this.$fhcApi.factory.addons.getLvMenu(this.event.lehrveranstaltung_id, this.event.studiensemester_kurzbz).then(res =>{
if(res.data){
this.menu = res.data;
}
});
}else{
this.isMenuSelected = true;
}
},
},
mounted(){
@@ -47,7 +56,7 @@ export default {
</template>
<template #default>
<lv-menu v-model:isMenuSelected="isMenuSelected" :menu="menu"></lv-menu>
<lv-menu v-model:isMenuSelected="isMenuSelected" :preselectedMenu="preselectedMenu" :menu="menu" @hideModal="hide"></lv-menu>
</template>
</bs-modal>
@@ -1,10 +1,14 @@
import LvPruefungen from "./Lv/Pruefungen.js";
import LvInfo from "./Lv/Info.js";
import Phrasen from "../../../../../mixins/Phrasen.js";
import LvUebersicht from "../../LvUebersicht.js";
// TODO(chris): L10n
export default {
components:{
LvUebersicht,
},
mixins: [
Phrasen
],
@@ -29,7 +33,9 @@ export default {
data: () => {
return {
pruefungen: null,
info: null
info: null,
menu: null,
preselectedMenuItem: null,
}
},
computed: {
@@ -44,6 +50,28 @@ export default {
}
},
methods: {
openLvOption(menuItem){
if (menuItem.id == "core_menu_mailanstudierende"){
window.location.href = menuItem.c4_link;
}else{
this.preselectedMenuItem = menuItem;
Vue.nextTick(() => {
this.$refs.lvUebersicht.show();
});
}
},
onShowDropdown(){
//load menu
this.$fhcApi.factory.addons.getLvMenu(this.lehrveranstaltung_id, this.studien_semester)
.then(res => {
this.menu = res.data;
})
.catch((error) => this.$fhcAlert.handleSystemError);
},
onHideDropdown(){
//reset menu
this.menu = null;
},
openPruefungen() {
if (!this.pruefungen) {
this.pruefungen = true;
@@ -71,7 +99,15 @@ export default {
}
}
},
template: `<div class="mylv-semester-studiengang-lv card">
template: /*html*/`<div class="mylv-semester-studiengang-lv card">
<lv-uebersicht ref="lvUebersicht" :preselectedMenu="preselectedMenuItem" :event="{
lehrveranstaltung_id: lehrveranstaltung_id,
studiensemester_kurzbz:studien_semester,
lehrfach_bez:studien_semester,
stg_kurzbzlang:studien_semester,
}"/>
<div v-if="module" class="card-header">
{{module}}
</div>
@@ -80,11 +116,26 @@ export default {
</div>
<div class="card-footer">
<div class="row">
<a href="#" class="col-auto text-start text-decoration-none" @click.prevent="openPruefungen">
<a href="#" class="col text-start text-decoration-none" @click.prevent="openPruefungen">
<i class="fa fa-check text-success" v-if="positiv"></i>
{{ grade || p.t('lehre/noGrades') }}
</a>
<div v-if="lvinfo" class="col text-end">
<div class="col-auto text-end">
<div class="dropdown">
<span @[\`show.bs.dropdown\`]="onShowDropdown" @[\`hide.bs.dropdown\`]="onHideDropdown" class="dropdown-toggle" type="button" id="LvOptions" data-bs-toggle="dropdown" aria-expanded="false">
{{$p.t('lehre','lvOptions')}}
</span>
<ul class="dropdown-menu dropdown-menu-dark" aria-labelledby="LvOptions">
<template v-if="menu">
<li v-for="menuItem in menu" @click="openLvOption(menuItem)"><span type="button" class="dropdown-item" >{{menuItem.name}}</span></li>
</template>
<template v-else>
<li class="text-center"><i class="fa-solid fa-spinner fa-pulse fa-3x"></i></li>
</template>
</ul>
</div>
</div>
<div v-if="lvinfo" class="col-auto text-end">
<a class="card-link" href="#" @click.prevent="openInfos">
<i class="fa fa-info-circle" aria-hidden="true"></i>
</a>
@@ -61,8 +61,9 @@ export default {
},
showLvUebersicht: function (event){
this.selectedEvent= event;
Vue.nextTick(()=>{this.$refs.lvUebersicht.show();});
Vue.nextTick(()=>{
this.$refs.lvUebersicht.show();
});
},
selectDay(day) {
+20
View File
@@ -2684,6 +2684,26 @@ $phrases = array(
),
//**************** CORE/lehre
array(
'app' => 'core',
'category' => 'lehre',
'phrase' => 'lvOptions',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Lehrveranstaltungsoptionen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Course options',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'lehre',