mirror of
https://github.com/portainer/portainer.git
synced 2025-11-26 14:06:05 +08:00
71 lines
1.8 KiB
TypeScript
71 lines
1.8 KiB
TypeScript
import { useMutation } from '@tanstack/react-query';
|
|
|
|
import PortainerError from '@/portainer/error';
|
|
import { applyResourceControl } from '@/react/portainer/access-control/access-control.service';
|
|
import { AccessControlFormData } from '@/react/portainer/access-control/types';
|
|
import axios from '@/portainer/services/axios';
|
|
import { buildStackUrl } from '@/react/common/stacks/queries/buildUrl';
|
|
import { Stack } from '@/react/common/stacks/types';
|
|
import { withGlobalError } from '@/react-tools/react-query';
|
|
|
|
export function useAssociateStackToEnvironmentMutation() {
|
|
return useMutation({
|
|
mutationFn: associateStackToEnvironmentMutation,
|
|
...withGlobalError('Failed to associate stack to environment'),
|
|
});
|
|
}
|
|
|
|
async function associateStackToEnvironmentMutation({
|
|
environmentId,
|
|
stackId,
|
|
isOrphanedRunning,
|
|
accessControl,
|
|
swarmId,
|
|
}: {
|
|
environmentId: number;
|
|
stackId: number;
|
|
isOrphanedRunning?: boolean;
|
|
accessControl: AccessControlFormData;
|
|
swarmId?: string;
|
|
}) {
|
|
const associatedStack = await associate({
|
|
environmentId,
|
|
stackId,
|
|
isOrphanedRunning,
|
|
swarmId,
|
|
});
|
|
|
|
const resourceControl = associatedStack.ResourceControl;
|
|
if (!resourceControl) {
|
|
throw new PortainerError('resource control expected after creation');
|
|
}
|
|
|
|
await applyResourceControl(accessControl, resourceControl.Id);
|
|
}
|
|
|
|
async function associate({
|
|
environmentId,
|
|
stackId,
|
|
isOrphanedRunning,
|
|
swarmId,
|
|
}: {
|
|
environmentId: number;
|
|
stackId: number;
|
|
isOrphanedRunning?: boolean;
|
|
swarmId?: string;
|
|
}) {
|
|
const { data } = await axios.put<Stack>(
|
|
buildStackUrl(stackId, 'associate'),
|
|
{},
|
|
{
|
|
params: {
|
|
endpointId: environmentId,
|
|
orphanedRunning: isOrphanedRunning ?? false,
|
|
swarmId,
|
|
},
|
|
}
|
|
);
|
|
|
|
return data;
|
|
}
|