@ctrl/react-orgchart 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../dist-src/utils/collapse.js","../dist-src/utils/wrapText.js","../dist-src/utils/helpers.js","../dist-src/chart/renderLines.js","../dist-src/chart/onClick.js","../dist-src/chart/components/iconLink.js","../dist-src/chart/render.js","../dist-src/chart/index.js","../dist-src/chart/config.js","../dist-src/orgChart.js"],"sourcesContent":["export function collapse(d) {\n // Check if this node has children\n if (d.children) {\n d._children = d.children;\n d.children = null;\n }\n}\n","import { select } from 'd3-selection';\nimport truncate from 'lodash.truncate';\nlet getTruncatedText = (text, maxWordLength) => truncate(text, { length: maxWordLength });\n// One way of achieving text-wrapping capability in SVG\n// Text is broken down to words, each word is added to a line and then the lines width is checked\n// If the line width is less than the max we move to the next word, if more we add new line etc\n// until the max number of lines is reached.\nexport function wrapText(text, maxLineWidth, maxNumberOfLines = 3, maxWordLength = 17) {\n if (!text._groups || !text._groups[0] || !text._groups[0].length) {\n return '';\n }\n let editedClass = '';\n text._groups[0].forEach(textNode => {\n const text = select(textNode);\n const x = text.attr('x');\n const y = text.attr('y');\n const dy = parseFloat(text.attr('dy'));\n const lineHeight = 1.1;\n const words = text.text().split(/\\s+/).reverse();\n let lineNumber = 0;\n let curLineWidth;\n let word;\n let line = [];\n let tspan = text\n .text(null)\n .append('tspan')\n .style('text-anchor', 'middle')\n .attr('x', x)\n .attr('y', y)\n .attr('dy', `${dy}em`);\n while (lineNumber < maxNumberOfLines && words.length) {\n word = words.pop();\n line.push(word);\n tspan.text(line.join(' '));\n curLineWidth = tspan.node().getComputedTextLength();\n if (curLineWidth > maxLineWidth) {\n if (lineNumber + 1 === maxNumberOfLines) {\n tspan.text(getTruncatedText(line.join(' '), maxWordLength));\n break;\n }\n else {\n line.pop();\n tspan.text(line.join(' '));\n line = [word];\n tspan = text\n .append('tspan')\n .style('text-anchor', 'middle')\n .attr('x', x)\n .attr('y', y)\n .attr('dy', ++lineNumber * lineHeight + dy + 'em')\n .text(getTruncatedText(word, maxWordLength));\n }\n if (word.length > maxWordLength) {\n break;\n }\n }\n }\n if (!editedClass) {\n editedClass = text.attr('class').replace(' unedited', '');\n }\n text.attr('class', editedClass);\n });\n}\n","export const getName = data => data.data.entity && data.data.entity.name;\nexport const getTitle = data => data.data.entity && data.data.entity.title;\nexport const getCount = data => {\n let children = (data.children || []).length || (data._children || []).length;\n if (!children) {\n return '';\n }\n return `Team (${children})`;\n};\nexport const getCursorForNode = data => data.data.children || data.data._children ? 'pointer' : 'default';\nexport const customOnClick = (fn, onClick, config) => (event, data) => {\n if (typeof fn === 'function') {\n if (fn(data, event)) {\n onClick(config);\n }\n else {\n event.stopPropagation();\n }\n }\n};\n","import { line, curveLinear } from 'd3-shape';\nconst margin = 10;\nexport function renderLines(config) {\n const { svg, links, nodeWidth, nodeHeight, borderColor, sourceNode, treeData, animationDuration, } = config;\n const parentNode = sourceNode || treeData;\n // Select all the links to render the lines\n const link = svg.selectAll('path.link').data(links, ({ source, target }) => {\n return `${source.data.id}-${target.data.id}`;\n });\n // Define the angled line function\n const angle = line()\n .x(d => d.x)\n .y(d => d.y)\n .curve(curveLinear);\n // Enter any new links at the parent's previous position.\n var linkEnter = link\n .enter()\n .insert('path', 'g')\n .attr('class', 'link')\n .attr('fill', 'none')\n .attr('stroke', borderColor)\n .attr('stroke-opacity', 1)\n .attr('stroke-width', 1.25)\n .attr('d', d => {\n const linePoints = [\n {\n x: d.source.x + parseInt(nodeWidth / 2, 10),\n y: d.source.y + margin,\n },\n {\n x: d.source.x + parseInt(nodeWidth / 2, 10),\n y: d.source.y + margin,\n },\n {\n x: d.source.x + parseInt(nodeWidth / 2, 10),\n y: d.source.y + margin,\n },\n {\n x: d.source.x + parseInt(nodeWidth / 2, 10),\n y: d.source.y + margin,\n },\n ];\n return angle(linePoints);\n });\n var linkUpdate = linkEnter.merge(link);\n // Transition links to their new position.\n linkUpdate\n .transition()\n .duration(animationDuration)\n .attr('d', d => {\n const linePoints = [\n {\n x: d.source.x + parseInt(nodeWidth / 2, 10),\n y: d.source.y + nodeHeight,\n },\n {\n x: d.source.x + parseInt(nodeWidth / 2, 10),\n y: d.target.y - margin,\n },\n {\n x: d.target.x + parseInt(nodeWidth / 2, 10),\n y: d.target.y - margin,\n },\n {\n x: d.target.x + parseInt(nodeWidth / 2, 10),\n y: d.target.y,\n },\n ];\n return angle(linePoints);\n });\n // Animate the existing links to the parent's new position\n link\n .exit()\n .transition()\n .duration(animationDuration)\n .attr('d', () => {\n const lineNode = config.sourceNode ? config.sourceNode : parentNode;\n const linePoints = [\n {\n x: lineNode.x + parseInt(nodeWidth / 2, 10),\n y: lineNode.y + nodeHeight + 2,\n },\n {\n x: lineNode.x + parseInt(nodeWidth / 2, 10),\n y: lineNode.y + nodeHeight + 2,\n },\n {\n x: lineNode.x + parseInt(nodeWidth / 2, 10),\n y: lineNode.y + nodeHeight + 2,\n },\n {\n x: lineNode.x + parseInt(nodeWidth / 2, 10),\n y: lineNode.y + nodeHeight + 2,\n },\n ];\n return angle(linePoints);\n });\n}\n","export function onClick(config) {\n const { render } = config;\n return (event, datum) => {\n if (event.defaultPrevented) {\n return;\n }\n const link = event && event.target && event.target.closest('a');\n if (link && link.href) {\n return;\n }\n if (!datum.children && !datum._children) {\n return;\n }\n if (datum.children) {\n // Collapse the children\n config.callerNode = datum;\n datum._children = datum.children;\n datum.children = null;\n }\n else {\n // Expand the children\n config.callerNode = null;\n datum.children = datum._children;\n datum._children = null;\n }\n // Pass in the clicked datum as the sourceNode which\n // tells the child nodes where to animate in from\n render({\n ...config,\n sourceNode: datum,\n });\n };\n}\n","export const iconLink = ({ svg, x = 5, y = 5 }) => {\n const container = svg\n .append('g')\n .attr('stroke', 'none')\n .attr('fill', 'none')\n .style('cursor', 'pointer')\n .append('g');\n const icon = container\n .append('g')\n .attr('id', 'icon')\n .attr('fill', '#9585A3')\n .attr('transform', `translate(${x}, ${y})`);\n const arrow = icon\n .append('g')\n .attr('id', 'arrow')\n .attr('transform', 'translate(7.000000, 7.000000) scale(-1, 1) translate(-7.000000, -7.000000)');\n arrow\n .append('path')\n .attr('d', 'M3.41421356,2 L8.70710678,7.29289322 C9.09763107,7.68341751 9.09763107,8.31658249 8.70710678,8.70710678 C8.31658249,9.09763107 7.68341751,9.09763107 7.29289322,8.70710678 L2,3.41421356 L2,7 C2,7.55228475 1.55228475,8 1,8 C0.44771525,8 0,7.55228475 0,7 L0,1.49100518 C0,0.675320548 0.667758414,0 1.49100518,0 L7,0 C7.55228475,0 8,0.44771525 8,1 C8,1.55228475 7.55228475,2 7,2 L3.41421356,2 Z');\n arrow\n .append('path')\n // .attr('opacity', 0.7)\n .attr('d', 'M12,2 L12,12 L2,12 L2,11 C2,10.4477153 1.55228475,10 1,10 C0.44771525,10 0,10.4477153 0,11 L0,12.4953156 C0,13.3242086 0.674596865,14 1.50034732,14 L12.4996527,14 C13.3281027,14 14,13.3234765 14,12.4996527 L14,1.50034732 C14,0.669321781 13.3358906,0 12.4953156,0 L11,0 C10.4477153,0 10,0.44771525 10,1 C10,1.55228475 10.4477153,2 11,2 L12,2 Z');\n icon\n .append('rect')\n .attr('id', 'bounds')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', 24)\n .attr('height', 24)\n .attr('fill', 'transparent');\n};\n","import * as helpers from '../utils/index';\nimport { renderLines } from './renderLines';\nimport { onClick } from './onClick';\nimport { iconLink } from './components/iconLink';\nconst CHART_NODE_CLASS = 'org-chart-node';\nconst ENTITY_LINK_CLASS = 'org-chart-entity-link';\nconst ENTITY_NAME_CLASS = 'org-chart-entity-name';\nconst ENTITY_TITLE_CLASS = 'org-chart-entity-title';\nconst COUNTS_CLASS = 'org-chart-counts';\nexport function render(config) {\n const { svg, tree, animationDuration, nodeWidth, nodeHeight, nodePaddingY, nodeBorderRadius, backgroundColor, nameColor, titleColor, reportsColor, borderColor, avatarWidth, lineDepthY, sourceNode, onEntityLinkClick, nameFontSize = 14, titleFontSize = 13, titleYTopDistance = 25, countFontSize = 14, countYTopDistance = 72, maxNameWordLength = 16, maxTitleWordLength = 17, maxCountWordLength = 17, getName, getTitle, getCount, onNameClick, onCountClick, treeMap, } = config;\n // Compute the new tree layout.\n const data = treeMap(tree);\n const nodes = data.descendants();\n const links = data.links();\n // Collapse all of the children on initial load\n // nodes.forEach(collapse);\n config.links = links;\n config.nodes = nodes;\n // Normalize for fixed-depth.\n nodes.forEach(function (d) {\n d.y = d.depth * lineDepthY;\n });\n // Update the nodes\n let node = svg.selectAll('g.' + CHART_NODE_CLASS).data(nodes, n => n.data.id);\n let parentNode = sourceNode || nodes[0];\n // Enter any new nodes at the parent's previous position.\n const nodeEnter = node\n .enter()\n .append('g')\n .attr('class', CHART_NODE_CLASS)\n .attr('transform', () => {\n return `translate(${parentNode.x0 || parentNode.x}, ${parentNode.y0 || parentNode.y})`;\n })\n .on('click', onClick(config));\n // Entity Card Shadow\n nodeEnter\n .append('rect')\n .attr('width', nodeWidth)\n .attr('height', nodeHeight)\n .attr('fill', backgroundColor)\n .attr('stroke', borderColor)\n .attr('rx', nodeBorderRadius)\n .attr('ry', nodeBorderRadius)\n .attr('fill-opacity', 0.05)\n .attr('stroke-opacity', 0.025)\n .attr('filter', 'url(#boxShadow)');\n // Entity Card Container\n nodeEnter\n .append('rect')\n .attr('width', nodeWidth)\n .attr('height', nodeHeight)\n .attr('id', d => d.data.id)\n .attr('fill', backgroundColor)\n .attr('stroke', borderColor)\n .attr('rx', nodeBorderRadius)\n .attr('ry', nodeBorderRadius)\n .style('cursor', helpers.getCursorForNode);\n let namePos = {\n x: nodeWidth / 2,\n y: nodePaddingY * 1.8 + avatarWidth,\n };\n let avatarPos = {\n x: nodeWidth / 2 - avatarWidth / 2,\n y: nodePaddingY / 2,\n };\n // Entity's Name\n nodeEnter\n .append('text')\n .attr('class', `${ENTITY_NAME_CLASS} unedited`)\n .attr('x', namePos.x)\n .attr('y', namePos.y)\n .attr('dy', '.3em')\n .style('cursor', 'pointer')\n .style('fill', nameColor)\n .style('font-size', nameFontSize)\n .text(d => (typeof getName === 'function' ? getName(d) : helpers.getName(d)))\n .on('click', helpers.customOnClick(onNameClick, onClick, config));\n // Title\n nodeEnter\n .append('text')\n .attr('class', `${ENTITY_TITLE_CLASS} unedited`)\n .attr('x', nodeWidth / 2)\n .attr('y', namePos.y + nodePaddingY + titleYTopDistance)\n .attr('dy', '0.1em')\n .style('font-size', titleFontSize)\n .style('cursor', 'pointer')\n .style('fill', titleColor)\n .text(d => (typeof getTitle === 'function' ? getTitle(d) : helpers.getTitle(d)));\n // Count\n nodeEnter\n .append('text')\n .attr('class', `${COUNTS_CLASS} unedited`)\n .attr('x', nodeWidth / 2)\n .attr('y', namePos.y + nodePaddingY + countYTopDistance)\n .attr('dy', '.9em')\n .style('font-size', countFontSize)\n .style('font-weight', 400)\n .style('cursor', 'pointer')\n .style('fill', reportsColor)\n .text(d => (typeof getCount === 'function' ? getCount(d) : helpers.getCount(d)))\n .on('click', helpers.customOnClick(onCountClick, onClick, config));\n // Entity's Avatar\n nodeEnter\n .append('image')\n .attr('id', d => `image-${d.data.id}`)\n .attr('width', avatarWidth)\n .attr('height', avatarWidth)\n .attr('x', avatarPos.x)\n .attr('y', avatarPos.y)\n .attr('stroke', borderColor)\n .attr('src', d => d.data.entity.avatar)\n .attr('href', d => d.data.entity.avatar)\n .attr('clip-path', 'url(#avatarClip)');\n // Entity's Link\n let nodeLink = nodeEnter\n .append('a')\n .attr('class', ENTITY_LINK_CLASS)\n .attr('display', d => (d.data.entity.link ? '' : 'none'))\n .attr('xlink:href', d => d.data.entity.link)\n .on('click', helpers.customOnClick(onEntityLinkClick, onClick, config));\n iconLink({\n svg: nodeLink,\n x: nodeWidth - 20,\n y: 8,\n });\n var nodeUpdate = nodeEnter.merge(node);\n // Transition nodes to their new position.\n nodeUpdate\n .transition()\n .duration(animationDuration)\n .attr('transform', d => {\n return `translate(${d.x},${d.y})`;\n });\n nodeUpdate.select('rect.box').attr('fill', backgroundColor).attr('stroke', borderColor);\n // Transition exiting nodes to the parent's new position.\n node\n .exit()\n .transition()\n .duration(animationDuration)\n .attr('transform', () => `translate(${parentNode.x},${parentNode.y})`)\n .remove();\n // Update the links\n svg.selectAll('path.link').data(links, function (d) {\n return d.id;\n });\n [\n { cls: ENTITY_NAME_CLASS, max: maxNameWordLength },\n { cls: ENTITY_TITLE_CLASS, max: maxTitleWordLength },\n { cls: COUNTS_CLASS, max: maxCountWordLength },\n ].forEach(({ cls, max }) => {\n // Svg.selectAll(`text.unedited.${cls}`).call(wrapText);\n svg.selectAll(`text.unedited.${cls}`).call(helpers.wrapText, nodeWidth - 12, // Adjust with some padding\n // name should wrap at 3 lines max\n cls === ENTITY_NAME_CLASS ? 3 : 2, max);\n });\n // Add Tooltips\n svg\n .selectAll(`text.${ENTITY_NAME_CLASS}`)\n .append('svg:title')\n .text(d => (getName ? getName(d) : helpers.getName(d)));\n svg\n .selectAll(`text.${ENTITY_TITLE_CLASS}`)\n .append('svg:title')\n .text(d => (getTitle ? getTitle(d) : helpers.getTitle(d)));\n svg\n .selectAll(`text.${COUNTS_CLASS}`)\n .append('svg:title')\n .text(d => (getCount ? getCount(d) : helpers.getCount(d)));\n // Render lines connecting nodes\n renderLines(config);\n // Stash the old positions for transition.\n nodes.forEach(d => {\n d.x0 = d.x;\n d.y0 = d.y;\n });\n var nodeLeftX = -70;\n var nodeRightX = 70;\n var nodeY = 200;\n nodes.forEach(d => {\n nodeLeftX = d.x < nodeLeftX ? d.x : nodeLeftX;\n nodeRightX = d.x > nodeRightX ? d.x : nodeRightX;\n nodeY = d.y > nodeY ? d.y : nodeY;\n });\n config.nodeRightX = nodeRightX;\n config.nodeY = nodeY;\n config.nodeLeftX = nodeLeftX * -1;\n}\n","import { select } from 'd3-selection';\nimport { zoom as zoomer, zoomIdentity } from 'd3-zoom';\nimport { tree, hierarchy } from 'd3-hierarchy';\nimport { collapse } from '../utils/index';\nimport { render } from './render';\nexport function init(options) {\n // Merge options with the default config\n const config = {\n ...options,\n treeData: options.data,\n };\n if (!config.id) {\n throw new Error('missing id for svg root');\n }\n const { elem, treeData, nodeWidth, nodeHeight, nodeSpacing, shouldResize, disableCanvasMouseWheelZoom, disableCanvasMouseMove, } = config;\n // Calculate how many pixel nodes to be spaced based on the\n // type of line that needs to be rendered\n config.lineDepthY = nodeHeight + 40;\n if (!elem) {\n throw new Error('No root elem');\n }\n // Reset in case there's any existing DOM\n elem.innerHTML = '';\n const elemWidth = elem.offsetWidth;\n const elemHeight = elem.offsetHeight;\n // Setup the d3 tree layout\n config.tree = hierarchy(treeData, function (d) {\n return d.children;\n });\n config.treeMap = tree(config.tree).nodeSize([nodeWidth + nodeSpacing, nodeHeight + nodeSpacing]);\n // Collapse tree on load\n config.treeMap(config.tree).descendants().slice(1).forEach(collapse);\n // Calculate width of a node with expanded children\n // const childrenWidth = parseInt((treeData.children.length * nodeWidth) / 2)\n // <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" xml:space=\"preserve\" viewBox=\"0 0 193 260\" enable-background=\" new 0 0 193 260\" height=\"260\" width=\"193\"\n // Add svg root for d3\n const svgroot = select(elem)\n .append('svg')\n .attr('id', 'svg')\n .attr('xmlns', 'http://www.w3.org/2000/svg')\n .attr('xmlns:xlink', 'http://www.w3.org/1999/xlink')\n .attr('x', '0px')\n .attr('y', '0px')\n .attr('xml:space', 'preserve')\n .attr('viewBox', `0 0 ${elemWidth} ${elemHeight}`)\n .attr('enable-background', ` new 0 0 ${elemWidth} ${elemHeight}`)\n .attr('width', elemWidth)\n .attr('height', elemHeight);\n // Graph center point\n const centerPoint = elemWidth / 2 - nodeWidth / 2 + 15;\n // Add our base svg group to transform when a user zooms/pans\n const svg = svgroot.append('g');\n // Connect core variables to config so that they can be\n // used in internal rendering functions\n config.svg = svg;\n config.svgroot = svgroot;\n config.elemWidth = elemWidth;\n config.elemHeight = elemHeight;\n config.render = render;\n // Defined zoom behavior\n const zoom = zoomer()\n .scaleExtent([0.1, 1.5])\n .duration(50)\n .on('zoom', zoomEvent => {\n svg.attr('transform', () => {\n return zoomEvent.transform;\n });\n });\n svgroot.call(zoom.transform, zoomIdentity.translate(centerPoint, 48).scale(0.8));\n const zoomedRoot = svgroot.call(zoom);\n // Disable the Mouse Wheel Zooming\n if (disableCanvasMouseWheelZoom) {\n zoomedRoot.on('wheel.zoom', null);\n }\n // Disable the Mouse Wheel Canvas Content Moving\n if (disableCanvasMouseMove) {\n zoomedRoot\n .on('mousedown.zoom', null)\n .on('touchstart.zoom', null)\n .on('touchmove.zoom', null)\n .on('touchend.zoom', null);\n }\n // Add avatar clip path\n const defs = svgroot.append('svg:defs');\n defs\n .append('clipPath')\n .attr('id', 'avatarClip')\n .append('circle')\n .attr('cx', 70)\n .attr('cy', 32)\n .attr('r', 24);\n // Add boxshadow\n const filter = svgroot\n .append('svg:defs')\n .append('svg:filter')\n .attr('id', 'boxShadow')\n .attr('height', '150%')\n .attr('width', '150%');\n filter\n .append('svg:feGaussianBlur')\n .attr('in', 'SourceAlpha')\n .attr('stdDeviation', 1) // blur amount\n .attr('result', 'blurOut');\n filter\n .append('svg:feOffset')\n .attr('in', 'blurOut')\n .attr('dx', 0)\n .attr('dy', 2)\n .attr('result', 'offsetOut');\n const feMerge = filter.append('feMerge');\n feMerge.append('feMergeNode').attr('in', 'offsetOut');\n feMerge.append('feMergeNode').attr('in', 'SourceGraphic');\n // Add listener for when the browser or parent node resizes\n const resize = () => {\n if (!elem) {\n window.removeEventListener('resize', resize);\n return;\n }\n svgroot.attr('width', elem.offsetWidth).attr('height', elem.offsetHeight);\n };\n if (shouldResize) {\n window.addEventListener('resize', resize);\n }\n // Start initial render\n render(config);\n // return OnDestroy fn\n return () => {\n svgroot.remove();\n if (shouldResize) {\n window.removeEventListener('resize', resize);\n }\n };\n}\n","const animationDuration = 350;\nconst shouldResize = true;\n// Nodes\nconst nodeWidth = 140;\nconst nodeHeight = 190;\nconst nodeSpacing = 12;\nconst nodePaddingX = 16;\nconst nodePaddingY = 16;\nconst avatarWidth = 48;\nconst nodeBorderRadius = 4;\n// Lines\n/* Height of the line for child nodes */\nconst lineDepthY = 120;\n// Colors\nconst backgroundColor = '#fff';\n// Theme.borderlight\nconst borderColor = '#E7E1EC';\n// Theme.gray800\nconst nameColor = '#302839';\n// Theme.gray600\nconst titleColor = '#645574';\nconst reportsColor = '#92A0AD';\nexport const config = {\n animationDuration,\n nodeWidth,\n nodeHeight,\n nodeSpacing,\n nodePaddingX,\n nodePaddingY,\n nodeBorderRadius,\n avatarWidth,\n lineDepthY,\n backgroundColor,\n borderColor,\n nameColor,\n titleColor,\n reportsColor,\n shouldResize,\n nameFontSize: 14,\n titleFontSize: 13,\n titleYTopDistance: 25,\n countFontSize: 14,\n countYTopDistance: 72,\n maxNameWordLength: 16,\n maxTitleWordLength: 17,\n maxCountWordLength: 17,\n};\n","import React from 'react';\nimport { init } from './chart/index';\nimport { config as defaultConfig } from './chart/config';\nconst defaultId = 'react-org-chart';\nexport class OrgChart extends React.PureComponent {\n constructor() {\n super(...arguments);\n this.anchor = React.createRef();\n }\n componentDidMount() {\n const { id = defaultId, disableCanvasMouseMove = false, disableCanvasMouseWheelZoom = false, tree, ...options } = this.props;\n this.onDestroy = init({\n ...defaultConfig,\n id: `#${id}`,\n elem: this.anchor.current,\n data: tree,\n disableCanvasMouseMove,\n disableCanvasMouseWheelZoom,\n ...options,\n });\n }\n componentWillUnmount() {\n this.onDestroy();\n }\n render() {\n const { id = defaultId } = this.props;\n return React.createElement('div', {\n id,\n ref: this.anchor,\n style: { width: '100%', height: '100%' },\n });\n }\n}\n"],"names":["getName","getTitle","getCount","helpers.getCursorForNode","helpers.getName","helpers.customOnClick","helpers.getTitle","helpers.getCount","helpers.wrapText","zoom","zoomer","defaultConfig"],"mappings":"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"}