Skip to content

Commit cf17139

Browse files
committed
Added createConfig for letting user change requestSuffixes
1 parent 3596b03 commit cf17139

File tree

5 files changed

+1107
-368
lines changed

5 files changed

+1107
-368
lines changed

dist/index.js

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
'use strict';
2+
3+
var lodash = require('lodash');
4+
5+
function createAction (type) {
6+
var payloadCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : lodash.identity;
7+
var metaCreator = arguments[2];
8+
9+
var hasPayload = !lodash.isUndefined(payloadCreator);
10+
var finalPayloadCreator = lodash.isFunction(payloadCreator) ? payloadCreator : lodash.identity;
11+
var hasMetaCreator = lodash.isFunction(metaCreator);
12+
13+
var createAction = function createAction() {
14+
var payload = hasPayload ? finalPayloadCreator.apply(undefined, arguments) : payloadCreator;
15+
16+
var action = {
17+
type: type,
18+
error: payload instanceof Error
19+
};
20+
21+
if (payload) {
22+
action.payload = payload;
23+
}
24+
25+
if (hasMetaCreator) {
26+
action.meta = metaCreator.apply(undefined, arguments);
27+
}
28+
29+
return action;
30+
};
31+
32+
return createAction;
33+
}
34+
35+
var SuffixEnum = Object.freeze({
36+
REQUESTED: 'REQUESTED',
37+
COMPLETED: 'COMPLETED',
38+
FAILED: 'FAILED'
39+
});
40+
41+
var defaultRTSuffixes = [SuffixEnum.REQUESTED, SuffixEnum.COMPLETED, SuffixEnum.FAILED];
42+
43+
var sharedConfig = {
44+
requestSuffixes: defaultRTSuffixes
45+
};
46+
47+
var createConfig = function createConfig(_ref) {
48+
var requestSuffixes = _ref.requestSuffixes;
49+
50+
if (requestSuffixes) {
51+
try {
52+
sharedConfig.requestSuffixes = requestSuffixes;
53+
} catch (error) {
54+
console.warn('Request suffixes are already set somewhere in your code.');
55+
}
56+
57+
// This prevents direct access and modification of shared config object
58+
sharedConfig = Object.freeze(sharedConfig);
59+
60+
return sharedConfig;
61+
}
62+
};
63+
64+
function createRequestTypes(base) {
65+
var res = {};
66+
var suffixes = sharedConfig.requestSuffixes;
67+
68+
suffixes.forEach(function (type) {
69+
res[type] = base + '_' + type;
70+
});
71+
72+
return res;
73+
}
74+
75+
function createRequestActions (types) {
76+
var res = {};
77+
78+
Object.keys(types).forEach(function (type) {
79+
if (Object.prototype.hasOwnProperty.call(types, type)) {
80+
res[type.toLowerCase()] = createAction(types[type]);
81+
}
82+
});
83+
84+
return res;
85+
}
86+
87+
module.exports = {
88+
createAction: createAction,
89+
createRequestTypes: createRequestTypes,
90+
createRequestActions: createRequestActions,
91+
createConfig: createConfig
92+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import test from 'ava'
2+
import { createConfig } from '../../dist';
3+
4+
test("should set config and return it", t => {
5+
const config = createConfig({
6+
requestSuffixes: ['R', 'C', 'F']
7+
});
8+
9+
t.deepEqual(config, {
10+
requestSuffixes: ['R', 'C','F']
11+
});
12+
});

src/create-config.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import defaultRTSuffixes from './request-type-suffixes';
2+
import requestTypeSuffixes from './request-type-suffixes';
3+
4+
export let sharedConfig = {
5+
requestSuffixes: defaultRTSuffixes
6+
}
7+
8+
const createConfig = ({ requestSuffixes }) => {
9+
if (requestSuffixes) {
10+
try {
11+
sharedConfig.requestSuffixes = requestSuffixes;
12+
} catch (error) {
13+
console.warn('Request suffixes are already set somewhere in your code.')
14+
}
15+
16+
// This prevents direct access and modification of shared config object
17+
sharedConfig = Object.freeze(sharedConfig)
18+
19+
return sharedConfig;
20+
}
21+
}
22+
23+
export default createConfig;

src/index.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import createAction from './create-action';
22
import createRequestTypes from './create-request-types';
3-
import createActionsFromTypes from './create-actions-from-types';
3+
import createRequestActions from './create-request-actions';
4+
import createConfig from './create-config';
45

56
module.exports = {
67
createAction,
78
createRequestTypes,
8-
createActionsFromTypes
9+
createRequestActions,
10+
createConfig
911
};

0 commit comments

Comments
 (0)