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 }