refactor(stacks): migrate duplication form to react [BE-12353] (#1357)

This commit is contained in:
Chaim Lev-Ari
2025-11-04 18:44:54 +02:00
committed by GitHub
parent 1be96e1bd1
commit 73ad27640c
27 changed files with 2347 additions and 329 deletions
@@ -0,0 +1,51 @@
import { useMutation } from '@tanstack/react-query';
import { getSwarm } from '@/react/docker/proxy/queries/useSwarm';
import { Pair } from '@/react/portainer/settings/types';
import { EnvironmentId } from '@/react/portainer/environments/types';
import { createStandaloneStackFromFileContent } from '../../queries/useCreateStack/createStandaloneStackFromFileContent';
import { createSwarmStackFromFileContent } from '../../queries/useCreateStack/createSwarmStackFromFileContent';
import { StackType } from '../../types';
export function useDuplicateStackMutation() {
return useMutation({
mutationFn: duplicateStack,
});
}
export async function duplicateStack({
name,
fileContent,
targetEnvironmentId,
type,
env,
}: {
name: string;
fileContent: string;
targetEnvironmentId: EnvironmentId;
type: StackType;
env?: Array<Pair>;
}) {
if (type === StackType.DockerSwarm) {
const swarm = await getSwarm(targetEnvironmentId);
if (!swarm.ID) {
throw new Error('Swarm ID is required to duplicate a Swarm stack');
}
return createSwarmStackFromFileContent({
environmentId: targetEnvironmentId,
name,
stackFileContent: fileContent,
swarmID: swarm.ID,
env,
});
}
return createStandaloneStackFromFileContent({
environmentId: targetEnvironmentId,
name,
stackFileContent: fileContent,
env,
});
}