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

44 lines
1.3 KiB
TypeScript

import { useQueryClient, useMutation } from '@tanstack/react-query';
import axios, { parseAxiosError } from '@/portainer/services/axios/axios';
import { withError, withInvalidate } from '@/react-tools/react-query';
import { userQueryKeys } from '@/portainer/users/queries/queryKeys';
import { buildUrl } from '@/portainer/users/user.service';
import { Role, User } from '@/portainer/users/types';
import { TeamId, TeamRole } from '../teams/types';
import { createTeamMembership } from '../teams/queries';
interface CreateUserPayload {
username: string;
password: string;
role: Role;
teams: Array<TeamId>;
}
export function useCreateUserMutation() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (values: CreateUserPayload) => {
const user = await createUser(values);
return Promise.all(
values.teams.map((id) =>
createTeamMembership(user.Id, id, TeamRole.Member)
)
);
},
...withInvalidate(queryClient, [userQueryKeys.base()]),
...withError('Unable to create user'),
});
}
async function createUser(payload: CreateUserPayload) {
try {
const { data } = await axios.post<User>(buildUrl(), payload);
return data;
} catch (err) {
throw parseAxiosError(err, 'Unable to create user');
}
}