1
0
mirror of https://github.com/ascribe/onion.git synced 2024-11-15 09:35:10 +01:00

Improve DRYness of acl buttons

The React dev tools don’t seem to be able to automatically pick up the
displayName when using createClass from within another function, so
it’s added here to give clarity when debugging.
This commit is contained in:
Brett Sun 2015-11-06 15:10:29 +01:00
parent f2555aefcc
commit 56eff0d9ed
9 changed files with 95 additions and 157 deletions

View File

@ -19,9 +19,15 @@ import ApiUrls from '../../../constants/api_urls';
import { getAclFormMessage, getAclFormDataId } from '../../../utils/form_utils'; import { getAclFormMessage, getAclFormDataId } from '../../../utils/form_utils';
import { getLangText } from '../../../utils/lang_utils'; import { getLangText } from '../../../utils/lang_utils';
let AclButton = React.createClass({ export default function ({ action, displayName, title, tooltip }) {
if (AppConstants.aclList.indexOf(action) < 0) {
console.warn('Your specified aclName did not match a an acl class.');
}
return React.createClass({
displayName: displayName,
propTypes: { propTypes: {
action: React.PropTypes.oneOf(AppConstants.aclList).isRequired,
availableAcls: React.PropTypes.object.isRequired, availableAcls: React.PropTypes.object.isRequired,
buttonAcceptName: React.PropTypes.string, buttonAcceptName: React.PropTypes.string,
buttonAcceptClassName: React.PropTypes.string, buttonAcceptClassName: React.PropTypes.string,
@ -31,7 +37,6 @@ let AclButton = React.createClass({
React.PropTypes.object, React.PropTypes.object,
React.PropTypes.array React.PropTypes.array
]).isRequired, ]).isRequired,
title: React.PropTypes.string,
handleSuccess: React.PropTypes.func.isRequired, handleSuccess: React.PropTypes.func.isRequired,
className: React.PropTypes.string className: React.PropTypes.string
}, },
@ -41,19 +46,17 @@ let AclButton = React.createClass({
if (this.props.buttonAcceptName) { if (this.props.buttonAcceptName) {
return this.props.buttonAcceptName; return this.props.buttonAcceptName;
} }
return this.props.action.split('acl_')[1].toUpperCase(); return action.split('acl_')[1].toUpperCase();
}, },
render() { render() {
const { const {
action,
availableAcls, availableAcls,
buttonAcceptClassName, buttonAcceptClassName,
currentUser, currentUser,
email, email,
pieceOrEditions, pieceOrEditions,
handleSuccess, handleSuccess } = this.props;
title } = this.props;
return ( return (
<AclProxy <AclProxy
@ -78,6 +81,5 @@ let AclButton = React.createClass({
</AclProxy> </AclProxy>
); );
} }
}); });
}
export default AclButton;

View File

@ -4,24 +4,11 @@ import React from 'react';
import AclButton from './acl_button'; import AclButton from './acl_button';
import { omitFromObject } from '../../../utils/general_utils';
import { getLangText } from '../../../utils/lang_utils'; import { getLangText } from '../../../utils/lang_utils';
let ConsignButton = React.createClass({ export default AclButton({
propTypes: { action: 'acl_consign',
...omitFromObject(AclButton.propTypes, ['action']), displayName: 'ConsignButton',
email: React.PropTypes.string title: getLangText('Consign artwork'),
}, tooltip: getLangText('Have someone else sell the artwork')
render() {
return (
<AclButton
{...this.props}
action='acl_consign'
title={getLangText('Consign artwork')}
tooltip={getLangText('Have someone else sell the artwork')} />
);
}
}); });
export default ConsignButton;

View File

@ -4,24 +4,11 @@ import React from 'react';
import AclButton from './acl_button'; import AclButton from './acl_button';
import { omitFromObject } from '../../../utils/general_utils';
import { getLangText } from '../../../utils/lang_utils'; import { getLangText } from '../../../utils/lang_utils';
let LoanButton = React.createClass({ export default AclButton({
propTypes: { action: 'acl_loan',
...omitFromObject(AclButton.propTypes, ['action']), displayName: 'LoanButton',
email: React.PropTypes.string title: getLangText('Loan artwork'),
}, tooltip: getLangText('Loan your artwork for a limited period of time')
render() {
return (
<AclButton
{...this.props}
action='acl_loan'
title={getLangText('Loan artwork')}
tooltip={getLangText('Loan your artwork for a limited period of time')} />
);
}
}); });
export default LoanButton;

View File

@ -4,21 +4,11 @@ import React from 'react';
import AclButton from './acl_button'; import AclButton from './acl_button';
import { omitFromObject } from '../../../utils/general_utils';
import { getLangText } from '../../../utils/lang_utils'; import { getLangText } from '../../../utils/lang_utils';
let LoanButton = React.createClass({ export default AclButton({
propTypes: omitFromObject(AclButton.propTypes, ['action']), action: 'acl_loan_request',
displayName: 'LoanRequestButton',
render() { title: getLangText('Loan artwork'),
return ( tooltip: getLangText('Someone requested you to loan your artwork for a limited period of time')
<AclButton
{...this.props}
action='acl_loan_request'
title={getLangText('Loan artwork')}
tooltip={getLangText('Someone requested you to loan your artwork for a limited period of time')} />
);
}
}); });
export default LoanButton;

View File

@ -4,21 +4,11 @@ import React from 'react';
import AclButton from './acl_button'; import AclButton from './acl_button';
import { omitFromObject } from '../../../utils/general_utils';
import { getLangText } from '../../../utils/lang_utils'; import { getLangText } from '../../../utils/lang_utils';
let ShareButton = React.createClass({ export default AclButton({
propTypes: omitFromObject(AclButton.propTypes, ['action']), action: 'acl_share',
displayName: 'ShareButton',
render() { title: getLangText('Share artwork'),
return ( tooltip: getLangText('Share the artwork')
<AclButton
{...this.props}
action='acl_share'
title={getLangText('Share artwork')}
tooltip={getLangText('Share the artwork')} />
);
}
}); });
export default ShareButton;

View File

@ -4,21 +4,11 @@ import React from 'react';
import AclButton from './acl_button'; import AclButton from './acl_button';
import { omitFromObject } from '../../../utils/general_utils';
import { getLangText } from '../../../utils/lang_utils'; import { getLangText } from '../../../utils/lang_utils';
let TransferButton = React.createClass({ export default AclButton({
propTypes: omitFromObject(AclButton.propTypes, ['action']), action: 'acl_transfer',
displayName: 'TransferButton',
render() { title: getLangText('Transfer artwork'),
return ( tooltip: getLangText('Transfer the ownership of the artwork')
<AclButton
{...this.props}
action='acl_transfer'
title={getLangText('Transfer artwork')}
tooltip={getLangText('Transfer the ownership of the artwork')} />
);
}
}); });
export default TransferButton;

View File

@ -4,21 +4,11 @@ import React from 'react';
import AclButton from './acl_button'; import AclButton from './acl_button';
import { omitFromObject } from '../../../utils/general_utils';
import { getLangText } from '../../../utils/lang_utils'; import { getLangText } from '../../../utils/lang_utils';
let UnconsignButton = React.createClass({ export default AclButton({
propTypes: omitFromObject(AclButton.propTypes, ['action']), action: 'acl_unconsign',
displayName: 'UnconsignButton',
render() { title: getLangText('Unconsign artwork'),
return ( tooltip: getLangText('Have the owner manage his sales again')
<AclButton
{...this.props}
action='acl_unconsign'
title={getLangText('Unconsign artwork')}
tooltip={getLangText('Have the owner manage his sales again')} />
);
}
}); });
export default UnconsignButton;

View File

@ -31,6 +31,8 @@ export default function AuthProxyHandler({to, when}) {
return (Component) => { return (Component) => {
return React.createClass({ return React.createClass({
displayName: 'AuthProxyHandler',
propTypes: { propTypes: {
location: object location: object
}, },

View File

@ -11,7 +11,7 @@ let constants = {
'serverUrl': window.SERVER_URL, 'serverUrl': window.SERVER_URL,
'baseUrl': window.BASE_URL, 'baseUrl': window.BASE_URL,
'aclList': ['acl_coa', 'acl_consign', 'acl_delete', 'acl_download', 'acl_edit', 'acl_create_editions', 'acl_view_editions', 'aclList': ['acl_coa', 'acl_consign', 'acl_delete', 'acl_download', 'acl_edit', 'acl_create_editions', 'acl_view_editions',
'acl_loan', 'acl_share', 'acl_transfer', 'acl_unconsign', 'acl_unshare', 'acl_view', 'acl_loan', 'acl_loan_request', 'acl_share', 'acl_transfer', 'acl_unconsign', 'acl_unshare', 'acl_view',
'acl_withdraw_transfer', 'acl_wallet_submit'], 'acl_withdraw_transfer', 'acl_wallet_submit'],
'version': 0.1, 'version': 0.1,