1 import { chainClient } from 'utility/environment'
2 import { parseNonblankJSON } from 'utility/string'
3 import { push } from 'react-router-redux'
4 import { baseCreateActions, baseListActions } from 'features/shared/actions'
6 const type = 'transaction'
8 const list = baseListActions(type, {
11 const form = baseCreateActions(type)
13 function preprocessTransaction(formParams) {
14 const copy = JSON.parse(JSON.stringify(formParams))
16 baseTransaction: copy.baseTransaction,
17 actions: copy.actions,
20 if (builder.baseTransaction == '') {
21 delete builder.baseTransaction
24 if (formParams.submitAction == 'generate') {
25 builder.ttl = '1h' // 1 hour
28 for (let i in builder.actions) {
29 let a = builder.actions[i]
31 const intFields = ['amount', 'position']
32 intFields.forEach(key => {
35 if ((parseInt(value)+'') == value) {
36 a[key] = parseInt(value)
38 throw new Error(`Action ${parseInt(i)+1} ${key} must be an integer.`)
44 a.referenceData = parseNonblankJSON(a.referenceData)
46 throw new Error(`Action ${parseInt(i)+1} reference data should be valid JSON, or blank.`)
50 a.receiver = parseNonblankJSON(a.receiver)
52 throw new Error(`Action ${parseInt(i)+1} receiver should be valid JSON.`)
59 form.submitForm = (formParams) => function(dispatch) {
60 const buildPromise = chainClient().transactions.build(builder => {
61 const processed = preprocessTransaction(formParams)
63 builder.actions = processed.actions.map(action => {
65 amount: action.amount,
66 account_id: action.accountId,
67 account_alias: action.accountAlias,
68 asset_id: action.assetId,
69 asset_alias: action.assetAlias,
73 if (processed.baseTransaction) {
74 builder.baseTransaction = processed.baseTransaction
78 if (formParams.submitAction == 'submit') {
80 .then(({data: tpl}) => {
81 const client = chainClient()
82 const body = Object.assign({}, {Auth: '123456', 'transaction': tpl})
83 return client.connection.request('/sign-submit-transaction', body, true)
85 if (resp.status === 'fail') {
86 // TODO: deal with failure
90 dispatch(form.created())
92 pathname: '/transactions'