diff --git a/package.json b/package.json
index cae4925..c3d98c6 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "web-maker",
- "version": "3.6.0",
+ "version": "3.6.1",
"description": "A blazing fast & offline web playground",
"scripts": {
"start": "if-env NODE_ENV=production && npm run -s serve || npm run -s dev",
diff --git a/src/components/Notifications.jsx b/src/components/Notifications.jsx
index bf925f4..f4a5586 100644
--- a/src/components/Notifications.jsx
+++ b/src/components/Notifications.jsx
@@ -106,6 +106,12 @@ export function Notifications(props) {
Whats new?
+
+
+ Failing to import local creations when logging in.
+
+
+
New Setting: Configure if you want to auto-close the
@@ -135,7 +141,7 @@ export function Notifications(props) {
-
+
Hidden Prettier: Selecting code and pressing
Shift+Tab now uses Prettier to auto-format. This will improve UX wise
diff --git a/src/components/SavedItemPane.jsx b/src/components/SavedItemPane.jsx
index 7a8a583..260906a 100644
--- a/src/components/SavedItemPane.jsx
+++ b/src/components/SavedItemPane.jsx
@@ -88,54 +88,6 @@ export default class SavedItemPane extends Component {
}
}
- mergeImportedItems(items) {
- var existingItemIds = [];
- var toMergeItems = {};
- const d = deferred();
- const savedItems = {};
- this.items.forEach(item => (savedItems[item.id] = item));
- items.forEach(item => {
- // We can access `savedItems` here because this gets set when user
- // opens the saved creations panel. And import option is available
- // inside the saved items panel.
- if (savedItems[item.id]) {
- // Item already exists
- existingItemIds.push(item.id);
- } else {
- log('merging', item.id);
- toMergeItems[item.id] = item;
- }
- });
- var mergedItemCount = items.length - existingItemIds.length;
- if (existingItemIds.length) {
- var shouldReplace = confirm(
- existingItemIds.length +
- ' creations already exist. Do you want to replace them?'
- );
- if (shouldReplace) {
- log('shouldreplace', shouldReplace);
- items.forEach(item => {
- toMergeItems[item.id] = item;
- });
- mergedItemCount = items.length;
- }
- }
- if (mergedItemCount) {
- itemService.saveItems(toMergeItems).then(() => {
- d.resolve();
- alertsService.add(
- mergedItemCount + ' creations imported successfully.'
- );
- trackEvent('fn', 'itemsImported', mergedItemCount);
- });
- } else {
- d.resolve();
- }
- this.props.closeHandler();
-
- return d.promise;
- }
-
importFileChangeHandler(e) {
var file = e.target.files[0];
@@ -145,7 +97,7 @@ export default class SavedItemPane extends Component {
try {
items = JSON.parse(progressEvent.target.result);
log(items);
- this.mergeImportedItems(items);
+ this.props.mergeImportedItems(items);
} catch (exception) {
log(exception);
alert(
diff --git a/src/components/app.jsx b/src/components/app.jsx
index 96132d6..624cf0f 100644
--- a/src/components/app.jsx
+++ b/src/components/app.jsx
@@ -77,7 +77,7 @@ const LocalStorageKeys = {
ASKED_TO_IMPORT_CREATIONS: 'askedToImportCreations'
};
const UNSAVED_WARNING_COUNT = 15;
-const version = '3.6.0';
+const version = '3.6.1';
export default class App extends Component {
constructor() {
@@ -443,7 +443,10 @@ export default class App extends Component {
// setTimeout(() => $('#js-saved-items-wrap').style.overflowY = 'auto', 1000);
}
toggleSavedItemsPane(shouldOpen) {
- this.setState({ isSavedItemPaneOpen: !this.state.isSavedItemPaneOpen });
+ this.setState({
+ isSavedItemPaneOpen:
+ shouldOpen === undefined ? !this.state.isSavedItemPaneOpen : shouldOpen
+ });
if (this.state.isSavedItemPaneOpen) {
window.searchInput.focus();
@@ -462,6 +465,9 @@ export default class App extends Component {
*/
async fetchItems(shouldSaveGlobally, shouldFetchLocally) {
var d = deferred();
+ // HACK: This empty assignment is being used when importing locally saved items
+ // to cloud, `fetchItems` runs once on account login which clears the
+ // savedItems object and hence, while merging no saved item matches with itself.
this.state.savedItems = {};
var items = [];
if (window.user && !shouldFetchLocally) {
@@ -1129,6 +1135,55 @@ export default class App extends Component {
}
}
+ mergeImportedItems(items) {
+ var existingItemIds = [];
+ var toMergeItems = {};
+ const d = deferred();
+ const { savedItems } = this.state;
+ items.forEach(item => {
+ // We can access `savedItems` here because this gets set when user
+ // opens the saved creations panel. And import option is available
+ // inside the saved items panel.
+ // HACK: Also when this fn is called for importing locally saved items
+ // to cloud, `fetchItems` runs once on account login which clears the
+ // savedItems object and hence, no match happens for `existingItemIds`.
+ if (savedItems[item.id]) {
+ // Item already exists
+ existingItemIds.push(item.id);
+ } else {
+ log('merging', item.id);
+ toMergeItems[item.id] = item;
+ }
+ });
+ var mergedItemCount = items.length - existingItemIds.length;
+ if (existingItemIds.length) {
+ var shouldReplace = confirm(
+ existingItemIds.length +
+ ' creations already exist. Do you want to replace them?'
+ );
+ if (shouldReplace) {
+ log('shouldreplace', shouldReplace);
+ items.forEach(item => {
+ toMergeItems[item.id] = item;
+ });
+ mergedItemCount = items.length;
+ }
+ }
+ if (mergedItemCount) {
+ itemService.saveItems(toMergeItems).then(() => {
+ d.resolve();
+ alertsService.add(
+ mergedItemCount + ' creations imported successfully.'
+ );
+ trackEvent('fn', 'itemsImported', mergedItemCount);
+ });
+ } else {
+ d.resolve();
+ }
+ this.closeSavedItemsPane();
+ return d.promise;
+ }
+
/**
* Called from inside ask-to-import-modal
*/
@@ -1524,6 +1579,7 @@ export default class App extends Component {
)}
itemForkBtnClickHandler={this.itemForkBtnClickHandler.bind(this)}
exportBtnClickHandler={this.exportBtnClickHandler.bind(this)}
+ mergeImportedItems={this.mergeImportedItems.bind(this)}
/>
diff --git a/src/manifest.json b/src/manifest.json
index 227d8ad..d2da05d 100644
--- a/src/manifest.json
+++ b/src/manifest.json
@@ -1,6 +1,6 @@
{
"name": "Web Maker",
- "version": "3.6.0",
+ "version": "3.6.1",
"manifest_version": 2,
"description": "Blazing fast & offline playground for your web experiments",
"homepage_url": "https://webmakerapp.com",
diff --git a/src/options.html b/src/options.html
index 9804f1c..d23c34d 100644
--- a/src/options.html
+++ b/src/options.html
@@ -37,7 +37,7 @@
Settings
- v3.6.0
+ v3.6.1