F
Filament2mo ago
keiron

Make it look like I am on a different Page in the navigation

I have the page /vet-profiles (Filament/Pages/VetProfiles.php) showing in my navigation. I also have the page -/vet-profile (Filament/Pages/VetProfile.php). I do not show this page in my navigation. When I am on the Vet Profile page, I want the Vet Profiles navigation item to be highlighted as if I am on it. Is this possible?
Solution:
I got it working. On VetProfiles I added: ``` public static function getNavigationItems(array $urlParameters = []): array { return [...
Jump to solution
3 Replies
Dennis Koch
Dennis Koch2mo ago
No idea what you're doing, but you could overwrite the getNavigationItems() method on the VetProfiles page and provide your own condition:
public static function getNavigationItems(array $urlParameters = []): array
{
return NavigationItem::make()->isActiveWhen(fn () => );
}
public static function getNavigationItems(array $urlParameters = []): array
{
return NavigationItem::make()->isActiveWhen(fn () => );
}
This is the default:
NavigationItem::make(static::getNavigationLabel())
->group(static::getNavigationGroup())
->parentItem(static::getNavigationParentItem())
->icon(static::getNavigationIcon())
->activeIcon(static::getActiveNavigationIcon())
->isActiveWhen(fn (): bool => original_request()->routeIs(static::getRouteName()))
->sort(static::getNavigationSort())
->badge(static::getNavigationBadge(), color: static::getNavigationBadgeColor())
->url(static::getNavigationUrl($urlParameters)),
NavigationItem::make(static::getNavigationLabel())
->group(static::getNavigationGroup())
->parentItem(static::getNavigationParentItem())
->icon(static::getNavigationIcon())
->activeIcon(static::getActiveNavigationIcon())
->isActiveWhen(fn (): bool => original_request()->routeIs(static::getRouteName()))
->sort(static::getNavigationSort())
->badge(static::getNavigationBadge(), color: static::getNavigationBadgeColor())
->url(static::getNavigationUrl($urlParameters)),
keiron
keironOP4w ago
@Dennis Koch Thanks. When I try this I get the error: App\Filament\Pages\VetProfiles::getNavigationItems(): Return value must be of type array, Filament\Navigation\NavigationItem returned What I am trying to do is make the VetProfiles main nav item highlight as selected when I am on the VetProfile page. I have tried injecting a dom ID into the VetProfiles menu item but no luck so far.
Solution
keiron
keiron4w ago
I got it working. On VetProfiles I added:
public static function getNavigationItems(array $urlParameters = []): array
{
return [
NavigationItem::make()
->label(static::getNavigationLabel())
->group(static::getNavigationGroup())
->url(static::getUrl($urlParameters))
->visible(fn () => !request()->routeIs(VetProfile::getRouteName()))
->isActiveWhen(fn () => request()->routeIs(static::getRouteName())),
];
}
public static function getNavigationItems(array $urlParameters = []): array
{
return [
NavigationItem::make()
->label(static::getNavigationLabel())
->group(static::getNavigationGroup())
->url(static::getUrl($urlParameters))
->visible(fn () => !request()->routeIs(VetProfile::getRouteName()))
->isActiveWhen(fn () => request()->routeIs(static::getRouteName())),
];
}
On VetProfile I added:
public static function getNavigationItems(array $urlParameters = []): array
{
return [
NavigationItem::make()
->label(VetProfiles::getNavigationLabel())
->group(static::getNavigationGroup())
->url(route('filament.admin.pages.vet-profiles'))
->visible(fn () => request()->routeIs(static::getRouteName()))
->isActiveWhen(fn () => request()->routeIs(static::getRouteName())),
];
}
public static function getNavigationItems(array $urlParameters = []): array
{
return [
NavigationItem::make()
->label(VetProfiles::getNavigationLabel())
->group(static::getNavigationGroup())
->url(route('filament.admin.pages.vet-profiles'))
->visible(fn () => request()->routeIs(static::getRouteName()))
->isActiveWhen(fn () => request()->routeIs(static::getRouteName())),
];
}
Thanks for your help, much appreciated.

Did you find this page helpful?