delete.js 1.2 KB
Newer Older
1 2
/* eslint-disable no-param-reassign */
import { isNil, defaults } from 'lodash';
3
import { fetch } from './polyfill';
4
import { checkStatus, normParams, parseObject } from './http-helper';
5
import middleware from './middleware';
vipcxj's avatar
vipcxj committed
6 7

const defaultOptions = {
8
  headers: { Accept: 'application/json' },
vipcxj's avatar
vipcxj committed
9 10
};

11 12 13
/**
 * Requests a URL, returning a promise.
 *
14
 * @param  {string} url       The URL we want to delete
15 16 17 18 19
 * @param auth
 * @param params
 * @param  {object} [options] The options we want to pass to "fetch"
 * @return {object}           An object containing either "data" or "err"
 */
20
export default async function doDelete(url, params = {}, options = {}, auth = true) {
21 22 23
  params = normParams(params);
  const res = await middleware.delete.onRequest(url, params, options, auth);
  let queryParams = (res ? res.params : params).map(([k, v]) => (isNil(v) ? k : `${k}=${encodeURIComponent(v)}`));
vipcxj's avatar
vipcxj committed
24
  queryParams = queryParams.join('&');
25
  let realUrl = res ? res.url : url;
vipcxj's avatar
vipcxj committed
26 27 28
  if (queryParams) {
    realUrl = `${url}?${queryParams}`;
  }
29
  const realOptions = defaults(res ? res.options : options, defaultOptions);
30
  realOptions.method = 'DELETE';
vipcxj's avatar
vipcxj committed
31 32
  return fetch(realUrl, realOptions)
    .then(checkStatus)
33
    .then(resp => parseObject(resp, middleware.delete.onResponse));
vipcxj's avatar
vipcxj committed
34
}
35