akaunting/app/View/Components/Show/NoRecords.php
2022-06-01 10:15:55 +03:00

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