File tree Expand file tree Collapse file tree 7 files changed +28
-26
lines changed Expand file tree Collapse file tree 7 files changed +28
-26
lines changed Original file line number Diff line number Diff line change @@ -44,6 +44,7 @@ import '../../../utils/htmlmixed';
4444import '../../../utils/p5-javascript' ;
4545import Timer from '../components/Timer' ;
4646import EditorAccessibility from '../components/EditorAccessibility' ;
47+ import { selectActiveFile } from '../selectors/files' ;
4748import AssetPreview from './AssetPreview' ;
4849import { metaKey } from '../../../utils/metaKey' ;
4950import './show-hint' ;
@@ -605,10 +606,7 @@ Editor.propTypes = {
605606function 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 ,
Original file line number Diff line number Diff line change @@ -14,6 +14,7 @@ import { setLanguage } from '../../actions/preferences';
1414import NavBar from '../../../../components/Nav/NavBar' ;
1515import CaretLeftIcon from '../../../../images/left-arrow.svg' ;
1616import LogoIcon from '../../../../images/p5js-logo-small.svg' ;
17+ import { selectRootFile } from '../../selectors/files' ;
1718import { selectSketchPath } from '../../selectors/project' ;
1819import { metaKey , metaKeyName } from '../../../../utils/metaKey' ;
1920import { 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
Original file line number Diff line number Diff line change 99 openProjectOptions ,
1010 openUploadFileModal
1111} from '../actions/ide' ;
12+ import { selectRootFile } from '../selectors/files' ;
1213import { getAuthenticated , selectCanEditSketch } from '../selectors/users' ;
1314
1415import 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 ) ;
Original file line number Diff line number Diff line change @@ -33,6 +33,7 @@ import About from '../components/About';
3333import AddToCollectionList from '../components/AddToCollectionList' ;
3434import Feedback from '../components/Feedback' ;
3535import { CollectionSearchbar } from '../components/Searchbar' ;
36+ import { selectActiveFile } from '../selectors/files' ;
3637import { getIsUserOwner } from '../selectors/users' ;
3738import RootPage from '../../../components/RootPage' ;
3839
@@ -548,10 +549,7 @@ IDEView.propTypes = {
548549
549550function 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 ,
Original file line number Diff line number Diff line change @@ -41,6 +41,7 @@ import { remSize } from '../../../theme';
4141import ActionStrip from '../../../components/mobile/ActionStrip' ;
4242import useAsModal from '../../../components/useAsModal' ;
4343import Dropdown from '../../../components/Dropdown' ;
44+ import { selectActiveFile } from '../selectors/files' ;
4445import { getIsUserOwner } from '../selectors/users' ;
4546
4647import {
@@ -475,10 +476,7 @@ MobileIDEView.propTypes = {
475476
476477function 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 ,
Original file line number Diff line number Diff line change 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+ ) ;
Original file line number Diff line number Diff line change @@ -16,19 +16,15 @@ import { getHTMLFile } from '../IDE/reducers/files';
1616
1717import { ExitIcon } from '../../common/icons' ;
1818import Footer from '../../components/mobile/Footer' ;
19+ import { selectActiveFile } from '../IDE/selectors/files' ;
1920import Content from './MobileViewContent' ;
2021
2122const 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,
You can’t perform that action at this time.
0 commit comments