mirror of https://github.com/ascribe/onion.git
Add better PropType validation for components
This commit is contained in:
parent
1091e76447
commit
8ba9eb20b6
|
@ -111,13 +111,15 @@ let AccordionListItemWallet = React.createClass({
|
|||
},
|
||||
|
||||
getLicences() {
|
||||
const { content, whitelabel } = this.props;
|
||||
|
||||
// convert this to acl_view_licences later
|
||||
if (this.props.whitelabel && this.props.whitelabel.name === 'Creative Commons France') {
|
||||
if (whitelabel.name === 'Creative Commons France') {
|
||||
return (
|
||||
<span>
|
||||
<span>, </span>
|
||||
<a href={this.props.content.license_type.url} target="_blank">
|
||||
{getLangText('%s license', this.props.content.license_type.code)}
|
||||
<a href={content.license_type.url} target="_blank">
|
||||
{getLangText('%s license', content.license_type.code)}
|
||||
</a>
|
||||
</span>
|
||||
);
|
||||
|
|
|
@ -24,23 +24,20 @@ export default function AclButton({ action, displayName, title, tooltip }) {
|
|||
|
||||
propTypes: {
|
||||
availableAcls: React.PropTypes.object.isRequired,
|
||||
handleSuccess: React.PropTypes.func.isRequired,
|
||||
pieceOrEditions: React.PropTypes.oneOfType([
|
||||
React.PropTypes.object,
|
||||
React.PropTypes.array
|
||||
]).isRequired,
|
||||
|
||||
buttonAcceptName: React.PropTypes.string,
|
||||
buttonAcceptClassName: React.PropTypes.string,
|
||||
currentUser: React.PropTypes.object,
|
||||
email: React.PropTypes.string,
|
||||
pieceOrEditions: React.PropTypes.oneOfType([
|
||||
React.PropTypes.object,
|
||||
React.PropTypes.array
|
||||
]).isRequired,
|
||||
className: React.PropTypes.string
|
||||
handleSuccess: React.PropTypes.func
|
||||
},
|
||||
|
||||
sanitizeAction() {
|
||||
const { buttonAcceptName } = this.props;
|
||||
|
||||
return buttonAcceptName || AclInformationText.titles[action];
|
||||
return this.props.buttonAcceptName || AclInformationText.titles[action];
|
||||
},
|
||||
|
||||
render() {
|
||||
|
|
|
@ -15,10 +15,12 @@ let UnConsignRequestButton = React.createClass({
|
|||
propTypes: {
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
edition: React.PropTypes.object.isRequired,
|
||||
handleSuccess: React.PropTypes.func.isRequired
|
||||
|
||||
handleSuccess: React.PropTypes.func
|
||||
},
|
||||
|
||||
render: function () {
|
||||
const { currentUser, edition, handleSuccess } = this.props;
|
||||
return (
|
||||
<ModalWrapper
|
||||
trigger={
|
||||
|
@ -26,17 +28,18 @@ let UnConsignRequestButton = React.createClass({
|
|||
REQUEST UNCONSIGN
|
||||
</Button>
|
||||
}
|
||||
handleSuccess={this.props.handleSuccess}
|
||||
handleSuccess={handleSuccess}
|
||||
title='Request to Un-Consign'>
|
||||
<UnConsignRequestForm
|
||||
url={ApiUrls.ownership_unconsigns_request}
|
||||
id={{'bitcoin_id': this.props.edition.bitcoin_id}}
|
||||
id={{'bitcoin_id': edition.bitcoin_id}}
|
||||
message={`${getLangText('Hi')},
|
||||
|
||||
${getLangText('I request you to un-consign')} \" ${this.props.edition.title} \".
|
||||
${getLangText('I request you to un-consign')} \" ${edition.title} \".
|
||||
|
||||
${getLangText('Truly yours')},
|
||||
${this.props.currentUser.username}`}/>
|
||||
${currentUser.username}`
|
||||
} />
|
||||
</ModalWrapper>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -26,8 +26,8 @@ let EditionContainer = React.createClass({
|
|||
furtherDetailsType: React.PropTypes.func,
|
||||
|
||||
// Provided from AscribeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
// Provided from router
|
||||
location: React.PropTypes.object,
|
||||
|
|
|
@ -2,64 +2,68 @@
|
|||
|
||||
import React from 'react';
|
||||
|
||||
import GlobalNotificationModel from '../../models/global_notification_model';
|
||||
import GlobalNotificationActions from '../../actions/global_notification_actions';
|
||||
|
||||
import Form from './../ascribe_forms/form';
|
||||
import Property from './../ascribe_forms/property';
|
||||
import InputTextAreaToggable from './../ascribe_forms/input_textarea_toggable';
|
||||
|
||||
import GlobalNotificationModel from '../../models/global_notification_model';
|
||||
import GlobalNotificationActions from '../../actions/global_notification_actions';
|
||||
|
||||
import { getLangText } from '../../utils/lang_utils';
|
||||
|
||||
let Note = React.createClass({
|
||||
propTypes: {
|
||||
url: React.PropTypes.string,
|
||||
id: React.PropTypes.func,
|
||||
label: React.PropTypes.string,
|
||||
currentUser: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
id: React.PropTypes.func.isRequired,
|
||||
url: React.PropTypes.string.isRequired,
|
||||
|
||||
defaultValue: React.PropTypes.string,
|
||||
editable: React.PropTypes.bool,
|
||||
show: React.PropTypes.bool,
|
||||
label: React.PropTypes.string,
|
||||
placeholder: React.PropTypes.string,
|
||||
show: React.PropTypes.bool,
|
||||
successMessage: React.PropTypes.string
|
||||
},
|
||||
|
||||
getDefaultProps() {
|
||||
return {
|
||||
editable: true,
|
||||
show: true,
|
||||
placeholder: getLangText('Enter a note'),
|
||||
show: true,
|
||||
successMessage: getLangText('Note saved')
|
||||
};
|
||||
},
|
||||
|
||||
showNotification(){
|
||||
let notification = new GlobalNotificationModel(this.props.successMessage, 'success');
|
||||
showNotification() {
|
||||
const notification = new GlobalNotificationModel(this.props.successMessage, 'success');
|
||||
GlobalNotificationActions.appendGlobalNotification(notification);
|
||||
},
|
||||
|
||||
render() {
|
||||
if ((!!this.props.currentUser.username && this.props.editable || !this.props.editable ) && this.props.show) {
|
||||
const { currentUser, defaultValue, editable, id, label, placeholder, show, url } = this.props;
|
||||
|
||||
if ((!!currentUser.username && editable || !editable ) && show) {
|
||||
return (
|
||||
<Form
|
||||
url={this.props.url}
|
||||
getFormData={this.props.id}
|
||||
url={url}
|
||||
getFormData={id}
|
||||
handleSuccess={this.showNotification}
|
||||
disabled={!this.props.editable}>
|
||||
disabled={!editable}>
|
||||
<Property
|
||||
name='note'
|
||||
label={this.props.label}>
|
||||
label={label}>
|
||||
<InputTextAreaToggable
|
||||
rows={1}
|
||||
defaultValue={this.props.defaultValue}
|
||||
placeholder={this.props.placeholder}/>
|
||||
defaultValue={defaultValue}
|
||||
placeholder={placeholder} />
|
||||
</Property>
|
||||
<hr />
|
||||
</Form>
|
||||
);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
export default Note;
|
||||
export default Note;
|
||||
|
|
|
@ -15,11 +15,12 @@ import MediaContainer from './media_container';
|
|||
*/
|
||||
let Piece = React.createClass({
|
||||
propTypes: {
|
||||
piece: React.PropTypes.object,
|
||||
piece: React.PropTypes.object.isRequired,
|
||||
|
||||
buttons: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object,
|
||||
header: React.PropTypes.object,
|
||||
subheader: React.PropTypes.object,
|
||||
buttons: React.PropTypes.object,
|
||||
children: React.PropTypes.oneOfType([
|
||||
React.PropTypes.arrayOf(React.PropTypes.element),
|
||||
React.PropTypes.element
|
||||
|
|
|
@ -52,7 +52,7 @@ let PieceContainer = React.createClass({
|
|||
furtherDetailsType: React.PropTypes.func,
|
||||
|
||||
// Provided from AscribeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object,
|
||||
|
||||
// Provided from router
|
||||
|
|
|
@ -20,16 +20,17 @@ import { getAclFormMessage, getAclFormDataId } from '../../utils/form_utils';
|
|||
let AclFormFactory = React.createClass({
|
||||
propTypes: {
|
||||
action: React.PropTypes.oneOf(AppConstants.aclList).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
|
||||
]).isRequired,
|
||||
|
||||
autoFocusProperty: React.PropTypes.string,
|
||||
currentUser: React.PropTypes.object,
|
||||
email: React.PropTypes.string,
|
||||
handleSuccess: React.PropTypes.func,
|
||||
message: React.PropTypes.string,
|
||||
labels: React.PropTypes.object,
|
||||
showNotification: React.PropTypes.bool
|
||||
},
|
||||
|
||||
|
@ -105,7 +106,7 @@ let AclFormFactory = React.createClass({
|
|||
message={formMessage}
|
||||
id={this.getFormDataId()}
|
||||
url={this.isPiece() ? ApiUrls.ownership_loans_pieces
|
||||
: ApiUrls.ownership_loans_editions}
|
||||
: ApiUrls.ownership_loans_editions}
|
||||
handleSuccess={showNotification ? this.showSuccessNotification : handleSuccess} />
|
||||
);
|
||||
} else if (action === 'acl_loan_request') {
|
||||
|
@ -122,7 +123,7 @@ let AclFormFactory = React.createClass({
|
|||
message={formMessage}
|
||||
id={this.getFormDataId()}
|
||||
url={this.isPiece() ? ApiUrls.ownership_shares_pieces
|
||||
: ApiUrls.ownership_shares_editions}
|
||||
: ApiUrls.ownership_shares_editions}
|
||||
handleSuccess={showNotification ? this.showSuccessNotification : handleSuccess} />
|
||||
);
|
||||
} else {
|
||||
|
|
|
@ -15,30 +15,30 @@ import { getLangText } from '../../utils/lang_utils';
|
|||
|
||||
let CopyrightAssociationForm = React.createClass({
|
||||
propTypes: {
|
||||
currentUser: React.PropTypes.object
|
||||
currentUser: React.PropTypes.object.isRequired
|
||||
},
|
||||
|
||||
handleSubmitSuccess(){
|
||||
let notification = getLangText('Copyright association updated');
|
||||
notification = new GlobalNotificationModel(notification, 'success', 10000);
|
||||
handleSubmitSuccess() {
|
||||
const notification = new GlobalNotificationModel(getLangText('Copyright association updated'), 'success', 10000);
|
||||
GlobalNotificationActions.appendGlobalNotification(notification);
|
||||
},
|
||||
|
||||
getProfileFormData(){
|
||||
return {email: this.props.currentUser.email};
|
||||
getProfileFormData() {
|
||||
return { email: this.props.currentUser.email };
|
||||
},
|
||||
|
||||
render() {
|
||||
let selectedState;
|
||||
let selectDefaultValue = ' -- ' + getLangText('select an association') + ' -- ';
|
||||
const { currentUser } = this.props;
|
||||
const selectDefaultValue = ' -- ' + getLangText('select an association') + ' -- ';
|
||||
|
||||
if (this.props.currentUser && this.props.currentUser.profile
|
||||
&& this.props.currentUser.profile.copyright_association) {
|
||||
selectedState = AppConstants.copyrightAssociations.indexOf(this.props.currentUser.profile.copyright_association);
|
||||
selectedState = selectedState !== -1 ? AppConstants.copyrightAssociations[selectedState] : selectDefaultValue;
|
||||
let selectedState = selectDefaultValue;
|
||||
if (currentUser.profile && currentUser.profile.copyright_association) {
|
||||
if (AppConstants.copyrightAssociations.indexOf(currentUser.profile.copyright_association) !== -1) {
|
||||
selectedState = AppConstants.copyrightAssociations[selectedState];
|
||||
}
|
||||
}
|
||||
|
||||
if (this.props.currentUser && this.props.currentUser.email){
|
||||
if (currentUser.email) {
|
||||
return (
|
||||
<Form
|
||||
ref='form'
|
||||
|
@ -71,8 +71,9 @@ let CopyrightAssociationForm = React.createClass({
|
|||
<hr />
|
||||
</Form>
|
||||
);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -21,11 +21,12 @@ import { getLangText } from '../../utils/lang_utils.js';
|
|||
|
||||
let RequestActionForm = React.createClass({
|
||||
propTypes: {
|
||||
notifications: React.PropTypes.object.isRequired,
|
||||
pieceOrEditions: React.PropTypes.oneOfType([
|
||||
React.PropTypes.object,
|
||||
React.PropTypes.array
|
||||
]).isRequired,
|
||||
notifications: React.PropTypes.object,
|
||||
|
||||
currentUser: React.PropTypes.object,
|
||||
handleSuccess: React.PropTypes.func
|
||||
},
|
||||
|
|
|
@ -18,26 +18,26 @@ import { getLangText } from '../../utils/lang_utils.js';
|
|||
|
||||
let TransferForm = React.createClass({
|
||||
propTypes: {
|
||||
url: React.PropTypes.string,
|
||||
id: React.PropTypes.object,
|
||||
message: React.PropTypes.string,
|
||||
editions: React.PropTypes.array,
|
||||
currentUser: React.PropTypes.object,
|
||||
handleSuccess: React.PropTypes.func
|
||||
id: React.PropTypes.object.isRequired,
|
||||
url: React.PropTypes.string.isRequired,
|
||||
|
||||
handleSuccess: React.PropTypes.func,
|
||||
message: React.PropTypes.string
|
||||
},
|
||||
|
||||
getFormData(){
|
||||
getFormData() {
|
||||
return this.props.id;
|
||||
},
|
||||
|
||||
render() {
|
||||
const { handleSuccess, message, url } = this.props;
|
||||
|
||||
return (
|
||||
<Form
|
||||
ref='form'
|
||||
url={this.props.url}
|
||||
url={url}
|
||||
getFormData={this.getFormData}
|
||||
handleSuccess={this.props.handleSuccess}
|
||||
handleSuccess={handleSuccess}
|
||||
buttons={
|
||||
<div className="modal-footer">
|
||||
<p className="pull-right">
|
||||
|
@ -70,7 +70,7 @@ let TransferForm = React.createClass({
|
|||
overrideForm={true}>
|
||||
<InputTextAreaToggable
|
||||
rows={1}
|
||||
defaultValue={this.props.message}
|
||||
defaultValue={message}
|
||||
placeholder={getLangText('Enter a message...')}
|
||||
required />
|
||||
</Property>
|
||||
|
|
|
@ -4,32 +4,35 @@ import React from 'react';
|
|||
import RequestActionForm from './form_request_action';
|
||||
|
||||
let ListRequestActions = React.createClass({
|
||||
|
||||
propTypes: {
|
||||
notifications: React.PropTypes.array.isRequired,
|
||||
pieceOrEditions: React.PropTypes.oneOfType([
|
||||
React.PropTypes.object,
|
||||
React.PropTypes.array
|
||||
]).isRequired,
|
||||
|
||||
currentUser: React.PropTypes.object,
|
||||
handleSuccess: React.PropTypes.func.isRequired,
|
||||
notifications: React.PropTypes.array.isRequired
|
||||
handleSuccess: React.PropTypes.func
|
||||
},
|
||||
|
||||
render () {
|
||||
if (this.props.notifications &&
|
||||
this.props.notifications.length > 0) {
|
||||
const { currentUser, handleSuccess, notifications, pieceOrEditions } = this.props;
|
||||
|
||||
if (notifications.length) {
|
||||
return (
|
||||
<div>
|
||||
{this.props.notifications.map((notification) =>
|
||||
{notifications.map((notification) =>
|
||||
<RequestActionForm
|
||||
currentUser={this.props.currentUser}
|
||||
pieceOrEditions={ this.props.pieceOrEditions }
|
||||
currentUser={currentUser}
|
||||
handleSuccess={handleSuccess}
|
||||
notifications={notification}
|
||||
handleSuccess={this.props.handleSuccess}/>)}
|
||||
pieceOrEditions={pieceOrEditions} />
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -6,6 +6,10 @@ import Modal from 'react-bootstrap/lib/Modal';
|
|||
|
||||
let ModalWrapper = React.createClass({
|
||||
propTypes: {
|
||||
children: React.PropTypes.oneOfType([
|
||||
React.PropTypes.arrayOf(React.PropTypes.element),
|
||||
React.PropTypes.element
|
||||
]).isRequired,
|
||||
title: React.PropTypes.oneOfType([
|
||||
React.PropTypes.arrayOf(React.PropTypes.element),
|
||||
React.PropTypes.element,
|
||||
|
@ -14,11 +18,7 @@ let ModalWrapper = React.createClass({
|
|||
|
||||
handleCancel: React.PropTypes.func,
|
||||
handleSuccess: React.PropTypes.func,
|
||||
trigger: React.PropTypes.element,
|
||||
children: React.PropTypes.oneOfType([
|
||||
React.PropTypes.arrayOf(React.PropTypes.element),
|
||||
React.PropTypes.element
|
||||
])
|
||||
trigger: React.PropTypes.element
|
||||
},
|
||||
|
||||
getInitialState() {
|
||||
|
|
|
@ -34,7 +34,7 @@ export function AuthRedirect({to, when}) {
|
|||
//
|
||||
// So if when === 'loggedIn', we're checking if the user is logged in (and
|
||||
// vice versa)
|
||||
const isLoggedIn = currentUser && Object.keys(currentUser).length && currentUser.email;
|
||||
const isLoggedIn = Object.keys(currentUser).length && currentUser.email;
|
||||
const exprToValidate = when === 'loggedIn' ? isLoggedIn : !isLoggedIn;
|
||||
|
||||
// and redirect if `true`.
|
||||
|
@ -81,7 +81,7 @@ export function ProxyHandler(...redirectFunctions) {
|
|||
|
||||
propTypes: {
|
||||
// Provided from AscribeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object,
|
||||
|
||||
// Provided from router
|
||||
|
|
|
@ -26,21 +26,23 @@ let AccountSettings = React.createClass({
|
|||
whitelabel: React.PropTypes.object.isRequired
|
||||
},
|
||||
|
||||
handleSuccess(){
|
||||
handleSuccess() {
|
||||
this.props.loadUser(true);
|
||||
let notification = new GlobalNotificationModel(getLangText('Settings succesfully updated'), 'success', 5000);
|
||||
|
||||
const notification = new GlobalNotificationModel(getLangText('Settings succesfully updated'), 'success', 5000);
|
||||
GlobalNotificationActions.appendGlobalNotification(notification);
|
||||
},
|
||||
|
||||
getFormDataProfile(){
|
||||
return {'email': this.props.currentUser.email};
|
||||
getFormDataProfile() {
|
||||
return { 'email': this.props.currentUser.email };
|
||||
},
|
||||
|
||||
render() {
|
||||
let content = <AscribeSpinner color='dark-blue' size='lg'/>;
|
||||
const { currentUser, whitelabel } = this.props;
|
||||
let content = <AscribeSpinner color='dark-blue' size='lg' />;
|
||||
let profile = null;
|
||||
|
||||
if (this.props.currentUser.username) {
|
||||
if (currentUser.username) {
|
||||
content = (
|
||||
<Form
|
||||
url={ApiUrls.users_username}
|
||||
|
@ -50,7 +52,7 @@ let AccountSettings = React.createClass({
|
|||
label={getLangText('Username')}>
|
||||
<input
|
||||
type="text"
|
||||
defaultValue={this.props.currentUser.username}
|
||||
defaultValue={currentUser.username}
|
||||
placeholder={getLangText('Enter your username')}
|
||||
required/>
|
||||
</Property>
|
||||
|
@ -61,7 +63,7 @@ let AccountSettings = React.createClass({
|
|||
editable={false}>
|
||||
<input
|
||||
type="text"
|
||||
defaultValue={this.props.currentUser.email}
|
||||
defaultValue={currentUser.email}
|
||||
placeholder={getLangText('Enter your username')}
|
||||
required/>
|
||||
</Property>
|
||||
|
@ -70,7 +72,7 @@ let AccountSettings = React.createClass({
|
|||
);
|
||||
profile = (
|
||||
<AclProxy
|
||||
aclObject={this.props.whitelabel}
|
||||
aclObject={whitelabel}
|
||||
aclName="acl_view_settings_account_hash">
|
||||
<Form
|
||||
url={ApiUrls.users_profile}
|
||||
|
@ -80,7 +82,7 @@ let AccountSettings = React.createClass({
|
|||
name="hash_locally"
|
||||
className="ascribe-property-collapsible-toggle">
|
||||
<InputCheckbox
|
||||
defaultChecked={this.props.currentUser.profile.hash_locally}>
|
||||
defaultChecked={currentUser.profile.hash_locally}>
|
||||
<span>
|
||||
{' ' + getLangText('Enable hash option, e.g. slow connections or to keep piece private')}
|
||||
</span>
|
||||
|
@ -96,9 +98,9 @@ let AccountSettings = React.createClass({
|
|||
defaultExpanded={true}>
|
||||
{content}
|
||||
<AclProxy
|
||||
aclObject={this.props.whitelabel}
|
||||
aclObject={whitelabel}
|
||||
aclName="acl_view_settings_copyright_association">
|
||||
<CopyrightAssociationForm currentUser={this.props.currentUser}/>
|
||||
<CopyrightAssociationForm currentUser={currentUser} />
|
||||
</AclProxy>
|
||||
{profile}
|
||||
</CollapsibleParagraph>
|
||||
|
|
|
@ -24,8 +24,8 @@ import { truncateTextAtCharIndex } from '../../utils/general_utils';
|
|||
let ContractSettings = React.createClass({
|
||||
propTypes: {
|
||||
// Provided from AscribeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
// Provided from router
|
||||
location: React.PropTypes.object
|
||||
|
|
|
@ -24,8 +24,8 @@ let SettingsContainer = React.createClass({
|
|||
]),
|
||||
|
||||
// Provided from AscribeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
// Provided from router
|
||||
location: React.PropTypes.object
|
||||
|
@ -40,7 +40,7 @@ let SettingsContainer = React.createClass({
|
|||
|
||||
setDocumentTitle(getLangText('Account settings'));
|
||||
|
||||
if (currentUser && currentUser.username) {
|
||||
if (currentUser.username) {
|
||||
return (
|
||||
<div className="settings-container">
|
||||
<AccountSettings
|
||||
|
|
|
@ -29,7 +29,6 @@ import { constructHead } from '../utils/dom_utils';
|
|||
|
||||
let Header = React.createClass({
|
||||
propTypes: {
|
||||
// Provided from AscribeApp
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
routes: React.PropTypes.arrayOf(React.PropTypes.object).isRequired,
|
||||
whitelabel: React.PropTypes.object.isRequired
|
||||
|
|
|
@ -48,8 +48,8 @@ let PieceList = React.createClass({
|
|||
orderBy: React.PropTypes.string,
|
||||
|
||||
// Provided from AscribeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
// Provided from router
|
||||
location: React.PropTypes.object
|
||||
|
|
|
@ -31,7 +31,7 @@ let RegisterPiece = React.createClass( {
|
|||
|
||||
// Provided from AscribeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
// Provided from router
|
||||
location: React.PropTypes.object
|
||||
|
@ -69,7 +69,9 @@ let RegisterPiece = React.createClass( {
|
|||
},
|
||||
|
||||
getSpecifyEditions() {
|
||||
if (this.props.whitelabel && (this.props.whitelabel.acl_create_editions || Object.keys(this.props.whitelabel).length)) {
|
||||
const { whitelabel } = this.props;
|
||||
|
||||
if (whitelabel.acl_create_editions || Object.keys(whitelabel).length) {
|
||||
return (
|
||||
<Property
|
||||
name="num_editions"
|
||||
|
|
|
@ -32,7 +32,7 @@ const { object } = React.PropTypes;
|
|||
|
||||
const PRRegisterPieceForm = React.createClass({
|
||||
propTypes: {
|
||||
currentUser: object,
|
||||
currentUser: object.isRequired,
|
||||
location: object
|
||||
},
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ const PRHero = React.createClass({
|
|||
propTypes: {
|
||||
currentUser: React.PropTypes.shape({
|
||||
email: React.PropTypes.object
|
||||
})
|
||||
}).isRequired
|
||||
},
|
||||
|
||||
render() {
|
||||
|
|
|
@ -18,7 +18,7 @@ const { object } = React.PropTypes;
|
|||
const PRRegisterPiece = React.createClass({
|
||||
propTypes: {
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object,
|
||||
|
||||
// Provided from router
|
||||
|
@ -29,7 +29,7 @@ const PRRegisterPiece = React.createClass({
|
|||
|
||||
componentDidUpdate() {
|
||||
const { currentUser } = this.props;
|
||||
if (currentUser && currentUser.email) {
|
||||
if (currentUser.email) {
|
||||
const submittedPieceId = getCookie(currentUser.email);
|
||||
if (submittedPieceId) {
|
||||
this.history.push(`/pieces/${submittedPieceId}`);
|
||||
|
|
|
@ -28,11 +28,11 @@ let AccordionListItemPrize = React.createClass({
|
|||
content: React.PropTypes.object.isRequired,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
|
||||
className: React.PropTypes.string,
|
||||
children: React.PropTypes.oneOfType([
|
||||
React.PropTypes.arrayOf(React.PropTypes.element),
|
||||
React.PropTypes.element
|
||||
])
|
||||
]),
|
||||
className: React.PropTypes.string
|
||||
},
|
||||
|
||||
getInitialState() {
|
||||
|
|
|
@ -53,7 +53,7 @@ let PrizePieceContainer = React.createClass({
|
|||
selectedPrizeActionButton: React.PropTypes.func,
|
||||
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object,
|
||||
|
||||
// Provided from router
|
||||
|
|
|
@ -18,7 +18,7 @@ import { setDocumentTitle } from '../../../../../utils/dom_utils';
|
|||
let PrizePieceList = React.createClass({
|
||||
propTypes: {
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object,
|
||||
|
||||
// Provided from router
|
||||
|
|
|
@ -28,7 +28,7 @@ import { setDocumentTitle } from '../../../../../utils/dom_utils';
|
|||
let Settings = React.createClass({
|
||||
propTypes: {
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object,
|
||||
|
||||
// Provided from router
|
||||
|
|
|
@ -16,8 +16,9 @@ import { getLangText } from '../../../../../../utils/lang_utils';
|
|||
|
||||
const SluiceSelectedPrizeActionButton = React.createClass({
|
||||
propTypes: {
|
||||
piece: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
piece: React.PropTypes.object.isRequired,
|
||||
|
||||
startLoanDate: React.PropTypes.object,
|
||||
endLoanDate: React.PropTypes.object,
|
||||
className: React.PropTypes.string,
|
||||
|
|
|
@ -14,7 +14,7 @@ let Vivi23Landing = React.createClass({
|
|||
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
// Provided from router
|
||||
location: React.PropTypes.object
|
||||
|
|
|
@ -15,8 +15,8 @@ let WalletActionPanel = React.createClass({
|
|||
propTypes: {
|
||||
piece: React.PropTypes.object.isRequired,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
loadPiece: React.PropTypes.func.isRequired,
|
||||
handleDeleteSuccess: React.PropTypes.func.isRequired,
|
||||
loadPiece: React.PropTypes.func.isRequired,
|
||||
submitButtonType: React.PropTypes.func.isRequired
|
||||
},
|
||||
|
||||
|
|
|
@ -23,9 +23,10 @@ let WalletPieceContainer = React.createClass({
|
|||
propTypes: {
|
||||
piece: React.PropTypes.object.isRequired,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
loadPiece: React.PropTypes.func.isRequired,
|
||||
handleDeleteSuccess: React.PropTypes.func.isRequired,
|
||||
loadPiece: React.PropTypes.func.isRequired,
|
||||
submitButtonType: React.PropTypes.func.isRequired,
|
||||
|
||||
children: React.PropTypes.oneOfType([
|
||||
React.PropTypes.object,
|
||||
React.PropTypes.array
|
||||
|
|
|
@ -32,7 +32,7 @@ import { mergeOptions } from '../../../../../../utils/general_utils';
|
|||
let CylandPieceContainer = React.createClass({
|
||||
propTypes: {
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object,
|
||||
|
||||
// Provided from router
|
||||
|
|
|
@ -16,7 +16,7 @@ let CylandLanding = React.createClass({
|
|||
propTypes: {
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
// Provided from router
|
||||
location: React.PropTypes.object
|
||||
|
@ -30,7 +30,7 @@ let CylandLanding = React.createClass({
|
|||
<div className="row">
|
||||
<div className="col-xs-12">
|
||||
<div className="row" style={{border: '1px solid #CCC', padding: '2em'}}>
|
||||
<img src={this.props.whitelabel.logo} height="115"/>
|
||||
<img src={this.props.whitelabel.logo} height="115" />
|
||||
<div style={{marginTop: '1em'}}>
|
||||
{getLangText('Submissions to Cyland Archive are powered by') + ' '}
|
||||
<span>
|
||||
|
|
|
@ -11,8 +11,8 @@ import { setDocumentTitle } from '../../../../../utils/dom_utils';
|
|||
let CylandPieceList = React.createClass({
|
||||
propTypes: {
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
// Provided from router
|
||||
location: React.PropTypes.object
|
||||
|
|
|
@ -37,8 +37,8 @@ import { getAclFormMessage } from '../../../../../utils/form_utils';
|
|||
let CylandRegisterPiece = React.createClass({
|
||||
propTypes: {
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
// Provided from router
|
||||
location: React.PropTypes.object
|
||||
|
|
|
@ -24,11 +24,11 @@ let IkonotvAccordionListItem = React.createClass({
|
|||
content: React.PropTypes.object.isRequired,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
|
||||
className: React.PropTypes.string,
|
||||
children: React.PropTypes.oneOfType([
|
||||
React.PropTypes.arrayOf(React.PropTypes.element),
|
||||
React.PropTypes.element
|
||||
])
|
||||
]),
|
||||
className: React.PropTypes.string
|
||||
},
|
||||
|
||||
getInitialState() {
|
||||
|
|
|
@ -26,8 +26,8 @@ import { setDocumentTitle } from '../../../../../utils/dom_utils';
|
|||
let IkonotvContractNotifications = React.createClass({
|
||||
propTypes: {
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
// Provided from router
|
||||
location: React.PropTypes.object
|
||||
|
@ -135,7 +135,7 @@ let IkonotvContractNotifications = React.createClass({
|
|||
getCopyrightAssociationForm(){
|
||||
const { currentUser } = this.props;
|
||||
|
||||
if (currentUser && currentUser.profile && !currentUser.profile.copyright_association) {
|
||||
if (currentUser.profile && !currentUser.profile.copyright_association) {
|
||||
return (
|
||||
<div className='notification-contract-footer'>
|
||||
<h1>{getLangText('Are you a member of any copyright societies?')}</h1>
|
||||
|
@ -165,7 +165,7 @@ let IkonotvContractNotifications = React.createClass({
|
|||
<div className='container'>
|
||||
<div className='notification-contract-wrapper'>
|
||||
<div className='notification-contract-logo'>
|
||||
<img src={whitelabel.logo}/>
|
||||
<img src={whitelabel.logo} />
|
||||
<div className='notification-contract-header'>
|
||||
{getLangText('Contract')}
|
||||
</div>
|
||||
|
|
|
@ -13,7 +13,7 @@ import { setDocumentTitle } from '../../../../../utils/dom_utils';
|
|||
let IkonotvLanding = React.createClass({
|
||||
propTypes: {
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object,
|
||||
|
||||
// Provided from router
|
||||
|
@ -24,7 +24,7 @@ let IkonotvLanding = React.createClass({
|
|||
const { currentUser, location } = this.props;
|
||||
let redirect = '/login';
|
||||
|
||||
if (currentUser && currentUser.email) {
|
||||
if (currentUser.email) {
|
||||
redirect = '/collection';
|
||||
} else if (location.query.redirect) {
|
||||
redirect = '/' + location.query.redirect;
|
||||
|
|
|
@ -15,8 +15,8 @@ import { getLangText } from '../../../../../utils/lang_utils';
|
|||
let IkonotvPieceList = React.createClass({
|
||||
propTypes: {
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
// Provided from router
|
||||
location: React.PropTypes.object
|
||||
|
|
|
@ -35,8 +35,8 @@ let IkonotvRegisterPiece = React.createClass({
|
|||
handleSuccess: React.PropTypes.func,
|
||||
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
// Provided from router
|
||||
location: React.PropTypes.object
|
||||
|
|
|
@ -13,7 +13,7 @@ let LumenusLanding = React.createClass({
|
|||
propTypes: {
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
// Provided from router
|
||||
location: React.PropTypes.object
|
||||
|
@ -29,7 +29,7 @@ let LumenusLanding = React.createClass({
|
|||
<div className="row">
|
||||
<div className="col-xs-12 wp-landing-wrapper">
|
||||
<div className="row" style={{border: '1px solid #CCC', padding: '2em'}}>
|
||||
<img src={this.props.whitelabel.logo} height="150"/>
|
||||
<img src={this.props.whitelabel.logo} height="150" />
|
||||
<div style={{marginTop: '1em'}}>
|
||||
{getLangText('Artwork from the Lumenus Marketplace is powered by') + ' '}
|
||||
<span>
|
||||
|
|
|
@ -24,6 +24,7 @@ let MarketSubmitButton = React.createClass({
|
|||
availableAcls: React.PropTypes.object.isRequired,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
editions: React.PropTypes.array.isRequired,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
className: React.PropTypes.string,
|
||||
handleSuccess: React.PropTypes.func
|
||||
|
|
|
@ -15,8 +15,8 @@ let MarketPieceList = React.createClass({
|
|||
customThumbnailPlaceholder: React.PropTypes.func,
|
||||
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
// Provided from router
|
||||
location: React.PropTypes.object
|
||||
|
|
|
@ -27,7 +27,7 @@ let MarketRegisterPiece = React.createClass({
|
|||
propTypes: {
|
||||
// Provided from PrizeApp
|
||||
currentUser: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object,
|
||||
whitelabel: React.PropTypes.object.isRequired,
|
||||
|
||||
// Provided from router
|
||||
location: React.PropTypes.object
|
||||
|
|
Loading…
Reference in New Issue