import * as React from 'react'; import type { Application, IModalComponentProps } from '@spinnaker/core'; import { TaskMonitorModal } from '@spinnaker/core'; import type { ITargetTrackingPolicyCommand, IUpsertScalingPolicyCommand } from '../ScalingPolicyWriter'; import { TargetMetricFields } from './TargetMetricFields'; import { TargetTrackingAdditionalSettings } from './TargetTrackingAdditionalSettings'; import type { IAmazonServerGroup, ITargetTrackingPolicy } from '../../../../domain'; import { ScalingPolicyCommandBuilder } from '../upsert/ScalingPolicyCommandBuilderService'; export interface IUpsertTargetTrackingModalProps extends IModalComponentProps { app: Application; policy: ITargetTrackingPolicy; serverGroup: IAmazonServerGroup; } export const UpsertTargetTrackingModal = ({ app, closeModal, dismissModal, policy, serverGroup, }: IUpsertTargetTrackingModalProps) => { const [isCustom, setIsCustom] = React.useState( Boolean(policy.targetTrackingConfiguration?.customizedMetricSpecification), ); const [command, setCommand] = React.useState({} as IUpsertScalingPolicyCommand); React.useEffect(() => { const baseCommand = ScalingPolicyCommandBuilder.buildNewCommand('TargetTracking', serverGroup, policy); setCommand(baseCommand); }, []); const mode = policy.policyName ? 'Update' : 'Create'; return ( closeModal={closeModal} dismissModal={dismissModal} title={`${mode} scaling policy`} application={app} description={`${mode} scaling policy for ${serverGroup.name}`} initialValues={command} mapValuesToTask={() => ({ application: app, job: [ { type: 'upsertScalingPolicy', ...command, }, ], })} render={() => (

Target Metric

setIsCustom(t === 'custom')} updateCommand={setCommand} />

Additional Settings

)} /> ); };