Skip to content

Commit e76ba86

Browse files
committed
Create selector functions for files.
1 parent c1b5636 commit e76ba86

File tree

7 files changed

+27
-22
lines changed

7 files changed

+27
-22
lines changed

client/components/Nav.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
setAllAccessibleOutput,
1313
setLanguage
1414
} from '../modules/IDE/actions/preferences';
15+
import { selectRootFile } from '../modules/IDE/selectors/files';
1516
import { logoutUser } from '../modules/User/actions';
1617

1718
import getConfig from '../utils/getConfig';
@@ -403,7 +404,7 @@ function mapStateToProps(state) {
403404
project: state.project,
404405
user: state.user,
405406
unsavedChanges: state.ide.unsavedChanges,
406-
rootFile: state.files.filter((file) => file.name === 'root')[0],
407+
rootFile: selectRootFile(state),
407408
language: state.preferences.language,
408409
isUserOwner: getIsUserOwner(state),
409410
editorLink: selectSketchPath(state)

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';
@@ -601,10 +602,7 @@ Editor.propTypes = {
601602
function mapStateToProps(state) {
602603
return {
603604
files: state.files,
604-
file:
605-
state.files.find((file) => file.isSelectedFile) ||
606-
state.files.find((file) => file.name === 'sketch.js') ||
607-
state.files.find((file) => file.name !== 'root'),
605+
file: selectActiveFile(state),
608606
htmlFile: getHTMLFile(state.files),
609607
ide: state.ide,
610608
preferences: state.preferences,

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

@@ -549,10 +550,7 @@ IDEView.propTypes = {
549550

550551
function mapStateToProps(state) {
551552
return {
552-
selectedFile:
553-
state.files.find((file) => file.isSelectedFile) ||
554-
state.files.find((file) => file.name === 'sketch.js') ||
555-
state.files.find((file) => file.name !== 'root'),
553+
selectedFile: selectActiveFile(state),
556554
htmlFile: getHTMLFile(state.files),
557555
ide: state.ide,
558556
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)