import { Form, Formik } from 'formik'; import { addPlural } from '@/portainer/helpers/strings'; import { useUpdateEnvironmentsRelationsMutation } from '@/react/portainer/environments/queries/useUpdateEnvironmentsRelationsMutation'; import { notifySuccess } from '@/portainer/services/notifications'; import { BetaAlert } from '@/react/portainer/environments/update-schedules/common/BetaAlert'; import { Checkbox } from '@@/form-components/Checkbox'; import { FormControl } from '@@/form-components/FormControl'; import { OnSubmit, Modal } from '@@/modals'; import { TextTip } from '@@/Tip/TextTip'; import { Button, LoadingButton } from '@@/buttons'; import { WaitingRoomEnvironment } from '../../types'; import { GroupSelector, EdgeGroupsSelector, TagSelector } from './Selectors'; import { FormValues } from './types'; import { isAssignedToGroup } from './utils'; import { createPayload } from './createPayload'; export function AssignmentDialog({ onSubmit, environments, }: { onSubmit: OnSubmit; environments: Array; }) { const assignRelationsMutation = useUpdateEnvironmentsRelationsMutation(); const initialValues: FormValues = { group: 1, overrideGroup: false, edgeGroups: [], overrideEdgeGroups: false, tags: [], overrideTags: false, }; const hasPreAssignedEdgeGroups = environments.some( (e) => e.EdgeGroups?.length > 0 ); const hasPreAssignedTags = environments.some((e) => e.TagIds.length > 0); const hasPreAssignedGroup = environments.some((e) => isAssignedToGroup(e)); return ( onSubmit()} size="lg" > {({ values, setFieldValue, errors }) => (
{hasPreAssignedGroup && (
setFieldValue('overrideGroup', e.target.checked) } />
)}
{hasPreAssignedEdgeGroups && (
setFieldValue('overrideEdgeGroups', e.target.checked) } />
)}
Edge group(s) created here are static only, use tags to assign to dynamic edge groups
{hasPreAssignedTags && (
setFieldValue('overrideTags', e.target.checked) } />
)}
Associate
Beta Feature - This feature is currently in beta, some functions might not work as expected. } />
)}
); function handleSubmit(values: FormValues) { assignRelationsMutation.mutate( Object.fromEntries(environments.map((e) => createPayload(e, values))), { onSuccess: () => { notifySuccess('Success', 'Edge environments assigned successfully'); onSubmit(true); }, } ); } }