diff --git a/js/components/ascribe_settings/account_settings.js b/js/components/ascribe_settings/account_settings.js
new file mode 100644
index 00000000..b4d46b2d
--- /dev/null
+++ b/js/components/ascribe_settings/account_settings.js
@@ -0,0 +1,144 @@
+'use strict';
+
+import React from 'react';
+
+import UserStore from '../../stores/user_store';
+import UserActions from '../../actions/user_actions';
+
+import GlobalNotificationModel from '../../models/global_notification_model';
+import GlobalNotificationActions from '../../actions/global_notification_actions';
+
+import Form from '../ascribe_forms/form';
+import Property from '../ascribe_forms/property';
+import InputCheckbox from '../ascribe_forms/input_checkbox';
+import CollapsibleParagraph from '../ascribe_collapsible/collapsible_paragraph';
+
+import ApiUrls from '../../constants/api_urls';
+import AppConstants from '../../constants/application_constants';
+
+import { getLangText } from '../../utils/lang_utils';
+
+let AccountSettings = React.createClass({
+ getInitialState() {
+ return UserStore.getState();
+ },
+
+ componentDidMount() {
+ UserStore.listen(this.onChange);
+ UserActions.fetchCurrentUser();
+ },
+
+ componentWillUnmount() {
+ UserStore.unlisten(this.onChange);
+ },
+
+ onChange(state) {
+ this.setState(state);
+ },
+
+ handleSuccess(){
+ UserActions.fetchCurrentUser();
+ let notification = new GlobalNotificationModel(getLangText('Settings succesfully updated'), 'success', 5000);
+ GlobalNotificationActions.appendGlobalNotification(notification);
+ },
+
+ getFormDataProfile(){
+ return {'email': this.state.currentUser.email};
+ },
+
+ render() {
+ let content =
;
+ let profile = null;
+
+ if (this.state.currentUser.username) {
+ content = (
+
+ );
+ profile = (
+
+ );
+ }
+ return (
+
+ {content}
+ {profile}
+ {/**/}
+
+ );
+ }
+});
+
+export default AccountSettings;
\ No newline at end of file
diff --git a/js/components/ascribe_settings/api_settings.js b/js/components/ascribe_settings/api_settings.js
new file mode 100644
index 00000000..7908b42a
--- /dev/null
+++ b/js/components/ascribe_settings/api_settings.js
@@ -0,0 +1,124 @@
+'use strict';
+
+import React from 'react';
+
+import ApplicationStore from '../../stores/application_store';
+import ApplicationActions from '../../actions/application_actions';
+
+import GlobalNotificationModel from '../../models/global_notification_model';
+import GlobalNotificationActions from '../../actions/global_notification_actions';
+
+import Form from '../ascribe_forms/form';
+import Property from '../ascribe_forms/property';
+
+import ActionPanel from '../ascribe_panel/action_panel';
+import CollapsibleParagraph from '../ascribe_collapsible/collapsible_paragraph';
+
+import ApiUrls from '../../constants/api_urls';
+import AppConstants from '../../constants/application_constants';
+
+import { getLangText } from '../../utils/lang_utils';
+
+
+let APISettings = React.createClass({
+ propTypes: {
+ defaultExpanded: React.PropTypes.bool
+ },
+
+ getInitialState() {
+ return ApplicationStore.getState();
+ },
+
+ componentDidMount() {
+ ApplicationStore.listen(this.onChange);
+ ApplicationActions.fetchApplication();
+ },
+
+ componentWillUnmount() {
+ ApplicationStore.unlisten(this.onChange);
+ },
+
+ onChange(state) {
+ this.setState(state);
+ },
+
+ handleCreateSuccess() {
+ ApplicationActions.fetchApplication();
+ let notification = new GlobalNotificationModel(getLangText('Application successfully created'), 'success', 5000);
+ GlobalNotificationActions.appendGlobalNotification(notification);
+ },
+
+ handleTokenRefresh(event) {
+ let applicationName = event.target.getAttribute('data-id');
+ ApplicationActions.refreshApplicationToken(applicationName);
+
+ let notification = new GlobalNotificationModel(getLangText('Token refreshed'), 'success', 2000);
+ GlobalNotificationActions.appendGlobalNotification(notification);
+ },
+
+ getApplications(){
+ let content =
;
+
+ if (this.state.applications.length > -1) {
+ content = this.state.applications.map(function(app, i) {
+ return (
+
+
+ {app.name}
+
+
+ {'Bearer ' + app.bearer_token.token}
+
+
+ }
+ buttons={
+
+
+
+
+
+ }/>
+ );
+ }, this);
+ }
+ return content;
+ },
+
+ render() {
+ return (
+
+
+
+ Usage: curl <url> -H 'Authorization: Bearer <token>'
+
+ {this.getApplications()}
+
+ );
+ }
+});
+
+export default APISettings;
\ No newline at end of file
diff --git a/js/components/ascribe_settings/bitcoin_wallet_settings.js b/js/components/ascribe_settings/bitcoin_wallet_settings.js
new file mode 100644
index 00000000..18646d75
--- /dev/null
+++ b/js/components/ascribe_settings/bitcoin_wallet_settings.js
@@ -0,0 +1,72 @@
+'use strict';
+
+import React from 'react';
+
+import WalletSettingsStore from '../../stores/wallet_settings_store';
+import WalletSettingsActions from '../../actions/wallet_settings_actions';
+
+import Form from '../ascribe_forms/form';
+import Property from '../ascribe_forms/property';
+
+import CollapsibleParagraph from '../ascribe_collapsible/collapsible_paragraph';
+
+import AppConstants from '../../constants/application_constants';
+
+import { getLangText } from '../../utils/lang_utils';
+
+
+let BitcoinWalletSettings = React.createClass({
+ propTypes: {
+ defaultExpanded: React.PropTypes.bool
+ },
+
+ getInitialState() {
+ return WalletSettingsStore.getState();
+ },
+
+ componentDidMount() {
+ WalletSettingsStore.listen(this.onChange);
+ WalletSettingsActions.fetchWalletSettings();
+ },
+
+ componentWillUnmount() {
+ WalletSettingsStore.unlisten(this.onChange);
+ },
+
+ onChange(state) {
+ this.setState(state);
+ },
+
+ render() {
+ let content =
;
+
+ if (this.state.walletSettings.btc_public_key) {
+ content = (
+ );
+ }
+ return (
+
+ {content}
+
+ );
+ }
+});
+
+export default BitcoinWalletSettings;
\ No newline at end of file
diff --git a/js/components/ascribe_settings/contract_settings.js b/js/components/ascribe_settings/contract_settings.js
new file mode 100644
index 00000000..1730fe08
--- /dev/null
+++ b/js/components/ascribe_settings/contract_settings.js
@@ -0,0 +1,79 @@
+'use strict';
+
+import React from 'react';
+
+import Form from '../ascribe_forms/form';
+import Property from '../ascribe_forms/property';
+
+import CollapsibleParagraph from '../ascribe_collapsible/collapsible_paragraph';
+
+import ReactS3FineUploader from '../ascribe_uploader/react_s3_fine_uploader';
+
+import AppConstants from '../../constants/application_constants';
+import ApiUrls from '../../constants/api_urls';
+
+import { getCookie } from '../../utils/fetch_api_utils';
+import { getLangText } from '../../utils/lang_utils';
+
+
+let ContractSettings = React.createClass({
+ propTypes: {
+ defaultExpanded: React.PropTypes.bool
+ },
+
+ render() {
+ return (
+
+
+
+ );
+ }
+});
+
+export default ContractSettings;
\ No newline at end of file
diff --git a/js/components/ascribe_settings/settings_container.js b/js/components/ascribe_settings/settings_container.js
new file mode 100644
index 00000000..485b26d7
--- /dev/null
+++ b/js/components/ascribe_settings/settings_container.js
@@ -0,0 +1,36 @@
+'use strict';
+
+import React from 'react';
+import Router from 'react-router';
+
+import AccountSettings from './account_settings';
+import BitcoinWalletSettings from './bitcoin_wallet_settings';
+import ContractSettings from './contract_settings';
+import APISettings from './api_settings';
+
+
+let SettingsContainer = React.createClass({
+ propTypes: {
+ children: React.PropTypes.oneOfType([
+ React.PropTypes.arrayOf(React.PropTypes.element),
+ React.PropTypes.element])
+ },
+
+ mixins: [Router.Navigation],
+
+ render() {
+ return (
+
+
+ {this.props.children}
+
+
+
+
+
+
+ );
+ }
+});
+
+export default SettingsContainer;
diff --git a/js/components/piece_list.js b/js/components/piece_list.js
index 79f1471c..02286374 100644
--- a/js/components/piece_list.js
+++ b/js/components/piece_list.js
@@ -60,6 +60,7 @@ let PieceList = React.createClass({
PieceListStore.listen(this.onChange);
EditionListStore.listen(this.onChange);
+
let orderBy = this.props.orderBy ? this.props.orderBy : this.state.orderBy;
if (this.state.pieceList.length === 0 || this.state.page !== page){
PieceListActions.fetchPieceList(page, this.state.pageSize, this.state.search,
diff --git a/js/components/settings_container.js b/js/components/settings_container.js
deleted file mode 100644
index d5821b7a..00000000
--- a/js/components/settings_container.js
+++ /dev/null
@@ -1,408 +0,0 @@
-'use strict';
-
-import React from 'react';
-import Router from 'react-router';
-
-import UserActions from '../actions/user_actions';
-import UserStore from '../stores/user_store';
-
-import WalletSettingsActions from '../actions/wallet_settings_actions';
-import WalletSettingsStore from '../stores/wallet_settings_store';
-
-import ApplicationActions from '../actions/application_actions';
-import ApplicationStore from '../stores/application_store';
-
-import GlobalNotificationModel from '../models/global_notification_model';
-import GlobalNotificationActions from '../actions/global_notification_actions';
-
-import ReactS3FineUploader from './ascribe_uploader/react_s3_fine_uploader';
-
-import CollapsibleParagraph from './ascribe_collapsible/collapsible_paragraph';
-import Form from './ascribe_forms/form';
-import Property from './ascribe_forms/property';
-import InputCheckbox from './ascribe_forms/input_checkbox';
-
-import ActionPanel from './ascribe_panel/action_panel';
-
-import ApiUrls from '../constants/api_urls';
-import AppConstants from '../constants/application_constants';
-
-import { getLangText } from '../utils/lang_utils';
-import { getCookie } from '../utils/fetch_api_utils';
-
-let SettingsContainer = React.createClass({
- propTypes: {
- children: React.PropTypes.oneOfType([
- React.PropTypes.arrayOf(React.PropTypes.element),
- React.PropTypes.element])
- },
-
- mixins: [Router.Navigation],
-
- render() {
- return (
-
-
- {this.props.children}
-
-
-
-
-
-
- );
- }
-});
-
-
-let AccountSettings = React.createClass({
- getInitialState() {
- return UserStore.getState();
- },
-
- componentDidMount() {
- UserStore.listen(this.onChange);
- UserActions.fetchCurrentUser();
- },
-
- componentWillUnmount() {
- UserStore.unlisten(this.onChange);
- },
-
- onChange(state) {
- this.setState(state);
- },
-
- handleSuccess(){
- UserActions.fetchCurrentUser();
- let notification = new GlobalNotificationModel(getLangText('Settings succesfully updated'), 'success', 5000);
- GlobalNotificationActions.appendGlobalNotification(notification);
- },
-
- getFormDataProfile(){
- return {'email': this.state.currentUser.email};
- },
-
- render() {
- let content =
;
- let profile = null;
-
- if (this.state.currentUser.username) {
- content = (
-
- );
- profile = (
-
- );
- }
- return (
-
- {content}
- {profile}
- {/**/}
-
- );
- }
-});
-
-
-
-let BitcoinWalletSettings = React.createClass({
-
- propTypes: {
- defaultExpanded: React.PropTypes.bool
- },
-
- getInitialState() {
- return WalletSettingsStore.getState();
- },
-
- componentDidMount() {
- WalletSettingsStore.listen(this.onChange);
- WalletSettingsActions.fetchWalletSettings();
- },
-
- componentWillUnmount() {
- WalletSettingsStore.unlisten(this.onChange);
- },
-
- onChange(state) {
- this.setState(state);
- },
-
- render() {
- let content =
;
- if (this.state.walletSettings.btc_public_key) {
- content = (
- );
- }
- return (
-
- {content}
-
- );
- }
-});
-
-let ContractSettings = React.createClass({
- propTypes: {
- defaultExpanded: React.PropTypes.bool
- },
-
- render() {
- return (
-
-
-
- );
- }
-});
-
-let FileUploader = React.createClass({
- propTypes: {
- },
-
- render() {
- return (
-
- );
- }
-});
-
-let APISettings = React.createClass({
- propTypes: {
- defaultExpanded: React.PropTypes.bool
- },
-
- getInitialState() {
- return ApplicationStore.getState();
- },
-
- componentDidMount() {
- ApplicationStore.listen(this.onChange);
- ApplicationActions.fetchApplication();
- },
-
- componentWillUnmount() {
- ApplicationStore.unlisten(this.onChange);
- },
-
- onChange(state) {
- this.setState(state);
- },
-
- handleCreateSuccess() {
- ApplicationActions.fetchApplication();
- let notification = new GlobalNotificationModel(getLangText('Application successfully created'), 'success', 5000);
- GlobalNotificationActions.appendGlobalNotification(notification);
- },
-
- handleTokenRefresh(event) {
- let applicationName = event.target.getAttribute('data-id');
- ApplicationActions.refreshApplicationToken(applicationName);
-
- let notification = new GlobalNotificationModel(getLangText('Token refreshed'), 'success', 2000);
- GlobalNotificationActions.appendGlobalNotification(notification);
- },
-
- getApplications(){
- let content =
;
- if (this.state.applications.length > -1) {
- content = this.state.applications.map(function(app, i) {
- return (
-
-
- {app.name}
-
-
- {'Bearer ' + app.bearer_token.token}
-
-
- }
- buttons={
-
-
-
-
-
- }/>
- );
- }, this);
- }
- return content;
- },
-
- render() {
- return (
-
-
-
- Usage: curl <url> -H 'Authorization: Bearer <token>'
-
- {this.getApplications()}
-
- );
- }
-});
-
-export default SettingsContainer;
diff --git a/js/components/whitelabel/prize/components/prize_settings_container.js b/js/components/whitelabel/prize/components/prize_settings_container.js
index f81e7078..86d0f77d 100644
--- a/js/components/whitelabel/prize/components/prize_settings_container.js
+++ b/js/components/whitelabel/prize/components/prize_settings_container.js
@@ -9,7 +9,7 @@ import PrizeStore from '../stores/prize_store';
import PrizeJuryActions from '../actions/prize_jury_actions';
import PrizeJuryStore from '../stores/prize_jury_store';
-import SettingsContainer from '../../../settings_container';
+import SettingsContainer from '../../../ascribe_settings/settings_container';
import CollapsibleParagraph from '../../../ascribe_collapsible/collapsible_paragraph';
import Form from '../../../ascribe_forms/form';
diff --git a/js/components/whitelabel/wallet/wallet_routes.js b/js/components/whitelabel/wallet/wallet_routes.js
index 1a32f46f..1c4ef4a7 100644
--- a/js/components/whitelabel/wallet/wallet_routes.js
+++ b/js/components/whitelabel/wallet/wallet_routes.js
@@ -11,7 +11,7 @@ import PasswordResetContainer from '../../../components/password_reset_container
import PieceList from '../../../components/piece_list';
import PieceContainer from '../../../components/ascribe_detail/piece_container';
import EditionContainer from '../../../components/ascribe_detail/edition_container';
-import SettingsContainer from '../../../components/settings_container';
+import SettingsContainer from '../../../components/ascribe_settings/settings_container';
import RegisterPiece from '../../../components/register_piece';
import CylandLanding from './components/cyland/cyland_landing';
diff --git a/js/routes.js b/js/routes.js
index f76e4b45..2762052b 100644
--- a/js/routes.js
+++ b/js/routes.js
@@ -17,7 +17,7 @@ import LogoutContainer from './components/logout_container';
import SignupContainer from './components/signup_container';
import PasswordResetContainer from './components/password_reset_container';
-import SettingsContainer from './components/settings_container';
+import SettingsContainer from './components/ascribe_settings/settings_container';
import CoaVerifyContainer from './components/coa_verify_container';
import RegisterPiece from './components/register_piece';