Newer
Older
<template>
<div class="cw-manager-copy-selector">
<div v-if="sourceEmpty" class="cw-manager-copy-selector-source">
<button class="button" @click="selectSource('own'); loadOwnCourseware()"><translate>Aus persönlichen Lernmaterialien kopieren</translate></button>
<button class="button" @click="selectSource('remote')"><translate>Aus Veranstaltung kopieren</translate></button>
</div>
<div v-else>
<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">
<h2 v-if="!hasRemoteCid"><translate>Veranstaltungen</translate></h2>
<ul v-if="!hasRemoteCid">
<li v-for="semester in semesterMap" :key="semester.id">
<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>
</ul>
<courseware-manager-element
type="remote"
:currentElement="remoteElement"
@selectElement="setRemoteId"
@loadSelf="loadSelf"
@reloadElement="reloadElement"
<courseware-companion-box
v-if="remoteId === '' && hasRemoteCid"
:msgCompanion="$gettext('In dieser Veranstaltung wurden noch keine Inhalte angelegt.')"
</div>
<div v-if="sourceOwn">
<courseware-manager-element
v-if="ownId !== ''"
type="own"
:currentElement="ownElement"
@selectElement="setOwnId"
@loadSelf="loadSelf"
/>
<courseware-companion-box
v-else
:msgCompanion="$gettext('Sie haben noch keine eigenen Inhalte angelegt.')"
mood="sad"
/>
</div>
</div>
</div>
</template>
<script>
import CoursewareManagerElement from './CoursewareManagerElement.vue';
import { mapActions, mapGetters } from 'vuex';
import CoursewareCompanionBox from './CoursewareCompanionBox.vue';
export default {
name: 'courseware-manager-copy-selector',
components:{
CoursewareManagerElement,
CoursewareCompanionBox,
},
props: {},
data() {return{
source: '',
courses: [],
remoteCid: '',
remoteCoursewareInstance: {},
remoteId: '',
remoteElement: {},
ownCoursewareInstance: {},
ownId: '',
ownElement: {},
}},
computed: {
...mapGetters({
userId: 'userId',
structuralElementById: 'courseware-structural-elements/byId',
}),
sourceEmpty() {
return this.source === '';
},
sourceOwn() {
return this.source === 'own';
},
sourceRemote() {
return this.source === 'remote';
},
hasRemoteCid() {
return this.remoteCid !== '';
},
loadedCourses() {
return this.courses.sort((a, b) => a.attributes.title > b.attributes.title);
}
},
methods: {
...mapActions({
loadAnotherCourseware: 'courseware-structure/loadAnotherCourseware',
loadUsersCourses: 'loadUsersCourses',
loadStructuralElement: 'loadStructuralElement',
}),
selectSource(source) {
this.source = source;
},
async loadRemoteCourseware(cid) {
this.remoteCid = cid;
this.remoteCoursewareInstance = await this.loadAnotherCourseware({ id: this.remoteCid, type: 'courses'});
if (this.remoteCoursewareInstance !== null) {
this.setRemoteId(this.remoteCoursewareInstance.relationships.root.data.id);
} else {
}
},
async loadOwnCourseware() {
this.ownCoursewareInstance = await this.loadAnotherCourseware({ id: this.userId, type: 'users' });
if (this.ownCoursewareInstance !== null) {
this.setOwnId(this.ownCoursewareInstance.relationships.root.data.id);
} else {
}
},
reset() {
this.selectSource('');
this.remoteCid = '';
},
selectNewCourse() {
this.remoteCid = '';
this.remoteId = '';
},
async setRemoteId(target) {
this.remoteId = target;
await this.loadStructuralElement(this.remoteId);
this.initRemote();
},
initRemote() {
this.remoteElement = this.structuralElementById({ id: this.remoteId });
},
async setOwnId(target) {
this.ownId = target;
await this.loadStructuralElement(this.ownId);
this.initOwn();
},
initOwn() {
this.ownElement = this.structuralElementById({ id: this.ownId });
},
loadSelf(data) {
this.$emit('loadSelf', data);
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
},
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';
},
reloadElement() {
this.$emit("reloadElement");
}
},
async mounted() {
this.courses = await this.loadUsersCourses({ userId: this.userId, withCourseware: true });