Closed
Description
Description
The issue is described here https://github.com/orgs/community/discussions/48301#discussioncomment-5455654
It looks like if the treeview does not currently have focus and the chevron of another item is clicked while the current item is off screen, the treeview will scroll to the current item instead of expanding the clicked item.
Steps to reproduce
The issue can be repro'd on dotcom by selecting an item near the top of the tree, moving focus off the tree, scrolling down until the current item is offscreen, then clicking on the chevron of another item.
It can also be repro'd on the primer storybook with the following example:
export const Files: Story = () => (
<nav aria-label="Files">
<TextInput />
<TreeView aria-label="Files">
<TreeView.Item id="src" defaultExpanded>
<TreeView.LeadingVisual>
<TreeView.DirectoryIcon />
</TreeView.LeadingVisual>
src
<TreeView.SubTree>
<TreeView.Item id="src/Avatar.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Avatar.tsx
</TreeView.Item>
<TreeView.Item id="src/Button" current>
<TreeView.LeadingVisual>
<TreeView.DirectoryIcon />
</TreeView.LeadingVisual>
Button
<TreeView.SubTree>
<TreeView.Item id="src/Button/Button.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.tsx
</TreeView.Item>
<TreeView.Item id="src/Button/Button.test.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.test.tsx
</TreeView.Item>
<TreeView.Item id="src/Button/Button.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.tsx
</TreeView.Item>
<TreeView.Item id="src/Button/Button.test.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.test.tsx
</TreeView.Item>
<TreeView.Item id="src/Button/Button.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.tsx
</TreeView.Item>
<TreeView.Item id="src/Button/Button.test.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.test.tsx
</TreeView.Item>
<TreeView.Item id="src/Button/Button.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.tsx
</TreeView.Item>
<TreeView.Item id="src/Button/Button.test.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.test.tsx
</TreeView.Item>
<TreeView.Item id="src/Button/Button.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.tsx
</TreeView.Item>
<TreeView.Item id="src/Button/Button.test.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.test.tsx
</TreeView.Item>
<TreeView.Item id="src/Button/Button.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.tsx
</TreeView.Item>
<TreeView.Item id="src/Button/Button.test.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.test.tsx
</TreeView.Item>
<TreeView.Item id="src/Button/Button.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.tsx
</TreeView.Item>
<TreeView.Item id="src/Button/Button.test.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.test.tsx
</TreeView.Item>
</TreeView.SubTree>
</TreeView.Item>
<TreeView.Item id="src/ReallyLongFileNameThatShouldBeTruncated.tsx">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
ReallyLongFileNameThatShouldBeTruncated.tsx
</TreeView.Item>
</TreeView.SubTree>
</TreeView.Item>
<TreeView.Item id="src2" defaultExpanded>
<TreeView.LeadingVisual>
<TreeView.DirectoryIcon />
</TreeView.LeadingVisual>
src
<TreeView.SubTree>
<TreeView.Item id="src/Avatar.tsx2">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Avatar.tsx
</TreeView.Item>
<TreeView.Item id="src/Button2">
<TreeView.LeadingVisual>
<TreeView.DirectoryIcon />
</TreeView.LeadingVisual>
Button
<TreeView.SubTree>
<TreeView.Item id="src/Button/Button.tsx2">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.tsx
</TreeView.Item>
<TreeView.Item id="src/Button/Button.test.tsx2">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.test.tsx
</TreeView.Item>
</TreeView.SubTree>
</TreeView.Item>
<TreeView.Item id="src/ReallyLongFileNameThatShouldBeTruncated.tsx2">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
ReallyLongFileNameThatShouldBeTruncated.tsx
</TreeView.Item>
</TreeView.SubTree>
</TreeView.Item>
<TreeView.Item id="src3">
<TreeView.LeadingVisual>
<TreeView.DirectoryIcon />
</TreeView.LeadingVisual>
src
<TreeView.SubTree>
<TreeView.Item id="src/Avatar.tsx3">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Avatar.tsx
</TreeView.Item>
<TreeView.Item id="src/Button3">
<TreeView.LeadingVisual>
<TreeView.DirectoryIcon />
</TreeView.LeadingVisual>
Button
<TreeView.SubTree>
<TreeView.Item id="src/Button/Button.tsx3">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.tsx
</TreeView.Item>
<TreeView.Item id="src/Button/Button.test.tsx3">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
Button.test.tsx
</TreeView.Item>
</TreeView.SubTree>
</TreeView.Item>
<TreeView.Item id="src/ReallyLongFileNameThatShouldBeTruncated.tsx3">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
ReallyLongFileNameThatShouldBeTruncated.tsx
</TreeView.Item>
</TreeView.SubTree>
</TreeView.Item>
<TreeView.Item
id="public"
// eslint-disable-next-line no-console
onExpandedChange={isExpanded => console.log(`${isExpanded ? 'Expanded' : 'Collapsed'} "public" folder `)}
>
<TreeView.LeadingVisual>
<TreeView.DirectoryIcon />
</TreeView.LeadingVisual>
public
<TreeView.SubTree>
<TreeView.Item id="public/index.html">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
index.html
</TreeView.Item>
<TreeView.Item id="public/favicon.ico">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
favicon.ico
</TreeView.Item>
</TreeView.SubTree>
</TreeView.Item>
<TreeView.Item id="package.json">
<TreeView.LeadingVisual>
<FileIcon />
</TreeView.LeadingVisual>
package.json
</TreeView.Item>
</TreeView>
</nav>
)
Version
v35.23.0
Browser
Chrome