diff --git a/js/components/ascribe_accordion_list/accordion_list_item.js b/js/components/ascribe_accordion_list/accordion_list_item.js index 1f5d9ff8..be7ab6de 100644 --- a/js/components/ascribe_accordion_list/accordion_list_item.js +++ b/js/components/ascribe_accordion_list/accordion_list_item.js @@ -11,6 +11,8 @@ import AccordionListItemEditionWidget from './accordion_list_item_edition_widget import CreateEditionsForm from '../ascribe_forms/create_editions_form'; import PieceListActions from '../../actions/piece_list_actions'; +import PieceListStore from '../../stores/piece_list_store'; + import EditionListActions from '../../actions/edition_list_actions'; import GlobalNotificationModel from '../../models/global_notification_model'; @@ -20,6 +22,7 @@ import AclProxy from '../acl_proxy'; import SubmitToPrizeButton from '../ascribe_buttons/submit_to_prize_button'; import { getLangText } from '../../utils/lang_utils'; +import { mergeOptions } from '../../utils/general_utils'; let Link = Router.Link; @@ -33,9 +36,24 @@ let AccordionListItem = React.createClass({ mixins: [Router.Navigation], getInitialState() { - return { - showCreateEditionsDialog: false - }; + return mergeOptions( + { + showCreateEditionsDialog: false + }, + PieceListStore.getState() + ); + }, + + componentDidMount() { + PieceListStore.listen(this.onChange); + }, + + componentWillUnmount() { + PieceListStore.unlisten(this.onChange); + }, + + onChange(state) { + this.setState(state); }, getGlyphicon(){ @@ -61,6 +79,13 @@ let AccordionListItem = React.createClass({ this.toggleCreateEditionsDialog(); }, + handleSubmitPrizeSuccess(response) { + PieceListActions.fetchPieceList(this.state.page, this.state.pageSize, this.state.search, this.state.orderBy, this.state.orderAsc); + + let notification = new GlobalNotificationModel(response.message, 'success', 10000); + GlobalNotificationActions.appendGlobalNotification(notification); + }, + onPollingSuccess(pieceId, numEditions) { PieceListActions.updatePropertyForPiece({ pieceId, @@ -132,7 +157,8 @@ let AccordionListItem = React.createClass({ show={this.props.content.prize_name === null}> + piece={this.props.content} + handleSuccess={this.handleSubmitPrizeSuccess}/> diff --git a/js/components/ascribe_buttons/delete_button.js b/js/components/ascribe_buttons/delete_button.js index bd319a2b..085f153a 100644 --- a/js/components/ascribe_buttons/delete_button.js +++ b/js/components/ascribe_buttons/delete_button.js @@ -55,7 +55,7 @@ let DeleteButton = React.createClass({ if(this.props.editions && this.props.editions.constructor !== Array && this.props.editions.acl.acl_unshare) { content = ; title = getLangText('Remove Edition from Collection'); - } else { + } else if(this.props.piece && this.props.piece.acl.acl_unshare) { content = ; title = getLangText('Remove Piece from Collection'); } diff --git a/js/components/ascribe_buttons/submit_to_prize_button.js b/js/components/ascribe_buttons/submit_to_prize_button.js index 62b9995f..3565a3ee 100644 --- a/js/components/ascribe_buttons/submit_to_prize_button.js +++ b/js/components/ascribe_buttons/submit_to_prize_button.js @@ -3,19 +3,38 @@ import React from 'react'; import classNames from 'classnames'; +import ModalWrapper from '../ascribe_modal/modal_wrapper'; +import PieceSubmitToPrizeForm from '../ascribe_forms/form_submit_to_prize'; + import { getLangText } from '../../utils/lang_utils'; let SubmitToPrizeButton = React.createClass({ propTypes: { - className: React.PropTypes.string + className: React.PropTypes.string, + handleSuccess: React.PropTypes.func, + piece: React.PropTypes.object.isRequired }, - render() { + getSubmitButton() { return ( + + ); + }, + + render() { + return ( + + + + ); } }); diff --git a/js/components/ascribe_forms/form_submit_to_prize.js b/js/components/ascribe_forms/form_submit_to_prize.js new file mode 100644 index 00000000..b4f45193 --- /dev/null +++ b/js/components/ascribe_forms/form_submit_to_prize.js @@ -0,0 +1,57 @@ +'use strict'; + +import React from 'react'; + +import Form from '../ascribe_forms/form'; + +import AppConstants from '../../constants/application_constants'; +import ApiUrls from '../../constants/api_urls'; + +import { getLangText } from '../../utils/lang_utils.js'; + +let PieceSubmitToPrizeForm = React.createClass({ + propTypes: { + piece: React.PropTypes.object, + handleSuccess: React.PropTypes.func, + + // this is set by ModalWrapper automatically + onRequestHide: React.PropTypes.func + }, + + getFormData() { + return this.props.piece; + }, + + render() { + console.log(this.props); + return ( +
+

+ + +

+ } + spinner={ +
+ +
}> +

{getLangText('Are you sure you want to submit to the art prize?')}

+

{getLangText('This is an irrevocable action%s', '.')}

+
+ ); + } +}); + + +export default PieceSubmitToPrizeForm; diff --git a/js/mixins/form_mixin.js b/js/mixins/form_mixin.js index 3fc074da..c04f52ed 100644 --- a/js/mixins/form_mixin.js +++ b/js/mixins/form_mixin.js @@ -4,7 +4,7 @@ import requests from '../utils/requests'; import React from 'react'; import AlertDismissable from '../components/ascribe_forms/alert'; -import { getLangText } from '../utils/lang_utils.js' +import { getLangText } from '../utils/lang_utils.js'; export const FormMixin = { propTypes: {