File: /home/posscale/public_html/printmanager/vendor/filament/filament/src/Pages/Page.php
<?php
namespace Filament\Pages;
use Filament\Clusters\Cluster;
use Filament\Facades\Filament;
use Filament\Navigation\NavigationItem;
use Filament\Panel;
use Filament\Widgets\Widget;
use Filament\Widgets\WidgetConfiguration;
use Illuminate\Contracts\Support\Htmlable;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Route;
abstract class Page extends BasePage
{
use Concerns\CanAuthorizeAccess;
use Concerns\HasRoutes;
use Concerns\HasSubNavigation;
use Concerns\InteractsWithHeaderActions;
protected static string $layout;
/** @var class-string<Cluster> | null */
protected static ?string $cluster = null;
protected static bool $isDiscovered = true;
protected static ?string $navigationGroup = null;
protected static ?string $navigationBadgeTooltip = null;
protected static ?string $navigationParentItem = null;
protected static ?string $navigationIcon = null;
protected static ?string $activeNavigationIcon = null;
protected static ?string $navigationLabel = null;
protected static ?int $navigationSort = null;
protected static bool $shouldRegisterNavigation = true;
public function getLayout(): string
{
return static::$layout ?? 'filament-panels::components.layout.index';
}
/**
* @param array<mixed> $parameters
*/
public static function getUrl(array $parameters = [], bool $isAbsolute = true, ?string $panel = null, ?Model $tenant = null): string
{
if (blank($panel) || Filament::getPanel($panel)->hasTenancy()) {
$parameters['tenant'] ??= ($tenant ?? Filament::getTenant());
}
return route(static::getRouteName($panel), $parameters, $isAbsolute);
}
public static function registerRoutes(Panel $panel): void
{
if (filled(static::getCluster())) {
Route::name(static::prependClusterRouteBaseName('pages.'))
->prefix(static::prependClusterSlug(''))
->group(fn () => static::routes($panel));
return;
}
Route::name('pages.')->group(fn () => static::routes($panel));
}
public static function registerNavigationItems(): void
{
if (filled(static::getCluster())) {
return;
}
if (! static::shouldRegisterNavigation()) {
return;
}
if (! static::canAccess()) {
return;
}
Filament::getCurrentPanel()
->navigationItems(static::getNavigationItems());
}
/**
* @return array<NavigationItem>
*/
public static function getNavigationItems(): array
{
return [
NavigationItem::make(static::getNavigationLabel())
->group(static::getNavigationGroup())
->parentItem(static::getNavigationParentItem())
->icon(static::getNavigationIcon())
->activeIcon(static::getActiveNavigationIcon())
->isActiveWhen(fn (): bool => request()->routeIs(static::getNavigationItemActiveRoutePattern()))
->sort(static::getNavigationSort())
->badge(static::getNavigationBadge(), color: static::getNavigationBadgeColor())
->badgeTooltip(static::getNavigationBadgeTooltip())
->url(static::getNavigationUrl()),
];
}
public static function getNavigationItemActiveRoutePattern(): string
{
return static::getRouteName();
}
public static function getRouteName(?string $panel = null): string
{
$panel = $panel ? Filament::getPanel($panel) : Filament::getCurrentPanel();
$routeName = 'pages.' . static::getRelativeRouteName();
$routeName = static::prependClusterRouteBaseName($routeName);
return $panel->generateRouteName($routeName);
}
/**
* @return array<string>
*/
public function getBreadcrumbs(): array
{
if (filled($cluster = static::getCluster())) {
return $cluster::unshiftClusterBreadcrumbs([]);
}
return [];
}
public static function getNavigationGroup(): ?string
{
return static::$navigationGroup;
}
public static function getNavigationParentItem(): ?string
{
return static::$navigationParentItem;
}
public static function getActiveNavigationIcon(): string | Htmlable | null
{
return static::$activeNavigationIcon ?? static::getNavigationIcon();
}
public static function getNavigationIcon(): string | Htmlable | null
{
return static::$navigationIcon;
}
public static function getNavigationLabel(): string
{
return static::$navigationLabel ?? static::$title ?? str(class_basename(static::class))
->kebab()
->replace('-', ' ')
->title();
}
public static function getNavigationBadge(): ?string
{
return null;
}
/**
* @return string | array{50: string, 100: string, 200: string, 300: string, 400: string, 500: string, 600: string, 700: string, 800: string, 900: string, 950: string} | null
*/
public static function getNavigationBadgeColor(): string | array | null
{
return null;
}
public static function getNavigationBadgeTooltip(): ?string
{
return static::$navigationBadgeTooltip;
}
public static function getNavigationSort(): ?int
{
return static::$navigationSort;
}
public static function getNavigationUrl(): string
{
return static::getUrl();
}
public function getFooter(): ?View
{
return null;
}
public function getHeader(): ?View
{
return null;
}
/**
* @return array<class-string<Widget> | WidgetConfiguration>
*/
protected function getHeaderWidgets(): array
{
return [];
}
/**
* @return array<class-string<Widget> | WidgetConfiguration>
*/
public function getVisibleHeaderWidgets(): array
{
return $this->filterVisibleWidgets($this->getHeaderWidgets());
}
/**
* @return int | string | array<string, int | string | null>
*/
public function getHeaderWidgetsColumns(): int | string | array
{
return 2;
}
/**
* @return array<class-string<Widget> | WidgetConfiguration>
*/
protected function getFooterWidgets(): array
{
return [];
}
/**
* @return array<class-string<Widget> | WidgetConfiguration>
*/
public function getVisibleFooterWidgets(): array
{
return $this->filterVisibleWidgets($this->getFooterWidgets());
}
/**
* @param array<class-string<Widget> | WidgetConfiguration> $widgets
* @return array<class-string<Widget> | WidgetConfiguration>
*/
protected function filterVisibleWidgets(array $widgets): array
{
return array_filter($widgets, fn (string | WidgetConfiguration $widget): bool => $this->normalizeWidgetClass($widget)::canView());
}
/**
* @param class-string<Widget> | WidgetConfiguration $widget
* @return class-string<Widget>
*/
protected function normalizeWidgetClass(string | WidgetConfiguration $widget): string
{
if ($widget instanceof WidgetConfiguration) {
return $widget->widget;
}
return $widget;
}
/**
* @return int | string | array<string, int | string | null>
*/
public function getFooterWidgetsColumns(): int | string | array
{
return 2;
}
/**
* @return array<string, mixed>
*/
public function getWidgetData(): array
{
return [];
}
public static function shouldRegisterNavigation(): bool
{
return static::$shouldRegisterNavigation;
}
public static function isDiscovered(): bool
{
return static::$isDiscovered;
}
/**
* @return class-string<Cluster> | null
*/
public static function getCluster(): ?string
{
return static::$cluster;
}
public static function prependClusterSlug(string $slug): string
{
if (filled($cluster = static::getCluster())) {
return $cluster::prependClusterSlug($slug);
}
return $slug;
}
public static function prependClusterRouteBaseName(string $name): string
{
if (filled($cluster = static::getCluster())) {
return $cluster::prependClusterRouteBaseName($name);
}
return $name;
}
}