145 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\View\Components\Show;
 | |
| 
 | |
| use App\Abstracts\View\Component;
 | |
| use Illuminate\Support\Str;
 | |
| 
 | |
| class NoRecords extends Component
 | |
| {
 | |
|     /** @var string */
 | |
|     public $type;
 | |
| 
 | |
|     public $model;
 | |
| 
 | |
|     /** @var string */
 | |
|     public $page;
 | |
| 
 | |
|     /** @var string */
 | |
|     public $group;
 | |
| 
 | |
|     /** @var string */
 | |
|     public $backgroundColor;
 | |
| 
 | |
|     /** @var string */
 | |
|     public $textColor;
 | |
| 
 | |
|     /** @var string */
 | |
|     public $image;
 | |
| 
 | |
|     /** @var string */
 | |
|     public $description;
 | |
| 
 | |
|     /** @var string */
 | |
|     public $url;
 | |
| 
 | |
|     /** @var string */
 | |
|     public $textAction;
 | |
| 
 | |
|     public $urls = [
 | |
|         'account'   => [
 | |
|             'transactions'  => 'accounts.create-income',
 | |
|             'transfers'     => 'accounts.create-transfer',
 | |
|         ],
 | |
|         'customer'  => [
 | |
|             'invoices'      => 'customers.create-invoice',
 | |
|             'transactions'  => 'customers.create-income',
 | |
|         ],
 | |
|         'vendor'    => [
 | |
|             'bills'         => 'vendors.create-bill',
 | |
|             'transactions'  => 'vendors.create-expense',
 | |
|         ],
 | |
|     ];
 | |
| 
 | |
|     /**
 | |
|      * Create a new component instance.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function __construct(
 | |
|         string $type = '', $model = false, string $page = '', string $group = '',
 | |
|         string $backgroundColor = '', string $textColor = '', 
 | |
|         string $image = '', string $description = '', string $url = '', string $textAction = ''
 | |
|     ) {
 | |
|         $this->type = $type;
 | |
|         $this->model = $model;
 | |
|         $this->page = $page;
 | |
|         $this->group = $group;
 | |
|         $this->backgroundColor = ! empty($backgroundColor) ? $backgroundColor : 'bg-lilac-900';
 | |
|         $this->textColor = ! empty($textColor) ? $textColor : 'text-purple';
 | |
|         $this->image = $this->getImage($image);
 | |
|         $this->description = $this->getDescription($description);
 | |
|         $this->url = $this->getUrl($url);
 | |
|         $this->textAction = $this->getTextAction($textAction);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the view / contents that represent the component.
 | |
|      *
 | |
|      * @return \Illuminate\Contracts\View\View|string
 | |
|      */
 | |
|     public function render()
 | |
|     {
 | |
|         return view('components.show.no-records');
 | |
|     }
 | |
| 
 | |
|     protected function getImage($image)
 | |
|     {
 | |
|         if (! empty($image)) {
 | |
|             return $image;
 | |
|         }
 | |
| 
 | |
|         $image = match ($this->type) {
 | |
|             'account'   => 'public/img/no_records/accounts_' . $this->page . '.png',
 | |
|             'customer'  => 'public/img/no_records/customers_' . $this->page . '.png',
 | |
|             'vendor'    => 'public/img/no_records/vendors_' . $this->page . '.png',
 | |
|             default     => '',
 | |
|         };
 | |
| 
 | |
|         return $image;
 | |
|     }
 | |
| 
 | |
|     protected function getDescription($description)
 | |
|     {
 | |
|         if (! empty($description)) {
 | |
|             return $description;
 | |
|         }
 | |
| 
 | |
|         $prefix = Str::plural($this->type);
 | |
| 
 | |
|         $description = match ($this->type) {
 | |
|             'account', 'customer', 'vendor' => trans($prefix . '.no_records.' . $this->page),
 | |
|             default     => '',
 | |
|         };
 | |
| 
 | |
|         return $description;
 | |
|     }
 | |
| 
 | |
|     protected function getUrl($url)
 | |
|     {
 | |
|         if (! empty($url)) {
 | |
|             return $url;
 | |
|         }
 | |
| 
 | |
|         if (array_key_exists($this->type, $this->urls) && array_key_exists($this->page, $this->urls[$this->type])) {
 | |
|             return route($this->urls[$this->type][$this->page], $this->model->id);
 | |
|         }
 | |
| 
 | |
|         return $url;
 | |
|     }
 | |
| 
 | |
|     protected function getTextAction($textAction)
 | |
|     {
 | |
|         if (! empty($textAction)) {
 | |
|             return $textAction;
 | |
|         }
 | |
| 
 | |
|         $textAction = match ($this->type) {
 | |
|             'account', 'customer', 'vendor' => trans('general.title.new', ['type' => trans_choice('general.' . $this->page, 1)]),
 | |
|             default => trans('modules.learn_more'),
 | |
|         };
 | |
| 
 | |
|         return $textAction;
 | |
|     }
 | |
| }
 |