51 lines
1.4 KiB
TypeScript
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,
|
|
});
|
|
},
|
|
});
|
|
}
|