From 84e8e4612f23809c4ff19c719a1bc0df9450f731 Mon Sep 17 00:00:00 2001 From: Brett Sun Date: Tue, 10 Nov 2015 18:24:46 +0100 Subject: [PATCH] Autofocus message field in consignment form and use custom labels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For now, we’ll let the artist specify their suggested price in the consignment form’s message field. --- .../ascribe_buttons/acls/acl_button.js | 2 +- .../ascribe_forms/acl_form_factory.js | 10 ++- js/components/ascribe_forms/form_consign.js | 24 ++++--- .../ascribe_forms/input_textarea_toggable.js | 6 ++ .../list_form_request_actions.js | 4 +- js/components/ascribe_forms/property.js | 7 ++ .../lumenus_buttons/lumenus_submit_button.js | 64 +++++++++++-------- .../lumenus_additional_data_form.js | 6 +- js/utils/form_utils.js | 4 ++ 9 files changed, 84 insertions(+), 43 deletions(-) diff --git a/js/components/ascribe_buttons/acls/acl_button.js b/js/components/ascribe_buttons/acls/acl_button.js index 82650bb6..8b21f92a 100644 --- a/js/components/ascribe_buttons/acls/acl_button.js +++ b/js/components/ascribe_buttons/acls/acl_button.js @@ -31,7 +31,7 @@ export default function ({ action, displayName, title, tooltip }) { availableAcls: React.PropTypes.object.isRequired, buttonAcceptName: React.PropTypes.string, buttonAcceptClassName: React.PropTypes.string, - currentUser: React.PropTypes.object.isRequired, + currentUser: React.PropTypes.object, email: React.PropTypes.string, pieceOrEditions: React.PropTypes.oneOfType([ React.PropTypes.object, diff --git a/js/components/ascribe_forms/acl_form_factory.js b/js/components/ascribe_forms/acl_form_factory.js index d5494c2d..9422a351 100644 --- a/js/components/ascribe_forms/acl_form_factory.js +++ b/js/components/ascribe_forms/acl_form_factory.js @@ -20,9 +20,11 @@ import { getAclFormMessage, getAclFormDataId } from '../../utils/form_utils'; let AclFormFactory = React.createClass({ propTypes: { action: React.PropTypes.oneOf(AppConstants.aclList).isRequired, - currentUser: React.PropTypes.object.isRequired, + autoFocusProperty: React.PropTypes.string, + currentUser: React.PropTypes.object, email: React.PropTypes.string, message: React.PropTypes.string, + labels: React.PropTypes.object, pieceOrEditions: React.PropTypes.oneOfType([ React.PropTypes.object, React.PropTypes.array @@ -53,10 +55,12 @@ let AclFormFactory = React.createClass({ render() { const { action, + autoFocusProperty, pieceOrEditions, currentUser, email, message, + labels, handleSuccess, showNotification } = this.props; @@ -64,14 +68,16 @@ let AclFormFactory = React.createClass({ aclName: action, entities: pieceOrEditions, isPiece: this.isPiece(), - senderName: currentUser.username + senderName: currentUser && currentUser.username }); if (action === 'acl_consign') { return ( diff --git a/js/components/ascribe_forms/form_consign.js b/js/components/ascribe_forms/form_consign.js index b8417961..c659610d 100644 --- a/js/components/ascribe_forms/form_consign.js +++ b/js/components/ascribe_forms/form_consign.js @@ -17,8 +17,10 @@ let ConsignForm = React.createClass({ propTypes: { url: React.PropTypes.string, id: React.PropTypes.object, + autoFocusProperty: React.PropTypes.string, email: React.PropTypes.string, message: React.PropTypes.string, + labels: React.PropTypes.object, handleSuccess: React.PropTypes.func }, @@ -27,10 +29,12 @@ let ConsignForm = React.createClass({ }, render() { + const { autoFocusProperty, email, id, handleSuccess, message, labels, url } = this.props; + return (
}> + label={labels.email || getLangText('Email')} + editable={!email} + overrideForm={!!email}> + label={labels.message || getLangText('Personal Message')} + editable + overrideForm> diff --git a/js/components/ascribe_forms/input_textarea_toggable.js b/js/components/ascribe_forms/input_textarea_toggable.js index c17a0e5a..0be8b87a 100644 --- a/js/components/ascribe_forms/input_textarea_toggable.js +++ b/js/components/ascribe_forms/input_textarea_toggable.js @@ -7,6 +7,7 @@ import TextareaAutosize from 'react-textarea-autosize'; let InputTextAreaToggable = React.createClass({ propTypes: { + autoFocus: React.PropTypes.bool, disabled: React.PropTypes.bool, rows: React.PropTypes.number.isRequired, required: React.PropTypes.bool, @@ -23,6 +24,10 @@ let InputTextAreaToggable = React.createClass({ }, componentDidMount() { + if (this.props.autoFocus) { + this.refs.textarea.focus(); + } + this.setState({ value: this.props.defaultValue }); @@ -51,6 +56,7 @@ let InputTextAreaToggable = React.createClass({ className = className + ' ascribe-textarea-editable'; textarea = ( + {getLangText('CONSIGN TO LUMENUS')} + + ); + const consignForm = ( + + ); if (solePieceId && !canSubmit) { return ( @@ -103,11 +124,7 @@ let LumenusSubmitButton = React.createClass({ aclObject={availableAcls} aclName='acl_consign'> - {buttonTitle} - - } + trigger={triggerButton} handleSuccess={this.handleAdditionalDataSuccess.bind(this, solePieceId)} title={getLangText('Add additional information')}> - + {consignForm} ); } else { return ( - + + + {consignForm} + + ); } } diff --git a/js/components/whitelabel/wallet/components/lumenus/lumenus_forms/lumenus_additional_data_form.js b/js/components/whitelabel/wallet/components/lumenus/lumenus_forms/lumenus_additional_data_form.js index 3b69ce81..2fbf5679 100644 --- a/js/components/whitelabel/wallet/components/lumenus/lumenus_forms/lumenus_additional_data_form.js +++ b/js/components/whitelabel/wallet/components/lumenus/lumenus_forms/lumenus_additional_data_form.js @@ -51,10 +51,8 @@ let LumenusAdditionalDataForm = React.createClass({ componentDidMount() { PieceStore.listen(this.onChange); - // If the Piece store doesn't already have the piece we want loaded, load it - const { pieceId } = this.props; - if (pieceId && this.state.piece.id !== pieceId) { - PieceActions.fetchOne(pieceId); + if (this.props.pieceId) { + PieceActions.fetchOne(this.props.pieceId); } }, diff --git a/js/utils/form_utils.js b/js/utils/form_utils.js index d2d2cd29..8d12a8c1 100644 --- a/js/utils/form_utils.js +++ b/js/utils/form_utils.js @@ -72,6 +72,10 @@ export function getAclFormMessage(options) { throw new Error('Your specified aclName did not match a an acl class.'); } + if (options.additionalMessage) { + message += '\n\n' + options.additionalMessage; + } + if (options.senderName) { message += '\n\n'; message += getLangText('Truly yours,');