diff --git a/lib/new-config-manager.js b/lib/new-config-manager.js
index 6f01b1ee..729542fc 100644
--- a/lib/new-config-manager.js
+++ b/lib/new-config-manager.js
@@ -113,6 +113,10 @@ const getCryptosFromWalletNamespace = config => {
const getCashInSettings = config => fromNamespace(namespaces.CASH_IN)(config)
+const getCryptoUnits = (crypto, config) => {
+ return getWalletSettings(crypto, config).cryptoUnits
+}
+
module.exports = {
getWalletSettings,
getCashInSettings,
@@ -129,5 +133,6 @@ module.exports = {
getAllCryptoCurrencies,
getTriggers,
getCashOut,
- getCryptosFromWalletNamespace
+ getCryptosFromWalletNamespace,
+ getCryptoUnits
}
diff --git a/lib/plugins.js b/lib/plugins.js
index 985f7365..7cbaa6d0 100644
--- a/lib/plugins.js
+++ b/lib/plugins.js
@@ -205,6 +205,7 @@ function plugins (settings, deviceId) {
const cashInCommission = new BN(commissions.cashIn)
const cashOutCommission = _.isNumber(commissions.cashOut) ? new BN(commissions.cashOut) : null
const cryptoRec = coinUtils.getCryptoCurrency(cryptoCode)
+ const cryptoUnits = configManager.getCryptoUnits(cryptoCode, settings.config)
return {
cryptoCode,
@@ -213,13 +214,13 @@ function plugins (settings, deviceId) {
cashInFee,
cashInCommission,
cashOutCommission,
- cryptoNetwork
+ cryptoNetwork,
+ cryptoUnits
}
}
function pollQueries (serialNumber, deviceTime, deviceRec, machineVersion, machineModel) {
const localeConfig = configManager.getLocale(deviceId, settings.config)
-
const fiatCode = localeConfig.fiatCurrency
const cryptoCodes = localeConfig.cryptoCurrencies
const timezone = localeConfig.timezone.split(':')
diff --git a/migrations/1623975493095-add-crypto-units-to-config.js b/migrations/1623975493095-add-crypto-units-to-config.js
new file mode 100644
index 00000000..5c398d36
--- /dev/null
+++ b/migrations/1623975493095-add-crypto-units-to-config.js
@@ -0,0 +1,22 @@
+const { saveConfig } = require('../lib/new-settings-loader')
+
+exports.up = function (next) {
+ const cryptoUnits = {
+ wallets_BTC_cryptoUnits: 'mUnits',
+ wallets_ETH_cryptoUnits: 'mUnits',
+ wallets_LTC_cryptoUnits: 'mUnits',
+ wallets_ZEC_cryptoUnits: 'mUnits',
+ wallets_BCH_cryptoUnits: 'mUnits'
+ }
+
+ return saveConfig(cryptoUnits)
+ .then(() => next())
+ .catch(err => {
+ console.log(err.message)
+ return next(err)
+ })
+}
+
+exports.down = function (next) {
+ next()
+}
diff --git a/new-lamassu-admin/src/pages/Wallet/AdvancedWallet.js b/new-lamassu-admin/src/pages/Wallet/AdvancedWallet.js
new file mode 100644
index 00000000..993bcfc5
--- /dev/null
+++ b/new-lamassu-admin/src/pages/Wallet/AdvancedWallet.js
@@ -0,0 +1,61 @@
+import { useQuery, useMutation } from '@apollo/react-hooks'
+import gql from 'graphql-tag'
+import * as R from 'ramda'
+import React from 'react'
+
+import { NamespacedTable as EditableTable } from 'src/components/editableTable'
+import { fromNamespace, toNamespace, namespaces } from 'src/utils/config'
+
+import { AdvancedWalletSchema, getAdvancedWalletElements } from './helper'
+
+const SAVE_CONFIG = gql`
+ mutation Save($config: JSONObject, $accounts: JSONObject) {
+ saveConfig(config: $config)
+ saveAccounts(accounts: $accounts)
+ }
+`
+const GET_INFO = gql`
+ query getData {
+ config
+ accounts
+ cryptoCurrencies {
+ code
+ display
+ }
+ }
+`
+
+const AdvancedWallet = () => {
+ const SCREEN_KEY = namespaces.WALLETS
+ const { data } = useQuery(GET_INFO)
+
+ const [saveConfig, { error }] = useMutation(SAVE_CONFIG, {
+ refetchQueries: () => ['getData']
+ })
+
+ const save = (rawConfig, accounts) => {
+ const config = toNamespace(SCREEN_KEY)(rawConfig)
+ return saveConfig({ variables: { config, accounts } })
+ }
+
+ const config = data?.config && fromNamespace(SCREEN_KEY)(data.config)
+ const cryptoCurrencies = data?.cryptoCurrencies ?? []
+
+ return (
+ <>
+
+ >
+ )
+}
+
+export default AdvancedWallet
diff --git a/new-lamassu-admin/src/pages/Wallet/Wallet.js b/new-lamassu-admin/src/pages/Wallet/Wallet.js
index 1844dd07..f9a3514f 100644
--- a/new-lamassu-admin/src/pages/Wallet/Wallet.js
+++ b/new-lamassu-admin/src/pages/Wallet/Wallet.js
@@ -8,8 +8,11 @@ import { NamespacedTable as EditableTable } from 'src/components/editableTable'
import TitleSection from 'src/components/layout/TitleSection'
import FormRenderer from 'src/pages/Services/FormRenderer'
import schemas from 'src/pages/Services/schemas'
+import { ReactComponent as ReverseSettingsIcon } from 'src/styling/icons/circle buttons/settings/white.svg'
+import { ReactComponent as SettingsIcon } from 'src/styling/icons/circle buttons/settings/zodiac.svg'
import { fromNamespace, toNamespace } from 'src/utils/config'
+import AdvancedWallet from './AdvancedWallet'
import Wizard from './Wizard'
import { WalletSchema, getElements } from './helper'
@@ -48,6 +51,7 @@ const Wallet = ({ name: SCREEN_KEY }) => {
const [editingSchema, setEditingSchema] = useState(null)
const [onChangeFunction, setOnChangeFunction] = useState(null)
const [wizard, setWizard] = useState(false)
+ const [advancedSettings, setAdvancedSettings] = useState(false)
const { data } = useQuery(GET_INFO)
const [saveConfig, { error }] = useMutation(SAVE_CONFIG, {
@@ -99,47 +103,60 @@ const Wallet = ({ name: SCREEN_KEY }) => {
return (
<>
-
- !WalletSchema.isValidSync(it)}
- enableEdit
- shouldOverrideEdit={shouldOverrideEdit}
- editOverride={setWizard}
- editWidth={174}
- save={save}
- validationSchema={WalletSchema}
- elements={getElements(cryptoCurrencies, accountsConfig, onChange)}
+
- {wizard && (
- setWizard(false)}
- save={save}
- error={error?.message}
- cryptoCurrencies={cryptoCurrencies}
- userAccounts={data?.config?.accounts}
- accounts={accounts}
- accountsConfig={accountsConfig}
- />
- )}
- {editingSchema && (
- setEditingSchema(null)}
- open={true}>
-
+ !WalletSchema.isValidSync(it)}
+ enableEdit
+ shouldOverrideEdit={shouldOverrideEdit}
+ editOverride={setWizard}
+ editWidth={174}
+ save={save}
+ validationSchema={WalletSchema}
+ elements={getElements(cryptoCurrencies, accountsConfig, onChange)}
/>
-
+ {wizard && (
+ setWizard(false)}
+ save={save}
+ error={error?.message}
+ cryptoCurrencies={cryptoCurrencies}
+ userAccounts={data?.config?.accounts}
+ accounts={accounts}
+ accountsConfig={accountsConfig}
+ />
+ )}
+ {editingSchema && (
+ setEditingSchema(null)}
+ open={true}>
+
+
+ )}
+ >
)}
+ {advancedSettings && }
>
)
}
diff --git a/new-lamassu-admin/src/pages/Wallet/helper.js b/new-lamassu-admin/src/pages/Wallet/helper.js
index 47da3841..8f8521cb 100644
--- a/new-lamassu-admin/src/pages/Wallet/helper.js
+++ b/new-lamassu-admin/src/pages/Wallet/helper.js
@@ -28,6 +28,45 @@ const WalletSchema = Yup.object().shape({
.transform(transformNumber)
})
+const AdvancedWalletSchema = Yup.object().shape({
+ cryptoUnits: Yup.string().required()
+})
+
+const getAdvancedWalletElements = (cryptoCurrencies, config) => {
+ const viewCryptoCurrency = it =>
+ R.compose(
+ R.prop(['display']),
+ R.find(R.propEq('code', it))
+ )(cryptoCurrencies)
+
+ return [
+ {
+ name: 'id',
+ header: 'Cryptocurrency',
+ width: 180,
+ view: viewCryptoCurrency,
+ size: 'sm',
+ editable: false
+ },
+ {
+ name: 'cryptoUnits',
+ size: 'sm',
+ stripe: true,
+ view: it => it,
+ width: 190,
+ input: Autocomplete,
+ inputProps: {
+ options: [
+ { code: 'mUnits', display: 'mUnits' },
+ { code: 'fUnits', display: 'fUnits' }
+ ],
+ valueProp: 'code',
+ labelProp: 'display'
+ }
+ }
+ ]
+}
+
const getElements = (cryptoCurrencies, accounts, onChange, wizard = false) => {
const widthAdjust = wizard ? 11 : 0
const viewCryptoCurrency = it => {
@@ -133,4 +172,10 @@ const getElements = (cryptoCurrencies, accounts, onChange, wizard = false) => {
]
}
-export { WalletSchema, getElements, filterClass }
+export {
+ WalletSchema,
+ AdvancedWalletSchema,
+ getElements,
+ filterClass,
+ getAdvancedWalletElements
+}