mirror of
https://github.com/usetrmnl/byos_laravel.git
synced 2026-03-14 20:33:40 +00:00
feat: add update functionality for device palettes in UI
This commit is contained in:
parent
e71d79190a
commit
8beeff754f
2 changed files with 46 additions and 3 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use App\Jobs\FetchDeviceModelsJob;
|
||||||
use App\Models\DevicePalette;
|
use App\Models\DevicePalette;
|
||||||
use Livewire\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
|
|
@ -58,6 +59,13 @@ new class extends Component
|
||||||
|
|
||||||
public $viewingDevicePaletteId;
|
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
|
public function openDevicePaletteModal(?string $devicePaletteId = null, bool $viewOnly = false): void
|
||||||
{
|
{
|
||||||
if ($devicePaletteId) {
|
if ($devicePaletteId) {
|
||||||
|
|
@ -202,9 +210,17 @@ new class extends Component
|
||||||
</flux:menu>
|
</flux:menu>
|
||||||
</flux:dropdown>
|
</flux:dropdown>
|
||||||
</div>
|
</div>
|
||||||
|
<flux:button.group>
|
||||||
<flux:modal.trigger name="device-palette-modal">
|
<flux:modal.trigger name="device-palette-modal">
|
||||||
<flux:button wire:click="openDevicePaletteModal()" icon="plus" variant="primary">Add Device Palette</flux:button>
|
<flux:button wire:click="openDevicePaletteModal()" icon="plus" variant="primary">Add Device Palette</flux:button>
|
||||||
</flux:modal.trigger>
|
</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>
|
</div>
|
||||||
@if (session()->has('message'))
|
@if (session()->has('message'))
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
use App\Models\DevicePalette;
|
use App\Models\DevicePalette;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
|
||||||
uses(Illuminate\Foundation\Testing\RefreshDatabase::class);
|
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($palettes)->toHaveCount($initialCount + 1);
|
||||||
expect(DevicePalette::count())->toBe($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');
|
||||||
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue