flex-template-web/src/components/EditListingDescriptionPanel/EditListingDescriptionPanel.js
2017-10-17 09:50:22 +03:00

83 lines
2.3 KiB
JavaScript

import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import { FormattedMessage } from 'react-intl';
import { ensureListing } from '../../util/data';
import { createSlug } from '../../util/urlHelpers';
import { NamedLink } from '../../components';
import { EditListingDescriptionForm } from '../../containers';
import css from './EditListingDescriptionPanel.css';
const EditListingDescriptionPanel = props => {
const {
className,
rootClassName,
listing,
onSubmit,
onChange,
submitButtonText,
panelUpdated,
updateInProgress,
errors,
} = props;
const classes = classNames(rootClassName || css.root, className);
const currentListing = ensureListing(listing);
const { description, title } = currentListing.attributes;
const listingTitle = title || '';
const listingLink = currentListing.id ? (
<NamedLink name="ListingPage" params={{ id: currentListing.id.uuid, slug: createSlug(title) }}>
{listingTitle}
</NamedLink>
) : (
''
);
const panelTitle = currentListing.id ? (
<FormattedMessage
id="EditListingDescriptionPanel.title"
values={{ listingTitle: listingLink }}
/>
) : (
<FormattedMessage id="EditListingDescriptionPanel.createListingTitle" />
);
return (
<div className={classes}>
<h1 className={css.title}>{panelTitle}</h1>
<EditListingDescriptionForm
className={css.form}
initialValues={{ title, description }}
saveActionMsg={submitButtonText}
onSubmit={onSubmit}
onChange={onChange}
updated={panelUpdated}
updateError={errors.updateListingError}
updateInProgress={updateInProgress}
/>
</div>
);
};
const { func, object, string, bool } = PropTypes;
EditListingDescriptionPanel.defaultProps = {
className: null,
rootClassName: null,
listing: null,
};
EditListingDescriptionPanel.propTypes = {
className: string,
rootClassName: string,
listing: object, // TODO Should be propTypes.listing after API support is added.
onSubmit: func.isRequired,
onChange: func.isRequired,
submitButtonText: string.isRequired,
panelUpdated: bool.isRequired,
updateInProgress: bool.isRequired,
errors: object.isRequired,
};
export default EditListingDescriptionPanel;