75 lines
2.2 KiB
TypeScript
75 lines
2.2 KiB
TypeScript
import { Formik } from 'formik';
|
|
import { useRouter } from '@uirouter/react';
|
|
|
|
import { ContainerInstanceFormValues } from '@/react/azure/types';
|
|
import * as notifications from '@/portainer/services/notifications';
|
|
import { useCurrentUser } from '@/react/hooks/useUser';
|
|
import { useEnvironmentId } from '@/react/hooks/useEnvironmentId';
|
|
|
|
import { validationSchema } from './CreateContainerInstanceForm.validation';
|
|
import { useFormState, useLoadFormState } from './useLoadFormState';
|
|
import { useCreateInstanceMutation } from './useCreateInstanceMutation';
|
|
import { CreateContainerInstanceInnerForm } from './CreateContainerInstanceInnerForm';
|
|
|
|
export function CreateContainerInstanceForm({
|
|
defaultValues,
|
|
}: {
|
|
defaultValues?: Partial<ContainerInstanceFormValues>;
|
|
}) {
|
|
const environmentId = useEnvironmentId();
|
|
const { isPureAdmin } = useCurrentUser();
|
|
|
|
const { providers, subscriptions, resourceGroups, isLoading } =
|
|
useLoadFormState(environmentId);
|
|
|
|
const { initialValues, subscriptionOptions } = useFormState(
|
|
subscriptions,
|
|
resourceGroups,
|
|
providers,
|
|
defaultValues
|
|
);
|
|
|
|
const router = useRouter();
|
|
|
|
const { mutateAsync } = useCreateInstanceMutation(
|
|
resourceGroups,
|
|
environmentId
|
|
);
|
|
|
|
if (isLoading) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<Formik<ContainerInstanceFormValues>
|
|
initialValues={initialValues}
|
|
validationSchema={() => validationSchema(isPureAdmin)}
|
|
onSubmit={onSubmit}
|
|
validateOnMount
|
|
validateOnChange
|
|
enableReinitialize
|
|
>
|
|
{(formikProps) => (
|
|
<CreateContainerInstanceInnerForm
|
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
{...formikProps}
|
|
subscriptionOptions={subscriptionOptions}
|
|
environmentId={environmentId}
|
|
resourceGroups={resourceGroups}
|
|
providers={providers}
|
|
/>
|
|
)}
|
|
</Formik>
|
|
);
|
|
|
|
async function onSubmit(values: ContainerInstanceFormValues) {
|
|
try {
|
|
await mutateAsync(values);
|
|
notifications.success('Container successfully created', values.name);
|
|
router.stateService.go('azure.containerinstances');
|
|
} catch (e) {
|
|
notifications.error('Failure', e as Error, 'Unable to create container');
|
|
}
|
|
}
|
|
}
|