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

contract agreement notifications

This commit is contained in:
diminator 2015-09-04 11:49:55 +02:00
parent 6a1f58fdb4
commit 9b7a69bc20
11 changed files with 153 additions and 8 deletions

View File

@ -1,6 +1,7 @@
'use strict'; 'use strict';
import alt from '../alt'; import alt from '../alt';
import Q from 'q';
import NotificationFetcher from '../fetchers/notification_fetcher'; import NotificationFetcher from '../fetchers/notification_fetcher';
@ -10,7 +11,8 @@ class NotificationActions {
'updatePieceListNotifications', 'updatePieceListNotifications',
'updateEditionListNotifications', 'updateEditionListNotifications',
'updateEditionNotifications', 'updateEditionNotifications',
'updatePieceNotifications' 'updatePieceNotifications',
'updateContractAgreementListNotifications'
); );
} }
@ -49,6 +51,18 @@ class NotificationActions {
}) })
.catch((err) => console.logGlobal(err)); .catch((err) => console.logGlobal(err));
} }
fetchContractAgreementListNotifications() {
return Q.Promise((resolve, reject) => {
NotificationFetcher
.fetchContractAgreementListNotifications()
.then((res) => {
this.actions.updateContractAgreementListNotifications(res);
resolve(res);
})
.catch((err) => console.logGlobal(err));
});
}
} }
export default alt.createActions(NotificationActions); export default alt.createActions(NotificationActions);

View File

@ -26,6 +26,7 @@ import EventActions from './actions/event_actions';
import GoogleAnalyticsHandler from './third_party/ga'; import GoogleAnalyticsHandler from './third_party/ga';
import RavenHandler from './third_party/raven'; import RavenHandler from './third_party/raven';
import IntercomHandler from './third_party/intercom'; import IntercomHandler from './third_party/intercom';
import NotificationsHandler from './third_party/notifications';
/* eslint-enable */ /* eslint-enable */
initLogging(); initLogging();
@ -73,7 +74,7 @@ class AppGateway {
} }
EventActions.applicationWillBoot(settings); EventActions.applicationWillBoot(settings);
Router.run(getRoutes(type, subdomain), Router.HistoryLocation, (App) => { window.appRouter = Router.run(getRoutes(type, subdomain), Router.HistoryLocation, (App) => {
React.render( React.render(
<App />, <App />,
document.getElementById('main') document.getElementById('main')

View File

@ -60,8 +60,8 @@ let ContractAgreementForm = React.createClass({
}, },
getContracts() { getContracts() {
if (this.state.contractList && this.state.contractList.count > 0) { if (this.state.contractList && this.state.contractList.length > 0) {
let contractList = this.state.contractList.results; let contractList = this.state.contractList;
return ( return (
<Property <Property
name='contract' name='contract'
@ -81,7 +81,7 @@ let ContractAgreementForm = React.createClass({
<option <option
name={i} name={i}
key={i} key={i}
value={ contract.name }> value={ contract.id }>
{ contract.name } { contract.name }
</option> </option>
); );

View File

@ -0,0 +1,36 @@
'use strict';
import React from 'react';
import NotificationStore from '../stores/notification_store';
import { mergeOptions } from '../utils/general_utils';
let ContractNotification = React.createClass({
getInitialState() {
return mergeOptions(
NotificationStore.getState()
);
},
componentDidMount() {
NotificationStore.listen(this.onChange);
},
componentWillUnmount() {
NotificationStore.unlisten(this.onChange);
},
onChange(state) {
this.setState(state);
},
render() {
return (
null
);
}
});
export default ContractNotification;

View File

@ -0,0 +1,45 @@
'use strict';
import React from 'react';
import NotificationStore from '../../../../../stores/notification_store';
import WhitelabelStore from '../../../../../stores/whitelabel_store';
import { mergeOptions } from '../../../../../utils/general_utils';
let IkonotvContractNotifications = React.createClass({
getInitialState() {
return mergeOptions(
NotificationStore.getState(),
WhitelabelStore.getState()
);
},
componentDidMount() {
NotificationStore.listen(this.onChange);
WhitelabelStore.listen(this.onChange);
},
componentWillUnmount() {
NotificationStore.unlisten(this.onChange);
WhitelabelStore.unlisten(this.onChange);
},
onChange(state) {
this.setState(state);
},
render() {
console.log(this.state)
return (
<div className='container'>
<div className='text-center'>
<img src={this.state.whitelabel.logo} />
</div>
</div>
);
}
});
export default IkonotvContractNotifications;

View File

@ -22,6 +22,7 @@ import CylandPieceList from './components/cyland/cyland_piece_list';
import IkonotvPieceList from './components/ikonotv/ikonotv_piece_list'; import IkonotvPieceList from './components/ikonotv/ikonotv_piece_list';
import IkonotvRequestLoan from './components/ikonotv/ikonotv_request_loan'; import IkonotvRequestLoan from './components/ikonotv/ikonotv_request_loan';
import IkonotvPieceContainer from './components/ikonotv/ascribe_detail/ikonotv_piece_container'; import IkonotvPieceContainer from './components/ikonotv/ascribe_detail/ikonotv_piece_container';
import IkonotvContractNotifications from './components/ikonotv/ikonotv_contract_notifications';
import CCRegisterPiece from './components/cc/cc_register_piece'; import CCRegisterPiece from './components/cc/cc_register_piece';
@ -77,6 +78,7 @@ let ROUTES = {
<Route name="piece" path="pieces/:pieceId" handler={IkonotvPieceContainer} /> <Route name="piece" path="pieces/:pieceId" handler={IkonotvPieceContainer} />
<Route name="edition" path="editions/:editionId" handler={EditionContainer} /> <Route name="edition" path="editions/:editionId" handler={EditionContainer} />
<Route name="settings" path="settings" handler={SettingsContainer} /> <Route name="settings" path="settings" handler={SettingsContainer} />
<Route name="contract_notifications" path="verify" handler={IkonotvContractNotifications} />
</Route> </Route>
) )
}; };

View File

@ -31,6 +31,7 @@ let ApiUrls = {
'notification_piece': AppConstants.apiEndpoint + 'notifications/pieces/${piece_id}/', 'notification_piece': AppConstants.apiEndpoint + 'notifications/pieces/${piece_id}/',
'notification_editionlist': AppConstants.apiEndpoint + 'notifications/editions/', 'notification_editionlist': AppConstants.apiEndpoint + 'notifications/editions/',
'notification_edition': AppConstants.apiEndpoint + 'notifications/editions/${edition_id}/', 'notification_edition': AppConstants.apiEndpoint + 'notifications/editions/${edition_id}/',
'notification_contractagreementlist': AppConstants.apiEndpoint + 'notifications/contract_agreements/',
'ownership_contract_agreements': AppConstants.apiEndpoint + 'ownership/contract_agreements/', 'ownership_contract_agreements': AppConstants.apiEndpoint + 'ownership/contract_agreements/',
'ownership_consigns': AppConstants.apiEndpoint + 'ownership/consigns/', 'ownership_consigns': AppConstants.apiEndpoint + 'ownership/consigns/',
'ownership_consigns_confirm': AppConstants.apiEndpoint + 'ownership/consigns/confirm/', 'ownership_consigns_confirm': AppConstants.apiEndpoint + 'ownership/consigns/confirm/',
@ -52,7 +53,7 @@ let ApiUrls = {
'ownership_unconsigns_deny': AppConstants.apiEndpoint + 'ownership/unconsigns/deny/', 'ownership_unconsigns_deny': AppConstants.apiEndpoint + 'ownership/unconsigns/deny/',
'ownership_unconsigns_request': AppConstants.apiEndpoint + 'ownership/unconsigns/request/', 'ownership_unconsigns_request': AppConstants.apiEndpoint + 'ownership/unconsigns/request/',
'ownership_contract': AppConstants.apiEndpoint + 'ownership/contracts/${contract_id}', 'ownership_contract': AppConstants.apiEndpoint + 'ownership/contracts/${contract_id}',
"ownership_contract_list": AppConstants.apiEndpoint + 'ownership/contracts/', 'ownership_contract_list': AppConstants.apiEndpoint + 'ownership/contracts/',
'piece': AppConstants.apiEndpoint + 'pieces/${piece_id}/', 'piece': AppConstants.apiEndpoint + 'pieces/${piece_id}/',
'piece_extradata': AppConstants.apiEndpoint + 'pieces/${piece_id}/extradata/', 'piece_extradata': AppConstants.apiEndpoint + 'pieces/${piece_id}/extradata/',
'piece_first_edition_id': AppConstants.apiEndpoint + 'pieces/${piece_id}/edition_index/', 'piece_first_edition_id': AppConstants.apiEndpoint + 'pieces/${piece_id}/edition_index/',

View File

@ -19,6 +19,10 @@ let NotificationFetcher = {
fetchEditionNotifications(editionId) { fetchEditionNotifications(editionId) {
return requests.get('notification_edition', {'edition_id': editionId}); return requests.get('notification_edition', {'edition_id': editionId});
},
fetchContractAgreementListNotifications() {
return requests.get('notification_contractagreementlist');
} }
}; };

View File

@ -21,7 +21,7 @@ import SettingsContainer from './components/ascribe_settings/settings_container'
import CoaVerifyContainer from './components/coa_verify_container'; import CoaVerifyContainer from './components/coa_verify_container';
import RegisterPiece from './components/register_piece'; import RegisterPiece from './components/register_piece';
import ContractNotification from './components/contract_notification';
import AppConstants from './constants/application_constants'; import AppConstants from './constants/application_constants';
@ -44,6 +44,7 @@ const COMMON_ROUTES = (
<Route name="password_reset" path="password_reset" handler={PasswordResetContainer} /> <Route name="password_reset" path="password_reset" handler={PasswordResetContainer} />
<Route name="settings" path="settings" handler={SettingsContainer} /> <Route name="settings" path="settings" handler={SettingsContainer} />
<Route name="coa_verify" path="verify" handler={CoaVerifyContainer} /> <Route name="coa_verify" path="verify" handler={CoaVerifyContainer} />
<Route name="contract_notifications" path="verify" handler={ContractNotification} />
</Route> </Route>
); );

View File

@ -10,6 +10,7 @@ class NotificationStore {
constructor() { constructor() {
this.pieceListNotifications = {}; this.pieceListNotifications = {};
this.editionListNotifications = {}; this.editionListNotifications = {};
this.contractAgreementListNotifications = {};
this.editionNotifications = null; this.editionNotifications = null;
this.pieceNotifications = null; this.pieceNotifications = null;
this.bindActions(NotificationActions); this.bindActions(NotificationActions);
@ -31,6 +32,10 @@ class NotificationStore {
this.editionNotifications = res.notification; this.editionNotifications = res.notification;
} }
onUpdateContractAgreementListNotifications(res) {
this.contractAgreementListNotifications = res.notifications;
}
} }
export default alt.createStore(NotificationStore, 'NotificationStore'); export default alt.createStore(NotificationStore, 'NotificationStore');

36
js/third_party/notifications.js vendored Normal file
View File

@ -0,0 +1,36 @@
'use strict';
import alt from '../alt';
import EventActions from '../actions/event_actions';
import NotificationActions from '../actions/notification_actions';
class NotificationsHandler {
constructor() {
this.bindActions(EventActions);
this.loaded = false;
}
onProfileDidLoad(profile) {
if (this.loaded) {
return;
}
let subdomain = window.location.host.split('.')[0];
if (subdomain === 'ikonotv') {
NotificationActions.fetchContractAgreementListNotifications().then(
(res) => {
if (res.notifications && res.notifications.length > 0) {
this.loaded = true;
console.log('Contractagreement notifications loaded');
setTimeout(() => window.appRouter.transitionTo('contract_notifications'), 0);
}
}
);
}
this.loaded = true;
}
}
export default alt.createStore(NotificationsHandler, 'NotificationsHandler');