Skip to content

Commit 9b37a30

Browse files
committed
fix: enhance action URL handling in relation managers
1 parent a5bafb4 commit 9b37a30

File tree

2 files changed

+51
-40
lines changed

2 files changed

+51
-40
lines changed

src/Base/Filament/RelationManagers/BaseChildrenRelationManager.php

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
namespace SolutionForest\InspireCms\Base\Filament\RelationManagers;
44

5+
use Filament\Actions\Action;
56
use Filament\Actions\CreateAction;
67
use Filament\Actions\EditAction;
8+
use Filament\Actions\ViewAction;
79
use Filament\Resources\RelationManagers\RelationManager;
810
use Filament\Schemas\Schema;
911
use Filament\Tables\Table;
@@ -32,7 +34,9 @@ public function table(Table $table): Table
3234
->pluralModelLabel(lcfirst(__('inspirecms::inspirecms.children.plural')))
3335
->emptyStateHeading(null)
3436
->headerActions([
35-
CreateAction::make(),
37+
CreateAction::make()
38+
->slideOver()
39+
->modalWidth('7xl'),
3640
]);
3741
}
3842

@@ -41,44 +45,55 @@ public static function getTitle(Model $ownerRecord, string $pageClass): string
4145
return __('inspirecms::inspirecms.children.plural');
4246
}
4347

44-
protected function configureCreateAction(CreateAction $action): void
48+
public function getDefaultActionUrl(Action $action): ?string
4549
{
46-
parent::configureCreateAction($action);
50+
$relatedResource = static::getRelatedResource() ?? $this->getPageClass()::getResource();
4751

48-
if ($this->isRedirectToCreatePage()) {
52+
if (! $relatedResource) {
53+
return null;
54+
}
4955

50-
$resource = $this->getPageClass()::getResource();
56+
if (
57+
($action instanceof CreateAction)
58+
) {
5159

52-
$parameters = ['parent' => $this->getOwnerRecord()->getKey()];
60+
if ($this->isRedirectToCreatePage()) {
5361

54-
$url = FilamentResourceHelper::attemptToGetUrl($resource, ['create'], $parameters, false);
62+
$parameters = ['parent' => $this->getOwnerRecord()->getKey()];
5563

56-
if ($url) {
57-
$action->url($url);
64+
return FilamentResourceHelper::attemptToGetUrl($relatedResource, ['create'], $parameters, false);
5865
}
5966

67+
if ($relatedResource::hasPage('create')) {
68+
return $relatedResource::getUrl('create', shouldGuessMissingParameters: true);
69+
}
6070
}
6171

62-
$action
63-
->slideOver()
64-
->modalWidth('7xl');
65-
}
66-
67-
protected function configureEditAction(EditAction $action): void
68-
{
69-
parent::configureEditAction($action);
72+
if ($action instanceof EditAction) {
73+
74+
if ($this->isRedirectToDetailPage()) {
75+
return FilamentResourceHelper::attemptToGetUrl($relatedResource, 'edit', ['record' => $action->getRecord()], false);
76+
} elseif ($relatedResource::hasPage('edit')) {
77+
return $relatedResource::getUrl('edit', ['record' => $action->getRecord()], shouldGuessMissingParameters: true);
78+
}
7079

71-
if ($this->isRedirectToDetailPage()) {
72-
$resource = $this->getPageClass()::getResource();
80+
}
7381

74-
$action->url(
75-
fn ($record) => FilamentResourceHelper::attemptToGetUrl($resource, 'edit', ['record' => $record], false)
76-
);
82+
// if (
83+
// ($action instanceof EditAction) &&
84+
// ($relatedResource::hasPage('edit'))
85+
// ) {
86+
// return $relatedResource::getUrl('edit', ['record' => $action->getRecord()], shouldGuessMissingParameters: true);
87+
// }
88+
89+
if (
90+
($action instanceof ViewAction) &&
91+
($relatedResource::hasPage('view'))
92+
) {
93+
return $relatedResource::getUrl('view', ['record' => $action->getRecord()], shouldGuessMissingParameters: true);
7794
}
7895

79-
$action
80-
->slideOver()
81-
->modalWidth('7xl');
96+
return null;
8297
}
8398

8499
protected function isRedirectToDetailPage(): bool

src/Filament/Resources/ContentResource/RelationManagers/ChildrenRelationManager.php

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace SolutionForest\InspireCms\Filament\Resources\ContentResource\RelationManagers;
44

5+
use Filament\Actions\Action;
56
use Filament\Actions\EditAction;
67
use Filament\Actions\ViewAction;
78
use Filament\Tables\Table;
@@ -69,26 +70,21 @@ public function getParentKey(): string | int | null
6970
return $this->getOwnerRecord()->parent_id;
7071
}
7172

72-
protected function configureEditAction(EditAction $action): void
73+
public function getDefaultActionUrl(Action $action): ?string
7374
{
74-
parent::configureEditAction($action);
75-
75+
$base = parent::getDefaultActionUrl($action);
76+
7677
$resource = $this->getPageClass()::getResource();
7778

78-
$action->url(
79-
fn ($record) => FilamentResourceHelper::attemptToGetUrl($resource, 'edit', ['record' => $record, ...$this->getRedirectUrlParameters()], false)
80-
);
81-
}
82-
83-
protected function configureViewAction(ViewAction $action): void
84-
{
85-
parent::configureViewAction($action);
79+
if ($action instanceof EditAction) {
80+
return FilamentResourceHelper::attemptToGetUrl($resource, 'edit', ['record' => $action->getRecord(), ...$this->getRedirectUrlParameters()], false);
81+
}
8682

87-
$resource = $this->getPageClass()::getResource();
83+
if ($action instanceof ViewAction) {
84+
return FilamentResourceHelper::attemptToGetUrl($resource, 'view', ['record' => $action->getRecord(), ...$this->getRedirectUrlParameters()], false);
85+
}
8886

89-
$action->url(
90-
fn ($record) => FilamentResourceHelper::attemptToGetUrl($resource, 'view', ['record' => $record, ...$this->getRedirectUrlParameters()], false)
91-
);
87+
return $base;
9288
}
9389

9490
protected function getRedirectUrlParameters(): array

0 commit comments

Comments
 (0)