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

176 lines
7.6 KiB
JavaScript
Raw Normal View History

'use strict';
import React from 'react';
import CollapsibleParagraph from '../ascribe_collapsible/collapsible_paragraph';
import CreateContractForm from '../ascribe_forms/form_create_contract';
2015-09-02 14:02:23 +02:00
import ContractListStore from '../../stores/contract_list_store';
import ContractListActions from '../../actions/contract_list_actions';
2015-09-03 15:53:02 +02:00
import ActionPanel from '../ascribe_panel/action_panel';
import GlobalNotificationModel from '../../models/global_notification_model';
import GlobalNotificationActions from '../../actions/global_notification_actions';
import { getLangText } from '../../utils/lang_utils';
let ContractSettings = React.createClass({
propTypes: {
defaultExpanded: React.PropTypes.bool
},
2015-09-02 14:02:23 +02:00
getInitialState(){
return ContractListStore.getState();
},
2015-09-02 14:02:23 +02:00
componentDidMount() {
ContractListStore.listen(this.onChange);
2015-09-09 11:11:16 +02:00
ContractListActions.fetchContractList({is_active: 'True'});
2015-09-02 14:02:23 +02:00
},
2015-09-02 14:02:23 +02:00
componentWillUnmount() {
ContractListStore.unlisten(this.onChange);
},
2015-09-02 14:02:23 +02:00
onChange(state) {
this.setState(state);
},
makeContractPublic(contract) {
return () => {
2015-09-08 14:43:06 +02:00
contract.is_public = true;
2015-09-08 11:44:05 +02:00
ContractListActions.changeContract(contract)
2015-09-09 11:11:16 +02:00
.then(() => {
ContractListActions.fetchContractList({is_active: 'True'});
let notification = getLangText('Contract %s is now public', contract.name);
notification = new GlobalNotificationModel(notification, 'success', 4000);
GlobalNotificationActions.appendGlobalNotification(notification);
})
2015-09-08 11:44:05 +02:00
.catch((err) => {
let notification = new GlobalNotificationModel(err, 'danger', 10000);
GlobalNotificationActions.appendGlobalNotification(notification);
2015-09-09 11:11:16 +02:00
});
};
2015-09-07 11:38:23 +02:00
},
removeContract(contract) {
return () => {
ContractListActions.removeContract(contract.id)
2015-09-09 11:11:16 +02:00
.then((response) => {
ContractListActions.fetchContractList({is_active: 'True'});
let notification = new GlobalNotificationModel(response.notification, 'success', 4000);
GlobalNotificationActions.appendGlobalNotification(notification);
})
2015-09-08 11:44:05 +02:00
.catch((err) => {
let notification = new GlobalNotificationModel(err, 'danger', 10000);
GlobalNotificationActions.appendGlobalNotification(notification);
2015-09-09 11:11:16 +02:00
});
};
2015-09-03 15:53:02 +02:00
},
2015-09-03 15:53:02 +02:00
getPublicContracts(){
return this.state.contractList.filter((contract) => contract.is_public);
2015-09-03 15:53:02 +02:00
},
2015-09-03 15:53:02 +02:00
getPrivateContracts(){
return this.state.contractList.filter((contract) => !contract.is_public);
2015-09-03 15:53:02 +02:00
},
render() {
2015-09-03 15:53:02 +02:00
let publicContracts = this.getPublicContracts();
let privateContracts = this.getPrivateContracts();
2015-09-08 10:03:20 +02:00
return (
<CollapsibleParagraph
title={getLangText('Contract Settings')}
show={true}
2015-09-08 10:03:20 +02:00
defaultExpanded={true}>
2015-09-02 14:02:23 +02:00
<CollapsibleParagraph
title={getLangText('List Contracts')}
show={true}
2015-09-08 10:03:20 +02:00
defaultExpanded={true}>
<CollapsibleParagraph
title={getLangText('Public Contracts')}
show={true}
defaultExpanded={true}>
{publicContracts.map((contract, i) => {
2015-09-03 18:25:12 +02:00
return (
2015-09-08 10:03:20 +02:00
<ActionPanel
key={i}
2015-09-08 10:03:20 +02:00
title={contract.name}
content={contract.name}
buttons={
2015-09-08 10:15:26 +02:00
<div className="pull-right">
2015-09-08 10:03:20 +02:00
<button className="btn btn-default btn-sm margin-left-2px">
UPDATE
</button>
2015-09-10 15:47:27 +02:00
<a
className="btn btn-default btn-sm margin-left-2px"
href={contract.blob.url_safe}
target="_blank">
DOWNLOAD
</a>
2015-09-08 11:44:05 +02:00
<button
className="btn btn-default btn-sm margin-left-2px"
onClick={this.removeContract(contract)}>
2015-09-08 10:03:20 +02:00
REMOVE
</button>
2015-09-08 10:15:26 +02:00
</div>
}
leftColumnWidth="40%"
rightColumnWidth="60%"/>
2015-09-08 10:03:20 +02:00
);
})}
</CollapsibleParagraph>
<CollapsibleParagraph
title={getLangText('Private Contracts')}
show={true}
defaultExpanded={true}>
{privateContracts.map((contract, i) => {
2015-09-03 18:25:12 +02:00
return (
2015-09-08 10:03:20 +02:00
<ActionPanel
key={i}
2015-09-08 10:03:20 +02:00
title={contract.name}
content={contract.name}
buttons={
2015-09-08 10:15:26 +02:00
<div className="pull-right">
2015-09-10 15:47:27 +02:00
<button
className="btn btn-default btn-sm margin-left-2px"
onClick={this.makeContractPublic(contract)}>
MAKE PUBLIC
</button>
2015-09-08 10:03:20 +02:00
<button className="btn btn-default btn-sm margin-left-2px">
2015-09-08 10:15:26 +02:00
UPDATE
</button>
2015-09-10 15:47:27 +02:00
<a
className="btn btn-default btn-sm margin-left-2px"
href={contract.blob.url_safe}
target="_blank">
DOWNLOAD
</a>
2015-09-08 11:44:05 +02:00
<button
className="btn btn-default btn-sm margin-left-2px"
onClick={this.removeContract(contract)}>
2015-09-08 10:15:26 +02:00
REMOVE
</button>
</div>
}
leftColumnWidth="40%"
rightColumnWidth="60%"/>
2015-09-08 10:03:20 +02:00
);
})}
</CollapsibleParagraph>
2015-09-02 14:02:23 +02:00
</CollapsibleParagraph>
<CollapsibleParagraph
title={getLangText('Create Contract')}
show={true}
2015-09-08 10:03:20 +02:00
defaultExpanded={true}>
2015-09-02 14:02:23 +02:00
<CreateContractForm />
</CollapsibleParagraph>
</CollapsibleParagraph>
);
}
});
export default ContractSettings;