diff --git a/src/scripts/Tree.js b/src/scripts/Tree.js deleted file mode 100644 index b90ebedee..000000000 --- a/src/scripts/Tree.js +++ /dev/null @@ -1,52 +0,0 @@ -import React, { Component, Children, cloneElement } from 'react'; -import PropTypes from 'prop-types'; -import classnames from 'classnames'; -import { cleanProps } from './util'; - -export default class Tree extends Component { - constructor() { - super(); - - this.renderTreeNode = this.renderTreeNode.bind(this); - } - - renderTreeNode(tnode) { - const { - onNodeClick, - onNodeToggle, - onNodeLabelClick, - toggleOnNodeClick, - } = this.props; - return cloneElement(tnode, { - level: 1, - onNodeClick, - onNodeToggle, - onNodeLabelClick, - toggleOnNodeClick, - }); - } - - render() { - const { className, label, children, ...props } = this.props; - const treeClassNames = classnames(className, 'slds-tree-container'); - const pprops = cleanProps(props, Tree.propTypes); - return ( -
- {label ?

{label}

: null} - -
- ); - } -} - -Tree.propTypes = { - className: PropTypes.string, - label: PropTypes.string, - onNodeClick: PropTypes.func, - onNodeToggle: PropTypes.func, - onNodeLabelClick: PropTypes.func, - toggleOnNodeClick: PropTypes.bool, - children: PropTypes.node, -}; diff --git a/src/scripts/Tree.tsx b/src/scripts/Tree.tsx new file mode 100644 index 000000000..77b66a010 --- /dev/null +++ b/src/scripts/Tree.tsx @@ -0,0 +1,68 @@ +import React, { + Component, + Children, + cloneElement, + HTMLAttributes, +} from 'react'; +import classnames from 'classnames'; + +export type TreeProps = { + className?: string; + label?: string; + toggleOnNodeClick?: boolean; + onNodeClick?: (...args: any[]) => any; + onNodeToggle?: (...args: any[]) => any; + onNodeLabelClick?: (...args: any[]) => any; +}; + +export class Tree extends Component< + TreeProps & HTMLAttributes, + {} +> { + constructor( + props: Readonly> + ) { + super(props); + this.renderTreeNode = this.renderTreeNode.bind(this); + } + + renderTreeNode(tnode: any) { + const { + onNodeClick, + onNodeToggle, + onNodeLabelClick, + toggleOnNodeClick, + } = this.props; + return cloneElement(tnode, { + level: 1, + onNodeClick, + onNodeToggle, + onNodeLabelClick, + toggleOnNodeClick, + }); + } + + render() { + const { + className, + label, + children, + /* eslint-disable @typescript-eslint/no-unused-vars */ + onNodeClick, + onNodeToggle, + onNodeLabelClick, + toggleOnNodeClick, + /* eslint-enable @typescript-eslint/no-unused-vars */ + ...props + } = this.props; + const treeClassNames = classnames(className, 'slds-tree-container'); + return ( +
+ {label ?

{label}

: null} +
    + {Children.map(children, this.renderTreeNode)} +
+
+ ); + } +} diff --git a/src/scripts/index.js b/src/scripts/index.js index 48dc9afc0..39aa9c923 100644 --- a/src/scripts/index.js +++ b/src/scripts/index.js @@ -21,7 +21,6 @@ import Picklist, { PicklistItem } from './Picklist'; import DateInput from './DateInput'; import Lookup from './Lookup'; import FieldSet from './FieldSet'; -import Tree from './Tree'; import TreeNode from './TreeNode'; import Spinner from './Spinner'; import Grid, { Row, Col } from './Grid'; @@ -75,7 +74,6 @@ export { DateInput, Lookup, FieldSet, - Tree, TreeNode, Spinner, Grid, @@ -116,4 +114,5 @@ export * from './Form'; export * from './FormElement'; export * from './Text'; export * from './Textarea'; +export * from './Tree'; export * from './ComponentSettings'; diff --git a/stories/TreeStories.js b/stories/TreeStories.tsx similarity index 55% rename from stories/TreeStories.js rename to stories/TreeStories.tsx index ca3e3adee..1d8d94ffa 100644 --- a/stories/TreeStories.js +++ b/stories/TreeStories.tsx @@ -12,57 +12,57 @@ storiesOf('Tree', module).add( onNodeClick={action('nodeClick')} onNodeToggle={action('nodeToggle')} onNodeLabelClick={action('nodeLabelClick')} - toggleOnNodeClick={boolean('toggleOnNodeClick')} + toggleOnNodeClick={boolean('toggleOnNodeClick', false)} > diff --git a/test/storyshots/__snapshots__/storyshots.test.js.snap b/test/storyshots/__snapshots__/storyshots.test.js.snap index 5620f3203..90865d996 100644 --- a/test/storyshots/__snapshots__/storyshots.test.js.snap +++ b/test/storyshots/__snapshots__/storyshots.test.js.snap @@ -45815,6 +45815,7 @@ exports[`Storyshots Tree Controlled with knobs 1`] = `