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

51 lines
1.4 KiB
TypeScript

import { useMutation, useQueryClient } from '@tanstack/react-query';
import { buildStackUrl } from '@/react/common/stacks/queries/buildUrl';
import { queryKeys } from '@/react/common/stacks/queries/query-keys';
import axios, { parseAxiosError } from '@/portainer/services/axios/axios';
import { EnvVarValues } from '@@/form-components/EnvironmentVariablesFieldset';
interface DeployGitPayload {
RepositoryReferenceName?: string;
Env?: EnvVarValues;
Prune?: boolean;
// RepullImageAndRedeploy indicates whether to force repulling images and redeploying the stack
RepullImageAndRedeploy?: boolean;
StackName?: string;
}
export async function updateGitStack(
stackId: number,
endpointId: number,
payload: DeployGitPayload
) {
try {
const { data } = await axios.put(
buildStackUrl(stackId, 'git/redeploy'),
payload,
{ params: { endpointId } }
);
return data;
} catch (e) {
throw parseAxiosError(e as Error);
}
}
export function useUpdateGitStack(stackId: number, endpointId: number) {
const queryClient = useQueryClient();
return useMutation({
mutationKey: ['git-stack', 'redeploy', endpointId, stackId],
mutationFn: (payload: DeployGitPayload) =>
updateGitStack(stackId, endpointId, payload),
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: queryKeys.stack(stackId),
exact: true,
});
},
});
}