Advertisement
Guest User

Untitled

a guest
Jun 1st, 2019
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import axios from "axios";
  2.  
  3. // function isFormData(val) {
  4. //   return typeof FormData !== "undefined" && val instanceof FormData;
  5. // }
  6.  
  7. const defaultOptions = {
  8.   baseURL: "https://uxcandy.com/~shapoval/test-task-backend/v2",
  9.   headers: { "Content-Type": "multipart/form-data" }
  10. };
  11.  
  12. class Api {
  13.   constructor(options = {}) {
  14.     this.client = options.client || axios.create(defaultOptions);
  15.     this.token = options.token;
  16.     this.developer = options.developer || "Stepan123";
  17.  
  18.     this.client.interceptors.request.use(
  19.       config => {
  20.         const newConfig = {
  21.           params: {},
  22.           ...config
  23.         };
  24.  
  25.         if (this.developer) {
  26.           newConfig.params.developer = this.developer;
  27.         }
  28.  
  29.         if (this.token) {
  30.           newConfig.data.append("token", this.token);
  31.         }
  32.  
  33.         // if (this.token && !isFormData(newConfig.data)) {
  34.         //   const form = new FormData();
  35.         //   form.append("token", this.token);
  36.         //   newConfig.data = form;
  37.         // }
  38.  
  39.         return newConfig;
  40.       },
  41.       e => Promise.reject(e)
  42.     );
  43.   }
  44.  
  45.   async login({ login, password }) {
  46.     const form = new FormData();
  47.  
  48.     form.append("username", login);
  49.     form.append("password", password);
  50.  
  51.     const { data = {} } = await this.client.post("/login", form);
  52.  
  53.     if (data.status === "ok") {
  54.       this.token = data.message.token;
  55.     }
  56.   }
  57.  
  58.   logout() {
  59.     this.token = null;
  60.   }
  61.  
  62.   // sort_field (id | username | email | status) - поле, по которому выполняется сортировка
  63.   // sort_direction (asc | desc) - направление сортировки
  64.   // page - номер страницы для пагинации
  65.   getTasks({ sortField, sortDirection, page }) {
  66.     return this.client("/", {
  67.       params: {
  68.         sort_field: sortField,
  69.         sort_direction: sortDirection,
  70.         page
  71.       }
  72.     }).then(({ data }) => data);
  73.   }
  74.  
  75.   async createTask({ username, email, text }) {
  76.     const form = new FormData();
  77.  
  78.     form.append("username", username);
  79.     form.append("email", email);
  80.     form.append("text", text);
  81.  
  82.     const { data = {} } = await this.client.post("/create", form);
  83.  
  84.     return data;
  85.   }
  86.  
  87.   async editTask({ id, status, text }) {
  88.     const form = new FormData();
  89.  
  90.     form.append("status ", status);
  91.     form.append("text", text);
  92.  
  93.     const { data = {} } = await this.client.post(`/edit/${id}`, form);
  94.  
  95.     return data;
  96.   }
  97. }
  98.  
  99. export default Api;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement