diff --git a/server/user.go b/server/user.go index e32a4289..0927091a 100644 --- a/server/user.go +++ b/server/user.go @@ -199,7 +199,7 @@ func (s *Server) registerUserRoutes(g *echo.Group) { return echo.NewHTTPError(http.StatusBadRequest, "Malformatted patch user request").SetInternal(err) } - if userPatch.Email != nil && !common.ValidateEmail(*userPatch.Email) { + if userPatch.Email != nil && *userPatch.Email != "" && !common.ValidateEmail(*userPatch.Email) { return echo.NewHTTPError(http.StatusBadRequest, "Invalid email format") } diff --git a/web/src/components/UpdateAccountDialog.tsx b/web/src/components/UpdateAccountDialog.tsx index 4f124b35..a7c29132 100644 --- a/web/src/components/UpdateAccountDialog.tsx +++ b/web/src/components/UpdateAccountDialog.tsx @@ -1,3 +1,4 @@ +import { isEqual } from "lodash"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { useAppSelector } from "../store"; @@ -64,12 +65,19 @@ const UpdateAccountDialog: React.FC = ({ destroy }: Props) => { try { const user = userService.getState().user as User; - await userService.patchUser({ + const userPatch: UserPatch = { id: user.id, - username: state.username, - nickname: state.nickname, - email: state.email, - }); + }; + if (!isEqual(user.nickname, state.nickname)) { + userPatch.nickname = state.nickname; + } + if (!isEqual(user.username, state.username)) { + userPatch.username = state.username; + } + if (!isEqual(user.email, state.email)) { + userPatch.email = state.email; + } + await userService.patchUser(userPatch); toastHelper.info("Update succeed"); handleCloseBtnClick(); } catch (error: any) { diff --git a/web/src/components/UserBanner.tsx b/web/src/components/UserBanner.tsx index 6b6a9285..833a9548 100644 --- a/web/src/components/UserBanner.tsx +++ b/web/src/components/UserBanner.tsx @@ -76,7 +76,7 @@ const UserBanner = () => { } - actionsClassName="!w-36" + actionsClassName="min-w-36" actions={ <> {!userService.isVisitorMode() && (