'use strict'; import React from 'react'; import Row from 'react-bootstrap/lib/Row'; import Col from 'react-bootstrap/lib/Col'; import Button from 'react-bootstrap/lib/Button'; import Glyphicon from 'react-bootstrap/lib/Glyphicon'; import UserActions from '../actions/user_actions'; import UserStore from '../stores/user_store'; import MediaPlayer from './ascribe_media/media_player'; import CollapsibleParagraph from './ascribe_collapsible/collapsible_paragraph'; import Form from './ascribe_forms/form'; import Property from './ascribe_forms/property'; import InputTextAreaToggable from './ascribe_forms/input_textarea_toggable'; import PieceExtraDataForm from './ascribe_forms/form_piece_extradata'; import RequestActionForm from './ascribe_forms/form_request_action'; import EditionActions from '../actions/edition_actions'; import AclButtonList from './ascribe_buttons/acl_button_list'; import GlobalNotificationModel from '../models/global_notification_model'; import GlobalNotificationActions from '../actions/global_notification_actions'; import requests from '../utils/requests'; import apiUrls from '../constants/api_urls'; /** * This is the component that implements display-specific functionality */ let Edition = React.createClass({ propTypes: { edition: React.PropTypes.object, loadEdition: React.PropTypes.func }, getInitialState() { return UserStore.getState(); }, componentDidMount() { UserStore.listen(this.onChange); UserActions.fetchCurrentUser(); }, componentWillUnmount() { UserStore.unlisten(this.onChange); }, onChange(state) { this.setState(state); }, render() { let thumbnail = this.props.edition.thumbnail; let mimetype = this.props.edition.digital_work.mime; let extraData = null; if (this.props.edition.digital_work.encoding_urls) { extraData = this.props.edition.digital_work.encoding_urls.map(e => { return { url: e.url, type: e.label }; }); } let bitcoinIdValue = ( {this.props.edition.bitcoin_id} ); let hashOfArtwork = ( {this.props.edition.hash_as_address} ); let ownerAddress = ( {this.props.edition.btc_owner_address_noprefix} ); return (

-1 || this.props.edition.public_note)}> -1 || Object.keys(this.props.edition.extra_data).length > 0}> 0}> 0}> 0}>
{bitcoinIdValue}
{hashOfArtwork}
{ownerAddress}

); } }); let EditionHeader = React.createClass({ propTypes: { edition: React.PropTypes.object }, render() { var titleHtml =
{this.props.edition.title}
; return (

); } }); let EditionSummary = React.createClass({ propTypes: { edition: React.PropTypes.object }, handleSuccess(){ EditionActions.fetchOne(this.props.edition.id); }, showNotification(response){ this.handleSuccess(); let notification = new GlobalNotificationModel(response.notification, 'success'); GlobalNotificationActions.appendGlobalNotification(notification); }, render() { let status = null; if (this.props.edition.status.length > 0){ status = ; } let actions = null; if (this.props.edition.request_action && this.props.edition.request_action.length > 0){ actions = ( ); } else { actions = ( ); } return (
{status}
{actions}
); } }); let EditionDetailProperty = React.createClass({ propTypes: { label: React.PropTypes.string, value: React.PropTypes.oneOfType([ React.PropTypes.string, React.PropTypes.element ]), separator: React.PropTypes.string, labelClassName: React.PropTypes.string, valueClassName: React.PropTypes.string }, getDefaultProps() { return { separator: ':', labelClassName: 'col-xs-5 col-sm-4 col-md-3 col-lg-3', valueClassName: 'col-xs-7 col-sm-8 col-md-9 col-lg-9' }; }, render() { return (
{ this.props.label + this.props.separator}
{ this.props.value }
); } }); let EditionDetailHistoryIterator = React.createClass({ propTypes: { history: React.PropTypes.array }, render() { return (
{this.props.history.map((historicalEvent, i) => { return ( ); })}
); } }); let EditionPersonalNote = React.createClass({ propTypes: { edition: React.PropTypes.object, currentUser: React.PropTypes.object, handleSuccess: React.PropTypes.func }, showNotification(){ this.props.handleSuccess(); let notification = new GlobalNotificationModel('Private note saved', 'success'); GlobalNotificationActions.appendGlobalNotification(notification); }, render() { if (this.props.currentUser.username && true || false) { return (

); } return null; } }); let EditionPublicEditionNote = React.createClass({ propTypes: { edition: React.PropTypes.object, handleSuccess: React.PropTypes.func }, showNotification(){ this.props.handleSuccess(); let notification = new GlobalNotificationModel('Public note saved', 'success'); GlobalNotificationActions.appendGlobalNotification(notification); }, render() { let isEditable = this.props.edition.acl.indexOf('edit') > -1; if (this.props.edition.acl.indexOf('edit') > -1 || this.props.edition.public_note){ return (

); } return null; } }); let EditionFurtherDetails = React.createClass({ propTypes: { edition: React.PropTypes.object, handleSuccess: React.PropTypes.func }, showNotification(){ this.props.handleSuccess(); let notification = new GlobalNotificationModel('Details updated', 'success'); GlobalNotificationActions.appendGlobalNotification(notification); }, render() { let editable = this.props.edition.acl.indexOf('edit') > -1; return ( ); } }); export default Edition;