From 5b1ded2cb549cbbb1e9476b7eb535dfc2d55f580 Mon Sep 17 00:00:00 2001 From: Kilian Trunk Date: Sun, 17 Aug 2025 10:19:02 +0200 Subject: [PATCH 1/6] feat(notifications): implement tenant-scoped broadcast notifications --- src/EclipseServiceProvider.php | 6 ++++++ src/Models/User.php | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/EclipseServiceProvider.php b/src/EclipseServiceProvider.php index b9ac4f4..af4f4a7 100644 --- a/src/EclipseServiceProvider.php +++ b/src/EclipseServiceProvider.php @@ -22,6 +22,7 @@ use Eclipse\Core\Providers\TelescopeServiceProvider; use Eclipse\Core\Services\Registry; use Filament\Resources\Resource; +use Filament\Support\Facades\FilamentAsset; use Filament\Tables\Columns\Column; use Illuminate\Auth\Events\Login; use Illuminate\Database\Eloquent\Model; @@ -148,6 +149,11 @@ public function boot(): void ->labels($availableLocales->pluck('native_name', 'id')->toArray()); }); + FilamentAsset::registerScriptData([ + 'user' => ['id' => auth()->id()], + 'tenant' => ['id' => Filament::getTenant()?->getKey()], + ]); + // Register health checks Health::checks([ OptimizedAppCheck::new(), diff --git a/src/Models/User.php b/src/Models/User.php index aa067f6..d519e75 100644 --- a/src/Models/User.php +++ b/src/Models/User.php @@ -183,4 +183,18 @@ public function getSettings(string $settingsClass = UserSettings::class): Settin { return $settingsClass::forUser($this->id); } + + /** + * The channels the user receives notification broadcasts on. + */ + public function receivesBroadcastNotificationsOn(): string + { + if ($host = request()?->getHost()) { + $tenantId = Site::query()->where('domain', $host)->value('id'); + + return "Eclipse.Core.Models.User.{$this->id}.tenant.{$tenantId}"; + } + + return "Eclipse.Core.Models.User.{$this->id}"; + } } From 1ec69d12b73a593ba2ee39afb6f4ba624ffd6af3 Mon Sep 17 00:00:00 2001 From: Kilian Trunk Date: Sun, 17 Aug 2025 10:20:03 +0200 Subject: [PATCH 2/6] chore(notifications): add import --- src/EclipseServiceProvider.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/EclipseServiceProvider.php b/src/EclipseServiceProvider.php index af4f4a7..4c8fbb8 100644 --- a/src/EclipseServiceProvider.php +++ b/src/EclipseServiceProvider.php @@ -21,6 +21,7 @@ use Eclipse\Core\Providers\HorizonServiceProvider; use Eclipse\Core\Providers\TelescopeServiceProvider; use Eclipse\Core\Services\Registry; +use Filament\Facades\Filament; use Filament\Resources\Resource; use Filament\Support\Facades\FilamentAsset; use Filament\Tables\Columns\Column; From a5a14379a93158babd06538f739379727c26524f Mon Sep 17 00:00:00 2001 From: Kilian Trunk Date: Sun, 17 Aug 2025 10:20:54 +0200 Subject: [PATCH 3/6] chore(notifications): add comment --- src/EclipseServiceProvider.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/EclipseServiceProvider.php b/src/EclipseServiceProvider.php index 4c8fbb8..f2b52cb 100644 --- a/src/EclipseServiceProvider.php +++ b/src/EclipseServiceProvider.php @@ -150,6 +150,7 @@ public function boot(): void ->labels($availableLocales->pluck('native_name', 'id')->toArray()); }); + // Register tenant and user IDs in Filament script data FilamentAsset::registerScriptData([ 'user' => ['id' => auth()->id()], 'tenant' => ['id' => Filament::getTenant()?->getKey()], From 441cf71440ae969473a5075c599b4c7d109a3b8e Mon Sep 17 00:00:00 2001 From: Kilian Trunk Date: Mon, 18 Aug 2025 16:16:11 +0200 Subject: [PATCH 4/6] fix: add uncommited file --- src/Services/Registry.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Services/Registry.php b/src/Services/Registry.php index 61dada0..5070a65 100644 --- a/src/Services/Registry.php +++ b/src/Services/Registry.php @@ -32,7 +32,7 @@ public static function setSite(int|Site $site): void Context::add('site', self::getSite()->id); - setPermissionsTeamId($site->id); + setPermissionsTeamId(self::getSite()->id); } /** From 3a562a2751b89513475427117fe72bb780850d28 Mon Sep 17 00:00:00 2001 From: Kilian Trunk Date: Thu, 21 Aug 2025 16:34:18 +0200 Subject: [PATCH 5/6] refactor: move tenant related code into core package --- .../tenant-scoped-notifications.blade.php | 44 +++++++++++++++++++ src/Providers/AdminPanelProvider.php | 1 + 2 files changed, 45 insertions(+) create mode 100644 resources/views/filament/partials/tenant-scoped-notifications.blade.php diff --git a/resources/views/filament/partials/tenant-scoped-notifications.blade.php b/resources/views/filament/partials/tenant-scoped-notifications.blade.php new file mode 100644 index 0000000..d350c93 --- /dev/null +++ b/resources/views/filament/partials/tenant-scoped-notifications.blade.php @@ -0,0 +1,44 @@ + + + diff --git a/src/Providers/AdminPanelProvider.php b/src/Providers/AdminPanelProvider.php index 991d04c..26a8643 100644 --- a/src/Providers/AdminPanelProvider.php +++ b/src/Providers/AdminPanelProvider.php @@ -219,6 +219,7 @@ public function register(): void parent::register(); FilamentView::registerRenderHook('panels::body.end', fn (): string => Blade::render("@vite('resources/js/app.js')")); + FilamentView::registerRenderHook('panels::body.end', fn (): string => view('eclipse::filament.partials.tenant-scoped-notifications')->render()); } /** From a6f15e0c33c11bdefee66502f7c420928400940a Mon Sep 17 00:00:00 2001 From: Kilian Trunk Date: Thu, 21 Aug 2025 16:36:23 +0200 Subject: [PATCH 6/6] refactor: refactor User model --- src/Models/User.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/Models/User.php b/src/Models/User.php index d519e75..6c85afb 100644 --- a/src/Models/User.php +++ b/src/Models/User.php @@ -189,12 +189,9 @@ public function getSettings(string $settingsClass = UserSettings::class): Settin */ public function receivesBroadcastNotificationsOn(): string { - if ($host = request()?->getHost()) { - $tenantId = Site::query()->where('domain', $host)->value('id'); + $host = request()?->getHost(); + $tenantId = Site::query()->where('domain', $host)->value('id'); - return "Eclipse.Core.Models.User.{$this->id}.tenant.{$tenantId}"; - } - - return "Eclipse.Core.Models.User.{$this->id}"; + return "Eclipse.Core.Models.User.{$this->id}.tenant.{$tenantId}"; } }