Signed-off-by: OpenClaw Bot <ai-agent@topdoglabs.com>
This commit is contained in:
parent
82658707a2
commit
7c1b9d578c
@ -47,19 +47,29 @@ export default function SettingsPage() {
|
|||||||
if (isMounted) router.replace("/login")
|
if (isMounted) router.replace("/login")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const data = await res.json()
|
const data = await res.json().catch(() => null)
|
||||||
|
const user = data?.user
|
||||||
|
if (
|
||||||
|
!user
|
||||||
|
|| typeof user.id !== "string"
|
||||||
|
|| typeof user.name !== "string"
|
||||||
|
|| typeof user.email !== "string"
|
||||||
|
) {
|
||||||
|
if (isMounted) router.replace("/login")
|
||||||
|
return
|
||||||
|
}
|
||||||
if (!isMounted) return
|
if (!isMounted) return
|
||||||
|
|
||||||
setName(data.user.name || "")
|
setName(user.name || "")
|
||||||
setEmail(data.user.email || "")
|
setEmail(user.email || "")
|
||||||
setProfileAvatarUrl(data.user.avatarUrl || "")
|
setProfileAvatarUrl(typeof user.avatarUrl === "string" ? user.avatarUrl : "")
|
||||||
setCurrentUserId(data.user.id || "")
|
setCurrentUserId(user.id || "")
|
||||||
setInitialEmail(data.user.email || "")
|
setInitialEmail(user.email || "")
|
||||||
setCurrentUser({
|
setCurrentUser({
|
||||||
id: data.user.id,
|
id: user.id,
|
||||||
name: data.user.name,
|
name: user.name,
|
||||||
email: data.user.email,
|
email: user.email,
|
||||||
avatarUrl: data.user.avatarUrl,
|
avatarUrl: typeof user.avatarUrl === "string" ? user.avatarUrl : undefined,
|
||||||
})
|
})
|
||||||
setAuthReady(true)
|
setAuthReady(true)
|
||||||
} catch {
|
} catch {
|
||||||
@ -111,23 +121,35 @@ export default function SettingsPage() {
|
|||||||
body: JSON.stringify(payload),
|
body: JSON.stringify(payload),
|
||||||
})
|
})
|
||||||
|
|
||||||
const data = await res.json()
|
const data = await res.json().catch(() => null)
|
||||||
if (!res.ok) {
|
if (!res.ok) {
|
||||||
setProfileError(data.error || "Failed to update profile")
|
setProfileError(
|
||||||
|
data && typeof data.error === "string" ? data.error : "Failed to update profile"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const user = data?.user
|
||||||
|
if (
|
||||||
|
!user
|
||||||
|
|| typeof user.id !== "string"
|
||||||
|
|| typeof user.name !== "string"
|
||||||
|
|| typeof user.email !== "string"
|
||||||
|
) {
|
||||||
|
setProfileError("Profile update returned invalid data")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
setCurrentUser({
|
setCurrentUser({
|
||||||
id: data.user.id,
|
id: user.id,
|
||||||
name: data.user.name,
|
name: user.name,
|
||||||
email: data.user.email,
|
email: user.email,
|
||||||
avatarUrl: data.user.avatarUrl,
|
avatarUrl: typeof user.avatarUrl === "string" ? user.avatarUrl : undefined,
|
||||||
})
|
})
|
||||||
setName(data.user.name)
|
setName(user.name)
|
||||||
setEmail(data.user.email)
|
setEmail(user.email)
|
||||||
setProfileAvatarUrl(data.user.avatarUrl || "")
|
setProfileAvatarUrl(typeof user.avatarUrl === "string" ? user.avatarUrl : "")
|
||||||
setCurrentUserId(data.user.id)
|
setCurrentUserId(user.id)
|
||||||
setInitialEmail(data.user.email)
|
setInitialEmail(user.email)
|
||||||
setProfileCurrentPassword("")
|
setProfileCurrentPassword("")
|
||||||
setProfileSuccess("Profile updated")
|
setProfileSuccess("Profile updated")
|
||||||
} catch {
|
} catch {
|
||||||
@ -161,7 +183,7 @@ export default function SettingsPage() {
|
|||||||
[avatarSeed, name, email]
|
[avatarSeed, name, email]
|
||||||
)
|
)
|
||||||
const avatarPresets = useMemo(
|
const avatarPresets = useMemo(
|
||||||
() => buildAvatarPresets(avatarSeed, name || email || "User", 8),
|
() => Array.from(new Set(buildAvatarPresets(avatarSeed, name || email || "User", 8))),
|
||||||
[avatarSeed, name, email]
|
[avatarSeed, name, email]
|
||||||
)
|
)
|
||||||
const profilePreviewAvatarUrl = profileAvatarUrl || generatedAvatarUrl
|
const profilePreviewAvatarUrl = profileAvatarUrl || generatedAvatarUrl
|
||||||
@ -194,9 +216,11 @@ export default function SettingsPage() {
|
|||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
const data = await res.json()
|
const data = await res.json().catch(() => null)
|
||||||
if (!res.ok) {
|
if (!res.ok) {
|
||||||
setPasswordError(data.error || "Failed to update password")
|
setPasswordError(
|
||||||
|
data && typeof data.error === "string" ? data.error : "Failed to update password"
|
||||||
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -295,7 +319,7 @@ export default function SettingsPage() {
|
|||||||
<div className="flex flex-wrap gap-2">
|
<div className="flex flex-wrap gap-2">
|
||||||
{avatarPresets.map((presetUrl, index) => (
|
{avatarPresets.map((presetUrl, index) => (
|
||||||
<button
|
<button
|
||||||
key={presetUrl}
|
key={`${avatarSeed}-preset-${index}`}
|
||||||
type="button"
|
type="button"
|
||||||
onClick={() => setProfileAvatarUrl(presetUrl)}
|
onClick={() => setProfileAvatarUrl(presetUrl)}
|
||||||
className={`rounded-full p-0.5 border ${profileAvatarUrl === presetUrl ? "border-blue-400" : "border-slate-700 hover:border-slate-500"}`}
|
className={`rounded-full p-0.5 border ${profileAvatarUrl === presetUrl ? "border-blue-400" : "border-slate-700 hover:border-slate-500"}`}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user