From 4a964b3e81b27809f59781e69e038f59ecd99418 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Thu, 13 Sep 2018 12:05:22 +0200 Subject: [PATCH] example mutate hidden/visibility userGroup <-> contentBlock --- .../mutateContentBlock_setVisibility.gql | 22 +++++++++++ package-lock.json | 6 +-- server/book/schema/inputs.py | 7 +++- server/book/schema/mutations.py | 37 +++++++++++++------ 4 files changed, 56 insertions(+), 16 deletions(-) create mode 100644 client/src/graphql/gql/sandbox/mutations/mutateContentBlock_setVisibility.gql diff --git a/client/src/graphql/gql/sandbox/mutations/mutateContentBlock_setVisibility.gql b/client/src/graphql/gql/sandbox/mutations/mutateContentBlock_setVisibility.gql new file mode 100644 index 00000000..53fe63f6 --- /dev/null +++ b/client/src/graphql/gql/sandbox/mutations/mutateContentBlock_setVisibility.gql @@ -0,0 +1,22 @@ +mutation MutateContentBlock($input: MutateContentBlockInput!) { + mutateContentBlock(input: $input) { + contentBlock { + id + title + slug + } + errors + } +} + + + +# input + +#{"input": { +# "id": "Q29udGVudEJsb2NrTm9kZToyMQ==", +# "visibility": [{ +# "userGroupId": "VXNlckdyb3VwTm9kZToy", +# "hidden": false +# }] +#}} diff --git a/package-lock.json b/package-lock.json index 4e5d5409..ef862fe6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,9 +41,9 @@ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" }, "unfetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-3.0.0.tgz", - "integrity": "sha1-jR4FE6Ts0OX/LUGmund3Gq6LZII=" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-3.1.1.tgz", + "integrity": "sha512-syDl3htvM56w0HC0PTVA5jEEknOCJ3dWgWGDuaEtQUno8ORDCfZQbm12RzfWO3AC3YhWDoP61dlgmo8Z05Y97g==" } } } diff --git a/server/book/schema/inputs.py b/server/book/schema/inputs.py index 3c5c38db..b0719f8e 100644 --- a/server/book/schema/inputs.py +++ b/server/book/schema/inputs.py @@ -1,5 +1,5 @@ -from graphene import InputObjectType import graphene +from graphene import InputObjectType class InputTypes(graphene.Enum): @@ -28,3 +28,8 @@ class ContentBlockInput(InputObjectType): title = graphene.String(required=True) type = graphene.String() contents = graphene.List(ContentElementInput) + + +class UserGroupContentBlockVisibility(InputObjectType): + user_group_id = graphene.ID(required=True) + hidden = graphene.Boolean(required=True) diff --git a/server/book/schema/mutations.py b/server/book/schema/mutations.py index 9ce4d16c..84c653a1 100644 --- a/server/book/schema/mutations.py +++ b/server/book/schema/mutations.py @@ -1,13 +1,13 @@ import json -import bleach +import bleach import graphene -from graphene import relay from django.core.exceptions import ValidationError +from graphene import relay from api.utils import get_object, get_errors -from book.models import ContentBlock, Chapter -from book.schema.inputs import ContentBlockInput +from book.models import ContentBlock, Chapter, UserGroup +from book.schema.inputs import ContentBlockInput, UserGroupContentBlockVisibility from book.schema.queries import ContentBlockNode @@ -55,10 +55,11 @@ def handle_content_blocks(content_data): class MutateContentBlock(relay.ClientIDMutation): class Input: - id = graphene.ID() + id = graphene.ID(required=True) type = graphene.String() title = graphene.String() contents = graphene.String() + visibility = graphene.List(UserGroupContentBlockVisibility) errors = graphene.List(graphene.String) content_block = graphene.Field(ContentBlockNode) @@ -67,19 +68,31 @@ class MutateContentBlock(relay.ClientIDMutation): def mutate_and_get_payload(cls, *args, **kwargs): try: id_param = kwargs['id'] - type_param = kwargs['type'] - title = kwargs['title'] - contents_data = kwargs['contents'] + type_param = kwargs.get('type') + title = kwargs.get('title') + contents_data = kwargs.get('contents') + visibility_list = kwargs.get('visibility', []) - new_content_block = ContentBlock(type=type_param, title=title, contents=contents_data) + #new_content_block = ContentBlock(type=type_param, title=title, contents=contents_data) content_block = get_object(ContentBlock, id_param) - content_block.add_sibling(instance=new_content_block, pos='right') + + for v in visibility_list: + user_group = get_object(UserGroup, v.user_group_id) + if v.hidden: + content_block.hidden_for.add(user_group) + else: + content_block.hidden_for.remove(user_group) + + content_block.save() + + + #content_block.add_sibling(instance=new_content_block, pos='right') # ContentBlock.objects.get() # cb.add_sibling() - new_content_block.save() + #new_content_block.saveI() # image_instance = get_object(Image, kwargs['id']) # if image_instance: @@ -92,7 +105,7 @@ class MutateContentBlock(relay.ClientIDMutation): # tag_slugs = [t for t in tag_slugs if t not in [e.slug for e in tags]] # updated_image.tags.set(*(tags + tag_slugs)) - return cls(content_block=new_content_block) + return cls(content_block=content_block) except ValidationError as e: errors = get_errors(e)