From ab7b15f2c088258aba5dadf7d4728c667dd0d549 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Sun, 25 May 2025 18:00:58 +0200 Subject: [PATCH] feat(builder): allow to define `allowed_widgets` in form options --- CHANGELOG.md | 1 + .../BuilderBlock/Block/Bootstrap/BootstrapBlock.php | 2 +- src/core/BuilderBlock/Block/Editor/EditorBlock.php | 2 +- src/core/Form/Type/BuilderType.php | 4 ++++ .../js/components/builder-block/BuilderBlock.vue | 11 ++++++++--- src/core/Resources/assets/js/modules/builder-block.js | 4 +++- .../views/form/bootstrap_4_form_theme.html.twig | 3 ++- 7 files changed, 20 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8524a87..64c58e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### Added * add option `removeItemButton: true` when applying choices.js +* feat(builder): allow to define `allowed_widgets` in form options * feat(collection): add delete_attr, add_attr options * feat(builder): allow to add block between children * feat(builder): improve UI to add new block diff --git a/src/core/BuilderBlock/Block/Bootstrap/BootstrapBlock.php b/src/core/BuilderBlock/Block/Bootstrap/BootstrapBlock.php index 12fc12e..1f332ba 100644 --- a/src/core/BuilderBlock/Block/Bootstrap/BootstrapBlock.php +++ b/src/core/BuilderBlock/Block/Bootstrap/BootstrapBlock.php @@ -5,7 +5,7 @@ namespace App\Core\BuilderBlock\Block\Bootstrap; use App\Core\BuilderBlock\BuilderBlock; use Symfony\Component\DependencyInjection\Attribute\AutoconfigureTag; -class BootstrapBlock extends BuilderBlock +abstract class BootstrapBlock extends BuilderBlock { public function configure() { diff --git a/src/core/BuilderBlock/Block/Editor/EditorBlock.php b/src/core/BuilderBlock/Block/Editor/EditorBlock.php index e89296a..3172048 100644 --- a/src/core/BuilderBlock/Block/Editor/EditorBlock.php +++ b/src/core/BuilderBlock/Block/Editor/EditorBlock.php @@ -5,7 +5,7 @@ namespace App\Core\BuilderBlock\Block\Editor; use App\Core\BuilderBlock\BuilderBlock; use Symfony\Component\DependencyInjection\Attribute\AutoconfigureTag; -class EditorBlock extends BuilderBlock +abstract class EditorBlock extends BuilderBlock { public function configure() { diff --git a/src/core/Form/Type/BuilderType.php b/src/core/Form/Type/BuilderType.php index d1f32d5..1f2fd09 100644 --- a/src/core/Form/Type/BuilderType.php +++ b/src/core/Form/Type/BuilderType.php @@ -19,6 +19,7 @@ class BuilderType extends AbstractType parent::buildView($view, $form, $options); $view->vars = array_replace($view->vars, [ + 'allowed_widgets' => $options['allowed_widgets'], ]); } @@ -28,7 +29,10 @@ class BuilderType extends AbstractType $resolver->setDefaults([ 'compound' => false, + 'allowed_widgets' => [], ]); + + $resolver->setAllowedTypes('allowed_widgets', 'array'); } public function getBlockPrefix() diff --git a/src/core/Resources/assets/js/components/builder-block/BuilderBlock.vue b/src/core/Resources/assets/js/components/builder-block/BuilderBlock.vue index f7edb9b..b13233c 100644 --- a/src/core/Resources/assets/js/components/builder-block/BuilderBlock.vue +++ b/src/core/Resources/assets/js/components/builder-block/BuilderBlock.vue @@ -8,7 +8,7 @@ :container="value" :widgets="widgets" :openedBlocks="openedBlocks" - :allowedWidgets="[]" + :allowedWidgets="allowedWidgets" v-if="value.length > 0" position="top" /> @@ -40,7 +40,7 @@ :container="value" :widgets="widgets" :openedBlocks="openedBlocks" - :allowedWidgets="[]" + :allowedWidgets="allowedWidgets" :position="key" /> @@ -50,7 +50,7 @@ :container="value" :widgets="widgets" :openedBlocks="openedBlocks" - :allowedWidgets="[]" + :allowedWidgets="allowedWidgets" position="bottom" />
@@ -100,6 +100,11 @@ export default { initialValue: { type: Array, required: false, + }, + allowedWidgets: { + type: Array, + required: false, + default: [], } }, data() { diff --git a/src/core/Resources/assets/js/modules/builder-block.js b/src/core/Resources/assets/js/modules/builder-block.js index 5c87bfc..1e70e89 100644 --- a/src/core/Resources/assets/js/modules/builder-block.js +++ b/src/core/Resources/assets/js/modules/builder-block.js @@ -12,12 +12,14 @@ module.exports = () => { el: component, template: ``, data() { return { - value: JSON.parse(component.getAttribute('data-value')) + value: JSON.parse(component.getAttribute('data-value')), + allowedWidgets: JSON.parse(component.getAttribute('data-allowedwidgets')), } }, components: { diff --git a/src/core/Resources/views/form/bootstrap_4_form_theme.html.twig b/src/core/Resources/views/form/bootstrap_4_form_theme.html.twig index 554f34a..735bad5 100644 --- a/src/core/Resources/views/form/bootstrap_4_form_theme.html.twig +++ b/src/core/Resources/views/form/bootstrap_4_form_theme.html.twig @@ -3,13 +3,14 @@ {% block builder_widget %} {% set row_attr = row_attr|merge({class: 'builder-widget ' ~ (row_attr.class ?? '')}) %} {% set value = value is iterable ? value|json_encode : value %} + {% set allowed_widgets = allowed_widgets is iterable ? allowed_widgets|json_encode : allowed_widgets %} {% if value == '' %} {% set value = '[]' %} {% endif %}
-
+
{% endblock %}