d5a3e46791
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Devon Steenberg <devon.steenberg@portainer.io>
57 lines
1.9 KiB
TypeScript
57 lines
1.9 KiB
TypeScript
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
|
|
|
import { Stack } from '@/react/common/stacks/types';
|
|
import { updateGitStack } from '@/react/portainer/gitops/queries/useUpdateGitStack';
|
|
import {
|
|
GitStackPayload,
|
|
updateGitStackSettings,
|
|
} from '@/react/portainer/gitops/queries/useUpdateGitStackSettings';
|
|
import { queryKeys } from '@/react/common/stacks/queries/query-keys';
|
|
|
|
interface MutationArgs {
|
|
payload: GitStackPayload;
|
|
repullImageAndRedeploy?: boolean;
|
|
}
|
|
|
|
export function useUpdateGitStack(stack: Stack) {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: async ({ payload, repullImageAndRedeploy }: MutationArgs) => {
|
|
await updateGitStackSettings(stack.Id, stack.EndpointId, payload);
|
|
|
|
if (repullImageAndRedeploy === undefined) {
|
|
return { redeployAttempted: false, redeployFailed: false };
|
|
}
|
|
|
|
try {
|
|
await updateGitStack(stack.Id, stack.EndpointId, {
|
|
Env: payload.env,
|
|
Prune: payload.prune,
|
|
RepositoryAuthentication: payload.RepositoryAuthentication,
|
|
RepositoryAuthorizationType: payload.RepositoryAuthorizationType,
|
|
StackName: undefined, // TODO: in kubernetes
|
|
RepositoryGitCredentialID: payload.RepositoryGitCredentialID,
|
|
RepositoryPassword: payload.RepositoryPassword,
|
|
RepositoryReferenceName: payload.RepositoryReferenceName,
|
|
RepositoryUsername: payload.RepositoryUsername,
|
|
RepullImageAndRedeploy: repullImageAndRedeploy,
|
|
});
|
|
return { redeployAttempted: true, redeployFailed: false };
|
|
} catch (error) {
|
|
return {
|
|
redeployAttempted: true,
|
|
redeployFailed: true,
|
|
redeployError: error,
|
|
};
|
|
}
|
|
},
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({
|
|
queryKey: queryKeys.stack(stack.Id),
|
|
exact: true,
|
|
});
|
|
},
|
|
});
|
|
}
|