Skip to content

Commit 91a4a1f

Browse files
authored
Merge pull request #2341 from lindapaiste/refactor/file-selectors
Create selector functions for root file, active file
2 parents 84defd9 + e63cb03 commit 91a4a1f

File tree

7 files changed

+28
-26
lines changed

7 files changed

+28
-26
lines changed

client/modules/IDE/components/Editor.jsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import '../../../utils/htmlmixed';
4444
import '../../../utils/p5-javascript';
4545
import Timer from '../components/Timer';
4646
import EditorAccessibility from '../components/EditorAccessibility';
47+
import { selectActiveFile } from '../selectors/files';
4748
import AssetPreview from './AssetPreview';
4849
import { metaKey } from '../../../utils/metaKey';
4950
import './show-hint';
@@ -605,10 +606,7 @@ Editor.propTypes = {
605606
function mapStateToProps(state) {
606607
return {
607608
files: state.files,
608-
file:
609-
state.files.find((file) => file.isSelectedFile) ||
610-
state.files.find((file) => file.name === 'sketch.js') ||
611-
state.files.find((file) => file.name !== 'root'),
609+
file: selectActiveFile(state),
612610
htmlFile: getHTMLFile(state.files),
613611
ide: state.ide,
614612
preferences: state.preferences,

client/modules/IDE/components/Header/Nav.jsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { setLanguage } from '../../actions/preferences';
1414
import NavBar from '../../../../components/Nav/NavBar';
1515
import CaretLeftIcon from '../../../../images/left-arrow.svg';
1616
import LogoIcon from '../../../../images/p5js-logo-small.svg';
17+
import { selectRootFile } from '../../selectors/files';
1718
import { selectSketchPath } from '../../selectors/project';
1819
import { metaKey, metaKeyName } from '../../../../utils/metaKey';
1920
import { useSketchActions } from '../../hooks';
@@ -102,17 +103,14 @@ const DashboardMenu = () => {
102103
);
103104
};
104105

105-
const ProjectMenu = (props) => {
106+
const ProjectMenu = () => {
106107
const isUserOwner = useSelector(getIsUserOwner);
107108
const project = useSelector((state) => state.project);
108109
const user = useSelector((state) => state.user);
109110

110111
const isUnsaved = !project?.id;
111112

112-
// TODO: use selectRootFile selector
113-
const rootFile = useSelector(
114-
(state) => state.files.filter((file) => file.name === 'root')[0]
115-
);
113+
const rootFile = useSelector(selectRootFile);
116114

117115
const cmRef = useContext(CmControllerContext);
118116

client/modules/IDE/components/Sidebar.jsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
openProjectOptions,
1010
openUploadFileModal
1111
} from '../actions/ide';
12+
import { selectRootFile } from '../selectors/files';
1213
import { getAuthenticated, selectCanEditSketch } from '../selectors/users';
1314

1415
import ConnectedFileNode from './FileNode';
@@ -23,9 +24,7 @@ export default function SideBar() {
2324

2425
const [isFocused, setIsFocused] = useState(false);
2526

26-
const files = useSelector((state) => state.files);
27-
// TODO: use `selectRootFile` defined in another PR
28-
const rootFile = files.filter((file) => file.name === 'root')[0];
27+
const rootFile = useSelector(selectRootFile);
2928
const projectOptionsVisible = useSelector(
3029
(state) => state.ide.projectOptionsVisible
3130
);

client/modules/IDE/pages/IDEView.jsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import About from '../components/About';
3333
import AddToCollectionList from '../components/AddToCollectionList';
3434
import Feedback from '../components/Feedback';
3535
import { CollectionSearchbar } from '../components/Searchbar';
36+
import { selectActiveFile } from '../selectors/files';
3637
import { getIsUserOwner } from '../selectors/users';
3738
import RootPage from '../../../components/RootPage';
3839

@@ -548,10 +549,7 @@ IDEView.propTypes = {
548549

549550
function mapStateToProps(state) {
550551
return {
551-
selectedFile:
552-
state.files.find((file) => file.isSelectedFile) ||
553-
state.files.find((file) => file.name === 'sketch.js') ||
554-
state.files.find((file) => file.name !== 'root'),
552+
selectedFile: selectActiveFile(state),
555553
htmlFile: getHTMLFile(state.files),
556554
ide: state.ide,
557555
preferences: state.preferences,

client/modules/IDE/pages/MobileIDEView.jsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import { remSize } from '../../../theme';
4141
import ActionStrip from '../../../components/mobile/ActionStrip';
4242
import useAsModal from '../../../components/useAsModal';
4343
import Dropdown from '../../../components/Dropdown';
44+
import { selectActiveFile } from '../selectors/files';
4445
import { getIsUserOwner } from '../selectors/users';
4546

4647
import {
@@ -475,10 +476,7 @@ MobileIDEView.propTypes = {
475476

476477
function mapStateToProps(state) {
477478
return {
478-
selectedFile:
479-
state.files.find((file) => file.isSelectedFile) ||
480-
state.files.find((file) => file.name === 'sketch.js') ||
481-
state.files.find((file) => file.name !== 'root'),
479+
selectedFile: selectActiveFile(state),
482480
ide: state.ide,
483481
files: state.files,
484482
unsavedChanges: state.ide.unsavedChanges,

client/modules/IDE/selectors/files.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { createSelector } from 'reselect';
2+
3+
const selectFiles = (state) => state.files;
4+
5+
export const selectRootFile = createSelector(selectFiles, (files) =>
6+
files.find((file) => file.name === 'root')
7+
);
8+
9+
export const selectActiveFile = createSelector(
10+
selectFiles,
11+
(files) =>
12+
files.find((file) => file.isSelectedFile) ||
13+
files.find((file) => file.name === 'sketch.js') ||
14+
files.find((file) => file.name !== 'root')
15+
);

client/modules/Mobile/MobileSketchView.jsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,15 @@ import { getHTMLFile } from '../IDE/reducers/files';
1616

1717
import { ExitIcon } from '../../common/icons';
1818
import Footer from '../../components/mobile/Footer';
19+
import { selectActiveFile } from '../IDE/selectors/files';
1920
import Content from './MobileViewContent';
2021

2122
const MobileSketchView = () => {
2223
const { files, ide, preferences } = useSelector((state) => state);
2324

2425
const htmlFile = useSelector((state) => getHTMLFile(state.files));
2526
const projectName = useSelector((state) => state.project.name);
26-
const selectedFile = useSelector(
27-
(state) =>
28-
state.files.find((file) => file.isSelectedFile) ||
29-
state.files.find((file) => file.name === 'sketch.js') ||
30-
state.files.find((file) => file.name !== 'root')
31-
);
27+
const selectedFile = useSelector(selectActiveFile);
3228

3329
const {
3430
setTextOutput,

0 commit comments

Comments
 (0)