OSDN Git Service

Add the BTM Amount Unit to the transaction page
authorZhiting Lin <zlin035@uottawa.ca>
Fri, 9 Mar 2018 06:00:28 +0000 (14:00 +0800)
committerZhiting Lin <zlin035@uottawa.ca>
Fri, 9 Mar 2018 06:00:28 +0000 (14:00 +0800)
src/features/core/reducers.js
src/features/transactions/components/List.jsx
src/features/transactions/components/ListItem/ListItem.jsx
src/features/transactions/components/Show.jsx
src/features/transactions/components/Summary/Summary.jsx
src/utility/buildInOutDisplay.js

index ba39014..d481909 100644 (file)
@@ -215,8 +215,10 @@ const lang = (state = defaultLang, action) => {
   return state
 }
 
-const btmAmountUnit = (state = 'BTM', action) => {
+const defaultBtmAmountUnit = window.localStorage.getItem('BtmAmountUnit') || 'BTM'
+const btmAmountUnit = (state = defaultBtmAmountUnit, action) => {
   if (action.type == 'UPDATE_BTM_AMOUNT_UNIT') {
+    window.localStorage.setItem('BtmAmountUnit', action.param)
     return action.param
   }
   return state
index 359847c..fc04cde 100644 (file)
@@ -56,6 +56,7 @@ const mapStateToProps = (type, itemComponent, additionalProps = {}) => {
       loadedOnce: state[type].queries.loadedOnce,
       type: type,
       lang: state.core.lang,
+      btmAmountUnit: state.core.btmAmountUnit,
       listItemComponent: itemComponent,
       noResults: currentItems.length == 0,
       showFirstTimeFlow: currentItems.length == 0,
index 09bd0a0..61113b0 100644 (file)
@@ -25,7 +25,7 @@ class ListItem extends React.Component {
           </Link>
         </div>
 
-        <Summary transaction={item} lang={lang}/>
+        <Summary transaction={item} lang={lang} btmAmountUnit={this.props.btmAmountUnit}/>
       </div>
     )
   }
index 20d7235..ebf88fa 100644 (file)
@@ -17,6 +17,7 @@ class Show extends BaseShow {
   render() {
     const item = this.props.item
     const lang = this.props.lang
+    const btmAmountUnit = this.props.btmAmountUnit
 
     let view
     if (item) {
@@ -34,7 +35,7 @@ class Show extends BaseShow {
             actions={[
               <RawJsonButton key='raw-json' item={item} />
             ]}>
-            <Summary transaction={item} lang={lang}/>
+            <Summary transaction={item} lang={lang} btmAmountUnit={btmAmountUnit}/>
           </Section>
 
           <KeyValueTable
@@ -61,7 +62,7 @@ class Show extends BaseShow {
             <KeyValueTable
               key={index}
               title={index == 0 ? lang === 'zh' ? '输出' : 'Outputs' : ''}
-              items={buildTxOutputDisplay(output)}
+              items={buildTxOutputDisplay(output, btmAmountUnit)}
             />
           )}
         </PageContent>
@@ -79,7 +80,8 @@ import { connect } from 'react-redux'
 
 const mapStateToProps = (state, ownProps) => ({
   item: state.transaction.items[ownProps.params.id],
-  lang: state.core.lang
+  lang: state.core.lang,
+  btmAmountUnit: state.core.btmAmountUnit
 })
 
 const mapDispatchToProps = ( dispatch ) => ({
index 05062b6..cba957f 100644 (file)
@@ -50,16 +50,43 @@ class Summary extends React.Component {
     const summary = this.normalizeInouts(inouts)
     const items = []
 
+    const fomateDecimal = (src,pos) => {
+      let srcString = src.toString()
+      var rs = srcString.indexOf('.')
+      if (rs < 0) {
+        rs = srcString.length
+        srcString += '.'
+      }
+      while (srcString.length <= rs + pos) {
+        srcString += '0'
+      }
+      return srcString
+    }
+
+    const normalizeBtmAmountUnit = (assetID, amount, btmAmountUnit) => {
+      //normalize BTM Amount
+      if (assetID === 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff') {
+        switch (btmAmountUnit){
+          case 'BTM':
+            return fomateDecimal(amount/100000000, 8)
+          case 'mBTM':
+            return fomateDecimal(amount/100000, 5)
+        }
+      }
+      return amount
+    }
+
     Object.keys(summary).forEach((assetId) => {
       const asset = summary[assetId]
       const nonAccountTypes = ['issue','retire']
 
+
       nonAccountTypes.forEach((type) => {
         if (asset[type] > 0) {
           items.push({
             type: INOUT_TYPES[type],
             rawAction: type,
-            amount: asset[type],
+            amount: normalizeBtmAmountUnit(assetId, asset[type], this.props.btmAmountUnit),
             asset: asset.alias ? asset.alias : <code className={styles.rawId}>{assetId}</code>,
             assetId: assetId,
           })
@@ -83,7 +110,7 @@ class Summary extends React.Component {
             items.push({
               type: INOUT_TYPES[type],
               rawAction: type,
-              amount: account[type],
+              amount: normalizeBtmAmountUnit(assetId, account[type], this.props.btmAmountUnit),
               asset: asset.alias ? asset.alias : <code className={styles.rawId}>{assetId}</code>,
               assetId: assetId,
               direction: type == 'spend' ? 'from' : 'to',
index e696549..2e2b4aa 100644 (file)
@@ -85,11 +85,15 @@ const unspentFields = [
 
 const balanceFields = Object.keys(mappings)
 
-const buildDisplay = (item, fields) => {
+const buildDisplay = (item, fields, btmAmountUnit) => {
   const details = []
   fields.forEach(key => {
     if (item.hasOwnProperty(key)) {
-      details.push({label: mappings[key], value: item[key]})
+      if(key === 'amount'){
+        details.push({label: mappings[key], value: normalizeAmount(item['assetId'], item[key], btmAmountUnit)})
+      }else{
+        details.push({label: mappings[key], value: item[key]})
+      }
     }
   })
   return details
@@ -108,9 +112,9 @@ const fomateDecimal = (src,pos) => {
   return srcString
 }
 
-const normalizeAmount = (assetAlias, amount, btmAmountUnit) => {
+const normalizeAmount = (assetID, amount, btmAmountUnit) => {
   //normalize BTM Amount
-  if (assetAlias === 'btm') {
+  if (assetID === 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff') {
     switch (btmAmountUnit){
       case 'BTM':
         return fomateDecimal(amount/100000000, 8)
@@ -125,13 +129,13 @@ export function buildTxInputDisplay(input) {
   return buildDisplay(input, txInputFields)
 }
 
-export function buildTxOutputDisplay(output) {
-  return buildDisplay(output, txOutputFields)
+export function buildTxOutputDisplay(output, btmAmountUnit) {
+  return buildDisplay(output, txOutputFields,btmAmountUnit)
 }
 
 export function buildUnspentDisplay(output, btmAmountUnit) {
   const normalized = {
-    amount: normalizeAmount(output.assetAlias, output.amount, btmAmountUnit),
+    amount: output.amount,
     accountId: output.accountId,
     accountAlias: output.accountAlias,
     assetId: output.assetId,
@@ -142,14 +146,14 @@ export function buildUnspentDisplay(output, btmAmountUnit) {
     sourceId: output.sourceId,
     sourcePos: output.sourcePos
   }
-  return buildDisplay(normalized, unspentFields)
+  return buildDisplay(normalized, unspentFields, btmAmountUnit)
 }
 
 export function buildBalanceDisplay(balance, btmAmountUnit) {
   return buildDisplay({
-    amount: normalizeAmount(balance.assetAlias, balance.amount, btmAmountUnit),
+    amount: balance.amount,
     assetId: balance.assetId,
     assetAlias: balance.assetAlias,
     accountAlias: balance.accountAlias
-  }, balanceFields)
+  }, balanceFields, btmAmountUnit)
 }