diff --git a/client/src/components/content-block-form/ContentElement.vue b/client/src/components/content-block-form/ContentElement.vue new file mode 100644 index 00000000..e2607729 --- /dev/null +++ b/client/src/components/content-block-form/ContentElement.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/client/src/components/content-block-form/ContentsForm.vue b/client/src/components/content-block-form/ContentsForm.vue index d48ed0f2..3a287d87 100644 --- a/client/src/components/content-block-form/ContentsForm.vue +++ b/client/src/components/content-block-form/ContentsForm.vue @@ -27,37 +27,10 @@ :key="index" class="contents-form__element" v-for="(element, index) in localContentBlock.contents"> - - - - + import {meQuery} from '@/graphql/queries'; - const ContentBlockElementChooserWidget = () => import(/* webpackChunkName: "content-forms" */'@/components/content-forms/ContentBlockElementChooserWidget'); const ModalInput = () => import(/* webpackChunkName: "content-forms" */'@/components/ModalInput'); const AddContentElement = () => import(/* webpackChunkName: "content-forms" */'@/components/AddContentElement'); - const LinkForm = () => import(/* webpackChunkName: "content-forms" */'@/components/content-forms/LinkForm'); - const VideoForm = () => import(/* webpackChunkName: "content-forms" */'@/components/content-forms/VideoForm'); - const ImageForm = () => import(/* webpackChunkName: "content-forms" */'@/components/content-forms/ImageForm'); - const DocumentForm = () => import(/* webpackChunkName: "content-forms" */'@/components/content-forms/DocumentForm'); - const AssignmentForm = () => import(/* webpackChunkName: "content-forms" */'@/components/content-forms/AssignmentForm'); - const TextForm = () => import(/* webpackChunkName: "content-forms" */'@/components/content-forms/TextForm'); + const ContentElement = () => import(/* webpackChunkName: "content-forms" */'@/components/content-block-form/ContentElement'); const Modal = () => import('@/components/Modal'); - const TrashIcon = () => import(/* webpackChunkName: "icons" */'@/components/icons/TrashIcon'); const Checkbox = () => import('@/components/ui/Checkbox'); export default { props: { - 'content-block': Object, - 'block-type': { + contentBlock: Object, + blockType: { type: String, default: 'ContentBlock', }, - 'show-task-selection': { + showTaskSelection: { type: Boolean, default: false, }, - 'disable-save': { + disableSave: { type: Boolean, default: false, }, }, components: { + ContentElement, Modal, - ContentBlockElementChooserWidget, ModalInput, AddContentElement, - LinkForm, - VideoForm, - ImageForm, - DocumentForm, - AssignmentForm, - TextForm, - TrashIcon, Checkbox, }, @@ -157,119 +116,11 @@ }, methods: { - type(element) { - switch (element.type) { - case 'link_block': - return 'link-form'; - case 'video_block': - return 'video-form'; - case 'image_url_block': - return 'image-form'; - case 'text_block': - return 'text-form'; - case 'assignment': - return 'assignment-form'; - case 'document_block': - return 'document-form'; - } - return 'content-block-element-chooser-widget'; + setContentBlockType(checked, localContentBlock) { + this.localContentBlock.isAssignment = checked; }, - _updateProperty(value, index, key) { - const content = this.localContentBlock.contents[index]; - this.localContentBlock.contents.splice(index, 1, { - ...content, - value: { - ...content.value, - [key]: value, - }, - }); - }, - changeLinkUrl(value, index) { - this._updateProperty(value, index, 'url'); - }, - changeLinkText(value, index) { - this._updateProperty(value, index, 'text'); - }, - changeVideoUrl(value, index) { - this._updateProperty(value, index, 'url'); - }, - changeImageUrl(value, index) { - this._updateProperty(value, index, 'url'); - }, - changeDocumentUrl(value, index) { - this._updateProperty(value, index, 'url'); - }, - changeTextValue(value, index) { - this._updateProperty(value, index, 'text'); - }, - changeAssignmentTitle(value, index) { - this._updateProperty(value, index, 'title'); - }, - changeAssignmentAssignment(value, index) { - this._updateProperty(value, index, 'assignment'); - }, - removeElement(index) { - this.localContentBlock.contents.splice(index, 1); - }, - addElement(index) { - this.localContentBlock.contents.splice(index + 1, 0, { - hideAssignment: this.blockType !== 'ContentBlock', - }); - }, - updateTitle(title) { - this.localContentBlock.title = title; - this.error = false; - }, - changeType(index, type, value) { - let el = { - type: type, - value: Object.assign({}, value), - }; - switch (type) { - case 'text_block': - el = { - ...el, - value: { - text: '', - }, - }; - break; - case 'link_block': - el = { - ...el, - value: { - text: '', - url: '', - }, - }; - break; - case 'video_block': - el = { - ...el, - value: { - url: '', - }, - }; - break; - case 'document_block': - el = { - ...el, - value: Object.assign({ - url: '', - }, value), - }; - break; - case 'image_url_block': - el = { - ...el, - value: { - url: '', - }, - }; - break; - } - - this.localContentBlock.contents.splice(index, 1, el); + update(index, element) { + this.localContentBlock.contents.splice(index, 1, element); }, save() { if (!this.disableSave) { @@ -280,27 +131,31 @@ this.$emit('save', this.localContentBlock); } }, - setContentBlockType(checked, localContentBlock) { - this.localContentBlock.isAssignment = checked; + updateTitle(title) { + this.localContentBlock.title = title; + this.error = false; }, - switchToDocument(index, value) { - this.changeType(index, 'document_block', value); + addElement(index) { + this.localContentBlock.contents.splice(index + 1, 0, { + hideAssignment: this.blockType !== 'ContentBlock', + }); }, + remove(index) { + this.localContentBlock.contents.splice(index, 1); + }, + }, };