Pass content of the textEditor to the symfony form

This commit is contained in:
Julie Lenaerts 2025-02-17 16:25:17 +01:00
parent a6eb28175a
commit dcd1777a70
7 changed files with 24 additions and 34 deletions

View File

@ -43,7 +43,7 @@ class CommentType extends AbstractType
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) { $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
$data = $event->getForm()->getData(); $data = $event->getForm()->getData();
$comment = $event->getData() ?? ['comment' => '']; $comment = ['comment' => $event->getData()] ?? ['comment' => ''];
if (null !== $data && $data->getComment() !== $comment['comment']) { if (null !== $data && $data->getComment() !== $comment['comment']) {
$data->setDate(new \DateTime()); $data->setDate(new \DateTime());

View File

@ -33,3 +33,7 @@
.editor-wrapper { .editor-wrapper {
position: relative; position: relative;
} }
.hidden-textarea {
display: none;
}

View File

@ -2,7 +2,7 @@ import App from "../../vuejs/CommentEditor/App.vue"
import { createApp, reactive } from "vue"; import { createApp, reactive } from "vue";
const ckeditorFields: NodeListOf<HTMLTextAreaElement> = const ckeditorFields: NodeListOf<HTMLTextAreaElement> =
document.querySelectorAll(".vue-comment-editor"); document.querySelectorAll("[id^='comment-app']");
const globalState = reactive({ const globalState = reactive({
isSimple: localStorage.getItem('editorMode') === 'simple' isSimple: localStorage.getItem('editorMode') === 'simple'
@ -12,8 +12,8 @@ window.addEventListener('storage', () => {
}); });
ckeditorFields.forEach((field: HTMLTextAreaElement): void => { ckeditorFields.forEach((field: HTMLTextAreaElement): void => {
console.log('field', field) const app = createApp(App,{
const app = createApp({ fieldName: field.dataset.fieldName,
template: `<app></app>` template: `<app></app>`
}); });

View File

@ -1,7 +1,11 @@
<template> <template>
<div> <div>
<div> <div>
<comment-editor :isSimple="globalState.isSimple" @toggle="toggleEditorMode" @change="handleChange"></comment-editor> <comment-editor
:isSimple="globalState.isSimple"
:fieldName="fieldName"
@toggle="toggleEditorMode"
></comment-editor>
</div> </div>
</div> </div>
</template> </template>
@ -13,22 +17,19 @@ import CommentEditor from "../CommentEditor/component/CommentEditor.vue";
export default defineComponent({ export default defineComponent({
name: "App", name: "App",
components: { CommentEditor }, components: { CommentEditor },
props: {
fieldName: String
},
setup() { setup() {
console.log('im loaded')
const globalState = inject('globalState'); const globalState = inject('globalState');
const toggleEditorMode = () => { const toggleEditorMode = () => {
globalState.isSimple = !globalState.isSimple; globalState.isSimple = !globalState.isSimple;
localStorage.setItem('editorMode', globalState.isSimple ? 'simple' : 'rich'); localStorage.setItem('editorMode', globalState.isSimple ? 'simple' : 'rich');
}; };
const handleChange = (newContent) => {
console.log(newContent)
};
return { return {
globalState, globalState,
toggleEditorMode, toggleEditorMode,
handleChange
}; };
} }
}); });

View File

@ -2,20 +2,18 @@
<div :class="{'editor-container': true, 'rich-editor-active': !isSimple}"> <div :class="{'editor-container': true, 'rich-editor-active': !isSimple}">
<div v-if="!isSimple" class="editor-wrapper"> <div v-if="!isSimple" class="editor-wrapper">
<ckeditor <ckeditor
name="content" :name="fieldName"
:editor="classicEditor" :editor="classicEditor"
:config="editorConfig" :config="editorConfig"
v-model="content" v-model.lazy="content"
tag-name="textarea" tag-name="textarea"
@input="emitChange"
/> />
</div> </div>
<div v-else class="editor-wrapper"> <div v-else class="editor-wrapper">
<textarea <textarea
v-model="content" v-model.lazy="content"
name="content" :name="fieldName"
class="form-control" class="form-control"
@input="emitChange"
></textarea> ></textarea>
</div> </div>
<a @click="toggleSimpleEditor" class="toggle-button">{{ isSimple ? "rich" : "simple" }}</a> <a @click="toggleSimpleEditor" class="toggle-button">{{ isSimple ? "rich" : "simple" }}</a>
@ -23,7 +21,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent, ref, watch, toRefs } from 'vue'; import { defineComponent, ref, computed, toRefs } from 'vue';
import { Ckeditor } from "@ckeditor/ckeditor5-vue"; import { Ckeditor } from "@ckeditor/ckeditor5-vue";
import classicEditorConfig from "ChillMainAssets/module/ckeditor5/editor_config"; import classicEditorConfig from "ChillMainAssets/module/ckeditor5/editor_config";
import { ClassicEditor } from "ckeditor5"; import { ClassicEditor } from "ckeditor5";
@ -36,9 +34,9 @@ export default defineComponent({
props: { props: {
type: String, type: String,
isSimple: Boolean, isSimple: Boolean,
fieldName: String,
}, },
setup(props, { emit }) { setup(props, { emit }) {
console.log("im loaded too")
const { isSimple } = toRefs(props); const { isSimple } = toRefs(props);
const content = ref(""); const content = ref("");
const classicEditor = ClassicEditor; const classicEditor = ClassicEditor;
@ -48,22 +46,13 @@ export default defineComponent({
emit("toggle"); emit("toggle");
}; };
const emitChange = () => {
emit("change", content.value);
};
return { return {
isSimple, isSimple,
content, content,
classicEditor, classicEditor,
editorConfig, editorConfig,
toggleSimpleEditor, toggleSimpleEditor,
emitChange
}; };
} }
}); });
</script> </script>
<style scoped lang="scss">
</style>

View File

@ -214,7 +214,7 @@
{% block private_comment_widget %} {% block private_comment_widget %}
{% for entry in form %} {% for entry in form %}
<div class="vue-comment-editor"> <div id="comment-app-{{ form.vars.id }}" data-field-name="{{ form.vars.full_name }}">
{{ form_widget(entry, { attr: { ckeditor: 'true' } }) }} {{ form_widget(entry, { attr: { ckeditor: 'true' } }) }}
</div> </div>
{% endfor %} {% endfor %}
@ -226,7 +226,7 @@
{% block comment_widget %} {% block comment_widget %}
{% for entry in form %} {% for entry in form %}
<div class="vue-comment-editor"> <div id="comment-app-{{ form.vars.id }}" data-field-name="{{ form.vars.full_name }}">
{{ form_widget(entry, { attr: { ckeditor: 'true' } }) }} {{ form_widget(entry, { attr: { ckeditor: 'true' } }) }}
</div> </div>
{% endfor %} {% endfor %}

View File

@ -120,8 +120,4 @@ module.exports = function (encore, entries) {
"vue_onthefly", "vue_onthefly",
__dirname + "/Resources/public/vuejs/OnTheFly/index.js", __dirname + "/Resources/public/vuejs/OnTheFly/index.js",
); );
encore.addEntry(
"vue_comment_editor",
__dirname + "/Resources/public/vuejs/CommentEditor/index.js",
);
}; };