'required', 'api_key' => 'required', 'default_refresh_interval' => 'required|integer', 'device_model_id' => 'nullable|exists:device_models,id', 'mirror_device_id' => 'required_if:is_mirror,true', ]; public function mount() { $this->devices = auth()->user()->devices; $this->deviceModels = DeviceModel::orderBy('label')->get()->sortBy(function ($deviceModel) { // Put TRMNL models at the top, then sort alphabetically within each group $isTrmnl = str_starts_with($deviceModel->label, 'TRMNL'); return $isTrmnl ? '0' . $deviceModel->label : '1' . $deviceModel->label; }); return view('livewire.devices.manage'); } public function updatedDeviceModelId(): void { // Convert empty string to null for custom selection if (empty($this->device_model_id)) { $this->device_model_id = null; } } public function createDevice(): void { $this->validate(); if ($this->is_mirror) { // Verify the mirror device belongs to the user and is not a mirror device itself $mirrorDevice = auth()->user()->devices()->find($this->mirror_device_id); abort_unless($mirrorDevice, 403, 'Invalid mirror device selected'); abort_if($mirrorDevice->mirror_device_id !== null, 403, 'Cannot mirror a device that is already a mirror device'); } // Convert empty string to null for custom selection $deviceModelId = empty($this->device_model_id) ? null : $this->device_model_id; Device::create([ 'name' => $this->name, 'mac_address' => $this->mac_address, 'api_key' => $this->api_key, 'default_refresh_interval' => $this->default_refresh_interval, 'friendly_id' => $this->friendly_id, 'user_id' => auth()->id(), 'device_model_id' => $deviceModelId, 'mirror_device_id' => $this->is_mirror ? $this->mirror_device_id : null, ]); $this->reset(); \Flux::modal('create-device')->close(); $this->devices = auth()->user()->devices; session()->flash('message', 'Device created successfully.'); } public function toggleProxyCloud(Device $device): void { abort_unless(auth()->user()->devices->contains($device), 403); $device->update([ 'proxy_cloud' => !$device->proxy_cloud, ]); // if ($device->proxy_cloud) { // \App\Jobs\FetchProxyCloudResponses::dispatch(); // } } public function pauseDevice($deviceId): void { $this->validate([ 'pause_duration' => 'required|integer', ]); $device = auth()->user()->devices()->findOrFail($deviceId); $pauseUntil = now()->addMinutes($this->pause_duration); $device->update(['pause_until' => $pauseUntil]); $this->reset('pause_duration'); \Flux::modal('pause-device-' . $deviceId)->close(); $this->devices = auth()->user()->devices; session()->flash('message', 'Device paused until ' . $pauseUntil->format('H:i')); } } ?>
{{--@dump($devices)--}}

Devices

Device Models Device Palettes
Add Device
@if (session()->has('message'))
@endif
Add Device
Custom (Manual Dimensions) @if ($deviceModels && $deviceModels->count() > 0) @foreach($deviceModels as $deviceModel) {{ $deviceModel->label }} ({{ $deviceModel->width }}x{{ $deviceModel->height }}) @endforeach @endif
@if($is_mirror)
Select a device @foreach(auth()->user()->devices->where('mirror_device_id', null) as $device) {{ $device->name }} ({{ $device->friendly_id }}) @endforeach
@endif
Create Device
@foreach ($devices as $device) @endforeach
Name
Friendly ID
Mac Address
Refresh
Actions
{{ $device->name }} {{ $device->friendly_id }}
{{ $device->mac_address }}
{{ $device->default_refresh_interval }}
@if($device->isPauseActive()) @else @endif
@foreach ($devices as $device)
Pause
Select how long to pause screen generation for {{ $device->name }}.
Cancel Save
@endforeach