Files
autocrm/app/Http/Middleware/ConfigureNavGroups.php
Vasyka 2ca6ab58a1 feat(nav): FAQ shows all 8 sections + drag-drop reorder in Settings
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>
2026-09-01 11:09:24 +00:00

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);
}
}