refactor: files{} -> challengeFiles[], and key -> fileKey (#43023)
* fix(client): fix client * fix propType and add comment * revert user.json prettification * slight type refactor and payload correction Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com> * update ChallengeFile type imports * add cypress test for code-storage * update test and storage epic * fix Shaun's tired brain's logic * refactor with suggestions Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com> * update codeReset * increate cypress timeout because firefox is slow * remove unused import to make linter happy * use focus on editor Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com> * use more specific seletor for cypress editor test * account for silly null challengeFiles Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com> Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
This commit is contained in:
@@ -19,7 +19,7 @@ export { ns };
|
||||
const initialState = {
|
||||
canFocusEditor: true,
|
||||
visibleEditors: {},
|
||||
challengeFiles: {},
|
||||
challengeFiles: [],
|
||||
challengeMeta: {
|
||||
superBlock: '',
|
||||
block: '',
|
||||
@@ -60,24 +60,21 @@ export const sagas = [
|
||||
export const createFiles = createAction(
|
||||
actionTypes.createFiles,
|
||||
challengeFiles =>
|
||||
Object.keys(challengeFiles)
|
||||
.filter(key => challengeFiles[key])
|
||||
.map(key => challengeFiles[key])
|
||||
.reduce(
|
||||
(challengeFiles, file) => ({
|
||||
...challengeFiles,
|
||||
[file.key]: {
|
||||
...createPoly(file),
|
||||
seed: file.contents.slice(),
|
||||
editableContents: getLines(
|
||||
file.contents,
|
||||
file.editableRegionBoundaries
|
||||
),
|
||||
seedEditableRegionBoundaries: file.editableRegionBoundaries.slice()
|
||||
}
|
||||
}),
|
||||
{}
|
||||
)
|
||||
challengeFiles.reduce((challengeFiles, challengeFile) => {
|
||||
return [
|
||||
...challengeFiles,
|
||||
{
|
||||
...createPoly(challengeFile),
|
||||
seed: challengeFile.contents.slice(),
|
||||
editableContents: getLines(
|
||||
challengeFile.contents,
|
||||
challengeFile.editableRegionBoundaries
|
||||
),
|
||||
seedEditableRegionBoundaries:
|
||||
challengeFile.editableRegionBoundaries.slice()
|
||||
}
|
||||
];
|
||||
}, [])
|
||||
);
|
||||
|
||||
export const createQuestion = createAction(actionTypes.createQuestion);
|
||||
@@ -165,7 +162,7 @@ export const challengeDataSelector = state => {
|
||||
) {
|
||||
challengeData = {
|
||||
...challengeData,
|
||||
files: challengeFilesSelector(state)
|
||||
challengeFiles: challengeFilesSelector(state)
|
||||
};
|
||||
} else if (challengeType === challengeTypes.backend) {
|
||||
const { solution: url = {} } = projectFormValuesSelector(state);
|
||||
@@ -196,7 +193,7 @@ export const challengeDataSelector = state => {
|
||||
const { required = [], template = '' } = challengeMetaSelector(state);
|
||||
challengeData = {
|
||||
...challengeData,
|
||||
files: challengeFilesSelector(state),
|
||||
challengeFiles: challengeFilesSelector(state),
|
||||
required,
|
||||
template
|
||||
};
|
||||
@@ -216,19 +213,21 @@ export const reducer = handleActions(
|
||||
}),
|
||||
[actionTypes.updateFile]: (
|
||||
state,
|
||||
{ payload: { key, editorValue, editableRegionBoundaries } }
|
||||
) => ({
|
||||
...state,
|
||||
challengeFiles: {
|
||||
...state.challengeFiles,
|
||||
[key]: {
|
||||
...state.challengeFiles[key],
|
||||
contents: editorValue,
|
||||
editableContents: getLines(editorValue, editableRegionBoundaries),
|
||||
editableRegionBoundaries
|
||||
}
|
||||
}
|
||||
}),
|
||||
{ payload: { fileKey, editorValue, editableRegionBoundaries } }
|
||||
) => {
|
||||
return {
|
||||
...state,
|
||||
challengeFiles: [
|
||||
...state.challengeFiles.filter(x => x.fileKey !== fileKey),
|
||||
{
|
||||
...state.challengeFiles.find(x => x.fileKey === fileKey),
|
||||
contents: editorValue,
|
||||
editableContents: getLines(editorValue, editableRegionBoundaries),
|
||||
editableRegionBoundaries
|
||||
}
|
||||
]
|
||||
};
|
||||
},
|
||||
[actionTypes.storedCodeFound]: (state, { payload }) => ({
|
||||
...state,
|
||||
challengeFiles: payload
|
||||
@@ -268,35 +267,33 @@ export const reducer = handleActions(
|
||||
...state,
|
||||
challengeMeta: { ...payload }
|
||||
}),
|
||||
|
||||
[actionTypes.resetChallenge]: state => ({
|
||||
...state,
|
||||
currentTab: 2,
|
||||
challengeFiles: {
|
||||
...Object.keys(state.challengeFiles)
|
||||
.map(key => state.challengeFiles[key])
|
||||
.reduce(
|
||||
(files, file) => ({
|
||||
...files,
|
||||
[file.key]: {
|
||||
...file,
|
||||
contents: file.seed.slice(),
|
||||
editableContents: getLines(
|
||||
file.seed,
|
||||
file.seedEditableRegionBoundaries
|
||||
),
|
||||
editableRegionBoundaries: file.seedEditableRegionBoundaries
|
||||
}
|
||||
}),
|
||||
{}
|
||||
)
|
||||
},
|
||||
challengeTests: state.challengeTests.map(({ text, testString }) => ({
|
||||
text,
|
||||
testString
|
||||
})),
|
||||
consoleOut: []
|
||||
}),
|
||||
[actionTypes.resetChallenge]: state => {
|
||||
const challengeFilesReset = [
|
||||
...state.challengeFiles.reduce(
|
||||
(challengeFiles, challengeFile) => ({
|
||||
...challengeFiles,
|
||||
...challengeFile,
|
||||
contents: challengeFile.seed.slice(),
|
||||
editableContents: getLines(
|
||||
challengeFile.seed,
|
||||
challengeFile.seedEditableRegionBoundaries
|
||||
),
|
||||
editableRegionBoundaries: challengeFile.seedEditableRegionBoundaries
|
||||
}),
|
||||
{}
|
||||
)
|
||||
];
|
||||
return {
|
||||
...state,
|
||||
currentTab: 2,
|
||||
challengeFiles: challengeFilesReset,
|
||||
challengeTests: state.challengeTests.map(({ text, testString }) => ({
|
||||
text,
|
||||
testString
|
||||
})),
|
||||
consoleOut: []
|
||||
};
|
||||
},
|
||||
[actionTypes.updateSolutionFormValues]: (state, { payload }) => ({
|
||||
...state,
|
||||
projectFormValues: payload
|
||||
|
Reference in New Issue
Block a user