diff --git a/client/src/components/content-blocks/CmsDocumentBlock.vue b/client/src/components/content-blocks/CmsDocumentBlock.vue new file mode 100644 index 00000000..c00262e8 --- /dev/null +++ b/client/src/components/content-blocks/CmsDocumentBlock.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/client/src/components/content-blocks/ContentComponent.vue b/client/src/components/content-blocks/ContentComponent.vue index 46b245aa..a2ffe238 100644 --- a/client/src/components/content-blocks/ContentComponent.vue +++ b/client/src/components/content-blocks/ContentComponent.vue @@ -31,6 +31,7 @@ const ImageUrlBlock = () => import(/* webpackChunkName: "content-components" */' const VideoBlock = () => import(/* webpackChunkName: "content-components" */'@/components/content-blocks/VideoBlock'); const LinkBlock = () => import(/* webpackChunkName: "content-components" */'@/components/content-blocks/LinkBlock'); const DocumentBlock = () => import(/* webpackChunkName: "content-components" */'@/components/content-blocks/DocumentBlock'); +const CmsDocumentBlock = () => import(/* webpackChunkName: "content-components" */'@/components/content-blocks/CmsDocumentBlock'); const InfogramBlock = () => import(/* webpackChunkName: "content-components" */'@/components/content-blocks/InfogramBlock'); const ThinglinkBlock = () => import(/* webpackChunkName: "content-components" */'@/components/content-blocks/ThinglinkBlock'); const GeniallyBlock = () => import(/* webpackChunkName: "content-components" */'@/components/content-blocks/GeniallyBlock'); @@ -88,6 +89,7 @@ export default { 'content_list': ContentListBlock, 'module_room_slug': ModuleRoomSlug, 'thinglink_block': ThinglinkBlock, + 'cms_document_block': CmsDocumentBlock, Survey, Solution, Instruction, diff --git a/server/api/graphene_wagtail.py b/server/api/graphene_wagtail.py index 39786509..e960b50b 100644 --- a/server/api/graphene_wagtail.py +++ b/server/api/graphene_wagtail.py @@ -6,6 +6,7 @@ from graphene.types import Scalar from graphene_django.converter import convert_django_field from graphql_relay import to_global_id from wagtail.core.fields import StreamField +from wagtail.documents.models import Document from wagtail.images.models import Image from assignments.models import Assignment @@ -85,6 +86,19 @@ def augment_fields(raw_data): item_data = data['value'] data['value'] = augment_fields(item_data) + if _type == 'cms_document_block': + _value = data['value'] + document = Document.objects.get(id=_value) + value = { + 'value': _value, + 'id': document.id, + 'file_name': document.filename, + 'file_extension': document.file_extension, + 'url': document.url, + 'title': document.title + } + data['value'] = value + return raw_data diff --git a/server/books/models/contentblock.py b/server/books/models/contentblock.py index 95302431..804cf0b4 100644 --- a/server/books/models/contentblock.py +++ b/server/books/models/contentblock.py @@ -4,6 +4,7 @@ from django.db import models from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, ObjectList, StreamFieldPanel from wagtail.core.blocks import StreamBlock from wagtail.core.fields import StreamField +from wagtail.documents.blocks import DocumentChooserBlock from wagtail.images.blocks import ImageChooserBlock from core.wagtail_utils import get_default_settings @@ -63,7 +64,8 @@ class ContentBlock(StrictHierarchyPage): ('thinglink_block', ThinglinkBlock()), ('subtitle', SubtitleBlock()), ('instruction', InstructionBlock()), - ('module_room_slug', ModuleRoomSlugBlock()) + ('module_room_slug', ModuleRoomSlugBlock()), + ('cms_document_block', DocumentChooserBlock()) ] content_list_item = StreamBlock(content_blocks) diff --git a/server/books/schema/inputs.py b/server/books/schema/inputs.py index 46ed0948..31bd3a3e 100644 --- a/server/books/schema/inputs.py +++ b/server/books/schema/inputs.py @@ -12,7 +12,7 @@ class InputTypes(graphene.Enum): video_block = 'video_block' document_block = 'document_block' content_list_item = 'content_list_item' - subtitle= 'subtitle' + subtitle = 'subtitle' class ContentElementValueInput(InputObjectType): diff --git a/server/books/schema/mutations/utils.py b/server/books/schema/mutations/utils.py index 71a6db84..821e012f 100644 --- a/server/books/schema/mutations/utils.py +++ b/server/books/schema/mutations/utils.py @@ -40,7 +40,7 @@ ALLOWED_BLOCKS = ( 'assignment', 'document_block', 'content_list_item', - 'subtitle' + 'subtitle', ) diff --git a/server/core/urls.py b/server/core/urls.py index d9528ca0..63e3842d 100644 --- a/server/core/urls.py +++ b/server/core/urls.py @@ -6,6 +6,8 @@ from django.urls import re_path from django.views.generic import RedirectView from wagtail.admin import urls as wagtailadmin_urls from wagtail.core import urls as wagtail_urls +from wagtail.documents import urls as wagtaildocs_urls + from wagtailautocomplete.urls.admin import urlpatterns as autocomplete_admin_urls from core import views @@ -19,6 +21,7 @@ urlpatterns = [ # wagtail url(r'^admin/autocomplete/', include(autocomplete_admin_urls)), url(r'^cms/', include(wagtailadmin_urls)), + url(r'^documents/', include(wagtaildocs_urls)), # graphql backend url(r'^api/', include('api.urls', namespace="api")),