a5cacd712d
Co-authored-by: Claude <noreply@anthropic.com>
74 lines
2.3 KiB
TypeScript
74 lines
2.3 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 { updateGitStackSettings } from '@/react/portainer/gitops/queries/useUpdateGitStackSettings';
|
|
import { queryKeys } from '@/react/common/stacks/queries/query-keys';
|
|
import { transformAutoUpdateViewModel } from '@/react/portainer/gitops/AutoUpdateFieldset/utils';
|
|
import { withError } from '@/react-tools/react-query';
|
|
|
|
import { FormValues } from './types';
|
|
|
|
interface MutationArgs {
|
|
values: FormValues;
|
|
repullImageAndRedeploy?: boolean;
|
|
webhookId: string;
|
|
}
|
|
|
|
export function useUpdateGitStack(stack: Stack) {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: async ({
|
|
values,
|
|
repullImageAndRedeploy,
|
|
webhookId,
|
|
}: MutationArgs) => {
|
|
const autoUpdate = transformAutoUpdateViewModel(
|
|
values.git.AutoUpdate,
|
|
webhookId
|
|
);
|
|
|
|
await updateGitStackSettings(stack.Id, stack.EndpointId, {
|
|
ConfigFilePath: values.git.ComposeFilePathInRepository,
|
|
RepositoryReferenceName: values.git.RepositoryReferenceName,
|
|
AutoUpdate: autoUpdate,
|
|
AdditionalFiles: values.git.AdditionalFiles,
|
|
env: values.env,
|
|
prune: values.prune,
|
|
SourceID: values.git.SourceId,
|
|
});
|
|
|
|
if (repullImageAndRedeploy === undefined) {
|
|
return { redeployAttempted: false, redeployFailed: false };
|
|
}
|
|
|
|
try {
|
|
await updateGitStack(stack.Id, stack.EndpointId, {
|
|
Env: values.env,
|
|
Prune: values.prune,
|
|
StackName: values.kube.name.trim() || undefined,
|
|
RepullImageAndRedeploy: repullImageAndRedeploy,
|
|
});
|
|
return { redeployAttempted: true, redeployFailed: false };
|
|
} catch (error) {
|
|
return {
|
|
redeployAttempted: true,
|
|
redeployFailed: true,
|
|
redeployError: error,
|
|
};
|
|
}
|
|
},
|
|
onSuccess: () => {
|
|
queryClient.removeQueries({
|
|
queryKey: queryKeys.stackFile(stack.Id, {
|
|
commitHash: stack?.GitConfig?.ConfigHash,
|
|
}),
|
|
});
|
|
return queryClient.invalidateQueries({
|
|
queryKey: queryKeys.stack(stack.Id),
|
|
});
|
|
},
|
|
...withError('Unable to save stack settings'),
|
|
});
|
|
}
|