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 = ( +
+ + + + {' ' + getLangText('Enable hash option, e.g. slow connections or to keep piece private')} + + + +
+ {/* + + */} +
+ ); + } + 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 = ( +
+ +
{this.state.walletSettings.btc_public_key}
+
+ +
{this.state.walletSettings.btc_root_address}
+
+
+
); + } + 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 = ( -
- - - - {' ' + getLangText('Enable hash option, e.g. slow connections or to keep piece private')} - - - -
- {/* - - */} -
- ); - } - 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 = ( -
- -
{this.state.walletSettings.btc_public_key}
-
- -
{this.state.walletSettings.btc_root_address}
-
-
-
); - } - 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';