From 7c525837d0ede3e4b47ac924d10dd4e08404b27c Mon Sep 17 00:00:00 2001 From: Javier Eguiluz Date: Tue, 30 Jan 2024 19:13:58 +0100 Subject: [PATCH] dd full support for AssetMapper entries --- src/Dto/AssetsDto.php | 6 ++++++ src/Dto/FieldDto.php | 5 +++++ src/Field/FieldTrait.php | 17 +++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/src/Dto/AssetsDto.php b/src/Dto/AssetsDto.php index 0d595a9c63..20ded4c1d1 100644 --- a/src/Dto/AssetsDto.php +++ b/src/Dto/AssetsDto.php @@ -145,6 +145,11 @@ public function loadedOn(?string $pageName): self $filteredAssets->addJsAsset($jsAsset); } } + foreach ($this->assetMapperAssets as $assetMapperAsset) { + if ($assetMapperAsset->getLoadedOn()->has($pageName)) { + $filteredAssets->addAssetMapperAsset($assetMapperAsset); + } + } foreach ($this->webpackEncoreAssets as $webpackEncoreAsset) { if ($webpackEncoreAsset->getLoadedOn()->has($pageName)) { $filteredAssets->addWebpackEncoreAsset($webpackEncoreAsset); @@ -162,6 +167,7 @@ public function loadedOn(?string $pageName): self public function mergeWith(self $assetsDto): self { + $this->assetMapperAssets = array_merge($this->assetMapperAssets, $assetsDto->getAssetMapperAssets()); $this->webpackEncoreAssets = array_merge($this->webpackEncoreAssets, $assetsDto->getWebpackEncoreAssets()); $this->cssAssets = array_merge($this->cssAssets, $assetsDto->getCssAssets()); $this->jsAssets = array_merge($this->jsAssets, $assetsDto->getJsAssets()); diff --git a/src/Dto/FieldDto.php b/src/Dto/FieldDto.php index e4d64aaa07..66519a8091 100644 --- a/src/Dto/FieldDto.php +++ b/src/Dto/FieldDto.php @@ -401,6 +401,11 @@ public function setAssets(AssetsDto $assets): void $this->assets = $assets; } + public function addAssetMapperEncoreAsset(AssetDto $assetDto): void + { + $this->assets->addAssetMapperAsset($assetDto); + } + public function addWebpackEncoreAsset(AssetDto $assetDto): void { $this->assets->addWebpackEncoreAsset($assetDto); diff --git a/src/Field/FieldTrait.php b/src/Field/FieldTrait.php index be51f51d25..21504df610 100644 --- a/src/Field/FieldTrait.php +++ b/src/Field/FieldTrait.php @@ -257,6 +257,23 @@ public function addWebpackEncoreEntries(Asset|string ...$entryNamesOrAssets): se return $this; } + public function addAssetMapperEntries(Asset|string ...$entryNamesOrAssets): self + { + if (!class_exists('Symfony\\Component\\AssetMapper\\AssetMapper')) { + throw new \RuntimeException('You are trying to add AssetMapper entries in a field but AssetMapper is not installed in your project. Try running "composer require symfony/asset-mapper"'); + } + + foreach ($entryNamesOrAssets as $entryNameOrAsset) { + if (\is_string($entryNameOrAsset)) { + $this->dto->addAssetMapperEncoreAsset(new AssetDto($entryNameOrAsset)); + } else { + $this->dto->addAssetMapperEncoreAsset($entryNameOrAsset->getAsDto()); + } + } + + return $this; + } + public function addCssFiles(Asset|string ...$pathsOrAssets): self { foreach ($pathsOrAssets as $pathOrAsset) {