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;
|
||
|
}
|
||
|
}
|