import { UISref } from '@uirouter/react';
import classNames from 'classnames';
import * as React from 'react';
import type { Application } from '../application';
import { CloudProviderLogo } from '../cloudProvider';
import type { ILoadBalancerUsage, ISecurityGroup, ISecurityGroupGroup, IServerGroupUsage } from '../domain';
import { EntityNotifications } from '../entityTag/notifications/EntityNotifications';
import { ManagedResourceStatusIndicator } from '../managed';
import { ReactInjector } from '../reactShims';
import { SecurityGroupState } from '../state';
import './securityGroup.less';
interface ISecurityGroupProps {
application: Application;
securityGroup: ISecurityGroup;
parentGrouping: ISecurityGroupGroup;
heading: string;
}
const Heading = ({ application, parentGrouping, securityGroup, heading }: ISecurityGroupProps) => (
{(heading || '').toUpperCase()}
{!parentGrouping.isManaged && securityGroup.isManaged && (
)}
application.securityGroups.refresh()}
/>
);
const getSecurityGroupDetailsParams = (securityGroup: ISecurityGroup, application: Application) => ({
application: application.name,
region: securityGroup.region,
accountId: securityGroup.accountName,
name: securityGroup.name,
vpcId: securityGroup.vpcId,
provider: securityGroup.provider,
});
const ServerGroup = ({ serverGroup }: { serverGroup: IServerGroupUsage }) => (
);
const ServerGroups = ({ serverGroups }: { serverGroups: IServerGroupUsage[] }) => {
if (!SecurityGroupState.filterModel.asFilterModel.sortFilter.showServerGroups) {
return null;
}
return (
{serverGroups.length === 0 &&
No server groups
}
{serverGroups.length > 0 && (
<>
{serverGroups.map((serverGroup) => (
))}
>
)}
);
};
const LoadBalancer = ({
loadBalancer,
securityGroup,
}: {
loadBalancer: ILoadBalancerUsage;
securityGroup: ISecurityGroup;
}) => (
);
const LoadBalancers = ({ securityGroup }: { securityGroup: ISecurityGroup }) => {
if (!SecurityGroupState.filterModel.asFilterModel.sortFilter.showLoadBalancers) {
return null;
}
return (
{securityGroup.usages.loadBalancers.length === 0 &&
No load balancers
}
{securityGroup.usages.loadBalancers.length > 0 && (
<>
{securityGroup.usages.loadBalancers.map((loadBalancer) => (
))}
>
)}
);
};
export const SecurityGroup = (props: ISecurityGroupProps) => {
const params = getSecurityGroupDetailsParams(props.securityGroup, props.application);
// don't use - it picks up load balancer and server groups details!
const active = ReactInjector.$state.includes('**.firewallDetails', params);
return (
);
};