diff options
Diffstat (limited to 'spring-front/src/components')
| -rw-r--r-- | spring-front/src/components/Editor.js | 94 | 
1 files changed, 91 insertions, 3 deletions
| diff --git a/spring-front/src/components/Editor.js b/spring-front/src/components/Editor.js index d82a3fb..d062e28 100644 --- a/spring-front/src/components/Editor.js +++ b/spring-front/src/components/Editor.js @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React from "react";  import ReactDOM from "react-dom";  import hljs from "highlight.js/lib/core";  // const hljs = window.hljs; @@ -42,9 +42,19 @@ export default class Editor extends React.Component {      this.handleChange = this.handleChange.bind(this);      this.parseMarkdown = this.parseMarkdown.bind(this);      this.handleTitleClick = this.handleTitleClick.bind(this); +    this.handleLoad = this.handleLoad.bind(this); +    this.handleSave = this.handleSave.bind(this); +    this.handleDelete = this.handleDelete.bind(this); +    this.genNewRandId = this.genNewRandId.bind(this);      this.state = { value: "", drawerActive: false };      // this.hljs_worker = new Worker("../highlight_worker.js");      // this.md_worker = new Worker("../parse_worker.js"); +    this.docId = localStorage.getItem("docId"); +    if (this.docId === null) { +      this.docId = this.genNewRandId(); +      localStorage.setItem("docId", this.docId); +    } +    console.log(this.docId);    }    // TODO-use web worker instead @@ -117,9 +127,66 @@ export default class Editor extends React.Component {      this.setState((prevState) => ({ drawerActive: !prevState.drawerActive }));    } +  genNewRandId() { +    return Math.floor(Math.random() * (0x1 << 16)); +  } + +  // DELETE +  handleDelete() { +    fetch(`https://localhost:9080/api/v1/doc/${this.docId}`, { +      method: "DELETE", +      headers: { +        Accept: "application/json", +      }, +    }).then((response) => { +      if (!response.ok) { +        throw new Error(`request failed with status ${response.status}`); +      } +    }); +  } + +  // GET +  handleLoad(event) { +    let res; +    fetch(`https://localhost:9080/api/v1/doc/${this.docId}`).then( +      (response) => { +        if (!response.ok) { +          throw new Error(`request failed with status ${response.status}`); +        } +        res = response.json().then((json) => { +          this.setState({ value: json.body }); +        }); +      } +    ); +  } + +  // POST & PUT +  async handleSave() { +    let obj = { +      id: this.docId, +      name: `${this.docId}`, +      lastModified: Math.floor(Date.now() / 1000), +      body: this.state.value, +    }; +    let response = await fetch( +      `https://localhost:9080/api/v1/doc/${this.docId}`, +      { +        method: "POST", +        body: JSON.stringify(obj), +        mode: "cors", +        headers: { +          Accept: "application/json", +          "Content-Type": "application/json", +        }, +      } +    ); + +    if (!response.ok) { +      throw new Error(`request failed with status code ${response.status}`); +    } +  } +    render(props) { -    // const { markdownText, drawerTitle, drawerChildren } = this.props; -    // const drawerStyles = this.state.drawerActive ? "is-expanded" : "";      return (        <div>          <div> @@ -147,6 +214,27 @@ export default class Editor extends React.Component {          <div className="split right">            <div direction="rtl" id="markdown-placeholder"></div>          </div> +        <img +          className="icon" +          src="load.jpg" +          width="20" +          height="20" +          onClick={this.handleLoad.bind(this)} +        /> +        <img +          className="icon" +          src="trash3.png" +          width="20" +          height="20" +          onClick={this.handleDelete.bind(this)} +        /> +        <img +          className="icon" +          src="save.png" +          width="20" +          height="20" +          onClick={this.handleSave.bind(this)} +        />        </div>      );    } | 
