1- import React from 'react' ;
1+ import React , { 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
@@ -81,6 +92,7 @@ const Toolbar = (props) => {
8192 >
8293 < StopIcon focusable = "false" aria-hidden = "true" />
8394 </ button >
95+
8496 < div className = "toolbar__autorefresh" >
8597 < input
8698 id = "autorefresh"
@@ -98,24 +110,35 @@ const Toolbar = (props) => {
98110 { t ( 'Toolbar.Auto-refresh' ) }
99111 </ label >
100112 </ div >
113+
101114 < div className = "toolbar__project-name-container" >
102115 < 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- } ) ( ) }
116116 </ div >
117- < VersionIndicator />
117+
118118 < div style = { { flex : 1 } } />
119+
120+ { showVisibilityDropdown && (
121+ < div className = "toolbar__visibility" >
122+ < VisibilityDropdown
123+ sketch = { project }
124+ onVisibilityChange = { handleVisibilityChange }
125+ location = "toolbar"
126+ />
127+ </ div >
128+ ) }
129+
130+ { /* Still show owner if not you */ }
131+ { project ?. owner && ! userIsOwner && (
132+ < p className = "toolbar__project-owner" >
133+ { t ( 'Toolbar.By' ) } { ' ' }
134+ < Link to = { `/${ project . owner . username } /sketches` } >
135+ { project . owner . username }
136+ </ Link >
137+ </ p >
138+ ) }
139+
140+ < VersionIndicator />
141+
119142 < button
120143 className = { preferencesButtonClass }
121144 onClick = { ( ) => dispatch ( openPreferences ( ) ) }
0 commit comments