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