Skip to content

Commit 9f5360c

Browse files
committed
wip
1 parent ac0d585 commit 9f5360c

File tree

5 files changed

+41
-117
lines changed

5 files changed

+41
-117
lines changed

resources/views/fields/morph-to.blade.php

Lines changed: 0 additions & 55 deletions
This file was deleted.

resources/views/fields/relation.blade.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,11 @@ class="btn btn--primary btn--lg btn--block"
4646
x-on:submit.prevent
4747
x-on:open-{{ $modalKey }}.window.once="fetch"
4848
>
49-
@foreach($filters as $filter)
50-
@include($filter['template'], $filter)
51-
@endforeach
49+
<div class="form-group-stack form-group-stack--bordered form-group-container">
50+
@foreach($filters as $filter)
51+
@include($filter['template'], $filter)
52+
@endforeach
53+
</div>
5254
</form>
5355
<ul class="file-list__items" x-show="items.length > 0" x-cloak>
5456
<template x-for="(item, index) in items" :key="item.value">

src/Fields/MorphTo.php

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,10 @@
44

55
namespace Cone\Root\Fields;
66

7-
use Cone\Root\Http\Controllers\MorphToController;
87
use Illuminate\Database\Eloquent\Builder;
98
use Illuminate\Database\Eloquent\Model;
109
use Illuminate\Database\Eloquent\Relations\MorphTo as EloquentRelation;
1110
use Illuminate\Http\Request;
12-
use Illuminate\Routing\Router;
1311
use Illuminate\Support\Str;
1412

1513
/**
@@ -20,7 +18,7 @@ class MorphTo extends BelongsTo
2018
/**
2119
* The Blade template.
2220
*/
23-
protected string $template = 'root::fields.morph-to';
21+
protected string $template = 'root::fields.relation';
2422

2523
/**
2624
* The morph types.
@@ -35,6 +33,29 @@ public function getRelation(Model $model): EloquentRelation
3533
return parent::getRelation($model);
3634
}
3735

36+
/**
37+
* {@inheritdoc}
38+
*/
39+
public function filters(Request $request): array
40+
{
41+
$filters = parent::filters($request);
42+
43+
if ($this->isAsync()) {
44+
$typeFilter = Select::make(__('Type'), 'type')
45+
->options(array_map(
46+
static function (string $type): string {
47+
return __(Str::of($type)->classBasename()->headline()->value());
48+
},
49+
array_combine($this->types, $this->types)
50+
))
51+
->toFilter();
52+
53+
array_unshift($filters, $typeFilter);
54+
}
55+
56+
return $filters;
57+
}
58+
3859
/**
3960
* {@inheritdoc}
4061
*/
@@ -59,11 +80,12 @@ public function resolveHydrate(Request $request, Model $model, mixed $value): vo
5980
{
6081
$value = is_null($value) ? $value : explode(':', $value);
6182

62-
$related = is_null($value)
63-
? $value
64-
: tap(new $value[0], static function (Model $related) use ($value): void {
83+
$related = match (true) {
84+
! is_null($value) => tap(new $value[0], static function (Model $related) use ($value): void {
6585
$related->forceFill([$related->getKeyName() => $value[1]]);
66-
});
86+
}),
87+
default => $value,
88+
};
6789

6890
parent::resolveHydrate($request, $model, $related);
6991
}
@@ -86,33 +108,13 @@ public function types(array $types): static
86108
return $this;
87109
}
88110

89-
/**
90-
* {@inheritdoc}
91-
*/
92-
public function routes(Router $router): void
93-
{
94-
$router->get('/', MorphToController::class);
95-
}
96-
97-
/**
98-
* {@inheritdoc}
99-
*/
100-
public function toArray(): array
101-
{
102-
return array_merge(parent::toArray(), [
103-
'types' => array_map(
104-
static fn (string $type): string => __(Str::of($type)->classBasename()->headline()->value()), array_combine($this->types, $this->types)
105-
),
106-
]);
107-
}
108-
109111
/**
110112
* {@inheritdoc}
111113
*/
112114
public function toInput(Request $request, Model $model): array
113115
{
114116
return array_merge(parent::toInput($request, $model), [
115-
'url' => $this->replaceRoutePlaceholders($request->route()),
117+
'url' => sprintf('%s/search', $this->replaceRoutePlaceholders($request->route())),
116118
'morphTypeName' => $name = $this->getRelation($model)->getMorphType(),
117119
'morphType' => $model->getAttribute($name),
118120
]);

src/Http/Controllers/AsyncRelationController.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,14 @@ class AsyncRelationController extends Controller
1313
/**
1414
* Handle the incoming request.
1515
*/
16-
public function __invoke(Request $request, Model $model): JsonResponse
16+
public function __invoke(Request $request, Model $model, ...$params): JsonResponse
1717
{
1818
$field = $request->route('field');
1919

20-
return new JsonResponse($field->paginateRelatable($request, $model));
20+
$related = array_filter($params, fn (mixed $param): bool => $param instanceof Model);
21+
22+
$related = $related[array_key_last($related)] ?? null;
23+
24+
return new JsonResponse($field->paginateRelatable($request, $related ?: $model));
2125
}
2226
}

src/Http/Controllers/MorphToController.php

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)