import * as React from "react"; import * as cx from "classnames"; import { Dispatch } from "redux"; import { BaseBreadcrumbsProps, Breadcrumb } from "./view.pc"; import { breadCrumbClicked } from "../../../../../actions"; import { InspectorNode, DependencyGraph, PCVisibleNode, getPCNode, getInspectorSourceNode, PCSourceTagNames, PCComponent, PCSlot, PCPlug, InspectorTreeNodeName } from "paperclip"; import { getTreeNodeAncestors, EMPTY_ARRAY } from "tandem-common"; export type Props = { dispatch: Dispatch; graph: DependencyGraph; rootInspectorNode: InspectorNode; selectedInspectorNode: InspectorNode; } & BaseBreadcrumbsProps; type BreadcrumbProps = { graph: DependencyGraph; dispatch: Dispatch; inspectorNode: InspectorNode; sourceNode: PCVisibleNode | PCComponent | PCSlot | PCPlug; selected: boolean; }; class EnhancedBreadcrumb extends React.PureComponent { onClick = () => { this.props.dispatch(breadCrumbClicked(this.props.inspectorNode)); }; render() { const { onClick } = this; const { inspectorNode, selected, sourceNode, graph } = this.props; let sourceNodeName: PCSourceTagNames; let label: string; if (sourceNode) { sourceNodeName = sourceNode.name; if (sourceNode.name === PCSourceTagNames.PLUG) { label = (getPCNode(sourceNode.slotId, graph) as PCSlot).label; } else { label = sourceNode.label; } } else if (inspectorNode.name === InspectorTreeNodeName.CONTENT) { sourceNodeName = PCSourceTagNames.PLUG; label = (getPCNode(inspectorNode.sourceSlotNodeId, graph) as PCSlot) .label; } else { return null; } return ( ); } } export default (Base: React.ComponentClass) => class BreadcrumbsController extends React.PureComponent { render() { const { selectedInspectorNode, rootInspectorNode, dispatch, graph, ...rest } = this.props; const items = selectedInspectorNode ? [selectedInspectorNode] .concat( getTreeNodeAncestors( selectedInspectorNode.id, rootInspectorNode ) || EMPTY_ARRAY ) .reverse() .map(inspectorNode => { const sourceNode = getInspectorSourceNode( inspectorNode as InspectorNode, rootInspectorNode, graph ); return ( ); }) : EMPTY_ARRAY; return ; } };