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';
    }
]