11/* eslint-disable */
22import i18n from 'i18n' ;
3- import React , { useContext , useState } from 'react' ;
3+ import React , { useContext , useState , useMemo } from 'react' ;
44import PropTypes from 'prop-types' ;
55import { Dropdown , DropdownToggle , DropdownMenu , DropdownItem } from 'reactstrap' ;
66import { LinkFieldContext } from 'components/LinkField/LinkField' ;
77import LinkType from 'types/LinkType' ;
88
99const LinkPickerMenu = ( { types, onSelect, dropdownToggleRef } ) => {
10+ const allowedTypes = useMemo ( ( ) => types . filter ( type => type . allowed ) , [ types ] ) ;
1011 const [ isOpen , setIsOpen ] = useState ( false ) ;
11- const toggle = ( ) => setIsOpen ( prevState => ! prevState ) ;
12+ const toggle = ( ) => {
13+ if ( allowedTypes . length === 1 ) {
14+ return onSelect ( allowedTypes [ 0 ] . key ) ;
15+ }
16+ setIsOpen ( prevState => ! prevState ) ;
17+ } ;
1218 const { loading } = useContext ( LinkFieldContext ) ;
1319 const ariaLabel = i18n . _t ( 'LinkField.ADD_NEW_LINK' , 'Add new link' ) ;
1420
@@ -18,29 +24,27 @@ const LinkPickerMenu = ({ types, onSelect, dropdownToggleRef }) => {
1824 toggle = { toggle }
1925 className = "link-picker__menu"
2026 >
21- < DropdownToggle
22- className = "link-picker__menu-toggle"
23- caret
24- color = "secondary"
25- aria-label = { ariaLabel }
26- innerRef = { dropdownToggleRef }
27- >
28- < span className = "font-icon-plus-1" aria-hidden = "true" />
29- { i18n . _t ( 'LinkField.ADD_NEW_LINK' , 'Add new Link' ) }
30- </ DropdownToggle >
31- < DropdownMenu >
32- { types . map ( ( { key, title, icon, allowed} ) => {
33- return allowed &&
34- < DropdownItem
35- key = { key }
36- onClick = { ( ) => { onSelect ( key ) } }
37- >
38- < span className = { `link-picker__menu-icon ${ icon } ` } aria-hidden = "true" />
39- < span className = { `link-picker__menu-title` } > { title } </ span >
40- </ DropdownItem >
41- }
42- ) }
43- </ DropdownMenu >
27+ < DropdownToggle
28+ className = "link-picker__menu-toggle"
29+ caret = { allowedTypes . length > 1 }
30+ color = "secondary"
31+ aria-label = { ariaLabel }
32+ innerRef = { dropdownToggleRef }
33+ >
34+ < span className = "font-icon-plus-1" aria-hidden = "true" />
35+ { i18n . _t ( 'LinkField.ADD_NEW_LINK' , 'Add new Link' ) }
36+ </ DropdownToggle >
37+ < DropdownMenu >
38+ { allowedTypes . map ( ( { key, title, icon } ) => (
39+ < DropdownItem
40+ key = { key }
41+ onClick = { ( ) => { onSelect ( key ) } }
42+ >
43+ < span className = { `link-picker__menu-icon ${ icon } ` } aria-hidden = "true" />
44+ < span className = { `link-picker__menu-title` } > { title } </ span >
45+ </ DropdownItem >
46+ ) ) }
47+ </ DropdownMenu >
4448 </ Dropdown >
4549} ;
4650
0 commit comments