11import React , { useContext } from 'react' ;
22import PropTypes from 'prop-types' ;
33import styles from '../style.css' ;
4- import { MinimizeIcon , MaximizeIcon , CloseIcon } from './icons' ;
4+ import { MinimizeIcon , MaximizeIcon , CloseIcon , RestoreIcon } from './icons' ;
55import { ThemeContext } from '../theme' ;
66import WindowButton from './button' ;
77import { WindowControlsProps , ControlsTheme } from '../typings' ;
88
9- const buttons = ( isWin : boolean , onMinimize : ( ) => void , onMaximize : ( ) => void , onClose : ( ) => void ) => ( [
9+ const buttons = ( isWin : boolean , maximized : boolean , onMinimize : ( ) => void , onMaximize : ( ) => void , onClose : ( ) => void ) => ( [
1010 {
1111 type : 'minimize' ,
1212 onClick : onMinimize ,
@@ -15,19 +15,22 @@ const buttons = (isWin: boolean, onMinimize: () => void, onMaximize: () => void,
1515 {
1616 type : 'maximize' ,
1717 onClick : onMaximize ,
18- icon : < MaximizeIcon isWin = { isWin } />
18+ icon : maximized ? < RestoreIcon isWin = { isWin } /> : < MaximizeIcon isWin = { isWin } />
1919 } ,
2020 {
2121 type : 'close' ,
2222 onClick : onClose ,
2323 icon : < CloseIcon isWin = { isWin } />
2424 }
25- ] )
25+ ] ) ;
2626
2727const WindowControls = ( {
2828 onMinimize,
2929 onMaximize,
3030 onClose,
31+ maximized,
32+ disableMinimize,
33+ disableMaximize,
3134 focused
3235} : WindowControlsProps ) => {
3336 const {
@@ -36,7 +39,8 @@ const WindowControls = ({
3639 controls
3740 } = useContext ( ThemeContext ) ;
3841 const isWin = platform === 'win32' ;
39- const width = platform === 'win32' ? '146px' : '120px' ;
42+ const itemWidth = isWin ? 48 : 40 ;
43+ const width = itemWidth * ( 3 - ( disableMaximize ? 1 : 0 ) - ( disableMinimize ? 1 : 0 ) ) ;
4044 return (
4145 < div
4246 className = { styles . ControlsWrapper }
@@ -46,19 +50,21 @@ const WindowControls = ({
4650 } }
4751 >
4852 {
49- buttons ( isWin , onMinimize ! , onMaximize ! , onClose ! ) . map ( ( b ) => {
50- return (
51- < WindowButton
52- key = { b . type }
53- platform = { platform }
54- close = { b . type === 'close' }
55- onClick = { b . onClick }
56- controls = { controls as Required < ControlsTheme > }
57- >
58- { b . icon }
59- </ WindowButton >
60- )
61- } )
53+ buttons ( isWin , maximized ?? false , onMinimize ! , onMaximize ! , onClose ! )
54+ . filter ( x => ! ( disableMaximize && x . type == 'maximize' || disableMinimize && x . type == 'minimize' ) )
55+ . map ( ( b ) => {
56+ return (
57+ < WindowButton
58+ key = { b . type }
59+ platform = { platform }
60+ close = { b . type === 'close' }
61+ onClick = { b . onClick }
62+ controls = { controls as Required < ControlsTheme > }
63+ >
64+ { b . icon }
65+ </ WindowButton >
66+ )
67+ } )
6268 }
6369 </ div >
6470 ) ;
0 commit comments