From 383fc0fcd488216585c4459004418a471e8a8c2f Mon Sep 17 00:00:00 2001 From: "Ralph J. Smit" <59207045+ralphjsmit@users.noreply.github.com> Date: Thu, 3 Apr 2025 18:05:31 +0200 Subject: [PATCH 1/5] Ability to check if macro exists --- packages/support/src/Concerns/Macroable.php | 5 +++++ tests/src/Support/MacroableTest.php | 23 +++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 tests/src/Support/MacroableTest.php diff --git a/packages/support/src/Concerns/Macroable.php b/packages/support/src/Concerns/Macroable.php index fe66b83770..c039a2e625 100644 --- a/packages/support/src/Concerns/Macroable.php +++ b/packages/support/src/Concerns/Macroable.php @@ -39,6 +39,11 @@ trait Macroable static::$macros = []; } + public static function hasMacro(string $name): bool + { + return isset(static::$macros[$name]); + } + /** * @param array $parameters */ diff --git a/tests/src/Support/MacroableTest.php b/tests/src/Support/MacroableTest.php new file mode 100644 index 0000000000..faf2e36275 --- /dev/null +++ b/tests/src/Support/MacroableTest.php @@ -0,0 +1,23 @@ +toBeFalse(); + + expect(Component::hasMacro('someMacro')) + ->toBeFalse(); + + Component::macro('someMacro', fn () => 'Hello'); + + expect(Component::hasMacro('someMacro')) + ->toBeTrue(); +}); From b04aed711cf6811f514485ca80356e996cc54e15 Mon Sep 17 00:00:00 2001 From: "Ralph J. Smit" <59207045+ralphjsmit@users.noreply.github.com> Date: Thu, 3 Apr 2025 18:06:18 +0200 Subject: [PATCH 2/5] Style --- tests/src/Support/MacroableTest.php | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/tests/src/Support/MacroableTest.php b/tests/src/Support/MacroableTest.php index faf2e36275..b510d4be3c 100644 --- a/tests/src/Support/MacroableTest.php +++ b/tests/src/Support/MacroableTest.php @@ -1,20 +1,16 @@ toBeFalse(); + expect(Component::hasMacro('someMacro')) + ->toBeFalse(); - expect(Component::hasMacro('someMacro')) - ->toBeFalse(); + expect(Component::hasMacro('someMacro')) + ->toBeFalse(); Component::macro('someMacro', fn () => 'Hello'); From 899a4c10b87ef5f1a5b16a0b357e1e6d75e022dd Mon Sep 17 00:00:00 2001 From: "Ralph J. Smit" <59207045+ralphjsmit@users.noreply.github.com> Date: Thu, 3 Apr 2025 18:07:21 +0200 Subject: [PATCH 3/5] Update MacroableTest.php --- tests/src/Support/MacroableTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/src/Support/MacroableTest.php b/tests/src/Support/MacroableTest.php index b510d4be3c..921781f79e 100644 --- a/tests/src/Support/MacroableTest.php +++ b/tests/src/Support/MacroableTest.php @@ -5,7 +5,7 @@ use Filament\Tests\TestCase; uses(TestCase::class); -it('can macro a component', function () { +test('component is macroable', function () { expect(Component::hasMacro('someMacro')) ->toBeFalse(); From 6c586df725e65717c69d7bea01d48ffa36fbffbd Mon Sep 17 00:00:00 2001 From: "Ralph J. Smit" <59207045+ralphjsmit@users.noreply.github.com> Date: Mon, 7 Apr 2025 21:13:46 +0200 Subject: [PATCH 4/5] Correct implementation --- packages/support/src/Concerns/Macroable.php | 2 +- tests/src/Support/MacroableTest.php | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/support/src/Concerns/Macroable.php b/packages/support/src/Concerns/Macroable.php index c039a2e625..cfdb7e16fc 100644 --- a/packages/support/src/Concerns/Macroable.php +++ b/packages/support/src/Concerns/Macroable.php @@ -41,7 +41,7 @@ trait Macroable public static function hasMacro(string $name): bool { - return isset(static::$macros[$name]); + return (bool) static::getMacro($name); } /** diff --git a/tests/src/Support/MacroableTest.php b/tests/src/Support/MacroableTest.php index 921781f79e..f5a5544868 100644 --- a/tests/src/Support/MacroableTest.php +++ b/tests/src/Support/MacroableTest.php @@ -1,19 +1,28 @@ toBeFalse(); - expect(Component::hasMacro('someMacro')) + expect(ComponentContainer::hasMacro('someMacro')) ->toBeFalse(); - Component::macro('someMacro', fn () => 'Hello'); + ComponentContainer::macro('someMacro', fn () => 'Hello'); - expect(Component::hasMacro('someMacro')) + expect(ComponentContainer::hasMacro('someMacro')) ->toBeTrue(); + + expect(Form::hasMacro('someMacro')) + ->toBeTrue(); // Decendant of `Component`... + + expect(Field::hasMacro('someMacro')) + ->toBeFalse(); }); From 96c64a9ac654e0110ab01bc3a74750f60bf1e64e Mon Sep 17 00:00:00 2001 From: "Ralph J. Smit" <59207045+ralphjsmit@users.noreply.github.com> Date: Mon, 7 Apr 2025 21:19:25 +0200 Subject: [PATCH 5/5] Update MacroableTest.php --- tests/src/Support/MacroableTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/src/Support/MacroableTest.php b/tests/src/Support/MacroableTest.php index f5a5544868..594f600f0f 100644 --- a/tests/src/Support/MacroableTest.php +++ b/tests/src/Support/MacroableTest.php @@ -21,7 +21,7 @@ test('component is macroable', function () { ->toBeTrue(); expect(Form::hasMacro('someMacro')) - ->toBeTrue(); // Decendant of `Component`... + ->toBeTrue(); // Descendant of `Component`... expect(Field::hasMacro('someMacro')) ->toBeFalse();