diff --git a/config/frontend-panel.php b/config/frontend-panel.php
index 3ac44ad..b5e2ce1 100644
--- a/config/frontend-panel.php
+++ b/config/frontend-panel.php
@@ -1,5 +1,15 @@
(bool) env('FRONTEND_GUEST_ACCESS', true),
];
diff --git a/resources/views/filament/components/theme-switcher.blade.php b/resources/views/filament/components/theme-switcher.blade.php
new file mode 100644
index 0000000..e665e32
--- /dev/null
+++ b/resources/views/filament/components/theme-switcher.blade.php
@@ -0,0 +1,25 @@
+@php
+ $panel = filament()->getCurrentPanel();
+ $panelID = $panel ? $panel->getId() : 'null';
+@endphp
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/views/filament/pages/home.blade.php b/resources/views/filament/pages/home.blade.php
new file mode 100644
index 0000000..431a83b
--- /dev/null
+++ b/resources/views/filament/pages/home.blade.php
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/Filament/Pages/Home.php b/src/Filament/Pages/Home.php
new file mode 100644
index 0000000..0fe22fa
--- /dev/null
+++ b/src/Filament/Pages/Home.php
@@ -0,0 +1,24 @@
+name(static::$name)
->hasConfigFile()
- ->hasTranslations();
+ ->hasTranslations()
+ ->hasViews();
}
public function register(): self
diff --git a/src/Providers/FrontendPanelProvider.php b/src/Providers/FrontendPanelProvider.php
index 5c6d649..3915c12 100644
--- a/src/Providers/FrontendPanelProvider.php
+++ b/src/Providers/FrontendPanelProvider.php
@@ -5,6 +5,7 @@
use Eclipse\Common\Providers\GlobalSearchProvider;
use Eclipse\Core\Models\Site;
use Eclipse\Core\Services\Registry;
+use Eclipse\Frontend\Filament\Pages as CustomPages;
use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\AuthenticateSession;
use Filament\Http\Middleware\DisableBladeIconComponents;
@@ -15,6 +16,7 @@
use Filament\Support\Colors\Color;
use Filament\Support\Enums\Platform;
use Filament\Support\Facades\FilamentView;
+use Filament\View\PanelsRenderHook;
use Filament\Widgets;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Cookie\Middleware\EncryptCookies;
@@ -27,44 +29,23 @@
class FrontendPanelProvider extends PanelProvider
{
+ private const PANEL_ID = 'frontend';
+
public function panel(Panel $panel): Panel
{
- return $panel
- ->id('frontend')
+ $panel = $panel
+ ->id(self::PANEL_ID)
->path('')
- ->login()
- ->passwordReset()
- ->emailVerification()
->colors([
'primary' => Color::Cyan,
'gray' => Color::Slate,
])
+ ->authGuard(self::PANEL_ID)
->topNavigation()
->brandName(fn () => Registry::getSite()->name)
->discoverResources(in: app_path('Filament/Frontend/Resources'), for: 'App\\Filament\\Frontend\\Resources')
->discoverPages(in: app_path('Filament/Frontend/Pages'), for: 'App\\Filament\\Frontend\\Pages')
- ->pages([
- Pages\Dashboard::class,
- ])
->discoverWidgets(in: app_path('Filament/Frontend/Widgets'), for: 'App\\Filament\\Frontend\\Widgets')
- ->widgets([
- Widgets\AccountWidget::class,
- Widgets\FilamentInfoWidget::class,
- ])
- ->middleware([
- EncryptCookies::class,
- AddQueuedCookiesToResponse::class,
- StartSession::class,
- AuthenticateSession::class,
- ShareErrorsFromSession::class,
- VerifyCsrfToken::class,
- SubstituteBindings::class,
- DisableBladeIconComponents::class,
- DispatchServingFilamentEvent::class,
- ])
- ->authMiddleware([
- Authenticate::class,
- ])
->globalSearch(GlobalSearchProvider::class)
->globalSearchKeyBindings(['ctrl+k', 'command+k'])
->globalSearchFieldSuffix(fn (): ?string => match (Platform::detect()) {
@@ -72,18 +53,87 @@ public function panel(Panel $panel): Panel
Platform::Mac => '⌘K',
default => null,
})
- ->tenant(Site::class, slugAttribute: 'domain')
- ->tenantDomain('{tenant:domain}')
- ->tenantMenu(false)
->plugins([
EnvironmentIndicatorPlugin::make(),
]);
+
+ $middleware = [
+ EncryptCookies::class,
+ AddQueuedCookiesToResponse::class,
+ StartSession::class,
+ ShareErrorsFromSession::class,
+ VerifyCsrfToken::class,
+ SubstituteBindings::class,
+ DisableBladeIconComponents::class,
+ DispatchServingFilamentEvent::class,
+ ];
+
+ $middleware = match (self::isGuestPanel()) {
+ true => $middleware,
+ false => array_merge($middleware, [
+ AuthenticateSession::class,
+ ])
+ };
+
+ match (self::isGuestPanel()) {
+ true => $panel
+ ->pages([
+ CustomPages\Home::class,
+ ])
+ ->widgets([])
+ ->middleware($middleware)
+ ->renderHook(
+ PanelsRenderHook::TOPBAR_END,
+ fn () => view('frontend-panel::filament.components.theme-switcher')
+ ),
+ false => $panel->login()
+ ->passwordReset()
+ ->emailVerification()
+ ->pages([
+ Pages\Dashboard::class,
+ ])
+ ->widgets([
+ Widgets\AccountWidget::class,
+ Widgets\FilamentInfoWidget::class,
+ ])
+ ->middleware($middleware)
+ ->authMiddleware([
+ Authenticate::class,
+ ])
+ ->tenant(Site::class, slugAttribute: 'domain')
+ ->tenantDomain('{tenant:domain}')
+ ->tenantMenu(false)
+ ->renderHook(
+ PanelsRenderHook::HEAD_START,
+ fn (): string => self::getThemeIsolationScript(self::PANEL_ID)
+ )
+ };
+
+ return $panel;
}
public function register(): void
{
parent::register();
-
FilamentView::registerRenderHook('panels::body.end', fn (): string => Blade::render("@vite('resources/js/app.js')"));
}
+
+ private static function getThemeIsolationScript(string $panelId): string
+ {
+ return "";
+ }
+
+ private static function isGuestPanel(): bool
+ {
+ return config('frontend-panel.guest_access');
+ }
}