fix: remove blocking instant_remote_process and hide button during download

The first click did nothing because instant_remote_process() blocked the
Livewire response, preventing UI state updates. The button also remained
visible during download, allowing multiple clicks.

- Replace blocking instant_remote_process() with async command in queue
- Add container cleanup to command queue with error suppression
- Hide "Download & Prepare" button when s3DownloadInProgress is true
- Button now properly disappears when clicked, preventing double-clicks
- No more blocking operations in downloadFromS3() method

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Andras Bacsai 2025-11-02 18:29:26 +01:00
parent 91d752f906
commit d37378ec02
2 changed files with 3 additions and 6 deletions

View file

@ -394,12 +394,9 @@ public function downloadFromS3()
// Create download directory on server
$commands[] = "mkdir -p {$downloadDir}";
// Check if container exists and remove it
// Check if container exists and remove it (done in the command queue to avoid blocking)
$containerName = "s3-restore-{$this->resource->uuid}";
$containerExists = instant_remote_process(["docker ps -a -q -f name={$containerName}"], $this->server, false);
if (filled($containerExists)) {
instant_remote_process(["docker rm -f {$containerName}"], $this->server, false);
}
$commands[] = "docker rm -f {$containerName} 2>/dev/null || true";
// Run MinIO client container to download file
$commands[] = "docker run -d --name {$containerName} --rm -v {$downloadDir}:{$downloadDir} {$fullImageName} sleep 30";

View file

@ -138,7 +138,7 @@
</x-forms.button>
</div>
<div x-show="s3FileSize && !s3DownloadedFile" class="pt-2">
<div x-show="s3FileSize && !s3DownloadedFile && !s3DownloadInProgress" class="pt-2">
<div class="text-sm">File found in S3 ({{ formatBytes($s3FileSize ?? 0) }})</div>
<div class="flex gap-2 pt-2">
<x-forms.button class="w-full" wire:click='downloadFromS3'>