diff --git a/packages/web/src/javascripts/Components/Tags/TagsListItem.tsx b/packages/web/src/javascripts/Components/Tags/TagsListItem.tsx index 499206871..918e5572b 100644 --- a/packages/web/src/javascripts/Components/Tags/TagsListItem.tsx +++ b/packages/web/src/javascripts/Components/Tags/TagsListItem.tsx @@ -86,16 +86,26 @@ export const TagsListItem: FunctionComponent = observer( setTitle(tag.title || '') }, [setTitle, tag]) + const setTagExpanded = useCallback( + (expanded: boolean) => { + if (!hasChildren) { + return + } + setShowChildren(expanded) + if (!navigationController.isSearching) { + navigationController.setExpanded(tag, expanded) + } + }, + [hasChildren, navigationController, tag], + ) + const toggleChildren = useCallback( (e?: MouseEvent) => { e?.stopPropagation() const shouldShowChildren = !showChildren - setShowChildren(shouldShowChildren) - if (!navigationController.isSearching) { - navigationController.setExpanded(tag, shouldShowChildren) - } + setTagExpanded(shouldShowChildren) }, - [showChildren, tag, navigationController], + [showChildren, setTagExpanded], ) useEffect(() => { @@ -285,6 +295,10 @@ export const TagsListItem: FunctionComponent = observer( onKeyDown={(event) => { if (event.key === KeyboardKey.Enter || event.key === KeyboardKey.Space) { selectCurrentTag().catch(console.error) + } else if (event.key === KeyboardKey.Left) { + setTagExpanded(false) + } else if (event.key === KeyboardKey.Right) { + setTagExpanded(true) } }} ref={tagRef}