-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
aspect-ratio-dropdown.js
118 lines (114 loc) · 2.55 KB
/
aspect-ratio-dropdown.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/**
* WordPress dependencies
*/
import { check, aspectRatio as aspectRatioIcon } from '@wordpress/icons';
import { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';
import { __ } from '@wordpress/i18n';
/**
* Internal dependencies
*/
import { POPOVER_PROPS } from './constants';
import { useImageEditingContext } from './context';
function AspectGroup( { aspectRatios, isDisabled, label, onClick, value } ) {
return (
<MenuGroup label={ label }>
{ aspectRatios.map( ( { title, aspect } ) => (
<MenuItem
key={ aspect }
disabled={ isDisabled }
onClick={ () => {
onClick( aspect );
} }
role="menuitemradio"
isSelected={ aspect === value }
icon={ aspect === value ? check : undefined }
>
{ title }
</MenuItem>
) ) }
</MenuGroup>
);
}
export default function AspectRatioDropdown( { toggleProps } ) {
const { isInProgress, aspect, setAspect, defaultAspect } =
useImageEditingContext();
return (
<DropdownMenu
icon={ aspectRatioIcon }
label={ __( 'Aspect Ratio' ) }
popoverProps={ POPOVER_PROPS }
toggleProps={ toggleProps }
className="wp-block-image__aspect-ratio"
>
{ ( { onClose } ) => (
<>
<AspectGroup
isDisabled={ isInProgress }
onClick={ ( newAspect ) => {
setAspect( newAspect );
onClose();
} }
value={ aspect }
aspectRatios={ [
// All ratios should be mirrored in AspectRatioTool in @wordpress/block-editor.
{
title: __( 'Original' ),
aspect: defaultAspect,
},
{
title: __( 'Square' ),
aspect: 1,
},
] }
/>
<AspectGroup
label={ __( 'Landscape' ) }
isDisabled={ isInProgress }
onClick={ ( newAspect ) => {
setAspect( newAspect );
onClose();
} }
value={ aspect }
aspectRatios={ [
{
title: __( '16:9' ),
aspect: 16 / 9,
},
{
title: __( '4:3' ),
aspect: 4 / 3,
},
{
title: __( '3:2' ),
aspect: 3 / 2,
},
] }
/>
<AspectGroup
label={ __( 'Portrait' ) }
isDisabled={ isInProgress }
onClick={ ( newAspect ) => {
setAspect( newAspect );
onClose();
} }
value={ aspect }
aspectRatios={ [
{
title: __( '9:16' ),
aspect: 9 / 16,
},
{
title: __( '3:4' ),
aspect: 3 / 4,
},
{
title: __( '2:3' ),
aspect: 2 / 3,
},
] }
/>
</>
) }
</DropdownMenu>
);
}