Refactor content element component

This commit is contained in:
Ramon Wenger 2022-01-20 17:23:22 +01:00
parent b9ccf1700f
commit 1a87dbb788
1 changed files with 57 additions and 11 deletions

View File

@ -1,9 +1,10 @@
<template> <template>
<div class="content-element"> <div class="content-element">
<component <content-block-element-chooser-widget
:class="['content-element__component', {'content-element__chooser': type(element) === 'content-block-element-chooser-widget'}]" :class="['content-element__component', 'content-element__chooser']"
v-bind="element" v-bind="element"
:is="type(element)" v-if="isChooser"
@change-type="changeType" @change-type="changeType"
/> />
<content-form-section <content-form-section
@ -51,6 +52,8 @@
const AssignmentForm = () => import(/* webpackChunkName: "content-forms" */'@/components/content-forms/AssignmentForm'); const AssignmentForm = () => import(/* webpackChunkName: "content-forms" */'@/components/content-forms/AssignmentForm');
const TextForm = () => import(/* webpackChunkName: "content-forms" */'@/components/content-forms/TextForm'); const TextForm = () => import(/* webpackChunkName: "content-forms" */'@/components/content-forms/TextForm');
const CHOOSER = 'content-block-element-chooser-widget';
export default { export default {
props: { props: {
element: { element: {
@ -71,23 +74,66 @@
TextForm, TextForm,
}, },
computed: {
isChooser() {
return this.component === CHOOSER;
},
type() {
return this.getType(this.element);
},
component() {
return this.type.component;
},
title() {
return this.type.title;
}
},
methods: { methods: {
type(element) { getType(element) {
switch (element.type) { switch (element.type) {
case 'link_block': case 'link_block':
return 'link-form'; return {
component: 'link-form',
title: 'Link',
icon: 'link-icon'
};
case 'video_block': case 'video_block':
return 'video-form'; return {
component: 'video-form',
title: 'Video',
icon: 'video-icon'
};
case 'image_url_block': case 'image_url_block':
return 'image-form'; return {
component: 'image-form',
title: 'Bild',
icon: 'image-icon'
};
case 'text_block': case 'text_block':
return 'text-form'; return {
component: 'text-form',
title: 'Text',
icon: 'text-icon'
};
case 'assignment': case 'assignment':
return 'assignment-form'; return {
component: 'assignment-form',
title: 'Aufgabe & Ergebnis',
icon: 'speech-bubble-icon'
};
case 'document_block': case 'document_block':
return 'document-form'; return {
component: 'document-form',
title: 'Dokument',
icon: 'document-icon'
};
} }
return 'content-block-element-chooser-widget'; return {
component: CHOOSER,
title: '',
icon: ''
};
}, },
_updateProperty(value, key) { _updateProperty(value, key) {
// const content = this.localContentBlock.contents[index]; // const content = this.localContentBlock.contents[index];