From db5217c2e9f17ea88d2f2770d801930276c16053 Mon Sep 17 00:00:00 2001 From: James Lismore Date: Thu, 30 Aug 2018 13:13:55 -0400 Subject: [PATCH] Correct return types for getNodeAtPath and getVisibleNodeInfoAtIndex --- .../react-sortable-tree-tests.tsx | 97 ++++++++++++------- .../utils/tree-data-utils.d.ts | 4 +- 2 files changed, 63 insertions(+), 38 deletions(-) diff --git a/types/react-sortable-tree/react-sortable-tree-tests.tsx b/types/react-sortable-tree/react-sortable-tree-tests.tsx index 695614caca..3824f98438 100644 --- a/types/react-sortable-tree/react-sortable-tree-tests.tsx +++ b/types/react-sortable-tree/react-sortable-tree-tests.tsx @@ -1,27 +1,27 @@ import * as React from "react"; -import SortableTree, - { - SortableTreeWithoutDndContext, - defaultGetNodeKey, - NodeRenderer, - TreeItem, - defaultSearchMethod, - SearchData, - NodeData, - ExtendedNodeData, - FullTree, - OnVisibilityToggleData, - OnDragPreviousAndNextLocation, - OnMovePreviousAndNextLocation, - PlaceholderRendererProps, - ThemeProps - } from "react-sortable-tree"; +import SortableTree, { + defaultGetNodeKey, + defaultSearchMethod, + ExtendedNodeData, + FullTree, + getNodeAtPath, + NodeData, + NodeRenderer, + OnDragPreviousAndNextLocation, + OnMovePreviousAndNextLocation, + OnVisibilityToggleData, + PlaceholderRendererProps, + SearchData, + SortableTreeWithoutDndContext, + ThemeProps, + TreeItem +} from "react-sortable-tree"; import { ListProps, ListRowRenderer } from "react-virtualized"; class PlaceholderRenderer extends React.Component { render() { - const backgroundColor = this.props.isOver ? 'green' : 'red'; - return
Custom Placeholder class
; + const backgroundColor = this.props.isOver ? "green" : "red"; + return
Custom Placeholder class
; } } @@ -29,37 +29,59 @@ class Test extends React.Component { render() { const treeData = [ { - title: "Title", subtitle: "Subtitle", children: [ - {title: "Child 1", subtitle: "Subtitle", children: []}, - {title: "Child 2", subtitle: "Subtitle"} + title: "Title", + subtitle: "Subtitle", + children: [ + { title: "Child 1", subtitle: "Subtitle", children: [] }, + { title: "Child 2", subtitle: "Subtitle" } ] } ]; const reactVirtualizedListProps: ListProps = { - width: 100, height: 44, rowCount: 3, rowHeight: 44, rowRenderer: "test" as any as ListRowRenderer + width: 100, + height: 44, + rowCount: 3, + rowHeight: 44, + rowRenderer: ("test" as any) as ListRowRenderer }; - const nodeRenderer: NodeRenderer = "test" as any as NodeRenderer; - const theme: ThemeProps = { nodeContentRenderer: nodeRenderer } as any as ThemeProps; - + const nodeRenderer: NodeRenderer = ("test" as any) as NodeRenderer; + const theme: ThemeProps = ({ + nodeContentRenderer: nodeRenderer + } as any) as ThemeProps; + const maybeNode = getNodeAtPath({ + treeData, + path: [0, 1], + getNodeKey: defaultGetNodeKey + }); return (
{}} - style={{width: "100%"}} + style={{ width: "100%" }} className="test-class" - innerStyle={{backgroundColor: "#3A3A3A"}} + innerStyle={{ backgroundColor: "#3A3A3A" }} maxDepth={3} searchMethod={defaultSearchMethod} searchQuery={"Child 1"} searchFocusOffset={1} - searchFinishCallback={(matches: NodeData[]) => { const firstTitle = matches[0].node.title; }} - generateNodeProps={(data: ExtendedNodeData) => ({buttons: [data.node.title]}) } + searchFinishCallback={(matches: NodeData[]) => { + const firstTitle = matches[0].node.title; + }} + generateNodeProps={(data: ExtendedNodeData) => ({ + buttons: [data.node.title] + })} getNodeKey={defaultGetNodeKey} - onMoveNode={(data: NodeData & FullTree & OnMovePreviousAndNextLocation) => {}} + onMoveNode={( + data: NodeData & + FullTree & + OnMovePreviousAndNextLocation + ) => {}} onVisibilityToggle={(data: OnVisibilityToggleData) => {}} canDrag={true} - canDrop={(data: OnDragPreviousAndNextLocation & NodeData) => true} + canDrop={(data: OnDragPreviousAndNextLocation & NodeData) => + true + } reactVirtualizedListProps={reactVirtualizedListProps} rowHeight={62} slideRegionSize={100} @@ -69,14 +91,17 @@ class Test extends React.Component { dndType="testNodeType" placeholderRenderer={PlaceholderRenderer} theme={theme} - shouldCopyOnOutsideDrop={true} + shouldCopyOnOutsideDrop={true} /> {}} - style={{width: "100px"}} - shouldCopyOnOutsideDrop={() => false} + style={{ width: "100px" }} + shouldCopyOnOutsideDrop={() => false} /> + {maybeNode ? maybeNode.node.title : ""}
); } diff --git a/types/react-sortable-tree/utils/tree-data-utils.d.ts b/types/react-sortable-tree/utils/tree-data-utils.d.ts index 84f68840c7..600dea727a 100644 --- a/types/react-sortable-tree/utils/tree-data-utils.d.ts +++ b/types/react-sortable-tree/utils/tree-data-utils.d.ts @@ -6,12 +6,12 @@ type FlattenedData = (TreeNode & TreePath & {lowerSiblingsCounts: number[]})[]; export function getDescendantCount(data: TreeNode & {ignoreCollapsed?: boolean}): number; export function getVisibleNodeCount(data: FullTree): number; -export function getVisibleNodeInfoAtIndex(data: FullTree & {targetIndex: number, getNodeKey: GetNodeKeyFunction}): TreeNode & TreePath & {lowerSiblingsCounts: number[]}; +export function getVisibleNodeInfoAtIndex(data: FullTree & {targetIndex: number, getNodeKey: GetNodeKeyFunction}): TreeNode & TreePath & {lowerSiblingsCounts: number[]} | null; export function walk(data: WalkAndMapFunctionParameters): void; export function map(data: WalkAndMapFunctionParameters): TreeItem[]; export function changeNodeAtPath(data: FullTree & TreePath & {newNode: Function | any, getNodeKey: GetNodeKeyFunction, ignoreCollapsed?: boolean}): TreeItem[]; export function removeNodeAtPath(data: FullTree & TreePath & {getNodeKey: GetNodeKeyFunction, ignoreCollapsed?: boolean}): TreeItem[]; -export function getNodeAtPath(data: FullTree & TreePath & {getNodeKey: GetNodeKeyFunction, ignoreCollapsed?: boolean}): TreeItem | null; +export function getNodeAtPath(data: FullTree & TreePath & {getNodeKey: GetNodeKeyFunction, ignoreCollapsed?: boolean}): TreeNode & TreeIndex | null; export function addNodeUnderParent(data: FullTree & {newNode: TreeItem, parentKey?: number | string, getNodeKey: GetNodeKeyFunction, ignoreCollapsed?: boolean, expandParent?: boolean}): FullTree & TreeIndex; export function insertNode(data: FullTree & {depth: number, newNode: TreeItem, minimumTreeIndex: number, ignoreCollapsed?: boolean, expandParent?: boolean, getNodeKey: GetNodeKeyFunction}): FullTree & TreeIndex & TreePath & {parentNode: TreeItem}; export function getFlatDataFromTree(data: FullTree & {getNodeKey: GetNodeKeyFunction, ignoreCollapsed?: boolean}): (TreeNode & TreePath & {lowerSiblingsCounts: number[], parentNode: TreeItem})[];