Refactor CityProfile and PlayerProfile components for improved data fetching and error handling; add NPC management modals for banner, gallery, and logo with enhanced user experience and error feedback.

This commit is contained in:
Lars Behrends
2025-12-30 13:56:00 +01:00
parent 5eb2eca110
commit c6ad8a92ec
14 changed files with 2539 additions and 102 deletions

View File

@@ -34,6 +34,10 @@ const NavItem = ({
const Layout: React.FC<LayoutProps> = ({ children, activeTab, onNavigate }) => {
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
const [user, setUser] = useState<DiscordUser | null>(null);
const [rememberMe, setRememberMe] = useState(() => {
// Load remember me preference from localStorage
return localStorage.getItem('rememberMe') === 'true';
});
useEffect(() => {
// Subscribe to auth changes
@@ -151,13 +155,28 @@ const Layout: React.FC<LayoutProps> = ({ children, activeTab, onNavigate }) => {
</button>
</div>
) : (
<button
onClick={() => authService.login()}
className="flex items-center gap-2 text-textMain hover:text-accentInfo transition-colors font-medium"
>
<Icons.Users className="w-4 h-4" />
<span>Discord Login</span>
</button>
<div className="flex items-center gap-2">
<button
onClick={() => authService.login(rememberMe)}
className="flex items-center gap-2 text-textMain hover:text-accentInfo transition-colors font-medium text-sm"
>
<Icons.Users className="w-4 h-4" />
<span>Discord Login</span>
</button>
<label className="flex items-center gap-1 text-xs text-textMuted cursor-pointer">
<input
type="checkbox"
checked={rememberMe}
onChange={(e) => {
setRememberMe(e.target.checked);
// Store preference for next login
localStorage.setItem('rememberMe', e.target.checked.toString());
}}
className="w-3 h-3 text-accentInfo bg-surface border-border rounded focus:ring-accentInfo"
/>
<span>Remember me (30 days)</span>
</label>
</div>
)}
</div>