diff options
author | kumavis <kumavis@users.noreply.github.com> | 2018-04-26 06:52:46 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-26 06:52:46 +0800 |
commit | dcd04091cc0149cbb0a49bfdf7897e2ac480c7bc (patch) | |
tree | 3b2ceb36c0dee2dcf4331bc95590161341a17f91 /app/scripts/controllers/transactions/lib/tx-state-history-helper.js | |
parent | ac334d7b1a9cd8b6888f5c4f3309740d5df62474 (diff) | |
parent | 8ffce8b59dc95ffa1af72293f40c21f78fd103bb (diff) | |
download | tangerine-wallet-browser-dcd04091cc0149cbb0a49bfdf7897e2ac480c7bc.tar.gz tangerine-wallet-browser-dcd04091cc0149cbb0a49bfdf7897e2ac480c7bc.tar.zst tangerine-wallet-browser-dcd04091cc0149cbb0a49bfdf7897e2ac480c7bc.zip |
Merge pull request #4042 from MetaMask/tx-controller-rewrite-v3
docs and file organization for txController
Diffstat (limited to 'app/scripts/controllers/transactions/lib/tx-state-history-helper.js')
-rw-r--r-- | app/scripts/controllers/transactions/lib/tx-state-history-helper.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/app/scripts/controllers/transactions/lib/tx-state-history-helper.js b/app/scripts/controllers/transactions/lib/tx-state-history-helper.js new file mode 100644 index 000000000..59a4b562c --- /dev/null +++ b/app/scripts/controllers/transactions/lib/tx-state-history-helper.js @@ -0,0 +1,64 @@ +const jsonDiffer = require('fast-json-patch') +const clone = require('clone') +/** @module*/ +module.exports = { + generateHistoryEntry, + replayHistory, + snapshotFromTxMeta, + migrateFromSnapshotsToDiffs, +} + +/** + converts non-initial history entries into diffs + @param longHistory {array} + @returns {array} +*/ +function migrateFromSnapshotsToDiffs (longHistory) { + return ( + longHistory + // convert non-initial history entries into diffs + .map((entry, index) => { + if (index === 0) return entry + return generateHistoryEntry(longHistory[index - 1], entry) + }) + ) +} + +/** + generates an array of history objects sense the previous state. + The object has the keys opp(the operation preformed), + path(the key and if a nested object then each key will be seperated with a `/`) + value + with the first entry having the note + @param previousState {object} - the previous state of the object + @param newState {object} - the update object + @param note {string} - a optional note for the state change + @reurns {array} +*/ +function generateHistoryEntry (previousState, newState, note) { + const entry = jsonDiffer.compare(previousState, newState) + // Add a note to the first op, since it breaks if we append it to the entry + if (note && entry[0]) entry[0].note = note + return entry +} + +/** + Recovers previous txMeta state obj + @return {object} +*/ +function replayHistory (_shortHistory) { + const shortHistory = clone(_shortHistory) + return shortHistory.reduce((val, entry) => jsonDiffer.applyPatch(val, entry).newDocument) +} + +/** + @param txMeta {Object} + @returns {object} a clone object of the txMeta with out history +*/ +function snapshotFromTxMeta (txMeta) { + // create txMeta snapshot for history + const snapshot = clone(txMeta) + // dont include previous history in this snapshot + delete snapshot.history + return snapshot +} |