diff --git a/js/components/ascribe_collapsible/collapsible_paragraph.js b/js/components/ascribe_collapsible/collapsible_paragraph.js index a5c884e5..e146b42b 100644 --- a/js/components/ascribe_collapsible/collapsible_paragraph.js +++ b/js/components/ascribe_collapsible/collapsible_paragraph.js @@ -17,7 +17,7 @@ const CollapsibleParagraph = React.createClass({ getDefaultProps() { return { - show: false + show: true }; }, diff --git a/js/components/ascribe_forms/form_contract_agreement.js b/js/components/ascribe_forms/form_contract_agreement.js index 6d47d8e0..ec4a5a81 100644 --- a/js/components/ascribe_forms/form_contract_agreement.js +++ b/js/components/ascribe_forms/form_contract_agreement.js @@ -1,6 +1,7 @@ 'use strict'; import React from 'react'; +import Router from 'react-router'; import ContractListActions from '../../actions/contract_list_actions'; import ContractListStore from '../../stores/contract_list_store'; @@ -20,11 +21,13 @@ import { mergeOptions } from '../../utils/general_utils'; let ContractAgreementForm = React.createClass({ - propTypes: { + propTypes: { handleSuccess: React.PropTypes.func - }, + }, - getInitialState() { + mixins: [Router.Navigation, Router.State], + + getInitialState() { return mergeOptions( ContractListStore.getState(), { @@ -54,7 +57,7 @@ let ContractAgreementForm = React.createClass({ let notification = 'Contract agreement send'; notification = new GlobalNotificationModel(notification, 'success', 10000); GlobalNotificationActions.appendGlobalNotification(notification); - this.refs.form.reset(); + this.transitionTo('pieces'); }, getFormData(){ diff --git a/js/components/ascribe_settings/account_settings.js b/js/components/ascribe_settings/account_settings.js index 7c769c22..562cd48f 100644 --- a/js/components/ascribe_settings/account_settings.js +++ b/js/components/ascribe_settings/account_settings.js @@ -101,7 +101,6 @@ let AccountSettings = React.createClass({ return ( {content} diff --git a/js/components/ascribe_settings/api_settings.js b/js/components/ascribe_settings/api_settings.js index 7908b42a..0f638675 100644 --- a/js/components/ascribe_settings/api_settings.js +++ b/js/components/ascribe_settings/api_settings.js @@ -97,7 +97,6 @@ let APISettings = React.createClass({ return (
{content} diff --git a/js/components/ascribe_settings/contract_settings.js b/js/components/ascribe_settings/contract_settings.js index d0ded734..7196032b 100644 --- a/js/components/ascribe_settings/contract_settings.js +++ b/js/components/ascribe_settings/contract_settings.js @@ -8,6 +8,12 @@ import CreateContractForm from '../ascribe_forms/form_create_contract'; import ContractListStore from '../../stores/contract_list_store'; import ContractListActions from '../../actions/contract_list_actions'; +import UserStore from '../../stores/user_store'; +import UserActions from '../../actions/user_actions'; + +import WhitelabelStore from '../../stores/whitelabel_store'; +import WhitelabelActions from '../../actions/whitelabel_actions'; + import ActionPanel from '../ascribe_panel/action_panel'; import ContractSettingsUpdateButton from './contract_settings_update_button'; @@ -17,24 +23,30 @@ import GlobalNotificationActions from '../../actions/global_notification_actions import AclProxy from '../acl_proxy'; import { getLangText } from '../../utils/lang_utils'; +import { mergeOptions, truncateTextAtCharIndex } from '../../utils/general_utils'; let ContractSettings = React.createClass({ - propTypes: { - currentUser: React.PropTypes.object, - defaultExpanded: React.PropTypes.bool - }, - getInitialState(){ - return ContractListStore.getState(); + return mergeOptions( + ContractListStore.getState(), + UserStore.getState() + ); }, componentDidMount() { ContractListStore.listen(this.onChange); + UserStore.listen(this.onChange); + WhitelabelStore.listen(this.onChange); + + WhitelabelActions.fetchWhitelabel(); + UserActions.fetchCurrentUser(); ContractListActions.fetchContractList(true); }, componentWillUnmount() { + WhitelabelStore.unlisten(this.onChange); + UserStore.unlisten(this.onChange); ContractListStore.unlisten(this.onChange); }, @@ -82,16 +94,13 @@ let ContractSettings = React.createClass({ } return ( - +
+ defaultExpanded={true}> + aclObject={this.state.currentUser.acl}>
{createPublicContractForm} {publicContracts.map((contract, i) => { @@ -99,10 +108,14 @@ let ContractSettings = React.createClass({ - + + + + aclObject={this.state.currentUser.acl}> } - leftColumnWidth="40%" - rightColumnWidth="60%"/> + leftColumnWidth="60%" + rightColumnWidth="40%"/> ); })}
- +
); } }); diff --git a/js/components/ascribe_settings/settings_container.js b/js/components/ascribe_settings/settings_container.js index 2b3dc6a7..0957bb78 100644 --- a/js/components/ascribe_settings/settings_container.js +++ b/js/components/ascribe_settings/settings_container.js @@ -6,11 +6,17 @@ import Router from 'react-router'; import UserStore from '../../stores/user_store'; import UserActions from '../../actions/user_actions'; +import WhitelabelStore from '../../stores/whitelabel_store'; +import WhitelabelActions from '../../actions/whitelabel_actions'; + import AccountSettings from './account_settings'; import BitcoinWalletSettings from './bitcoin_wallet_settings'; -import ContractSettings from './contract_settings'; import APISettings from './api_settings'; +import AclProxy from '../acl_proxy'; + +import { mergeOptions } from '../../utils/general_utils'; + let SettingsContainer = React.createClass({ propTypes: { @@ -22,15 +28,22 @@ let SettingsContainer = React.createClass({ mixins: [Router.Navigation], getInitialState() { - return UserStore.getState(); + return mergeOptions( + UserStore.getState(), + WhitelabelStore.getState() + ); }, componentDidMount() { UserStore.listen(this.onChange); + WhitelabelStore.listen(this.onChange); + + WhitelabelActions.fetchWhitelabel(); UserActions.fetchCurrentUser(); }, componentWillUnmount() { + WhitelabelStore.unlisten(this.onChange); UserStore.unlisten(this.onChange); }, @@ -48,9 +61,16 @@ let SettingsContainer = React.createClass({
{this.props.children} - - - + + + + + +
); } diff --git a/js/components/header.js b/js/components/header.js index 0309b748..f227313f 100644 --- a/js/components/header.js +++ b/js/components/header.js @@ -3,7 +3,6 @@ import React from 'react'; import Router from 'react-router'; - import Nav from 'react-bootstrap/lib/Nav'; import Navbar from 'react-bootstrap/lib/Navbar'; import CollapsibleNav from 'react-bootstrap/lib/CollapsibleNav'; @@ -12,6 +11,8 @@ import MenuItem from 'react-bootstrap/lib/MenuItem'; import MenuItemLink from 'react-router-bootstrap/lib/MenuItemLink'; import NavItemLink from 'react-router-bootstrap/lib/NavItemLink'; +import AclProxy from './acl_proxy'; + import UserActions from '../actions/user_actions'; import UserStore from '../stores/user_store'; @@ -96,7 +97,7 @@ let Header = React.createClass({ } }, - onMenuItemClick(event) { + onMenuItemClick() { /* This is a hack to make the dropdown close after clicking on an item The function just need to be defined @@ -137,6 +138,15 @@ let Header = React.createClass({ onClick={this.onMenuItemClick}> {getLangText('Account Settings')} + + + {getLangText('Contract Settings')} + + {getLangText('Log out')} diff --git a/js/components/whitelabel/prize/components/ascribe_detail/prize_piece_container.js b/js/components/whitelabel/prize/components/ascribe_detail/prize_piece_container.js index 44a727e4..73cfa83a 100644 --- a/js/components/whitelabel/prize/components/ascribe_detail/prize_piece_container.js +++ b/js/components/whitelabel/prize/components/ascribe_detail/prize_piece_container.js @@ -309,7 +309,6 @@ let PrizePieceRatings = React.createClass({
@@ -329,7 +328,6 @@ let PrizePieceRatings = React.createClass({
{Object.keys(this.props.piece.extra_data).map((data) => { diff --git a/js/components/whitelabel/prize/components/prize_settings_container.js b/js/components/whitelabel/prize/components/prize_settings_container.js index e6a53bbb..3e274b57 100644 --- a/js/components/whitelabel/prize/components/prize_settings_container.js +++ b/js/components/whitelabel/prize/components/prize_settings_container.js @@ -79,7 +79,6 @@ let PrizeSettings = React.createClass({ return ( {this.getMembersActive()} {this.getMembersPending()} {this.getMembersInactive()} diff --git a/js/components/whitelabel/wallet/components/cyland/ascribe_detail/cyland_piece_container.js b/js/components/whitelabel/wallet/components/cyland/ascribe_detail/cyland_piece_container.js index 81c7a0cf..1be98cfc 100644 --- a/js/components/whitelabel/wallet/components/cyland/ascribe_detail/cyland_piece_container.js +++ b/js/components/whitelabel/wallet/components/cyland/ascribe_detail/cyland_piece_container.js @@ -64,7 +64,6 @@ let CylandPieceContainer = React.createClass({ submitButtonType={CylandSubmitButton}> {getLangText('This piece has been loaned before we started to collect further details.')} @@ -78,7 +77,6 @@ let IkonotvPieceContainer = React.createClass({ furtherDetails = ( + ), 'cc': ( @@ -83,6 +84,7 @@ let ROUTES = { + ) diff --git a/js/routes.js b/js/routes.js index 4dbd8b94..1366f205 100644 --- a/js/routes.js +++ b/js/routes.js @@ -17,6 +17,7 @@ import LogoutContainer from './components/logout_container'; import SignupContainer from './components/signup_container'; import PasswordResetContainer from './components/password_reset_container'; +import ContractSettings from './components/ascribe_settings/contract_settings'; import SettingsContainer from './components/ascribe_settings/settings_container'; import CoaVerifyContainer from './components/coa_verify_container'; @@ -42,6 +43,7 @@ const COMMON_ROUTES = ( + ); diff --git a/js/utils/general_utils.js b/js/utils/general_utils.js index 7717a96a..ba2b7752 100644 --- a/js/utils/general_utils.js +++ b/js/utils/general_utils.js @@ -204,4 +204,21 @@ export function excludePropFromObject(obj, propList){ } } return clonedObj; +} + +/** + * Takes a string and breaks it at the supplied index and replaces it + * with a (potentially) short string that also has been provided + * @param {string} text The string to truncate + * @param {number} charIndex The char number at which the text should be truncated + * @param {String} replacement All text after charIndex will be replaced with this string + * @return {string} The truncated text + */ +export function truncateTextAtCharIndex(text, charIndex, replacement = '...') { + let truncatedText = ''; + + truncatedText = text.slice(0, charIndex); + truncatedText += text.length > charIndex ? replacement : ''; + + return truncatedText; } \ No newline at end of file diff --git a/sass/ascribe_panel.scss b/sass/ascribe_panel.scss index 9d53b911..0d156d7f 100644 --- a/sass/ascribe_panel.scss +++ b/sass/ascribe_panel.scss @@ -24,6 +24,10 @@ > .ascribe-panel-content { display: table-cell; vertical-align: middle; + + &:first-child { + font-size: .9em; + } } @media(max-width:767px) {