diff --git a/src/Controller/ExperienceBuilderController.php b/src/Controller/ExperienceBuilderController.php index d090d95da8db6987c71c70230c014b0e64daf9a4..f951c0509d32bc08476fa56640ef644bea98424c 100644 --- a/src/Controller/ExperienceBuilderController.php +++ b/src/Controller/ExperienceBuilderController.php @@ -114,14 +114,15 @@ HTML; 'base' => \sprintf('xb/%s/%s', $entity_type, $entity?->id()), 'entityType' => $entity_type, 'entity' => $entity?->id(), - 'demo_mode' => $demo_mode, + 'entityTypeKeys' => $entity?->getEntityType()->getKeys(), + 'demoMode' => $demo_mode, // Allow for perfect component previews, by letting the client side // know what global assets to load in component preview <iframe>s. // @see ui/src/components/ComponentPreview.tsx - 'global_assets' => [ + 'globalAssets' => [ 'css' => $this->assetRenderer->renderCssAssets($preview_assets), - 'js_header' => $this->assetRenderer->renderJsHeaderAssets($preview_assets), - 'js_footer' => $this->assetRenderer->renderJsFooterAssets($preview_assets), + 'jsHeader' => $this->assetRenderer->renderJsHeaderAssets($preview_assets), + 'jsFooter' => $this->assetRenderer->renderJsFooterAssets($preview_assets), ], 'xbModulePath' => $xb_module_path, ], diff --git a/tests/src/Kernel/Controller/ExperienceBuilderControllerTest.php b/tests/src/Kernel/Controller/ExperienceBuilderControllerTest.php index d811afc3f37bd3ef30dfbac4bde364df18b1dafe..33211b2ca208459eb4af4bd6b17c01351012f438 100644 --- a/tests/src/Kernel/Controller/ExperienceBuilderControllerTest.php +++ b/tests/src/Kernel/Controller/ExperienceBuilderControllerTest.php @@ -64,7 +64,7 @@ final class ExperienceBuilderControllerTest extends KernelTestBase { ])->toString(); self::assertEquals("/xb/$entity_type", $add_url); $this->request(Request::create($add_url)); - $this->assertExperienceBuilderMount($entity_type, ''); + $this->assertExperienceBuilderMount($entity_type); $storage = $this->container->get('entity_type.manager')->getStorage($entity_type); $sut = $storage->create($values); @@ -77,7 +77,7 @@ final class ExperienceBuilderControllerTest extends KernelTestBase { self::assertEquals("/xb/$entity_type/{$sut->id()}", $edit_url); $this->request(Request::create($edit_url)); - $this->assertExperienceBuilderMount($entity_type, $sut->id()); + $this->assertExperienceBuilderMount($entity_type, $sut); } public static function entityData(): array { diff --git a/tests/src/Kernel/Entity/Routing/XbHtmlRouteProviderTest.php b/tests/src/Kernel/Entity/Routing/XbHtmlRouteProviderTest.php index 66955ed13bc0bff307d7b12e71422e326bed0b99..dec419d9794c4ce5af9a285b2511bf3b06d610f5 100644 --- a/tests/src/Kernel/Entity/Routing/XbHtmlRouteProviderTest.php +++ b/tests/src/Kernel/Entity/Routing/XbHtmlRouteProviderTest.php @@ -44,7 +44,7 @@ final class XbHtmlRouteProviderTest extends KernelTestBase { $this->setUpCurrentUser([], ['administer xb_page']); $url = Url::fromRoute('entity.xb_page.add_form')->toString(); $this->request(Request::create($url)); - $this->assertExperienceBuilderMount('xb_page', ''); + $this->assertExperienceBuilderMount('xb_page'); } public function testEditFormRoute(): void { @@ -53,7 +53,7 @@ final class XbHtmlRouteProviderTest extends KernelTestBase { $page->save(); $url = $page->toUrl('edit-form')->toString(); $this->request(Request::create($url)); - $this->assertExperienceBuilderMount('xb_page', $page->id()); + $this->assertExperienceBuilderMount('xb_page', $page); } } diff --git a/tests/src/Kernel/Traits/XbUiAssertionsTrait.php b/tests/src/Kernel/Traits/XbUiAssertionsTrait.php index ee032439a1f8e187bd9d3dc6ae9fb7352a5acf62..437d821d2543d26574302fd295ced91bbfd2793f 100644 --- a/tests/src/Kernel/Traits/XbUiAssertionsTrait.php +++ b/tests/src/Kernel/Traits/XbUiAssertionsTrait.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace Drupal\Tests\experience_builder\Kernel\Traits; +use Drupal\Core\Entity\EntityInterface; + trait XbUiAssertionsTrait { /** @@ -11,16 +13,19 @@ trait XbUiAssertionsTrait { * * @param string $entity_type * The entity type. - * @param string|int|null $entity_id - * The entity ID. + * @param \Drupal\Core\Entity\EntityInterface $entity + * (optional) The entity. */ - protected function assertExperienceBuilderMount(string $entity_type, string|int|null $entity_id): void { + protected function assertExperienceBuilderMount(string $entity_type, ?EntityInterface $entity = NULL): void { + $entity_id = $entity ? $entity->id() : NULL; + $entity_type_keys = $entity ? $entity->getEntityType()->getKeys() : NULL; $this->assertTitle('Drupal Experience Builder'); self::assertCount(1, $this->cssSelect('#experience-builder')); self::assertArrayHasKey('xb', $this->drupalSettings); self::assertEquals("xb/$entity_type/$entity_id", $this->drupalSettings['xb']['base']); self::assertEquals($entity_type, $this->drupalSettings['xb']['entityType']); self::assertEquals($entity_id, $this->drupalSettings['xb']['entity']); + self::assertEquals($entity_type_keys, $this->drupalSettings['xb']['entityTypeKeys']); } } diff --git a/ui/global.d.ts b/ui/global.d.ts index 1c8a3b9506bc2bd47d4baf046c7f4d23955a4560..ae1fa57f1bb1bc357eb4c907d56375265199e98b 100644 --- a/ui/global.d.ts +++ b/ui/global.d.ts @@ -5,15 +5,16 @@ interface DrupalSettings { base: string; entityType: string; entity: string; - global_assets: { + globalAssets: { css: string; - js_header: string; - js_footer: string; + jsHeader: string; + jsFooter: string; }; layoutUtils: PropsValues; navUtils: PropsValues; - demo_mode: boolean; xbModulePath: string; + selectedComponent: string; + demoMode: boolean; }; path: { baseUrl: string; diff --git a/ui/src/components/ComponentPreview.tsx b/ui/src/components/ComponentPreview.tsx index 7dc29c9cf6ae1703d3f5b41bac4e08e8b9069bae..22def01b08443c535a485a2201e2ca8088a496cb 100644 --- a/ui/src/components/ComponentPreview.tsx +++ b/ui/src/components/ComponentPreview.tsx @@ -23,11 +23,11 @@ const ComponentPreview: React.FC<ComponentPreviewProps> = ({ const defaultPreviewWidth = 300; const defaultPreviewHeight = 200; - const css = drupalSettings?.xb.global_assets.css + component.css; + const css = drupalSettings?.xb.globalAssets.css + component.css; const js_footer = - drupalSettings?.xb.global_assets.js_footer + component.js_footer; + drupalSettings?.xb.globalAssets.jsFooter + component.js_footer; const js_header = - drupalSettings?.xb.global_assets.js_header + component.js_header; + drupalSettings?.xb.globalAssets.jsHeader + component.js_header; const markup = component.default_markup; const base_url = window.location.origin + drupalSettings?.path.baseUrl;