fix(account-settings): clear stale pw error on input + live header avatar update
- Password form errors (wrong pw, mismatch) now clear on first keystroke
in any password field instead of persisting until next submit.
- Avatar upload now bumps avatarVersion in auth store and sets hasAvatar=true,
so the header avatar switches to the uploaded image immediately without reload.
- Header img src uses ?v={avatarVersion} as cache-buster to force browser to
fetch the new avatar when version increments.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -7,10 +7,12 @@ import {
|
||||
changePasswordAction,
|
||||
uploadAvatarAction,
|
||||
} from '@/lib/auth-actions';
|
||||
import { useAuthStore } from '@/lib/stores/auth-store';
|
||||
|
||||
export function AccountSettingsForm() {
|
||||
const t = useTranslations('settings');
|
||||
const tAuth = useTranslations('auth');
|
||||
const { user, setUser, bumpAvatarVersion } = useAuthStore();
|
||||
|
||||
const [isLocalUser, setIsLocalUser] = useState<boolean | null>(null);
|
||||
const [username, setUsername] = useState<string>('');
|
||||
@@ -80,8 +82,10 @@ export function AccountSettingsForm() {
|
||||
if (result.success) {
|
||||
setAvatarSuccess(true);
|
||||
setHasAvatar(true);
|
||||
// Cache-bust the avatar image to force reload
|
||||
setAvatarKey((k) => k + 1);
|
||||
// Sync to auth store so header avatar updates immediately
|
||||
bumpAvatarVersion();
|
||||
if (user) setUser({ ...user, hasAvatar: true });
|
||||
} else {
|
||||
setAvatarError(result.error ?? 'uploadError');
|
||||
}
|
||||
@@ -185,6 +189,7 @@ export function AccountSettingsForm() {
|
||||
type="password"
|
||||
required
|
||||
autoComplete="current-password"
|
||||
onChange={() => { setPwError(null); setPwMismatch(false); }}
|
||||
className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
||||
/>
|
||||
</div>
|
||||
@@ -199,6 +204,7 @@ export function AccountSettingsForm() {
|
||||
required
|
||||
minLength={8}
|
||||
autoComplete="new-password"
|
||||
onChange={() => { setPwError(null); setPwMismatch(false); }}
|
||||
className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
||||
/>
|
||||
</div>
|
||||
@@ -213,6 +219,7 @@ export function AccountSettingsForm() {
|
||||
required
|
||||
minLength={8}
|
||||
autoComplete="new-password"
|
||||
onChange={() => { setPwError(null); setPwMismatch(false); }}
|
||||
className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
||||
/>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user