Overview

Perhaps it's premature to report these kinds of bugs since there is a lot changing right now, but will do anyway...

  1. Installed XB per these instructions.
  2. Clicked + to see components
  3. Dragged the "shoe button" into the desktop area
  4. Add more text to the shoe button title on the right sidebar
  5. Error popped up
  6. Went back to /xb/node/1 and tried again and got the same result

XB error

Proposed resolution

Debug and fix ;)

User interface changes

No error popup.

Command icon Show commands

Start within a Git clone of the project using the version control instructions.

Or, if you do not have SSH keys set up on git.drupalcode.org:

Comments

kristen pol created an issue. See original summary.

kristen pol’s picture

Note there are a number of errors in the logs like:

Warning: Trying to access array offset on null in Drupal\experience_builder\Form\ComponentPropsForm->buildForm() (line 73 of /var/www/html/web/modules/contrib/experience_builder/src/Form/ComponentPropsForm.php)
Warning: Undefined array key "icon_position" in Drupal\experience_builder\Form\ComponentPropsForm->buildForm() (line 73 of /var/www/html/web/modules/contrib/experience_builder/src/Form/ComponentPropsForm.php)
Warning: Undefined array key "download" in Drupal\experience_builder\Form\ComponentPropsForm->buildForm() (line 73 of /var/www/html/web/modules/contrib/experience_builder/src/Form/ComponentPropsForm.php)
kristen pol’s picture

Tested the other components and many have the same problem (all the "shoe" ones). The heading and and hero components let me change their title text. When I upload an image for the image component, I'm redirected which is a different bug obviously but won't add another issue for that for now.

wim leers’s picture

Assigned: Unassigned » kristen pol
Status: Active » Closed (duplicate)
Related issues: +#3469461: New component requirement: each SDC prop must have StorablePropShape

I predicted this problem, which is why I opened #3469461: New component requirement: each SDC prop must have StorablePropShape, which is almost done and will fix this. Crediting you on that issue for reporting this 👍

kristen pol’s picture

Assigned: kristen pol » Unassigned
Status: Closed (duplicate) » Active

Reopening this one.

#3469461: New component requirement: each SDC prop must have StorablePropShape

is marked fixed but I just tried the latest code with a fresh install using these instructions and am getting the same behavior again.

I don't see "Shoe Button" listed anymore, but I tried "Shoe Badge" with similar behavior.

Logs:

Warning: Undefined array key "pill" in Drupal\experience_builder\Form\ComponentPropsForm->buildForm() (line 73 of /var/www/html/web/modules/contrib/experience_builder/src/Form/ComponentPropsForm.php)
#0 /var/www/html/web/core/includes/bootstrap.inc(166): _drupal_error_handler_real()
#1 /var/www/html/web/modules/contrib/experience_builder/src/Form/ComponentPropsForm.php(73): _drupal_error_handler()
#2 [internal function]: Drupal\experience_builder\Form\ComponentPropsForm->buildForm()
#3 /var/www/html/web/core/lib/Drupal/Core/Form/FormBuilder.php(536): call_user_func_array()
#4 /var/www/html/web/core/lib/Drupal/Core/Form/FormBuilder.php(284): Drupal\Core\Form\FormBuilder->retrieveForm()
#5 /var/www/html/web/core/lib/Drupal/Core/Controller/FormController.php(73): Drupal\Core\Form\FormBuilder->buildForm()
#6 [internal function]: Drupal\Core\Controller\FormController->getContentResult()
#7 /var/www/html/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array()
#8 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(638): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
#9 /var/www/html/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(121): Drupal\Core\Render\Renderer->executeInRenderContext()
#10 /var/www/html/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext()
#11 /var/www/html/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
#12 /var/www/html/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw()
#13 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle()
#14 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle()
#15 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle()
#16 /var/www/html/web/core/modules/big_pipe/src/StackMiddleware/ContentLength.php(32): Drupal\Core\StackMiddleware\ContentLength->handle()
#17 /var/www/html/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\big_pipe\StackMiddleware\ContentLength->handle()
#18 /var/www/html/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass()
#19 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle()
#20 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle()
#21 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(36): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle()
#22 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\AjaxPageState->handle()
#23 /var/www/html/web/core/lib/Drupal/Core/DrupalKernel.php(741): Drupal\Core\StackMiddleware\StackedHttpKernel->handle()
#24 /var/www/html/web/index.php(19): Drupal\Core\DrupalKernel->handle()
#25 {main}
Warning: Undefined array key "pulse" in Drupal\experience_builder\Form\ComponentPropsForm->buildForm() (line 73 of /var/www/html/web/modules/contrib/experience_builder/src/Form/ComponentPropsForm.php)
#0 /var/www/html/web/core/includes/bootstrap.inc(166): _drupal_error_handler_real()
#1 /var/www/html/web/modules/contrib/experience_builder/src/Form/ComponentPropsForm.php(73): _drupal_error_handler()
#2 [internal function]: Drupal\experience_builder\Form\ComponentPropsForm->buildForm()
#3 /var/www/html/web/core/lib/Drupal/Core/Form/FormBuilder.php(536): call_user_func_array()
#4 /var/www/html/web/core/lib/Drupal/Core/Form/FormBuilder.php(284): Drupal\Core\Form\FormBuilder->retrieveForm()
#5 /var/www/html/web/core/lib/Drupal/Core/Controller/FormController.php(73): Drupal\Core\Form\FormBuilder->buildForm()
#6 [internal function]: Drupal\Core\Controller\FormController->getContentResult()
#7 /var/www/html/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array()
#8 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(638): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
#9 /var/www/html/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(121): Drupal\Core\Render\Renderer->executeInRenderContext()
#10 /var/www/html/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext()
#11 /var/www/html/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
#12 /var/www/html/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw()
#13 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle()
#14 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle()
#15 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle()
#16 /var/www/html/web/core/modules/big_pipe/src/StackMiddleware/ContentLength.php(32): Drupal\Core\StackMiddleware\ContentLength->handle()
#17 /var/www/html/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\big_pipe\StackMiddleware\ContentLength->handle()
#18 /var/www/html/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass()
#19 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle()
#20 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle()
#21 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(36): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle()
#22 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\AjaxPageState->handle()
#23 /var/www/html/web/core/lib/Drupal/Core/DrupalKernel.php(741): Drupal\Core\StackMiddleware\StackedHttpKernel->handle()
#24 /var/www/html/web/index.php(19): Drupal\Core\DrupalKernel->handle()
#25 {main}
Message	Warning: Trying to access array offset on null in Drupal\experience_builder\Form\ComponentPropsForm->buildForm() (line 73 of /var/www/html/web/modules/contrib/experience_builder/src/Form/ComponentPropsForm.php)
#0 /var/www/html/web/core/includes/bootstrap.inc(166): _drupal_error_handler_real()
#1 /var/www/html/web/modules/contrib/experience_builder/src/Form/ComponentPropsForm.php(73): _drupal_error_handler()
#2 [internal function]: Drupal\experience_builder\Form\ComponentPropsForm->buildForm()
#3 /var/www/html/web/core/lib/Drupal/Core/Form/FormBuilder.php(536): call_user_func_array()
#4 /var/www/html/web/core/lib/Drupal/Core/Form/FormBuilder.php(284): Drupal\Core\Form\FormBuilder->retrieveForm()
#5 /var/www/html/web/core/lib/Drupal/Core/Controller/FormController.php(73): Drupal\Core\Form\FormBuilder->buildForm()
#6 [internal function]: Drupal\Core\Controller\FormController->getContentResult()
#7 /var/www/html/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array()
#8 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(638): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
#9 /var/www/html/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(121): Drupal\Core\Render\Renderer->executeInRenderContext()
#10 /var/www/html/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext()
#11 /var/www/html/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
#12 /var/www/html/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw()
#13 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle()
#14 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle()
#15 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle()
#16 /var/www/html/web/core/modules/big_pipe/src/StackMiddleware/ContentLength.php(32): Drupal\Core\StackMiddleware\ContentLength->handle()
#17 /var/www/html/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\big_pipe\StackMiddleware\ContentLength->handle()
#18 /var/www/html/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass()
#19 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle()
#20 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle()
#21 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(36): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle()
#22 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\AjaxPageState->handle()
#23 /var/www/html/web/core/lib/Drupal/Core/DrupalKernel.php(741): Drupal\Core\StackMiddleware\StackedHttpKernel->handle()
#24 /var/www/html/web/index.php(19): Drupal\Core\DrupalKernel->handle()
#25 {main}
Drupal\Core\Render\Component\Exception\InvalidComponentException: [pill] Integer value found, but a boolean or an object is required/n[pulse] String value found, but a boolean or an object is required in Drupal\Core\Theme\Component\ComponentValidator->validateProps() (line 203 of /var/www/html/web/core/lib/Drupal/Core/Theme/Component/ComponentValidator.php).

#0 /var/www/html/web/core/lib/Drupal/Core/Template/ComponentsTwigExtension.php(127): Drupal\Core\Theme\Component\ComponentValidator->validateProps()
#1 /var/www/html/web/core/lib/Drupal/Core/Template/ComponentsTwigExtension.php(109): Drupal\Core\Template\ComponentsTwigExtension->doValidateProps()
#2 /var/www/html/web/sites/default/files/php/twig/66d025ca492ff_experience_builder:shoe_b_1MG5agHVvcJo_Pcqlpl97KFIk/uhIQQ8-FwrK24uki6fzvdY6lQCxoKjx76OBLorAG2fE.php(43): Drupal\Core\Template\ComponentsTwigExtension->validateProps()
#3 /var/www/html/vendor/twig/twig/src/Template.php(360): __TwigTemplate_a065b8b7ca093140df6d582ecb978039->doDisplay()
#4 /var/www/html/web/sites/default/files/php/twig/66d025ca492ff___string_template__6d15ed_pztJZ_2hkq2PSuj-eaXUPfFP6/fUxgD60nVLiTWXEJ4IvMJa47jIg1ffTz_eb41AHv-6U.php(123): Twig\Template->yield()
#5 /var/www/html/vendor/twig/twig/src/Template.php(360): __TwigTemplate_6f2f2892690a25b32886131362215d79___1273635156->doDisplay()
#6 /var/www/html/web/sites/default/files/php/twig/66d025ca492ff___string_template__6d15ed_pztJZ_2hkq2PSuj-eaXUPfFP6/fUxgD60nVLiTWXEJ4IvMJa47jIg1ffTz_eb41AHv-6U.php(40): Twig\Template->yield()
#7 /var/www/html/vendor/twig/twig/src/Template.php(360): __TwigTemplate_6f2f2892690a25b32886131362215d79->doDisplay()
#8 /var/www/html/vendor/twig/twig/src/Template.php(335): Twig\Template->yield()
#9 /var/www/html/vendor/twig/twig/src/TemplateWrapper.php(38): Twig\Template->render()
#10 /var/www/html/web/core/lib/Drupal/Core/Template/TwigEnvironment.php(234): Twig\TemplateWrapper->render()
#11 /var/www/html/web/core/lib/Drupal/Core/Render/Element/InlineTemplate.php(54): Drupal\Core\Template\TwigEnvironment->renderInline()
#12 [internal function]: Drupal\Core\Render\Element\InlineTemplate::preRenderInlineTemplate()
#13 /var/www/html/web/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php(113): call_user_func_array()
#14 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(870): Drupal\Core\Render\Renderer->doTrustedCallback()
#15 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(432): Drupal\Core\Render\Renderer->doCallback()
#16 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(504): Drupal\Core\Render\Renderer->doRender()
#17 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(504): Drupal\Core\Render\Renderer->doRender()
#18 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#19 /var/www/html/web/core/lib/Drupal/Core/Template/TwigExtension.php(475): Drupal\Core\Render\Renderer->render()
#20 /var/www/html/web/sites/default/files/php/twig/66d025ca492ff___string_template__61f286_cr4z0MdOC8FLvYnVGaIZR7XtO/1MaloL-Nmefv-9wEP3jVaQeEZT2chmmgprtUoAfY7MY.php(147): Drupal\Core\Template\TwigExtension->escapeFilter()
#21 /var/www/html/vendor/twig/twig/src/Template.php(430): __TwigTemplate_7ea36e8c2fe70c246011f10332ef82f2___1709422647->block_column_two()
#22 /var/www/html/vendor/twig/twig/src/Template.php(193): Twig\Template->yieldBlock()
#23 /var/www/html/web/sites/default/files/php/twig/66d025ca492ff_experience_builder:two_co_z7IWqBG4CjqhiCCoQroz8Vq0z/aTzvWJEkqXRw3egXCGkXYKlFp_TZwCq3pHjY4-BJ5T0.php(66): Twig\Template->renderBlock()
#24 /var/www/html/vendor/twig/twig/src/Template.php(360): __TwigTemplate_d232d4b58ef9ebdaa18420c2676ce452->doDisplay()
#25 /var/www/html/web/sites/default/files/php/twig/66d025ca492ff___string_template__61f286_cr4z0MdOC8FLvYnVGaIZR7XtO/1MaloL-Nmefv-9wEP3jVaQeEZT2chmmgprtUoAfY7MY.php(125): Twig\Template->yield()
#26 /var/www/html/vendor/twig/twig/src/Template.php(360): __TwigTemplate_7ea36e8c2fe70c246011f10332ef82f2___1709422647->doDisplay()
#27 /var/www/html/web/sites/default/files/php/twig/66d025ca492ff___string_template__61f286_cr4z0MdOC8FLvYnVGaIZR7XtO/1MaloL-Nmefv-9wEP3jVaQeEZT2chmmgprtUoAfY7MY.php(40): Twig\Template->yield()
#28 /var/www/html/vendor/twig/twig/src/Template.php(360): __TwigTemplate_7ea36e8c2fe70c246011f10332ef82f2->doDisplay()
#29 /var/www/html/vendor/twig/twig/src/Template.php(335): Twig\Template->yield()
#30 /var/www/html/vendor/twig/twig/src/TemplateWrapper.php(38): Twig\Template->render()
#31 /var/www/html/web/core/lib/Drupal/Core/Template/TwigEnvironment.php(234): Twig\TemplateWrapper->render()
#32 /var/www/html/web/core/lib/Drupal/Core/Render/Element/InlineTemplate.php(54): Drupal\Core\Template\TwigEnvironment->renderInline()
#33 [internal function]: Drupal\Core\Render\Element\InlineTemplate::preRenderInlineTemplate()
#34 /var/www/html/web/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php(113): call_user_func_array()
#35 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(870): Drupal\Core\Render\Renderer->doTrustedCallback()
#36 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(432): Drupal\Core\Render\Renderer->doCallback()
#37 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(504): Drupal\Core\Render\Renderer->doRender()
#38 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(504): Drupal\Core\Render\Renderer->doRender()
#39 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(504): Drupal\Core\Render\Renderer->doRender()
#40 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#41 /var/www/html/web/core/lib/Drupal/Core/Template/TwigExtension.php(475): Drupal\Core\Render\Renderer->render()
#42 /var/www/html/web/sites/default/files/php/twig/66d025ca492ff_page.html.twig_YUdYz6x-iJcRjvTYNH_DVwpw6/cxvdO_x3zsLgBV8yAEIPUvwsKoRTq1Q3fTmRdPVnWng.php(163): Drupal\Core\Template\TwigExtension->escapeFilter()
#43 /var/www/html/vendor/twig/twig/src/Template.php(360): __TwigTemplate_202aa75686e2177fb449be965643e91a->doDisplay()
#44 /var/www/html/vendor/twig/twig/src/Template.php(335): Twig\Template->yield()
#45 /var/www/html/vendor/twig/twig/src/TemplateWrapper.php(38): Twig\Template->render()
#46 /var/www/html/web/core/themes/engines/twig/twig.engine(33): Twig\TemplateWrapper->render()
#47 /var/www/html/web/modules/contrib/experience_builder/themes/engines/semi_coupled/semi_coupled.engine(39): twig_render_template()
#48 /var/www/html/web/core/lib/Drupal/Core/Theme/ThemeManager.php(348): semi_coupled_render_template()
#49 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(491): Drupal\Core\Theme\ThemeManager->render()
#50 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#51 /var/www/html/web/core/lib/Drupal/Core/Template/TwigExtension.php(475): Drupal\Core\Render\Renderer->render()
#52 /var/www/html/web/sites/default/files/php/twig/66d025ca492ff_html.html.twig_52Qf1eg-AtuaMf7xGvt3ekB9z/NNbpV-dWovNIAeLxnsgKAszjO5GneNO3M6ywn4t8xgw.php(94): Drupal\Core\Template\TwigExtension->escapeFilter()
#53 /var/www/html/vendor/twig/twig/src/Template.php(360): __TwigTemplate_2be45878b8e9ee78d9e324a1567b13d1->doDisplay()
#54 /var/www/html/vendor/twig/twig/src/Template.php(335): Twig\Template->yield()
#55 /var/www/html/vendor/twig/twig/src/TemplateWrapper.php(38): Twig\Template->render()
#56 /var/www/html/web/core/themes/engines/twig/twig.engine(33): Twig\TemplateWrapper->render()
#57 /var/www/html/web/modules/contrib/experience_builder/themes/engines/semi_coupled/semi_coupled.engine(39): twig_render_template()
#58 /var/www/html/web/core/lib/Drupal/Core/Theme/ThemeManager.php(348): semi_coupled_render_template()
#59 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(491): Drupal\Core\Theme\ThemeManager->render()
#60 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#61 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(153): Drupal\Core\Render\Renderer->render()
#62 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(638): Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}()
#63 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(152): Drupal\Core\Render\Renderer->executeInRenderContext()
#64 /var/www/html/web/core/lib/Drupal/Core/Render/BareHtmlPageRenderer.php(66): Drupal\Core\Render\Renderer->renderRoot()
#65 /var/www/html/web/core/lib/Drupal/Core/ProxyClass/Render/BareHtmlPageRenderer.php(76): Drupal\Core\Render\BareHtmlPageRenderer->renderBarePage()
#66 /var/www/html/web/modules/contrib/experience_builder/src/Controller/SdcController.php(354): Drupal\Core\ProxyClass\Render\BareHtmlPageRenderer->renderBarePage()
#67 [internal function]: Drupal\experience_builder\Controller\SdcController->preview()
#68 /var/www/html/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array()
#69 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(638): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
#70 /var/www/html/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(121): Drupal\Core\Render\Renderer->executeInRenderContext()
#71 /var/www/html/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext()
#72 /var/www/html/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
#73 /var/www/html/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw()
#74 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle()
#75 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle()
#76 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle()
#77 /var/www/html/web/core/modules/big_pipe/src/StackMiddleware/ContentLength.php(32): Drupal\Core\StackMiddleware\ContentLength->handle()
#78 /var/www/html/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\big_pipe\StackMiddleware\ContentLength->handle()
#79 /var/www/html/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass()
#80 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle()
#81 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle()
#82 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(36): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle()
#83 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\AjaxPageState->handle()
#84 /var/www/html/web/core/lib/Drupal/Core/DrupalKernel.php(741): Drupal\Core\StackMiddleware\StackedHttpKernel->handle()
#85 /var/www/html/web/index.php(19): Drupal\Core\DrupalKernel->handle()
#86 {main}
wim leers’s picture

Title: SyntaxError: Unexpected token 'T', "The websit"... is not valid JSON » "Shoe Badge" component: `Undefined array key "pill" in Drupal\experience_builder\Form\ComponentPropsForm->buildForm()`
Priority: Normal » Critical
Status: Active » Needs work

Needs investigating.

kristen pol’s picture

This isn't just "shoe badge"... also happens with:

  • Shoe Icon
  • Shoe Tab
  • Shoe Tab Group
  • Shoe Tab Panel
wim leers’s picture

Assigned: Unassigned » wim leers
wim leers’s picture

Title: "Shoe Badge" component: `Undefined array key "pill" in Drupal\experience_builder\Form\ComponentPropsForm->buildForm()` » Component config entities are incomplete: missing entries for many props
Component: Page builder » Config management
Issue tags: +Configuration schema, +validation

This is happening even for the experience_builder:my-hero SDC.

The root cause for the symptom took me 10 seconds to find. \Drupal\experience_builder\Form\ComponentPropsForm::buildForm() calls $component->get('defaults')['props'][$sdc_prop_name]['field_type'], but not all prop names have an entry in the Component config entity:

uuid: 122bc978-25ca-45d0-b4df-71f9acd9827b
langcode: en
status: true
dependencies: {  }
label: Hero
component: experience_builder+my-hero
defaults:
  props:
    cta1href:
      field_type: uri
      field_storage_settings: {  }
      field_instance_settings: {  }
      field_widget: uri
      default_value:
        value: 'https://example.com'
      expression: ℹ︎uri␟value
    heading:
      field_type: string
      field_storage_settings: {  }
      field_instance_settings: {  }
      field_widget: string_textfield
      default_value:
        value: 'There goes my hero'
      expression: ℹ︎string␟value

Full list of props:

  1. heading
  2. subheading
  3. cta1
  4. cta1href
  5. cta2
  6. attributes

Investigating why this is happening.

wim leers’s picture

Another 10 seconds later, and it's clear \Drupal\experience_builder\Entity\Component::getDefaultsForComponentPlugin() is the culprit: it's only generating defaults for required props, instead of all props.

So we caused this regression in #3463999: Auto-create/update Component config entities for all discovered SDCs that meet XB's minimum criteria without noticing. How is that possible?

It's possible because the validation of Component config entities is incomplete, and we know it: experience_builder.schema.yml contains this since #3452397: Allow specifying default props values when opting an SDC in for XB:

          # Ensure a default is specified for EVERY prop of this component.
          # @todo Follow-up issue: implement this constraint, similar to the `CKEditor5EnabledConfigurablePlugins` constraint, with test coverage that causes existing config entities to fail if the props of an SDC change (because that is a BC break in the SDC).
          # KeyForEveryComponentProp: [%parent.component]

👆 Implementing that will cause \Drupal\Tests\experience_builder\Kernel\ComponentTest::testComponentAutoCreate() to fail. No need for additional test coverage beyond that.

wim leers’s picture

Title: Component config entities are incomplete: missing entries for many props » Component config entities are incomplete: missing entries for optional props, causing errors in ComponentPropsForm
Related issues: +#3463999: Auto-create/update Component config entities for all discovered SDCs that meet XB's minimum criteria
wim leers’s picture

wim leers’s picture

First pass at fixing the bug brought the failures down to 40: https://git.drupalcode.org/project/experience_builder/-/jobs/2602877.

But many tests are now failing because some plugins cannot be found: in kernel tests, all module dependencies must be explicitly installed. This is now necessary because the validator is verifying the config entity is consistent with the SDC plugin.

So: installing missing modules next.

wim leers’s picture

Down to 24 test failures.

Most test failures are now like this:

'component' entity with ID 'experience_builder+experimental' already exists.

https://git.drupalcode.org/project/experience_builder/-/jobs/2603045

Root cause: \Drupal\experience_builder\Plugin\ComponentPluginManager creates Component config entities in \Drupal\experience_builder\Plugin\ComponentPluginManager::setCachedDefinitions().

But in this MR, the Component::save() call happens inside that method, which will trigger validation, which in turn also calls ComponentPluginManager. Which then causes these config entities to be created too!

wim leers’s picture

Down to 22 test failures.

The remaining violations look like this:

1) DefaultConfigTest::testConfig
Drupal\Core\Config\Schema\SchemaIncompleteException: Schema errors for experience_builder.component.sdc_test_all_props+all-props with the following errors: experience_builder.component.sdc_test_all_props+all-props:defaults.props.test_integer_range_minimum.field_storage_settings.min missing schema, experience_builder.component.sdc_test_all_props+all-props:defaults.props.test_integer_range_minimum.field_storage_settings.max missing schema, experience_builder.component.sdc_test_all_props+all-props:defaults.props.test_integer_range_minimum_maximum_timestamps.field_storage_settings.min missing schema, experience_builder.component.sdc_test_all_props+all-props:defaults.props.test_integer_range_minimum_maximum_timestamps.field_storage_settings.max missing schema, experience_builder.component.sdc_test_all_props+all-props:defaults.props.test_string_format_date.default_value.value missing schema, experience_builder.component.sdc_test_all_props+all-props:defaults.props.test_string_format_date_time.default_value.value missing schema

and

Drupal\Component\Plugin\Exception\PluginNotFoundException: The "space separated:space separated" plugin does not exist. Valid plugin IDs for Drupal\experience_builder\Plugin\ComponentPluginManager are: experience_builder:video, experience_builder:shoe_tab_panel, experience_builder:shoe_tab, experience_builder:shoe_icon, experience_builder:shoe_details, experience_builder:shoe_button, experience_builder:shoe_badge, experience_builder:heading, experience_builder:obsolete, experience_builder:experimental, experience_builder:deprecated, experience_builder:my-section, experience_builder:my-hero, experience_builder:image, experience_builder:two_column, experience_builder:shoe_tab_group, experience_builder:one_column, sdc_test:no-props, sdc_test:my-cta, sdc_test:my-button, sdc_test:my-banner, sdc_test:array-to-object

That second one is caused by #3464036: Component config entity should validate that the SDC actually (still) exists not yet being fixed. Let's fix that first. Or fix it here. Whichever is handier.


I think @f.mazeikis and @tedbow can carry this over the finish line!

f.mazeikis made their first commit to this issue’s fork.

wim leers’s picture

Assigned: Unassigned » wim leers
Status: Needs work » Needs review
wim leers’s picture

Assigned: wim leers » Unassigned
Status: Needs review » Reviewed & tested by the community

Closed #3464036: Component config entity should validate that the SDC actually (still) exists as outdated — @f.mazeikis implemented that as part of this issue.

This is ready for final sign-off by @f.mazeikis. We both worked on this, but he's the owner of Config management 👍😊

wim leers’s picture

Assigned: Unassigned » f.mazeikis

Forgot to re-assign to Felix :)

kristen pol’s picture

For testing, I needed to get the fix from this issue in there:

#3471083: Prop select lists don't affect the component

kristen pol’s picture

Status: Reviewed & tested by the community » Needs work

The shoe components are still causing errors.

Try dragging shoe icon or shoe tab panel and you'll see the error popup.

Or drag shoe badge, shoe tab, or shoe tab group and try changing something.

lauriii’s picture

I added the shoe icon component and got the following error:

Drupal\Core\Render\Component\Exception\InvalidComponentException: [name] The property name is required in Drupal\Core\Theme\Component\ComponentValidator->validateProps() (line 203 of /var/www/html/drupal/core/lib/Drupal/Core/Theme/Component/ComponentValidator.php).

I changed a value for the shoe tab component using the right sidebar and got the following error:

Drupal\Core\Render\Component\Exception\InvalidComponentException: [active] Integer value found, but a boolean or an object is required/n[closable] Integer value found, but a boolean or an object is required/n[disabled] Integer value found, but a boolean or an object is required in Drupal\Core\Theme\Component\ComponentValidator->validateProps() (line 203 of /var/www/html/drupal/core/lib/Drupal/Core/Theme/Component/ComponentValidator.php).

I changed a value for the shoe badge using the right sidebar and got the following error:

Drupal\Core\Render\Component\Exception\InvalidComponentException: [pill] Integer value found, but a boolean or an object is required/n[pulse] Integer value found, but a boolean or an object is required in Drupal\Core\Theme\Component\ComponentValidator->validateProps() (line 203 of /var/www/html/drupal/core/lib/Drupal/Core/Theme/Component/ComponentValidator.php).

I changed a value for the shoe tab group using the right sidebar and got the following error:

Drupal\Core\Render\Component\Exception\InvalidComponentException: [no_scroll] Integer value found, but a boolean or an object is required in Drupal\Core\Theme\Component\ComponentValidator->validateProps() (line 203 of /var/www/html/drupal/core/lib/Drupal/Core/Theme/Component/ComponentValidator.php).

I'll let @wim leers and/or @f.mazeikis to decide if this is something that should be fixed here or in a follow-up issue.

lauriii’s picture

It seems that #23 might be related to #3471511: `enum` data shapes: error when choosing "- None -" in `<select>` but maybe there's an aspect related to booleans that isn't being tracked there currently?

wim leers’s picture

Status: Needs work » Reviewed & tested by the community
Related issues: +#3462310: Component props form: map textarea, bool, and select elements to React components
StatusFileSize
new92.17 KB

The boolean shenanigans reported in #23 are indeed unrelated.

The goal of this issue is to be able to render the ComponentPropsForm without triggering the PHP warnings reported in #3. That it does 👍

If I interact with the boolean field widget, I can also reproduce

Drupal\Core\Render\Component\Exception\InvalidComponentException: [pill] String value found, but a boolean or an object is required/n[pulse] Integer value found, but a boolean or an object is required in Drupal\Core\Theme\Component\ComponentValidator->validateProps() (line 203 of core/lib/Drupal/Core/Theme/Component/ComponentValidator.php).

This is being worked on in #3462310: Component props form: map textarea, bool, and select elements to React components. The root cause is the request to update the preview after interacting with the boolean field widget, which sends this data from the client to the server that indeed violates the JSON schema, because both pill and pulse must be booleans, not strings nor integers:

kristen pol’s picture

So if both this and that issue are fixed then there will no more fatal errors when using the prop forms for ALL XB example components? If so, ETA on both?

wim leers’s picture

Yes, for all XB components. With the exception of the special all-props SDC, which we're using to be able to test/develop missing pieces. But that's not an SDC that is installed by default.

Utkarsh is testing the combination of this issue's MR with that one 👍 — @bnjmnm pushed that other MR forward last night, so IDK the latest state. Based on his findings, an ETA should become possible to provide.

  • wim leers committed 25d5779c on 0.x
    Issue #3470550 by wim leers, f.mazeikis, kristen pol: Component config...
wim leers’s picture

Assigned: f.mazeikis » Unassigned
Status: Reviewed & tested by the community » Fixed
kristen pol’s picture

Thanks. I tested and found the following:

1. Shoe button is missing... not sure why and didn't debug but maybe due to the variant info?

2. Shoe badge and shoe tab are "working" (other than the boolean true/false issue that I reported).

#3472179: [PP-1] Can't toggle boolean prop back to true after changing to false

3. Shoe icon and shoe tab panel have known fatal error:

Drupal\Core\Render\Component\Exception\InvalidComponentException: [name] The property name is required in Drupal\Core\Theme\Component\ComponentValidator->validateProps() (line 206 of /var/www/html/web/core/lib/Drupal/Core/Theme/Component/ComponentValidator.php).

#3467954: META: Evolve XB UI's data model to allow non-SDC components' inputs, DynamicPropSource support, etc.

4. Sidenote that there are a lot of these:

Attempting to re-run cron while it is already running.

as well for some reason.

wim leers’s picture

  1. See #3469684: Surface the REASON for an SDC not being made available in XB (i.e. not meeting criteria).
  2. Yep, we're well aware.
  3. The more pressing blocker to that is #3469855: Emptying a required value through the UI crashes the app (empty <input>, selecting "None" option in <select> …), although indeed name is de facto an unsupported prop name right now, and that must be fixed, too
  4. That's unrelated to XB for sure.

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.