Files
pcm-badge-bundle/src/Twig/Component/Badge.php
2024-08-08 15:37:07 +01:00

47 lines
1.4 KiB
PHP

<?php
declare(strict_types=1);
namespace Pcm\BadgeBundle\Twig\Component;
use Pcm\BadgeBundle\Enum\Badge as EnumBadge;
use Pcm\BadgeBundle\Interface\BadgeableInterface;
use Symfony\UX\TwigComponent\Attribute\AsTwigComponent;
use TailwindMerge\TailwindMerge;
#[AsTwigComponent(name: 'Pcm:Badge', template: "@PcmBadge/Badge.html.twig")]
final class Badge
{
public string $finalClasses;
private ?string $colour;
public function __construct(private string $baseClasses)
{
}
/**
* @param BadgeableInterface $object The object to be converted into a badge
* @param string $class Extra classes you want to add to the badge template
*/
public function mount(BadgeableInterface $object, string $class = '', string $colour = null): void
{
if (null !== $colour) {
$cases = array_map(fn(EnumBadge $b) => $b->name, EnumBadge::cases());
if (!in_array($colour, $cases)) {
throw new \RuntimeException(sprintf('"%s" is not a valid Badge colour. Available options are: %s', $colour, implode(", ", $cases)));
}
} else {
$palette = $object->getBadgeColour()->getPalette();
}
$merger = TailwindMerge::instance();
$this->finalClasses = $merger->merge(sprintf('text-white %s %s %s %s', $palette->borderColourClass, $palette->backgroundColourClass, $this->baseClasses, $class));
}
}