From d968f02b5930469135e40d13d1664526ffb84278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Daubensch=C3=BCtz?= Date: Mon, 10 Aug 2015 11:57:38 +0200 Subject: [PATCH] refactor request action form --- .../ascribe_forms/form_request_action.js | 149 +++++++++++------- js/components/ascribe_panel/action_panel.js | 5 +- 2 files changed, 94 insertions(+), 60 deletions(-) diff --git a/js/components/ascribe_forms/form_request_action.js b/js/components/ascribe_forms/form_request_action.js index b50fbb67..834ea2d5 100644 --- a/js/components/ascribe_forms/form_request_action.js +++ b/js/components/ascribe_forms/form_request_action.js @@ -2,49 +2,50 @@ import React from 'react'; -import Alert from 'react-bootstrap/lib/Alert'; - -import ApiUrls from '../../constants/api_urls'; import FormMixin from '../../mixins/form_mixin'; import AclButton from './../ascribe_buttons/acl_button'; import ActionPanel from '../ascribe_panel/action_panel'; +import Form from './form'; + +import GlobalNotificationModel from '../../models/global_notification_model'; +import GlobalNotificationActions from '../../actions/global_notification_actions'; + +import ApiUrls from '../../constants/api_urls'; -import AppConstants from '../../constants/application_constants'; import { getLangText } from '../../utils/lang_utils.js'; -let RequestActionForm = React.createClass({ - mixins: [FormMixin], - url(e){ - let edition = this.props.editions[0]; - if (e.target.id === 'request_accept'){ - if (edition.request_action === 'consign'){ - return ApiUrls.ownership_consigns_confirm; - } - else if (edition.request_action === 'unconsign'){ - return ApiUrls.ownership_unconsigns; - } - else if (edition.request_action === 'loan'){ - return ApiUrls.ownership_loans_confirm; - } - } - else if(e.target.id === 'request_deny'){ - if (edition.request_action === 'consign') { - return ApiUrls.ownership_consigns_deny; - } - else if (edition.request_action === 'unconsign') { - return ApiUrls.ownership_unconsigns_deny; - } - else if (edition.request_action === 'loan') { - return ApiUrls.ownership_loans_deny; - } - } +let RequestActionForm = React.createClass({ + propTypes: { + editions: React.PropTypes.arrayOf(React.PropTypes.object), + currentUser: React.PropTypes.object, + handleSuccess: React.PropTypes.func }, - handleRequest: function(e){ - e.preventDefault(); - this.submit(e); + getUrls() { + let edition = this.props.editions[0]; + let urls = {}; + + + if (edition.request_action === 'consign'){ + urls.accept = ApiUrls.ownership_consigns_confirm; + urls.deny = ApiUrls.ownership_consigns_deny; + } else if (edition.request_action === 'unconsign'){ + urls.accept = ApiUrls.ownership_unconsigns; + urls.deny = ApiUrls.ownership_unconsigns_deny; + } else if (edition.request_action === 'loan'){ + urls.accept = ApiUrls.ownership_loans_confirm; + urls.deny = ApiUrls.ownership_loans_deny; + } + + return urls; + }, + + getBitcoinIds(){ + return this.props.editions.map(function(edition){ + return edition.bitcoin_id; + }); }, getFormData() { @@ -53,6 +54,19 @@ let RequestActionForm = React.createClass({ }; }, + showNotification(option, action, owner) { + return () => { + let message = getLangText('You have successfully') + ' ' + option + ' ' + action + ' ' + getLangText('to') + ' ' + owner; + + let notification = new GlobalNotificationModel(message, 'success'); + GlobalNotificationActions.appendGlobalNotification(notification); + + if(this.props.handleSuccess) { + this.props.handleSuccess(); + } + }; + }, + getContent() { let edition = this.props.editions[0]; let message = edition.owner + ' ' + getLangText('requests you') + ' ' + edition.request_action + ' ' + getLangText('this edition%s', '.'); @@ -64,15 +78,11 @@ let RequestActionForm = React.createClass({ ); }, - renderForm() { + getAcceptButton() { let edition = this.props.editions[0]; - let buttonAccept = ( -
{getLangText('ACCEPT')} -
); - if (edition.request_action === 'unconsign') { - buttonAccept = ( + + if(edition.request_action === 'unconsign') { + return ( ); - } - let buttons = ( - - - {buttonAccept} - - -
{getLangText('REJECT')}
-
-
- ); - if (this.state.submitted){ - buttons = ( - - - + } else { + return ( + ); } + }, - + getButtonForm() { + let edition = this.props.editions[0]; + let urls = this.getUrls(); + let acceptButton = this.getAcceptButton(); + + return ( +
+
+ +
+
+ {acceptButton} +
+
+ ); + }, + + render() { return ( + buttons={this.getButtonForm()}/> ); } }); diff --git a/js/components/ascribe_panel/action_panel.js b/js/components/ascribe_panel/action_panel.js index 2ad3a255..148ea03d 100644 --- a/js/components/ascribe_panel/action_panel.js +++ b/js/components/ascribe_panel/action_panel.js @@ -6,7 +6,10 @@ import classnames from 'classnames'; let ActionPanel = React.createClass({ propTypes: { title: React.PropTypes.string, - content: React.PropTypes.string, + content: React.PropTypes.oneOfType([ + React.PropTypes.string, + React.PropTypes.element + ]), buttons: React.PropTypes.element, onClick: React.PropTypes.func, ignoreFocus: React.PropTypes.bool