summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2017-06-29 01:18:06 +0200
committerJules Laplace <julescarbon@gmail.com>2017-06-29 01:18:06 +0200
commit50904f4b010c417d558174005a7b4c5868e7d8d9 (patch)
tree2fb9bad10e09ff66ccc5313289a62367843326a3 /client
parenta190d638c608f4352e3f01d72ed419a5ab5129ed (diff)
sketch folder stuff
Diffstat (limited to 'client')
-rw-r--r--client/client.js82
-rw-r--r--client/components/App.jsx7
-rw-r--r--client/components/Folders/FolderForm.jsx47
-rw-r--r--client/components/Folders/Folders.jsx30
-rw-r--r--client/components/Modal.jsx17
-rw-r--r--client/index.jsx (renamed from client/index.js)0
6 files changed, 181 insertions, 2 deletions
diff --git a/client/client.js b/client/client.js
new file mode 100644
index 0000000..a48b53e
--- /dev/null
+++ b/client/client.js
@@ -0,0 +1,82 @@
+function get() {
+ return {
+ method: 'GET',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+ },
+ }
+}
+function post(data) {
+ return {
+ method: 'POST',
+ body: JSON.stringify(data),
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+ },
+ }
+}
+function postBody(data) {
+ return {
+ method: 'POST',
+ headers: {
+ 'Accept': 'application/json',
+ },
+ body: data,
+ }
+}
+function put(data) {
+ return {
+ method: 'PUT',
+ body: data,
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+ },
+ }
+}
+function error(err) {
+ console.warn(err)
+}
+
+export default {
+ folder: {
+ index: () => {
+ return fetch('/folders/')
+ .then(req => req.json())
+ .catch(error)
+ },
+
+ show: (id) => {
+ return fetch('/folders/' + id)
+ .then(req => req.json())
+ .catch(error)
+ },
+
+ create: (data) => {
+ return fetch('/folders/new', post(data))
+ .then(req => req.json())
+ .catch(error)
+ },
+
+ update: (data) => {
+ return fetch('/folders/' + data.id, put(data))
+ .then(req => req.json())
+ .catch(error)
+ },
+ },
+
+ file: {
+ upload: (folder_id, files) => {
+ var data = new FormData()
+ for (var i = 0; i < files.length; i++) {
+ data.append('file', files[i])
+ }
+ return fetch('/folders/' + folder_id, postBody(files))
+ .then(req => req.json())
+ .catch(error)
+ },
+ },
+
+} \ No newline at end of file
diff --git a/client/components/App.jsx b/client/components/App.jsx
index 0b1557f..bbb50d6 100644
--- a/client/components/App.jsx
+++ b/client/components/App.jsx
@@ -1,20 +1,23 @@
import { h, Component } from 'preact'
-import { isMobile } from '../util'
-import db from '../db'
+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'
class App extends Component {
constructor(props) {
super()
this.state = {
+ folders: null,
}
}
render() {
return (
<div>
<Header />
+ <Folders />
</div>
)
}
diff --git a/client/components/Folders/FolderForm.jsx b/client/components/Folders/FolderForm.jsx
new file mode 100644
index 0000000..3a3c54e
--- /dev/null
+++ b/client/components/Folders/FolderForm.jsx
@@ -0,0 +1,47 @@
+import { h, Component } from 'preact'
+import { Link } from 'react-router-dom'
+
+import client from '../../client.js'
+
+export default class FolderForm extends Component {
+ constructor(props) {
+ super()
+ this.state = {
+ name: '',
+ }
+ this.updateState = this.updateState.bind(this)
+ this.handleSubmit = this.handleSubmit.bind(this)
+ }
+ updateState(event){
+ const name = event.target.name
+ let value = event.target.value
+ console.log(name, value)
+ this.setState({
+ [name]: value,
+ error: null,
+ })
+ }
+ handleSubmit(event) {
+ event.preventDefault()
+ client.folders.create( this.state ).then( (data) => {
+
+ })
+ }
+ render() {
+ return (
+ <div class='folderForm'>
+ <div>
+ <h1>Create a new folder</h1>
+ <div>
+ <label for='folders_folder_name'>Folder name</label>
+ <input type='text' id='folders_folder_name' name='name' value={this.state.name} onChange={this.updateState} />
+ </div>
+ <div>
+ <label></label>
+ <button onClick={() => this.create()>Create</button>
+ </div>
+ </div>
+ </div>
+ )
+ }
+}
diff --git a/client/components/Folders/Folders.jsx b/client/components/Folders/Folders.jsx
new file mode 100644
index 0000000..7c27311
--- /dev/null
+++ b/client/components/Folders/Folders.jsx
@@ -0,0 +1,30 @@
+import { h, Component } from 'preact'
+import { Link } from 'react-router-dom'
+
+import Modal from '../Modal.jsx'
+import FolderForm from './FolderForm.jsx'
+
+export default class Folders extends Component {
+ constructor(props) {
+ super()
+ this.state = {
+ adding: false,
+ }
+ }
+ openModal() {
+ this.setState({ adding: true })
+ }
+ closeModal() {
+ this.setState({ adding: false })
+ }
+ render() {
+ return (
+ <div class='folders'>
+ <button onClick={() => this.openModal()}>+</button>
+ <Modal visible={this.state.adding} onClose={() => this.closeModal()}>
+ <FolderForm />
+ </Modal>
+ </div>
+ )
+ }
+}
diff --git a/client/components/Modal.jsx b/client/components/Modal.jsx
new file mode 100644
index 0000000..3681ce4
--- /dev/null
+++ b/client/components/Modal.jsx
@@ -0,0 +1,17 @@
+import { h, Component } from 'preact'
+
+export default class Modal extends Component {
+ constructor(props) {
+ super()
+ }
+ render() {
+ const className = this.props.visible ? 'modal visible' : 'modal'
+ return (
+ <div class={className}>
+ <div class='inner'>
+ {this.props.children}
+ </div>
+ </div>
+ )
+ }
+}
diff --git a/client/index.js b/client/index.jsx
index b78c5ea..b78c5ea 100644
--- a/client/index.js
+++ b/client/index.jsx