diff --git a/src/components/Promised/Promised.js b/src/components/Promised/Promised.js index e834c711..92c7b89f 100644 --- a/src/components/Promised/Promised.js +++ b/src/components/Promised/Promised.js @@ -3,7 +3,7 @@ * depends on resolution of a Promise. * * How to use: - *
{v}
} /> + * {v}} renderRejected={v => v} /> */ import { Component, PropTypes } from 'react'; @@ -30,19 +30,21 @@ class Promised extends Component { } render() { - const { onError, onSuccess } = this.props; - return this.state.error ? onError(this.state.error) : onSuccess(this.state.value); + const { renderFulfilled, renderRejected } = this.props; + return this.state.error ? renderRejected(this.state.error) : renderFulfilled(this.state.value); } } -Promised.defaultProps = { onError: e => e }; +Promised.defaultProps = { renderRejected: e => e }; -const { func, object } = PropTypes; +const { func, shape } = PropTypes; Promised.propTypes = { - promise: object.isRequired, - onSuccess: func.isRequired, - onError: func, + promise: shape({ + then: func.isRequired, // usually promises are detected from this single function alone + }).isRequired, + renderFulfilled: func.isRequired, + renderRejected: func.isRequired, }; export default Promised; diff --git a/src/containers/EditListingForm/EditListingForm.js b/src/containers/EditListingForm/EditListingForm.js index 80047e43..33bb443a 100644 --- a/src/containers/EditListingForm/EditListingForm.js +++ b/src/containers/EditListingForm/EditListingForm.js @@ -14,7 +14,11 @@ const TITLE_MAX_LENGTH = 60; const readImage = file => new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = e => resolve(e.target.result); - reader.onerror = e => reject(new Error(`Error reading ${file.name}: ${e.target.result}`)); + reader.onerror = e => { + // eslint-disable-next-line + console.error(`Error ${e} happened while reading ${file.name}: ${e.target.result}`); + reject(new Error(`Error reading ${file.name}: ${e.target.result}`)); + }; reader.readAsDataURL(file); }); @@ -89,16 +93,16 @@ class EditListingForm extends Component { this.onImageUploadHandler = this.onImageUploadHandler.bind(this); } + componentDidMount() { + this.handleInitialize(); + } + componentWillReceiveProps(nextProps) { if (!isEqual(this.props.images, nextProps.images)) { nextProps.change('images', nextProps.images); } } - componentDidMount() { - this.handleInitialize(); - } - onImageUploadHandler(event) { const file = event.target.files[0]; if (file) { @@ -148,7 +152,7 @@ class EditListingForm extends Component { { + renderFulfilled={dataURL => { return (
{encodeURIComponent(i.file.name)} @@ -156,6 +160,7 @@ class EditListingForm extends Component {
); }} + renderRejected={() =>
Could not read file
} /> ); })} diff --git a/src/containers/EditListingPage/EditListingPage.js b/src/containers/EditListingPage/EditListingPage.js index 75440537..845bcc0e 100644 --- a/src/containers/EditListingPage/EditListingPage.js +++ b/src/containers/EditListingPage/EditListingPage.js @@ -38,10 +38,6 @@ export class EditListingPageComponent extends Component { } } - onSubmit(submitListing) { - return values => submitListing(values); - } - render() { const { data, intl, onCreateListing, onImageUpload, page, params, type } = this.props; const isNew = type === 'new'; @@ -80,7 +76,7 @@ export class EditListingPageComponent extends Component { images={images} initData={initData} onImageUpload={onImageUpload} - onSubmit={this.onSubmit(onCreateListing)} + onSubmit={onSubmit(onCreateListing)} saveActionMsg={saveActionMsg} />