From 7e6bbb1fae1a4564310d46b82e9c12e74339be33 Mon Sep 17 00:00:00 2001 From: catarak Date: Tue, 19 Jul 2016 21:36:21 -0400 Subject: [PATCH] fix file state changing bug --- client/modules/IDE/components/PreviewFrame.js | 21 ++++++++++++++----- client/modules/IDE/reducers/files.js | 1 + 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/client/modules/IDE/components/PreviewFrame.js b/client/modules/IDE/components/PreviewFrame.js index 109d88bf..01545a14 100644 --- a/client/modules/IDE/components/PreviewFrame.js +++ b/client/modules/IDE/components/PreviewFrame.js @@ -32,19 +32,30 @@ class PreviewFrame extends React.Component { injectLocalFiles() { let htmlFile = this.props.htmlFile.content; - const jsFiles = this.props.jsFiles.map(jsFile => { - const jsFileStrings = jsFile.content.match(/(['"])((\\\1|.)*?)\1/gm); + + // have to build the array manually because the spread operator is only + // one level down... + const jsFiles = []; + this.props.jsFiles.forEach(jsFile => { + const newJSFile = { ...jsFile }; + const jsFileStrings = newJSFile.content.match(/(['"])((\\\1|.)*?)\1/gm); jsFileStrings.forEach(jsFileString => { if (jsFileString.match(/^('|")(?!(http:\/\/|https:\/\/)).*\.(png|jpg|jpeg|gif|bmp)('|")$/)) { - const fileName = jsFileString.substr(1, jsFileString.length - 2); + const filePath = jsFileString.substr(1, jsFileString.length - 2); + let fileName = filePath; + if (fileName.match(/^\.\//)) { + fileName = fileName.substr(2, fileName.length - 1); + } else if (fileName.match(/^\//)) { + fileName = fileName.substr(1, fileName.length - 1); + } this.props.files.forEach(file => { if (file.name === fileName) { - jsFile.content = jsFile.content.replace(fileName, file.blobURL); // eslint-disable-line + newJSFile.content = newJSFile.content.replace(filePath, file.blobURL); // eslint-disable-line } }); } }); - return jsFile; + jsFiles.push(newJSFile); }); jsFiles.forEach(jsFile => { diff --git a/client/modules/IDE/reducers/files.js b/client/modules/IDE/reducers/files.js index 2064112c..4849df88 100644 --- a/client/modules/IDE/reducers/files.js +++ b/client/modules/IDE/reducers/files.js @@ -82,5 +82,6 @@ export const getFile = (state, id) => state.filter(file => file.id === id)[0]; export const getHTMLFile = (state) => state.filter(file => file.name.match(/.*\.html$/))[0]; export const getJSFiles = (state) => state.filter(file => file.name.match(/.*\.js$/)); export const getCSSFiles = (state) => state.filter(file => file.name.match(/.*\.css$/)); +export const getLinkedFiles = (state) => state.filter(file => file.url); export default files;