164 lines
8.3 KiB
PHP
Executable File
164 lines
8.3 KiB
PHP
Executable File
<div>
|
|
@php
|
|
$navigation = filament()->getNavigation();
|
|
$isRtl = __('filament-panels::layout.direction') === 'rtl';
|
|
$isSidebarCollapsibleOnDesktop = filament()->isSidebarCollapsibleOnDesktop();
|
|
$isSidebarFullyCollapsibleOnDesktop = filament()->isSidebarFullyCollapsibleOnDesktop();
|
|
$hasNavigation = filament()->hasNavigation();
|
|
$hasTopbar = filament()->hasTopbar();
|
|
@endphp
|
|
|
|
{{-- format-ignore-start --}}
|
|
<aside x-data="{}"
|
|
@if ($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop) x-cloak
|
|
@else
|
|
x-cloak="-lg" @endif
|
|
x-bind:class="{ 'fi-sidebar-open': $store.sidebar.isOpen }" class="fi-sidebar fi-main-sidebar">
|
|
{{ \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_START) }}
|
|
|
|
<div class="fi-sidebar-header-ctn">
|
|
<header class="fi-sidebar-header">
|
|
@if (!$hasTopbar && $isSidebarCollapsibleOnDesktop)
|
|
<x-filament::icon-button color="gray" :icon="$isRtl
|
|
? \Filament\Support\Icons\Heroicon::OutlinedChevronLeft
|
|
: \Filament\Support\Icons\Heroicon::OutlinedChevronRight" {{-- @deprecated Use `PanelsIconAlias::SIDEBAR_EXPAND_BUTTON_RTL` instead of `PanelsIconAlias::SIDEBAR_EXPAND_BUTTON` for RTL. --}} :icon-alias="$isRtl
|
|
? [
|
|
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON_RTL,
|
|
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON,
|
|
]
|
|
: \Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON"
|
|
icon-size="lg" :label="__('filament-panels::layout.actions.sidebar.expand.label')" x-cloak x-data="{}" x-on:click="$store.sidebar.open()"
|
|
x-show="! $store.sidebar.isOpen" class="fi-sidebar-open-collapse-sidebar-btn" />
|
|
@endif
|
|
|
|
@if (!$hasTopbar && ($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop))
|
|
<x-filament::icon-button color="gray" :icon="$isRtl
|
|
? \Filament\Support\Icons\Heroicon::OutlinedChevronRight
|
|
: \Filament\Support\Icons\Heroicon::OutlinedChevronLeft" {{-- @deprecated Use `PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON_RTL` instead of `PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON` for RTL. --}} :icon-alias="$isRtl
|
|
? [
|
|
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON_RTL,
|
|
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON,
|
|
]
|
|
: \Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON"
|
|
icon-size="lg" :label="__('filament-panels::layout.actions.sidebar.collapse.label')" x-cloak x-data="{}"
|
|
x-on:click="$store.sidebar.close()" x-show="$store.sidebar.isOpen"
|
|
class="fi-sidebar-close-collapse-sidebar-btn" />
|
|
@endif
|
|
|
|
{{ \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_LOGO_BEFORE) }}
|
|
|
|
<div @if ($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop) x-show="$store.sidebar.isOpen" @endif
|
|
class="fi-sidebar-header-logo-ctn">
|
|
@if ($homeUrl = filament()->getHomeUrl())
|
|
<a {{ \Filament\Support\generate_href_html($homeUrl) }}>
|
|
<x-filament-panels::logo />
|
|
</a>
|
|
@else
|
|
<x-filament-panels::logo />
|
|
@endif
|
|
</div>
|
|
|
|
{{ \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_LOGO_AFTER) }}
|
|
</header>
|
|
</div>
|
|
|
|
@if (filament()->hasTenancy() && filament()->hasTenantMenu())
|
|
<x-filament-panels::tenant-menu />
|
|
@endif
|
|
|
|
@if (filament()->isGlobalSearchEnabled() &&
|
|
filament()->getGlobalSearchPosition() === \Filament\Enums\GlobalSearchPosition::Sidebar)
|
|
<div @if ($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop) x-show="$store.sidebar.isOpen" @endif>
|
|
@livewire(Filament\Livewire\GlobalSearch::class)
|
|
</div>
|
|
@endif
|
|
|
|
<nav class="fi-sidebar-nav">
|
|
{{ \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_NAV_START) }}
|
|
|
|
<ul class="fi-sidebar-nav-groups">
|
|
@foreach ($navigation as $group)
|
|
@php
|
|
$isGroupActive = $group->isActive();
|
|
$isGroupCollapsible = $group->isCollapsible();
|
|
$groupIcon = $group->getIcon();
|
|
$groupItems = $group->getItems();
|
|
$groupLabel = $group->getLabel();
|
|
$groupExtraSidebarAttributeBag = $group->getExtraSidebarAttributeBag();
|
|
@endphp
|
|
|
|
<x-filament-panels::sidebar.group :active="$isGroupActive" :collapsible="$isGroupCollapsible" :icon="$groupIcon"
|
|
:items="$groupItems" :label="$groupLabel" :attributes="\Filament\Support\prepare_inherited_attributes($groupExtraSidebarAttributeBag)" />
|
|
@endforeach
|
|
</ul>
|
|
|
|
<script>
|
|
var collapsedGroups = JSON.parse(
|
|
localStorage.getItem('collapsedGroups'),
|
|
)
|
|
|
|
if (collapsedGroups === null || collapsedGroups === 'null') {
|
|
localStorage.setItem(
|
|
'collapsedGroups',
|
|
JSON.stringify(@js(collect($navigation)->filter(fn(\Filament\Navigation\NavigationGroup $group): bool => $group->isCollapsed())->map(fn(\Filament\Navigation\NavigationGroup $group): string => $group->getLabel())->values()->all())),
|
|
)
|
|
}
|
|
|
|
collapsedGroups = JSON.parse(
|
|
localStorage.getItem('collapsedGroups'),
|
|
)
|
|
|
|
document
|
|
.querySelectorAll('.fi-sidebar-group')
|
|
.forEach((group) => {
|
|
if (
|
|
!collapsedGroups.includes(group.dataset.groupLabel)
|
|
) {
|
|
return
|
|
}
|
|
|
|
// Alpine.js loads too slow, so attempt to hide a
|
|
// collapsed sidebar group earlier.
|
|
group.querySelector(
|
|
'.fi-sidebar-group-items',
|
|
).style.display = 'none'
|
|
group.classList.add('fi-collapsed')
|
|
})
|
|
</script>
|
|
|
|
{{ \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_NAV_END) }}
|
|
</nav>
|
|
|
|
@php
|
|
$isAuthenticated = filament()->auth()->check();
|
|
$hasDatabaseNotificationsInSidebar =
|
|
filament()->hasDatabaseNotifications() &&
|
|
filament()->getDatabaseNotificationsPosition() ===
|
|
\Filament\Enums\DatabaseNotificationsPosition::Sidebar;
|
|
$hasUserMenuInSidebar =
|
|
filament()->hasUserMenu() &&
|
|
filament()->getUserMenuPosition() === \Filament\Enums\UserMenuPosition::Sidebar;
|
|
$shouldRenderFooter = $isAuthenticated && ($hasDatabaseNotificationsInSidebar || $hasUserMenuInSidebar);
|
|
@endphp
|
|
|
|
@if ($shouldRenderFooter)
|
|
<div class="fi-sidebar-footer">
|
|
@if ($hasDatabaseNotificationsInSidebar)
|
|
@livewire(filament()->getDatabaseNotificationsLivewireComponent(), [
|
|
'lazy' => filament()->hasLazyLoadedDatabaseNotifications(),
|
|
])
|
|
@endif
|
|
|
|
@if ($hasUserMenuInSidebar)
|
|
<x-filament-panels::user-menu />
|
|
@endif
|
|
</div>
|
|
@endif
|
|
|
|
{{ \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_FOOTER) }}
|
|
</aside>
|
|
{{-- format-ignore-end --}}
|
|
|
|
<x-filament-actions::modals />
|
|
</div>
|