feat: add update functionality for device palettes in UI

This commit is contained in:
Benjamin Nussbaum 2026-02-06 23:42:14 +01:00
parent e71d79190a
commit 8beeff754f
2 changed files with 46 additions and 3 deletions

View file

@ -1,5 +1,6 @@
<?php
use App\Jobs\FetchDeviceModelsJob;
use App\Models\DevicePalette;
use Livewire\Component;
@ -58,6 +59,13 @@ new class extends Component
public $viewingDevicePaletteId;
public function updateFromApi(): void
{
FetchDeviceModelsJob::dispatchSync();
$this->devicePalettes = DevicePalette::all();
session()->flash('message', 'Device palettes updated from API.');
}
public function openDevicePaletteModal(?string $devicePaletteId = null, bool $viewOnly = false): void
{
if ($devicePaletteId) {
@ -202,9 +210,17 @@ new class extends Component
</flux:menu>
</flux:dropdown>
</div>
<flux:button.group>
<flux:modal.trigger name="device-palette-modal">
<flux:button wire:click="openDevicePaletteModal()" icon="plus" variant="primary">Add Device Palette</flux:button>
</flux:modal.trigger>
<flux:dropdown>
<flux:button icon="chevron-down" variant="primary"></flux:button>
<flux:menu>
<flux:menu.item icon="arrow-path" wire:click="updateFromApi">Update from API</flux:menu.item>
</flux:menu>
</flux:dropdown>
</flux:button.group>
</div>
@if (session()->has('message'))
<div class="mb-4">

View file

@ -4,6 +4,7 @@ declare(strict_types=1);
use App\Models\DevicePalette;
use App\Models\User;
use Illuminate\Support\Facades\Http;
uses(Illuminate\Foundation\Testing\RefreshDatabase::class);
@ -570,3 +571,29 @@ test('component refreshes palette list after deleting', function (): void {
expect($palettes)->toHaveCount($initialCount + 1);
expect(DevicePalette::count())->toBe($initialCount + 1);
});
test('update from API runs job and refreshes device palettes', function (): void {
$user = User::factory()->create();
$this->actingAs($user);
Http::fake([
'usetrmnl.com/api/palettes' => Http::response([
'data' => [
[
'id' => 'api-palette',
'name' => 'API Palette',
'grays' => 4,
'colors' => null,
'framework_class' => '',
],
],
], 200),
config('services.trmnl.base_url').'/api/models' => Http::response(['data' => []], 200),
]);
$component = Livewire::test('device-palettes.index')
->call('updateFromApi');
$devicePalettes = $component->get('devicePalettes');
expect($devicePalettes->pluck('name')->toArray())->toContain('api-palette');
});