import React from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './InitModal.styl' import dataApi from 'browser/main/lib/dataApi' import store from 'browser/main/store' import { hashHistory } from 'react-router' import _ from 'lodash' import ModalEscButton from 'browser/components/ModalEscButton' const CSON = require('@rokt33r/season') const path = require('path') const electron = require('electron') const { remote } = electron function browseFolder () { const dialog = remote.dialog const defaultPath = remote.app.getPath('home') return new Promise((resolve, reject) => { dialog.showOpenDialog({ title: 'Select Directory', defaultPath, properties: ['openDirectory', 'createDirectory'] }, function (targetPaths) { if (targetPaths == null) return resolve('') resolve(targetPaths[0]) }) }) } class InitModal extends React.Component { constructor (props) { super(props) this.state = { path: path.join(remote.app.getPath('home'), 'Boostnote'), migrationRequested: true, isLoading: true, data: null, legacyStorageExists: false, isSending: false } } handlePathChange (e) { this.setState({ path: e.target.value }) } componentDidMount () { let data = null try { data = CSON.readFileSync(path.join(remote.app.getPath('userData'), 'local.json')) } catch (err) { console.error(err) } const newState = { isLoading: false } if (data != null) { newState.legacyStorageExists = true newState.data = data } this.setState(newState, () => { this.refs.createButton.focus() }) } handlePathBrowseButtonClick (e) { browseFolder() .then((targetPath) => { if (targetPath.length > 0) { this.setState({ path: targetPath }) } }) .catch((err) => { console.error('BrowseFAILED') console.error(err) }) } handleSubmitButtonClick (e) { this.setState({ isSending: true }, () => { dataApi .addStorage({ name: 'My Storage', path: this.state.path }) .then((data) => { if (this.state.migrationRequested && _.isObject(this.state.data) && _.isArray(this.state.data.folders) && _.isArray(this.state.data.articles)) { return dataApi.migrateFromV5Storage(data.storage.key, this.state.data) } return data }) .then((data) => { if (data.storage.folders[0] != null) { return data } else { return dataApi .createFolder(data.storage.key, { color: '#1278BD', name: 'Default' }) .then((_data) => { return { storage: _data.storage, notes: data.notes } }) } }) .then((data) => { console.log(data) store.dispatch({ type: 'ADD_STORAGE', storage: data.storage, notes: data.notes }) const defaultSnippetNote = dataApi .createNote(data.storage.key, { type: 'SNIPPET_NOTE', folder: data.storage.folders[0].key, title: 'Snippet note example', description: 'Snippet note example\nYou can store a series of snippets as a single note, like Gist.', snippets: [ { name: 'example.html', mode: 'html', content: '\n
\n