From 9bcfe4cd3b12a95222e74a520a940b5120de45b5 Mon Sep 17 00:00:00 2001 From: Zach Rosenberg Date: Mon, 17 Jun 2024 20:37:43 -0400 Subject: [PATCH 1/2] added isDisabled property to Checkbox for each node --- src/components/CheckBox/CheckBox.jsx | 4 +++- src/components/TreeNode/TreeNode.jsx | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/components/CheckBox/CheckBox.jsx b/src/components/CheckBox/CheckBox.jsx index 0f62b70f..35fed093 100644 --- a/src/components/CheckBox/CheckBox.jsx +++ b/src/components/CheckBox/CheckBox.jsx @@ -4,7 +4,7 @@ import React, { } from 'react'; import PropTypes from 'prop-types'; -const CheckBox = ({ status, onChange }) => { +const CheckBox = ({ status, onChange, isDisabled = false }) => { const isChecked = status === 1; const isHalfChecked = status === 0.5; @@ -23,6 +23,7 @@ const CheckBox = ({ status, onChange }) => { checked={ isChecked } onChange={ onChange } ref={ checkboxRef } + disabled={ isDisabled } /> ); @@ -31,6 +32,7 @@ const CheckBox = ({ status, onChange }) => { CheckBox.propTypes = { status: PropTypes.number.isRequired, onChange: PropTypes.func.isRequired, + isDisabled: PropTypes.bool, }; export default CheckBox; diff --git a/src/components/TreeNode/TreeNode.jsx b/src/components/TreeNode/TreeNode.jsx index a78846e5..210770a8 100644 --- a/src/components/TreeNode/TreeNode.jsx +++ b/src/components/TreeNode/TreeNode.jsx @@ -31,11 +31,12 @@ const TreeNode = ({ name, checked, isOpen, + isDisabled, children, ...restData }) => { const nodeData = { - path, name, checked, isOpen, ...restData, + path, name, checked, isOpen, isDisabled, ...restData, }; const { @@ -189,6 +190,7 @@ const TreeNode = ({ )} @@ -237,6 +239,7 @@ TreeNode.propTypes = { name: PropTypes.string.isRequired, checked: PropTypes.number.isRequired, isOpen: PropTypes.bool, + isDisabled: PropTypes.bool, children: PropTypes.array, }; From 3597878c3dbd9d4f54ba3d6284b2453dd4a0b0a7 Mon Sep 17 00:00:00 2001 From: Zach Rosenberg Date: Mon, 17 Jun 2024 20:48:37 -0400 Subject: [PATCH 2/2] added to readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 8733d301..72efe639 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ A versatile and customizable react treeview library. Features: ✅ inline add, modify, and delete tree nodes ✅ checkbox with half check (indeterminate check) ✅ read-only mode +✅ disable individual node checkboxes It uses [use-tree-state](https://www.npmjs.com/package/use-tree-state) hook internally for convenient state management. ### Quick Preview @@ -48,6 +49,7 @@ Initial tree state is an object that describes a nested tree node structure, whi name: 'root node', checked (optional): 0 (unchecked, default) | 0.5 (half checked) | 1(checked), isOpen (optional): true (default) | false, + isDisabled (optional): true | false (default), children (optional): [array of treenode], // internal keys (auto generated), plz don't include them in the initial data @@ -76,6 +78,7 @@ const treeState = { children: [ { name: 'children 2-1 [not checked]', checked: 0 }, { name: 'children 2-2 [checked]', checked: 1 }, + { name: 'children 2-3 [not checked] [disabled]', checked: 0, isDisabled: true }, ], }, ],