/ app / Http / Livewire / Documents / Document / Create.php
Create.php
 1  <?php
 2  
 3  namespace App\Http\Livewire\Documents\Document;
 4  
 5  use App\Http\Services\DocumentService;
 6  use App\Models\Document;
 7  use App\Models\DocumentType;
 8  use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
 9  use Livewire\Component;
10  use WireUi\Traits\Actions;
11  
12  class Create extends Component
13  {
14      use AuthorizesRequests, Actions;
15  
16      public $document = [
17          'type_id' => null,
18          'file' => null,
19          'isInternal' => 0,
20          'version' => null,
21          'description' => '',
22      ];
23  
24      protected $rules = [
25          'document.type_id' => 'required',
26          'document.file' => 'required|file',
27          'document.isInternal' => 'required',
28          'document.version' => 'required',
29          'document.description' => 'nullable|max:255',
30      ];
31  
32      public function mount()
33      {
34          $this->authorize('create', Document::class);
35      }
36  
37      public function create(): void
38      {
39          $this->authorize('create', Document::class);
40  
41          try {
42              DocumentService::create($this->document);
43  
44              $this->resetModels();
45  
46              // UI Trick for delaying spinner
47              if (config('app.env') !== 'testing') {
48                  sleep(1);
49              }
50  
51              $this->emitUp('closePanel');
52              $this->emitTo('documents.document.index', 'refresh');
53  
54              $this->notification()->success(
55                  __('documents.notifications.create.success.title'),
56                  __('documents.notifications.create.success.message')
57              );
58          } catch (\Exception $e) {
59              $this->notification()->error(
60                  'Error',
61                  $e->getMessage()
62              );
63          }
64      }
65  
66      public function resetModels(): void
67      {
68          $this->document = [
69              'type_id' => null,
70              'file' => null,
71              'isInternal' => 0,
72              'version' => null,
73              'description' => '',
74          ];
75      }
76  
77      public function getTypesProperty()
78      {
79          return DocumentType::get(['id', 'code as name', 'description'])->toArray();
80      }
81  
82      public function render()
83      {
84          return view('livewire.documents.document.create');
85      }
86  }