/* * Copyright 2015 Palantir Technologies, Inc. All rights reserved. * Licensed under the BSD-3 License as modified (the “License”); you may obtain a copy * of the license at https://github.com/palantir/blueprint/blob/master/LICENSE * and https://github.com/palantir/blueprint/blob/master/PATENTS */ import * as React from "react"; import { Classes, ITreeNode, Tooltip, Tree } from "@blueprintjs/core"; import BaseExample from "./common/baseExample"; export interface ITreeExampleState { nodes: ITreeNode[]; } export class TreeExample extends BaseExample { public constructor() { super(); const tooltipLabel = ; const longLabel = "Organic meditation gluten-free, sriracha VHS drinking vinegar beard man."; /* tslint:disable:object-literal-sort-keys so childNodes can come last */ this.state = { nodes: [ { hasCaret: true, iconName: "folder-close", label: "Folder 0", }, { iconName: "folder-close", isExpanded: true, label: Folder 1, childNodes: [ { iconName: "document", label: "Item 0", secondaryLabel: tooltipLabel }, { iconName: "pt-icon-tag", label: longLabel }, { hasCaret: true, iconName: "pt-icon-folder-close", label: Folder 2, childNodes: [ { label: "No-Icon Item" }, { iconName: "pt-icon-tag", label: "Item 1" }, { hasCaret: true, iconName: "pt-icon-folder-close", label: "Folder 3", childNodes: [ { iconName: "document", label: "Item 0" }, { iconName: "pt-icon-tag", label: "Item 1" }, ], }, ], }, ], }, ], } as any as ITreeExampleState; /* tslint:enable:object-literal-sort-keys */ let i = 0; this.forEachNode(this.state.nodes, (n) => n.id = i++); } // override @PureRender because nodes are not a primitive type and therefore aren't included in // shallow prop comparison public shouldComponentUpdate() { return true; } protected renderExample() { return ( ); } private handleNodeClick = (nodeData: ITreeNode, _nodePath: number[], e: React.MouseEvent) => { const originallySelected = nodeData.isSelected; if (!e.shiftKey) { this.forEachNode(this.state.nodes, (n) => n.isSelected = false); } nodeData.isSelected = originallySelected == null ? true : !originallySelected; this.setState(this.state); } private handleNodeCollapse = (nodeData: ITreeNode) => { nodeData.isExpanded = false; this.setState(this.state); } private handleNodeExpand = (nodeData: ITreeNode) => { nodeData.isExpanded = true; this.setState(this.state); } private forEachNode(nodes: ITreeNode[], callback: (node: ITreeNode) => void) { if (nodes == null) { return; } for (const node of nodes) { callback(node); this.forEachNode(node.childNodes, callback); } } }