refactor(client): document and test create types utilities (#42960)
Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
import { createAction, handleActions } from 'redux-actions';
|
||||
import { isEmpty } from 'lodash-es';
|
||||
|
||||
import { createTypes } from '../../../../utils/stateManagement';
|
||||
|
||||
import { createTypes } from '../../../utils/create-types';
|
||||
import { createPoly } from '../../../../../utils/polyvinyl';
|
||||
import { getLines } from '../../../../../utils/get-lines';
|
||||
import completionEpic from './completion-epic';
|
||||
@ -14,7 +14,6 @@ import { createCurrentChallengeSaga } from './current-challenge-saga';
|
||||
import { challengeTypes } from '../../../../utils/challengeTypes';
|
||||
import { getTargetEditor } from '../utils/getTargetEditor';
|
||||
import { completedChallengesSelector } from '../../../redux';
|
||||
import { isEmpty } from 'lodash-es';
|
||||
|
||||
export const ns = 'challenge';
|
||||
export const backendNS = 'backendChallenge';
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { createAction, handleActions } from 'redux-actions';
|
||||
import { createTypes } from '../../../../utils/stateManagement';
|
||||
|
||||
import { createTypes } from '../../../utils/create-types';
|
||||
|
||||
export const ns = 'curriculumMap';
|
||||
|
||||
|
25
client/src/utils/create-types.test.ts
Normal file
25
client/src/utils/create-types.test.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import { createTypes, createAsyncTypes } from './create-types';
|
||||
|
||||
describe('Create types utility (createTypes)', () => {
|
||||
it('should generate an object with action types', () => {
|
||||
const types = ['lorem', 'ipsum'];
|
||||
const ns = 'namespace';
|
||||
|
||||
expect(createTypes(types, ns)).toEqual({
|
||||
lorem: 'namespace.lorem',
|
||||
ipsum: 'namespace.ipsum'
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Create async types utility (createAsyncTypes)', () => {
|
||||
it('should generate a list of actions names', () => {
|
||||
const action = 'action';
|
||||
|
||||
expect(createAsyncTypes(action)).toEqual([
|
||||
'action',
|
||||
'actionComplete',
|
||||
'actionError'
|
||||
]);
|
||||
});
|
||||
});
|
@ -2,10 +2,18 @@ type CreateTypesType = {
|
||||
[action: string]: string;
|
||||
};
|
||||
|
||||
export function createTypes(
|
||||
types: string[] = [],
|
||||
ns = 'annon'
|
||||
): CreateTypesType {
|
||||
/**
|
||||
* Creates an object in which the `keys` represent the action names and the
|
||||
* `values` the action type.
|
||||
* {
|
||||
* action: actionType,
|
||||
* ...
|
||||
* }
|
||||
* @param {array} types Names of the actions.
|
||||
* @param {string} ns Name of the namespace.
|
||||
* @returns {object} Object with action types.
|
||||
*/
|
||||
export function createTypes(types: string[], ns: string): CreateTypesType {
|
||||
return types.reduce(
|
||||
(types, action: string) => ({
|
||||
...types,
|
||||
@ -15,6 +23,14 @@ export function createTypes(
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an array with action names.
|
||||
* - original
|
||||
* - complete
|
||||
* - error
|
||||
* @param {string} action The name of the action.
|
||||
* @returns {array} Names of action names.
|
||||
*/
|
||||
export const createAsyncTypes = (action: string): string[] => [
|
||||
`${action}`,
|
||||
`${action}Complete`,
|
||||
|
@ -1,9 +0,0 @@
|
||||
export function createTypes(types = [], ns = 'annon') {
|
||||
return types.reduce(
|
||||
(types, action) => ({
|
||||
...types,
|
||||
[action]: `${ns}.${action}`
|
||||
}),
|
||||
{}
|
||||
);
|
||||
}
|
Reference in New Issue
Block a user