summaryrefslogtreecommitdiff
path: root/client/components/App.jsx
blob: 85766e58a933df50b54d64b2015dca2a9f1f3fd1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import { h, Component } from 'preact'
import { isMobile } from '../vendor/util'
// import db from '../db'
import { Link, withRouter } from 'react-router-dom'

import Header from './Header.jsx'
import Folders from './Folders/Folders.jsx'
import Folder from './Folder/Folder.jsx'

import client from '../client'

class App extends Component {
  constructor(props) {
    super()
    let openFolders = JSON.parse( localStorage['openFolders'] || 'null' )
    this.state = {
      folders: [],
      openFolders: openFolders || [],
    }
    client.folder.index().then( folders => this.setState({ folders }) )
  }
  openFolder(folder) {
    if (this.state.openFolders.indexOf(folder.id) === -1) {
      const newOpenFolders = this.state.openFolders.concat(folder.id)
      localStorage['openFolders'] = JSON.stringify(newOpenFolders)
      this.setState({ openFolders: newOpenFolders })
    }
  }
  closeFolder(folder) {
    const openFolders = this.state.openFolders.filter( folder_id => folder_id !== folder.id )
    localStorage['openFolders'] = JSON.stringify(openFolders)
    this.setState({ openFolders })
  }
  addFolder(folder) {
    this.setState({ folders: this.state.folders.concat([folder]) })
  }
  render() {
    const openFolders = this.state.openFolders.map((folder_id) => {
      const folder_list = this.state.folders.filter(folder => folder.id === folder_id)
      if (! folder_list.length) return
      const folder = folder_list[0]
      return (
        <Folder
          folder={folder}
          onClose={() => this.closeFolder(folder)}
        />
      )
    })
    return (
      <div>
        <Header />
        <Folders folders={this.state.folders} openFolder={(folder) => this.openFolder(folder)} addFolder={(folder) => this.addFolder(folder)} />
        {openFolders}
      </div>
    )
  }
}

export default withRouter(App)