Skip to content

Commit

Permalink
Add an internal unique ID to NavigationItem instead of using the opti…
Browse files Browse the repository at this point in the history
…onal item prop
  • Loading branch information
Copons committed Oct 20, 2020
1 parent 642332d commit 25f33f9
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 8 deletions.
2 changes: 1 addition & 1 deletion packages/components/src/navigation/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ If provided, renders `a` instead of `button`.
### `item`

- Type: `string`
- Required: Yes
- Required: No

The unique identifier of the item.

Expand Down
10 changes: 7 additions & 3 deletions packages/components/src/navigation/item/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@
* External dependencies
*/
import classnames from 'classnames';
import { noop } from 'lodash';
import { noop, uniqueId } from 'lodash';

/**
* WordPress dependencies
*/
import { useState } from '@wordpress/element';
import { Icon, chevronRight } from '@wordpress/icons';

/**
Expand All @@ -29,14 +30,17 @@ export default function NavigationItem( props ) {
title,
...restProps
} = props;
useNavigationTreeItem( props );

const [ itemId ] = useState( uniqueId( 'item-' ) );

useNavigationTreeItem( itemId, props );
const {
activeItem,
navigationTree,
setActiveMenu,
} = useNavigationContext();

if ( ! navigationTree.getItem( item )?._isVisible ) {
if ( ! navigationTree.getItem( itemId )?._isVisible ) {
return null;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,27 +10,26 @@ import { useNavigationContext } from '../context';
import { useNavigationMenuContext } from '../menu/context';
import { normalizedSearch } from '../utils';

export const useNavigationTreeItem = ( props ) => {
export const useNavigationTreeItem = ( itemId, props ) => {
const {
activeMenu,
navigationTree: { addItem, removeItem },
} = useNavigationContext();
const { menu, search } = useNavigationMenuContext();

const key = props.item;
useEffect( () => {
const isMenuActive = activeMenu === menu;
const isItemVisible =
! search || normalizedSearch( props.title, search );

addItem( key, {
addItem( itemId, {
...props,
menu,
_isVisible: isMenuActive && isItemVisible,
} );

return () => {
removeItem( key );
removeItem( itemId );
};
}, [ activeMenu, search ] );
};

0 comments on commit 25f33f9

Please sign in to comment.