View.php
 1  <?php
 2  
 3  namespace App\Http\Livewire\CertifiedProducts;
 4  
 5  use App\Http\Services\CertifiedProductsService;
 6  use Illuminate\Support\Facades\File;
 7  use Livewire\Component;
 8  use WireUi\Traits\Actions;
 9  
10  class View extends Component
11  {
12      use Actions;
13  
14      public $certifiedProductId;
15  
16      public function mount()
17      {
18          $this->authorize('can_read_certified_products');
19      }
20  
21      public function getCertifiedProductProperty()
22      {
23          return CertifiedProductsService::getCertifiedProduct($this->certifiedProductId);
24      }
25  
26      public function getNormScopesProperty()
27      {
28          return $this->certifiedProduct->dossier->norm->normScopes->map(function ($normScope) {
29              return $normScope->name;
30          })->implode(' + ');
31      }
32  
33      public function getProtectionProfileProperty()
34      {
35          return $this->certifiedProduct->dossier->protectionProfiles->map(function ($protectionProfile) {
36              return $protectionProfile->name;
37          })->implode('\n');
38      }
39  
40      public function downloadFile()
41      {
42  
43          if (!File::exists($this->certifiedProduct->xml_path)) {
44              $this->notification()->error(
45                  __('certified-products.notifications.download.error.title'),
46                  __('certified-products.notifications.download.error.message')
47              );
48              return;
49          }
50  
51          return response()->download($this->certifiedProduct->xml_path, $this->certifiedProduct->file_name);
52      }
53  
54      public function render()
55      {
56          return view('livewire.certified-products.view')
57              ->layoutData([
58                  'title' => __('certified-products.title'),
59                  'entity' => $this->certifiedProduct,
60                  'breadcrumb' => 'certified-products.view',
61              ]);
62      }
63  }