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>
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user