42 lines
825 B
PHP
42 lines
825 B
PHP
|
<?php
|
||
|
|
||
|
namespace Modules\Dashboard;
|
||
|
|
||
|
use Livewire\Livewire;
|
||
|
|
||
|
class DashboardFactory
|
||
|
{
|
||
|
/**
|
||
|
* @var array<int, class-string<Block>>
|
||
|
*/
|
||
|
private array $blocks = [];
|
||
|
|
||
|
/**
|
||
|
* @return array<int, Block>
|
||
|
*/
|
||
|
public function load(): array
|
||
|
{
|
||
|
return collect($this->blocks)->map(fn ($block) => app($block))->toArray();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param class-string<Block> $block
|
||
|
*/
|
||
|
public function register(string $block): self
|
||
|
{
|
||
|
$this->blocks[] = $block;
|
||
|
|
||
|
$componentName = str($block)->replace('\\', '.')->explode('.')->map(fn ($part) => str($part)->lcfirst()->kebab())->implode('.');
|
||
|
Livewire::component($componentName, $block);
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
public function purge(): self
|
||
|
{
|
||
|
$this->blocks = [];
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
}
|