1- import React from 'react' ;
1+ import React , { useState , useEffect , useCallback } from 'react' ;
22import classNames from 'classnames' ;
33import PropTypes from 'prop-types' ;
44import { useTranslation } from 'react-i18next' ;
@@ -15,22 +15,26 @@ import {
1515 setGridOutput ,
1616 setTextOutput
1717} from '../../actions/preferences' ;
18-
1918import PlayIcon from '../../../../images/play.svg' ;
2019import StopIcon from '../../../../images/stop.svg' ;
2120import PreferencesIcon from '../../../../images/preferences.svg' ;
2221import ProjectName from './ProjectName' ;
2322import VersionIndicator from '../VersionIndicator' ;
23+ import VisibilityDropdown from '../../../User/components/VisibilityDropdown' ;
24+ import { changeVisibility } from '../../actions/project' ;
2425
2526const Toolbar = ( props ) => {
2627 const { isPlaying, infiniteLoop, preferencesIsVisible } = useSelector (
2728 ( state ) => state . ide
2829 ) ;
2930 const project = useSelector ( ( state ) => state . project ) ;
31+ const user = useSelector ( ( state ) => state . user ) ;
3032 const autorefresh = useSelector ( ( state ) => state . preferences . autorefresh ) ;
3133 const dispatch = useDispatch ( ) ;
32-
3334 const { t } = useTranslation ( ) ;
35+ const userIsOwner = user ?. username === project . owner ?. username ;
36+
37+ const showVisibilityDropdown = project ?. owner && userIsOwner ;
3438
3539 const playButtonClass = classNames ( {
3640 'toolbar__play-button' : true ,
@@ -45,6 +49,13 @@ const Toolbar = (props) => {
4549 'toolbar__preferences-button--selected' : preferencesIsVisible
4650 } ) ;
4751
52+ const handleVisibilityChange = useCallback (
53+ ( sketchId , sketchName , newVisibility ) => {
54+ dispatch ( changeVisibility ( sketchId , sketchName , newVisibility ) ) ;
55+ } ,
56+ [ changeVisibility ]
57+ ) ;
58+
4859 return (
4960 < div className = "toolbar" >
5061 < button
@@ -98,24 +109,34 @@ const Toolbar = (props) => {
98109 { t ( 'Toolbar.Auto-refresh' ) }
99110 </ label >
100111 </ div >
112+
101113 < div className = "toolbar__project-name-container" >
102114 < ProjectName />
103- { ( ( ) => {
104- if ( project . owner ) {
105- return (
106- < p className = "toolbar__project-project.owner" >
107- { t ( 'Toolbar.By' ) } { ' ' }
108- < Link to = { `/${ project . owner . username } /sketches` } >
109- { project . owner . username }
110- </ Link >
111- </ p >
112- ) ;
113- }
114- return null ;
115- } ) ( ) }
115+
116+ { showVisibilityDropdown && (
117+ < div className = "toolbar__visibility" >
118+ < VisibilityDropdown
119+ sketch = { project }
120+ onVisibilityChange = { handleVisibilityChange }
121+ />
122+ </ div >
123+ ) }
124+
125+ { /* ✅ Still show owner if not you */ }
126+ { project ?. owner && ! userIsOwner && (
127+ < p className = "toolbar__project-owner" >
128+ { t ( 'Toolbar.By' ) } { ' ' }
129+ < Link to = { `/${ project . owner . username } /sketches` } >
130+ { project . owner . username }
131+ </ Link >
132+ </ p >
133+ ) }
134+
135+ < VersionIndicator />
116136 </ div >
117- < VersionIndicator />
137+
118138 < div style = { { flex : 1 } } />
139+
119140 < button
120141 className = { preferencesButtonClass }
121142 onClick = { ( ) => dispatch ( openPreferences ( ) ) }
0 commit comments