From 50904f4b010c417d558174005a7b4c5868e7d8d9 Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Thu, 29 Jun 2017 01:18:06 +0200 Subject: sketch folder stuff --- client/client.js | 82 ++++++++++++++++++++++++++++++++ client/components/App.jsx | 7 ++- client/components/Folders/FolderForm.jsx | 47 ++++++++++++++++++ client/components/Folders/Folders.jsx | 30 ++++++++++++ client/components/Modal.jsx | 17 +++++++ client/index.js | 12 ----- client/index.jsx | 12 +++++ 7 files changed, 193 insertions(+), 14 deletions(-) create mode 100644 client/client.js create mode 100644 client/components/Folders/FolderForm.jsx create mode 100644 client/components/Folders/Folders.jsx create mode 100644 client/components/Modal.jsx delete mode 100644 client/index.js create mode 100644 client/index.jsx (limited to 'client') 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 (
+
) } 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 ( +
+
+

Create a new folder

+
+ + +
+
+ + +
+
+
+ ) + } +} 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 ( +
+ + this.closeModal()}> + + +
+ ) + } +} 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 ( +
+
+ {this.props.children} +
+
+ ) + } +} diff --git a/client/index.js b/client/index.js deleted file mode 100644 index b78c5ea..0000000 --- a/client/index.js +++ /dev/null @@ -1,12 +0,0 @@ -import { h, render } from 'preact' -import App from './components/App.jsx' -import { BrowserRouter } from 'react-router-dom' - -const app = ( - - - -) - -render(app, document.getElementById('container')) - diff --git a/client/index.jsx b/client/index.jsx new file mode 100644 index 0000000..b78c5ea --- /dev/null +++ b/client/index.jsx @@ -0,0 +1,12 @@ +import { h, render } from 'preact' +import App from './components/App.jsx' +import { BrowserRouter } from 'react-router-dom' + +const app = ( + + + +) + +render(app, document.getElementById('container')) + -- cgit v1.2.3-70-g09d2