diff --git a/package.json b/package.json index c42fb0d..17c9f26 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "dependencies": { "electron-compile": "^6.4.2", "electron-squirrel-startup": "^1.0.0", + "immutability-helper": "^2.6.5", "markdown-it": "^8.4.0", "markdown-it-katex": "^2.0.3", "mousetrap": "^1.6.1", diff --git a/src/components/home/index.js b/src/components/home/index.js index cbf25ef..0381f03 100644 --- a/src/components/home/index.js +++ b/src/components/home/index.js @@ -61,7 +61,7 @@ class Addset extends Component { } submit() { if (this.state.clickable !== "") { - logic.process(this.state.setpath, this.state.setname, this.state.selected, this.props.actualize); + logic.make_new(this.state.setpath, this.state.setname, this.state.selected, this.props.actualize); //console.log(this.state.setpath, this.state.setname, this.state.selected, this.props.actualize); this.closeModal(); } diff --git a/src/components/home/logic.js b/src/components/home/logic.js index 34d6448..de7df0b 100644 --- a/src/components/home/logic.js +++ b/src/components/home/logic.js @@ -12,24 +12,59 @@ var md = require('markdown-it')({ typographer: true, }).use(require('markdown-it-katex')); +/*Function to actualize document*/ +export function refresh(doc_id, actualize) { + mypouch.getset(doc_id).then( doc => { + console.log(doc); + fs.readFile(doc.setpath, 'utf-8', (err, new_data) => { + if(err){ + alert("An error ocurred reading the file :" + err.message); + return; + } + var new_cards = parseMD(new_data, doc.setlevel); + doc.cards = new_cards; + mypouch.updateset(doc).then( result => { + actualize(); + }).catch(function (err) { + console.log(err); + }); + }); + }).catch(function(err) { + console.log(err); + }); + return; +} + +/* Function to create new document*/ export function get() { //getfile return remote_dialog.showOpenDialog({ filters: [ { name: 'markdown', extensions: ['md', 'txt'] } ]}); } - -export function process(filepath, setname, headerlevel, actualize) { +export function make_new(filepath, setname, headerlevel, actualize) { fs.readFile(filepath, 'utf-8', (err, data) => { if(err){ alert("An error ocurred reading the file :" + err.message); return; } - parseMD(data, setname, headerlevel, actualize); + // create + var new_doc = { + title: setname, + setpath: filepath, + setlevel: headerlevel, + cards: parseMD(data, headerlevel) + }; + mypouch.addset(new_doc).then( result => { + actualize(); + }).catch(function (err) { + console.log(err); + }); }); } -function parseMD(data, setname, headerlevel, actualize) { +/* Function to do all the work*/ +function parseMD(data, headerlevel) { //to HTML var parsed = md.render(data); @@ -37,13 +72,11 @@ function parseMD(data, setname, headerlevel, actualize) { var div = document.createElement("div"), nodes; div.innerHTML = parsed; nodes = [].slice.call(div.children); // slice in array of all childnodes(childNodes) - console.log(nodes); + //console.log(nodes); //cards format: {"f" : "frontside1", "b" : "backside1"} - var set = { - title: setname, - cards: [] - }; + var cards = []; + var active = false; var length = nodes.length; var regex1 = new RegExp('^h[1-' + headerlevel.toString() + ']$', 'i'), @@ -54,24 +87,20 @@ function parseMD(data, setname, headerlevel, actualize) { active = false; } else { - set.cards[set.cards.length-1].b += node.outerHTML; + cards[cards.length-1].b += node.outerHTML; } } if (regex2.test(node.nodeName)) { active = true; - set.cards.push({"f" : node.innerHTML, "b" : ""}); + cards.push({"f" : node.innerHTML, "b" : ""}); } }); - console.log(set); + console.log(cards); //add set to database - if (set.cards.length === 0) { + if (cards.length === 0) { console.log("no cards"); return; } - mypouch.addset(set).then( result => { - actualize(); - }).catch(function (err) { - console.log(err); - }); + return cards; }; diff --git a/src/components/oneset/index.js b/src/components/oneset/index.js index 7f717a5..375e442 100644 --- a/src/components/oneset/index.js +++ b/src/components/oneset/index.js @@ -1,14 +1,17 @@ import React, { Component } from 'react'; +import update from 'immutability-helper'; import * as Mousetrap from 'mousetrap' import './oneset.css'; import './markdown.css'; import { Link, Redirect } from 'react-router-dom' import * as mypouch from '../../pouch.js'; +import * as logic from '../home/logic.js'; class Card extends Component { constructor(props) { super(props); this.state = { + cards: this.props.cards, index: 0, hidden: true }; @@ -18,6 +21,12 @@ class Card extends Component { this.forward = this.forward.bind(this); this.backward = this.backward.bind(this); } + componentWillReceiveProps(nextProps){ + if (nextProps.cards !== this.props.cards) { + this.setState({ cards: nextProps.cards }) + } + } + componentDidMount() { Mousetrap.bind('space', this.hide); Mousetrap.bind('left', this.backward); @@ -50,26 +59,29 @@ class Card extends Component { }); } render() { + //console.log("State ", this.state.cards); + //console.log("Props ", this.props.cards); + console.log("render: ", this.state.cards) return (