import React from 'react'; import RepositoryRoleForm from './RepositoryRoleForm'; import { connect } from 'react-redux'; import { translate } from 'react-i18next'; import { ErrorNotification, Subtitle, Title } from '@scm-manager/ui-components'; import { createRole, getCreateRoleFailure, getFetchVerbsFailure, isFetchVerbsPending, } from '../modules/roles'; import { RepositoryRole } from '@scm-manager/ui-types'; import { getRepositoryRolesLink, getRepositoryVerbsLink, } from '../../../modules/indexResource'; import { History } from 'history'; type Props = { repositoryRolesLink: string; error?: Error; history: History; //dispatch function addRole: (link: string, role: RepositoryRole, callback?: () => void) => void; // context objects t: (p: string) => string; }; class CreateRepositoryRole extends React.Component { repositoryRoleCreated = (role: RepositoryRole) => { const { history } = this.props; history.push('/admin/role/' + role.name + '/info'); }; createRepositoryRole = (role: RepositoryRole) => { this.props.addRole(this.props.repositoryRolesLink, role, () => this.repositoryRoleCreated(role), ); }; render() { const { t, error } = this.props; if (error) { return ; } return ( <> <Subtitle subtitle={t('repositoryRole.createSubtitle')} /> <RepositoryRoleForm submitForm={role => this.createRepositoryRole(role)} /> </> ); } } const mapStateToProps = (state, ownProps) => { const loading = isFetchVerbsPending(state); const error = getFetchVerbsFailure(state) || getCreateRoleFailure(state); const verbsLink = getRepositoryVerbsLink(state); const repositoryRolesLink = getRepositoryRolesLink(state); return { loading, error, verbsLink, repositoryRolesLink, }; }; const mapDispatchToProps = dispatch => { return { addRole: (link: string, role: RepositoryRole, callback?: () => void) => { dispatch(createRole(link, role, callback)); }, }; }; export default connect( mapStateToProps, mapDispatchToProps, )(translate('admin')(CreateRepositoryRole));