diff --git a/src/Folder/Folder.php b/src/Folder/Folder.php index eda0cdd..86b9689 100644 --- a/src/Folder/Folder.php +++ b/src/Folder/Folder.php @@ -104,7 +104,7 @@ protected function isSafeToFold(ComponentSource $source, ComponentNode $node): b && isset($node->parentsAttributes[$prop]) && ! $node->parentsAttributes[$prop]->isStaticValue() ) { - $dynamicAttributes[$prop] = $node->parentsAttributes[$prop]; + return false; } } diff --git a/tests/Folder/FolderTest.php b/tests/Folder/FolderTest.php index 4bb96d5..af00144 100644 --- a/tests/Folder/FolderTest.php +++ b/tests/Folder/FolderTest.php @@ -238,6 +238,29 @@ expect($folded)->toBeInstanceOf(TextNode::class); }); +test('does not fold components if a dynamic prop comes from parent using aware even when marked as safe', function () { + $input = ''; + + $node = app(Parser::class)->parse($input)[0]; + $node->setParentsAttributes( + app(AttributeParser::class)->parse(':type="$type"') + ); + + $folded = app(Folder::class)->fold($node); + + expect($folded)->toBeInstanceOf(ComponentNode::class); +}); + +test('folds components when a prop is passed directly even if aware is declared', function () { + $input = ''; + + $node = app(Parser::class)->parse($input)[0]; + + $folded = app(Folder::class)->fold($node); + + expect($folded)->toBeInstanceOf(TextNode::class); +}); + test('does not fold components with no blaze directive', function () { $input = ''; diff --git a/tests/fixtures/views/components/foldable/input-aware-safe.blade.php b/tests/fixtures/views/components/foldable/input-aware-safe.blade.php new file mode 100644 index 0000000..40d6010 --- /dev/null +++ b/tests/fixtures/views/components/foldable/input-aware-safe.blade.php @@ -0,0 +1,9 @@ +@blaze(fold: true, safe: ['type']) + +@aware(['type' => 'text']) + +@if ($type == 'number') + +@else + +@endif