Skip to content
Snippets Groups Projects
Commit 42ce67b2 authored by Ron Lucke's avatar Ron Lucke
Browse files

Biest #277

parent 6dbd486b
No related branches found
No related tags found
No related merge requests found
...@@ -4196,18 +4196,17 @@ vSelect end ...@@ -4196,18 +4196,17 @@ vSelect end
margin: 0; margin: 0;
list-style: none; list-style: none;
} }
button { .cw-manager-copy-selector-course {
width: 100%;
border: solid thin $content-color-40;
background-color: $white;
padding: 1em;
margin-bottom: 4px;
color: $base-color; color: $base-color;
cursor: pointer; cursor: pointer;
outline: none; line-height: 2em;
&:hover { &:hover {
color:$white; color: $active-color;
background-color: $base-color; }
img {
vertical-align: text-bottom;
} }
} }
} }
......
<template> <template>
<div class="cw-manager-copy-selector"> <div class="cw-manager-copy-selector">
<div v-if="sourceEmpty" class="cw-manager-copy-selector-source"> <div v-if="sourceEmpty" class="cw-manager-copy-selector-source">
<button class="hugebutton" @click="selectSource('own'); loadOwnCourseware()"><translate>Aus meine Inhalte kopieren</translate></button> <button class="button" @click="selectSource('own'); loadOwnCourseware()"><translate>Aus meine Inhalte kopieren</translate></button>
<button class="hugebutton" @click="selectSource('remote')"><translate>Aus Veranstaltung kopieren</translate></button> <button class="button" @click="selectSource('remote')"><translate>Aus Veranstaltung kopieren</translate></button>
</div> </div>
<div v-else> <div v-else>
<button class="button" @click="reset"><translate>Quelle auswählen</translate></button> <button class="button" @click="reset"><translate>Quelle auswählen</translate></button>
<button v-show="!sourceOwn && hasRemoteCid" class="button" @click="selectNewCourse"><translate>Veranstaltung auswählen</translate></button>
<div v-if="sourceRemote"> <div v-if="sourceRemote">
<h2 v-if="!hasRemoteCid"><translate>Veranstaltungen</translate></h2> <h2 v-if="!hasRemoteCid"><translate>Veranstaltungen</translate></h2>
<ul v-if="!hasRemoteCid"> <ul v-if="!hasRemoteCid">
<li v-for="course in courses" :key="course.id" > <li v-for="semester in semesterMap" :key="semester.id">
<button class="hugebutton" @click="loadRemoteCourseware(course.id)">{{course.attributes.title}}</button> <h3>{{semester.attributes.title}}</h3>
<ul>
<li
v-for="course in coursesBySemester(semester)"
:key="course.id"
class="cw-manager-copy-selector-course"
@click="loadRemoteCourseware(course.id)"
>
<studip-icon :shape="getCourseIcon(course)" />
{{course.attributes.title}}
</li>
</ul>
</li> </li>
</ul> </ul>
<courseware-manager-element <courseware-manager-element
v-if="hasRemoteCid" v-if="remoteId !== '' && hasRemoteCid"
type="remote" type="remote"
:currentElement="remoteElement" :currentElement="remoteElement"
@selectElement="setRemoteId" @selectElement="setRemoteId"
@loadSelf="loadSelf" @loadSelf="loadSelf"
/> />
<courseware-companion-box
v-if="remoteId === '' && hasRemoteCid"
:msgCompanion="$gettext('In dieser Veranstaltung wurden noch keine Inhalte angelegt')"
mood="sad"
/>
</div> </div>
<div v-if="sourceOwn"> <div v-if="sourceOwn">
<courseware-manager-element <courseware-manager-element
...@@ -61,12 +79,14 @@ export default { ...@@ -61,12 +79,14 @@ export default {
ownCoursewareInstance: {}, ownCoursewareInstance: {},
ownId: '', ownId: '',
ownElement: {}, ownElement: {},
semesterMap: [],
}}, }},
computed: { computed: {
...mapGetters({ ...mapGetters({
userId: 'userId', userId: 'userId',
structuralElementById: 'courseware-structural-elements/byId', structuralElementById: 'courseware-structural-elements/byId',
semesterById: 'semesters/byId',
}), }),
sourceEmpty() { sourceEmpty() {
return this.source === ''; return this.source === '';
...@@ -80,12 +100,16 @@ export default { ...@@ -80,12 +100,16 @@ export default {
hasRemoteCid() { hasRemoteCid() {
return this.remoteCid !== ''; return this.remoteCid !== '';
}, },
loadedCourses() {
return this.courses.sort((a, b) => a.attributes.title > b.attributes.title);
}
}, },
methods: { methods: {
...mapActions({ ...mapActions({
loadUsersCourses: 'loadUsersCourses', loadUsersCourses: 'loadUsersCourses',
loadStructuralElement: 'loadStructuralElement', loadStructuralElement: 'loadStructuralElement',
loadRemoteCoursewareStructure: 'loadRemoteCoursewareStructure', loadRemoteCoursewareStructure: 'loadRemoteCoursewareStructure',
loadSemester: 'semesters/loadById',
}), }),
selectSource(source) { selectSource(source) {
this.source = source; this.source = source;
...@@ -96,7 +120,7 @@ export default { ...@@ -96,7 +120,7 @@ export default {
if (this.remoteCoursewareInstance !== null) { if (this.remoteCoursewareInstance !== null) {
this.setRemoteId(this.remoteCoursewareInstance.relationships.root.data.id); this.setRemoteId(this.remoteCoursewareInstance.relationships.root.data.id);
} else { } else {
console.debug('can not load'); this.remoteId = '';
} }
}, },
...@@ -105,14 +129,17 @@ export default { ...@@ -105,14 +129,17 @@ export default {
if (this.ownCoursewareInstance !== null) { if (this.ownCoursewareInstance !== null) {
this.setOwnId(this.ownCoursewareInstance.relationships.root.data.id); this.setOwnId(this.ownCoursewareInstance.relationships.root.data.id);
} else { } else {
console.debug('can not load'); this.ownId = '';
} }
}, },
reset() { reset() {
this.selectSource(''); this.selectSource('');
this.remoteCid = ''; this.remoteCid = '';
}, },
selectNewCourse() {
this.remoteCid = '';
this.remoteId = '';
},
async setRemoteId(target) { async setRemoteId(target) {
this.remoteId = target; this.remoteId = target;
await this.loadStructuralElement(this.remoteId); await this.loadStructuralElement(this.remoteId);
...@@ -131,11 +158,42 @@ export default { ...@@ -131,11 +158,42 @@ export default {
}, },
loadSelf(data) { loadSelf(data) {
this.$emit('loadSelf', data); this.$emit('loadSelf', data);
},
loadSemesterMap() {
let view = this;
let semesters = [];
this.courses.every(course => {
let semId = course.relationships['start-semester'].data.id;
if(!semesters.includes(semId)) {
semesters.push(semId);
}
return true;
});
semesters.every(semester => {
view.loadSemester({id: semester}).then( () => {
view.semesterMap.push(view.semesterById({id: semester}));
view.semesterMap.sort((a, b) => a.attributes.start < b.attributes.start);
});
return true;
});
},
coursesBySemester(semester) {
return this.loadedCourses.filter(course => {
return course.relationships['start-semester'].data.id === semester.id}
);
},
getCourseIcon(course) {
if (course.attributes['course-type'] === 99) {
return 'studygroup';
}
return 'seminar';
} }
}, },
async mounted() { async mounted() {
this.courses = await this.loadUsersCourses(this.userId); this.courses = await this.loadUsersCourses(this.userId);
this.loadSemesterMap();
} }
} }
</script> </script>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment