From f6f61aaf0531ddfa63f6ce40a601ad9ca8cef21e Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Tue, 3 Dec 2019 15:06:47 +0100 Subject: [PATCH] Add bookmark action for modules --- client/src/components/Chapter.vue | 5 ++ client/src/components/modules/Module.vue | 68 ++++++++++++++++++- .../gql/mutations/updateModuleBookmark.gql | 5 ++ .../management/commands/data/module_data.py | 4 +- server/notes/mutations.py | 37 ++++++++-- 5 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 client/src/graphql/gql/mutations/updateModuleBookmark.gql diff --git a/client/src/components/Chapter.vue b/client/src/components/Chapter.vue index 0f9f99b5..925b2d4e 100644 --- a/client/src/components/Chapter.vue +++ b/client/src/components/Chapter.vue @@ -3,6 +3,7 @@

{{chapter.title}}

@@ -123,6 +124,10 @@ .chapter { position: relative; + &__bookmark-actions { + margin-top: 3px; + } + &__description { @include lead-paragraph; diff --git a/client/src/components/modules/Module.vue b/client/src/components/modules/Module.vue index 7ace123c..69513816 100644 --- a/client/src/components/modules/Module.vue +++ b/client/src/components/modules/Module.vue @@ -5,7 +5,14 @@ -
+ +
+ +
+

Lernziele

@@ -26,13 +33,17 @@ import UPDATE_OBJECTIVE_PROGRESS_MUTATION from '@/graphql/gql/mutations/updateObjectiveProgress.gql'; import UPDATE_LAST_MODULE_MUTATION from '@/graphql/gql/mutations/updateLastModule.gql'; + import UPDATE_MODULE_BOOKMARK_MUTATION from '@/graphql/gql/mutations/updateModuleBookmark.gql'; import OBJECTIVE_QUERY from '@/graphql/gql/objectiveQuery.gql'; import ME_QUERY from '@/graphql/gql/meQuery.gql'; + import MODULE_QUERY from '@/graphql/gql/moduleByIdQuery.gql'; import {withoutOwnerFirst} from '@/helpers/sorting'; + import BookmarkActions from '@/components/notes/BookmarkActions'; export default { components: { + BookmarkActions, ObjectiveGroups, ObjectiveGroupControl, AddObjectiveGroupButton, @@ -112,6 +123,52 @@ } }) }, + bookmark(bookmarked) { + const id = this.module.id; + this.$apollo.mutate({ + mutation: UPDATE_MODULE_BOOKMARK_MUTATION, + variables: { + input: { + module: id, + bookmarked + } + }, + update: (store, response) => { + const query = MODULE_QUERY; + const variables = {id}; + const data = store.readQuery({ + query, + variables + }); + + const module = data.module; + + if (bookmarked) { + module.bookmark = { + __typename: 'ModuleBookmarkNode', + note: null + } + } else { + module.bookmark = null; + } + + data.module = module; + + store.writeQuery({ + data, + query, + variables + }); + }, + optimisticResponse: { + __typename: 'Mutation', + updateModuleBookmark: { + __typename: 'UpdateModuleBookmarkPayload', + success: true + } + } + }); + } }, apollo: { @@ -138,6 +195,7 @@ .module { display: flex; justify-self: center; + @include desktop { width: 800px; } @@ -157,6 +215,10 @@ @include meta-title; } + &__intro-wrapper { + position: relative; + } + &__intro { line-height: 1.5; margin-bottom: 3em; @@ -171,5 +233,9 @@ } } + &__bookmark-actions { + margin-top: 3px; + } + } diff --git a/client/src/graphql/gql/mutations/updateModuleBookmark.gql b/client/src/graphql/gql/mutations/updateModuleBookmark.gql new file mode 100644 index 00000000..48f3ebe4 --- /dev/null +++ b/client/src/graphql/gql/mutations/updateModuleBookmark.gql @@ -0,0 +1,5 @@ +mutation UpdateModuleBookmark($input: UpdateModuleBookmarkInput!) { + updateModuleBookmark(input: $input) { + success + } +} diff --git a/server/core/management/commands/data/module_data.py b/server/core/management/commands/data/module_data.py index c67e0ff9..76e364b1 100644 --- a/server/core/management/commands/data/module_data.py +++ b/server/core/management/commands/data/module_data.py @@ -47,7 +47,7 @@ objective_groups_1 = [ module_1_chapter_1 = { 'title': '1.1 Lehrbeginn', - 'description': 'Hello World', + 'description': 'Wie sieht Ihr Konsumverhalten aus?', 'content_blocks': [ { 'type': 'task', @@ -187,7 +187,7 @@ module_1_chapter_1 = { } module_1_chapter_2 = { 'title': '1.2 Die drei Lernorte', - 'description': 'Hello World', + 'description': 'Haben Sie sich beim Shoppen schon mal überlegt, aus welchem Beweggrund Sie ein bestimmtes Produkt eigentlich unbedingt haben wollten? Wir gehen im Folgenden anhand Ihres letzten Kleiderkaufs dieser Frage nach.', 'content_blocks': [ { 'type': 'base_society', diff --git a/server/notes/mutations.py b/server/notes/mutations.py index 64e62267..4cdbd58f 100644 --- a/server/notes/mutations.py +++ b/server/notes/mutations.py @@ -5,9 +5,9 @@ import json from graphene import relay from api.utils import get_object -from books.models import ContentBlock, Chapter +from books.models import ContentBlock, Chapter, Module from notes.inputs import AddNoteArgument, UpdateNoteArgument -from notes.models import ContentBlockBookmark, Note, ChapterBookmark +from notes.models import ContentBlockBookmark, Note, ChapterBookmark, ModuleBookmark from notes.schema import NoteNode @@ -105,10 +105,10 @@ class UpdateChapterBookmark(relay.ClientIDMutation): @classmethod def mutate_and_get_payload(cls, root, info, **kwargs): user = info.context.user - content_block_id = kwargs.get('chapter') + chapter_id = kwargs.get('chapter') bookmarked = kwargs.get('bookmarked') - chapter = get_object(Chapter, content_block_id) + chapter = get_object(Chapter, chapter_id) if bookmarked: ChapterBookmark.objects.create( @@ -124,6 +124,34 @@ class UpdateChapterBookmark(relay.ClientIDMutation): return cls(success=True) +class UpdateModuleBookmark(relay.ClientIDMutation): + class Input: + module = graphene.ID(required=True) + bookmarked = graphene.Boolean(required=True) + + success = graphene.Boolean() + + @classmethod + def mutate_and_get_payload(cls, root, info, **kwargs): + user = info.context.user + module_id = kwargs.get('module') + bookmarked = kwargs.get('bookmarked') + + module = get_object(Module, module_id) + + if bookmarked: + ModuleBookmark.objects.create( + module=module, + user=user + ) + else: + ModuleBookmark.objects.get( + module=module, + user=user + ).delete() + + return cls(success=True) + class NoteMutations: @@ -131,3 +159,4 @@ class NoteMutations: update_note = UpdateNote.Field() update_content_bookmark = UpdateContentBookmark.Field() update_chapter_bookmark = UpdateChapterBookmark.Field() + update_module_bookmark = UpdateModuleBookmark.Field()