Skip to content

Commit 44d0a97

Browse files
Adding a memoized variable with the pre-filtered allowedTypes, updating toggle function to return early and select the first item in the allowedTypes array if only one exists. Updating returned react to exclude caret when only one link type is applicable, using allowedTypes array in the dropdownmenu map
1 parent 7613bf6 commit 44d0a97

2 files changed

Lines changed: 30 additions & 26 deletions

File tree

client/dist/js/bundle.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

client/src/components/LinkPicker/LinkPickerMenu.js

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
/* eslint-disable */
22
import i18n from 'i18n';
3-
import React, { useContext, useState } from 'react';
3+
import React, { useContext, useState, useMemo } from 'react';
44
import PropTypes from 'prop-types';
55
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
66
import { LinkFieldContext } from 'components/LinkField/LinkField';
77
import LinkType from 'types/LinkType';
88

99
const 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

Comments
 (0)