211 lines
4.4 KiB
PHP
211 lines
4.4 KiB
PHP
<?php
|
|
|
|
namespace Laravel\Nova;
|
|
|
|
use Illuminate\Http\Resources\MergeValue;
|
|
use Illuminate\Support\Traits\Macroable;
|
|
use JsonSerializable;
|
|
use Laravel\Nova\Metrics\HasHelpText;
|
|
|
|
class Panel extends MergeValue implements JsonSerializable
|
|
{
|
|
use Macroable, Metable, Makeable, HasHelpText;
|
|
|
|
/**
|
|
* The name of the panel.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $name;
|
|
|
|
/**
|
|
* The panel fields.
|
|
*
|
|
* @var array
|
|
*/
|
|
public $data;
|
|
|
|
/**
|
|
* The panel's component.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $component = 'panel';
|
|
|
|
/**
|
|
* Indicates whether the detail toolbar should be visible on this panel.
|
|
*
|
|
* @var bool
|
|
*/
|
|
public $showToolbar = false;
|
|
|
|
/**
|
|
* The initial field display limit.
|
|
*
|
|
* @var int|null
|
|
*/
|
|
public $limit = null;
|
|
|
|
/**
|
|
* The help text for the element.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $helpText;
|
|
|
|
/**
|
|
* Create a new panel instance.
|
|
*
|
|
* @param string $name
|
|
* @param \Closure|array $fields
|
|
* @return void
|
|
*/
|
|
public function __construct($name, $fields = [])
|
|
{
|
|
$this->name = $name;
|
|
|
|
parent::__construct($this->prepareFields($fields));
|
|
}
|
|
|
|
/**
|
|
* Prepare the given fields.
|
|
*
|
|
* @param \Closure|array $fields
|
|
* @return array
|
|
*/
|
|
protected function prepareFields($fields)
|
|
{
|
|
return collect(is_callable($fields) ? $fields() : $fields)->each(function ($field) {
|
|
$field->panel = $this->name;
|
|
})->all();
|
|
}
|
|
|
|
/**
|
|
* Get the default panel name for the given resource.
|
|
*
|
|
* @param \Laravel\Nova\Resource $resource
|
|
* @return string
|
|
*/
|
|
public static function defaultNameForDetail(Resource $resource)
|
|
{
|
|
return __(':resource Details: :title', [
|
|
'resource' => $resource->singularLabel(),
|
|
'title' => (string) $resource->title(),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Get the default panel name for a create panel.
|
|
*
|
|
* @param \Laravel\Nova\Resource $resource
|
|
* @return string
|
|
*/
|
|
public static function defaultNameForCreate(Resource $resource)
|
|
{
|
|
return __('Create :resource', [
|
|
'resource' => (string) $resource->singularLabel(),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Get the default panel name for the update panel.
|
|
*
|
|
* @param \Laravel\Nova\Resource $resource
|
|
* @return string
|
|
*/
|
|
public static function defaultNameForUpdate(Resource $resource)
|
|
{
|
|
return __('Update :resource: :title', [
|
|
'resource' => $resource->singularLabel(),
|
|
'title' => $resource->title(),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Display the toolbar when showing this panel.
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function withToolbar()
|
|
{
|
|
$this->showToolbar = true;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Set the number of initially visible fields.
|
|
*
|
|
* @param int $limit
|
|
* @return $this
|
|
*/
|
|
public function limit($limit)
|
|
{
|
|
$this->limit = $limit;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Set the Vue component key for the panel.
|
|
*
|
|
* @param string $component
|
|
* @return $this
|
|
*/
|
|
public function withComponent($component)
|
|
{
|
|
$this->component = $component;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Get the Vue component key for the panel.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function component()
|
|
{
|
|
return $this->component;
|
|
}
|
|
|
|
/**
|
|
* Set the width for the help text tooltip.
|
|
*
|
|
* @param string
|
|
* @return $this
|
|
* @throws \Exception
|
|
*/
|
|
public function helpWidth($helpWidth)
|
|
{
|
|
throw new \Exception('Help width is not supported on panels.');
|
|
}
|
|
|
|
/**
|
|
* Return the width of the help text tooltip.
|
|
*
|
|
* @return string
|
|
* @throws \Exception
|
|
*/
|
|
public function getHelpWidth()
|
|
{
|
|
throw new \Exception('Help width is not supported on panels.');
|
|
}
|
|
|
|
/**
|
|
* Prepare the panel for JSON serialization.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function jsonSerialize()
|
|
{
|
|
return array_merge([
|
|
'component' => $this->component(),
|
|
'name' => $this->name,
|
|
'showToolbar' => $this->showToolbar,
|
|
'limit' => $this->limit,
|
|
'helpText' => $this->getHelpText(),
|
|
], $this->meta());
|
|
}
|
|
}
|