Skip to content

Conversation

@kmcfaul
Copy link
Contributor

@kmcfaul kmcfaul commented Nov 13, 2025

What: Closes #11893

Still needs some testing and definitely requires a styling update. Functionally the disabled props will work, but they will not look any different.

Summary by CodeRabbit

  • New Features

    • TreeView items can be disabled individually to prevent selection and interaction.
    • Toggle controls can be disabled independently of their item, with appropriate disabled styling and ARIA support.
  • Tests

    • Added comprehensive tests covering item-disabled and toggle-disabled behavior across various configurations and interactions.
  • Chores

    • Bumped internal dev dependency versions across packages.

✏️ Tip: You can customize this high-level summary in your review settings.

@patternfly-build
Copy link
Collaborator

patternfly-build commented Nov 13, 2025

Copy link
Contributor

@thatblindgeye thatblindgeye left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some general comments after testing and tinkering in the preview:

  • For the "Single selectable" tree view (where the entire node toggles expansion rather than selection, if it expands), the disabled state isn't immediately announced. I have to 1) go into the tree view, 2) navigate to the tree item, then 3) go further into that tree item (rather than navigating forward/backward) to get to the button inside, which then announes a disabled state. I'm not sure if users would typically do that.
    • For this, what we could do instead of putting disabled on the button, put aria-disabled="true" on the role="treeitem" element
  • For the separate expand/select buttons from "With separate selection and expansion" example, sort of the same issue as above, except the other issue is that the navigation as noted above is basically required with VO for this implementation. I have to go deeper into a tree item in order to know that there are separate expand/collapse and select buttons (which, idk if that's really a great implementation in the first place). Via plain keyboard it works okay as I can go to the separate expand and select buttons, but for VO it's not as straight forward.

I'm not sure what the best approach would be off the top of my head. For the more basic tree view, applying aria-disabeld to the treeitem would be better than putting disabled on the button. For an implementation where expansion and selection are separate actions within a tree item, that may not work, but at the same time it may not be clear that you have to go further into the tree item for additional/separate actions. I might want to say that allowing this mixed state of "one action is disabled, but not the other" isn't advisable - either the entire tree item is disabled or it isn't. That would mean we could just apply aria-disabled to the treeitem and have it exposed as disabled far easier for users.

Comment on lines +38 to +41
/** Flag indicating if the tree view item is disabled. */
isDisabled?: boolean;
/** Flag indicating if the tree view item toggle is disabled. */
isToggleDisabled?: boolean;
Copy link
Contributor

@thatblindgeye thatblindgeye Dec 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would we want isDisabled to disable everything (selection and expansion)? Might just be me, just that's what I expected to happen when passing isDisabled, but that only disabled selection for the example where the selection is a separate action; for the default behavior isDisabled works as expected since there's only one button.

Or would we want to have isToggleDisabled and isSelectionDisabled props instead?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe a prop description update would work ("For tree view items with separated toggle and selection behaviors, this will disable selection.")? I think I had gone with a plain isDisabled because for tree view items where selection isn't separate, everything is disabled.

@thatblindgeye
Copy link
Contributor

TLDR of this comment: how we currently have our TreeView component setup, the way this PR goes about disabling stuff might be one of the better ways to handle it.

The longer story:

So I tried testing out with NVDA a bit as well and looking a little more, and at least based on whatever settings I have set in both NVDA and VO, the interaction experiences are fairly different. In NVDA I can use arrow keys alone to navigate the tree view items, i.e. arrow keys will essentially focus the button elements within each tree item (whether it be the entire button that expands, or separately the expand button and selectable button).

VoiceOver from what I can tell I need to use VO keyboard shortcuts to navigate since it's being announced as a table, in which case my previous comment of it being difficult to tell that there are separate expand/select actions still seems to stand (and in that case, the disabled state may not get announced since VO focus i on the tree item, not the button element within the tree item.

Though NVDA can get a bit complicated as well when navigating via their shortcuts; if I use NVDA navigation within the treeview and try to move browser/system focus to the treeitem that has NVDA focus, I still have to press the Tab key to place focus on the actual button element to interact properly. I can't be sure if this is how a user would actually interact/navigate in a treeview, though.

As an addendum to one of my previous comments, making the li[role="treeitem"] element aria-disabled="true", the button elements within that treeitem element inherit that state it looks like (both in VO and NVDA). That could work most of the time, but maybe not always.

FWIW, WCAG has this navigation tree view example that has a separate selection/expansion sort of implementation. Essentially, the caret for expansion isn't in a semantic element, it looks to rely solely on mouse clicking the icon to expand it without selection while keyboard users need to use left/right arrow keys to expand/collapse. Also their expected keyboard interactions can e found on their tree view pattern page.

className={css(
styles.treeViewNode,
isSelected && styles.modifiers.current,
Component === 'button' && isDisabled && 'pf-m-disabled'
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CSS update todo:

  • Put disabled css class on overall node for text styling & toggle element for toggle styling.
  • For typical nodes without separate behaviors, have isDisabled apply both disabled css to node and toggle button elements.

@kmcfaul kmcfaul force-pushed the treeview-disabled branch from f25dfcb to 30a649e Compare January 6, 2026 18:24
@coderabbitai
Copy link

coderabbitai bot commented Jan 6, 2026

Walkthrough

Adds two optional flags, isDisabled and isToggleDisabled, to tree item data and components; these flags are forwarded from TreeView to TreeViewListItem, adjust styling/ARIA, and gate expand/collapse/select interactions and toggle/button disabled state.

Changes

Cohort / File(s) Summary
TreeView data interface
packages/react-core/src/components/TreeView/TreeView.tsx
Added isDisabled?: boolean and isToggleDisabled?: boolean to TreeViewDataItem and forward them into TreeViewListItem props.
TreeViewListItem behavior
packages/react-core/src/components/TreeView/TreeViewListItem.tsx
Added isDisabled and isToggleDisabled props; compute isFullyDisabled; apply pf-m-disabled class and aria-disabled; disable toggle/button elements and prevent onSelect/onExpand/onCollapse when appropriate.
Tests
packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx
Added comprehensive tests for isDisabled and isToggleDisabled across permutations (hasCheckbox, isSelectable, isExpanded), asserting styling, attributes, and prevention of interactions.
Dev dependency bumps
packages/react-core/package.json, packages/react-docs/package.json, packages/react-icons/package.json, packages/react-styles/package.json, packages/react-tokens/package.json
Bumped devDependency @patternfly/patternfly from 6.5.0-prerelease.336.5.0-prerelease.34.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant TreeView
  participant TreeViewListItem
  participant ToggleButton
  participant AppCallbacks

  User->>TreeView: click item / toggle
  TreeView->>TreeViewListItem: render item (props include isDisabled, isToggleDisabled)
  alt isDisabled true
    TreeViewListItem-->>User: apply aria-disabled / pf-m-disabled, ignore select/click
  else isToggleDisabled true and toggle clicked
    TreeViewListItem->>ToggleButton: render disabled toggle (button[disabled])
    ToggleButton-->>User: visual disabled, ignore expand/collapse
  else normal
    TreeViewListItem->>AppCallbacks: invoke onSelect/onExpand/onCollapse
    AppCallbacks-->>TreeView: update state (expanded/selected)
    TreeView-->>TreeViewListItem: re-render with updated props
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested reviewers

  • nicolethoen
  • thatblindgeye
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main feature: adding disabled state support to TreeViewListItems, which aligns with the primary objective (issue #11893).
Linked Issues check ✅ Passed The PR implements core requirements from #11893: optional disabled props on TreeViewDataItem/TreeViewListItem, disabled styling (pf-m-disabled classes), prevented clicking/selecting when disabled, and allows expansion when children exist. ARIA disabled handling is also implemented.
Out of Scope Changes check ✅ Passed Changes are focused on TreeView disabled functionality. Dependency version bumps (@patternfly/patternfly updates) across five package.json files appear to be supporting changes for styling, not out-of-scope additions.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/react-core/src/components/TreeView/TreeViewListItem.tsx (1)

309-332: Memoization comparator missing isDisabled and isToggleDisabled.

The memoization comparator does not include isDisabled or isToggleDisabled in its prop comparisons. When useMemo is enabled, changes to these props won't trigger a re-render, resulting in stale disabled states.

🔎 Proposed fix
     prevProps.action !== nextProps.action ||
     prevProps.parentItem !== nextProps.parentItem ||
-    prevProps.itemData !== nextProps.itemData
+    prevProps.itemData !== nextProps.itemData ||
+    prevProps.isDisabled !== nextProps.isDisabled ||
+    prevProps.isToggleDisabled !== nextProps.isToggleDisabled
   ) {
     return false;
   }
🧹 Nitpick comments (2)
packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx (2)

419-427: Move userEvent.setup() inside tests or beforeEach.

Calling userEvent.setup() at the describe block level means the same user instance is shared across all tests. This can lead to state leakage between tests. Best practice is to call it inside each test or in beforeEach.

🔎 Proposed fix
 describe('isDisabled prop', () => {
-  const user = userEvent.setup();
   const onSelectMock = jest.fn();
   const onExpandMock = jest.fn();
   const onCollapseMock = jest.fn();

   beforeEach(() => {
     jest.clearAllMocks();
   });

   test('Renders button with disabled attribute and pf-m-disabled class when isDisabled is true', () => {
     render(<TreeViewListItem isDisabled {...requiredProps} />);
     // ...
   });

   test('Does not call onSelect when isDisabled is true', async () => {
+    const user = userEvent.setup();
     render(<TreeViewListItem isDisabled onSelect={onSelectMock} {...requiredProps} />);
     // ...
   });

Apply the same pattern to the isToggleDisabled describe block (lines 530-537).


627-636: Test placed in potentially confusing location.

This test verifies that isDisabled applies pf-m-disabled to the toggle span in the default TreeViewListItem case, but it's located within the isToggleDisabled describe block. Consider moving it to the isDisabled describe block for clarity, or add a comment explaining the relationship.

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between bc46a52 and 30a649e.

📒 Files selected for processing (3)
  • packages/react-core/src/components/TreeView/TreeView.tsx
  • packages/react-core/src/components/TreeView/TreeViewListItem.tsx
  • packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx
🧰 Additional context used
🧬 Code graph analysis (1)
packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx (1)
packages/react-core/src/components/TreeView/TreeViewListItem.tsx (1)
  • TreeViewListItem (287-335)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build
  • GitHub Check: Build, test & deploy
🔇 Additional comments (7)
packages/react-core/src/components/TreeView/TreeView.tsx (2)

38-41: LGTM! Clear prop documentation.

The new isDisabled and isToggleDisabled props are well-documented and correctly added to the TreeViewDataItem interface.


165-166: Props correctly forwarded to TreeViewListItem.

The isDisabled and isToggleDisabled values from item data are properly passed through to the TreeViewListItem component.

packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx (1)

418-659: Good test coverage for disabled functionality.

The tests comprehensively cover various combinations of isDisabled and isToggleDisabled with hasCheckbox, isSelectable, and isExpanded states. The verification of aria-disabled, class applications, and callback prevention is thorough.

packages/react-core/src/components/TreeView/TreeViewListItem.tsx (4)

49-52: LGTM! Props well-documented.

The new isDisabled and isToggleDisabled props are properly typed and documented.


134-134: Disabled toggle class logic is correct.

The hasDisabledToggleClass computation correctly applies the disabled styling when:

  • isToggleDisabled is true, OR
  • The component is a button (default case) and isDisabled is true

This aligns with the expected behavior where the toggle inherits the disabled state in the default button case.


230-231: isFullyDisabled logic is sound.

The computed isFullyDisabled correctly determines when aria-disabled should be applied to the treeitem:

  • For button Component: isDisabled alone makes it fully disabled
  • For label/div Component (hasCheckbox or isSelectable): requires both isDisabled AND isToggleDisabled

This allows partial disabled states where selection is disabled but toggle remains functional.


248-268: Disabled state correctly applied to Component.

The implementation properly:

  • Applies pf-m-disabled class when isDisabled is true
  • Gates onSelect callback with !isDisabled check
  • Gates expand/collapse behavior with !isDisabled check
  • Sets disabled attribute on button Component when isDisabled is true

Copy link
Contributor

@thatblindgeye thatblindgeye left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just one question below

const renderToggle = (randomId: string) => (
<ToggleComponent
className={css(styles.treeViewNodeToggle)}
className={css(styles.treeViewNodeToggle, hasDisabledToggleClass && 'pf-m-disabled')}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For instances we're using pf-m-disabled in the components and test file, is this class available on the styles.modifiers object?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It will be with the core update.

@nicolethoen
Copy link
Contributor

@kmcfaul has this PR been updated with the changes to core yet?

@kmcfaul
Copy link
Contributor Author

kmcfaul commented Jan 19, 2026

cc @nicolethoen bumped core version

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@packages/react-core/src/components/TreeView/TreeView.tsx`:
- Around line 165-166: The memo comparison for TreeViewListItem is missing
checks for isDisabled and isToggleDisabled, so updates to those booleans won’t
re-render when itemData reference is unchanged; update the custom comparison
function used in the memo wrapping of TreeViewListItem to also compare
prevProps.isDisabled !== nextProps.isDisabled and prevProps.isToggleDisabled !==
nextProps.isToggleDisabled (in addition to the existing checks against itemData
and other props) so the component re-renders when either flag changes.
🧹 Nitpick comments (3)
packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx (3)

419-427: Consider moving userEvent.setup() inside beforeEach.

Calling userEvent.setup() at the describe block level (line 420) creates a single user instance shared across all tests in this suite. While this often works, the recommended pattern is to call it inside beforeEach or at the start of each test to ensure a fresh instance and avoid potential state leakage.

Suggested refactor
 describe('isDisabled prop', () => {
-  const user = userEvent.setup();
   const onSelectMock = jest.fn();
   const onExpandMock = jest.fn();
   const onCollapseMock = jest.fn();
+  let user: ReturnType<typeof userEvent.setup>;

   beforeEach(() => {
+    user = userEvent.setup();
     jest.clearAllMocks();
   });

529-537: Same userEvent.setup() pattern issue.

Consider the same refactor as suggested for the isDisabled describe block.


638-658: Add test verifying onCheck is not called when isDisabled is true.

The test suite consistently verifies that onSelect, onExpand, and onCollapse are not called when isDisabled=true, but lacks a corresponding test for the onCheck callback. For consistency and completeness, add a test case: "Does not call onCheck when isDisabled is true and hasCheckbox is true".

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/react-core/src/components/TreeView/TreeViewListItem.tsx (1)

230-269: Disabled non‑selectable items can’t expand children

isDisabled both disables the wrapper <button> and gates the expand/collapse path, so non‑selectable items with children become non‑expandable. That conflicts with the objective of allowing expansion while disabling selection. Consider letting isToggleDisabled control expand/collapse and only disabling the button when toggling is disabled (or there are no children).

✅ Suggested fix
-  const isFullyDisabled =
-    (Component === 'button' && isDisabled) || (Component !== 'button' && isDisabled && isToggleDisabled);
+  const isFullyDisabled = isDisabled && (!children || isToggleDisabled);

...
-                  if (!isDisabled && !isSelectable && children && evt.isDefaultPrevented() !== true) {
+                  if (!isToggleDisabled && !isSelectable && children && evt.isDefaultPrevented() !== true) {
                     if (internalIsExpanded) {
                       onCollapse && onCollapse(evt, itemData, parentItem);
                     } else {
                       onExpand && onExpand(evt, itemData, parentItem);
                     }
                     setIsExpanded(!internalIsExpanded);
                   }
...
-              {...(Component === 'button' && { type: 'button', disabled: isDisabled })}
+              {...(Component === 'button' && {
+                type: 'button',
+                disabled: isDisabled && (!children || isToggleDisabled)
+              })}
🤖 Fix all issues with AI agents
In `@packages/react-core/src/components/TreeView/TreeViewListItem.tsx`:
- Around line 49-52: In TreeViewListItem, the checkbox input remains interactive
when the item is disabled; update the checkbox element to set its disabled
attribute to the combined value (isDisabled || checkProps.disabled) so it is
non-interactive when the row is disabled. Locate the checkbox rendering in the
TreeViewListItem component (where hasCheckbox is handled and checkProps is
spread onto the input) and replace/augment the input's disabled prop to use
disabled={isDisabled || checkProps.disabled} and ensure the onChange handler is
short-circuited/guarded accordingly.

Comment on lines +49 to +52
/** Flag indicating if the tree view item is disabled. */
isDisabled?: boolean;
/** Flag indicating if the tree view item toggle is disabled. */
isToggleDisabled?: boolean;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

find . -type f -name "TreeViewListItem.tsx" -path "*/react-core/*" | head -5

Repository: patternfly/patternfly-react

Length of output: 137


🏁 Script executed:

fd "TreeViewListItem" --type f

Repository: patternfly/patternfly-react

Length of output: 314


🏁 Script executed:

cat -n packages/react-core/src/components/TreeView/TreeViewListItem.tsx | head -200

Repository: patternfly/patternfly-react

Length of output: 9070


🏁 Script executed:

cat -n packages/react-core/src/components/TreeView/TreeViewListItem.tsx | sed -n '200,250p'

Repository: patternfly/patternfly-react

Length of output: 2174


🏁 Script executed:

cat -n packages/react-core/src/components/TreeView/TreeViewListItem.tsx | tail -100

Repository: patternfly/patternfly-react

Length of output: 4652


🏁 Script executed:

cat -n packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx | grep -i "disabled\|isDisabled" -A 2 -B 2 | head -50

Repository: patternfly/patternfly-react

Length of output: 2127


🏁 Script executed:

grep -n "isDisabled" packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx

Repository: patternfly/patternfly-react

Length of output: 2803


🏁 Script executed:

sed -n '502,511p' packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx

Repository: patternfly/patternfly-react

Length of output: 430


🏁 Script executed:

sed -n '638,648p' packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx

Repository: patternfly/patternfly-react

Length of output: 502


🏁 Script executed:

grep -n "hasCheckbox.*isDisabled\|isDisabled.*hasCheckbox" packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx -A 10 | head -60

Repository: patternfly/patternfly-react

Length of output: 1330


🏁 Script executed:

grep -n "hasCheckbox" packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx | grep -i "check\|click\|oncheck"

Repository: patternfly/patternfly-react

Length of output: 2982


🏁 Script executed:

sed -n '1,100p' packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx | grep -n "describe\|test"

Repository: patternfly/patternfly-react

Length of output: 1306


🏁 Script executed:

grep -n "describe.*[Cc]heck\|test.*[Cc]heck" packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx

Repository: patternfly/patternfly-react

Length of output: 1877


🏁 Script executed:

sed -n '731,770p' packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx

Repository: patternfly/patternfly-react

Length of output: 1590


🏁 Script executed:

grep -n "hasCheckbox.*isDisabled\|isDisabled.*hasCheckbox" packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx -B 2 -A 15

Repository: patternfly/patternfly-react

Length of output: 1647


🏁 Script executed:

grep -n "isDisabled.*hasCheckbox.*onCheck\|onCheck.*isDisabled.*hasCheckbox" packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx -B 5 -A 10

Repository: patternfly/patternfly-react

Length of output: 53


🏁 Script executed:

sed -n '180,200p' packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx

Repository: patternfly/patternfly-react

Length of output: 885


🏁 Script executed:

sed -n '160,180p' packages/react-core/src/components/TreeView/TreeViewListItem.tsx

Repository: patternfly/patternfly-react

Length of output: 734


🏁 Script executed:

grep -n "onCheck.*isDisabled\|isDisabled.*onCheck" packages/react-core/src/components/TreeView/__tests__/TreeViewListItem.test.tsx

Repository: patternfly/patternfly-react

Length of output: 53


Checkbox should be disabled when isDisabled is true

When hasCheckbox is enabled, the checkbox input element is not disabled when isDisabled=true. The onChange callback fires normally regardless of the disabled state. Apply disabled={isDisabled || checkProps.disabled} to the checkbox input to prevent interaction when the item is disabled, consistent with how onSelect, onExpand, and onCollapse are already guarded.

🤖 Prompt for AI Agents
In `@packages/react-core/src/components/TreeView/TreeViewListItem.tsx` around
lines 49 - 52, In TreeViewListItem, the checkbox input remains interactive when
the item is disabled; update the checkbox element to set its disabled attribute
to the combined value (isDisabled || checkProps.disabled) so it is
non-interactive when the row is disabled. Locate the checkbox rendering in the
TreeViewListItem component (where hasCheckbox is handled and checkProps is
spread onto the input) and replace/augment the input's disabled prop to use
disabled={isDisabled || checkProps.disabled} and ensure the onChange handler is
short-circuited/guarded accordingly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Tree View - allow for more control of underlying Tree View List Items

4 participants