Skip to content

Commit 70fb9a9

Browse files
committed
Better integration potential for third party packages
1 parent b375ad6 commit 70fb9a9

6 files changed

Lines changed: 145 additions & 3 deletions

File tree

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace KirschbaumDevelopment\NovaInlineRelationship\Integrations\Contracts;
4+
5+
interface ThirdPartyContract
6+
{
7+
/**
8+
* ThirdPartyContract constructor.
9+
*
10+
* @param $object
11+
*/
12+
public function __construct($object);
13+
14+
/**
15+
* Fields array from object.
16+
*
17+
* @return array
18+
*/
19+
public function fields(): array;
20+
}

src/Integrations/Field.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
namespace KirschbaumDevelopment\NovaInlineRelationship\Integrations;
4+
5+
use KirschbaumDevelopment\NovaInlineRelationship\Integrations\Contracts\ThirdPartyContract;
6+
7+
class Field implements ThirdPartyContract
8+
{
9+
/**
10+
* @var mixed
11+
*/
12+
private $object;
13+
14+
/**
15+
* ThirdPartyContract constructor.
16+
*
17+
* @param $object
18+
*/
19+
public function __construct($object)
20+
{
21+
$this->object = $object;
22+
}
23+
24+
/**
25+
* Fields array from object.
26+
*
27+
* @return array
28+
*/
29+
public function fields(): array
30+
{
31+
return [$this->object];
32+
}
33+
}

src/Integrations/Integrate.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace KirschbaumDevelopment\NovaInlineRelationship\Integrations;
4+
5+
use LeadMarvels\Campaigns\Services\QueryClauses\Contracts\WhereInterface;
6+
use KirschbaumDevelopment\NovaInlineRelationship\Integrations\Field as FieldInterface;
7+
8+
class Integrate
9+
{
10+
public static function fields($object): array
11+
{
12+
$basename = class_basename(get_class($object));
13+
$class = "\\KirschbaumDevelopment\\NovaInlineRelationship\\Integrations\\{$basename}";
14+
15+
return class_exists($class)
16+
? (new $class($object))->fields()
17+
: (new FieldInterface($object))->fields();
18+
}
19+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
namespace KirschbaumDevelopment\NovaInlineRelationship\Integrations;
4+
5+
use KirschbaumDevelopment\NovaInlineRelationship\Integrations\Contracts\ThirdPartyContract;
6+
7+
class NovaDependencyContainer implements ThirdPartyContract
8+
{
9+
/**
10+
* @var \Laravel\Nova\Panel
11+
*/
12+
private $object;
13+
14+
/**
15+
* ThirdPartyContract constructor.
16+
*
17+
* @param $object
18+
*/
19+
public function __construct($object)
20+
{
21+
$this->object = $object;
22+
}
23+
24+
/**
25+
* Fields array from object.
26+
*
27+
* @return array
28+
*/
29+
public function fields(): array
30+
{
31+
return $this->object->meta['fields'];
32+
}
33+
}

src/Integrations/Panel.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
namespace KirschbaumDevelopment\NovaInlineRelationship\Integrations;
4+
5+
use KirschbaumDevelopment\NovaInlineRelationship\Integrations\Contracts\ThirdPartyContract;
6+
7+
class Panel implements ThirdPartyContract
8+
{
9+
/**
10+
* @var \Laravel\Nova\Panel
11+
*/
12+
private $object;
13+
14+
/**
15+
* ThirdPartyContract constructor.
16+
*
17+
* @param $object
18+
*/
19+
public function __construct($object)
20+
{
21+
$this->object = $object;
22+
}
23+
24+
/**
25+
* Fields array from object.
26+
*
27+
* @return array
28+
*/
29+
public function fields(): array
30+
{
31+
return $this->object->data;
32+
}
33+
}

src/Observers/NovaInlineRelationshipObserver.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,14 @@
55
use Laravel\Nova\Nova;
66
use Laravel\Nova\Panel;
77
use Illuminate\Database\Eloquent\Model;
8+
use Epartment\NovaDependencyContainer\NovaDependencyContainer;
89
use KirschbaumDevelopment\NovaInlineRelationship\NovaInlineRelationship;
10+
use KirschbaumDevelopment\NovaInlineRelationship\Integrations\Integrate;
911
use KirschbaumDevelopment\NovaInlineRelationship\Contracts\RelationshipObservable;
12+
use KirschbaumDevelopment\NovaInlineRelationship\Integrations\Field as FieldInterface;
13+
use KirschbaumDevelopment\NovaInlineRelationship\Integrations\Panel as PanelInterface;
14+
use KirschbaumDevelopment\NovaInlineRelationship\Integrations\Contracts\ThirdPartyContract;
15+
use KirschbaumDevelopment\NovaInlineRelationship\Integrations\NovaDependencyContainer as NovaDependencyContainerInterface;
1016
use KirschbaumDevelopment\NovaInlineRelationship\Helpers\NovaInlineRelationshipHelper;
1117

1218
class NovaInlineRelationshipObserver
@@ -96,9 +102,7 @@ protected function getModelRelationships(Model $model)
96102
{
97103
return collect(Nova::newResourceFromModel($model)->fields(request()))
98104
->flatMap(function ($value) {
99-
return $value instanceof Panel
100-
? $value->data
101-
: [$value];
105+
return Integrate::fields($value);
102106
})
103107
->filter(function ($value) {
104108
return $value->component === 'nova-inline-relationship';

0 commit comments

Comments
 (0)