Skip to content

Commit 71c89c3

Browse files
authored
Add convenience functions for createRequest (#114)
* Add convenience functions for createRequest * Version bump: 5.7.0
1 parent 67e0844 commit 71c89c3

File tree

5 files changed

+82
-7
lines changed

5 files changed

+82
-7
lines changed

docs.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,8 @@ function fooAction () {
218218

219219
A function that creates action creators for making API requests, much like [createAction][43] from `redux-actions`.
220220

221+
Note: there are convenience functions for each request method: `createPostRequest()`, `createPutRequest()`, etc.
222+
221223
### Parameters
222224

223225
- `type` **[String][41]** A unique key that will be used to identify the request internally in redux

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@launchpadlab/lp-redux-api",
3-
"version": "5.6.2",
3+
"version": "5.7.0",
44
"description": "redux middleware and api library",
55
"main": "lib/index.js",
66
"scripts": {

src/create-request.js

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import { isObject, isFunction } from 'lodash'
55
/**
66
* A function that creates action creators for making API requests, much like [createAction](https://redux-actions.js.org/api-reference/createaction-s) from `redux-actions`.
77
*
8+
* Note: there are convenience functions for each request method: `createPostRequest()`, `createPutRequest()`, etc.
9+
*
810
* @name createRequest
911
* @param {String} type - A unique key that will be used to identify the request internally in redux
1012
* @param {Object|Function} definition - An object of `lp-request` config options, or a function that returns config options.
@@ -33,13 +35,14 @@ function createActionOptions (definition, args) {
3335
: definition
3436
}
3537

36-
function createRequest (type, definition) {
38+
function createRequestWithMethod (type, definition, method) {
3739
if (!type) throw new Error('Must include a type for your request.')
3840
if (!definition) throw new Error('Must include a request definition for your request.')
3941
if (!(isObject(definition) || isFunction(definition))) throw new Error('Request definition must be an object or a function.')
4042
function actionCreator (...args) {
4143
return {
4244
[LP_API]: {
45+
method,
4346
...createActionOptions(definition, args),
4447
requestKey: type,
4548
}
@@ -49,4 +52,27 @@ function createRequest (type, definition) {
4952
return actionCreator
5053
}
5154

52-
export default createRequest
55+
56+
export function createRequest (type, definition) {
57+
return createRequestWithMethod(type, definition, 'GET')
58+
}
59+
60+
// Export convenience function for each request method
61+
62+
export const createGetRequest = createRequest
63+
64+
export function createPostRequest (type, definition) {
65+
return createRequestWithMethod(type, definition, 'POST')
66+
}
67+
68+
export function createPutRequest (type, definition) {
69+
return createRequestWithMethod(type, definition, 'PUT')
70+
}
71+
72+
export function createPatchRequest (type, definition) {
73+
return createRequestWithMethod(type, definition, 'PATCH')
74+
}
75+
76+
export function createDeleteRequest (type, definition) {
77+
return createRequestWithMethod(type, definition, 'DELETE')
78+
}

src/index.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,14 @@ export {
55
} from './actions'
66
export * from './handlers'
77
export { default as LP_API } from './LP_API'
8-
export { default as createRequest } from './create-request'
8+
export {
9+
createRequest,
10+
createGetRequest,
11+
createPostRequest,
12+
createPutRequest,
13+
createPatchRequest,
14+
createDeleteRequest,
15+
} from './create-request'
916
export { default as middleware } from './middleware'
1017
export { default as reducer } from './reducer'
1118
export { default as requestWithKey } from './request-with-key'

test/create-request.test.js

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
import { createRequest, LP_API } from '../src/'
1+
import {
2+
LP_API,
3+
createRequest,
4+
createGetRequest,
5+
createPostRequest,
6+
createPutRequest,
7+
createPatchRequest,
8+
createDeleteRequest,
9+
} from '../src/'
210
import { REQUEST_TYPE } from './fixtures'
311

412
test('createRequest requires a type argument', () => {
@@ -13,17 +21,49 @@ test('createRequest accepts object request definitions', () => {
1321
const options = { foo: 'bar' }
1422
const actionCreator = createRequest(REQUEST_TYPE, options)
1523
const action = actionCreator()
16-
expect(action[LP_API]).toEqual({ requestKey: REQUEST_TYPE, foo: 'bar' })
24+
expect(action[LP_API]).toEqual({ requestKey: REQUEST_TYPE, foo: 'bar', method: 'GET' })
1725
})
1826

1927
test('createRequest accepts function request definitions', () => {
2028
const actionCreator = createRequest(REQUEST_TYPE, (arg) => ({
2129
foo: arg
2230
}))
2331
const action = actionCreator('bar')
24-
expect(action[LP_API]).toEqual({ requestKey: REQUEST_TYPE, foo: 'bar' })
32+
expect(action[LP_API]).toEqual({ requestKey: REQUEST_TYPE, foo: 'bar', method: 'GET' })
2533
})
2634

2735
test('createRequest rejects other types of request definitions', () => {
2836
expect(() => createRequest(REQUEST_TYPE, 'wtf')).toThrow()
2937
})
38+
39+
// Convenience functions
40+
41+
test('createGetRequest creates a request with method GET', () => {
42+
const actionCreator = createGetRequest(REQUEST_TYPE, {})
43+
const action = actionCreator()
44+
expect(action[LP_API].method).toEqual('GET')
45+
})
46+
47+
test('createPostRequest creates a request with method POST', () => {
48+
const actionCreator = createPostRequest(REQUEST_TYPE, {})
49+
const action = actionCreator()
50+
expect(action[LP_API].method).toEqual('POST')
51+
})
52+
53+
test('createPutRequest creates a request with method PUT', () => {
54+
const actionCreator = createPutRequest(REQUEST_TYPE, {})
55+
const action = actionCreator()
56+
expect(action[LP_API].method).toEqual('PUT')
57+
})
58+
59+
test('createPatchRequest creates a request with method PATCH', () => {
60+
const actionCreator = createPatchRequest(REQUEST_TYPE, {})
61+
const action = actionCreator()
62+
expect(action[LP_API].method).toEqual('PATCH')
63+
})
64+
65+
test('createDeleteRequest creates a request with method DELETE', () => {
66+
const actionCreator = createDeleteRequest(REQUEST_TYPE, {})
67+
const action = actionCreator()
68+
expect(action[LP_API].method).toEqual('DELETE')
69+
})

0 commit comments

Comments
 (0)