import React from 'react'; import { CollapsibleSection, confirmNotManaged, HelpField, ModalInjector, timestamp, Tooltip } from '@spinnaker/core'; import type { IAmazonServerGroupDetailsSectionProps } from './IAmazonServerGroupDetailsSectionProps'; import { AWSProviderSettings } from '../../../aws.settings'; import type { IScalingProcess } from '../../../domain'; import { AutoScalingProcessService } from '../scalingProcesses/AutoScalingProcessService'; export interface IScalingProcessesDetailsSectionState { autoScalingProcesses: IScalingProcess[]; scalingPoliciesDisabled: boolean; scheduledActionsDisabled: boolean; } export class ScalingProcessesDetailsSection extends React.Component< IAmazonServerGroupDetailsSectionProps, IScalingProcessesDetailsSectionState > { constructor(props: IAmazonServerGroupDetailsSectionProps) { super(props); this.state = this.getState(props); } private toggleScalingProcesses = (): void => { const { app, serverGroup } = this.props; confirmNotManaged(serverGroup, app).then( (isNotManaged) => isNotManaged && ModalInjector.modalService.open({ templateUrl: require('../scalingProcesses/modifyScalingProcesses.html'), controller: 'ModifyScalingProcessesCtrl as ctrl', resolve: { serverGroup: () => serverGroup, application: () => app, processes: () => this.state.autoScalingProcesses, }, }), ); }; private getState(props: IAmazonServerGroupDetailsSectionProps): IScalingProcessesDetailsSectionState { const { serverGroup } = props; const autoScalingProcesses: IScalingProcess[] = AutoScalingProcessService.normalizeScalingProcesses(serverGroup); const scalingPoliciesDisabled = serverGroup.scalingPolicies.length > 0 && autoScalingProcesses .filter((p) => !p.enabled) .some((p) => ['Launch', 'Terminate', 'AlarmNotification'].includes(p.name)); const scheduledActionsDisabled = serverGroup.scheduledActions.length > 0 && autoScalingProcesses .filter((p) => !p.enabled) .some((p) => ['Launch', 'Terminate', 'ScheduledAction'].includes(p.name)); return { autoScalingProcesses, scalingPoliciesDisabled, scheduledActionsDisabled }; } public componentWillReceiveProps(nextProps: IAmazonServerGroupDetailsSectionProps): void { this.setState(this.getState(nextProps)); } public render(): JSX.Element { const { autoScalingProcesses, scalingPoliciesDisabled, scheduledActionsDisabled } = this.state; return ( (

{chevron} {scalingPoliciesDisabled && ( )} {scheduledActionsDisabled && ( )} Scaling Processes

)} > {AWSProviderSettings.adHocInfraWritesEnabled && ( Edit Scaling Processes )}
); } }