1
0
mirror of https://github.com/ascribe/onion.git synced 2025-01-03 10:25:08 +01:00

Merge remote-tracking branch 'remotes/origin/AD-456-ikonotv-branded-page-for-registra' into AD-883-show-notificationsrequests-on-col

This commit is contained in:
diminator 2015-09-03 17:37:40 +02:00
commit 6a1f58fdb4
10 changed files with 153 additions and 16 deletions

24
.gitignore~ Normal file
View File

@ -0,0 +1,24 @@
lib-cov
*.seed
*.log
*.csv
*.dat
*.out
*.pid
*.gz
*.sublime-project
.idea
spool-project.sublime-project
*.sublime-workspace
*.sublime-workspace
webapp-dependencies.txt
pids
logs
results
README.md~
node_modules/*
build
.DS_Store

View File

@ -43,6 +43,7 @@ class ContractActions {
/* No email was entered - Ignore and keep going*/ /* No email was entered - Ignore and keep going*/
} }
} }
} }
export default alt.createActions(ContractActions); export default alt.createActions(ContractActions);

View File

@ -2,7 +2,7 @@
import alt from '../alt'; import alt from '../alt';
import OwnershipFetcher from '../fetchers/ownership_fetcher'; import OwnershipFetcher from '../fetchers/ownership_fetcher';
import Q from 'q';
class ContractListActions { class ContractListActions {
constructor() { constructor() {
@ -15,13 +15,27 @@ class ContractListActions {
fetchContractList() { fetchContractList() {
OwnershipFetcher.fetchContractList() OwnershipFetcher.fetchContractList()
.then((contracts) => { .then((contracts) => {
this.actions.updateContractList(contracts); this.actions.updateContractList(contracts.results);
}) })
.catch((err) => { .catch((err) => {
console.logGlobal(err); console.logGlobal(err);
this.actions.updateContractList([]); this.actions.updateContractList([]);
}); });
} }
makeContractPublic(contract){
contract.public=true;
return Q.Promise((resolve, reject) => {
OwnershipFetcher.makeContractPublic(contract)
.then((res) => {
resolve(res);
})
.catch((err)=> {
console.logGlobal(err);
reject(err);
});
});
}
} }
export default alt.createActions(ContractListActions); export default alt.createActions(ContractListActions);

View File

@ -4,6 +4,7 @@ import React from 'react';
import Form from '../ascribe_forms/form'; import Form from '../ascribe_forms/form';
import Property from '../ascribe_forms/property'; import Property from '../ascribe_forms/property';
import InputCheckbox from '../ascribe_forms/input_checkbox';
import GlobalNotificationModel from '../../models/global_notification_model'; import GlobalNotificationModel from '../../models/global_notification_model';
import GlobalNotificationActions from '../../actions/global_notification_actions'; import GlobalNotificationActions from '../../actions/global_notification_actions';
@ -53,7 +54,7 @@ let CreateContractForm = React.createClass({
render() { render() {
return ( return (
<Form <Form
url={ApiUrls.ownership_contract} url={ApiUrls.ownership_contract_list}
getFormData={this.getFormData} getFormData={this.getFormData}
handleSuccess={this.handleCreateSuccess} handleSuccess={this.handleCreateSuccess}
buttons={ buttons={
@ -111,6 +112,19 @@ let CreateContractForm = React.createClass({
placeholder="(e.g. Loan agreement #1)" placeholder="(e.g. Loan agreement #1)"
required/> required/>
</Property> </Property>
<Property
name="public"
className="ascribe-settings-property-collapsible-toggle"
style={{paddingBottom: 0}}>
<InputCheckbox>
<span>
{' ' + getLangText('I agree to the Terms of Service') + ' '}
(<a href="https://www.ascribe.io/terms" target="_blank" style={{fontSize: '0.9em', color: 'rgba(0,0,0,0.7)'}}>
{getLangText('read')}
</a>)
</span>
</InputCheckbox>
</Property>
</Form> </Form>
); );
} }

View File

@ -14,7 +14,6 @@ let ActionPanel = React.createClass({
onClick: React.PropTypes.func, onClick: React.PropTypes.func,
ignoreFocus: React.PropTypes.bool ignoreFocus: React.PropTypes.bool
}, },
getInitialState() { getInitialState() {
return { return {
isFocused: false isFocused: false

View File

@ -8,7 +8,11 @@ import CreateContractForm from '../ascribe_forms/form_create_contract';
import ContractListStore from '../../stores/contract_list_store'; import ContractListStore from '../../stores/contract_list_store';
import ContractListActions from '../../actions/contract_list_actions'; import ContractListActions from '../../actions/contract_list_actions';
import ActionPanel from '../ascribe_panel/action_panel';
import { getLangText } from '../../utils/lang_utils'; import { getLangText } from '../../utils/lang_utils';
import GlobalNotificationModel from '../../models/global_notification_model';
import GlobalNotificationActions from '../../actions/global_notification_actions';
let ContractSettings = React.createClass({ let ContractSettings = React.createClass({
propTypes: { propTypes: {
@ -27,23 +31,76 @@ let ContractSettings = React.createClass({
onChange(state) { onChange(state) {
this.setState(state); this.setState(state);
}, },
makeContractPublic(contract){
console.log(contract);
ContractListActions.makeContractPublic(contract)
.then(( ) => ContractListActions.fetchContractList())
.catch((error)=>{console.log("Error ", error);
let notification = new GlobalNotificationModel("Service is unavailable", 'danger', 10000);
GlobalNotificationActions.appendGlobalNotification(notification);
})
},
getPublicContracts(){
return this.state.contractList.filter((contract) => contract.public);
},
getPrivateContracts(){
return this.state.contractList.filter((contract) => !contract.public);
},
getblobEndName(contract){
return contract.blob.match(/.*\/(.*)/)[1];
},
render() { render() {
let publicContracts = this.getPublicContracts();
let privateContracts = this.getPrivateContracts();
console.log(this.state.contractList);
return ( return (
<CollapsibleParagraph <CollapsibleParagraph
title={getLangText('Contract Settings')} title={getLangText('Contract Settings')}
show={true} show={true}
defaultExpanded={true}> defaultExpanded={false}>
{/* this should be this.props.defaultExpanded */} {/* this should be this.props.defaultExpanded */}
<CollapsibleParagraph <CollapsibleParagraph
title={getLangText('List Contracts')} title={getLangText('List Contracts')}
show={true} show={true}
defaultExpanded={true}> defaultExpanded={false}>
{this.state.contractList} {<div>
<p>Public Contracts</p>
{(publicContracts.length > 0) ?
publicContracts.map(
(contract) => {
return(
<ActionPanel title = {contract.name}
content = {this.getblobEndName(contract)}
buttons = {<span>
<button className="btn btn-default btn-sm margin-left-2px">UPDATE</button>
<button className="btn btn-default btn-sm margin-left-2px">REMOVE</button>
</span>}
/>)
}
) : null }
</div>}
{<div>
<p>Private Contracts</p>
{(privateContracts.length>0) ?
privateContracts.map(
(contract) => {
return(
<ActionPanel title = {contract.name}
content = {this.getblobEndName(contract)}
buttons = {<span> <button className="btn btn-default btn-sm margin-left-2px">UPDATE</button>
<button className="btn btn-default btn-sm margin-left-2px" >REMOVE</button>
<button className="btn btn-default btn-sm margin-left-2px"
onClick={this.makeContractPublic.bind(this, contract)}>MAKE PUBLIC</button> </span>}
/>)
}
) : null}
</div>}
</CollapsibleParagraph> </CollapsibleParagraph>
<CollapsibleParagraph <CollapsibleParagraph
title={getLangText('Create Contract')} title={getLangText('Create Contract')}
show={true} show={true}
defaultExpanded={true}> defaultExpanded={false}>
<CreateContractForm /> <CreateContractForm />
</CollapsibleParagraph> </CollapsibleParagraph>
</CollapsibleParagraph> </CollapsibleParagraph>

View File

@ -51,7 +51,8 @@ let ApiUrls = {
'ownership_unconsigns': AppConstants.apiEndpoint + 'ownership/unconsigns/', 'ownership_unconsigns': AppConstants.apiEndpoint + 'ownership/unconsigns/',
'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/', 'ownership_contract':AppConstants.apiEndpoint + 'ownership/contracts/${contract_id}',
"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

@ -16,11 +16,15 @@ let OwnershipFetcher = {
* Fetch the contracts of the logged-in user from the API. * Fetch the contracts of the logged-in user from the API.
*/ */
fetchContractList(){ fetchContractList(){
return requests.get(ApiUrls.ownership_contract); return requests.get(ApiUrls.ownership_contract_list);
}, },
fetchLoanPieceRequestList(){ fetchLoanPieceRequestList(){
return requests.get(ApiUrls.ownership_loans_pieces_request); return requests.get(ApiUrls.ownership_loans_pieces_request);
},
makeContractPublic(contractObj){
return requests.put('ownership_contract', { body: contractObj, contract_id: contractObj.id });
} }
}; };

View File

@ -52,6 +52,19 @@ export function sumNumList(l) {
return sum; return sum;
} }
export function excludePropFromObject(obj, propList){
let clonedObj = mergeOptions({},obj);
for (let item in propList){
console.log(item);
if (clonedObj[propList[item]]){
console.log('deleting... ');
delete clonedObj[propList[item]];
}
}
console.log(clonedObj);
return clonedObj;
}
/* /*
Taken from http://stackoverflow.com/a/4795914/1263876 Taken from http://stackoverflow.com/a/4795914/1263876
Behaves like C's format string function Behaves like C's format string function

View File

@ -6,6 +6,7 @@ import { argsToQueryParams, getCookie } from '../utils/fetch_api_utils';
import AppConstants from '../constants/application_constants'; import AppConstants from '../constants/application_constants';
import {excludePropFromObject} from '../utils/general_utils';
class Requests { class Requests {
_merge(defaults, options) { _merge(defaults, options) {
@ -77,7 +78,6 @@ class Requests {
throw new Error(`Cannot find a mapping for "${name}"`); throw new Error(`Cannot find a mapping for "${name}"`);
} }
} }
return url; return url;
} }
@ -137,15 +137,25 @@ class Requests {
return this.request('delete', newUrl); return this.request('delete', newUrl);
} }
post(url, params) { _putOrPost(url, paramsAndBody, method){
let paramsCopy = this._merge(params); let paramsCopy = this._merge(paramsAndBody);
let newUrl = this.prepareUrl(url, paramsCopy); let params = excludePropFromObject(paramsAndBody,['body']);
let body = null;
let newUrl = this.prepareUrl(url, params);
let body = null;
if (paramsCopy && paramsCopy.body) { if (paramsCopy && paramsCopy.body) {
console.log(paramsCopy.body);
body = JSON.stringify(paramsCopy.body); body = JSON.stringify(paramsCopy.body);
} }
return this.request('post', newUrl, { body }); return this.request(method, newUrl, { body });
}
post(url, params) {
return this._putOrPost(url,params,'post')
}
put(url, params){
return this._putOrPost(url,params,'put')
} }
defaults(options) { defaults(options) {