Added new tab components for projects management (forgot download tab)
This commit is contained in:
parent
279bd3ec1a
commit
b57e86ed0a
96
laravel_app/app/Livewire/Projects/Tabs/Download.php
Normal file
96
laravel_app/app/Livewire/Projects/Tabs/Download.php
Normal file
|
|
@ -0,0 +1,96 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Livewire\Projects\Tabs;
|
||||||
|
|
||||||
|
use App\Models\Project;
|
||||||
|
use App\Rules\DownloadDateRangeRule;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Carbon\CarbonPeriod;
|
||||||
|
use Livewire\Component;
|
||||||
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
|
class Download extends Component
|
||||||
|
{
|
||||||
|
use WithPagination;
|
||||||
|
|
||||||
|
public Project $project;
|
||||||
|
|
||||||
|
public $formData;
|
||||||
|
|
||||||
|
public $showDownloadModal = false;
|
||||||
|
|
||||||
|
public $search = '';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function mount(Project $project)
|
||||||
|
{
|
||||||
|
$this->path = $project->download_path;
|
||||||
|
$this->formData = [
|
||||||
|
'dateRange' => sprintf('%s to %s',
|
||||||
|
now()->subDays(6)->format('Y/m/d'),
|
||||||
|
now()->format('Y/m/d')
|
||||||
|
)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update($property)
|
||||||
|
{
|
||||||
|
if ($property === 'search') {
|
||||||
|
$this->resetPage('downloadPage');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function openDownloadModal()
|
||||||
|
{
|
||||||
|
$this->showDownloadModal = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function saveDownloads()
|
||||||
|
{
|
||||||
|
$this->validate([
|
||||||
|
'formData.dateRange' => [
|
||||||
|
'required',
|
||||||
|
new DownloadDateRangeRule(),
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
$dateRange = explode(' to ', $this->formData['dateRange']);
|
||||||
|
|
||||||
|
$period = CarbonPeriod::create(
|
||||||
|
Carbon::parse($dateRange[0]),
|
||||||
|
Carbon::parse($dateRange[1])
|
||||||
|
);
|
||||||
|
|
||||||
|
collect($period)->each(function ($date) {
|
||||||
|
$this->project->startDownload($date);
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->showDownloadModal = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function applySearch($query)
|
||||||
|
{
|
||||||
|
if ($this->search) {
|
||||||
|
$query->where('name', 'like', '%' . $this->search . '%');
|
||||||
|
}
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function placeholder()
|
||||||
|
{
|
||||||
|
return view('livewire.projects.download-manager-placeholder');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
$query = $this->project->downloads()->orderBy('name', 'desc');
|
||||||
|
$query = $this->applySearch($query);
|
||||||
|
$downloads = $query->paginate(10, pageName: 'downloadPage');
|
||||||
|
|
||||||
|
return view('livewire.projects.tabs.download',
|
||||||
|
compact('downloads')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
<div
|
||||||
|
{{-- @if($project->hasPendingDownload())--}}
|
||||||
|
{{-- wire:poll.1s=""--}}
|
||||||
|
{{-- @endif--}}
|
||||||
|
{{-- TODO Put Back the poll but to the list of downloads only--}}
|
||||||
|
>
|
||||||
|
<div class="px-4 sm:px-6 lg:px-8">
|
||||||
|
<div class="sm:flex sm:flex-col sm:items-center">
|
||||||
|
<div class="flex justify-between w-full my-4">
|
||||||
|
<h1 class="text-base font-semibold leading-6 text-gray-900">Downloads</h1>
|
||||||
|
@if ($project->hasPendingDownload())
|
||||||
|
<p class="text-base text-gray-700 animate-pulse">
|
||||||
|
Pending downloads for this project: {{ $project->downloads()->statusPending()->count() }}
|
||||||
|
</p>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
<div class="mt-4 sm:mt-0 sm:flex sm:justify-between w-full">
|
||||||
|
<x-search></x-search>
|
||||||
|
<x-button wire:click="openDownloadModal"
|
||||||
|
class="rounded-md bg-indigo-600 px-3 py-2 text-center text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600">
|
||||||
|
{{ __('Create Download') }}
|
||||||
|
</x-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mt-8 flow-root">
|
||||||
|
<div class="relative">
|
||||||
|
<div class="-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8">
|
||||||
|
<div class="inline-block min-w-full py-2 align-middle">
|
||||||
|
<table class="min-w-full divide-y divide-gray-300">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col"
|
||||||
|
class="py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-gray-900 sm:pl-6 lg:pl-8">
|
||||||
|
Name
|
||||||
|
</th>
|
||||||
|
<th scope="col" class="px-3 py-3.5 text-left text-sm font-semibold text-gray-900">
|
||||||
|
File
|
||||||
|
</th>
|
||||||
|
<th scope="col"
|
||||||
|
class="px-3 py-3.5 text-right pr-4 sm:pr-8 lg:pr-8 text-sm font-semibold text-gray-900">
|
||||||
|
Status
|
||||||
|
</th>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody class="divide-y divide-gray-200 bg-white">
|
||||||
|
@foreach($downloads as $download)
|
||||||
|
<tr>
|
||||||
|
<td class="whitespace-nowrap py-4 pl-4 pr-3 text-sm font-medium text-gray-900 sm:pl-6 lg:pl-8">{{ $download->name }}</td>
|
||||||
|
<td class="whitespace-nowrap px-3 py-4 text-sm text-gray-500">
|
||||||
|
{{ $download->path }}
|
||||||
|
</td>
|
||||||
|
<td class="relative whitespace-nowrap py-4 pl-3 pr-4 text-right text-sm font-medium sm:pr-6 lg:pr-8">
|
||||||
|
<x-badge :status="$download->status"></x-badge>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="pt-4 flex justify-between items-center">
|
||||||
|
<div class="text-gray-700 text-sm">
|
||||||
|
Results: {{ \Illuminate\Support\Number::format($downloads->total()) }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{ $downloads->links('livewire.pagination') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{-- <div wire:loading class="absolute inset-0 bg-white opacity-75"></div>--}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<x-download-create-modal :manager="$this"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
Loading…
Reference in a new issue