@@ -33,6 +33,7 @@ import { remSize } from '../../../theme';
3333import ActionStrip from '../../../components/mobile/ActionStrip' ;
3434import useAsModal from '../../../components/useAsModal' ;
3535import Dropdown from '../../../components/Dropdown' ;
36+ import { getIsUserOwner } from '../selectors/users' ;
3637
3738
3839import { useEffectWithComparison , useEventListener } from '../../../utils/custom-hooks' ;
@@ -76,12 +77,8 @@ const getNavOptions = (username = undefined, logoutUser = () => {}, toggleForceD
7677 ]
7778 ) ;
7879
79-
80- const isUserOwner = ( { project, user } ) =>
81- project && project . owner && project . owner . id === user . id ;
82-
83- const canSaveProject = ( project , user ) =>
84- isUserOwner ( { project, user } ) || ( user . authenticated && ! project . owner ) ;
80+ const canSaveProject = ( isUserOwner , project , user ) =>
81+ isUserOwner || ( user . authenticated && ! project . owner ) ;
8582
8683// TODO: This could go into <Editor />
8784const handleGlobalKeydown = ( props , cmController ) => ( e ) => {
@@ -90,7 +87,7 @@ const handleGlobalKeydown = (props, cmController) => (e) => {
9087 setAllAccessibleOutput,
9188 saveProject, cloneProject, showErrorModal, startSketch, stopSketch,
9289 expandSidebar, collapseSidebar, expandConsole, collapseConsole,
93- closeNewFolderModal, closeUploadFileModal, closeNewFileModal
90+ closeNewFolderModal, closeUploadFileModal, closeNewFileModal, isUserOwner
9491 } = props ;
9592
9693
@@ -123,7 +120,7 @@ const handleGlobalKeydown = (props, cmController) => (e) => {
123120 // 83 === s
124121 e . preventDefault ( ) ;
125122 e . stopPropagation ( ) ;
126- if ( canSaveProject ( project , user ) ) saveProject ( cmController . getContent ( ) , false , true ) ;
123+ if ( canSaveProject ( isUserOwner , project , user ) ) saveProject ( cmController . getContent ( ) , false , true ) ;
127124 else if ( user . authenticated ) cloneProject ( ) ;
128125 else showErrorModal ( 'forceAuthentication' ) ;
129126
@@ -147,14 +144,14 @@ const handleGlobalKeydown = (props, cmController) => (e) => {
147144
148145const autosave = ( autosaveInterval , setAutosaveInterval ) => ( props , prevProps ) => {
149146 const {
150- autosaveProject, preferences, ide, selectedFile : file , project
147+ autosaveProject, preferences, ide, selectedFile : file , project, isUserOwner
151148 } = props ;
152149
153150 const { selectedFile : oldFile } = prevProps ;
154151
155152 const doAutosave = ( ) => autosaveProject ( true ) ;
156153
157- if ( isUserOwner ( props ) && project . id ) {
154+ if ( props . isUserOwner && project . id ) {
158155 if ( preferences . autosave && ide . unsavedChanges && ! ide . justOpenedProject ) {
159156 if ( file . name === oldFile . name && file . content !== oldFile . content ) {
160157 if ( autosaveInterval ) {
@@ -189,7 +186,7 @@ const MobileIDEView = (props) => {
189186 const {
190187 ide, preferences, project, selectedFile, user, params, unsavedChanges, expandConsole, collapseConsole,
191188 stopSketch, startSketch, getProject, clearPersistedState, autosaveProject, saveProject, files,
192- toggleForceDesktop, logoutUser, toast
189+ toggleForceDesktop, logoutUser, toast, isUserOwner
193190 } = props ;
194191
195192
@@ -234,7 +231,7 @@ const MobileIDEView = (props) => {
234231 // TODO: This behavior could move to <Editor />
235232 const [ autosaveInterval , setAutosaveInterval ] = useState ( null ) ;
236233 useEffectWithComparison ( autosave ( autosaveInterval , setAutosaveInterval ) , {
237- autosaveProject, preferences, ide, selectedFile, project, user
234+ autosaveProject, preferences, ide, selectedFile, project, user, isUserOwner
238235 } ) ;
239236
240237 useEventListener ( 'keydown' , handleGlobalKeydown ( props , cmController ) , false , [ props ] ) ;
@@ -299,6 +296,7 @@ const handleGlobalKeydownProps = {
299296 closeNewFolderModal : PropTypes . func . isRequired ,
300297 closeUploadFileModal : PropTypes . func . isRequired ,
301298 closeNewFileModal : PropTypes . func . isRequired ,
299+ isUserOwner : PropTypes . bool . isRequired
302300} ;
303301
304302MobileIDEView . propTypes = {
@@ -356,6 +354,7 @@ MobileIDEView.propTypes = {
356354
357355 unsavedChanges : PropTypes . bool . isRequired ,
358356 autosaveProject : PropTypes . func . isRequired ,
357+ isUserOwner : PropTypes . bool . isRequired ,
359358
360359
361360 ...handleGlobalKeydownProps
@@ -375,6 +374,7 @@ function mapStateToProps(state) {
375374 project : state . project ,
376375 toast : state . toast ,
377376 console : state . console ,
377+ isUserOwner : getIsUserOwner ( state )
378378 } ;
379379}
380380
0 commit comments