import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; import { defineMessages, injectIntl } from 'react-intl'; import { Link } from 'react-router'; import classnames from 'classnames'; import Form from '../../lib/Form'; import Toggle from '../ui/Toggle'; import Button from '../ui/Button'; const messages = defineMessages({ headline: { id: 'import.headline', defaultMessage: 'Import your Ferdi 4 services', }, notSupportedHeadline: { id: 'import.notSupportedHeadline', defaultMessage: 'Services not yet supported in Ferdi 5', }, submitButtonLabel: { id: 'import.submit.label', defaultMessage: 'Import {count} services', }, skipButtonLabel: { id: 'import.skip.label', defaultMessage: 'I want to add services manually', }, }); @observer class Import extends Component { static propTypes = { services: MobxPropTypes.arrayOrObservableArray.isRequired, onSubmit: PropTypes.func.isRequired, isSubmitting: PropTypes.bool.isRequired, inviteRoute: PropTypes.string.isRequired, }; componentDidMount() { const config = { fields: { import: [ ...this.props.services .filter(s => s.recipe) .map(s => ({ fields: { add: { default: true, options: s, }, }, })), ], }, }; this.form = new Form(config, this.props.intl); } submit(e) { const { services } = this.props; e.preventDefault(); this.form.submit({ onSuccess: form => { const servicesImport = form .values() .import.map( (value, i) => !value.add || services.filter(s => s.recipe)[i], ) .filter(s => typeof s !== 'boolean'); this.props.onSubmit({ services: servicesImport }); }, onError: () => {}, }); } render() { const { intl } = this.props; const { services, isSubmitting, inviteRoute } = this.props; const availableServices = services.filter(s => s.recipe); const unavailableServices = services.filter(s => !s.recipe); return (
this.submit(e)} >

{intl.formatMessage(messages.headline)}

{this.form.$('import').map((service, i) => ( ))}
{availableServices[i].name !== '' ? availableServices[i].name : availableServices[i].recipe.name}
{unavailableServices.length > 0 && (
{intl.formatMessage(messages.notSupportedHeadline)}

{services .filter(s => !s.recipe) .map((service, i) => ( {service.name !== '' ? service.name : service.service} {unavailableServices.length > i + 1 ? ', ' : ''} ))}

)} {isSubmitting ? (
); } } export default injectIntl(Import);