76 lines
2.2 KiB
JavaScript
76 lines
2.2 KiB
JavaScript
import { defineMessages, injectIntl } from 'react-intl';
|
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
|
import React from 'react';
|
|
|
|
import Loader from '../ui/Loader';
|
|
import NodesAssignmentForm from './NodesAssignmentForm';
|
|
import RoleCard from './RoleCard';
|
|
|
|
const messages = defineMessages({
|
|
loadingDeploymentRoles: {
|
|
id: 'Roles.loadingDeploymentRoles',
|
|
defaultMessage: 'Loading Deployment Roles...'
|
|
}
|
|
});
|
|
|
|
class Roles extends React.Component {
|
|
componentDidMount() {
|
|
this.props.fetchRoles();
|
|
this.props.fetchNodes();
|
|
}
|
|
|
|
componentDidUpdate() {
|
|
if(!this.props.loaded && !this.props.isFetchingRoles) {
|
|
this.props.fetchRoles();
|
|
this.props.fetchNodes();
|
|
}
|
|
}
|
|
|
|
renderRoleCards() {
|
|
return this.props.roles.map(role => {
|
|
return (
|
|
<div className="col-xs-6 col-sm-4 col-md-3 col-lg-2" key={role.name}>
|
|
<RoleCard
|
|
name={role.name}
|
|
title={role.title}
|
|
identifier={role.identifier}
|
|
fetchNodes={this.props.fetchNodes}
|
|
assignedNodesCountParameter={this.props.nodeCountParametersByRole.get(role.identifier)}
|
|
availableNodesCount={this.props.availableNodesCountsByRole.get(role.identifier)}/>
|
|
</div>
|
|
);
|
|
});
|
|
}
|
|
|
|
render() {
|
|
return (
|
|
<div className="panel panel-default roles-panel">
|
|
<div className="panel-body">
|
|
<Loader loaded={this.props.loaded}
|
|
content={this.props.intl.formatMessage(messages.loadingDeploymentRoles)}
|
|
height={40}>
|
|
<div className="row-cards-pf">
|
|
<NodesAssignmentForm>
|
|
{this.renderRoleCards()}
|
|
</NodesAssignmentForm>
|
|
</div>
|
|
</Loader>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
Roles.propTypes = {
|
|
availableNodesCountsByRole: ImmutablePropTypes.map.isRequired,
|
|
fetchNodes: React.PropTypes.func.isRequired,
|
|
fetchRoles: React.PropTypes.func.isRequired,
|
|
intl: React.PropTypes.object,
|
|
isFetchingNodes: React.PropTypes.bool,
|
|
isFetchingRoles: React.PropTypes.bool,
|
|
loaded: React.PropTypes.bool.isRequired,
|
|
nodeCountParametersByRole: ImmutablePropTypes.map.isRequired,
|
|
roles: React.PropTypes.array.isRequired
|
|
};
|
|
|
|
export default injectIntl(Roles);
|