1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-29 18:29:44 +02:00
portainer/app/react/portainer/users/teams/queries.ts
Chaim Lev-Ari 1032b462b4
Some checks are pending
ci / build_images (map[arch:amd64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
ci / build_images (map[arch:arm platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:arm64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:ppc64le platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:s390x platform:linux version:]) (push) Waiting to run
ci / build_manifests (push) Blocked by required conditions
/ triage (push) Waiting to run
Lint / Run linters (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
Test / test-server (map[arch:arm64 platform:linux]) (push) Waiting to run
Test / test-client (push) Waiting to run
Test / test-server (map[arch:amd64 platform:linux]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
chore(deps): upgrade react-query to v4 [EE-6638] (#11041)
2024-04-14 17:54:25 +03:00

135 lines
3.5 KiB
TypeScript

import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { promiseSequence } from '@/portainer/helpers/promise-utils';
import { notifyError } from '@/portainer/services/notifications';
import { UserId } from '@/portainer/users/types';
import {
createTeamMembership,
deleteTeamMembership,
updateTeamMembership,
} from './team-membership.service';
import { getTeam, getTeamMemberships, getTeams } from './teams.service';
import { Team, TeamId, TeamMembership, TeamRole } from './types';
export function useTeams<T = Team[]>(
onlyLedTeams = false,
environmentId = 0,
{
enabled = true,
select = (data) => data as unknown as T,
}: {
enabled?: boolean;
select?: (data: Team[]) => T;
} = {}
) {
const teams = useQuery(
['teams', { onlyLedTeams, environmentId }],
() => getTeams(onlyLedTeams, environmentId),
{
meta: {
error: { title: 'Failure', message: 'Unable to load teams' },
},
enabled,
select,
}
);
return teams;
}
export function useTeam(id: TeamId, onError?: (error: unknown) => void) {
return useQuery(['teams', id], () => getTeam(id), {
meta: {
error: { title: 'Failure', message: 'Unable to load team' },
},
onError,
});
}
export function useTeamMemberships(id: TeamId) {
return useQuery(['teams', id, 'memberships'], () => getTeamMemberships(id), {
meta: {
error: { title: 'Failure', message: 'Unable to load team memberships' },
},
});
}
export function useAddMemberMutation(teamId: TeamId) {
const queryClient = useQueryClient();
return useMutation(
(userIds: UserId[]) =>
promiseSequence(
userIds.map(
(userId) => () =>
createTeamMembership(userId, teamId, TeamRole.Member)
)
),
{
onError(error) {
notifyError('Failure', error as Error, 'Failure to add membership');
},
onSuccess() {
queryClient.invalidateQueries(['teams', teamId, 'memberships']);
},
}
);
}
export function useRemoveMemberMutation(
teamId: TeamId,
teamMemberships: TeamMembership[] = []
) {
const queryClient = useQueryClient();
return useMutation(
(userIds: UserId[]) =>
promiseSequence(
userIds.map((userId) => () => {
const membership = teamMemberships.find(
(membership) => membership.UserID === userId
);
if (!membership) {
throw new Error('Membership not found');
}
return deleteTeamMembership(membership.Id);
})
),
{
onError(error) {
notifyError('Failure', error as Error, 'Failure to add membership');
},
onSuccess() {
queryClient.invalidateQueries(['teams', teamId, 'memberships']);
},
}
);
}
export function useUpdateRoleMutation(
teamId: TeamId,
teamMemberships: TeamMembership[] = []
) {
const queryClient = useQueryClient();
return useMutation(
({ userId, role }: { userId: UserId; role: TeamRole }) => {
const membership = teamMemberships.find(
(membership) => membership.UserID === userId
);
if (!membership) {
throw new Error('Membership not found');
}
return updateTeamMembership(membership.Id, userId, teamId, role);
},
{
onError(error) {
notifyError('Failure', error as Error, 'Failure to update membership');
},
onSuccess() {
queryClient.invalidateQueries(['teams', teamId, 'memberships']);
},
}
);
}