diff --git a/app/components/Account/AccountAssetCreate.jsx b/app/components/Account/AccountAssetCreate.jsx index a697b3f93a..ab1ac6cfe7 100644 --- a/app/components/Account/AccountAssetCreate.jsx +++ b/app/components/Account/AccountAssetCreate.jsx @@ -16,12 +16,13 @@ import assetUtils from "common/asset_utils"; import {Tabs, Tab} from "../Utility/Tabs"; import AmountSelector from "../Utility/AmountSelector"; import assetConstants from "chain/asset_constants"; -import { estimateFee } from "common/trxHelper"; +import {estimateFee} from "common/trxHelper"; -let GRAPHENE_MAX_SHARE_SUPPLY = new big(assetConstants.GRAPHENE_MAX_SHARE_SUPPLY); +let GRAPHENE_MAX_SHARE_SUPPLY = new big( + assetConstants.GRAPHENE_MAX_SHARE_SUPPLY +); class BitAssetOptions extends React.Component { - static propTypes = { backingAsset: ChainTypes.ChainAsset.isRequired, isUpdate: React.PropTypes.bool @@ -48,17 +49,29 @@ class BitAssetOptions extends React.Component { _onFoundBackingAsset(asset) { if (asset) { - if (asset.get("id") === "1.3.0" || (asset.get("bitasset_data_id") && !asset.getIn(["bitasset", "is_prediction_market"]))) { - if (asset.get("precision") !== parseInt(this.props.assetPrecision, 10)) { + if ( + asset.get("id") === "1.3.0" || + (asset.get("bitasset_data_id") && + !asset.getIn(["bitasset", "is_prediction_market"])) + ) { + if ( + asset.get("precision") !== + parseInt(this.props.assetPrecision, 10) + ) { this.setState({ - error: counterpart.translate("account.user_issued_assets.error_precision", {asset: this.props.assetSymbol}) + error: counterpart.translate( + "account.user_issued_assets.error_precision", + {asset: this.props.assetSymbol} + ) }); } else { this.props.onUpdate("short_backing_asset", asset.get("id")); } } else { this.setState({ - error: counterpart.translate("account.user_issued_assets.error_invalid") + error: counterpart.translate( + "account.user_issued_assets.error_invalid" + ) }); } } @@ -70,24 +83,70 @@ class BitAssetOptions extends React.Component { return (
-
); @@ -109,7 +170,6 @@ class BitAssetOptions extends React.Component { BitAssetOptions = BindToChainState(BitAssetOptions); class AccountAssetCreate extends React.Component { - static propTypes = { core: ChainTypes.ChainAsset.isRequired, globalObject: ChainTypes.ChainObject.isRequired @@ -118,7 +178,7 @@ class AccountAssetCreate extends React.Component { static defaultProps = { globalObject: "2.0.0", core: "1.3.0" - } + }; constructor(props) { super(props); @@ -130,9 +190,13 @@ class AccountAssetCreate extends React.Component { // let asset = props.asset.toJS(); let isBitAsset = false; let precision = utils.get_asset_precision(4); - let corePrecision = utils.get_asset_precision(props.core.get("precision")); + let corePrecision = utils.get_asset_precision( + props.core.get("precision") + ); - let {flagBooleans, permissionBooleans} = this._getPermissions({isBitAsset}); + let {flagBooleans, permissionBooleans} = this._getPermissions({ + isBitAsset + }); // let flags = assetUtils.getFlags(flagBooleans); // let permissions = assetUtils.getPermissions(permissionBooleans, isBitAsset); @@ -141,7 +205,6 @@ class AccountAssetCreate extends React.Component { let coreRateBaseAssetName = ChainStore.getAsset("1.3.0").get("symbol"); return { - update: { symbol: "", precision: 4, @@ -169,12 +232,14 @@ class AccountAssetCreate extends React.Component { } }, bitasset_opts: { - "feed_lifetime_sec" : 60 * 60 * 24, - "minimum_feeds" : 7, - "force_settlement_delay_sec" : 60 * 60 * 24, - "force_settlement_offset_percent" : 1 * assetConstants.GRAPHENE_1_PERCENT, - "maximum_force_settlement_volume" : 20 * assetConstants.GRAPHENE_1_PERCENT, - "short_backing_asset" : "1.3.0" + feed_lifetime_sec: 60 * 60 * 24, + minimum_feeds: 7, + force_settlement_delay_sec: 60 * 60 * 24, + force_settlement_offset_percent: + 1 * assetConstants.GRAPHENE_1_PERCENT, + maximum_force_settlement_volume: + 20 * assetConstants.GRAPHENE_1_PERCENT, + short_backing_asset: "1.3.0" }, marketInput: "" }; @@ -182,44 +247,74 @@ class AccountAssetCreate extends React.Component { _getPermissions(state) { let flagBooleans = assetUtils.getFlagBooleans(0, state.isBitAsset); - let permissionBooleans = assetUtils.getFlagBooleans("all", state.isBitAsset); + let permissionBooleans = assetUtils.getFlagBooleans( + "all", + state.isBitAsset + ); return { flagBooleans, permissionBooleans - } + }; } _createAsset(e) { e.preventDefault(); - let {update, flagBooleans, permissionBooleans, core_exchange_rate, - isBitAsset, is_prediction_market, bitasset_opts} = this.state; + let { + update, + flagBooleans, + permissionBooleans, + core_exchange_rate, + isBitAsset, + is_prediction_market, + bitasset_opts + } = this.state; let {account} = this.props; let flags = assetUtils.getFlags(flagBooleans, isBitAsset); - let permissions = assetUtils.getPermissions(permissionBooleans, isBitAsset); + let permissions = assetUtils.getPermissions( + permissionBooleans, + isBitAsset + ); if (this.state.marketInput !== update.description.market) { update.description.market = ""; } let description = JSON.stringify(update.description); - AssetActions.createAsset(account.get("id"), update, flags, permissions, core_exchange_rate, isBitAsset, is_prediction_market, bitasset_opts, description).then(result => { - console.log("... AssetActions.createAsset(account_id, update)", account.get("id"), update, flags, permissions) + AssetActions.createAsset( + account.get("id"), + update, + flags, + permissions, + core_exchange_rate, + isBitAsset, + is_prediction_market, + bitasset_opts, + description + ).then(result => { + console.log( + "... AssetActions.createAsset(account_id, update)", + account.get("id"), + update, + flags, + permissions + ); }); } _hasChanged() { - return !utils.are_equal_shallow(this.state, this.resetState(this.props)); + return !utils.are_equal_shallow( + this.state, + this.resetState(this.props) + ); } _reset(e) { e.preventDefault(); - this.setState( - this.resetState(this.props) - ); + this.setState(this.resetState(this.props)); } _forcePositive(number) { @@ -272,15 +367,23 @@ class AccountAssetCreate extends React.Component { switch (value) { case "force_settlement_offset_percent": case "maximum_force_settlement_volume": - bitasset_opts[value] = parseFloat(e.target.value) * assetConstants.GRAPHENE_1_PERCENT; + bitasset_opts[value] = + parseFloat(e.target.value) * + assetConstants.GRAPHENE_1_PERCENT; break; case "minimum_feeds": bitasset_opts[value] = parseInt(e.target.value, 10); break; case "feed_lifetime_sec": case "force_settlement_delay_sec": - console.log(e.target.value, parseInt(parseFloat(e.target.value) * 60, 10)); - bitasset_opts[value] = parseInt(parseFloat(e.target.value) * 60, 10); + console.log( + e.target.value, + parseInt(parseFloat(e.target.value) * 60, 10) + ); + bitasset_opts[value] = parseInt( + parseFloat(e.target.value) * 60, + 10 + ); break; case "short_backing_asset": @@ -310,11 +413,19 @@ class AccountAssetCreate extends React.Component { break; case "max_market_fee": - if ((new big(inputValue)).times(precision).gt(GRAPHENE_MAX_SHARE_SUPPLY)) { - errors.max_market_fee = "The number you tried to enter is too large"; + if ( + new big(inputValue) + .times(precision) + .gt(GRAPHENE_MAX_SHARE_SUPPLY) + ) { + errors.max_market_fee = + "The number you tried to enter is too large"; return this.setState({errors}); } - target.value = utils.limitByPrecision(target.value, this.state.update.precision); + target.value = utils.limitByPrecision( + target.value, + this.state.update.precision + ); update[value] = target.value; break; @@ -329,21 +440,27 @@ class AccountAssetCreate extends React.Component { const regexp_numeral = new RegExp(/[[:digit:]]/); // Ensure input is valid - if(!regexp_numeral.test(target.value)) { + if (!regexp_numeral.test(target.value)) { target.value = target.value.replace(/[^0-9.]/g, ""); } // Catch initial decimal input - if(target.value.charAt(0) == ".") { + if (target.value.charAt(0) == ".") { target.value = "0."; } // Catch double decimal and remove if invalid - if(target.value.charAt(target.value.length) != target.value.search(".")) { + if ( + target.value.charAt(target.value.length) != + target.value.search(".") + ) { target.value.substr(1); } - target.value = utils.limitByPrecision(target.value, this.state.update.precision); + target.value = utils.limitByPrecision( + target.value, + this.state.update.precision + ); update[value] = target.value; // if ((new big(target.value)).times(Math.pow(10, precision).gt(GRAPHENE_MAX_SHARE_SUPPLY)) { @@ -359,7 +476,7 @@ class AccountAssetCreate extends React.Component { // Enforce uppercase const symbol = target.value.toUpperCase(); // Enforce characters - let regexp = new RegExp("^[\.A-Z]+$"); + let regexp = new RegExp("^[.A-Z]+$"); if (symbol !== "" && !regexp.test(symbol)) { break; } @@ -374,8 +491,9 @@ class AccountAssetCreate extends React.Component { if (updateState) { this.setState({update: update}, () => { - if(shouldRestoreCursor) { - const selectionStart = caret - (inputValue.length - update[value].length); + if (shouldRestoreCursor) { + const selectionStart = + caret - (inputValue.length - update[value].length); target.setSelectionRange(selectionStart, selectionStart); } }); @@ -383,7 +501,7 @@ class AccountAssetCreate extends React.Component { } } - _validateEditFields( new_state ) { + _validateEditFields(new_state) { let errors = { max_supply: null }; @@ -391,16 +509,29 @@ class AccountAssetCreate extends React.Component { errors.symbol = ChainValidation.is_valid_symbol_error(new_state.symbol); let existingAsset = ChainStore.getAsset(new_state.symbol); if (existingAsset) { - errors.symbol = counterpart.translate("account.user_issued_assets.exists"); + errors.symbol = counterpart.translate( + "account.user_issued_assets.exists" + ); } try { - errors.max_supply = new_state.max_supply <= 0 ? counterpart.translate("account.user_issued_assets.max_positive") : - (new big(new_state.max_supply)).times(Math.pow(10, new_state.precision)).gt(GRAPHENE_MAX_SHARE_SUPPLY) ? counterpart.translate("account.user_issued_assets.too_large") : - null; - } catch(err) { + errors.max_supply = + new_state.max_supply <= 0 + ? counterpart.translate( + "account.user_issued_assets.max_positive" + ) + : new big(new_state.max_supply) + .times(Math.pow(10, new_state.precision)) + .gt(GRAPHENE_MAX_SHARE_SUPPLY) + ? counterpart.translate( + "account.user_issued_assets.too_large" + ) + : null; + } catch (err) { console.log("err:", err); - errors.max_supply = counterpart.translate("account.user_issued_assets.too_large"); + errors.max_supply = counterpart.translate( + "account.user_issued_assets.too_large" + ); } let isValid = !errors.symbol && !errors.max_supply; @@ -425,7 +556,6 @@ class AccountAssetCreate extends React.Component { } _onInputCoreAsset(type, asset) { - if (type === "quote") { this.setState({ quoteAssetInput: asset @@ -454,7 +584,6 @@ class AccountAssetCreate extends React.Component { } _onInputMarket(asset) { - this.setState({ marketInput: asset }); @@ -469,13 +598,22 @@ class AccountAssetCreate extends React.Component { _onCoreRateChange(type, e) { let amount, asset; if (type === "quote") { - amount = utils.limitByPrecision(e.target.value, this.state.update.precision); + amount = utils.limitByPrecision( + e.target.value, + this.state.update.precision + ); asset = null; } else { if (!e || !("amount" in e)) { return; } - amount = e.amount == "" ? "0" : utils.limitByPrecision(e.amount.toString().replace(/,/g, ""), this.props.core.get("precision")); + amount = + e.amount == "" + ? "0" + : utils.limitByPrecision( + e.amount.toString().replace(/,/g, ""), + this.props.core.get("precision") + ); asset = e.asset.get("id"); } @@ -494,7 +632,9 @@ class AccountAssetCreate extends React.Component { this.state.is_prediction_market = false; } - let {flagBooleans, permissionBooleans} = this._getPermissions(this.state); + let {flagBooleans, permissionBooleans} = this._getPermissions( + this.state + ); this.state.flagBooleans = flagBooleans; this.state.permissionBooleans = permissionBooleans; @@ -510,38 +650,86 @@ class AccountAssetCreate extends React.Component { render() { let {globalObject, core} = this.props; - let {errors, isValid, update, flagBooleans, permissionBooleans, - core_exchange_rate, is_prediction_market, isBitAsset, bitasset_opts} = this.state; + let { + errors, + isValid, + update, + flagBooleans, + permissionBooleans, + core_exchange_rate, + is_prediction_market, + isBitAsset, + bitasset_opts + } = this.state; // Estimate the asset creation fee from the symbol character length - let symbolLength = update.symbol.length, createFee = "N/A"; - - if(symbolLength === 3) { - createFee = ; - } - else if(symbolLength === 4) { - createFee = ; - } - else if(symbolLength > 4) { - createFee = ; + let symbolLength = update.symbol.length, + createFee = "N/A"; + + if (symbolLength === 3) { + createFee = ( + + ); + } else if (symbolLength === 4) { + createFee = ( + + ); + } else if (symbolLength > 4) { + createFee = ( + + ); } // Loop over flags let flags = []; - let getFlag = (key, onClick, isChecked)=>{ - return - - - - - - -
: -
- -
-
; + let getFlag = (key, onClick, isChecked) => { + return ( + + + + + + + +
+ : + +
+ +
+
+ ); }; for (let key in permissionBooleans) { if (permissionBooleans[key] && key !== "charge_market_fee") { @@ -559,7 +747,9 @@ class AccountAssetCreate extends React.Component { getFlag( "visible", this._onUpdateDescription.bind(this, "visible"), - update.description.visible ? false : (update.description.visible === false ? true : false) + update.description.visible + ? false + : update.description.visible === false ? true : false ) ); @@ -570,10 +760,25 @@ class AccountAssetCreate extends React.Component { - + @@ -585,10 +790,17 @@ class AccountAssetCreate extends React.Component { const confirmButtons = (
- -
@@ -599,7 +811,9 @@ class AccountAssetCreate extends React.Component {
-

+

+ +

-
-
: + : + -
- {}}/> +
+ {}} + />
+
- + @@ -647,129 +921,278 @@ class AccountAssetCreate extends React.Component {
: -
- + : +
+
+
{isBitAsset ? ( - - - - - - - -
: -
- -
-
) : null} + + + + + + + +
+ : + +
+ +
+
+ ) : null} {/* CER */} - +