mirror of https://github.com/portainer/portainer
63 lines
1.6 KiB
TypeScript
63 lines
1.6 KiB
TypeScript
import { useMutation } from '@tanstack/react-query';
|
|
|
|
import { EdgeGroup } from '@/react/edge/edge-groups/types';
|
|
import { EnvironmentId } from '@/react/portainer/environments/types';
|
|
|
|
import { createJobFromFile } from './createJobFromFile';
|
|
import { createJobFromFileContent } from './createJobFromFileContent';
|
|
|
|
export function useCreateEdgeJobMutation() {
|
|
return useMutation(createEdgeJob);
|
|
}
|
|
|
|
export type BasePayload = {
|
|
name: string;
|
|
cronExpression: string;
|
|
recurring: boolean;
|
|
|
|
edgeGroups: Array<EdgeGroup['Id']>;
|
|
endpoints: Array<EnvironmentId>;
|
|
};
|
|
|
|
export type CreateEdgeJobPayload =
|
|
| {
|
|
method: 'file';
|
|
payload: BasePayload & {
|
|
/** File to upload */
|
|
file: File;
|
|
};
|
|
}
|
|
| {
|
|
method: 'string';
|
|
payload: BasePayload & {
|
|
/** Content of the Job file */
|
|
fileContent: string;
|
|
};
|
|
};
|
|
|
|
function createEdgeJob({ method, payload }: CreateEdgeJobPayload) {
|
|
switch (method) {
|
|
case 'file':
|
|
return createJobFromFile({
|
|
CronExpression: payload.cronExpression,
|
|
Recurring: payload.recurring,
|
|
Name: payload.name,
|
|
EdgeGroups: payload.edgeGroups,
|
|
Endpoints: payload.endpoints,
|
|
File: payload.file,
|
|
});
|
|
|
|
case 'string':
|
|
return createJobFromFileContent({
|
|
cronExpression: payload.cronExpression,
|
|
recurring: payload.recurring,
|
|
name: payload.name,
|
|
edgeGroups: payload.edgeGroups,
|
|
endpoints: payload.endpoints,
|
|
fileContent: payload.fileContent,
|
|
});
|
|
default:
|
|
throw new Error('Invalid method');
|
|
}
|
|
}
|