UNPKG

@kenshooui/react-tree

Version:

React Tree is a straight forward component that allows a user to display and manage a hierarchical structure of items in a clear and comfortable way.

63 lines (57 loc) 1.58 kB
/** @jsx jsx */ import { jsx } from "@emotion/core"; import React from "react"; import SearchedItem from "./searched_item/searched_item"; import BasicItem from "./basic_item"; export const ForwardIconRenderer = () => <>➡️</>; const ItemRenderer = props => { const { getStyles, searchTerm = "", item: { item, hasChild, currentDepth } = { item: [""], hasChild: false, currentDepth: 0 }, onClick, forwardIconRenderer: ForwardIcon = ForwardIconRenderer, selectedItem } = props; const isItemSelected = item.toString() === selectedItem?.item?.toString(); const searchIndex = item[item.length - 1] .toLowerCase() .indexOf(searchTerm.trim().toLowerCase()); return ( <div onClick={() => onClick(item[currentDepth], item, hasChild)} css={getStyles("item", props)} > {searchTerm !== "" && ( <SearchedItem item={item} searchIndex={searchIndex} searchTerm={searchTerm.trim()} getStyles={getStyles} isSelected={ isItemSelected && item[item.length - 1] === selectedItem.leaf } /> )} {searchTerm === "" && ( <BasicItem label={item[currentDepth]} getStyles={getStyles} isSelected={ isItemSelected && item[currentDepth] === selectedItem.leaf } /> )} {hasChild && ( <span css={getStyles("forwardIcon", props)}> <ForwardIcon /> </span> )} </div> ); }; export default ItemRenderer;