Files
2026-07-13 12:08:39 +08:00

42 lines
1.1 KiB
TypeScript

import { useMutation } from '@tanstack/react-query';
import axios, { parseAxiosError } from '@/portainer/services/axios/axios';
import { ThemeColor } from '@/portainer/users/types';
import {
mutationOptions,
withInvalidate,
queryClient,
} from '@/react-tools/react-query';
import { userQueryKeys } from '@/portainer/users/queries/queryKeys';
import { useCurrentUser } from '@/react/hooks/useUser';
export type UserUpdatePayload = {
username?: string;
password?: string;
newPassword?: string;
useCache?: boolean;
theme?: { color: ThemeColor };
role?: number;
};
export function useUpdateUserMutation() {
const {
user: { Id: userId },
} = useCurrentUser();
return useMutation(
(payload: UserUpdatePayload) => updateUser(payload, userId),
mutationOptions(withInvalidate(queryClient, [userQueryKeys.base()]))
// error notification should be handled by the caller
);
}
async function updateUser(payload: UserUpdatePayload, userId: number) {
try {
const { data } = await axios.put(`/users/${userId}`, payload);
return data;
} catch (error) {
throw parseAxiosError(error);
}
}