OSDN Git Service

rework on the transactions actions
[bytom/bytom-electron.git] / src / features / transactions / actions.js
index 9347954..89d6745 100644 (file)
@@ -97,30 +97,19 @@ function preprocessTransaction(formParams) {
 }
 
 form.submitForm = (formParams) => function (dispatch) {
-  const connection = chainClient().connection
-
-  const processed = preprocessTransaction(formParams)
-  const buildPromise = connection.request('/build-transaction', {actions: processed.actions})
-
-  const signAndSubmitTransaction = (transaction, password) => {
-    return connection.request('/sign-transaction', {
-      password,
-      transaction
-    }).then(resp => {
-      if (resp.status === 'fail') {
-        throw new Error(resp.msg)
-      }
+  const client = chainClient()
 
-      const rawTransaction = resp.data.transaction.rawTransaction
-      return connection.request('/submit-transaction', {rawTransaction})
-    }).then(dealSignSubmitResp)
-  }
+  const buildPromise = (formParams.state.showAdvanced && formParams.signTransaction) ? null :
+    client.transactions.build(builder => {
+      const processed = preprocessTransaction(formParams)
 
-  const dealSignSubmitResp = resp => {
-    if (resp.status === 'fail') {
-      throw new Error(resp.msg)
-    }
+      builder.actions = processed.actions
+      if (processed.baseTransaction) {
+        builder.baseTransaction = processed.baseTransaction
+      }
+    })
 
+  const submitSucceeded = () => {
     dispatch(form.created())
     dispatch(push({
       pathname: '/transactions',
@@ -133,92 +122,63 @@ form.submitForm = (formParams) => function (dispatch) {
   // normal transactions
   if(formParams.form === 'normalTx'){
     return buildPromise
-      .then((resp) => {
-        if (resp.status === 'fail') {
-          throw new Error(resp.msg)
-        }
-
-        const body = Object.assign({}, {password: formParams.password, 'transaction': resp.data})
-        return connection.request('/sign-transaction', body)
+      .then(tpl => {
+        const body = Object.assign({}, {password: formParams.password, transaction: tpl.data})
+        return client.transactions.sign(body)
       })
-      .then(signResp => {
-        if (signResp.status === 'fail') {
-          throw new Error(signResp.msg)
-        }
-        else if(!signResp.data.signComplete){
+      .then(signed => {
+        if(!signed.data.signComplete){
           throw new Error('Signature failed, it might be your password is wrong.')
         }
-
-        const rawTransaction = signResp.data.transaction.rawTransaction
-        return connection.request('/submit-transaction', {rawTransaction})
-      }).then(dealSignSubmitResp)
+        return client.transactions.submit(signed.data.transaction.rawTransaction)
+      })
+      .then(submitSucceeded)
   }
   //advanced transactions
   else{
-    if ( formParams.state.showAdvanced
-      && formParams.baseTransaction
-      && formParams.submitAction == 'submit') {
-      const transaction = JSON.parse(formParams.baseTransaction)
-      return signAndSubmitTransaction(transaction, formParams.password)
-    }
-
-    if (formParams.state.showAdvanced
-      && formParams.baseTransaction
-      && formParams.submitAction !== 'submit') {
-      const transaction = JSON.parse(formParams.baseTransaction)
-      return connection.request('/sign-transaction', {
-        password: formParams.password,
-        transaction
-      }).then(resp => {
-        if (resp.status === 'fail') {
-          throw new Error(resp.msg)
-        }
+    if (formParams.submitAction == 'submit') {
+      const signAndSubmitTransaction = (transaction) => {
+        const body = Object.assign({}, {password: formParams.password, transaction: transaction})
+        return client.transactions.sign(body)
+          .then( signed => client.transactions.submit(signed.data.transaction.rawTransaction) )
+          .then(submitSucceeded)
+      }
 
-        const id = uuid.v4()
-        dispatch({
-          type: 'GENERATED_TX_HEX',
-          generated: {
-            id: id,
-            hex: JSON.stringify(resp.data.transaction),
-          },
-        })
-        dispatch(push(`/transactions/generated/${id}`))
-      })
-    }
+      if( formParams.state.showAdvanced
+        && formParams.signTransaction ){
+        const transaction = JSON.parse(formParams.signTransaction)
+        return signAndSubmitTransaction(transaction)
+      }
 
-    if (formParams.submitAction == 'submit') {
       return buildPromise
-        .then((resp) => {
-          if (resp.status === 'fail') {
-            throw new Error(resp.msg)
-          }
+        .then(tpl => signAndSubmitTransaction(tpl.data))
+    }
 
-          return signAndSubmitTransaction(resp.data, formParams.password)
+    // submitAction == 'generate'
+    const signAndSubmitGeneratedTransaction = (transaction) => {
+      const body = Object.assign({}, {password: formParams.password, transaction: transaction})
+      return client.transactions.sign(body)
+        .then(resp => {
+          const id = uuid.v4()
+          dispatch({
+            type: 'GENERATED_TX_HEX',
+            generated: {
+              id: id,
+              hex: JSON.stringify(resp.data.transaction),
+            },
+          })
+          dispatch(push(`/transactions/generated/${id}`))
         })
     }
 
-    // submitAction == 'generate'
-    return buildPromise.then(resp => {
-      if (resp.status === 'fail') {
-        throw new Error(resp.msg)
-      }
+    if (formParams.state.showAdvanced
+      && formParams.signTransaction) {
+      const transaction = JSON.parse(formParams.signTransaction)
+      return signAndSubmitGeneratedTransaction(transaction)
+    }
 
-      const body = Object.assign({}, {password: formParams.password, 'transaction': resp.data})
-      return connection.request('/sign-transaction', body)
-    }).then(resp => {
-      if (resp.status === 'fail') {
-        throw new Error(resp.msg)
-      }
-      const id = uuid.v4()
-      dispatch({
-        type: 'GENERATED_TX_HEX',
-        generated: {
-          id: id,
-          hex: JSON.stringify(resp.data.transaction),
-        },
-      })
-      dispatch(push(`/transactions/generated/${id}`))
-    })
+    return buildPromise
+      .then(resp => signAndSubmitGeneratedTransaction(resp.data))
   }
 }