Add type for TreeNode that rc-tree generates internally (#25077)

* Add type for TreeNode that rc-tree generates internally

* Update test

* Make InternalTreeNode an interface since it can't be instantiated
This commit is contained in:
Nathan Bierema
2018-04-26 15:19:59 -07:00
committed by Wesley Wigham
parent b89b85ab98
commit 321c042eba
2 changed files with 35 additions and 28 deletions
+31 -24
View File
@@ -1,15 +1,26 @@
// Type definitions for rc-tree 1.4
// Type definitions for rc-tree 1.10
// Project: https://github.com/react-component/tree
// Definitions by: John Reilly <https://github.com/johnnyreilly>
// Definitions by: John Reilly <https://github.com/johnnyreilly>, Methuselah96 <https://github.com/Methuselah96>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.6
// TypeScript Version: 2.7
import {
Component,
Props
} from "react";
import { Component } from "react";
export interface TreeNodeProps extends Props<TreeNode> {
export interface InternalTreeNodeProps extends TreeNodeProps {
eventKey: string;
expanded: boolean;
selected: boolean;
checked: boolean;
halfChecked: boolean;
pos: string;
dragOver: boolean;
dragOverGapTop: boolean;
dragOverGapBottom: boolean;
}
export interface InternalTreeNode extends Component<InternalTreeNodeProps> { }
export interface TreeNodeProps {
/**
* additional css class for treeNode
*/
@@ -26,10 +37,6 @@ export interface TreeNodeProps extends Props<TreeNode> {
* tree / subTree's title
*/
title?: string | JSX.Element;
/**
* it's used with tree props (default)ExpandedKeys / (default)CheckedKeys / (default)SelectedKeys. You'd better set it, and it must be unique in the tree's all treeNodes
*/
key?: string | number;
/**
* whether it is a leaf node
*/
@@ -40,43 +47,43 @@ export class TreeNode extends Component<TreeNodeProps> { }
export interface ExpandData {
expanded: boolean;
node: TreeNode;
node: InternalTreeNode;
}
export interface CheckData {
checked: boolean;
checkedNodes: TreeNode[];
checkedNodes: InternalTreeNode[];
halfCheckedKeys: string[];
node: TreeNode;
node: InternalTreeNode;
event: "check";
}
export interface SelectData {
selected: boolean;
selectedNodes: TreeNode[];
node: TreeNode;
selectedNodes: InternalTreeNode[];
node: InternalTreeNode;
event: "select";
}
export interface OnDragStartData {
event: Event;
node: TreeNode;
node: InternalTreeNode;
}
export interface OnDragEnterData {
event: Event;
node: TreeNode;
node: InternalTreeNode;
expandedKeys: string[];
}
export interface OnDropData {
event: Event;
node: TreeNode;
dragNode: TreeNode;
node: InternalTreeNode;
dragNode: InternalTreeNode;
dragNodesKeys: string[];
}
export interface TreeProps extends Props<Tree> {
export interface TreeProps {
/**
* additional css class of root dom node
*/
@@ -158,11 +165,11 @@ export interface TreeProps extends Props<Tree> {
/**
* filter some treeNodes as you need.
*/
filterTreeNode?(node: TreeNode): boolean;
filterTreeNode?(node: InternalTreeNode): boolean;
/**
* load data asynchronously
*/
loadData?(node: TreeNode): Promise<any>;
loadData?(node: InternalTreeNode): Promise<any>;
/**
* whether can drag treeNode.
*/
+4 -4
View File
@@ -1,5 +1,5 @@
import * as React from 'react';
import Tree, { TreeNode, SelectData, CheckData } from 'rc-tree';
import Tree, { TreeNode, SelectData, CheckData, InternalTreeNode } from 'rc-tree';
interface Props {
keys: string[];
@@ -44,15 +44,15 @@ export class Demo extends React.Component<Props, State> {
console.log('onCheck', checkedKeys, info);
}
onDragStart(params: {event: Event, node: TreeNode}) {
onDragStart(params: {event: Event, node: InternalTreeNode}) {
console.log('onDragStart', params.event, params.node);
}
OnDragEnterData(params: {event: Event, node: TreeNode, expandedKeys: string[]}) {
OnDragEnterData(params: {event: Event, node: InternalTreeNode, expandedKeys: string[]}) {
console.log('OnDragEnterData', params.event, params.node, params.expandedKeys);
}
OnDropData(params: {event: Event, node: TreeNode, dragNode: TreeNode, dragNodesKeys: string[]}) {
OnDropData(params: {event: Event, node: InternalTreeNode, dragNode: InternalTreeNode, dragNodesKeys: string[]}) {
console.log('OnDropData', params.event, params.node, params.dragNode, params.dragNodesKeys);
}