Skip to content

Commit

Permalink
WiP body rework
Browse files Browse the repository at this point in the history
  • Loading branch information
eliihen committed Jul 25, 2017
1 parent 69e77d3 commit b7adff1
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 61 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
"react-immutable-proptypes": "^2.1.0",
"react-redux": "^5.0.3",
"redux": "^3.6.0",
"redux-form": "^6.6.0",
"redux-form": "^7.0.1",
"redux-saga": "^0.14.3",
"reselect": "^3.0.0",
"styled-components": "^1.4.4",
Expand Down
2 changes: 0 additions & 2 deletions src/store/request/reducer.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,6 @@ export default function (state = initialState, action) {
});

case CHANGE_BODY_TYPE:
// Set Content-Type header to application/x-www-form-urlencoded
// Unset Content-Type when set to application/x-www-form-urlencoded
return Object.assign({}, state, {
bodyType: action.bodyType,
});
Expand Down
57 changes: 32 additions & 25 deletions src/store/request/sagas.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { pushHistory } from 'store/history/actions';
import { getUrlVariables } from 'store/urlVariables/selectors';
import { requestForm } from 'components/Request';

import { getPlaceholderUrl, getUseFormData, getHeaders } from './selectors';
import { getPlaceholderUrl, getUseFormData, getHeaders } from './selectors';
import { executeRequest, receiveResponse } from './actions';
import { SEND_REQUEST, REQUEST_FAILED, SELECT_REQUESTED, CHANGE_BODY_TYPE } from './types';

Expand Down Expand Up @@ -42,7 +42,7 @@ export function* createResource(request) {
return yield call(prependHttp, resource);
}

export function* buildHeaders({ headers, basicAuth, bodyType }) {
export function* buildHeaders({ headers, basicAuth }) {
const parameters = yield call(getParameters);
const requestHeaders = new Headers(reMapHeaders(headers, parameters));
if (basicAuth && basicAuth.username) {
Expand All @@ -64,7 +64,6 @@ function buildRequestData({ bodyType, formData }) {
formData.forEach(f => {
body.append(f.name, f.value);
});
console.log('body', body);

return body;
}
Expand Down Expand Up @@ -96,6 +95,7 @@ function buildRequestData({ bodyType, formData }) {
default:
return null;
}
return null;
}

// Needed for unit tests to be consistent
Expand Down Expand Up @@ -189,42 +189,49 @@ function* selectRequest({ request }) {
function setContentType(array, value) {
const index = array.findIndex(item => item.name === 'Content-Type');

// Replace any existing Content-Type headers
if (index > -1) {
return [
...array.slice(0, index),
{ name: 'Content-Type', value },
...array.slice(index + 1)
...array.slice(index + 1),
];
} else {
}

// When the last row is empty, overwrite it instead of pushing
const lastItem = array.length >= 1
? array[array.length - 1]
: null;
if (lastItem && !lastItem.name) {
return [
...array,
...array.slice(0, array.length - 1),
{ name: 'Content-Type', value },
];
}

return [
...array,
{ name: 'Content-Type', value },
];
}

// TODO breaks when switching after request is sent
function* setTypeHeaderSaga({ bodyType }) {
try {
let headers = yield select(getHeaders)
console.log('bodyType', bodyType);
console.log('headers', headers);
switch (bodyType) {
case 'multipart':
headers = setContentType(headers, 'multipart/form-data');
break;
case 'urlencoded':
headers = setContentType(headers, 'application/x-www-urlencoded');
break;
case 'json':
headers = setContentType(headers, 'application/json');
break;
}
console.log('headers', headers);
yield put(change(requestForm, 'headers', headers));
} catch (e) {
console.log('e', e);
let headers = yield select(getHeaders);
switch (bodyType) {
case 'multipart':
headers = setContentType(headers, 'multipart/form-data');
break;
case 'urlencoded':
headers = setContentType(headers, 'application/x-www-urlencoded');
break;
case 'json':
headers = setContentType(headers, 'application/json');
break;
default:
throw new Error(`Body type ${bodyType} is not supported`);
}
yield put(change(requestForm, 'headers', headers));
}

export default function* rootSaga() {
Expand Down
8 changes: 4 additions & 4 deletions test/components/request/__snapshots__/BodyField.test.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ exports[`BodyField should match the previous snapshot when !!useFormData 1`] = `
className="form-group"
>
<label
className="col-sm-2 control-label"
className="col-xs-2 control-label"
htmlFor="bodyType"
>
Type
</label>
<div
className="col-sm-10"
className="col-xs-8"
>
<select
className="form-control"
Expand Down Expand Up @@ -128,13 +128,13 @@ exports[`BodyField should match the previous snapshot when !useFormData 1`] = `
className="form-group"
>
<label
className="col-sm-2 control-label"
className="col-xs-2 control-label"
htmlFor="bodyType"
>
Type
</label>
<div
className="col-sm-10"
className="col-xs-8"
>
<select
className="form-control"
Expand Down
73 changes: 44 additions & 29 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -908,14 +908,14 @@ babel-register@^6.24.0:
mkdirp "^0.5.1"
source-map-support "^0.4.2"

babel-runtime@6.23.0, babel-runtime@^6.20.0, babel-runtime@^6.9.1:
babel-runtime@6.23.0, babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.6.1, babel-runtime@^6.9.1:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b"
dependencies:
core-js "^2.4.0"
regenerator-runtime "^0.10.0"

babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.6.1:
babel-runtime@^6.11.6, babel-runtime@^6.2.0, babel-runtime@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611"
dependencies:
Expand Down Expand Up @@ -1915,11 +1915,11 @@ es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.
es6-iterator "2"
es6-symbol "~3.1"

es6-error@4.0.0, es6-error@^4.0.0:
es6-error@4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.0.0.tgz#f094c7041f662599bb12720da059d6b9c7ff0f40"

es6-error@4.0.2:
es6-error@4.0.2, es6-error@^4.0.0:
version "4.0.2"
resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.0.2.tgz#eec5c726eacef51b7f6b73c20db6e1b13b069c98"

Expand Down Expand Up @@ -2079,9 +2079,9 @@ eslint-plugin-jsx-a11y@^2.2.3:
jsx-ast-utils "^1.0.0"
object-assign "^4.0.1"

"eslint-plugin-no-unsafe-innerhtml@github:entequak/eslint-plugin-no-unsafe-innerhtml#4b6b606d50":
eslint-plugin-no-unsafe-innerhtml@EnTeQuAk/eslint-plugin-no-unsafe-innerhtml#4b6b606d50:
version "1.0.15"
resolved "https://codeload.github.com/entequak/eslint-plugin-no-unsafe-innerhtml/tar.gz/4b6b606d50"
resolved "https://codeload.github.com/EnTeQuAk/eslint-plugin-no-unsafe-innerhtml/tar.gz/4b6b606d50"
dependencies:
eslint "^3.7.1"

Expand Down Expand Up @@ -2372,6 +2372,18 @@ fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.5, fbjs@^0.8.7, fbjs@^0.8.8:
setimmediate "^1.0.5"
ua-parser-js "^0.7.9"

fbjs@^0.8.9:
version "0.8.12"
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04"
dependencies:
core-js "^1.0.0"
isomorphic-fetch "^2.1.1"
loose-envify "^1.0.0"
object-assign "^4.1.0"
promise "^7.1.1"
setimmediate "^1.0.5"
ua-parser-js "^0.7.9"

fd-slicer@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
Expand Down Expand Up @@ -2769,6 +2781,10 @@ hoist-non-react-statics@^1.0.3, hoist-non-react-statics@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb"

hoist-non-react-statics@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.2.0.tgz#b099ca82f3640b1244309c8a526a2bd60ad9d7d9"

home-or-tmp@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
Expand Down Expand Up @@ -3851,6 +3867,12 @@ loose-envify@^1.0.0, loose-envify@^1.1.0:
dependencies:
js-tokens "^2.0.0"

loose-envify@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
dependencies:
js-tokens "^3.0.0"

lowercase-keys@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
Expand Down Expand Up @@ -4100,7 +4122,7 @@ node-libs-browser@^2.0.0:
util "^0.10.3"
vm-browserify "0.0.4"

node-notifier@5.1.2:
node-notifier@5.1.2, node-notifier@^5.0.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff"
dependencies:
Expand All @@ -4109,15 +4131,6 @@ node-notifier@5.1.2:
shellwords "^0.1.0"
which "^1.2.12"

node-notifier@^5.0.1:
version "5.0.2"
resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.0.2.tgz#4438449fe69e321f941cef943986b0797032701b"
dependencies:
growly "^1.3.0"
semver "^5.3.0"
shellwords "^0.1.0"
which "^1.2.12"

node-pre-gyp@^0.6.29:
version "0.6.32"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5"
Expand Down Expand Up @@ -4495,6 +4508,13 @@ promise@^7.1.1:
dependencies:
asap "~2.0.3"

prop-types@^15.5.9:
version "15.5.10"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154"
dependencies:
fbjs "^0.8.9"
loose-envify "^1.3.1"

prr@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
Expand Down Expand Up @@ -4842,17 +4862,18 @@ redux-devtools@^3.3.2:
lodash "^4.2.0"
redux-devtools-instrument "^1.0.1"

redux-form@^6.6.0:
version "6.6.0"
resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-6.6.0.tgz#a26f05d5a2b317596733718031dec94126a0f05c"
redux-form@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-7.0.1.tgz#2754a4fbd343b90ae336e3f3637d060127429e92"
dependencies:
deep-equal "^1.0.1"
es6-error "^4.0.0"
hoist-non-react-statics "^1.2.0"
hoist-non-react-statics "^2.0.0"
invariant "^2.2.2"
is-promise "^2.1.0"
lodash "^4.17.3"
lodash-es "^4.17.3"
prop-types "^15.5.9"

redux-saga@^0.14.3:
version "0.14.3"
Expand Down Expand Up @@ -5027,13 +5048,13 @@ right-align@^0.1.1:
dependencies:
align-text "^0.1.1"

rimraf@2, rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@~2.5.1, rimraf@~2.5.4:
rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4:
version "2.5.4"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
dependencies:
glob "^7.0.5"

rimraf@~2.4.0:
rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@~2.4.0:
version "2.4.5"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da"
dependencies:
Expand Down Expand Up @@ -5195,7 +5216,7 @@ source-map-support@0.4.13:
dependencies:
source-map "^0.5.6"

source-map-support@0.4.15:
source-map-support@0.4.15, source-map-support@^0.4.2:
version "0.4.15"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1"
dependencies:
Expand All @@ -5207,12 +5228,6 @@ source-map-support@0.4.6:
dependencies:
source-map "^0.5.3"

source-map-support@^0.4.2:
version "0.4.8"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.8.tgz#4871918d8a3af07289182e974e32844327b2e98b"
dependencies:
source-map "^0.5.3"

source-map@0.1.31:
version "0.1.31"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.31.tgz#9f704d0d69d9e138a81badf6ebb4fde33d151c61"
Expand Down

0 comments on commit b7adff1

Please sign in to comment.