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:
Shaun Hamilton
2021-08-12 19:48:28 +01:00
committed by GitHub
parent 1f62dfe2b3
commit 59f17f237b
41 changed files with 916 additions and 910 deletions

View File

@@ -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