Skip to content
Snippets Groups Projects
Verified Commit 7c8c61a3 authored by Lauri Timmanee's avatar Lauri Timmanee
Browse files

Issue #3391702 by pdureau, smustgrave, e0ipso: SDC ComponentElement: Transform...

Issue #3391702 by pdureau, smustgrave, e0ipso: SDC ComponentElement: Transform slots scalar values to #plain_text instead of throwing an exception

(cherry picked from commit 76fac09c)
(cherry picked from commit 27097189)
parent 308e696f
No related branches found
No related tags found
10 merge requests!11628Update file MediaLibraryWidget.php,!7564Revert "Issue #3364773 by roshnichordiya, Chris Matthews, thakurnishant_06,...,!5752Issue #3275828 by joachim, quietone, bradjones1, Berdir: document the reason...,!5627Issue #3261805: Field not saved when change of 0 on string start,!5427Issue #3338518: send credentials in ajax if configured in CORS settings.,!5395Issue #3387916 by fjgarlin, Spokje: Each GitLab job exposes user email,!5217Issue #3386607 by alexpott: Improve spell checking in commit-code-check.sh,!4894Issue #3280279: Add API to allow sites to opt in to upload SVG images in CKEditor 5,!3106Issue #3017548: "Filtered HTML" text format does not support manual teaser break (<!--break-->),!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links
Pipeline #42578 failed
Pipeline: drupal

#42582

    Pipeline: drupal

    #42581

      Pipeline: drupal

      #42580

        +1
        ......@@ -105,9 +105,14 @@ private function generateComponentTemplate(
        $template .= sprintf('{%% embed \'%s\' %%}', $id);
        $template .= PHP_EOL;
        foreach ($slots as $slot_name => $slot_value) {
        if (\is_scalar($slot_value)) {
        $slot_value = [
        "#plain_text" => (string) $slot_value,
        ];
        }
        if (!Utilities::isRenderArray($slot_value)) {
        $message = sprintf(
        'Unable to render component "%s". A render array is expected for the slot "%s" when using the render element with the "#slots" property',
        'Unable to render component "%s". A render array or a scalar is expected for the slot "%s" when using the render element with the "#slots" property',
        $id,
        $slot_name
        );
        ......
        ......@@ -42,6 +42,7 @@ public function testRender(): void {
        $this->checkLibraryOverrides();
        $this->checkAttributeMerging();
        $this->checkRenderElementAlters();
        $this->checkSlots();
        $this->checkInvalidSlot();
        }
        ......@@ -284,7 +285,36 @@ public function checkRenderElementAlters(): void {
        }
        /**
        * Ensure that the slots receive a render array when using the render element.
        * Ensure that the slots allow a render array or a scalar when using the render element.
        */
        public function checkSlots(): void {
        $slots = [
        'This is the contents of the banner body.',
        [
        '#plain_text' => 'This is the contents of the banner body.',
        ],
        ];
        foreach ($slots as $slot) {
        $build = [
        '#type' => 'component',
        '#component' => 'sdc_test:my-banner',
        '#props' => [
        'heading' => $this->t('I am a banner'),
        'ctaText' => $this->t('Click me'),
        'ctaHref' => 'https://www.example.org',
        'ctaTarget' => '',
        ],
        '#slots' => [
        'banner_body' => $slot,
        ],
        ];
        $crawler = $this->renderComponentRenderArray($build);
        $this->assertNotEmpty($crawler->filter('#sdc-wrapper [data-component-id="sdc_test:my-banner"] .component--my-banner--body:contains("This is the contents of the banner body.")'));
        }
        }
        /**
        * Ensure that the slots throw an error for invalid slots.
        */
        public function checkInvalidSlot(): void {
        $build = [
        ......@@ -297,11 +327,11 @@ public function checkInvalidSlot(): void {
        'ctaTarget' => '',
        ],
        '#slots' => [
        'banner_body' => 'I am an invalid render array.',
        'banner_body' => new \stdClass(),
        ],
        ];
        $this->expectException(InvalidComponentDataException::class);
        $this->expectExceptionMessage('Unable to render component "sdc_test:my-banner". A render array is expected for the slot "banner_body" when using the render element with the "#slots" property');
        $this->expectExceptionMessage('Unable to render component "sdc_test:my-banner". A render array or a scalar is expected for the slot "banner_body" when using the render element with the "#slots" property');
        $this->renderComponentRenderArray($build);
        }
        ......
        0% Loading or .
        You are about to add 0 people to the discussion. Proceed with caution.
        Please register or to comment