mirror of https://github.com/portainer/portainer
57 lines
1.5 KiB
TypeScript
57 lines
1.5 KiB
TypeScript
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
|
|
|
import axios, { parseAxiosError } from '@/portainer/services/axios';
|
|
import {
|
|
mutationOptions,
|
|
withError,
|
|
withInvalidate,
|
|
} from '@/react-tools/react-query';
|
|
import { buildUrl } from '@/react/edge/edge-stacks/queries/buildUrl';
|
|
import {
|
|
DeploymentType,
|
|
EdgeStack,
|
|
StaggerConfig,
|
|
} from '@/react/edge/edge-stacks/types';
|
|
import { EdgeGroup } from '@/react/edge/edge-groups/types';
|
|
import { Registry } from '@/react/portainer/registries/types/registry';
|
|
import { Pair } from '@/react/portainer/settings/types';
|
|
|
|
import { queryKeys } from '../../queries/query-keys';
|
|
|
|
export interface UpdateEdgeStackPayload {
|
|
id: EdgeStack['Id'];
|
|
stackFileContent: string;
|
|
edgeGroups: Array<EdgeGroup['Id']>;
|
|
deploymentType: DeploymentType;
|
|
registries: Array<Registry['Id']>;
|
|
useManifestNamespaces: boolean;
|
|
prePullImage?: boolean;
|
|
rePullImage?: boolean;
|
|
retryDeploy?: boolean;
|
|
updateVersion: boolean;
|
|
webhook?: string;
|
|
envVars: Pair[];
|
|
rollbackTo?: number;
|
|
staggerConfig?: StaggerConfig;
|
|
}
|
|
|
|
export function useUpdateEdgeStackMutation() {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation(
|
|
updateEdgeStack,
|
|
mutationOptions(
|
|
withError('Failed updating stack'),
|
|
withInvalidate(queryClient, [queryKeys.base()])
|
|
)
|
|
);
|
|
}
|
|
|
|
async function updateEdgeStack({ id, ...payload }: UpdateEdgeStackPayload) {
|
|
try {
|
|
await axios.put(buildUrl(id), payload);
|
|
} catch (err) {
|
|
throw parseAxiosError(err as Error, 'Failed updating stack');
|
|
}
|
|
}
|