Advertisement
SanderCokart

TodoContext.js

Feb 2nd, 2020
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, {createContext} from 'react';
  2. import axios from 'axios';
  3.  
  4. export const TodoContext = createContext();
  5.  
  6. class TodoContextProvider extends React.Component {
  7.     constructor(props) {
  8.         super(props);
  9.         this.state = {
  10.             todos: [],
  11.             message: {},
  12.         };
  13.         this.readTodo();
  14.     }
  15.  
  16.     //create
  17.     createTodo(event, todo) {
  18.         event.preventDefault();
  19.         axios.post('/api/todo/create', todo)
  20.             .then(response => {
  21.                 if (response.data.message.level === 'success') {
  22.                     let data = [...this.state.todos];
  23.                     data.push(response.data.todo);
  24.                     this.setState({
  25.                         todos: data,
  26.                         message: response.data.message,
  27.                     });
  28.                 } else {
  29.                     this.setState({
  30.                         message: response.data.message,
  31.                     });
  32.                 }
  33.             }).catch(error => {
  34.             console.error(error);
  35.         });
  36.  
  37.     }
  38.  
  39.     //read
  40.     readTodo() {
  41.         axios.get('/api/todo/read')
  42.             .then(response => {
  43.                 this.setState({
  44.                     todos: response.data,
  45.                 });
  46.             }).catch(error => {
  47.             console.error(error);
  48.         });
  49.     }
  50.  
  51.     //update
  52.     updateTodo(data) {
  53.         axios.put('/api/todo/update/' + data.id, data)
  54.             .then(response => {
  55.                 if (response.data.message.level === 'error') {
  56.                     this.setState({
  57.                         message: response.data.message,
  58.                     });
  59.                 } else {
  60.                     let todos = [...this.state.todos];
  61.                     let todo = todos.find(todo => {
  62.                         return todo.id === data.id;
  63.                     });
  64.  
  65.                     todo.name = response.data.todo.name;
  66.                     todo.description = response.data.todo.description;
  67.  
  68.                     this.setState({
  69.                         todos: todos,
  70.                         message: response.data.message,
  71.                     });
  72.                 }
  73.             }).catch(error => {
  74.             console.error(error);
  75.         });
  76.     }
  77.  
  78.     //delete
  79.     deleteTodo(data) {
  80.         axios.delete('/api/todo/delete/' + data.id)
  81.             .then(response => {
  82.                 if (response.data.message.level === 'error') {
  83.                     this.setState({
  84.                         message: response.data.message,
  85.                     });
  86.                 } else {
  87.                     //message
  88.                     let todos = [...this.state.todos];
  89.                     let todo = todos.find(todo => {
  90.                         return todo.id === data.id;
  91.                     });
  92.  
  93.                     todos.splice(todos.indexOf(todo), 1);
  94.  
  95.                     this.setState({
  96.                         todos: todos,
  97.                         message: response.data.message
  98.                     });
  99.                 }
  100.             }).catch(error => {
  101.             console.error(error);
  102.         });
  103.     }
  104.  
  105.     render() {
  106.         return (
  107.             <TodoContext.Provider value={{
  108.                 ...this.state,
  109.                 createTodo: this.createTodo.bind(this),
  110.                 updateTodo: this.updateTodo.bind(this),
  111.                 deleteTodo: this.deleteTodo.bind(this),
  112.                 setMessage: (message) => this.setState({message: message}),
  113.             }}>
  114.                 {this.props.children}
  115.             </TodoContext.Provider>
  116.         );
  117.     }
  118. }
  119.  
  120. export default TodoContextProvider;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement