Skip to content

Commit 0b9d914

Browse files
refactor: memoize only selectors that compute (freeCodeCamp#58499)
1 parent 1738b1f commit 0b9d914

File tree

2 files changed

+11
-12
lines changed

2 files changed

+11
-12
lines changed

client/src/templates/Challenges/classic/show.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { connect } from 'react-redux';
66
import { HandlerProps } from 'react-reflex';
77
import { useMediaQuery } from 'react-responsive';
88
import { bindActionCreators, Dispatch } from 'redux';
9-
import { createStructuredSelector } from 'reselect';
109
import store from 'store';
1110
import { editor } from 'monaco-editor';
1211
import type { FitAddon } from 'xterm-addon-fit';
@@ -22,6 +21,7 @@ import {
2221
ChallengeNode,
2322
CompletedChallenge,
2423
ResizeProps,
24+
SavedChallenge,
2525
SavedChallengeFiles,
2626
Test
2727
} from '../../../redux/prop-types';
@@ -72,11 +72,11 @@ import { mergeChallengeFiles } from './saved-challenges';
7272
import './classic.css';
7373
import '../components/test-frame.css';
7474

75-
const mapStateToProps = createStructuredSelector({
76-
challengeFiles: challengeFilesSelector,
77-
output: consoleOutputSelector,
78-
isChallengeCompleted: isChallengeCompletedSelector,
79-
savedChallenges: savedChallengesSelector
75+
const mapStateToProps = (state: unknown) => ({
76+
challengeFiles: challengeFilesSelector(state) as ChallengeFiles,
77+
output: consoleOutputSelector(state) as string[],
78+
isChallengeCompleted: isChallengeCompletedSelector(state) as boolean,
79+
savedChallenges: savedChallengesSelector(state) as SavedChallenge[]
8080
});
8181

8282
const mapDispatchToProps = (dispatch: Dispatch) =>
@@ -120,7 +120,7 @@ interface ShowClassicProps extends Pick<PreviewProps, 'previewMounted'> {
120120
openModal: (modal: string) => void;
121121
setEditorFocusability: (canFocus: boolean) => void;
122122
setIsAdvancing: (arg: boolean) => void;
123-
savedChallenges: CompletedChallenge[];
123+
savedChallenges: SavedChallenge[];
124124
}
125125

126126
interface ReflexLayout {

client/src/templates/Challenges/redux/selectors.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,10 @@ export const completedChallengesIdsSelector = createSelector(
2020
completedChallengesSelector,
2121
completedChallenges => completedChallenges.map(node => node.id)
2222
);
23-
export const isChallengeCompletedSelector = state => {
24-
const completedChallenges = completedChallengesSelector(state);
25-
const { id: currentChallengeId } = challengeMetaSelector(state);
26-
return completedChallenges.some(({ id }) => id === currentChallengeId);
27-
};
23+
export const isChallengeCompletedSelector = createSelector(
24+
[completedChallengesIdsSelector, challengeMetaSelector],
25+
(ids, meta) => ids.includes(meta.id)
26+
);
2827
export const isCodeLockedSelector = state => state[ns].isCodeLocked;
2928
export const isCompletionModalOpenSelector = state =>
3029
state[ns].modal.completion;

0 commit comments

Comments
 (0)