'use strict'; import React from 'react'; import AclButton from './../ascribe_buttons/acl_button'; import ActionPanel from '../ascribe_panel/action_panel'; import Form from './form'; import NotificationActions from '../../actions/notification_actions'; import GlobalNotificationModel from '../../models/global_notification_model'; import GlobalNotificationActions from '../../actions/global_notification_actions'; import ApiUrls from '../../constants/api_urls'; import { getLangText } from '../../utils/lang_utils.js'; let RequestActionForm = React.createClass({ propTypes: { pieceOrEditions: React.PropTypes.oneOfType([ React.PropTypes.object, React.PropTypes.array ]).isRequired, notifications: React.PropTypes.object, currentUser: React.PropTypes.object, handleSuccess: React.PropTypes.func }, isPiece(){ return this.props.pieceOrEditions.constructor !== Array; }, getUrls() { let urls = {}; if (this.props.notifications.action === 'consign'){ urls.accept = ApiUrls.ownership_consigns_confirm; urls.deny = ApiUrls.ownership_consigns_deny; } else if (this.props.notifications.action === 'unconsign'){ urls.accept = ApiUrls.ownership_unconsigns; urls.deny = ApiUrls.ownership_unconsigns_deny; } else if (this.props.notifications.action === 'loan' && !this.isPiece()){ urls.accept = ApiUrls.ownership_loans_confirm; urls.deny = ApiUrls.ownership_loans_deny; } else if (this.props.notifications.action === 'loan' && this.isPiece()){ urls.accept = ApiUrls.ownership_loans_pieces_confirm; urls.deny = ApiUrls.ownership_loans_pieces_deny; } else if (this.props.notifications.action === 'loan_request' && this.isPiece()){ urls.accept = ApiUrls.ownership_loans_pieces_request_confirm; urls.deny = ApiUrls.ownership_loans_pieces_request_deny; } return urls; }, getFormData(){ if (this.isPiece()) { return {piece_id: this.props.pieceOrEditions.id}; } else { return {bitcoin_id: this.props.pieceOrEditions.map(function(edition){ return edition.bitcoin_id; }).join()}; } }, showNotification(option, action, owner) { return () => { let message = getLangText('You have successfully') + ' ' + option + ' the ' + action + ' request ' + getLangText('from') + ' ' + owner; let notifications = new GlobalNotificationModel(message, 'success'); GlobalNotificationActions.appendGlobalNotification(notifications); this.handleSuccess(); }; }, handleSuccess() { if (this.isPiece()){ NotificationActions.fetchPieceListNotifications(); } else { NotificationActions.fetchEditionListNotifications(); } if(this.props.handleSuccess) { this.props.handleSuccess(); } }, getContent() { return ( <span> {this.props.notifications.action_str + ' by ' + this.props.notifications.by} </span> ); }, getAcceptButtonForm(urls) { if(this.props.notifications.action === 'unconsign') { return ( <AclButton availableAcls={{'acl_unconsign': true}} action="acl_unconsign" buttonAcceptClassName='inline pull-right btn-sm ascribe-margin-1px' pieceOrEditions={this.props.pieceOrEditions} currentUser={this.props.currentUser} handleSuccess={this.handleSuccess} /> ); } else if(this.props.notifications.action === 'loan_request') { return ( <AclButton availableAcls={{'acl_loan_request': true}} action="acl_loan_request" buttonAcceptName="LOAN" buttonAcceptClassName='inline pull-right btn-sm ascribe-margin-1px' pieceOrEditions={this.props.pieceOrEditions} currentUser={this.props.currentUser} handleSuccess={this.handleSuccess} /> ); } else { return ( <Form url={urls.accept} getFormData={this.getFormData} handleSuccess={ this.showNotification(getLangText('accepted'), this.props.notifications.action, this.props.notifications.by) } isInline={true} className='inline pull-right'> <button type="submit" className='btn btn-default btn-sm ascribe-margin-1px'> {getLangText('ACCEPT')} </button> </Form> ); } }, getButtonForm() { let urls = this.getUrls(); let acceptButtonForm = this.getAcceptButtonForm(urls); return ( <div> <Form url={urls.deny} isInline={true} getFormData={this.getFormData} handleSuccess={ this.showNotification(getLangText('denied'), this.props.notifications.action, this.props.notifications.by) } className='inline pull-right'> <button type="submit" className='btn btn-danger btn-delete btn-sm ascribe-margin-1px'> {getLangText('REJECT')} </button> </Form> {acceptButtonForm} </div> ); }, render() { return ( <ActionPanel content={this.getContent()} buttons={this.getButtonForm()}/> ); } }); export default RequestActionForm;