mirror of
https://github.com/ascribe/onion.git
synced 2024-12-22 17:33:14 +01:00
Merge pull request #69 from ascribe/AD-1346-hide-piece-registration-if-cant-submit
AD-1346 Hide piece registration if user cannot submit to whitelabel
This commit is contained in:
commit
0f8094ef55
@ -9,10 +9,13 @@ class NotificationActions {
|
||||
constructor() {
|
||||
this.generateActions(
|
||||
'updatePieceListNotifications',
|
||||
'flushPieceListNotifications',
|
||||
'updateEditionListNotifications',
|
||||
'flushEditionListNotifications',
|
||||
'updateEditionNotifications',
|
||||
'updatePieceNotifications',
|
||||
'updateContractAgreementListNotifications'
|
||||
'updateContractAgreementListNotifications',
|
||||
'flushContractAgreementListNotifications'
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -37,6 +37,7 @@ let PieceList = React.createClass({
|
||||
bulkModalButtonListType: React.PropTypes.func,
|
||||
canLoadPieceList: React.PropTypes.bool,
|
||||
redirectTo: React.PropTypes.string,
|
||||
shouldRedirect: React.PropTypes.func,
|
||||
customSubmitButton: React.PropTypes.element,
|
||||
customThumbnailPlaceholder: React.PropTypes.func,
|
||||
filterParams: React.PropTypes.array,
|
||||
@ -114,7 +115,11 @@ let PieceList = React.createClass({
|
||||
},
|
||||
|
||||
componentDidUpdate() {
|
||||
if (this.props.redirectTo && this.state.unfilteredPieceListCount === 0) {
|
||||
const { redirectTo, shouldRedirect } = this.props;
|
||||
const { unfilteredPieceListCount } = this.state;
|
||||
|
||||
if (redirectTo && unfilteredPieceListCount === 0 &&
|
||||
(typeof shouldRedirect === 'function' && shouldRedirect(unfilteredPieceListCount))) {
|
||||
// FIXME: hack to redirect out of the dispatch cycle
|
||||
window.setTimeout(() => this.history.pushState(null, this.props.redirectTo, this.props.location.query), 0);
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ let PrizeApp = React.createClass({
|
||||
if (!path || history.isActive('/login') || history.isActive('/signup')) {
|
||||
header = <Hero />;
|
||||
} else {
|
||||
header = <Header showAddWork={false} routes={routes}/>;
|
||||
header = <Header routes={routes}/>;
|
||||
}
|
||||
|
||||
return (
|
||||
|
@ -106,22 +106,27 @@ let IkonotvContractNotifications = React.createClass({
|
||||
|
||||
handleConfirm() {
|
||||
let contractAgreement = this.state.contractAgreementListNotifications[0].contract_agreement;
|
||||
OwnershipFetcher.confirmContractAgreement(contractAgreement).then(
|
||||
() => this.handleConfirmSuccess()
|
||||
);
|
||||
OwnershipFetcher
|
||||
.confirmContractAgreement(contractAgreement)
|
||||
.then(this.handleConfirmSuccess);
|
||||
},
|
||||
|
||||
handleConfirmSuccess() {
|
||||
let notification = new GlobalNotificationModel(getLangText('You have accepted the conditions'), 'success', 5000);
|
||||
GlobalNotificationActions.appendGlobalNotification(notification);
|
||||
|
||||
// Flush contract notifications and refetch
|
||||
NotificationActions.flushContractAgreementListNotifications();
|
||||
NotificationActions.fetchContractAgreementListNotifications();
|
||||
|
||||
this.history.pushState(null, '/collection');
|
||||
},
|
||||
|
||||
handleDeny() {
|
||||
let contractAgreement = this.state.contractAgreementListNotifications[0].contract_agreement;
|
||||
OwnershipFetcher.denyContractAgreement(contractAgreement).then(
|
||||
() => this.handleDenySuccess()
|
||||
);
|
||||
OwnershipFetcher
|
||||
.denyContractAgreement(contractAgreement)
|
||||
.then(this.handleDenySuccess);
|
||||
},
|
||||
|
||||
handleDenySuccess() {
|
||||
|
@ -1,15 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
|
||||
import PieceList from '../../../../piece_list';
|
||||
|
||||
import UserActions from '../../../../../actions/user_actions';
|
||||
import UserStore from '../../../../../stores/user_store';
|
||||
import NotificationStore from '../../../../../stores/notification_store';
|
||||
|
||||
import IkonotvAccordionListItem from './ikonotv_accordion_list/ikonotv_accordion_list_item';
|
||||
|
||||
import { getLangText } from '../../../../../utils/lang_utils';
|
||||
import { setDocumentTitle } from '../../../../../utils/dom_utils';
|
||||
import { mergeOptions } from '../../../../../utils/general_utils';
|
||||
import { getLangText } from '../../../../../utils/lang_utils';
|
||||
|
||||
|
||||
let IkonotvPieceList = React.createClass({
|
||||
@ -18,20 +21,33 @@ let IkonotvPieceList = React.createClass({
|
||||
},
|
||||
|
||||
getInitialState() {
|
||||
return UserStore.getState();
|
||||
return mergeOptions(
|
||||
NotificationStore.getState(),
|
||||
UserStore.getState()
|
||||
);
|
||||
},
|
||||
|
||||
componentDidMount() {
|
||||
NotificationStore.listen(this.onChange);
|
||||
UserStore.listen(this.onChange);
|
||||
|
||||
UserActions.fetchCurrentUser();
|
||||
},
|
||||
|
||||
componentWillUnmount() {
|
||||
NotificationStore.unlisten(this.onChange);
|
||||
UserStore.unlisten(this.onChange);
|
||||
},
|
||||
|
||||
onChange(state) {
|
||||
this.setState(state);
|
||||
|
||||
},
|
||||
|
||||
redirectIfNoContractNotifications() {
|
||||
const { contractAgreementListNotifications } = this.state;
|
||||
|
||||
return contractAgreementListNotifications && !contractAgreementListNotifications.length;
|
||||
},
|
||||
|
||||
render() {
|
||||
@ -41,6 +57,7 @@ let IkonotvPieceList = React.createClass({
|
||||
<div>
|
||||
<PieceList
|
||||
redirectTo="/register_piece?slide_num=0"
|
||||
shouldRedirect={this.redirectIfNoContractNotifications}
|
||||
accordionListItemType={IkonotvAccordionListItem}
|
||||
filterParams={[{
|
||||
label: getLangText('Show works I have'),
|
||||
|
@ -35,7 +35,7 @@ let WalletApp = React.createClass({
|
||||
&& (['cyland', 'ikonotv', 'lumenus', '23vivi']).indexOf(subdomain) > -1) {
|
||||
header = (<div className="hero"/>);
|
||||
} else {
|
||||
header = <Header showAddWork={true} routes={routes} />;
|
||||
header = <Header routes={routes} />;
|
||||
}
|
||||
|
||||
// In react-router 1.0, Routes have no 'name' property anymore. To keep functionality however,
|
||||
|
@ -70,7 +70,8 @@ let ROUTES = {
|
||||
<Route
|
||||
path='register_piece'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(CylandRegisterPiece)}
|
||||
headerTitle='+ NEW WORK'/>
|
||||
headerTitle='+ NEW WORK'
|
||||
aclName='acl_wallet_submit' />
|
||||
<Route
|
||||
path='collection'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(CylandPieceList)}
|
||||
@ -145,7 +146,7 @@ let ROUTES = {
|
||||
path='register_piece'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(IkonotvRegisterPiece)}
|
||||
headerTitle='+ NEW WORK'
|
||||
aclName='acl_create_piece'/>
|
||||
aclName='acl_wallet_submit' />
|
||||
<Route
|
||||
path='collection'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(IkonotvPieceList)}
|
||||
@ -183,7 +184,8 @@ let ROUTES = {
|
||||
<Route
|
||||
path='register_piece'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(MarketRegisterPiece)}
|
||||
headerTitle='+ NEW WORK'/>
|
||||
headerTitle='+ NEW WORK'
|
||||
aclName='acl_wallet_submit' />
|
||||
<Route
|
||||
path='collection'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(MarketPieceList)}
|
||||
|
@ -10,6 +10,8 @@ class NotificationStore {
|
||||
constructor() {
|
||||
this.pieceListNotifications = {};
|
||||
this.editionListNotifications = {};
|
||||
// Need to determine if contract agreement notifications have been loaded or not,
|
||||
// so we use null here instead of an empty array
|
||||
this.contractAgreementListNotifications = null;
|
||||
this.editionNotifications = null;
|
||||
this.pieceNotifications = null;
|
||||
@ -20,6 +22,10 @@ class NotificationStore {
|
||||
this.pieceListNotifications = res.notifications;
|
||||
}
|
||||
|
||||
onFlushPieceListNotifications() {
|
||||
this.pieceListNotifications = [];
|
||||
}
|
||||
|
||||
onUpdatePieceNotifications(res) {
|
||||
this.pieceNotifications = res.notification;
|
||||
}
|
||||
@ -28,6 +34,10 @@ class NotificationStore {
|
||||
this.editionListNotifications = res.notifications;
|
||||
}
|
||||
|
||||
onFlushPieceListNotifications() {
|
||||
this.editionListNotifications = [];
|
||||
}
|
||||
|
||||
onUpdateEditionNotifications(res) {
|
||||
this.editionNotifications = res.notification;
|
||||
}
|
||||
@ -36,6 +46,9 @@ class NotificationStore {
|
||||
this.contractAgreementListNotifications = res.notifications;
|
||||
}
|
||||
|
||||
onFlushContractAgreementListNotifications() {
|
||||
this.contractAgreementListNotifications = null;
|
||||
}
|
||||
}
|
||||
|
||||
export default alt.createStore(NotificationStore, 'NotificationStore');
|
||||
|
Loading…
Reference in New Issue
Block a user