187 lines
4.8 KiB
Vue
187 lines
4.8 KiB
Vue
<template>
|
|
<div
|
|
class="module-activity"
|
|
v-if="!empty"
|
|
>
|
|
<h3 class="module-activity__topic-name">
|
|
{{ module.topic.title }}
|
|
</h3>
|
|
<h2 class="module-activity__title">{{ module.title }}</h2>
|
|
<h3 class="module-activity__meta-title">{{ module.metaTitle }}</h3>
|
|
<div class="module-activity__tasks activity-tasks">
|
|
<activity-entry
|
|
title="Aufgabe & Ergebnis"
|
|
class="module-activity__entry"
|
|
v-for="submission in submissions"
|
|
:key="submission.id"
|
|
@link="goTo('module', module.slug)"
|
|
>
|
|
{{ submission.text }}
|
|
</activity-entry>
|
|
<activity-entry
|
|
title="Übung"
|
|
class="module-activity__entry"
|
|
v-for="answer in answers"
|
|
:key="answer.id"
|
|
@link="goTo('module', module.slug)"
|
|
>
|
|
{{ answer.survey.title }}
|
|
</activity-entry>
|
|
<activity-entry
|
|
title="Lesezeichen"
|
|
class="module-activity__entry"
|
|
:bookmark="bookmark"
|
|
v-for="bookmark in contentBookmarks"
|
|
:key="bookmark.id"
|
|
@link="goTo('content', bookmark.contentBlock.id)"
|
|
>
|
|
<content-bookmark :bookmark="bookmark" />
|
|
</activity-entry>
|
|
<activity-entry
|
|
title="Lesezeichen"
|
|
class="module-activity__entry"
|
|
v-for="bookmark in chapterBookmarks"
|
|
:key="bookmark.id"
|
|
@link="goTo('content', bookmark.chapter.id)"
|
|
>
|
|
{{ bookmark.chapter.description }}
|
|
</activity-entry>
|
|
<activity-entry
|
|
title="Lesezeichen"
|
|
class="module-activity__entry"
|
|
:bookmark="moduleBookmark"
|
|
v-if="moduleBookmark"
|
|
@link="goTo('module', module.slug)"
|
|
>
|
|
<!-- eslint-disable vue/no-v-html -->
|
|
<div v-html="moduleBookmark.module.intro"></div>
|
|
</activity-entry>
|
|
<activity-entry
|
|
title="Notiz"
|
|
class="module-activity__entry"
|
|
:bookmark="noteBookmark"
|
|
v-for="noteBookmark in notes"
|
|
:key="noteBookmark.note.id"
|
|
@link="goToNote(noteBookmark)"
|
|
>
|
|
{{ noteBookmark.note.text }}
|
|
</activity-entry>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { mapActions } from 'vuex';
|
|
import ContentBookmark from '@/components/profile/ContentBookmark.vue';
|
|
import ActivityEntry from '@/components/profile/ActivityEntry.vue';
|
|
|
|
import SCROLL_TO_MUTATION from '@/graphql/gql/local/mutations/scrollTo.gql';
|
|
|
|
export default {
|
|
props: ['module', 'filter'],
|
|
components: {
|
|
ContentBookmark,
|
|
ActivityEntry,
|
|
},
|
|
computed: {
|
|
empty() {
|
|
return !(
|
|
this.notes.length ||
|
|
this.answers.length ||
|
|
this.submissions.length ||
|
|
this.contentBookmarks.length ||
|
|
this.chapterBookmarks.length ||
|
|
this.moduleBookmark
|
|
);
|
|
},
|
|
notes() {
|
|
return this.applyFilter('notes')
|
|
? this.module.myChapterBookmarks
|
|
.concat(this.module.myContentBookmarks)
|
|
.concat([this.module.bookmark ? this.module.bookmark : {}])
|
|
.filter((b) => b.note)
|
|
: [];
|
|
},
|
|
submissions() {
|
|
return this.applyFilter('assignments') ? this.module.mySubmissions : [];
|
|
},
|
|
answers() {
|
|
return this.applyFilter('surveys') ? this.module.myAnswers : [];
|
|
},
|
|
contentBookmarks() {
|
|
return this.applyFilter('bookmarks') ? this.module.myContentBookmarks : [];
|
|
},
|
|
chapterBookmarks() {
|
|
return this.applyFilter('bookmarks') ? this.module.myChapterBookmarks : [];
|
|
},
|
|
moduleBookmark() {
|
|
return this.applyFilter('bookmarks') ? this.module.bookmark : undefined;
|
|
},
|
|
},
|
|
methods: {
|
|
goTo(contentType, scrollTo) {
|
|
const url = `/${contentType}/${scrollTo}/`;
|
|
this.$apollo.mutate({
|
|
mutation: SCROLL_TO_MUTATION,
|
|
variables: {
|
|
scrollTo,
|
|
},
|
|
});
|
|
this.$router.push(url);
|
|
},
|
|
goToNote(bookmark) {
|
|
if (bookmark.module) {
|
|
this.goTo('module', bookmark.module.slug);
|
|
} else if (bookmark.chapter) {
|
|
this.goTo('content', bookmark.chapter.id);
|
|
} else {
|
|
this.goTo('content', bookmark.contentBlock.id);
|
|
}
|
|
},
|
|
|
|
applyFilter(filterCriteria) {
|
|
return !this.filter || this.filter === filterCriteria;
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
@import '@/styles/_variables.scss';
|
|
@import '@/styles/_mixins.scss';
|
|
|
|
.module-activity {
|
|
max-width: 640px;
|
|
|
|
@include desktop {
|
|
max-width: 1020px;
|
|
}
|
|
|
|
@media (max-width: 639px) {
|
|
max-width: 400px;
|
|
}
|
|
|
|
@media (max-width: 401px) {
|
|
max-width: 320px;
|
|
}
|
|
|
|
&__topic-name {
|
|
@include regular-text;
|
|
margin-bottom: $small-spacing;
|
|
}
|
|
|
|
&__title {
|
|
@include heading-2;
|
|
}
|
|
&__meta-title {
|
|
@include regular-text;
|
|
margin-bottom: $small-spacing;
|
|
}
|
|
&__entry {
|
|
&:first-of-type {
|
|
border-top: 1px solid $color-silver;
|
|
}
|
|
}
|
|
}
|
|
</style>
|