diff --git a/client/sagas/code-storage-saga.js b/client/sagas/code-storage-saga.js index fe5856ded2..aa3f47871f 100644 --- a/client/sagas/code-storage-saga.js +++ b/client/sagas/code-storage-saga.js @@ -4,32 +4,46 @@ import types from '../../common/app/routes/challenges/redux/types'; import { savedCodeFound } from '../../common/app/routes/challenges/redux/actions'; +import { + updateContents +} from '../../common/utils/polyvinyl'; -const legecyPrefixes = [ +const legacyPrefixes = [ 'Bonfire: ', 'Waypoint: ', 'Zipline: ', 'Basejump: ', 'Checkpoint: ' ]; +const legacyPostfix = 'Val'; -function getCode(id, legacy) { +function getCode(id) { if (store.has(id)) { return store.get(id); } - if (store.has(legacy)) { - const code = '' + store.get(legacy); - store.remove(legacy); + return null; +} + +function getLegacyCode(legacy) { + const key = legacy + legacyPostfix; + let code = null; + if (store.has(key)) { + code = '' + store.get(key); + store.remove(key); return code; } - return legecyPrefixes.reduce((code, prefix) => { + return legacyPrefixes.reduce((code, prefix) => { if (code) { return code; } - return store.get(prefix + legacy + 'Val'); + return store.get(prefix + key); }, null); } +function legacyToFile(code, files, key) { + return { [key]: updateContents(code, files[key]) }; +} + export default function codeStorageSaga(actions$, getState) { return actions$ .filter(({ type }) => ( @@ -37,15 +51,26 @@ export default function codeStorageSaga(actions$, getState) { type === types.loadCode )) .map(({ type }) => { - const { id = '', files = {}, legacyKey = '' } = getState().challengesApp; + const { + challengesApp: { + id = '', + files = {}, + legacyKey = '', + key + } + } = getState(); if (type === types.saveCode) { store.set(id, files); return null; } - const codeFound = getCode(id, legacyKey); + const codeFound = getCode(id); if (codeFound) { return savedCodeFound(codeFound); } + const legacyCode = getLegacyCode(legacyKey); + if (legacyCode) { + return savedCodeFound(legacyToFile(legacyCode, files, key)); + } return null; }); }