Skip to content

Commit

Permalink
Merge pull request #1531 from moonshine-software/simulate-route
Browse files Browse the repository at this point in the history
feat: Simulate now on
  • Loading branch information
lee-to authored Feb 8, 2025
2 parents 513bfa8 + e6b26cc commit ebb7812
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 17 deletions.
9 changes: 6 additions & 3 deletions src/Laravel/src/Buttons/HasManyButton.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace MoonShine\Laravel\Buttons;

use Illuminate\Database\Eloquent\Model;
use MoonShine\Contracts\Core\CrudResourceContract;
use MoonShine\Contracts\Core\TypeCasts\DataWrapperContract;
use MoonShine\Contracts\UI\ActionButtonContract;
use MoonShine\Laravel\Enums\Ability;
Expand All @@ -27,16 +28,18 @@ public static function for(
): ActionButtonContract {
/** @var ModelResource $resource */
$resource = $field->getResource()->stopGettingItemFromUrl();
$parentResource = moonshineRequest()->getResource();
$parentPage = moonshineRequest()->getPage();
/** @var ?CrudResourceContract $parentResource */
$parentResource = $field->getNowOnResource() ?? moonshineRequest()->getResource();
$parentPage = $field->getNowOnPage() ?? moonshineRequest()->getPage();
$itemID = data_get($field->getNowOnQueryParams(), 'resourceItem', moonshineRequest()->getItemID());

if (! $resource->getFormPage()) {
return ActionButton::emptyHidden();
}

$action = static fn (?Model $data) => $parentResource->getRoute(
'has-many.form',
moonshineRequest()->getItemID(),
$itemID,
[
'pageUri' => $parentPage->getUriKey(),
'_relation' => $field->getRelationName(),
Expand Down
12 changes: 8 additions & 4 deletions src/Laravel/src/Fields/Relationships/HasMany.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
use Illuminate\Database\Eloquent\Relations\HasOneOrManyThrough;
use Illuminate\Database\Eloquent\Relations\MorphOneOrMany;
use Illuminate\Database\Eloquent\Relations\Relation;
use MoonShine\Contracts\Core\CrudResourceContract;
use MoonShine\Contracts\Core\DependencyInjection\FieldsContract;
use MoonShine\Contracts\Core\TypeCasts\DataWrapperContract;
use MoonShine\Contracts\UI\ActionButtonContract;
Expand Down Expand Up @@ -125,9 +126,10 @@ public function getRedirectAfter(Model|int|null|string $parentId): ?string

public function getDefaultRedirect(Model|int|null|string $parentId): ?string
{
return moonshineRequest()
->getResource()
?->getFormPageUrl($parentId);
/** @var ?CrudResourceContract $resource */
$resource = $this->getNowOnResource() ?? moonshineRequest()->getResource();

return $resource->getFormPageUrl($parentId);
}

/**
Expand Down Expand Up @@ -425,7 +427,9 @@ protected function getTableValue(): TableBuilder
$asyncUrl = moonshineRouter()->getEndpoints()->withRelation(
'has-many.list',
resourceItem: $this->getRelatedModel()?->getKey(),
relation: $this->getRelationName()
relation: $this->getRelationName(),
resourceUri: $this->getNowOnResource()?->getUriKey(),
pageUri: $this->getNowOnPage()?->getUriKey()
);

return TableBuilder::make(items: $items)
Expand Down
10 changes: 6 additions & 4 deletions src/Laravel/src/Fields/Relationships/HasOne.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use Illuminate\Database\Eloquent\Relations\HasOneOrMany;
use Illuminate\Database\Eloquent\Relations\HasOneOrManyThrough;
use Illuminate\Database\Eloquent\Relations\MorphOneOrMany;
use MoonShine\Contracts\Core\CrudResourceContract;
use MoonShine\Contracts\Core\DependencyInjection\FieldsContract;
use MoonShine\Contracts\UI\ComponentContract;
use MoonShine\Contracts\UI\FieldContract;
Expand Down Expand Up @@ -181,9 +182,10 @@ public function getRedirectAfter(Model|int|null|string $parentId): ?string

public function getDefaultRedirect(Model|int|null|string $parentId): ?string
{
return moonshineRequest()
->getResource()
?->getFormPageUrl($parentId);
/** @var ?CrudResourceContract $resource */
$resource = $this->getNowOnResource() ?? moonshineRequest()->getResource();

return $resource->getFormPageUrl($parentId);
}

/**
Expand Down Expand Up @@ -219,7 +221,7 @@ public function getComponent(): ComponentContract
$resource = $this->getResource()->stopGettingItemFromUrl();

/** @var ?ModelResource $parentResource */
$parentResource = moonshineRequest()->getResource();
$parentResource = $this->getNowOnResource() ?? moonshineRequest()->getResource();

$item = $this->toValue();

Expand Down
25 changes: 24 additions & 1 deletion src/Laravel/src/Pages/Page.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
use Illuminate\Contracts\Support\Renderable;
use Illuminate\View\View;
use MoonShine\Contracts\Core\CrudResourceContract;
use MoonShine\Contracts\Core\DependencyInjection\CoreContract;
use MoonShine\Contracts\Core\PageContract;
use MoonShine\Contracts\Core\ResourceContract;
use MoonShine\Core\Pages\Page as CorePage;
use MoonShine\Laravel\Contracts\WithResponseModifierContract;
use MoonShine\Laravel\DependencyInjection\MoonShine;
Expand All @@ -29,9 +32,24 @@ protected function prepareBeforeRender(): void
oops404();
}

$this->simulateRoute();
}

public function simulateRoute(?PageContract $page = null, ?ResourceContract $resource = null): static
{
request()
->route()
?->setParameter('pageUri', $this->getUriKey());
?->setParameter('pageUri', ($page ?? $this)->getUriKey());

if(!\is_null($resource)) {
$this->setResource($resource);

request()
->route()
?->setParameter('resourceUri', $resource->getUriKey());
}

return $this;
}

protected function prepareRender(Renderable|Closure|string $view): Renderable|Closure|string
Expand All @@ -43,6 +61,11 @@ protected function prepareRender(Renderable|Closure|string $view): Renderable|Cl
);
}

public function nowOn(): static
{
return $this;
}

public function isResponseModified(): bool
{
return $this->modifyResponse() instanceof Response;
Expand Down
10 changes: 7 additions & 3 deletions src/Laravel/src/Traits/Fields/BelongsToOrManyCreatable.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,14 @@ public function getCreateButton(): ?ActionButtonContract

public function getFragmentUrl(): string
{
$resource = $this->getNowOnResource() ?? moonshineRequest()->getResource();
$page = $this->getNowOnPage() ?? moonshineRequest()->getPage();
$itemID = data_get($this->getNowOnQueryParams(), 'resourceItem', moonshineRequest()->getItemID());

return $this->creatableFragmentUrl ?? toPage(
page: moonshineRequest()->getPage(),
resource: moonshineRequest()->getResource(),
params: ['resourceItem' => moonshineRequest()->getItemID()],
page: $page,
resource: $resource,
params: ['resourceItem' => $itemID],
fragment: $this->getRelationName()
);
}
Expand Down
3 changes: 2 additions & 1 deletion src/Laravel/src/Traits/Fields/WithAsyncSearch.php
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,11 @@ public function getAsyncSearchUrl(): string
}

$resourceUri = $this->getNowOnResource()?->getUriKey() ?? moonshineRequest()->getResourceUri();
$itemID = data_get($this->getNowOnQueryParams(), 'resourceItem', moonshineRequest()->getItemID());

return moonshineRouter()->getEndpoints()->withRelation(
'async-search',
resourceItem: moonshineRequest()->getItemID(),
resourceItem: $itemID,
relation: $this->getRelationName(),
resourceUri: $resourceUri,
parentField: $parentName,
Expand Down
4 changes: 3 additions & 1 deletion src/Laravel/src/Traits/Fields/WithRelatedLink.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,9 @@ public function getRelatedLinkRelation(): string
return $this->parentRelationName;
}

$relationName = str((string) moonshineRequest()->getResourceUri())
$resource = $this->getNowOnResource() ?? moonshineRequest()->getResource();

$relationName = str((string) $resource?->getUriKey())
->remove('-resource')
->replace('-', '_');

Expand Down

0 comments on commit ebb7812

Please sign in to comment.