-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDocumentsRater.php
82 lines (68 loc) · 2.04 KB
/
DocumentsRater.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
namespace App\Livewire;
use App\Models\DocumentCategory;
use App\Models\DocumentState;
use App\Models\User;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Livewire\Component;
use Symfony\Component\HttpFoundation\StreamedResponse;
class DocumentsRater extends Component
{
use HasCommentSection;
public User $user;
/**
* @var DocumentCategory
*/
public $category;
public function mount(): void
{
$this->document = $this->user->documentBy($this->category);
$this->comments = $this->document->comments;
}
public function render(): Application|Factory|View
{
return view('livewire.documents-rater', [
'category' => $this->category,
'comments' => $this->comments,
]);
}
public function download(): ?StreamedResponse
{
if ($this->document != null && $this->document->path != null) {
$name = Str::snake($this->user->file_path_name.' '.$this->category->displayName());
return Storage::disk()->download($this->document->path, $name);
}
return null;
}
public function state(): string
{
return match ($this->document?->state) {
DocumentState::Approved => '✅',
DocumentState::Submitted => '⬆️',
DocumentState::Declined => '⛔️',
default => '🤷',
};
}
public function approve(): void
{
if ($this->document != null) {
$this->document->state = DocumentState::Approved;
$this->document->save();
}
}
public function decline(): void
{
if ($this->document != null) {
$this->document->state = DocumentState::Declined;
$this->document->save();
}
}
public function isDocumentPresent(): bool
{
return $this->document != null && $this->document->path != null;
}
}