2ca6ab58a1
FAQ sections were only 4 (service/crm/depozit/finante) even though the sidebar has 8. Added the missing 4 to Hints::AREAS with proper icons + accent colors: 📊 Analiză (pink) 📣 Marketing (orange) 🛒 Magazin (cyan) ⚙️ Admin (slate) Retagged 15 hints that were shoved into wrong areas as a workaround (admin.*/marketing.*/shop.*/analytics.* now use the matching bucket). FAQ blade reads accent color from the AREAS registry instead of a hardcoded local map. Also added per-tenant navigation group ordering: - Settings → new "Ordine meniu lateral" section with a Filament Repeater that has reorderable buttons (drag/arrow buttons) but no add/delete (fixed list of 8 groups) - Persisted to settings.nav_group_order as an array of keys - New ConfigureNavGroups middleware (runs after ResolveTenant on the web stack) reads the current tenant's order and calls $panel->navigationGroups([...]) so the sidebar renders in that order per-request Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
53 lines
1.4 KiB
PHP
53 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use App\Tenancy\TenantManager;
|
|
use Closure;
|
|
use Filament\Facades\Filament;
|
|
use Filament\Navigation\NavigationGroup;
|
|
use Illuminate\Http\Request;
|
|
|
|
/**
|
|
* Read the current tenant's preferred navigation group order from
|
|
* settings.nav_group_order and apply it to the tenant panel so the
|
|
* sidebar groups render in that order.
|
|
*
|
|
* Falls back to the built-in default order when the setting is empty.
|
|
*/
|
|
class ConfigureNavGroups
|
|
{
|
|
/** Default order (matches the labels defined in lang/{ro,ru,en}/nav.php). */
|
|
public const DEFAULT_ORDER = [
|
|
'CRM',
|
|
'Service',
|
|
'Depozit',
|
|
'Finanțe',
|
|
'Analiză',
|
|
'Marketing',
|
|
'Magazin',
|
|
'Admin',
|
|
];
|
|
|
|
public function handle(Request $request, Closure $next)
|
|
{
|
|
$tenant = app(TenantManager::class)->current();
|
|
if (! $tenant) return $next($request);
|
|
|
|
$order = (array) ($tenant->settings['nav_group_order'] ?? []);
|
|
if (empty($order)) $order = self::DEFAULT_ORDER;
|
|
|
|
// Only touch the tenant panel — bail if the current request isn't in it.
|
|
$panel = Filament::getCurrentPanel();
|
|
if (! $panel || $panel->getId() !== 'tenant') return $next($request);
|
|
|
|
$groups = array_map(
|
|
fn (string $key) => NavigationGroup::make(__('nav.group.' . $key)),
|
|
$order,
|
|
);
|
|
$panel->navigationGroups($groups);
|
|
|
|
return $next($request);
|
|
}
|
|
}
|