Add functionality to change the order of models in the product list. This includes new actions, requests, and UI components for user interaction.
64 lines
1.8 KiB
PHP
64 lines
1.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Traits\Controllers;
|
|
|
|
use App\Actions\Common\ChangeModelOrder;
|
|
use App\Actions\Common\ChangeModelOrderInput;
|
|
use App\Actions\Common\ChangeModelOrderPosition;
|
|
use App\Contracts\Executor;
|
|
use App\Http\Requests\Bo\ChangeOrderRequest;
|
|
use App\Http\Requests\Bo\ChangeSelectedOrderRequest;
|
|
use App\Interfaces\ModelWithOrder;
|
|
use App\Services\FlashMessageService;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Http\RedirectResponse;
|
|
|
|
trait ChangesModelOrder
|
|
{
|
|
public function changeOrder(
|
|
Model & ModelWithOrder $model,
|
|
ChangeOrderRequest $request,
|
|
ChangeModelOrder $action,
|
|
Executor $executor,
|
|
FlashMessageService $flashMessageService
|
|
): RedirectResponse {
|
|
$direction = $request->getSortDirection();
|
|
|
|
$changed = $executor->execute($action, new ChangeModelOrderInput($model, $direction));
|
|
|
|
if (! $changed) {
|
|
$flashMessageService->error(trans('crud.messages.order_not_changed'));
|
|
|
|
return back();
|
|
}
|
|
|
|
$flashMessageService->success(trans('crud.messages.order_changed'));
|
|
|
|
return back();
|
|
}
|
|
|
|
public function changeSelectedOrder(
|
|
Model & ModelWithOrder $model,
|
|
ChangeSelectedOrderRequest $request,
|
|
ChangeModelOrderPosition $action,
|
|
Executor $executor,
|
|
FlashMessageService $flashMessageService
|
|
): RedirectResponse {
|
|
$changed = $executor->execute(
|
|
$action,
|
|
$request->toChangeModelOrderPositionInput($model)
|
|
);
|
|
|
|
if (! $changed) {
|
|
$flashMessageService->error(trans('crud.messages.order_not_changed'));
|
|
|
|
return back();
|
|
}
|
|
|
|
$flashMessageService->success(trans('crud.messages.order_changed'));
|
|
|
|
return back();
|
|
}
|
|
}
|