Installation (updated for v0.8.0 compatibility):
composer require zedmagdy/filament-chat:^0.8.0
php artisan vendor:publish --tag="filament-chat-migrations"
php artisan migrate
config/filament-chat.php exists (published automatically).First Use Case:
app/Providers/Filament/AdminPanelProvider.php:
public function panel(Panel $panel): Panel
{
return $panel
->plugins([
\ZedMagdy\FilamentChat\FilamentChatPlugin::make(),
]);
}
Quick Configuration:
all_messages):
'default_source' => 'all_messages', // New option for global chat
ZedMagdy\FilamentChat\Contracts\ChatSource.Chat Sources (updated):
all_messages source for global conversations:
'sources' => [
'users' => \App\Models\User::class,
'teams' => \App\Models\Team::class,
'all_messages' => \ZedMagdy\FilamentChat\Sources\AllMessagesSource::class, // New
],
ChatSource trait for custom models:
use ZedMagdy\FilamentChat\Contracts\ChatSource;
class User extends Authenticatable implements ChatSource
{
use \ZedMagdy\FilamentChat\Traits\ChatSource;
}
Media-Only Messages (new):
$message = \ZedMagdy\FilamentChat\Models\Message::create([
'conversation_id' => $conversation->id,
'sender_id' => auth()->id(),
'sender_type' => 'users',
'content' => null, // Empty content for media-only
]);
$message->addMedia($file)->toMediaCollection('attachments');
Conversations (unchanged):
$conversation = \ZedMagdy\FilamentChat\Models\Conversation::createGroup([
'name' => 'Project Team',
'source_type' => 'teams',
'source_id' => 1,
]);
Real-Time Updates (unchanged):
config/filament-chat.php:
'broadcasting' => [
'driver' => 'reverb',
'options' => [
'key' => env('PUSHER_APP_KEY'),
],
],
Search and Filtering (updated):
all_messages source:
$conversations = \ZedMagdy\FilamentChat\Models\Conversation::search('project')
->whereNot('source_type', 'all_messages') // Exclude global if needed
->get();
public static function getTabs(PostResource $resource): array
{
return [
'chat' => ChatTab::make(),
];
}
Route::get('/api/chat/conversations', [ChatController::class, 'index']);
resources/views/vendor/filament-chat/ (unchanged).Media Library Compatibility (updated):
spatie/laravel-media-library-plugin (not standalone).composer require spatie/laravel-media-library-plugin
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="medialibrary-config"
php artisan migrate
Media-Only Messages (new):
content is null for media-only messages (not empty string).storage/logs/laravel.log for media upload validation errors.Broadcasting Issues (unchanged):
APP_URL for Reverb/Pusher webhook validation.Database Indexes (unchanged):
ALTER TABLE conversations ADD INDEX source_type_source_id_idx (source_type, source_id);
Real-Time Polling (unchanged):
'polling' => [
'enabled' => false,
],
Log Events (unchanged): Enable debug mode:
'debug' => env('APP_DEBUG', false),
Common Errors (updated):
Class not found: Ensure spatie/laravel-media-library-plugin is installed.public_path('storage') is writable.Broadcast Debugging (unchanged): Test events in Tinker:
php artisan tinker
>>> event(new \ZedMagdy\FilamentChat\Events\MessageSent($message));
Custom Message Types (updated): Handle media-only messages in events:
\ZedMagdy\FilamentChat\Events\MessageSent::listen(function ($event) {
if (empty($event->message->content)) {
// Media-only message logic
}
});
Chat Widget (unchanged): Embed chat in non-Filament views:
ChatWidget::make()
->source('users')
->conversation($conversation)
->render();
API Extensions (unchanged): Create custom routes for media-only messages:
Route::post('/api/chat/media-messages', [ChatController::class, 'storeMedia']);
Theming (unchanged):
Override Tailwind classes in resources/css/filament-chat.css.
Localization (unchanged): Publish language files:
php artisan vendor:publish --tag="filament-chat-lang"
How can I help you explore Laravel packages today?