jeffersongoncalves/filament-refresh-sidebar
composer require jeffersongoncalves/filament-refresh-sidebar
php artisan vendor:publish --provider="JeffersonGoncalves\FilamentRefreshSidebar\FilamentRefreshSidebarServiceProvider"
AppServiceProvider or Filament panel configuration:
use JeffersonGoncalves\FilamentRefreshSidebar\FilamentRefreshSidebarPlugin;
FilamentRefreshSidebarPlugin::make()
->register();
Trigger a sidebar refresh when a model is updated or deleted. For example, in a resource controller:
use JeffersonGoncalves\FilamentRefreshSidebar\Facades\FilamentRefreshSidebar;
public function afterSave(Model $record): void
{
FilamentRefreshSidebar::refresh();
}
Dynamic Badges: Use the package to refresh badges tied to real-time data (e.g., unread notifications, pending tasks).
FilamentRefreshSidebar::refreshBadge('notifications');
Conditional Refresh: Refresh only specific sidebar items based on logic:
if ($this->isAdmin()) {
FilamentRefreshSidebar::refreshItem('admin-dashboard');
}
Event-Based Refresh:
Bind to Laravel events (e.g., ModelSaved, ModelDeleted) in an event listener:
public function handle(ModelSaved $event)
{
FilamentRefreshSidebar::refresh();
}
Custom Polling Interval:
Configure refresh intervals in config/filament-refresh-sidebar.php:
'polling_interval' => 30, // seconds
afterSave, afterDelete, or afterRestore hooks in resource controllers.updated() or dehydrated() methods:
public function dehydrated(): array
{
FilamentRefreshSidebar::refresh();
return parent::dehydrated();
}
Route::post('/refresh-sidebar', [FilamentRefreshSidebar::class, 'refresh']);
Race Conditions:
Avoid calling refresh() too frequently in rapid successions (e.g., bulk actions). Use a queue or debounce logic:
if (!FilamentRefreshSidebar::isRefreshing()) {
FilamentRefreshSidebar::refresh();
}
Caching Issues: If using Filament’s cache, clear it after refreshes to avoid stale data:
Filament::cache()->forget('sidebar-items');
Overhead: Excessive refreshes can degrade performance. Monitor with:
FilamentRefreshSidebar::getRefreshCount(); // Debugging
'debug' => env('FILAMENT_REFRESH_SIDEBAR_DEBUG', false),
php artisan event:list
Custom Refresh Logic:
Extend the RefreshSidebar class to add custom logic:
class CustomRefreshSidebar extends RefreshSidebar
{
public function refreshAdminItems()
{
// Custom logic
}
}
WebSocket Integration: Use Laravel Echo/Pusher to trigger refreshes from frontend events:
Echo.channel('sidebar-updates')
.listen('SidebarUpdated', () => {
window.FilamentRefreshSidebar.refresh();
});
Conditional Refreshes:
Override the shouldRefresh() method to add custom conditions:
FilamentRefreshSidebar::shouldRefresh(function () {
return Auth::user()->hasRole('admin');
});
How can I help you explore Laravel packages today?