/home/bdqbpbxa/api-uniferx.goodface.com.ua/vendor/laravel/nova/src/Fields/HasMany.php
<?php
namespace Laravel\Nova\Fields;
use Illuminate\Http\Request;
use Laravel\Nova\Contracts\ListableField;
use Laravel\Nova\Contracts\RelatableField;
use Laravel\Nova\Exceptions\HelperNotSupported;
use Laravel\Nova\Exceptions\NovaException;
use Laravel\Nova\Panel;
/**
* @method static static make(mixed $name, string|null $attribute = null, string|null $resource = null)
*/
class HasMany extends Field implements ListableField, RelatableField
{
use Collapsable;
/**
* Add help text to the metric.
*
* @param string $text
* @return $this
*
* @throws HelperNotSupported
*/
public function help($text)
{
throw NovaException::helperNotSupported(__METHOD__, __CLASS__);
}
/**
* The field's component.
*
* @var string
*/
public $component = 'has-many-field';
/**
* The class name of the related resource.
*
* @var class-string<\Laravel\Nova\Resource>
*/
public $resourceClass;
/**
* The URI key of the related resource.
*
* @var string
*/
public $resourceName;
/**
* The name of the Eloquent "has many" relationship.
*
* @var string
*/
public $hasManyRelationship;
/**
* The displayable singular label of the relation.
*
* @var string|null
*/
public $singularLabel;
/**
* Create a new field.
*
* @param string $name
* @param string|null $attribute
* @param class-string<\Laravel\Nova\Resource>|null $resource
* @return void
*/
public function __construct($name, $attribute = null, $resource = null)
{
parent::__construct($name, $attribute);
$resource = $resource ?? ResourceRelationshipGuesser::guessResource($name);
$this->resourceClass = $resource;
$this->resourceName = $resource::uriKey();
$this->hasManyRelationship = $this->attribute = $attribute ?? ResourceRelationshipGuesser::guessRelation($name);
}
/**
* Get the relationship name.
*
* @return string
*/
public function relationshipName()
{
return $this->hasManyRelationship;
}
/**
* Get the relationship type.
*
* @return string
*/
public function relationshipType()
{
return 'hasMany';
}
/**
* Determine if the field should be displayed for the given request.
*
* @param \Illuminate\Http\Request $request
* @return bool
*/
public function authorize(Request $request)
{
return call_user_func(
[$this->resourceClass, 'authorizedToViewAny'], $request
) && parent::authorize($request);
}
/**
* Resolve the field's value.
*
* @param mixed $resource
* @param string|null $attribute
* @return void
*/
public function resolve($resource, $attribute = null)
{
//
}
/**
* Set the displayable singular label of the resource.
*
* @param string $singularLabel
* @return $this
*/
public function singularLabel($singularLabel)
{
$this->singularLabel = $singularLabel;
return $this;
}
/**
* Make current field behaves as panel.
*
* @return \Laravel\Nova\Panel
*/
public function asPanel()
{
return Panel::make($this->name, [$this])
->withMeta([
'prefixComponent' => true,
])->withComponent('relationship-panel');
}
/**
* Prepare the field for JSON serialization.
*
* @return array<string, mixed>
*/
public function jsonSerialize(): array
{
return array_merge([
'collapsable' => $this->collapsable,
'collapsedByDefault' => $this->collapsedByDefault,
'hasManyRelationship' => $this->hasManyRelationship,
'relatable' => true,
'perPage' => $this->resourceClass::$perPageViaRelationship,
'resourceName' => $this->resourceName,
'singularLabel' => $this->singularLabel ?? $this->resourceClass::singularLabel(),
], parent::jsonSerialize());
}
}