Skip to content

Commit 06830a7

Browse files
committed
Added pivot model handling in OrderFieldRequestHandler
1 parent 1826d98 commit 06830a7

File tree

4 files changed

+56
-15
lines changed

4 files changed

+56
-15
lines changed

dist/js/field.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -304,9 +304,11 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
304304

305305
Nova.request().post("/nova-vendor/michielkempen/nova-order-field/" + this.resourceName, {
306306
direction: direction,
307-
field: this.field.attribute,
308307
resource: this.resourceName,
309-
resourceId: this.resourceId
308+
resourceId: this.resourceId,
309+
viaResource: this.field.viaResource,
310+
viaResourceId: this.field.viaResourceId,
311+
viaRelationship: this.field.viaRelationship
310312
}).then(function () {
311313
_this.$toasted.show(_this.__("The new order has been set!"), {
312314
type: "success"

resources/js/components/IndexField.vue

+4-2
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,11 @@ export default {
6363
`/nova-vendor/michielkempen/nova-order-field/${this.resourceName}`,
6464
{
6565
direction: direction,
66-
field: this.field.attribute,
6766
resource: this.resourceName,
68-
resourceId: this.resourceId
67+
resourceId: this.resourceId,
68+
viaResource: this.field.viaResource || null,
69+
viaResourceId: this.field.viaResourceId || null,
70+
viaRelationship: this.field.viaRelationship || null
6971
}
7072
)
7173
.then(() => {

src/Http/OrderFieldRequestHandler.php

+37-10
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,56 @@
33
namespace MichielKempen\NovaOrderField\Http;
44

55
use Illuminate\Routing\Controller;
6+
use Illuminate\Database\Eloquent\Model;
67
use Laravel\Nova\Http\Requests\NovaRequest;
78
use Spatie\EloquentSortable\Sortable;
89

910
class OrderFieldRequestHandler extends Controller
1011
{
1112
/**
13+
* Handles incoming "change order" request
14+
*
1215
* @param NovaRequest $request
16+
* @return void
1317
*/
1418
public function __invoke(NovaRequest $request)
1519
{
16-
$resourceId = $request->get('resourceId');
17-
$model = $request->findModelOrFail($resourceId);
20+
$resource = $request->resource();
1821

19-
if (!$model instanceof Sortable) {
20-
abort(500, "Model should implement " . Sortable::class . " interface");
22+
if($resource::canQueryPivotOrder() && $resource::orderedManyPivotModel($request)) {
23+
$relationship = $request->viaRelationship;
24+
25+
$pivot = $request->findParentModelOrFail()
26+
->$relationship()
27+
->find($request->resourceId)
28+
->pivot;
29+
30+
return $this->move($request->get('direction'), $pivot);
2131
}
2232

23-
$direction = $request->get('direction');
33+
$this->move(
34+
$request->get('direction'),
35+
$request->findModelOrFail()
36+
);
37+
}
2438

25-
if($direction == 'up') {
26-
$model->moveOrderUp();
27-
} else {
28-
$model->moveOrderDown();
39+
/**
40+
* Handles incoming "change order" request
41+
*
42+
* @param string $direction
43+
* @param Model $model
44+
* @return void
45+
*/
46+
public function move($direction, Model $model)
47+
{
48+
if (!$model instanceof Sortable) {
49+
abort(500, get_class($model) . ' should implement the ' . Sortable::class . ' interface.');
2950
}
30-
}
51+
52+
if($direction == 'up') {
53+
return $model->moveOrderUp();
54+
}
55+
56+
$model->moveOrderDown();
57+
}
3158
}

src/OrderField.php

+11-1
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,19 @@ protected function resolveAttribute($resource, $attribute)
4848
);
4949

5050
if($pivot = $this->shouldResolveOnPivot($request, $resourceClass)) {
51-
return data_get($pivot, $resourceClass::modelOrderByFieldAttribute($pivot));
51+
$attribute = $resourceClass::modelOrderByFieldAttribute($pivot);
52+
53+
$this->withMeta([
54+
'viaResource' => $request->viaResource,
55+
'viaResourceId' => $request->viaResourceId,
56+
'viaRelationship' => $request->viaRelationship,
57+
]);
58+
59+
return data_get($pivot, $attribute);
5260
}
5361

62+
$attribute = $resourceClass::modelOrderByFieldAttribute($resource);
63+
5464
return data_get($resource, $attribute);
5565
}
5666

0 commit comments

Comments
 (0)