Skip to content

Configurable Pages and Resources ​

The Module Manager provides a flexible configuration system for pages, resources, and clusters through configuration files, allowing you to easily customize the Filament interface.

Configuration Capabilities ​

You can configure navigation items, sorting, icons, and other properties via:

  • Module configuration file
  • Module Manager configuration file

These configurations are applied automatically without modifying the original classes.

How It Works ​

The Module Manager provides special classes that override standard Filament methods to:

  • Apply configurations from module config files
  • Apply configurations from Module Manager config files
  • Fall back to original class values if no custom configuration exists

This system allows you to change the appearance and behavior of Filament components without modifying the original code.

Usage ​

1. Extending Configurable Classes ​

Use Module Manager's configurable classes instead of standard Filament classes:

php
// For custom pages
use ModuleManager\ModuleManager\Filament\Panels\ConfigurablePage;

// For resources
use ModuleManager\ModuleManager\Filament\Panels\ConfigurableResource;

// For clusters
use ModuleManager\ModuleManager\Filament\Panels\ConfigurableCluster;

// For resource pages
use ModuleManager\ModuleManager\Filament\Panels\ConfigurableResourcePage;

class ReportsPage extends ConfigurablePage
{
    // Add module name for configuration lookup
    protected static ?string $moduleName = 'reports';

    // The rest of your normal implementation...
}

2. Module Configuration ​

Configure your page or resource in the module's configuration file:

php
<?php
// config/reports.php
return [
    'name' => 'Reports',

    /** @see Modules\Reports\Filament\Pages\ReportsPage */
    'reports_page' => [
        'navigationIcon' => 'heroicon-o-document-chart-bar',
        'navigationLabel' => 'Reports',
        'navigationGroup' => 'Analytics',
        'navigationSort' => 5,
        'title' => 'System Reports',
    ]
];

3. Project-Level Configuration Override ​

Override module configurations in the Module Manager's configuration file:

php
// config/module-manager.php
return [
    // ...other configurations...

    'modules' => [
        // Use the lowercase module configuration key
        'reports' => [
            'reports_page' => [
                'navigationIcon' => 'heroicon-o-chart-pie',
                'navigationLabel' => 'Reports Dashboard',
                'title' => 'Central Reports Dashboard',
            ]
        ]
    ],
];

4. Configuration Precedence ​

Configuration resolution follows this order:

  1. Project-level Module Manager configuration
  2. Module-specific configuration file
  3. Original Filament class defaults

Available Configuration Options ​

The configurable classes support the following configuration options:

For ConfigurablePage & ConfigurableResourcePage ​

php
'page_class_name' => [
    'navigationIcon' => 'heroicon-o-home',           // Navigation icon
    'activeNavigationIcon' => 'heroicon-s-home',     // Icon when active
    'navigationGroup' => 'Content',                  // Navigation group
    'navigationLabel' => 'My Page',                  // Navigation label
    'navigationSort' => 10,                          // Navigation order
    'shouldRegisterNavigation' => true,              // Whether to show in menu
    'title' => 'Page Title',                         // Page title
    'heading' => 'Page Heading',                     // Page heading
    'breadcrumb' => 'My Page',                       // Breadcrumb text
]

For ConfigurableResource ​

php
'resource_class_name' => [
    'navigationIcon' => 'heroicon-o-users',          // Navigation icon
    'activeNavigationIcon' => 'heroicon-s-users',    // Icon when active
    'navigationGroup' => 'Users',                    // Navigation group
    'navigationLabel' => 'Team Members',             // Navigation label
    'modelLabel' => 'Team Member',                   // Singular model label
    'navigationSort' => 5,                           // Navigation order
    'cluster' => Settings::class,                         // Cluster name for grouping
]

For ConfigurableCluster ​

php
'cluster_class_name' => [
    'navigationIcon' => 'heroicon-o-cog',            // Navigation icon
    'navigationGroup' => 'Administration',           // Navigation group
    'navigationLabel' => 'Settings',                 // Navigation label
    'navigationSort' => 100,                         // Navigation order
    'clusterBreadcrumb' => 'Settings',               // Cluster breadcrumb text
]

Dynamic Values ​

You can also use closures for dynamic values:

php
'reports_page' => [
    'navigationLabel' => function() {
        return auth()->user()->can('view_reports')
            ? 'Full Reports'
            : 'Basic Reports';
    },
    'navigationIcon' => function() {
        return tenant()->hasFeature('advanced_reports')
            ? 'heroicon-o-presentation-chart-line'
            : 'heroicon-o-chart-bar';
    }
]