import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { Alert, Spinner } from 'patternfly-react'; import { translate as __ } from 'foremanReact/common/I18n'; import loadRepositorySetRepos from '../../../redux/actions/RedHatRepositories/repositorySetRepositories'; import RepositorySetRepository from './RepositorySetRepository/'; import { yStream } from './RepositorySetRepositoriesHelpers'; class RepositorySetRepositories extends Component { componentDidMount() { const { contentId, productId } = this.props; if (this.props.data.loading) { this.props.loadRepositorySetRepos(contentId, productId); } } sortedRepos = repos => [...repos.filter(({ enabled }) => !enabled)] .sort((repo1, repo2) => { const repo1YStream = yStream(repo1.releasever || ''); const repo2YStream = yStream(repo2.releasever || ''); if (repo1YStream < repo2YStream) { return -1; } if (repo2YStream < repo1YStream) { return 1; } if (repo1.arch === repo2.arch) { const repo1MajorMinor = repo1.releasever.split('.'); const repo2MajorMinor = repo2.releasever.split('.'); const repo1Major = parseInt(repo1MajorMinor[0], 10); const repo2Major = parseInt(repo2MajorMinor[0], 10); if (repo1Major === repo2Major) { const repo1Minor = parseInt(repo1MajorMinor[1], 10); const repo2Minor = parseInt(repo2MajorMinor[1], 10); if (repo1Minor === repo2Minor) { return 0; } return (repo1Minor > repo2Minor) ? -1 : 1; } return (repo1Major > repo2Major) ? -1 : 1; } return (repo1.arch > repo2.arch) ? -1 : 1; }); render() { const { data, type } = this.props; if (data.error) { return ( {data.error.displayMessage} ); } const availableRepos = this.sortedRepos(data.repositories).map(repo => ( )); const repoMessage = (data.repositories.length > 0 && availableRepos.length === 0 ? __('All available architectures for this repo are enabled.') : __('No repositories available.')); return ( {availableRepos.length ? availableRepos :
{repoMessage}
}
); } } RepositorySetRepositories.propTypes = { loadRepositorySetRepos: PropTypes.func.isRequired, contentId: PropTypes.number.isRequired, productId: PropTypes.number.isRequired, type: PropTypes.string, data: PropTypes.shape({ loading: PropTypes.bool.isRequired, repositories: PropTypes.arrayOf(PropTypes.object), error: PropTypes.shape({ displayMessage: PropTypes.string, }), }).isRequired, }; RepositorySetRepositories.defaultProps = { type: '', }; const mapStateToProps = ( { katello: { redHatRepositories: { repositorySetRepositories } } }, props, ) => ({ data: repositorySetRepositories[props.contentId] || { loading: true, repositories: [], error: null, }, }); export default connect(mapStateToProps, { loadRepositorySetRepos, })(RepositorySetRepositories);