Move content into files
This commit is contained in:
@ -32,3 +32,7 @@ export const updateFilter = createAction(
|
|||||||
);
|
);
|
||||||
|
|
||||||
export const clearFilter = createAction(types.clearFilter);
|
export const clearFilter = createAction(types.clearFilter);
|
||||||
|
|
||||||
|
// files
|
||||||
|
export const updateFile = createAction(types.updateFile);
|
||||||
|
export const updateFiles = createAction(types.updateFiles);
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { handleActions } from 'redux-actions';
|
import { handleActions } from 'redux-actions';
|
||||||
|
import { createPoly } from '../../../../utils/polyvinyl';
|
||||||
|
|
||||||
import types from './types';
|
import types from './types';
|
||||||
|
|
||||||
@ -7,20 +8,20 @@ const initialState = {
|
|||||||
currentStep: 0,
|
currentStep: 0,
|
||||||
previousStep: -1,
|
previousStep: -1,
|
||||||
filter: '',
|
filter: '',
|
||||||
content: null,
|
files: {},
|
||||||
superBlocks: []
|
superBlocks: []
|
||||||
};
|
};
|
||||||
|
|
||||||
function arrayToNewLineString(seedData = []) {
|
function arrayToNewLineString(seedData = []) {
|
||||||
seedData = Array.isArray(seedData) ? seedData : [seedData];
|
seedData = Array.isArray(seedData) ? seedData : [seedData];
|
||||||
return seedData.reduce((seed, line) => '' + seed + line + '\n', '\n');
|
return seedData.reduce((seed, line) => '' + seed + line + '\n', '');
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildSeed({ challengeSeed = [] } = {}) {
|
function buildSeed({ challengeSeed = [] } = {}) {
|
||||||
return arrayToNewLineString(challengeSeed);
|
return arrayToNewLineString(challengeSeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default handleActions(
|
const mainReducer = handleActions(
|
||||||
{
|
{
|
||||||
[types.fetchChallengeCompleted]: (state, { payload = '' }) => ({
|
[types.fetchChallengeCompleted]: (state, { payload = '' }) => ({
|
||||||
...state,
|
...state,
|
||||||
@ -28,8 +29,7 @@ export default handleActions(
|
|||||||
}),
|
}),
|
||||||
[types.updateCurrentChallenge]: (state, { payload: challenge }) => ({
|
[types.updateCurrentChallenge]: (state, { payload: challenge }) => ({
|
||||||
...state,
|
...state,
|
||||||
challenge: challenge.dashedName,
|
challenge: challenge.dashedName
|
||||||
content: buildSeed(challenge)
|
|
||||||
}),
|
}),
|
||||||
|
|
||||||
// map
|
// map
|
||||||
@ -56,3 +56,33 @@ export default handleActions(
|
|||||||
},
|
},
|
||||||
initialState
|
initialState
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const filesReducer = handleActions(
|
||||||
|
{
|
||||||
|
[types.updateFile]: (state, { payload: file }) => ({
|
||||||
|
...state,
|
||||||
|
[file.path]: file
|
||||||
|
}),
|
||||||
|
[types.updateFiles]: (state, { payload: files }) => {
|
||||||
|
return files
|
||||||
|
.reduce((files, file) => {
|
||||||
|
files[file.path] = file;
|
||||||
|
return files;
|
||||||
|
}, { ...state });
|
||||||
|
},
|
||||||
|
[types.updateCurrentChallenge]: (state, { payload: challenge }) => {
|
||||||
|
const path = challenge.dashedName + challenge.type;
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
[path]: createPoly({ path, contents: buildSeed(challenge) })
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
|
||||||
|
export default function challengeReducers(state, action) {
|
||||||
|
const newState = mainReducer(state, action);
|
||||||
|
const files = filesReducer(state && state.files || {}, action);
|
||||||
|
return newState.files !== files ? { ...newState, files } : newState;
|
||||||
|
}
|
||||||
|
@ -13,5 +13,9 @@ export default createTypes([
|
|||||||
|
|
||||||
// map
|
// map
|
||||||
'updateFilter',
|
'updateFilter',
|
||||||
'clearFilter'
|
'clearFilter',
|
||||||
|
|
||||||
|
// files
|
||||||
|
'updateFile',
|
||||||
|
'updateFiles'
|
||||||
], 'challenges');
|
], 'challenges');
|
||||||
|
Reference in New Issue
Block a user