1
0
mirror of https://github.com/ascribe/onion.git synced 2024-11-15 01:25:17 +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 { 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: {
action: React.PropTypes.oneOf(AppConstants.aclList).isRequired,
availableAcls: React.PropTypes.object.isRequired,
buttonAcceptName: React.PropTypes.string,
buttonAcceptClassName: React.PropTypes.string,
@ -31,7 +37,6 @@ let AclButton = React.createClass({
React.PropTypes.object,
React.PropTypes.array
]).isRequired,
title: React.PropTypes.string,
handleSuccess: React.PropTypes.func.isRequired,
className: React.PropTypes.string
},
@ -41,19 +46,17 @@ let AclButton = React.createClass({
if (this.props.buttonAcceptName) {
return this.props.buttonAcceptName;
}
return this.props.action.split('acl_')[1].toUpperCase();
return action.split('acl_')[1].toUpperCase();
},
render() {
const {
action,
availableAcls,
buttonAcceptClassName,
currentUser,
email,
pieceOrEditions,
handleSuccess,
title } = this.props;
handleSuccess } = this.props;
return (
<AclProxy
@ -79,5 +82,4 @@ let AclButton = React.createClass({
);
}
});
export default AclButton;
}

View File

@ -4,24 +4,11 @@ import React from 'react';
import AclButton from './acl_button';
import { omitFromObject } from '../../../utils/general_utils';
import { getLangText } from '../../../utils/lang_utils';
let ConsignButton = React.createClass({
propTypes: {
...omitFromObject(AclButton.propTypes, ['action']),
email: React.PropTypes.string
},
render() {
return (
<AclButton
{...this.props}
action='acl_consign'
title={getLangText('Consign artwork')}
tooltip={getLangText('Have someone else sell the artwork')} />
);
}
export default AclButton({
action: 'acl_consign',
displayName: 'ConsignButton',
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 { omitFromObject } from '../../../utils/general_utils';
import { getLangText } from '../../../utils/lang_utils';
let LoanButton = React.createClass({
propTypes: {
...omitFromObject(AclButton.propTypes, ['action']),
email: React.PropTypes.string
},
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 AclButton({
action: 'acl_loan',
displayName: 'LoanButton',
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 { omitFromObject } from '../../../utils/general_utils';
import { getLangText } from '../../../utils/lang_utils';
let LoanButton = React.createClass({
propTypes: omitFromObject(AclButton.propTypes, ['action']),
render() {
return (
<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 AclButton({
action: 'acl_loan_request',
displayName: 'LoanRequestButton',
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 { omitFromObject } from '../../../utils/general_utils';
import { getLangText } from '../../../utils/lang_utils';
let ShareButton = React.createClass({
propTypes: omitFromObject(AclButton.propTypes, ['action']),
render() {
return (
<AclButton
{...this.props}
action='acl_share'
title={getLangText('Share artwork')}
tooltip={getLangText('Share the artwork')} />
);
}
export default AclButton({
action: 'acl_share',
displayName: 'ShareButton',
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 { omitFromObject } from '../../../utils/general_utils';
import { getLangText } from '../../../utils/lang_utils';
let TransferButton = React.createClass({
propTypes: omitFromObject(AclButton.propTypes, ['action']),
render() {
return (
<AclButton
{...this.props}
action='acl_transfer'
title={getLangText('Transfer artwork')}
tooltip={getLangText('Transfer the ownership of the artwork')} />
);
}
export default AclButton({
action: 'acl_transfer',
displayName: 'TransferButton',
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 { omitFromObject } from '../../../utils/general_utils';
import { getLangText } from '../../../utils/lang_utils';
let UnconsignButton = React.createClass({
propTypes: omitFromObject(AclButton.propTypes, ['action']),
render() {
return (
<AclButton
{...this.props}
action='acl_unconsign'
title={getLangText('Unconsign artwork')}
tooltip={getLangText('Have the owner manage his sales again')} />
);
}
export default AclButton({
action: 'acl_unconsign',
displayName: 'UnconsignButton',
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 React.createClass({
displayName: 'AuthProxyHandler',
propTypes: {
location: object
},

View File

@ -11,7 +11,7 @@ let constants = {
'serverUrl': window.SERVER_URL,
'baseUrl': window.BASE_URL,
'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'],
'version': 0.1,