From 8a79a17c4914db33146713101363ef15b23d4179 Mon Sep 17 00:00:00 2001 From: Boy132 Date: Fri, 9 May 2025 10:36:57 +0200 Subject: [PATCH] update node health heart --- .../Tables/Columns/NodeHealthColumn.php | 29 +++++++++++- app/Livewire/NodeSystemInformation.php | 45 +++++++++++++------ .../livewire/columns/version-column.blade.php | 31 ------------- .../node-system-information.blade.php | 29 ------------ 4 files changed, 59 insertions(+), 75 deletions(-) delete mode 100644 resources/views/livewire/columns/version-column.blade.php delete mode 100644 resources/views/livewire/node-system-information.blade.php diff --git a/app/Filament/Components/Tables/Columns/NodeHealthColumn.php b/app/Filament/Components/Tables/Columns/NodeHealthColumn.php index 837791d15..264539680 100644 --- a/app/Filament/Components/Tables/Columns/NodeHealthColumn.php +++ b/app/Filament/Components/Tables/Columns/NodeHealthColumn.php @@ -2,12 +2,12 @@ namespace App\Filament\Components\Tables\Columns; +use Filament\Support\Enums\Alignment; use Filament\Tables\Columns\IconColumn; +use Illuminate\Support\Facades\Blade; class NodeHealthColumn extends IconColumn { - protected string $view = 'livewire.columns.version-column'; - protected function setUp(): void { parent::setUp(); @@ -16,4 +16,29 @@ class NodeHealthColumn extends IconColumn $this->alignCenter(); } + + public function toEmbeddedHtml(): string + { + $alignment = $this->getAlignment(); + + $attributes = $this->getExtraAttributeBag() + ->class([ + 'fi-ta-icon', + 'fi-inline' => $this->isInline(), + 'fi-ta-icon-has-line-breaks' => $this->isListWithLineBreaks(), + 'fi-wrapped' => $this->canWrap(), + ($alignment instanceof Alignment) ? "fi-align-{$alignment->value}" : (is_string($alignment) ? $alignment : ''), + ]) + ->toHtml(); + + // TODO: poll every 10 secs + return Blade::render(<<<'BLADE' +
> + @livewire('node-system-information', ['node' => $record, 'lazy' => true]) +
+ BLADE, [ + 'attributes' => $attributes, + 'record' => $this->getRecord(), + ]); + } } diff --git a/app/Livewire/NodeSystemInformation.php b/app/Livewire/NodeSystemInformation.php index 235c51a9d..0c91f49d5 100644 --- a/app/Livewire/NodeSystemInformation.php +++ b/app/Livewire/NodeSystemInformation.php @@ -3,29 +3,48 @@ namespace App\Livewire; use App\Models\Node; -use Illuminate\View\View; +use Filament\Support\Enums\IconSize; +use Filament\Tables\View\Components\Columns\IconColumnComponent\IconComponent; +use Illuminate\View\ComponentAttributeBag; +use Livewire\Attributes\Locked; use Livewire\Component; +use function Filament\Support\generate_icon_html; + class NodeSystemInformation extends Component { + #[Locked] public Node $node; - public string $sizeClasses; - - public function render(): View + public function render(): string { - return view('livewire.node-system-information'); + $systemInformation = $this->node->systemInformation(); + $exception = $systemInformation['exception'] ?? null; + $version = $systemInformation['version'] ?? null; + + $tooltip = $exception ? 'Error connecting to node!
Check browser console for details.' : $version; + + $icon = 'tabler-heart' . ($exception ? '-off' : 'beat'); + $color = $exception ? 'danger' : 'success'; + + // TODO: add exception to browser console + return generate_icon_html($icon, attributes: (new ComponentAttributeBag()) + ->merge([ + 'x-tooltip' => '{ + content: "' . $tooltip . '", + theme: $store.theme, + allowHTML: true, + placement: "bottom", + }', + ], escape: false) + ->color(IconComponent::class, $color), size: IconSize::Large) + ->toHtml(); } public function placeholder(): string { - return <<<'HTML' -
- -
- HTML; + return generate_icon_html('tabler-heart-question', attributes: (new ComponentAttributeBag()) + ->color(IconComponent::class, 'warning'), size: IconSize::Large) + ->toHtml(); } } diff --git a/resources/views/livewire/columns/version-column.blade.php b/resources/views/livewire/columns/version-column.blade.php deleted file mode 100644 index 0acfd7a7d..000000000 --- a/resources/views/livewire/columns/version-column.blade.php +++ /dev/null @@ -1,31 +0,0 @@ -@php - use Filament\Support\Enums\IconSize; - - $node = $getRecord(); - $size = $getSize($node) ?? IconSize::Large; - - $sizeClasses = match ($size) { - IconSize::ExtraSmall, 'xs' => 'fi-ta-icon-item-size-xs h-3 w-3', - IconSize::Small, 'sm' => 'fi-ta-icon-item-size-sm h-4 w-4', - IconSize::Medium, 'md' => 'fi-ta-icon-item-size-md h-5 w-5', - IconSize::Large, 'lg' => 'fi-ta-icon-item-size-lg h-6 w-6', - IconSize::ExtraLarge, 'xl' => 'fi-ta-icon-item-size-xl h-7 w-7', - IconSize::TwoExtraLarge, '2xl' => 'fi-ta-icon-item-size-2xl h-8 w-8', - default => $size, - } -@endphp - -
merge($getExtraAttributes(), escape: false) - ->class([ - 'fi-ta-icon flex gap-1.5', - 'flex-wrap' => $canWrap(), - 'px-3 py-4' => ! $isInline(), - 'flex-col' => $isListWithLineBreaks(), - ]) - }} -> - @livewire('node-system-information', ['node' => $node, 'lazy' => true, 'sizeClasses' => $sizeClasses]) -
diff --git a/resources/views/livewire/node-system-information.blade.php b/resources/views/livewire/node-system-information.blade.php deleted file mode 100644 index 8312e6cec..000000000 --- a/resources/views/livewire/node-system-information.blade.php +++ /dev/null @@ -1,29 +0,0 @@ -
- @php - $exception = $node->systemInformation()['exception'] ?? null; - $version = $node->systemInformation()['version'] ?? null; - $content = $exception ? 'Error connecting to node!
Check browser console for details.' : $version; - $icon = 'tabler-heart' . ($exception ? '-off' : 'beat'); - $animated = $exception ? '' : 'animate-pulse'; - $condition = $exception ? 'danger' : 'success'; - $class = ['fi-ta-icon-item', $sizeClasses, 'fi-color-custom text-custom-500 dark:text-custom-400', 'fi-color-'.$condition, $animated]; - @endphp - - @if($exception) - @script - - @endscript - @endif -
-