-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
index.js
85 lines (77 loc) · 2.1 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/**
* WordPress dependencies
*/
import { Button } from '@wordpress/components';
import { __ } from '@wordpress/i18n';
import { useEffect } from '@wordpress/element';
import { useDispatch, useSelect } from '@wordpress/data';
import { store as blockEditorStore } from '@wordpress/block-editor';
import { square as zoomOutIcon } from '@wordpress/icons';
import { store as preferencesStore } from '@wordpress/preferences';
import {
useShortcut,
store as keyboardShortcutsStore,
} from '@wordpress/keyboard-shortcuts';
import { isAppleOS } from '@wordpress/keycodes';
/**
* Internal dependencies
*/
import { unlock } from '../../lock-unlock';
const ZoomOutToggle = ( { disabled } ) => {
const { isZoomOut, showIconLabels } = useSelect( ( select ) => ( {
isZoomOut: unlock( select( blockEditorStore ) ).isZoomOut(),
showIconLabels: select( preferencesStore ).get(
'core',
'showIconLabels'
),
} ) );
const { resetZoomLevel, setZoomLevel } = unlock(
useDispatch( blockEditorStore )
);
const { registerShortcut, unregisterShortcut } = useDispatch(
keyboardShortcutsStore
);
useEffect( () => {
registerShortcut( {
name: 'core/editor/zoom',
category: 'global',
description: __( 'Enter or exit zoom out.' ),
keyCombination: {
// `primaryShift+0` (`ctrl+shift+0`) is the shortcut for switching
// to input mode in Windows, so apply a different key combination.
modifier: isAppleOS() ? 'primaryShift' : 'secondary',
character: '0',
},
} );
return () => {
unregisterShortcut( 'core/editor/zoom' );
};
}, [ registerShortcut, unregisterShortcut ] );
useShortcut( 'core/editor/zoom', () => {
if ( isZoomOut ) {
resetZoomLevel();
} else {
setZoomLevel( 'auto-scaled' );
}
} );
const handleZoomOut = () => {
if ( isZoomOut ) {
resetZoomLevel();
} else {
setZoomLevel( 'auto-scaled' );
}
};
return (
<Button
accessibleWhenDisabled
disabled={ disabled }
onClick={ handleZoomOut }
icon={ zoomOutIcon }
label={ __( 'Zoom Out' ) }
isPressed={ isZoomOut }
size="compact"
showTooltip={ ! showIconLabels }
/>
);
};
export default ZoomOutToggle;