@reltio/remotes 1.4.1534 → 1.4.1536

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.
package/316.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"316.js","mappings":"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","sources":["webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTable/HOCs/withTableContext.js","webpack://@reltio/remotes/../components/src/hooks/useSavedState.ts","webpack://@reltio/remotes/../sources/src/components/RightSidePanel/styles.ts","webpack://@reltio/remotes/../sources/src/components/RightSidePanel/RightSidePanel.tsx","webpack://@reltio/remotes/../sources/src/types/LegendMode.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/sankey.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/useSankey.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/styles.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/MergeTooltip.tsx","webpack://@reltio/remotes/../sources/src/icons/notMatch.svg","webpack://@reltio/remotes/../sources/src/components/SankeyChart/Node.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/Link.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/SankeyChart.tsx","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/helpers.ts","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/styles.ts","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/CrosswalkTreeView.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/ContributorRow/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/ContributorRow/ContributorRow.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/LegendTableRow.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTable.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/helpers.ts","webpack://@reltio/remotes/../sources/src/components/SelectableTree/styles.ts","webpack://@reltio/remotes/../sources/src/components/SelectableTree/SelectableTree.tsx","webpack://@reltio/remotes/../sources/src/components/UnmergeDialog/styles.ts","webpack://@reltio/remotes/../sources/src/components/UnmergeDialog/UnmergeDialog.tsx","webpack://@reltio/remotes/../sources/src/components/UnsubscribeDialog/styles.ts","webpack://@reltio/remotes/../sources/src/components/UnsubscribeDialog/UnsubscribeDialog.tsx","webpack://@reltio/remotes/../sources/src/components/LegendView/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendView/LegendView.tsx","webpack://@reltio/remotes/../sources/src/components/SourcesView/icons/LegendIcon.svg","webpack://@reltio/remotes/../sources/src/services/errors.ts","webpack://@reltio/remotes/../sources/src/components/EmptyState/icons/EmptySources.svg","webpack://@reltio/remotes/../sources/src/components/EmptyState/styles.ts","webpack://@reltio/remotes/../sources/src/components/EmptyState/EmptyState.tsx","webpack://@reltio/remotes/../sources/src/components/TreeActionSnackbar/styles.ts","webpack://@reltio/remotes/../sources/src/components/TreeActionSnackbar/TreeActionSnackbar.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetOption/styles.ts","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetOption/RulesetOption.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetsMenuList/RulesetsMenuList.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/styles.ts","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesestsSelector.tsx","webpack://@reltio/remotes/../sources/src/components/SourcesView/styles.ts","webpack://@reltio/remotes/../sources/src/components/SourcesView/SourcesView.tsx","webpack://@reltio/remotes/../sources/src/hooks/useEntityWithSurvivorshipGroups.tsx","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalkTree.ts","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalksDisplay.ts","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalkTreeActions.ts","webpack://@reltio/remotes/../sources/src/components/SourcesView/index.tsx","webpack://@reltio/remotes/./src/sources.ts"],"sourcesContent":["import {TableContext} from '../contexts/TableContext';\nimport {withContext} from '../../../../HOCs/withContext/withContext';\n\nconst withTableContext = (contextSelector) => (CellRenderer) =>\n withContext(TableContext, contextSelector, CellRenderer);\n\nexport default withTableContext;\n","import {useEffect, useState} from 'react';\n\nexport const useSavedState = <T>(getSavedState: () => Promise<T>) => {\n const [isLoaded, setIsLoaded] = useState(false);\n const [savedState, setSavedState] = useState<T | Record<string, never>>({});\n\n useEffect(() => {\n getSavedState()\n .then((savedState) => {\n setSavedState(savedState || {});\n })\n .then((_) => setIsLoaded(true))\n .catch((_) => setIsLoaded(true));\n }, []); // eslint-disable-line\n\n return {isLoaded, savedState};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n header: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n padding: '16px 12px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.12);'\n },\n closeButton: {\n marginRight: '12px'\n }\n});\n","import React from 'react';\nimport CloseIcon from '@material-ui/icons/Close';\nimport {RightPanelTab, SmallIconButton} from '@reltio/components';\nimport {useStyles} from './styles';\n\ntype Props = {\n onClose?: () => void;\n active?: number;\n tabs: RightPanelTab[];\n};\n\nexport const RightSidePanel = ({active, onClose, tabs}: Props) => {\n const styles = useStyles();\n const {content, title} = tabs[active] || {};\n\n return (\n <>\n <div className={styles.header}>\n <SmallIconButton className={styles.closeButton} icon={CloseIcon} onClick={onClose} />\n {title}\n </div>\n {content}\n </>\n );\n};\n","export enum LegendMode {\n Crosswalk = 'crosswalks',\n Source = 'source',\n Contributor = 'contributor'\n}\n","import {sum, map, pipe, groupBy, toPairs, sort, nth, prop, reduce, last} from 'ramda';\nimport {SankeyLink, SankeyData} from '../../types/SankeyChartData';\n\nconst sumValues = (links: SankeyLink[]): number => pipe(map(prop('value')), sum)(links);\nconst interpolateNumber = (a: number, b: number) => ((a = +a), (b = +b), (t) => a * (1 - t) + b * t);\n\nexport default function Sankey() {\n const lastLinksSize = 22;\n\n let nodeWidth = 24,\n smallestNodeMaxHeight = 15,\n smallestNodeMinHeight = 10,\n nodePadding = 8,\n size = [1, 1] as [number, number];\n\n function sankey({nodes, links}: SankeyData) {\n const graph = {nodes, links};\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeBreadths(graph);\n computeNodeDepths(graph);\n computeLinkDepths(graph);\n correctNodesDepth(graph);\n return graph;\n }\n\n sankey.nodeWidth = () => nodeWidth;\n sankey.setNodeWidth = (width: number) => ((nodeWidth = +width), sankey);\n\n sankey.nodePadding = () => nodePadding;\n sankey.setNodePadding = (padding: number) => ((nodePadding = +padding), sankey);\n\n sankey.smallestNodeMaxHeight = () => smallestNodeMaxHeight;\n sankey.setSmallestNodeMaxHeight = (height: number) => ((smallestNodeMaxHeight = +height), sankey);\n\n sankey.smallestNodeMinHeight = () => smallestNodeMinHeight;\n sankey.setSmallestNodeMinHeight = (height: number) => ((smallestNodeMinHeight = +height), sankey);\n\n sankey.size = () => size;\n sankey.setSize = (newSize: [number, number]) => ((size = newSize), sankey);\n\n sankey.update = (graph) => {\n computeLinkDepths(graph);\n return graph;\n };\n\n sankey.link = () => {\n let curvature = 0.5;\n\n function link(d) {\n const lastLine = !d.target.sourceLinks || d.target.sourceLinks.length == 0;\n const addPixels = 0.13;\n const x0 = d.source.x + d.source.dx,\n x1 = d.target.x,\n xi = interpolateNumber(x0, x1),\n x2 = xi(curvature),\n x3 = xi(1 - curvature),\n y0 = d.source.y + d.sy - addPixels,\n y1 = d.target.y + d.ty - addPixels;\n const appendix = !lastLine\n ? `L${x1 + nodeWidth},${y1} L${x1 + nodeWidth},${y1 + d.dy + 2 * addPixels}`\n : '';\n\n return y0 === y1\n ? `M${x0},${y0} \n L${x1},${y1}${appendix} \n L${x1},${y1 + d.dy + 2 * addPixels} \n L${x0},${y0 + d.dy + 2 * addPixels} Z`\n : `M${x0},${y0}\n C${x2},${y0} ${x3},${y1} ${x1},${y1}${appendix} \n L${x1},${y1 + d.dy + 2 * addPixels} \n C${x3},${y1 + d.dy + 2 * addPixels} ${x2},${y0 + d.dy + 2 * addPixels} \n ${x0},${y0 + d.dy + 2 * addPixels} Z`;\n }\n\n link.curvature = function (_) {\n if (!arguments.length) return curvature;\n curvature = +_;\n return link;\n };\n\n return link;\n };\n\n // Populate the sourceLinks and targetLinks for each node.\n function computeNodeLinks({nodes, links}: SankeyData) {\n nodes.forEach((node) => {\n node.sourceLinks = [];\n node.targetLinks = [];\n });\n links.forEach((link) => {\n link.source.sourceLinks.push(link);\n link.target.targetLinks.push(link);\n });\n }\n\n // Compute the value (size) of each node by summing the associated links.\n function computeNodeValues({nodes}: SankeyData) {\n nodes.forEach((node) => {\n node.value = Math.max(sumValues(node.sourceLinks), sumValues(node.targetLinks));\n });\n }\n\n // Iteratively assign the breadth (x-position) for each node.\n // Nodes are assigned the maximum breadth of incoming neighbors plus one;\n // nodes with no incoming links are assigned breadth zero, while\n // nodes with no outgoing links are assigned the maximum breadth.\n function computeNodeBreadths({nodes}: SankeyData) {\n if (!nodes.length) return;\n let remainingNodes = [nodes[0]],\n nextNodes,\n x = 0;\n\n while (remainingNodes.length) {\n nextNodes = [];\n remainingNodes.forEach((node) => {\n node.x = x;\n node.dx = nodeWidth;\n node.targetLinks.forEach((link) => {\n if (nextNodes.indexOf(link.source) < 0) {\n nextNodes.push(link.source);\n }\n });\n });\n remainingNodes = nextNodes;\n ++x;\n }\n\n nodes.forEach((node) => {\n node.x = x - 1 - node.x;\n });\n\n if (x > 2) {\n const w = (size[0] - 2 * nodeWidth - lastLinksSize) / (x - 2);\n nodes.forEach((node) => {\n if (!node.sourceLinks || node.sourceLinks.length == 0) node.x = size[0] - nodeWidth;\n else node.x *= w;\n });\n } else {\n nodes[0].x = size[0] - nodeWidth;\n nodes[1].x = nodes[0].x - lastLinksSize - nodeWidth;\n }\n }\n\n function computeNodeDepths({nodes, links}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a, b) => a[0] - b[0]),\n map(nth(1))\n )(nodes);\n\n //\n initializeNodeDepth();\n resolveCollisions();\n\n const max = pipe(\n map((nodes) => (nodes.length - 1) * nodePadding + sum(map((node) => node.dy, nodes))),\n reduce(Math.max, 0)\n )(nodesByBreadth);\n\n const y1 = (size[1] - max) / 2;\n\n nodesByBreadth.forEach((nodes) => {\n const {y, dy} = last(nodes);\n const y0 = size[1] - (y + dy);\n nodes.forEach((node) => {\n node.y += y0;\n if (y1 > 0) node.y -= y1;\n });\n });\n\n function initializeNodeDepth() {\n let ky = pipe(\n map((nodes) => (size[1] - (nodes.length - 1) * nodePadding) / sumValues(nodes)),\n reduce(Math.min, Infinity)\n )(nodesByBreadth);\n\n const min = pipe(\n map((node) => node.value / (node.targetLinks?.length || 1)),\n reduce(Math.min, Infinity)\n )(nodes);\n\n ky = Math.max(Math.min(ky, smallestNodeMaxHeight / min), smallestNodeMinHeight / min);\n\n nodesByBreadth.forEach((nodes) => {\n nodes.forEach((node, i) => {\n node.y = i;\n node.dy = node.value * ky;\n });\n });\n\n links.forEach((link) => {\n link.dy = link.value * ky;\n });\n }\n\n function resolveCollisions() {\n nodesByBreadth.forEach((nodes) => {\n let node,\n dy,\n y0 = 0,\n i;\n const n = nodes.length;\n\n // Push any overlapping nodes down.\n nodes.sort((a, b) => a.y - b.y);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dy = y0 - node.y;\n if (dy > 0) node.y += dy;\n y0 = node.y + node.dy + nodePadding;\n }\n\n // If the bottommost node goes outside the bounds, push it back up.\n dy = y0 - nodePadding - size[1];\n if (dy > 0) {\n y0 = node.y -= dy;\n\n // Push any overlapping nodes back up.\n for (i = n - 2; i >= 0; --i) {\n node = nodes[i];\n dy = node.y + node.dy + nodePadding - y0;\n if (dy > 0) node.y -= dy;\n y0 = node.y;\n }\n }\n });\n }\n }\n\n function computeLinkDepths({nodes}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a: number, b: number) => a[0] - b[0]),\n map(nth(1))\n )(nodes);\n\n nodesByBreadth.forEach((nodes) => {\n nodes.forEach((node) => {\n if (node.targetLinks?.length) {\n const result = [];\n const linksByUuid = node.targetLinks.map((l) => l.crosswalk.uuid);\n const sourceNodes = [];\n node.targetLinks.forEach(function (l) {\n if (this.indexOf(l.source) == -1) this.push(l.source);\n }, sourceNodes);\n for (let i = 0; i < sourceNodes.length; i++)\n for (let j = 0; j < sourceNodes[i].sourceLinks.length; j++) {\n const index = linksByUuid.indexOf(sourceNodes[i].sourceLinks[j].crosswalk.uuid);\n if (index != -1) result.push(node.targetLinks[index]);\n }\n node.targetLinks = result;\n }\n\n if (node.sourceLinks?.length) {\n const result = [];\n if (node.targetLinks?.length) {\n const linksByUuid = node.sourceLinks.map((l) => l.crosswalk.uuid);\n for (let i = 0; i < node.targetLinks.length; i++) {\n const index = linksByUuid.indexOf(node.targetLinks[i].crosswalk.uuid);\n if (index != -1) result.push(node.sourceLinks[index]);\n }\n }\n\n const resultByUuid = result.map((l) => l.crosswalk.uuid);\n const newSources = node.sourceLinks.filter(function (l) {\n return this.indexOf(l.crosswalk.uuid) == -1;\n }, resultByUuid);\n\n node.sourceLinks = newSources.concat(result);\n if (result.length > 0) {\n let sizeForNewSources = 0;\n for (let i = 0; i < newSources.length; i++) sizeForNewSources += newSources[i].dy;\n node.sizeForNewSources = sizeForNewSources;\n }\n }\n });\n });\n\n nodes.forEach((node) => {\n let sy = 0,\n ty = node.sizeForNewSources || 0;\n delete node.sizeForNewSources;\n node.sourceLinks.forEach((link) => {\n link.sy = sy;\n sy += link.dy;\n });\n node.targetLinks.forEach((link) => {\n link.ty = ty;\n ty += link.dy;\n });\n });\n }\n\n function correctNodesDepth({nodes}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a: number, b: number) => b[0] - a[0]),\n map(nth(1))\n )(nodes);\n\n nodesByBreadth.forEach((nodes) => {\n nodes = nodes.concat().sort((a, b) => a.y - b.y);\n nodes.forEach((node, i) => {\n if (node.sourceLinks?.length) {\n const {target, ty, dy} = last(node.sourceLinks);\n let y0 = target.y + ty + dy - node.dy;\n if (nodes[i - 1]?.x == node.x && y0 < nodes[i - 1]?.y + nodes[i - 1]?.dy + nodePadding)\n y0 = nodes[i - 1].y + nodes[i - 1].dy + nodePadding;\n if (node.y > y0) {\n node.y = y0;\n }\n }\n });\n });\n }\n\n return sankey;\n}\n","import {useMemo} from 'react';\nimport {SankeyData, SankeyNode} from '../../types/SankeyChartData';\nimport sankey from './sankey';\n\ntype Props = {\n width: number;\n height: number;\n data: SankeyData;\n};\n\nconst useSankey = ({data, width, height}: Props) =>\n useMemo(() => {\n if (!width || !height) return {nodes: [], links: []};\n\n const shallowCopy = (data: SankeyData): SankeyData => {\n const safeNodes = data.nodes.map((node) => ({...node}));\n const getSafeNode = (originalNode: SankeyNode) => {\n const index = data.nodes.indexOf(originalNode);\n return safeNodes[index];\n };\n\n const safeLinks = data.links.map((link) => ({\n ...link,\n source: getSafeNode(link.source),\n target: getSafeNode(link.target)\n }));\n return {nodes: safeNodes, links: safeLinks};\n };\n\n const sankeyLayout = sankey()\n .setNodeWidth(14)\n .setNodePadding(20)\n .setSize([height - 2, width - 2]);\n\n const nodeWidth = sankeyLayout.nodeWidth();\n const path = sankeyLayout.link();\n\n const safeData = shallowCopy(data);\n const {nodes, links}: SankeyData = sankeyLayout(safeData);\n\n return {nodes, links, nodeWidth, path};\n }, [data, height, width]);\n\nexport default useSankey;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n tooltipTitle: {\n fontWeight: 500,\n fontSize: '16px',\n lineHeight: '24px',\n letterSpacing: '0.15px',\n marginBottom: '8px',\n userSelect: 'none'\n },\n tooltipRow: {\n display: 'flex',\n alignItems: 'center',\n fontSize: '13px',\n lineHeight: '15px',\n fontWeight: 'normal',\n '&:not(:last-child)': {\n marginBottom: '4px'\n }\n },\n tooltipIcon: {\n fontSize: '18px',\n color: 'rgba(0, 0, 0, 0.54)',\n marginRight: '8px'\n },\n node: {\n stroke: '#000000',\n strokeWidth: 1,\n strokeOpacity: 0.38\n },\n rootNode: {\n transform: 'rotate(90deg)',\n userSelect: 'none',\n fontSize: '13px'\n },\n popupContainer: {\n padding: 5,\n boxSizing: 'border-box'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {LightArrowTooltip} from '@reltio/components';\nimport CalendarTodayIcon from '@material-ui/icons/CalendarToday';\nimport PersonIcon from '@material-ui/icons/Person';\nimport {useStyles} from './styles';\n\ntype Props = {\n user: string;\n time: number;\n children: React.ReactElement;\n};\n\nexport const MergeTooltip = ({user, time, children}: Props) => {\n const styles = useStyles();\n const tooltipTitle = (\n <div>\n <span className={styles.tooltipTitle}>{i18n.text('Merge details')}</span>\n <div className={styles.tooltipRow}>\n <CalendarTodayIcon className={styles.tooltipIcon} />\n {i18n.date(time, 'L LTS')}\n </div>\n <div className={styles.tooltipRow}>\n <PersonIcon className={styles.tooltipIcon} />\n {user}\n </div>\n </div>\n );\n\n return (\n <LightArrowTooltip title={tooltipTitle} placement={'top'}>\n {children}\n </LightArrowTooltip>\n );\n};\n\nexport default MergeTooltip;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M17 13.138l4.5 4.5-4.5 4.5V18.5h-1.247l-3.488-3.479 1.413-1.414 2.901 2.893H17v-3.362zM17 1.5L21.5 6 17 10.5V7.138h-.421l-11.03 11H2v-2h2.723l11.03-11H17V1.5zm-11.45 4l3.294 3.286-1.414 1.413L4.723 7.5H2v-2h3.55z\",\n id: \"svg2499598299a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg2499598299b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2499598299a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2499598299b)\",\n d: \"M0 0h24v24H0z\"\n}))));","import React, {MouseEvent, useEffect, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Popover as Popover} from '@material-ui/core';\nimport MergeTooltip from './MergeTooltip';\nimport {SankeyNode} from '../../types/SankeyChartData';\nimport {SmallIconButtonWithTooltip, noop, useCrosswalkColor, useCrosswalkHighlight} from '@reltio/components';\nimport {groupBy, prop, pipe, map, head, last, max, min} from 'ramda';\nimport UnmergeIcon from '../../icons/notMatch.svg';\nimport {useStyles} from './styles';\n\ntype Props = {\n nodeWidth: number;\n node: SankeyNode;\n highlightEnabled: boolean;\n isColored: boolean;\n disableUnmerge: boolean;\n onUnmerge: (contributorUri: string) => void;\n isDragging: boolean;\n};\n\nexport const Node = ({node, nodeWidth, highlightEnabled, isColored, disableUnmerge, onUnmerge, isDragging}: Props) => {\n const styles = useStyles();\n const [labelX, setLabelX] = useState(0);\n const [anchorEl, setAnchorEl] = useState(null);\n const textRef = useRef(null);\n const {\n x,\n y,\n name,\n label,\n targetLinks,\n sourceLinks,\n entity: {crosswalks = [], merges}\n } = node;\n const [firstCrosswalk] = crosswalks;\n const {isDimmed, highlightCrosswalk, removeHighlight} = useCrosswalkHighlight(firstCrosswalk);\n const color = useCrosswalkColor(firstCrosswalk);\n const startNodeHeight = crosswalks?.length\n ? sourceLinks[crosswalks.length - 1].sy + sourceLinks[crosswalks.length - 1].dy\n : 0;\n\n const renderMergeNodes = () => {\n const timeMap = pipe(map(prop('source')), groupBy(prop('time')))(targetLinks);\n\n return merges?.map(({time, user}, index) => {\n const sources = timeMap[time];\n if (!sources) return;\n\n const [start, end] = sources.reduce(\n (acc, {sourceLinks}) => [\n min(head(sourceLinks).ty, acc[0]),\n max(last(sourceLinks).ty + last(sourceLinks).dy, acc[1])\n ],\n [Infinity, 0]\n );\n\n return (\n <MergeTooltip user={user} time={time} key={'node-' + index}>\n <rect\n transform={`translate(0,${start})`}\n height={end - start}\n width={nodeWidth}\n className={styles.node}\n fillOpacity={0.54}\n fill={'#F0F0F0'}\n opacity={highlightEnabled && isDimmed ? 0.38 : 1}\n />\n </MergeTooltip>\n );\n });\n };\n\n const openPopup = (e: MouseEvent<SVGRectElement>) => setAnchorEl(e.currentTarget);\n const closePopup = () => setAnchorEl(null);\n const handleUnmerge = () => {\n onUnmerge(name);\n closePopup();\n };\n\n useEffect(() => {\n const nodeHeight = node.dy;\n const textWidth = textRef?.current?.clientWidth || 0;\n if (nodeHeight < textWidth) setLabelX(nodeHeight / 2 - textWidth / 2);\n }, []);\n\n useEffect(() => {\n if (isDragging && !!anchorEl) closePopup();\n }, [isDragging]);\n\n return (\n <g transform={`translate(${x},${y})`}>\n {name === 'ROOT' ? (\n <text dy={-5} dx={labelX} ref={textRef} className={styles.rootNode}>\n {label || ''}\n </text>\n ) : (\n <>\n <rect\n height={startNodeHeight}\n width={14}\n className={styles.node}\n fill={isColored ? color : '#F0F0F0'}\n key={'node-main'}\n filter={highlightEnabled && isDimmed ? 'url(#saturation)' : null}\n opacity={highlightEnabled && isDimmed ? 0.19 : 1}\n onMouseEnter={() => {\n if (highlightEnabled) highlightCrosswalk();\n }}\n onMouseLeave={() => {\n if (highlightEnabled) removeHighlight();\n }}\n onClick={disableUnmerge ? noop : openPopup}\n cursor={disableUnmerge ? 'default' : 'pointer'}\n data-reltio-id=\"reltio-sankey-chart-node\"\n />\n <Popover\n open={!!anchorEl}\n anchorEl={anchorEl}\n anchorOrigin={{vertical: 'top', horizontal: 'right'}}\n onClose={closePopup}\n classes={{paper: styles.popupContainer}}\n data-reltio-id=\"reltio-unmerge-popup\"\n >\n <SmallIconButtonWithTooltip\n size=\"XS\"\n tooltipTitle={i18n.text('Unmerge')}\n icon={UnmergeIcon}\n onClick={handleUnmerge}\n />\n </Popover>\n {!!targetLinks?.length && renderMergeNodes()}\n </>\n )}\n </g>\n );\n};\n\nexport default Node;\n","import React from 'react';\nimport {useCrosswalkColor, useCrosswalkHighlight} from '@reltio/components';\nimport {SankeyLink} from '../../types/SankeyChartData';\n\ntype Props = {\n link: SankeyLink;\n path: string;\n highlightEnabled: boolean;\n isColored: boolean;\n};\n\nexport const Link = ({link, path, highlightEnabled, isColored}: Props) => {\n const {crosswalk} = link;\n const color = useCrosswalkColor(crosswalk);\n const {isDimmed, highlightCrosswalk, removeHighlight} = useCrosswalkHighlight(crosswalk);\n return (\n <path\n d={path}\n fill={isColored ? color : '#F0F0F0'}\n filter={highlightEnabled && isDimmed ? 'url(#saturation)' : null}\n opacity={highlightEnabled && isDimmed ? 0.19 : 1}\n onMouseEnter={() => {\n if (highlightEnabled) highlightCrosswalk();\n }}\n onMouseLeave={() => {\n if (highlightEnabled) removeHighlight();\n }}\n />\n );\n};\n\nexport default Link;\n","import React, {useMemo, useState, useEffect} from 'react';\nimport useSankey from './useSankey';\nimport Node from './Node';\nimport Link from './Link';\nimport {SankeyData} from '../../types/SankeyChartData';\n\ntype Props = {\n width: number;\n height: number;\n data: SankeyData;\n accentContributors?: boolean;\n disableUnmerge: boolean;\n onUnmerge: (contributorUri: string) => void;\n};\n\nconst SankeyChart = ({width, height, data, accentContributors, onUnmerge, disableUnmerge}: Props) => {\n const [isDragging, setDragging] = useState(false);\n const [isMouseDown, setMouseDown] = useState(false);\n const [previousPageX, setPreviousPageX] = useState(0);\n const [offsetX, setOffsetX] = useState(0);\n const {links, nodes, nodeWidth, path} = useSankey({data, width, height});\n\n useEffect(() => {\n setOffsetX(0);\n setPreviousPageX(0);\n }, [width, height]);\n\n const sankeyNodes = useMemo(\n () =>\n nodes.map((node, index) => (\n <Node\n highlightEnabled={accentContributors}\n isColored={accentContributors}\n node={node}\n nodeWidth={nodeWidth}\n key={`SankeyNode-${index}`}\n disableUnmerge={disableUnmerge}\n onUnmerge={onUnmerge}\n isDragging={isDragging}\n />\n )),\n [nodes, accentContributors, nodeWidth, width, height, isDragging]\n );\n\n const sankeyLinks = useMemo(\n () =>\n links.map((link, index) => (\n <Link\n highlightEnabled={!accentContributors}\n isColored={!accentContributors}\n link={link}\n path={path(link)}\n key={`SankeyLink-${index}`}\n />\n )),\n [accentContributors, links, path]\n );\n\n const extractPositionDelta = (event: React.MouseEvent) => {\n const left = event.pageX;\n const offsetX = left - previousPageX;\n setPreviousPageX(left);\n return offsetX;\n };\n\n const onDown = (event: React.MouseEvent) => {\n event.preventDefault();\n setMouseDown(true);\n extractPositionDelta(event);\n };\n const onMove = (event: React.MouseEvent) => {\n if (!isMouseDown) return;\n setDragging(true);\n const left = extractPositionDelta(event);\n setOffsetX(offsetX + left);\n };\n const onUp = () => {\n setMouseDown(false);\n setDragging(false);\n };\n\n const pointerEvents = isDragging ? 'none' : 'auto';\n const cursor = isDragging ? 'move' : 'auto';\n\n return (\n <svg\n width={width}\n height={height}\n cursor={cursor}\n onMouseDown={onDown}\n onMouseMove={onMove}\n onMouseUp={onUp}\n onMouseLeave={onUp}\n >\n <filter id=\"saturation\" filterUnits=\"objectBoundingBox\">\n <feColorMatrix id=\"saturate\" type=\"saturate\" values=\"0.2\" />\n </filter>\n <g transform={`translate(${offsetX},${height - 1}) rotate(-90)`} pointerEvents={pointerEvents}>\n <g>{sankeyLinks}</g>\n <g>{sankeyNodes}</g>\n </g>\n </svg>\n );\n};\n\nexport default SankeyChart;\n","import {chain, concat, curry, evolve, filter, map, pipe, uniq} from 'ramda';\nimport {CrosswalkBase, CrosswalkTree, eqCrosswalks} from '@reltio/mdm-sdk';\nimport {SankeyLink, SankeyNode} from '../../types/SankeyChartData';\n\nconst isCrosswalkDisplayed = curry(\n (displayedCrosswalks: CrosswalkBase[], crosswalk: CrosswalkBase) =>\n !displayedCrosswalks || displayedCrosswalks.some(eqCrosswalks(crosswalk))\n);\n\nconst filterDisplayedCrosswalks = curry((displayedCrosswalks: CrosswalkBase[], tree: CrosswalkTree) => {\n return evolve(\n {\n crosswalks: filter(isCrosswalkDisplayed(displayedCrosswalks)),\n merges: map(\n evolve({\n losers: map(filterDisplayedCrosswalks(displayedCrosswalks))\n })\n )\n },\n tree\n );\n});\n\nconst addCrosswalkUniqueId = (tree: CrosswalkTree) => {\n let count = 1;\n const addIdToSubtree = pipe(\n evolve({crosswalks: map((crosswalk) => ({...crosswalk, uuid: count++}))}),\n evolve({\n merges: map(\n evolve({\n losers: map((loser) => addIdToSubtree(loser))\n })\n )\n })\n );\n return addIdToSubtree(tree);\n};\n\nconst processTree = (tree: CrosswalkTree & {label?: string}) => {\n const nodes: SankeyNode[] = [];\n const links: SankeyLink[] = [];\n\n const processSubTree = (tree, parentIndex, time) => {\n const {crosswalks = [], merges = [], uri = '', label} = tree;\n\n nodes.push({entity: tree, name: uri, time, label});\n const index = nodes.length - 1;\n\n const mergesCrosswalks = pipe(\n chain(({losers, time}) => {\n return pipe(\n filter((loser) => loser.crosswalks?.length || loser.merges?.length),\n chain((loser) => processSubTree(loser, index, time))\n )(losers);\n }),\n concat(crosswalks)\n )(merges);\n\n if (parentIndex != -1)\n mergesCrosswalks.forEach((crosswalk) =>\n links.push({\n source: nodes[index],\n target: nodes[parentIndex],\n value: 10,\n crosswalk\n })\n );\n\n return mergesCrosswalks;\n };\n processSubTree(tree, -1, Date.now());\n\n const linkedNodes = pipe(\n chain(({source, target}) => [source, target]),\n uniq\n )(links);\n\n return {nodes: nodes.filter((node) => linkedNodes.includes(node)), links};\n};\n\nexport const getSankeyData = (\n crosswalkTree: CrosswalkTree,\n entityLabel = '',\n displayedCrosswalks?: CrosswalkBase[]\n) => {\n return pipe(\n filterDisplayedCrosswalks(displayedCrosswalks),\n addCrosswalkUniqueId,\n processTree\n )({uri: 'ROOT', label: entityLabel, crosswalks: [], merges: [{time: Date.now(), losers: [crosswalkTree]}]});\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n graph: {\n padding: '8px 0px',\n boxSizing: 'border-box',\n height: '100%',\n width: '100%'\n }\n}));\n","import React, {memo} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {noop} from '@reltio/components';\nimport SankeyChart from '../SankeyChart/SankeyChart';\nimport {getSankeyData} from './helpers';\nimport {CrosswalkBase, CrosswalkTree} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n crosswalkTree: CrosswalkTree;\n entityLabel?: string;\n visibleCrosswalks?: CrosswalkBase[];\n accentContributors?: boolean;\n disableUnmerge?: boolean;\n onUnmerge?: (contributorUri: string) => void;\n};\n\nconst CrosswalkTreeView = ({\n crosswalkTree,\n entityLabel,\n visibleCrosswalks,\n accentContributors,\n disableUnmerge = false,\n onUnmerge = noop\n}: Props) => {\n const styles = useStyles();\n const sankeyData = getSankeyData(crosswalkTree, entityLabel, visibleCrosswalks);\n\n return (\n <div className={styles.graph} data-reltio-id=\"reltio-crosswalk-tree\">\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleWidth handleHeight>\n {({width = 0, height = 200}: {width: number; height: number}) => (\n <SankeyChart\n width={width}\n height={height}\n data={sankeyData}\n accentContributors={accentContributors}\n disableUnmerge={disableUnmerge}\n onUnmerge={onUnmerge}\n />\n )}\n </ReactResizeDetector>\n </div>\n );\n};\n\nexport default memo(CrosswalkTreeView);\n","import {makeStyles} from '@material-ui/core/styles';\n\ntype StylesProps = {\n isFocused?: boolean;\n};\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n paddingRight: '8px',\n '& button + button': {\n marginLeft: '4px'\n }\n },\n focusedIcon: ({isFocused}: StylesProps) => ({\n width: 28,\n height: 28,\n color: isFocused ? '#000' : 'rgba(0, 0, 0, 0.54)',\n borderRadius: 0\n }),\n title: {\n color: theme.palette.text.secondary,\n paddingLeft: '6px',\n paddingRight: '2px'\n },\n uri: {\n lineHeight: '15px',\n color: theme.palette.text.primary\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport {SmallIconButtonWithTooltip, Spacer} from '@reltio/components';\nimport {getLastUriPart} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype ContributorAction = React.ComponentPropsWithRef<typeof SmallIconButtonWithTooltip> & {\n show: boolean;\n};\n\ntype Props = {\n contributorUri: string;\n isFocused: boolean;\n focusable: boolean;\n onToggleFocus: () => void;\n contributorActions: ContributorAction[];\n};\n\nconst ContributorRow = ({contributorUri, focusable, contributorActions, onToggleFocus, isFocused}: Props) => {\n const styles = useStyles({isFocused});\n return (\n <div className={styles.root}>\n <SmallIconButtonWithTooltip\n size=\"XXS\"\n onClick={() => onToggleFocus()}\n className={styles.focusedIcon}\n icon={focusable && VisibilityIcon}\n disabled={!focusable}\n tooltipTitle={focusable && i18n.text('Focus')}\n />\n <Typography variant={'body2'} className={styles.uri}>\n <span className={styles.title}>{i18n.text('Entity ID:')}</span>\n {getLastUriPart(contributorUri)}\n </Typography>\n <Spacer />\n {contributorActions.map(({show, ...buttonProps}, i) => {\n return show && <SmallIconButtonWithTooltip key={i} size=\"XS\" showForDisabled {...buttonProps} />;\n })}\n </div>\n );\n};\n\nexport default ContributorRow;\n","import {makeStyles} from '@material-ui/core/styles';\n\ntype StylesProps = {\n contributorColor: string;\n};\n\nexport const useStyles = makeStyles(() => ({\n root: ({contributorColor}: StylesProps) => ({\n fontSize: '13px',\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n border: '1px solid rgba(0, 0, 0, 0.05)',\n paddingLeft: '8px',\n '&:before': {\n content: '\" \"',\n borderLeft: `8px solid ${contributorColor}`,\n position: 'absolute',\n top: -1,\n left: 0,\n bottom: -1\n },\n '& > div + div': {\n marginTop: '1px'\n }\n }),\n editor: {\n padding: '0px 30px 0px 25px'\n }\n}));\n","import React, {useEffect, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport {\n CrosswalkEditor,\n SourceCrosswalksRow,\n CrosswalksByTypes,\n CrosswalkType,\n useCrosswalkFocus,\n useHighlightedCrosswalks\n} from '@reltio/components';\nimport mdm from '@reltio/mdm-module';\nimport {\n Crosswalk,\n DataTenant,\n eqCrosswalks,\n getContributorColor,\n getDataTenantFromCrosswalks,\n RelationCrosswalk\n} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport {chain, find, flatten, head, pipe, pluck, propOr, props, values} from 'ramda';\nimport AddIcon from '@material-ui/icons/Add';\nimport UnmergeIcon from '../../../icons/notMatch.svg';\nimport UnsubscribeIcon from '@material-ui/icons/Delete';\nimport ContributorRow from './ContributorRow/ContributorRow';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n contributorUri: string;\n accentContributor?: boolean;\n crosswalksBySources: {\n source: string;\n crosswalksByTypes: CrosswalksByTypes;\n }[];\n canUnmerge: boolean;\n disableAddCrosswalk: boolean;\n disableEditCrosswalk: boolean;\n disableDeleteCrosswalk: boolean;\n disableUnmergeContributor: boolean;\n onAdd: (event: {contributorCrosswalk: Crosswalk; crosswalk: Omit<Crosswalk, 'uri'>}) => void;\n onDelete: (crosswalkId: string) => void;\n onEdit: (event: {crosswalkId: string; attributeName: string; value?: string}) => void;\n onUnmerge: () => void;\n expandedSources?: string[];\n onToggleSourceExpanded: (sourceUri: string) => void;\n onUnsubscribeContributor: (event: {contributorUri: string; dataTenant: DataTenant; crosswalk: Crosswalk}) => void;\n};\n\nconst LegendTableRow = ({\n className,\n contributorUri,\n accentContributor,\n crosswalksBySources,\n expandedSources,\n canUnmerge,\n disableAddCrosswalk,\n disableEditCrosswalk,\n disableDeleteCrosswalk,\n disableUnmergeContributor,\n onUnmerge,\n onEdit,\n onDelete,\n onAdd,\n onToggleSourceExpanded,\n onUnsubscribeContributor\n}: Props) => {\n const contributorColor = accentContributor ? getContributorColor(contributorUri) : 'rgba(0, 0, 0, 0.38)';\n const styles = useStyles({contributorColor});\n const dataTenants = useSelector(mdm.selectors.getDataTenants);\n\n const ref = useRef(null);\n const [scrollToCrosswalk] = useHighlightedCrosswalks();\n useEffect(() => {\n if (accentContributor && scrollToCrosswalk) {\n const crosswalks = pipe(\n find(({source}) => source === scrollToCrosswalk.type),\n propOr({}, 'crosswalksByTypes'),\n values,\n flatten\n )(crosswalksBySources);\n if (\n crosswalks.some(\n (crosswalk) => eqCrosswalks(scrollToCrosswalk, crosswalk) && crosswalk !== scrollToCrosswalk\n )\n ) {\n ref?.current?.scrollIntoView({behavior: 'smooth'});\n }\n }\n }, [scrollToCrosswalk]);\n\n const [showEditor, setShowEditor] = useState(false);\n\n const contributorCrosswalk: Crosswalk = pipe(\n pluck('crosswalksByTypes'),\n find((crosswalks) => crosswalks[CrosswalkType.Simple].length || crosswalks[CrosswalkType.Empty].length),\n props([CrosswalkType.Simple, CrosswalkType.Empty]),\n flatten,\n head\n )(crosswalksBySources);\n const {toggleCrosswalkFocus, isFocused} = useCrosswalkFocus(contributorCrosswalk);\n\n const allContributorCrosswalks: (Crosswalk | RelationCrosswalk)[] = pipe(\n pluck('crosswalksByTypes'),\n chain(values),\n flatten\n )(crosswalksBySources);\n\n const dataTenantForExternalCrosswalk = getDataTenantFromCrosswalks(allContributorCrosswalks, dataTenants);\n\n const unsubscribeContributor = () =>\n onUnsubscribeContributor({\n contributorUri,\n dataTenant: dataTenantForExternalCrosswalk,\n crosswalk: contributorCrosswalk\n });\n\n const contributorActions = [\n {\n icon: AddIcon,\n tooltipTitle: i18n.text('Add crosswalk'),\n onClick: () => setShowEditor(true),\n disabled: disableAddCrosswalk,\n show: !!contributorCrosswalk\n },\n {\n icon: UnmergeIcon,\n tooltipTitle: i18n.text('Unmerge'),\n onClick: () => onUnmerge(),\n disabled: disableUnmergeContributor,\n show: canUnmerge\n },\n {\n icon: UnsubscribeIcon,\n tooltipTitle: i18n.text('Unsubscribe'),\n onClick: () => unsubscribeContributor(),\n disabled: disableUnmergeContributor,\n show: canUnmerge && !!dataTenantForExternalCrosswalk\n }\n ];\n\n return (\n <div ref={ref} className={classnames(styles.root, className)}>\n <ContributorRow\n contributorUri={contributorUri}\n focusable={accentContributor && !!contributorCrosswalk}\n isFocused={accentContributor && isFocused}\n onToggleFocus={toggleCrosswalkFocus}\n contributorActions={contributorActions}\n />\n {crosswalksBySources.map(({source, crosswalksByTypes}) => (\n <SourceCrosswalksRow\n key={source}\n source={source}\n crosswalksByTypes={crosswalksByTypes}\n showCrosswalkColors={!accentContributor}\n crosswalksFocusEnabled={!accentContributor}\n expanded={expandedSources?.includes(source)}\n disableEditCrosswalk={disableEditCrosswalk}\n disableDeleteCrosswalk={disableDeleteCrosswalk}\n onEdit={onEdit}\n onDelete={onDelete}\n onToggleExpanded={() => onToggleSourceExpanded(source)}\n />\n ))}\n {showEditor && (\n <CrosswalkEditor\n className={styles.editor}\n onAdd={(crosswalk) => onAdd({contributorCrosswalk, crosswalk})}\n onClose={() => setShowEditor(false)}\n />\n )}\n </div>\n );\n};\n\nexport default LegendTableRow;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n table: {\n overflowY: 'auto',\n overflowX: 'hidden',\n paddingLeft: '16px',\n paddingRight: '6px'\n },\n tableRow: {\n '& + &': {\n marginTop: '10px'\n },\n margin: 'auto',\n maxWidth: '448px'\n }\n}));\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {\n AttributeType,\n checkCanCreateCrosswalk,\n checkCanDeleteCrosswalk,\n checkCanEditCrosswalk,\n Contributor,\n CrosswalkBase,\n Entity,\n TEntityType\n} from '@reltio/mdm-sdk';\nimport {AddCrosswalkEvent, DeleteCrosswalkEvent, EditCrosswalkEvent, noop} from '@reltio/components';\nimport {buildTableRowsData, collectVisibleCrosswalks} from './helpers';\nimport LegendTableRow from './LegendTableRow/LegendTableRow';\nimport {append, assoc, evolve, has, ifElse, includes, pipe, unless, without} from 'ramda';\nimport {UnsubscribeContributorEvent} from '../../types';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n entity: Entity;\n entityType: TEntityType;\n contributors: Contributor[];\n accentContributors?: boolean;\n selectedAttributeTypes?: AttributeType[];\n onChangeVisibleCrosswalks: (visibleCrosswalks: CrosswalkBase[]) => void;\n readOnly?: boolean;\n canUnmerge: boolean;\n disableUnmerge: boolean;\n onAddCrosswalk?: (event: AddCrosswalkEvent) => void;\n onEditCrosswalk?: (event: EditCrosswalkEvent) => void;\n onDeleteCrosswalk?: (event: DeleteCrosswalkEvent) => void;\n onUnmergeContributor?: (contributorUri: string) => void;\n onUnsubscribeContributor?: (event: UnsubscribeContributorEvent & {contributorUri: string}) => void;\n};\n\nconst LegendTable = ({\n accentContributors,\n entity,\n entityType,\n contributors,\n selectedAttributeTypes,\n onChangeVisibleCrosswalks,\n readOnly,\n canUnmerge,\n disableUnmerge,\n onAddCrosswalk = noop,\n onEditCrosswalk = noop,\n onDeleteCrosswalk = noop,\n onUnmergeContributor = noop,\n onUnsubscribeContributor = noop\n}: Props) => {\n const styles = useStyles();\n\n const rowsData = useMemo(\n () => buildTableRowsData(entity, contributors, selectedAttributeTypes),\n [entity, contributors, selectedAttributeTypes]\n );\n const [expandedByContributor, setExpandedByContributor] = useState<{[contributorUri: string]: string[]}>({});\n const visibleCrosswalks = useMemo(\n () => collectVisibleCrosswalks(rowsData, expandedByContributor),\n [rowsData, expandedByContributor]\n );\n useEffect(() => {\n onChangeVisibleCrosswalks(visibleCrosswalks);\n }, [visibleCrosswalks]);\n\n const handleDelete = useCallback(\n (crosswalkId: string) => {\n onDeleteCrosswalk({entityUri: entity?.uri, crosswalkId});\n },\n [entity?.uri, onDeleteCrosswalk]\n );\n\n const handleEdit = useCallback(\n (params: Omit<EditCrosswalkEvent, 'entityUri'>) => {\n onEditCrosswalk({...params, entityUri: entity?.uri});\n },\n [entity?.uri, onEditCrosswalk]\n );\n\n return (\n <div className={styles.table}>\n {rowsData.map(({contributorUri, crosswalksBySources}) => {\n return (\n <LegendTableRow\n key={contributorUri}\n className={styles.tableRow}\n canUnmerge={canUnmerge}\n contributorUri={contributorUri}\n accentContributor={accentContributors}\n crosswalksBySources={crosswalksBySources}\n disableAddCrosswalk={readOnly || !checkCanCreateCrosswalk(entityType)}\n disableEditCrosswalk={readOnly || !checkCanEditCrosswalk(entityType)}\n disableDeleteCrosswalk={readOnly || !checkCanDeleteCrosswalk(entityType)}\n disableUnmergeContributor={disableUnmerge}\n onAdd={(params) => onAddCrosswalk({...params, entity})}\n onDelete={handleDelete}\n onEdit={handleEdit}\n onUnmerge={() => onUnmergeContributor(contributorUri)}\n onUnsubscribeContributor={onUnsubscribeContributor}\n expandedSources={expandedByContributor[contributorUri]}\n onToggleSourceExpanded={(sourceUri: string) => {\n setExpandedByContributor(\n pipe(\n unless(has(contributorUri), assoc(contributorUri, [])),\n evolve({\n [contributorUri]: ifElse(\n includes(sourceUri),\n without([sourceUri]),\n append(sourceUri)\n )\n })\n )\n );\n }}\n />\n );\n })}\n </div>\n );\n};\n\nexport default memo(LegendTable);\n","import {\n AttributeType,\n Contributor,\n Crosswalk,\n Entity,\n eqCrosswalks,\n getRelationCrosswalks,\n isEmptyValue,\n RelationCrosswalk\n} from '@reltio/mdm-sdk';\nimport {chain, filter, map, pipe} from 'ramda';\nimport {CrosswalksByTypes, CrosswalkType, groupCrosswalksByTypesAndSources} from '@reltio/components';\n\ntype TableRow = {\n contributorUri: string;\n crosswalksBySources: {\n source: string;\n crosswalksByTypes: CrosswalksByTypes;\n }[];\n};\n\nexport const buildTableRowsData = (\n entity: Entity,\n contributors: Contributor[],\n selectedAttributeTypes: AttributeType[] = []\n): TableRow[] => {\n const entityCrosswalks: Crosswalk[] = entity.crosswalks;\n const relationCrosswalks: RelationCrosswalk[] = getRelationCrosswalks(entity);\n return contributors\n .filter((contributor) => !isEmptyValue(contributor.crosswalks))\n .map(({uri, crosswalks}) => {\n const crosswalksBySources = pipe(\n map((crosswalk) => {\n if (crosswalk.ownerType === 'relation') {\n const relationCrosswalk = relationCrosswalks.find(eqCrosswalks(crosswalk));\n return relationCrosswalk && {ownerType: 'relation', ...relationCrosswalk};\n } else {\n const entityCrosswalk = entityCrosswalks.find(eqCrosswalks(crosswalk));\n return entityCrosswalk && {ownerType: 'entity', ...entityCrosswalk};\n }\n }),\n filter((crosswalk) => !!crosswalk),\n groupCrosswalksByTypesAndSources(entity.type, selectedAttributeTypes)\n )(crosswalks);\n\n return {contributorUri: uri, crosswalksBySources};\n })\n .filter(({crosswalksBySources}) => crosswalksBySources.length > 0);\n};\n\nexport const collectVisibleCrosswalks = (\n rowsData: TableRow[],\n expandedByContributor: {[contributorUri: string]: string[]}\n) => {\n return rowsData.reduce((acc, {contributorUri, crosswalksBySources}) => {\n const visibleCrosswalks = chain(({source, crosswalksByTypes}) => {\n const isExpandedSource = expandedByContributor[contributorUri]?.includes(source);\n return crosswalksByTypes[CrosswalkType.Simple]\n .concat(crosswalksByTypes[CrosswalkType.Empty])\n .concat(isExpandedSource ? crosswalksByTypes[CrosswalkType.Dependent] : []);\n }, crosswalksBySources);\n return acc.concat(visibleCrosswalks);\n }, []);\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n '& + &': {\n marginLeft: '16px'\n }\n },\n title: {\n fontSize: '13px',\n lineHeight: '15px',\n color: '#666666',\n marginBottom: '7px'\n },\n hintIcon: {\n width: '16px',\n height: '16px',\n verticalAlign: 'middle'\n },\n graph: {\n width: '400px',\n height: '300px',\n borderRadius: '8px',\n background: 'rgba(0, 0, 0, 0.03)',\n border: '1px solid rgba(0, 0, 0, 0.03)',\n position: 'relative'\n },\n checkedIcon: {\n position: 'absolute',\n height: '20px',\n width: '20px',\n right: '10px',\n top: '10px',\n color: theme.palette.primary.main\n },\n selectedTree: {\n border: `1px solid ${theme.palette.primary.main}`,\n background: 'rgba(0, 114, 206, 0.05)'\n }\n}));\n","import React, {useCallback} from 'react';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport InfoIcon from '@material-ui/icons/Info';\nimport {CrosswalksDisplayProvider, noop} from '@reltio/components';\nimport {\n CrosswalkBase,\n CrosswalkTree,\n getCrosswalkColor as getUniqueCrosswalkColor,\n getCrosswalkId\n} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport CrosswalkTreeView from '../CrosswalkTreeView/CrosswalkTreeView';\nimport {useStyles} from './styles';\n\ntype Props = {\n coloredCrosswalks: string[];\n crosswalkTree: CrosswalkTree;\n selected: boolean;\n title: string;\n onSelect?: () => void;\n};\n\nexport const SelectableTree = ({coloredCrosswalks, crosswalkTree, selected, title, onSelect = noop}: Props) => {\n const styles = useStyles();\n const getCrosswalkColor = useCallback(\n (crosswalk: CrosswalkBase) => {\n return coloredCrosswalks.includes(crosswalk.uri)\n ? getUniqueCrosswalkColor(getCrosswalkId(crosswalk))\n : '#CACCD1';\n },\n [coloredCrosswalks]\n );\n return (\n <CrosswalksDisplayProvider getCrosswalkColor={getCrosswalkColor}>\n <div className={styles.container} onClick={onSelect}>\n <span className={styles.title}>\n {title} <InfoIcon className={styles.hintIcon} />\n </span>\n <div className={classnames(styles.graph, {[`${styles.selectedTree}`]: selected})}>\n {selected && <CheckCircleIcon className={styles.checkedIcon} />}\n <CrosswalkTreeView crosswalkTree={crosswalkTree} />\n </div>\n </div>\n </CrosswalksDisplayProvider>\n );\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n dialogContainer: {\n maxWidth: 'unset'\n },\n dialogTitle: {\n padding: '13px 16px 0 16px',\n fontWeight: 500,\n fontSize: '20px',\n lineHeight: '23px',\n letterSpacing: '0.25px'\n },\n dialogContent: {\n display: 'flex',\n flexDirection: 'column',\n padding: '13px 16px 0 16px'\n },\n trees: {\n display: 'flex'\n },\n uri: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.primary,\n marginBottom: '15px'\n },\n title: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.secondary,\n paddingRight: '2px'\n }\n}));\n","import React, {useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport {Dialog as Dialog} from '@material-ui/core';\nimport {DialogActions as DialogActions} from '@material-ui/core';\nimport {DialogContent as DialogContent} from '@material-ui/core';\nimport {DialogTitle as DialogTitle} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SelectableTree} from '../SelectableTree/SelectableTree';\nimport {\n collectCrosswalksFromContributor,\n Contributor,\n CrosswalkTree,\n getLastUriPart,\n UnmergeOperation\n} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n contributor: Contributor;\n crosswalkTree: CrosswalkTree;\n canUnmerge?: boolean;\n onClose: () => void;\n onUnmergeContributor: (operationType: UnmergeOperation) => void;\n};\n\nexport const UnmergeDialog = ({canUnmerge, contributor, crosswalkTree, onClose, onUnmergeContributor}: Props) => {\n const styles = useStyles();\n\n const [unmergeOperation, setUnmergeOperation] = useState(UnmergeOperation.Unmerge);\n\n const getColoredCrosswalks = useCallback(\n (includeMerges: boolean) => collectCrosswalksFromContributor(contributor, includeMerges).map(({uri}) => uri),\n [contributor]\n );\n\n const unmergeContributor = () => {\n onUnmergeContributor(unmergeOperation);\n onClose();\n };\n\n return (\n <Dialog open={true} onClose={onClose} classes={{paper: styles.dialogContainer}}>\n <DialogTitle classes={{root: styles.dialogTitle}}>{i18n.text('Unmerge')}</DialogTitle>\n <DialogContent classes={{root: styles.dialogContent}}>\n <Typography variant={'body2'} className={styles.uri}>\n <span className={styles.title}>{i18n.text('Entity URI:')}</span>\n {getLastUriPart(contributor.uri).toUpperCase()}\n </Typography>\n <div className={styles.trees}>\n <SelectableTree\n onSelect={() => setUnmergeOperation(UnmergeOperation.Unmerge)}\n selected={unmergeOperation === UnmergeOperation.Unmerge}\n title={i18n.text('Unmerge')}\n crosswalkTree={crosswalkTree}\n coloredCrosswalks={getColoredCrosswalks(true)}\n />\n {contributor.merges && contributor.uri !== crosswalkTree.uri && (\n <SelectableTree\n onSelect={() => setUnmergeOperation(UnmergeOperation.TreeUnmerge)}\n selected={unmergeOperation === UnmergeOperation.TreeUnmerge}\n title={i18n.text('Tree unmerge')}\n crosswalkTree={crosswalkTree}\n coloredCrosswalks={getColoredCrosswalks(false)}\n />\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>{i18n.text('Cancel')}</Button>\n <Button disabled={!canUnmerge} onClick={unmergeContributor} color=\"primary\">\n {i18n.text('Unmerge')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n dialogContainer: {\n maxWidth: 'unset'\n },\n dialogTitle: {\n padding: '13px 16px 0 16px',\n fontWeight: 500,\n fontSize: '20px',\n lineHeight: '23px',\n letterSpacing: '0.25px'\n },\n dialogContent: {\n display: 'flex',\n flexDirection: 'column',\n padding: '13px 16px 0 16px'\n },\n uri: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.primary,\n marginBottom: '15px'\n },\n title: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.secondary,\n paddingRight: '2px'\n }\n}));\n","import React, {useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport {Dialog as Dialog} from '@material-ui/core';\nimport {DialogActions as DialogActions} from '@material-ui/core';\nimport {DialogContent as DialogContent} from '@material-ui/core';\nimport {DialogTitle as DialogTitle} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SelectableTree} from '../SelectableTree/SelectableTree';\nimport {collectCrosswalksFromContributor, Contributor, CrosswalkTree, getLastUriPart} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n contributor: Contributor;\n crosswalkTree: CrosswalkTree;\n canUnsubscribe?: boolean;\n onClose: () => void;\n onUnsubscribeContributor: () => void;\n};\n\nexport const UnsubscribeDialog = ({\n canUnsubscribe,\n contributor,\n crosswalkTree,\n onClose,\n onUnsubscribeContributor\n}: Props) => {\n const styles = useStyles();\n\n const coloredCrosswalks = useMemo(() => collectCrosswalksFromContributor(contributor, true).map(({uri}) => uri), [\n contributor\n ]);\n\n const unsubscribeContributor = () => {\n onUnsubscribeContributor();\n onClose();\n };\n\n return (\n <Dialog open={true} onClose={onClose} classes={{paper: styles.dialogContainer}}>\n <DialogTitle classes={{root: styles.dialogTitle}}>{i18n.text('Unsubscribe')}</DialogTitle>\n <DialogContent classes={{root: styles.dialogContent}}>\n <Typography variant={'body2'} className={styles.uri}>\n <span className={styles.title}>{i18n.text('Entity URI:')}</span>\n {getLastUriPart(contributor.uri).toUpperCase()}\n </Typography>\n <SelectableTree\n selected\n title={i18n.text('Unsubscribe')}\n crosswalkTree={crosswalkTree}\n coloredCrosswalks={coloredCrosswalks}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>{i18n.text('Cancel')}</Button>\n <Button disabled={!canUnsubscribe} onClick={unsubscribeContributor} color=\"primary\">\n {i18n.text('Unsubscribe')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n height: '100%'\n },\n modeSwitcher: {\n backgroundColor: theme.palette.background.paper,\n marginTop: '8px'\n },\n infoIcon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n hint: {\n color: theme.palette.text.secondary,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'flex-start',\n margin: '5px 12px 10px 12px'\n },\n hintText: {\n fontSize: '12px',\n lineHeight: '16px'\n },\n crosswalksList: {\n height: '100%',\n width: 'calc(100% - 24px)',\n margin: '8px 12px',\n background: theme.palette.divider,\n opacity: 0.2\n },\n pane: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n },\n resizablePanesWrapper: {\n flexGrow: 1,\n width: '100%'\n }\n}));\n","import React, {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport InfoIcon from '@material-ui/icons/Info';\nimport i18n from 'ui-i18n';\nimport {isEmpty} from 'ramda';\nimport mdmModule from '@reltio/mdm-module';\nimport {\n AttributeType,\n calculateCrosswalkTreeDeep,\n checkMetadataPermission,\n Contributor,\n Crosswalk,\n CrosswalkBase,\n CrosswalkTree,\n DataTenant,\n Entity,\n getEntityType,\n getLabel,\n Metadata,\n MetadataPermissions,\n TEntityType,\n UnmergeOperation\n} from '@reltio/mdm-sdk';\nimport {\n AddCrosswalkEvent,\n DeleteCrosswalkEvent,\n EditCrosswalkEvent,\n ModeSwitcher,\n noop,\n ResizablePanes\n} from '@reltio/components';\nimport {LegendMode, UnmergeContributorEvent, UnsubscribeContributorEvent} from '../../types';\nimport CrosswalkTreeView from '../CrosswalkTreeView/CrosswalkTreeView';\nimport LegendTable from '../LegendTable/LegendTable';\nimport {UnmergeDialog} from '../UnmergeDialog/UnmergeDialog';\nimport {UnsubscribeDialog} from '../UnsubscribeDialog/UnsubscribeDialog';\n\nimport {useStyles} from './styles';\n\nexport const DEFAULT_LINK_HEIGHT = 60;\nexport const MIN_PANE1_SIZE = 170;\nexport const MIN_PANE2_SIZE = 170;\n\ntype Props = {\n activeMode: LegendMode;\n onChangeMode: (mode: LegendMode) => void;\n crosswalkTree: CrosswalkTree;\n entity: Entity;\n contributors: Contributor[];\n selectedAttributeTypes?: AttributeType[];\n readOnly?: boolean;\n onAddCrosswalk?: (event: AddCrosswalkEvent) => void;\n onEditCrosswalk?: (event: EditCrosswalkEvent) => void;\n onDeleteCrosswalk?: (event: DeleteCrosswalkEvent) => void;\n onUnmergeContributor?: (event: UnmergeContributorEvent) => void;\n onUnsubscribeContributor?: (event: UnsubscribeContributorEvent) => void;\n};\n\nconst LegendView = ({\n activeMode,\n contributors,\n crosswalkTree,\n entity,\n onChangeMode,\n onUnmergeContributor = noop,\n onUnsubscribeContributor = noop,\n ...tableProps\n}: Props) => {\n const styles = useStyles();\n\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityType: TEntityType = getEntityType(metadata, entity?.type);\n\n const viewRef = useRef<HTMLDivElement>();\n const [paneSize, setPaneSize] = useState(MIN_PANE1_SIZE);\n const handlePaneSizeChange = useCallback(({percentageSize}) => setPaneSize(percentageSize), []);\n\n const [contributorForUnmerge, setContributorForUnmerge] = useState<string>();\n const [unsubscribeInfo, setUnsubscribeInfo] = useState<{\n contributorUri: string;\n dataTenant: DataTenant;\n crosswalk: Crosswalk;\n }>();\n\n const crosswalkTreeDeep = useMemo(() => calculateCrosswalkTreeDeep(crosswalkTree), [crosswalkTree]);\n const canUnmerge = crosswalkTreeDeep > 1;\n\n useEffect(() => {\n const height = Math.max(MIN_PANE1_SIZE, crosswalkTreeDeep * DEFAULT_LINK_HEIGHT);\n const maxPaneHeight = viewRef.current?.clientHeight - MIN_PANE2_SIZE;\n setPaneSize(Math.min(maxPaneHeight, height));\n }, [crosswalkTreeDeep]);\n\n const modes = useMemo(\n () => [\n {\n id: LegendMode.Crosswalk,\n title: i18n.text('Crosswalk')\n },\n {\n id: LegendMode.Source,\n title: i18n.text('Source')\n },\n {\n id: LegendMode.Contributor,\n title: i18n.text('Contributor')\n }\n ],\n []\n );\n\n const [visibleCrosswalks, setVisibleCrosswalks] = useState<CrosswalkBase[]>();\n const accentContributors = activeMode === LegendMode.Contributor;\n const disableUnmerge = tableProps.readOnly || !checkMetadataPermission(MetadataPermissions.UNMERGE, entityType);\n\n return (\n <div className={styles.root} ref={viewRef}>\n {contributorForUnmerge && (\n <UnmergeDialog\n canUnmerge={canUnmerge}\n onClose={() => setContributorForUnmerge(null)}\n onUnmergeContributor={(operationType: UnmergeOperation) => {\n onUnmergeContributor({\n entityUri: entity.uri,\n contributorUri: contributorForUnmerge,\n operationType\n });\n }}\n crosswalkTree={crosswalkTree}\n contributor={contributors.find(({uri}) => uri === contributorForUnmerge)}\n />\n )}\n {unsubscribeInfo && (\n <UnsubscribeDialog\n canUnsubscribe={canUnmerge}\n onClose={() => setUnsubscribeInfo(null)}\n onUnsubscribeContributor={() =>\n onUnsubscribeContributor({\n dataTenant: unsubscribeInfo.dataTenant,\n crosswalk: unsubscribeInfo.crosswalk\n })\n }\n crosswalkTree={crosswalkTree}\n contributor={contributors.find(({uri}) => uri === unsubscribeInfo.contributorUri)}\n />\n )}\n <ModeSwitcher<LegendMode>\n modes={modes}\n modeId={activeMode}\n className={styles.modeSwitcher}\n onChange={onChangeMode}\n />\n <ResizablePanes\n className={styles.resizablePanesWrapper}\n orientation=\"horizontal\"\n size={paneSize}\n minSize={MIN_PANE1_SIZE}\n maxSize={-MIN_PANE2_SIZE}\n allowResize\n onChange={handlePaneSizeChange}\n >\n <div className={styles.pane}>\n {crosswalkTree && !isEmpty(visibleCrosswalks) && (\n <CrosswalkTreeView\n entityLabel={getLabel(entity?.label)}\n crosswalkTree={crosswalkTree}\n visibleCrosswalks={visibleCrosswalks}\n accentContributors={accentContributors}\n disableUnmerge={disableUnmerge || !canUnmerge}\n onUnmerge={setContributorForUnmerge}\n />\n )}\n </div>\n <div className={styles.pane}>\n <div className={styles.hint}>\n <InfoIcon className={styles.infoIcon} />\n <span className={styles.hintText}>\n {i18n.text('You can drag a crosswalk to add values to attributes swimlanes')}\n </span>\n </div>\n {entity && (\n <LegendTable\n onUnmergeContributor={setContributorForUnmerge}\n onUnsubscribeContributor={setUnsubscribeInfo}\n accentContributors={accentContributors}\n contributors={contributors}\n entity={entity}\n entityType={entityType}\n onChangeVisibleCrosswalks={setVisibleCrosswalks}\n canUnmerge={canUnmerge}\n disableUnmerge={disableUnmerge}\n {...tableProps}\n />\n )}\n </div>\n </ResizablePanes>\n </div>\n );\n};\n\nexport default memo(LegendView);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg4041339336a\",\n masktype: \"alpha\",\n maskUnits: \"userSpaceOnUse\",\n x: \"2\",\n y: \"3\",\n width: \"19\",\n height: \"17\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2.5 5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S4.83 6.5 4 6.5 2.5 5.83 2.5 5zM21 20H8v-2h13v2zM8 10h13V8H8v2zm0-4V4h13v2H8zm0 10h13v-2H8v2zm-2.5.5v-3h-3v3h3z\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg4041339336a)\"\n}, React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n d: \"M0 0h24v24H0z\"\n}))));","import {ErrorPopup} from '@reltio/components';\nimport i18n from 'ui-i18n';\nimport {getRequestErrorMessage} from '@reltio/mdm-sdk';\n\nexport const showErrorMessage = (error: unknown) => {\n console.error(error); // eslint-disable-line\n ErrorPopup.addError({\n title: i18n.text('Error'),\n message: getRequestErrorMessage(error, i18n.text('Something went wrong'))\n });\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"90\",\n height: \"90\",\n viewBox: \"0 0 90 90\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"45\",\n cy: \"45\",\n r: \"45\",\n fill: \"#0072CE\",\n fillOpacity: \".1\"\n}), React.createElement(\"mask\", {\n id: \"svg985456408a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"0\",\n y: \"0\",\n width: \"90\",\n height: \"90\"\n}, React.createElement(\"circle\", {\n cx: \"45\",\n cy: \"45\",\n r: \"45\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg985456408a)\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M-5.625 3.164h90V90h-90V3.164z\",\n fill: \"url(#paint0_linear)\"\n}), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M66.01 19.992l20.615 20.615v52.337H32.83L18.281 79.131V19.99H66.01z\",\n fill: \"url(#paint1_linear)\"\n}), React.createElement(\"path\", {\n opacity: \".06\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M16.523 20.39H87.54A2.46 2.46 0 0190 22.853v55.195a2.46 2.46 0 01-2.46 2.46H16.522a2.46 2.46 0 01-2.46-2.46V22.852a2.46 2.46 0 012.46-2.461z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.578 19.688h70.664c.971 0 1.758.787 1.758 1.757v55.196c0 .97-.787 1.757-1.758 1.757H17.578c-.97 0-1.758-.787-1.758-1.757V21.445c0-.97.787-1.758 1.758-1.758z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.046 25.536c0-.583.472-1.055 1.055-1.055h14.633a1.055 1.055 0 110 2.11H38.101a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.914 29.754c0-.582.472-1.054 1.055-1.054H60.54a1.055 1.055 0 110 2.11H37.969a1.055 1.055 0 01-1.055-1.056z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.046 57.305c0-.583.472-1.055 1.055-1.055h14.633a1.055 1.055 0 110 2.11H38.101a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.914 61.523c0-.582.472-1.054 1.055-1.054H60.54a1.055 1.055 0 110 2.11H37.969a1.055 1.055 0 01-1.055-1.056z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.046 67.852c0-.583.472-1.055 1.055-1.055h28.696a1.055 1.055 0 110 2.11H38.1a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.914 72.07c0-.582.472-1.054 1.055-1.054h26.087a1.055 1.055 0 110 2.109H37.97a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.648 36.21c0-.582.472-1.054 1.054-1.054h28.696a1.055 1.055 0 110 2.11H49.702a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.516 40.43c0-.583.472-1.055 1.054-1.055h22.572a1.055 1.055 0 110 2.11H49.57a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#979797\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"27.773\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"27.773\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"42.188\",\n cy: \"37.266\",\n r: \"2.109\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"42.188\",\n cy: \"47.813\",\n r: \"2.109\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"59.414\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"69.961\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.648 46.758c0-.583.472-1.055 1.054-1.055h28.696a1.055 1.055 0 110 2.11H49.702a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.516 50.977c0-.583.472-1.055 1.054-1.055h26.088a1.055 1.055 0 110 2.11H49.57a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M32.524 37.969v-2.813h-.703v14.191h3.93v-.703h-3.227v-9.972h3.227v-.703h-3.227z\",\n fill: \"#2B98F0\"\n}), React.createElement(\"path\", {\n opacity: \".54\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M33.423 27.07l-1.242 1.243-1.243-1.243h2.485z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n opacity: \".6\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.578 7.734h65.39a2.11 2.11 0 012.11 2.11v6.328a2.11 2.11 0 01-2.11 2.11h-65.39a2.11 2.11 0 01-2.11-2.11V9.844a2.11 2.11 0 012.11-2.11z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M20.39 13.008a2.11 2.11 0 012.11-2.11h24.61a2.11 2.11 0 110 4.22H22.5a2.11 2.11 0 01-2.11-2.11zM52.031 13.008a2.11 2.11 0 012.11-2.11h3.515a2.11 2.11 0 110 4.22h-3.515a2.11 2.11 0 01-2.11-2.11z\",\n fill: \"#979797\"\n})), React.createElement(\"defs\", null, React.createElement(\"linearGradient\", {\n id: \"paint0_linear\",\n x1: \"-5.625\",\n y1: \"3.164\",\n x2: \"-5.625\",\n y2: \"90\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#FAFAFA\",\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#F4F4F4\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint1_linear\",\n x1: \"93.557\",\n y1: \"63.672\",\n x2: \"54.451\",\n y2: \"27.31\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})))));","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n height: '100%',\n overflow: 'hidden',\n background: theme.palette.background.default,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: '115px'\n },\n info: {\n color: theme.palette.text.secondary,\n fontSize: '16px',\n lineHeight: '24px',\n marginTop: '16px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport EmptyIcon from './icons/EmptySources.svg';\n\nimport {useStyles} from './styles';\n\nconst EmptyState = () => {\n const styles = useStyles();\n\n return (\n <div className={styles.root}>\n <EmptyIcon />\n <span className={styles.info}>\n {i18n.text('Please persist your profile to be able to edit crosswalks')}\n </span>\n </div>\n );\n};\n\nexport default EmptyState;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n snackbarMessage: {\n display: 'flex',\n alignItems: 'center'\n },\n snackbarIcon: {\n paddingRight: 16\n }\n});\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Entity, getLabel} from '@reltio/mdm-sdk';\nimport {UrlGeneratorsContext} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport {Link as Link} from '@material-ui/core';\nimport InfoIcon from '@material-ui/icons/Info';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n entity: Entity;\n message: string;\n};\n\nconst TreeActionSnackbar = ({entity, message}: Props) => {\n const styles = useStyles();\n const uiPath = useSelector(mdmModule.selectors.getUIPath);\n const {generateEntityUrl} = useContext(UrlGeneratorsContext);\n const entityLink = generateEntityUrl({uiPath, uri: entity.uri});\n\n return (\n <div className={styles.snackbarMessage}>\n <InfoIcon className={styles.snackbarIcon} />\n <Typography>\n {getLabel(entity.label)}{' '}\n <Link href={entityLink} target=\"_blank\">\n {i18n.text('lookup profile')}\n </Link>{' '}\n {message}\n </Typography>\n </div>\n );\n};\n\nexport default TreeActionSnackbar;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n paddingTop: '14px',\n paddingBottom: '13px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.05)',\n whiteSpace: 'normal',\n '&:last-child': {\n borderBottom: 'none'\n }\n },\n label: {\n marginBottom: '2px',\n fontSize: '16px',\n lineHeight: '24px',\n color: theme.palette.text.primary\n },\n description: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.secondary\n }\n}));\n","import React from 'react';\nimport {SurvivorshipGroupType} from '@reltio/mdm-sdk';\nimport {MenuItem as MenuItem} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {useStyles} from './styles';\n\ntype MenuItemProps = React.ComponentPropsWithoutRef<typeof MenuItem>;\n\ntype Props = {\n innerRef: React.Ref<HTMLLIElement>;\n innerProps: MenuItemProps;\n data: SurvivorshipGroupType;\n};\n\nexport const RulesetOption = ({innerRef, innerProps, data}: Props) => {\n const styles = useStyles();\n const {label, description} = data;\n\n return (\n <MenuItem className={styles.root} ref={innerRef} {...innerProps}>\n <Typography className={styles.label}>{label}</Typography>\n {description && <Typography className={styles.description}>{description}</Typography>}\n </MenuItem>\n );\n};\n","import React from 'react';\nimport {MenuListComponentProps} from 'react-select';\n\nexport const RulesetsMenuList = <OptionType, IsMulti extends boolean>(\n props: MenuListComponentProps<OptionType, IsMulti>\n) => {\n const {innerRef, getStyles, children} = props;\n const styles = {...getStyles('menuList', props), maxHeight: '500px', padding: 0};\n return (\n <div ref={innerRef} style={styles}>\n {children}\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n width: '280px'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe, propEq, prop} from 'ramda';\nimport {DropDownSelector} from '@reltio/components';\nimport {getLabel, SurvivorshipGroupType} from '@reltio/mdm-sdk';\nimport {RulesetOption} from './RulesetOption/RulesetOption';\nimport {RulesetsMenuList} from './RulesetsMenuList/RulesetsMenuList';\nimport {useStyles} from './styles';\n\ntype Props = {\n survivorshipGroups: SurvivorshipGroupType[];\n currentSurvivorshipGroupUri: string;\n onChange: (uri: string) => void;\n};\n\nexport const RulesetsSelector = ({survivorshipGroups, currentSurvivorshipGroupUri, onChange}: Props) => {\n const styles = useStyles();\n const options = survivorshipGroups.map((group) => ({...group, label: getLabel(group.label)}));\n const value = options.find(propEq('uri', currentSurvivorshipGroupUri));\n return (\n <DropDownSelector\n height={40}\n className={styles.root}\n components={{Option: RulesetOption, MenuList: RulesetsMenuList}}\n label={i18n.text('Rulesets')}\n options={options}\n value={value}\n onChange={pipe(prop('uri'), onChange)}\n />\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n sourcesView: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflowX: 'hidden',\n overflowY: 'auto',\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\n display: 'flex'\n },\n '@global div[role=tooltip]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n '@global div[role=presentation]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n resizablePanesWrapper: {\n flexGrow: 1,\n height: '100%'\n },\n pane: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n },\n headerDivider: {\n marginLeft: '16px',\n marginRight: '8px',\n height: '32px',\n backgroundColor: 'rgba(0, 0, 0, 0.12)'\n },\n attributesTable: {\n backgroundColor: '#fff'\n }\n});\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport {Dispatch} from 'redux';\nimport {connect} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {equals, pipe, pluck, propEq, reject} from 'ramda';\nimport mdmModule, {HistoryEvent, profile} from '@reltio/mdm-module';\nimport {\n ApiError,\n ApiErrorCode,\n AttributeType,\n collectContributorsFromTree,\n Entity,\n getEntityType,\n Metadata,\n SourcesPerspectiveConfig\n} from '@reltio/mdm-sdk';\nimport {\n AttributesTable,\n CrosswalkDragLayer,\n CrosswalksDisplayProvider,\n ExpandedAttributesProvider,\n HistoryHeader,\n HistoryPanelEmptyState,\n HistoryView,\n ProfileResizablePanes,\n ScreenProfileBand,\n useDidUpdateEffect,\n useHistory,\n useHistoryEnabled,\n useHistorySlice,\n useModifiedEntity,\n useSavedState,\n useSnackbar\n} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport {Divider as Divider} from '@material-ui/core';\nimport HistoryIcon from '@material-ui/icons/History';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\nimport LegendView from '../LegendView/LegendView';\nimport {LegendMode, SourcesSavedState} from '../../types';\nimport {useCrosswalkTree} from '../../hooks/useCrosswalkTree';\nimport LegendIcon from './icons/LegendIcon.svg';\nimport {showErrorMessage} from '../../services/errors';\nimport {useCrosswalkTreeActions} from '../../hooks/useCrosswalkTreeActions';\nimport {useCrosswalksDisplay} from '../../hooks/useCrosswalksDisplay';\nimport {useEntityWithSurvivorshipGroups} from '../../hooks/useEntityWithSurvivorshipGroups';\nimport HTML5Backend from 'react-dnd-html5-backend';\nimport {DndProvider} from 'react-dnd';\nimport EmptyState from '../EmptyState/EmptyState';\nimport TreeActionSnackbar from '../TreeActionSnackbar/TreeActionSnackbar';\nimport {RulesetsSelector} from '../RulesestsSelector/RulesestsSelector';\nimport {useStyles} from './styles';\n\nconst perspectiveId = 'source';\n\ntype Props = {\n config: SourcesPerspectiveConfig;\n entity: Entity;\n metadata: Metadata;\n saveState: (state: SourcesSavedState) => void;\n getSavedState: () => Promise<SourcesSavedState>;\n dispatch: Dispatch;\n historyEvent: HistoryEvent;\n};\n\nenum ActivePanel {\n Legend,\n History\n}\n\nconst SourcesView = ({\n config,\n entity: defaultEntity,\n metadata,\n getSavedState,\n saveState,\n dispatch,\n historyEvent\n}: Props) => {\n const styles = useStyles();\n const [activeMode, setActiveMode] = useState(LegendMode.Crosswalk);\n const [isCrosswalkTreeLoading, setIsCrosswalkTreeLoading] = useState(false);\n\n const {\n survivorshipGroups,\n currentSurvivorshipGroupUri,\n onChangeSurvivorshipGroup,\n entity,\n isDefaultSurvivorshipGroupUri,\n isLoading: isEntityLoading\n } = useEntityWithSurvivorshipGroups(defaultEntity);\n\n const {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({\n perspectiveId,\n entity,\n historyButtonId: ActivePanel.History\n });\n\n const persistedEntity = isProfilePersisted ? entity : null;\n\n const entityUri = persistedEntity?.uri;\n const entityType = getEntityType(metadata, entity?.type);\n\n const {historySlice} = useHistorySlice({entity: persistedEntity, historyEvent});\n\n const [selectedAttrTypes, setSelectedAttrTypes] = useState<AttributeType[]>();\n useDidUpdateEffect(() => {\n setSelectedAttrTypes(undefined);\n }, [historySlice]);\n useDidUpdateEffect(() => {\n setSelectedAttrTypes(undefined);\n }, [entityUri]);\n\n const {SnackbarRenderer, showSnackbarMessage} = useSnackbar({\n anchorOrigin: {vertical: 'top', horizontal: 'center'},\n showDismiss: true\n });\n const {isLoaded, savedState} = useSavedState<SourcesSavedState>(getSavedState);\n const [visibleColumns, setVisibleColumns] = useState<string[]>();\n useEffect(() => {\n if (isLoaded) {\n setVisibleColumns(savedState.visibleColumns);\n }\n }, [isLoaded]); // eslint-disable-line\n useEffect(() => {\n const hasVisibleColumnsChanged = !equals(visibleColumns, savedState.visibleColumns);\n if (isLoaded && hasVisibleColumnsChanged) {\n saveState({visibleColumns});\n }\n }, [visibleColumns]); // eslint-disable-line\n\n const onCrosswalkTreeLoaded = useCallback(() => {\n setIsCrosswalkTreeLoading(false);\n }, []);\n\n const {crosswalkTree, reload: reloadCrosswalkTree} = useCrosswalkTree({\n entityUri: historySlice?.aEntity.uri || entityUri,\n onSuccess: onCrosswalkTreeLoaded\n });\n const contributors = useMemo(() => collectContributorsFromTree(crosswalkTree), [crosswalkTree]);\n\n const refreshEntity = useCallback(() => {\n entityUri &&\n dispatch(\n profile.entity.actions.loadEntity({\n viewId: config.id,\n uri: entityUri\n })\n );\n }, [entityUri, config, dispatch]);\n\n const refreshData = useCallback(pipe(refreshEntity, reloadCrosswalkTree), [refreshEntity, reloadCrosswalkTree]);\n\n const {\n modifiedEntity,\n crosswalksMap,\n newlyCreatedAttributes,\n onDeleteAttribute,\n onPinAttribute,\n onIgnoreAttribute,\n onEditAttribute,\n onAddAttribute\n } = useModifiedEntity({\n entity: historySlice?.aEntity || persistedEntity,\n onModify: refreshData,\n onError: showErrorMessage\n });\n\n const displayProps = useCrosswalksDisplay({activeMode, contributors, entity});\n const onShowMessage = useCallback((message: string, entity?: Entity) => {\n showSnackbarMessage(entity ? <TreeActionSnackbar entity={entity} message={message} /> : message);\n }, []);\n\n const {addCrosswalk, deleteCrosswalk, editCrosswalk, unmergeContributor, unsubscribeContributor} =\n useCrosswalkTreeActions({\n onShowMessage,\n onSuccess: refreshData,\n onError: useCallback(\n (error: ApiError) => {\n showErrorMessage(error);\n if (error.errorCode === ApiErrorCode.CROSSWALK_NOT_FOUND) {\n refreshData();\n }\n },\n [refreshData]\n ),\n onLoad: useCallback(() => setIsCrosswalkTreeLoading(true), [])\n });\n\n const {\n historyFilter,\n onApplyFilter,\n isLoading: isHistoryLoading,\n historicUris,\n historyWithTotal,\n canLoadMore,\n onLoadMore\n } = useHistory({entity: persistedEntity, enabled: isHistoryEnabled});\n\n const tabs = [\n {\n buttonProps: {\n id: ActivePanel.Legend,\n icon: LegendIcon,\n tooltipTitle: i18n.text('Legend')\n },\n title: <Typography variant=\"h6\">{i18n.text('Legend')}</Typography>,\n content: (\n <LegendView\n activeMode={activeMode}\n onChangeMode={setActiveMode}\n entity={historySlice?.aEntity || persistedEntity}\n crosswalkTree={crosswalkTree}\n contributors={contributors}\n selectedAttributeTypes={selectedAttrTypes}\n readOnly={!!historySlice || isCrosswalkTreeLoading}\n onAddCrosswalk={addCrosswalk}\n onUnmergeContributor={unmergeContributor}\n onUnsubscribeContributor={unsubscribeContributor}\n onEditCrosswalk={editCrosswalk}\n onDeleteCrosswalk={deleteCrosswalk}\n />\n )\n },\n {\n buttonProps: {\n id: ActivePanel.History,\n icon: HistoryIcon,\n tooltipTitle: i18n.text('History')\n },\n title: (\n <HistoryHeader\n total={(historicUris?.length || 0) + 1}\n entityType={entityType}\n filter={historyFilter}\n onApplyFilter={onApplyFilter}\n />\n ),\n content: isProfilePersisted ? (\n <HistoryView\n isLoading={isHistoryLoading}\n historyWithTotal={historyWithTotal}\n contributorsUris={historicUris}\n entityUri={entityUri}\n historyEvent={historyEvent}\n onLoadMore={onLoadMore}\n canLoadMore={canLoadMore}\n />\n ) : (\n <HistoryPanelEmptyState />\n )\n }\n ];\n const additionalHeaderItems = (\n <>\n <RulesetsSelector\n survivorshipGroups={survivorshipGroups}\n currentSurvivorshipGroupUri={currentSurvivorshipGroupUri}\n onChange={onChangeSurvivorshipGroup}\n />\n <Divider className={styles.headerDivider} orientation=\"vertical\" />\n </>\n );\n\n return (\n <div className={styles.sourcesView}>\n <CrosswalksDisplayProvider {...displayProps}>\n <DndProvider backend={HTML5Backend}>\n <CrosswalkDragLayer />\n <ProfileResizablePanes\n perspectiveId={perspectiveId}\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(tabs)}\n >\n <>\n <ScreenProfileBand entity={entity} historySlice={historySlice} />\n {isProfilePersisted ? (\n <ExpandedAttributesProvider attributeUris={newlyCreatedAttributes}>\n <AttributesTable\n className={styles.attributesTable}\n isLoading={isEntityLoading}\n visibleColumns={visibleColumns}\n onChangeVisibleColumns={setVisibleColumns}\n entity={modifiedEntity}\n crosswalksMap={crosswalksMap}\n selectedAttributeTypes={selectedAttrTypes}\n onSelectAttributeTypes={setSelectedAttrTypes}\n readOnly={!!historySlice || !isDefaultSurvivorshipGroupUri}\n onDelete={onDeleteAttribute}\n onPin={onPinAttribute}\n onIgnore={onIgnoreAttribute}\n onEdit={onEditAttribute}\n onAdd={onAddAttribute}\n additionalHeaderItems={additionalHeaderItems}\n activeSurvivorshipGroupUri={currentSurvivorshipGroupUri}\n />\n </ExpandedAttributesProvider>\n ) : (\n <EmptyState />\n )}\n </>\n <RightSidePanel tabs={tabs} />\n </ProfileResizablePanes>\n </DndProvider>\n </CrosswalksDisplayProvider>\n <SnackbarRenderer />\n </div>\n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n entity: mdmModule.selectors.getEntity(state),\n metadata: mdmModule.selectors.getMetadata(state),\n historyEvent: mdmModule.selectors.getHistoryEvent(state)\n };\n};\n\nexport default connect(mapStateToProps)(SourcesView);\n","import {useCallback, useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {pipe, propOr, find, propEq, prop} from 'ramda';\nimport {getEntityType, getEntityBySurvivorshipGroupUri, Entity} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {useSafePromise} from '@reltio/components';\n\nexport const useEntityWithSurvivorshipGroups = (defaultEntity: Entity) => {\n const entityTypeUri = defaultEntity?.type;\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const survivorshipGroups = pipe(getEntityType(metadata), propOr([], 'survivorshipGroups'))(entityTypeUri);\n const defaultSurvivorshipGroupUri = pipe(find(propEq('default', true)), prop('uri'))(survivorshipGroups);\n const [currentSurvivorshipGroupUri, setCurrentSurvivorshipGroupUri] = useState(null);\n const [entity, setEntity] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const safePromise = useSafePromise();\n\n useEffect(() => {\n if (defaultEntity) {\n setEntity(defaultEntity);\n setCurrentSurvivorshipGroupUri(defaultSurvivorshipGroupUri);\n }\n }, [defaultEntity, defaultSurvivorshipGroupUri]);\n\n const onChangeSurvivorshipGroup = useCallback(\n (survivorshipGroupUri: string) => {\n setCurrentSurvivorshipGroupUri(survivorshipGroupUri);\n const isDefaultSurvivorshipGroupUri = defaultSurvivorshipGroupUri === survivorshipGroupUri;\n if (!isDefaultSurvivorshipGroupUri) {\n setIsLoading(true);\n safePromise(getEntityBySurvivorshipGroupUri(entity.uri, survivorshipGroupUri))\n .then(setEntity)\n .finally(() => setIsLoading(false));\n } else {\n setEntity(defaultEntity);\n }\n },\n [defaultEntity, defaultSurvivorshipGroupUri, entity, safePromise]\n );\n\n const isDefaultSurvivorshipGroupUri = defaultSurvivorshipGroupUri === currentSurvivorshipGroupUri;\n\n return {\n survivorshipGroups,\n currentSurvivorshipGroupUri,\n onChangeSurvivorshipGroup,\n entity,\n isLoading,\n isDefaultSurvivorshipGroupUri\n };\n};\n","import {useCallback, useEffect, useState} from 'react';\nimport {getCrosswalkTree, CrosswalkTree} from '@reltio/mdm-sdk';\nimport {noop, useSafePromise} from '@reltio/components';\n\ntype Props = {\n entityUri?: string;\n onSuccess?: () => void;\n};\n\nexport const useCrosswalkTree = ({entityUri, onSuccess = noop}: Props) => {\n const [crosswalkTree, setCrosswalkTree] = useState<CrosswalkTree>(null);\n const safePromise = useSafePromise();\n\n const onError = (e) => {\n console.warn('Failed to load crosswalk tree', e);\n setCrosswalkTree(null);\n };\n\n const loadData = useCallback(() => {\n if (entityUri) {\n safePromise(getCrosswalkTree({entityUri}))\n .then((results) => {\n setCrosswalkTree(results);\n })\n .catch(onError)\n .finally(onSuccess);\n } else {\n setCrosswalkTree(null);\n onSuccess();\n }\n }, [entityUri, onSuccess]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n return {crosswalkTree, reload: loadData};\n};\n","import {useCallback, useEffect, useMemo, useState, useRef} from 'react';\nimport {any, concat} from 'ramda';\nimport {LegendMode} from '../types';\nimport {\n Contributor,\n CrosswalkBase,\n debounce,\n Entity,\n eqCrosswalks,\n findContributorForCrosswalk,\n getContributorColor,\n getCrosswalkColor,\n getCrosswalkId,\n getSourceColor\n} from '@reltio/mdm-sdk';\n\ntype Props = {\n activeMode: LegendMode;\n contributors: Contributor[];\n entity: Entity;\n};\n\nexport const useCrosswalksDisplay = ({activeMode, contributors, entity}: Props) => {\n const getCrosswalkColorForActiveMode = useCallback(\n (crosswalk: CrosswalkBase) => {\n switch (activeMode) {\n case LegendMode.Source:\n return getSourceColor(crosswalk.type);\n case LegendMode.Contributor:\n return getContributorColor(findContributorForCrosswalk(contributors, crosswalk)?.uri || '');\n case LegendMode.Crosswalk:\n return getCrosswalkColor(getCrosswalkId(crosswalk));\n }\n },\n [activeMode, contributors]\n );\n const [highlightedCrosswalks, setHighlightedCrosswalks] = useState<CrosswalkBase[]>([]);\n const highlightedCrosswalksCache = useRef([]);\n const applyHighlightedCrosswalks = useCallback(\n debounce(() => {\n setHighlightedCrosswalks([...highlightedCrosswalksCache.current]);\n }, 50),\n []\n );\n const cacheHighlightedCrosswalks = useCallback(\n (arr) => {\n highlightedCrosswalksCache.current = arr;\n applyHighlightedCrosswalks(arr);\n },\n [applyHighlightedCrosswalks]\n );\n\n const setCrosswalkHighlighted = useCallback(\n (crosswalk: CrosswalkBase, highlighted: boolean) => {\n if (!crosswalk) return;\n if (highlighted) {\n if (activeMode === LegendMode.Contributor) {\n const contributor = findContributorForCrosswalk(contributors, crosswalk);\n cacheHighlightedCrosswalks([crosswalk, ...(contributor?.crosswalks || [])]);\n } else {\n cacheHighlightedCrosswalks([crosswalk]);\n }\n } else {\n cacheHighlightedCrosswalks([]);\n }\n },\n [activeMode, cacheHighlightedCrosswalks, contributors]\n );\n\n const [focusedCrosswalks, setFocusedCrosswalks] = useState<CrosswalkBase[]>([]);\n const calculateFocusedCrosswalks = useCallback(\n (prev: CrosswalkBase[], next: CrosswalkBase[]) =>\n concat(\n prev.filter((prevCrosswalk) => !any(eqCrosswalks(prevCrosswalk), next)),\n next.filter((nextCrosswalk) => !any(eqCrosswalks(nextCrosswalk), prev))\n ),\n []\n );\n const toggleCrosswalkFocus = useCallback(\n (crosswalk: CrosswalkBase) => {\n if (!crosswalk) return;\n if (activeMode === LegendMode.Contributor) {\n const contributor = findContributorForCrosswalk(contributors, crosswalk);\n setFocusedCrosswalks((prevValue) =>\n calculateFocusedCrosswalks([crosswalk, ...(contributor?.crosswalks || [])], prevValue)\n );\n } else {\n setFocusedCrosswalks((prevValue) => calculateFocusedCrosswalks([crosswalk], prevValue));\n }\n },\n [activeMode, calculateFocusedCrosswalks, contributors]\n );\n\n useEffect(() => {\n if (focusedCrosswalks.length) {\n setFocusedCrosswalks([]);\n }\n }, [activeMode, entity]);\n\n return {\n getCrosswalkColor: getCrosswalkColorForActiveMode,\n highlightedCrosswalks: useMemo(\n () => [...highlightedCrosswalks, ...focusedCrosswalks],\n [highlightedCrosswalks, focusedCrosswalks]\n ),\n focusedCrosswalks,\n toggleCrosswalkFocus,\n setCrosswalkHighlighted\n };\n};\n","import {useCallback} from 'react';\nimport {useSelector} from 'react-redux';\nimport {andThen, pipe} from 'ramda';\nimport i18n from 'ui-i18n';\nimport mdm from '@reltio/mdm-module';\nimport {\n Entity,\n unmergeContributor as unmergeContributorRequest,\n unsubscribeEntityFromDataTenantEntity\n} from '@reltio/mdm-sdk';\nimport {useCrosswalkActions, noop} from '@reltio/components';\nimport {UnmergeContributorEvent, UnsubscribeContributorEvent} from '../types';\n\ntype Props = {\n onLoad?: () => void;\n onSuccess?: () => void;\n onError?: (error: unknown) => void;\n onShowMessage?: (message: string, entity?: Entity) => void;\n};\n\nexport const useCrosswalkTreeActions = ({\n onLoad = noop,\n onSuccess = noop,\n onError = noop,\n onShowMessage = noop\n}: Props) => {\n const {addCrosswalk, editCrosswalk, deleteCrosswalk} = useCrosswalkActions({onLoad, onSuccess, onError});\n const dtssPath = useSelector(mdm.selectors.getDtssPath);\n const tenant = useSelector(mdm.selectors.getTenant);\n\n const handleAction = useCallback(\n (request: Promise<unknown>) => {\n onLoad();\n request\n .then(() => {\n onSuccess();\n })\n .catch(onError);\n },\n [onLoad, onError, onSuccess]\n );\n\n const unmergeContributor = useCallback(\n (event: UnmergeContributorEvent) =>\n pipe(\n unmergeContributorRequest,\n andThen((response) => {\n onShowMessage(i18n.text('has been unmerged'), response.b);\n return response;\n }),\n handleAction\n )(event),\n [handleAction, onShowMessage]\n );\n\n const unsubscribeContributor = useCallback(\n ({crosswalk, dataTenant}: UnsubscribeContributorEvent) =>\n pipe(\n unsubscribeEntityFromDataTenantEntity,\n andThen((response) => {\n if (!response.successful) throw new Error(i18n.text('Failed to unsubscribe contributor'));\n return response;\n }),\n handleAction\n )({\n dtssPath,\n value: crosswalk.value,\n type: crosswalk.type,\n sourceTable: crosswalk.sourceTable,\n dataTenant: dataTenant.id,\n customerTenant: tenant\n }),\n [handleAction, dtssPath, tenant]\n );\n\n return {\n addCrosswalk,\n editCrosswalk,\n deleteCrosswalk,\n unmergeContributor,\n unsubscribeContributor\n };\n};\n","import React, {useCallback} from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\n\nimport MomentUtils from '@date-io/moment';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {SourcesSavedState} from '../../types';\nimport SourcesView from './SourcesView';\nimport {promisifyCallback, SourcesPerspectiveConfig} from '@reltio/mdm-sdk';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'sourcesPerspective',\n disableGlobal: true\n});\n\ntype Props = {\n config: SourcesPerspectiveConfig;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n saveState: (state: SourcesSavedState) => void;\n getSavedState: (clb: (state: SourcesSavedState) => void) => void;\n};\n\nconst SourcesPerspective = ({config, store, onResize, saveState, getSavedState}: Props) => {\n const getSavedStatePromisified: () => Promise<SourcesSavedState> = useCallback(promisifyCallback(getSavedState), [\n getSavedState\n ]);\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize?.(Math.floor(width), Math.floor(height))}\n />\n {config && (\n <SourcesView\n config={config}\n saveState={saveState}\n getSavedState={getSavedStatePromisified}\n />\n )}\n <ErrorPopup />\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default SourcesPerspective;\n","import {SourcesView} from '@reltio/sources';\n\nexport default SourcesView;\n"],"names":["contextSelector","CellRenderer","withContext","TableContext","useSavedState","getSavedState","isLoaded","setIsLoaded","useState","savedState","setSavedState","useEffect","then","_","catch","useStyles","makeStyles","header","display","flexDirection","alignItems","padding","borderBottom","closeButton","marginRight","RightSidePanel","active","onClose","tabs","styles","content","title","className","SmallIconButton","icon","CloseIcon","onClick","LegendMode","sumValues","links","pipe","map","prop","sum","data","width","height","useMemo","nodes","sankeyLayout","nodeWidth","smallestNodeMaxHeight","smallestNodeMinHeight","nodePadding","size","sankey","graph","forEach","node","sourceLinks","targetLinks","link","source","push","target","computeNodeLinks","value","Math","max","computeNodeValues","length","nextNodes","remainingNodes","x","dx","indexOf","w","computeNodeBreadths","nodesByBreadth","groupBy","toPairs","sort","a","b","nth","ky","reduce","min","Infinity","i","y","dy","initializeNodeDepth","y0","n","y1","last","computeNodeDepths","computeLinkDepths","concat","ty","correctNodesDepth","result","linksByUuid","l","crosswalk","uuid","sourceNodes","this","j","index","resultByUuid","newSources","filter","sizeForNewSources","sy","setNodeWidth","setNodePadding","setSmallestNodeMaxHeight","setSmallestNodeMinHeight","setSize","newSize","update","curvature","d","lastLine","x0","x1","xi","t","x2","x3","appendix","arguments","path","safeData","safeNodes","getSafeNode","originalNode","safeLinks","shallowCopy","tooltipTitle","fontWeight","fontSize","lineHeight","letterSpacing","marginBottom","userSelect","tooltipRow","tooltipIcon","color","stroke","strokeWidth","strokeOpacity","rootNode","transform","popupContainer","boxSizing","user","time","children","i18n","CalendarToday","Person","LightArrowTooltip","placement","_extends","Object","assign","key","prototype","hasOwnProperty","call","apply","props","React","viewBox","version","xmlns","xmlnsXlink","id","fill","fillRule","xlinkHref","fillOpacity","mask","highlightEnabled","isColored","disableUnmerge","onUnmerge","isDragging","labelX","setLabelX","anchorEl","setAnchorEl","textRef","useRef","name","label","entity","crosswalks","merges","firstCrosswalk","isDimmed","highlightCrosswalk","removeHighlight","useCrosswalkHighlight","useCrosswalkColor","startNodeHeight","closePopup","nodeHeight","textWidth","current","clientWidth","ref","opacity","onMouseEnter","onMouseLeave","noop","e","currentTarget","cursor","Popover","open","anchorOrigin","vertical","horizontal","classes","paper","UnmergeIcon","timeMap","sources","start","end","acc","head","renderMergeNodes","accentContributors","setDragging","isMouseDown","setMouseDown","previousPageX","setPreviousPageX","offsetX","setOffsetX","useSankey","sankeyNodes","sankeyLinks","extractPositionDelta","event","left","pageX","onUp","pointerEvents","onMouseDown","preventDefault","onMouseMove","onMouseUp","filterUnits","type","values","isCrosswalkDisplayed","curry","displayedCrosswalks","some","eqCrosswalks","filterDisplayedCrosswalks","tree","evolve","losers","addCrosswalkUniqueId","count","addIdToSubtree","loser","processTree","processSubTree","parentIndex","uri","mergesCrosswalks","chain","Date","now","linkedNodes","uniq","includes","memo","crosswalkTree","entityLabel","visibleCrosswalks","sankeyData","getSankeyData","refreshMode","refreshRate","handleWidth","handleHeight","theme","root","paddingRight","marginLeft","focusedIcon","isFocused","borderRadius","palette","text","secondary","paddingLeft","primary","contributorUri","focusable","contributorActions","onToggleFocus","VisibilityIcon","disabled","Typography","variant","getLastUriPart","Spacer","show","buttonProps","showForDisabled","contributorColor","position","border","borderLeft","top","bottom","marginTop","editor","accentContributor","crosswalksBySources","expandedSources","canUnmerge","disableAddCrosswalk","disableEditCrosswalk","disableDeleteCrosswalk","disableUnmergeContributor","onEdit","onDelete","onAdd","onToggleSourceExpanded","onUnsubscribeContributor","getContributorColor","dataTenants","useSelector","mdm","scrollToCrosswalk","useHighlightedCrosswalks","find","propOr","flatten","scrollIntoView","behavior","showEditor","setShowEditor","contributorCrosswalk","pluck","CrosswalkType","toggleCrosswalkFocus","useCrosswalkFocus","allContributorCrosswalks","dataTenantForExternalCrosswalk","getDataTenantFromCrosswalks","AddIcon","UnsubscribeIcon","dataTenant","classnames","crosswalksByTypes","SourceCrosswalksRow","showCrosswalkColors","crosswalksFocusEnabled","expanded","onToggleExpanded","CrosswalkEditor","table","overflowY","overflowX","tableRow","margin","maxWidth","entityType","contributors","selectedAttributeTypes","onChangeVisibleCrosswalks","readOnly","onAddCrosswalk","onEditCrosswalk","onDeleteCrosswalk","onUnmergeContributor","rowsData","entityCrosswalks","relationCrosswalks","getRelationCrosswalks","contributor","isEmptyValue","ownerType","relationCrosswalk","entityCrosswalk","groupCrosswalksByTypesAndSources","buildTableRowsData","expandedByContributor","setExpandedByContributor","isExpandedSource","collectVisibleCrosswalks","handleDelete","useCallback","crosswalkId","entityUri","handleEdit","params","checkCanCreateCrosswalk","checkCanEditCrosswalk","checkCanDeleteCrosswalk","sourceUri","unless","has","assoc","ifElse","without","append","container","hintIcon","verticalAlign","background","checkedIcon","right","main","selectedTree","SelectableTree","coloredCrosswalks","selected","onSelect","getCrosswalkColor","getUniqueCrosswalkColor","getCrosswalkId","Info","CheckCircle","dialogContainer","dialogTitle","dialogContent","trees","UnmergeDialog","unmergeOperation","setUnmergeOperation","UnmergeOperation","getColoredCrosswalks","includeMerges","collectCrosswalksFromContributor","Dialog","DialogTitle","DialogContent","toUpperCase","DialogActions","Button","UnsubscribeDialog","canUnsubscribe","modeSwitcher","backgroundColor","infoIcon","hint","alignSelf","hintText","crosswalksList","divider","pane","overflow","resizablePanesWrapper","flexGrow","activeMode","onChangeMode","tableProps","metadata","mdmModule","getEntityType","viewRef","paneSize","setPaneSize","handlePaneSizeChange","percentageSize","contributorForUnmerge","setContributorForUnmerge","unsubscribeInfo","setUnsubscribeInfo","crosswalkTreeDeep","calculateCrosswalkTreeDeep","maxPaneHeight","clientHeight","modes","Crosswalk","Source","Contributor","setVisibleCrosswalks","checkMetadataPermission","MetadataPermissions","operationType","ModeSwitcher","modeId","onChange","ResizablePanes","orientation","minSize","maxSize","allowResize","isEmpty","getLabel","masktype","maskUnits","clipRule","showErrorMessage","error","console","ErrorPopup","message","getRequestErrorMessage","cx","cy","r","style","maskType","y2","gradientUnits","stopColor","stopOpacity","offset","default","paddingTop","info","snackbarMessage","snackbarIcon","uiPath","generateEntityUrl","useContext","UrlGeneratorsContext","entityLink","Link","href","paddingBottom","whiteSpace","description","RulesetOption","innerRef","innerProps","MenuItem","RulesetsMenuList","getStyles","maxHeight","RulesetsSelector","survivorshipGroups","currentSurvivorshipGroupUri","options","group","propEq","DropDownSelector","components","Option","MenuList","sourcesView","fontFamily","headerDivider","attributesTable","perspectiveId","ActivePanel","connect","state","historyEvent","config","defaultEntity","saveState","dispatch","setActiveMode","isCrosswalkTreeLoading","setIsCrosswalkTreeLoading","onChangeSurvivorshipGroup","isDefaultSurvivorshipGroupUri","isLoading","isEntityLoading","entityTypeUri","defaultSurvivorshipGroupUri","setCurrentSurvivorshipGroupUri","setEntity","setIsLoading","safePromise","useSafePromise","survivorshipGroupUri","getEntityBySurvivorshipGroupUri","finally","useEntityWithSurvivorshipGroups","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","historyButtonId","History","persistedEntity","historySlice","useHistorySlice","selectedAttrTypes","setSelectedAttrTypes","useDidUpdateEffect","undefined","SnackbarRenderer","showSnackbarMessage","useSnackbar","showDismiss","visibleColumns","setVisibleColumns","hasVisibleColumnsChanged","equals","onCrosswalkTreeLoaded","reload","reloadCrosswalkTree","onSuccess","setCrosswalkTree","onError","warn","loadData","getCrosswalkTree","results","useCrosswalkTree","aEntity","collectContributorsFromTree","refreshEntity","profile","viewId","refreshData","modifiedEntity","crosswalksMap","newlyCreatedAttributes","onDeleteAttribute","onPinAttribute","onIgnoreAttribute","onEditAttribute","onAddAttribute","useModifiedEntity","onModify","displayProps","getCrosswalkColorForActiveMode","getSourceColor","findContributorForCrosswalk","highlightedCrosswalks","setHighlightedCrosswalks","highlightedCrosswalksCache","applyHighlightedCrosswalks","debounce","cacheHighlightedCrosswalks","arr","setCrosswalkHighlighted","highlighted","focusedCrosswalks","setFocusedCrosswalks","calculateFocusedCrosswalks","prev","next","prevCrosswalk","any","nextCrosswalk","prevValue","useCrosswalksDisplay","onShowMessage","addCrosswalk","deleteCrosswalk","editCrosswalk","unmergeContributor","unsubscribeContributor","onLoad","useCrosswalkActions","dtssPath","tenant","handleAction","request","unmergeContributorRequest","andThen","response","unsubscribeEntityFromDataTenantEntity","successful","Error","sourceTable","customerTenant","useCrosswalkTreeActions","errorCode","ApiErrorCode","historyFilter","onApplyFilter","isHistoryLoading","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","enabled","Legend","LegendIcon","HistoryIcon","HistoryHeader","total","HistoryView","contributorsUris","HistoryPanelEmptyState","additionalHeaderItems","Divider","DndProvider","backend","HTML5Backend","CrosswalkDragLayer","ProfileResizablePanes","buttonsProps","reject","ScreenProfileBand","attributeUris","AttributesTable","onChangeVisibleColumns","onSelectAttributeTypes","onPin","onIgnore","activeSurvivorshipGroupUri","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","store","onResize","getSavedStatePromisified","promisifyCallback","Provider","ViewIdContext","StylesProvider","MuiPickersUtilsProvider","utils","MomentUtils","floor"],"sourceRoot":""}
1
+ {"version":3,"file":"316.js","mappings":"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","sources":["webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTable/HOCs/withTableContext.js","webpack://@reltio/remotes/../components/src/hooks/useSavedState.ts","webpack://@reltio/remotes/../sources/src/components/RightSidePanel/styles.ts","webpack://@reltio/remotes/../sources/src/components/RightSidePanel/RightSidePanel.tsx","webpack://@reltio/remotes/../sources/src/types/LegendMode.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/sankey.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/useSankey.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/styles.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/MergeTooltip.tsx","webpack://@reltio/remotes/../sources/src/icons/notMatch.svg","webpack://@reltio/remotes/../sources/src/components/SankeyChart/Node.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/Link.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/SankeyChart.tsx","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/helpers.ts","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/styles.ts","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/CrosswalkTreeView.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/ContributorRow/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/ContributorRow/ContributorRow.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/LegendTableRow.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTable.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/helpers.ts","webpack://@reltio/remotes/../sources/src/components/SelectableTree/styles.ts","webpack://@reltio/remotes/../sources/src/components/SelectableTree/SelectableTree.tsx","webpack://@reltio/remotes/../sources/src/components/UnmergeDialog/styles.ts","webpack://@reltio/remotes/../sources/src/components/UnmergeDialog/UnmergeDialog.tsx","webpack://@reltio/remotes/../sources/src/components/UnsubscribeDialog/styles.ts","webpack://@reltio/remotes/../sources/src/components/UnsubscribeDialog/UnsubscribeDialog.tsx","webpack://@reltio/remotes/../sources/src/components/LegendView/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendView/LegendView.tsx","webpack://@reltio/remotes/../sources/src/components/SourcesView/icons/LegendIcon.svg","webpack://@reltio/remotes/../sources/src/services/errors.ts","webpack://@reltio/remotes/../sources/src/components/EmptyState/icons/EmptySources.svg","webpack://@reltio/remotes/../sources/src/components/EmptyState/styles.ts","webpack://@reltio/remotes/../sources/src/components/EmptyState/EmptyState.tsx","webpack://@reltio/remotes/../sources/src/components/TreeActionSnackbar/styles.ts","webpack://@reltio/remotes/../sources/src/components/TreeActionSnackbar/TreeActionSnackbar.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetOption/styles.ts","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetOption/RulesetOption.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetsMenuList/RulesetsMenuList.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/styles.ts","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesestsSelector.tsx","webpack://@reltio/remotes/../sources/src/components/SourcesView/styles.ts","webpack://@reltio/remotes/../sources/src/components/SourcesView/SourcesView.tsx","webpack://@reltio/remotes/../sources/src/hooks/useEntityWithSurvivorshipGroups.tsx","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalkTree.ts","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalksDisplay.ts","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalkTreeActions.ts","webpack://@reltio/remotes/../sources/src/components/SourcesView/index.tsx","webpack://@reltio/remotes/./src/sources.ts"],"sourcesContent":["import {TableContext} from '../contexts/TableContext';\nimport {withContext} from '../../../../HOCs/withContext/withContext';\n\nconst withTableContext = (contextSelector) => (CellRenderer) =>\n withContext(TableContext, contextSelector, CellRenderer);\n\nexport default withTableContext;\n","import {useEffect, useState} from 'react';\n\nexport const useSavedState = <T>(getSavedState: () => Promise<T>) => {\n const [isLoaded, setIsLoaded] = useState(false);\n const [savedState, setSavedState] = useState<T | Record<string, never>>({});\n\n useEffect(() => {\n getSavedState()\n .then((savedState) => {\n setSavedState(savedState || {});\n })\n .then((_) => setIsLoaded(true))\n .catch((_) => setIsLoaded(true));\n }, []); // eslint-disable-line\n\n return {isLoaded, savedState};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n header: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n padding: '16px 12px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.12);'\n },\n closeButton: {\n marginRight: '12px'\n }\n});\n","import React from 'react';\nimport CloseIcon from '@material-ui/icons/Close';\nimport {RightPanelTab, SmallIconButton} from '@reltio/components';\nimport {useStyles} from './styles';\n\ntype Props = {\n onClose?: () => void;\n active?: number;\n tabs: RightPanelTab[];\n};\n\nexport const RightSidePanel = ({active, onClose, tabs}: Props) => {\n const styles = useStyles();\n const {content, title} = tabs[active] || {};\n\n return (\n <>\n <div className={styles.header}>\n <SmallIconButton className={styles.closeButton} icon={CloseIcon} onClick={onClose} />\n {title}\n </div>\n {content}\n </>\n );\n};\n","export enum LegendMode {\n Crosswalk = 'crosswalks',\n Source = 'source',\n Contributor = 'contributor'\n}\n","import {sum, map, pipe, groupBy, toPairs, sort, nth, prop, reduce, last} from 'ramda';\nimport {SankeyLink, SankeyData} from '../../types/SankeyChartData';\n\nconst sumValues = (links: SankeyLink[]): number => pipe(map(prop('value')), sum)(links);\nconst interpolateNumber = (a: number, b: number) => ((a = +a), (b = +b), (t) => a * (1 - t) + b * t);\n\nexport default function Sankey() {\n const lastLinksSize = 22;\n\n let nodeWidth = 24,\n smallestNodeMaxHeight = 15,\n smallestNodeMinHeight = 10,\n nodePadding = 8,\n size = [1, 1] as [number, number];\n\n function sankey({nodes, links}: SankeyData) {\n const graph = {nodes, links};\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeBreadths(graph);\n computeNodeDepths(graph);\n computeLinkDepths(graph);\n correctNodesDepth(graph);\n return graph;\n }\n\n sankey.nodeWidth = () => nodeWidth;\n sankey.setNodeWidth = (width: number) => ((nodeWidth = +width), sankey);\n\n sankey.nodePadding = () => nodePadding;\n sankey.setNodePadding = (padding: number) => ((nodePadding = +padding), sankey);\n\n sankey.smallestNodeMaxHeight = () => smallestNodeMaxHeight;\n sankey.setSmallestNodeMaxHeight = (height: number) => ((smallestNodeMaxHeight = +height), sankey);\n\n sankey.smallestNodeMinHeight = () => smallestNodeMinHeight;\n sankey.setSmallestNodeMinHeight = (height: number) => ((smallestNodeMinHeight = +height), sankey);\n\n sankey.size = () => size;\n sankey.setSize = (newSize: [number, number]) => ((size = newSize), sankey);\n\n sankey.update = (graph) => {\n computeLinkDepths(graph);\n return graph;\n };\n\n sankey.link = () => {\n let curvature = 0.5;\n\n function link(d) {\n const lastLine = !d.target.sourceLinks || d.target.sourceLinks.length == 0;\n const addPixels = 0.13;\n const x0 = d.source.x + d.source.dx,\n x1 = d.target.x,\n xi = interpolateNumber(x0, x1),\n x2 = xi(curvature),\n x3 = xi(1 - curvature),\n y0 = d.source.y + d.sy - addPixels,\n y1 = d.target.y + d.ty - addPixels;\n const appendix = !lastLine\n ? `L${x1 + nodeWidth},${y1} L${x1 + nodeWidth},${y1 + d.dy + 2 * addPixels}`\n : '';\n\n return y0 === y1\n ? `M${x0},${y0} \n L${x1},${y1}${appendix} \n L${x1},${y1 + d.dy + 2 * addPixels} \n L${x0},${y0 + d.dy + 2 * addPixels} Z`\n : `M${x0},${y0}\n C${x2},${y0} ${x3},${y1} ${x1},${y1}${appendix} \n L${x1},${y1 + d.dy + 2 * addPixels} \n C${x3},${y1 + d.dy + 2 * addPixels} ${x2},${y0 + d.dy + 2 * addPixels} \n ${x0},${y0 + d.dy + 2 * addPixels} Z`;\n }\n\n link.curvature = function (_) {\n if (!arguments.length) return curvature;\n curvature = +_;\n return link;\n };\n\n return link;\n };\n\n // Populate the sourceLinks and targetLinks for each node.\n function computeNodeLinks({nodes, links}: SankeyData) {\n nodes.forEach((node) => {\n node.sourceLinks = [];\n node.targetLinks = [];\n });\n links.forEach((link) => {\n link.source.sourceLinks.push(link);\n link.target.targetLinks.push(link);\n });\n }\n\n // Compute the value (size) of each node by summing the associated links.\n function computeNodeValues({nodes}: SankeyData) {\n nodes.forEach((node) => {\n node.value = Math.max(sumValues(node.sourceLinks), sumValues(node.targetLinks));\n });\n }\n\n // Iteratively assign the breadth (x-position) for each node.\n // Nodes are assigned the maximum breadth of incoming neighbors plus one;\n // nodes with no incoming links are assigned breadth zero, while\n // nodes with no outgoing links are assigned the maximum breadth.\n function computeNodeBreadths({nodes}: SankeyData) {\n if (!nodes.length) return;\n let remainingNodes = [nodes[0]],\n nextNodes,\n x = 0;\n\n while (remainingNodes.length) {\n nextNodes = [];\n remainingNodes.forEach((node) => {\n node.x = x;\n node.dx = nodeWidth;\n node.targetLinks.forEach((link) => {\n if (nextNodes.indexOf(link.source) < 0) {\n nextNodes.push(link.source);\n }\n });\n });\n remainingNodes = nextNodes;\n ++x;\n }\n\n nodes.forEach((node) => {\n node.x = x - 1 - node.x;\n });\n\n if (x > 2) {\n const w = (size[0] - 2 * nodeWidth - lastLinksSize) / (x - 2);\n nodes.forEach((node) => {\n if (!node.sourceLinks || node.sourceLinks.length == 0) node.x = size[0] - nodeWidth;\n else node.x *= w;\n });\n } else {\n nodes[0].x = size[0] - nodeWidth;\n nodes[1].x = nodes[0].x - lastLinksSize - nodeWidth;\n }\n }\n\n function computeNodeDepths({nodes, links}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a, b) => a[0] - b[0]),\n map(nth(1))\n )(nodes);\n\n //\n initializeNodeDepth();\n resolveCollisions();\n\n const max = pipe(\n map((nodes) => (nodes.length - 1) * nodePadding + sum(map((node) => node.dy, nodes))),\n reduce(Math.max, 0)\n )(nodesByBreadth);\n\n const y1 = (size[1] - max) / 2;\n\n nodesByBreadth.forEach((nodes) => {\n const {y, dy} = last(nodes);\n const y0 = size[1] - (y + dy);\n nodes.forEach((node) => {\n node.y += y0;\n if (y1 > 0) node.y -= y1;\n });\n });\n\n function initializeNodeDepth() {\n let ky = pipe(\n map((nodes) => (size[1] - (nodes.length - 1) * nodePadding) / sumValues(nodes)),\n reduce(Math.min, Infinity)\n )(nodesByBreadth);\n\n const min = pipe(\n map((node) => node.value / (node.targetLinks?.length || 1)),\n reduce(Math.min, Infinity)\n )(nodes);\n\n ky = Math.max(Math.min(ky, smallestNodeMaxHeight / min), smallestNodeMinHeight / min);\n\n nodesByBreadth.forEach((nodes) => {\n nodes.forEach((node, i) => {\n node.y = i;\n node.dy = node.value * ky;\n });\n });\n\n links.forEach((link) => {\n link.dy = link.value * ky;\n });\n }\n\n function resolveCollisions() {\n nodesByBreadth.forEach((nodes) => {\n let node,\n dy,\n y0 = 0,\n i;\n const n = nodes.length;\n\n // Push any overlapping nodes down.\n nodes.sort((a, b) => a.y - b.y);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dy = y0 - node.y;\n if (dy > 0) node.y += dy;\n y0 = node.y + node.dy + nodePadding;\n }\n\n // If the bottommost node goes outside the bounds, push it back up.\n dy = y0 - nodePadding - size[1];\n if (dy > 0) {\n y0 = node.y -= dy;\n\n // Push any overlapping nodes back up.\n for (i = n - 2; i >= 0; --i) {\n node = nodes[i];\n dy = node.y + node.dy + nodePadding - y0;\n if (dy > 0) node.y -= dy;\n y0 = node.y;\n }\n }\n });\n }\n }\n\n function computeLinkDepths({nodes}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a: number, b: number) => a[0] - b[0]),\n map(nth(1))\n )(nodes);\n\n nodesByBreadth.forEach((nodes) => {\n nodes.forEach((node) => {\n if (node.targetLinks?.length) {\n const result = [];\n const linksByUuid = node.targetLinks.map((l) => l.crosswalk.uuid);\n const sourceNodes = [];\n node.targetLinks.forEach(function (l) {\n if (this.indexOf(l.source) == -1) this.push(l.source);\n }, sourceNodes);\n for (let i = 0; i < sourceNodes.length; i++)\n for (let j = 0; j < sourceNodes[i].sourceLinks.length; j++) {\n const index = linksByUuid.indexOf(sourceNodes[i].sourceLinks[j].crosswalk.uuid);\n if (index != -1) result.push(node.targetLinks[index]);\n }\n node.targetLinks = result;\n }\n\n if (node.sourceLinks?.length) {\n const result = [];\n if (node.targetLinks?.length) {\n const linksByUuid = node.sourceLinks.map((l) => l.crosswalk.uuid);\n for (let i = 0; i < node.targetLinks.length; i++) {\n const index = linksByUuid.indexOf(node.targetLinks[i].crosswalk.uuid);\n if (index != -1) result.push(node.sourceLinks[index]);\n }\n }\n\n const resultByUuid = result.map((l) => l.crosswalk.uuid);\n const newSources = node.sourceLinks.filter(function (l) {\n return this.indexOf(l.crosswalk.uuid) == -1;\n }, resultByUuid);\n\n node.sourceLinks = newSources.concat(result);\n if (result.length > 0) {\n let sizeForNewSources = 0;\n for (let i = 0; i < newSources.length; i++) sizeForNewSources += newSources[i].dy;\n node.sizeForNewSources = sizeForNewSources;\n }\n }\n });\n });\n\n nodes.forEach((node) => {\n let sy = 0,\n ty = node.sizeForNewSources || 0;\n delete node.sizeForNewSources;\n node.sourceLinks.forEach((link) => {\n link.sy = sy;\n sy += link.dy;\n });\n node.targetLinks.forEach((link) => {\n link.ty = ty;\n ty += link.dy;\n });\n });\n }\n\n function correctNodesDepth({nodes}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a: number, b: number) => b[0] - a[0]),\n map(nth(1))\n )(nodes);\n\n nodesByBreadth.forEach((nodes) => {\n nodes = nodes.concat().sort((a, b) => a.y - b.y);\n nodes.forEach((node, i) => {\n if (node.sourceLinks?.length) {\n const {target, ty, dy} = last(node.sourceLinks);\n let y0 = target.y + ty + dy - node.dy;\n if (nodes[i - 1]?.x == node.x && y0 < nodes[i - 1]?.y + nodes[i - 1]?.dy + nodePadding)\n y0 = nodes[i - 1].y + nodes[i - 1].dy + nodePadding;\n if (node.y > y0) {\n node.y = y0;\n }\n }\n });\n });\n }\n\n return sankey;\n}\n","import {useMemo} from 'react';\nimport {SankeyData, SankeyNode} from '../../types/SankeyChartData';\nimport sankey from './sankey';\n\ntype Props = {\n width: number;\n height: number;\n data: SankeyData;\n};\n\nconst useSankey = ({data, width, height}: Props) =>\n useMemo(() => {\n if (!width || !height) return {nodes: [], links: []};\n\n const shallowCopy = (data: SankeyData): SankeyData => {\n const safeNodes = data.nodes.map((node) => ({...node}));\n const getSafeNode = (originalNode: SankeyNode) => {\n const index = data.nodes.indexOf(originalNode);\n return safeNodes[index];\n };\n\n const safeLinks = data.links.map((link) => ({\n ...link,\n source: getSafeNode(link.source),\n target: getSafeNode(link.target)\n }));\n return {nodes: safeNodes, links: safeLinks};\n };\n\n const sankeyLayout = sankey()\n .setNodeWidth(14)\n .setNodePadding(20)\n .setSize([height - 2, width - 2]);\n\n const nodeWidth = sankeyLayout.nodeWidth();\n const path = sankeyLayout.link();\n\n const safeData = shallowCopy(data);\n const {nodes, links}: SankeyData = sankeyLayout(safeData);\n\n return {nodes, links, nodeWidth, path};\n }, [data, height, width]);\n\nexport default useSankey;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n tooltipTitle: {\n fontWeight: 500,\n fontSize: '16px',\n lineHeight: '24px',\n letterSpacing: '0.15px',\n marginBottom: '8px',\n userSelect: 'none'\n },\n tooltipRow: {\n display: 'flex',\n alignItems: 'center',\n fontSize: '13px',\n lineHeight: '15px',\n fontWeight: 'normal',\n '&:not(:last-child)': {\n marginBottom: '4px'\n }\n },\n tooltipIcon: {\n fontSize: '18px',\n color: 'rgba(0, 0, 0, 0.54)',\n marginRight: '8px'\n },\n node: {\n stroke: '#000000',\n strokeWidth: 1,\n strokeOpacity: 0.38\n },\n rootNode: {\n transform: 'rotate(90deg)',\n userSelect: 'none',\n fontSize: '13px'\n },\n popupContainer: {\n padding: 5,\n boxSizing: 'border-box'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {LightArrowTooltip} from '@reltio/components';\nimport CalendarTodayIcon from '@material-ui/icons/CalendarToday';\nimport PersonIcon from '@material-ui/icons/Person';\nimport {useStyles} from './styles';\n\ntype Props = {\n user: string;\n time: number;\n children: React.ReactElement;\n};\n\nexport const MergeTooltip = ({user, time, children}: Props) => {\n const styles = useStyles();\n const tooltipTitle = (\n <div>\n <span className={styles.tooltipTitle}>{i18n.text('Merge details')}</span>\n <div className={styles.tooltipRow}>\n <CalendarTodayIcon className={styles.tooltipIcon} />\n {i18n.date(time, 'L LTS')}\n </div>\n <div className={styles.tooltipRow}>\n <PersonIcon className={styles.tooltipIcon} />\n {user}\n </div>\n </div>\n );\n\n return (\n <LightArrowTooltip title={tooltipTitle} placement={'top'}>\n {children}\n </LightArrowTooltip>\n );\n};\n\nexport default MergeTooltip;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M17 13.138l4.5 4.5-4.5 4.5V18.5h-1.247l-3.488-3.479 1.413-1.414 2.901 2.893H17v-3.362zM17 1.5L21.5 6 17 10.5V7.138h-.421l-11.03 11H2v-2h2.723l11.03-11H17V1.5zm-11.45 4l3.294 3.286-1.414 1.413L4.723 7.5H2v-2h3.55z\",\n id: \"svg2499598299a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg2499598299b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2499598299a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2499598299b)\",\n d: \"M0 0h24v24H0z\"\n}))));","import React, {MouseEvent, useEffect, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Popover as Popover} from '@material-ui/core';\nimport MergeTooltip from './MergeTooltip';\nimport {SankeyNode} from '../../types/SankeyChartData';\nimport {SmallIconButtonWithTooltip, noop, useCrosswalkColor, useCrosswalkHighlight} from '@reltio/components';\nimport {groupBy, prop, pipe, map, head, last, max, min} from 'ramda';\nimport UnmergeIcon from '../../icons/notMatch.svg';\nimport {useStyles} from './styles';\n\ntype Props = {\n nodeWidth: number;\n node: SankeyNode;\n highlightEnabled: boolean;\n isColored: boolean;\n disableUnmerge: boolean;\n onUnmerge: (contributorUri: string) => void;\n isDragging: boolean;\n};\n\nexport const Node = ({node, nodeWidth, highlightEnabled, isColored, disableUnmerge, onUnmerge, isDragging}: Props) => {\n const styles = useStyles();\n const [labelX, setLabelX] = useState(0);\n const [anchorEl, setAnchorEl] = useState(null);\n const textRef = useRef(null);\n const {\n x,\n y,\n name,\n label,\n targetLinks,\n sourceLinks,\n entity: {crosswalks = [], merges}\n } = node;\n const [firstCrosswalk] = crosswalks;\n const {isDimmed, highlightCrosswalk, removeHighlight} = useCrosswalkHighlight(firstCrosswalk);\n const color = useCrosswalkColor(firstCrosswalk);\n const startNodeHeight = crosswalks?.length\n ? sourceLinks[crosswalks.length - 1].sy + sourceLinks[crosswalks.length - 1].dy\n : 0;\n\n const renderMergeNodes = () => {\n const timeMap = pipe(map(prop('source')), groupBy(prop('time')))(targetLinks);\n\n return merges?.map(({time, user}, index) => {\n const sources = timeMap[time];\n if (!sources) return;\n\n const [start, end] = sources.reduce(\n (acc, {sourceLinks}) => [\n min(head(sourceLinks).ty, acc[0]),\n max(last(sourceLinks).ty + last(sourceLinks).dy, acc[1])\n ],\n [Infinity, 0]\n );\n\n return (\n <MergeTooltip user={user} time={time} key={'node-' + index}>\n <rect\n transform={`translate(0,${start})`}\n height={end - start}\n width={nodeWidth}\n className={styles.node}\n fillOpacity={0.54}\n fill={'#F0F0F0'}\n opacity={highlightEnabled && isDimmed ? 0.38 : 1}\n />\n </MergeTooltip>\n );\n });\n };\n\n const openPopup = (e: MouseEvent<SVGRectElement>) => setAnchorEl(e.currentTarget);\n const closePopup = () => setAnchorEl(null);\n const handleUnmerge = () => {\n onUnmerge(name);\n closePopup();\n };\n\n useEffect(() => {\n const nodeHeight = node.dy;\n const textWidth = textRef?.current?.clientWidth || 0;\n if (nodeHeight < textWidth) setLabelX(nodeHeight / 2 - textWidth / 2);\n }, []);\n\n useEffect(() => {\n if (isDragging && !!anchorEl) closePopup();\n }, [isDragging]);\n\n return (\n <g transform={`translate(${x},${y})`}>\n {name === 'ROOT' ? (\n <text dy={-5} dx={labelX} ref={textRef} className={styles.rootNode}>\n {label || ''}\n </text>\n ) : (\n <>\n <rect\n height={startNodeHeight}\n width={14}\n className={styles.node}\n fill={isColored ? (isDimmed ? 'rgba(0, 0, 0, 0.12)' : color) : '#F0F0F0'}\n key={'node-main'}\n opacity={highlightEnabled && isDimmed ? 0.19 : 1}\n onMouseEnter={() => {\n if (highlightEnabled) highlightCrosswalk();\n }}\n onMouseLeave={() => {\n if (highlightEnabled) removeHighlight();\n }}\n onClick={disableUnmerge ? noop : openPopup}\n cursor={disableUnmerge ? 'default' : 'pointer'}\n data-reltio-id=\"reltio-sankey-chart-node\"\n />\n <Popover\n open={!!anchorEl}\n anchorEl={anchorEl}\n anchorOrigin={{vertical: 'top', horizontal: 'right'}}\n onClose={closePopup}\n classes={{paper: styles.popupContainer}}\n data-reltio-id=\"reltio-unmerge-popup\"\n >\n <SmallIconButtonWithTooltip\n size=\"XS\"\n tooltipTitle={i18n.text('Unmerge')}\n icon={UnmergeIcon}\n onClick={handleUnmerge}\n />\n </Popover>\n {!!targetLinks?.length && renderMergeNodes()}\n </>\n )}\n </g>\n );\n};\n\nexport default Node;\n","import React from 'react';\nimport {useCrosswalkColor, useCrosswalkHighlight} from '@reltio/components';\nimport {SankeyLink} from '../../types/SankeyChartData';\n\ntype Props = {\n link: SankeyLink;\n path: string;\n highlightEnabled: boolean;\n isColored: boolean;\n};\n\nexport const Link = ({link, path, highlightEnabled, isColored}: Props) => {\n const {crosswalk} = link;\n const color = useCrosswalkColor(crosswalk);\n const {isDimmed, highlightCrosswalk, removeHighlight} = useCrosswalkHighlight(crosswalk);\n return (\n <path\n d={path}\n fill={isColored ? (isDimmed ? 'rgba(0, 0, 0, 0.12)' : color) : '#F0F0F0'}\n opacity={highlightEnabled && isDimmed ? 0.19 : 1}\n onMouseEnter={() => {\n if (highlightEnabled) highlightCrosswalk();\n }}\n onMouseLeave={() => {\n if (highlightEnabled) removeHighlight();\n }}\n />\n );\n};\n\nexport default Link;\n","import React, {useMemo, useState, useEffect} from 'react';\nimport useSankey from './useSankey';\nimport Node from './Node';\nimport Link from './Link';\nimport {SankeyData} from '../../types/SankeyChartData';\n\ntype Props = {\n width: number;\n height: number;\n data: SankeyData;\n accentContributors?: boolean;\n disableUnmerge: boolean;\n onUnmerge: (contributorUri: string) => void;\n};\n\nconst SankeyChart = ({width, height, data, accentContributors, onUnmerge, disableUnmerge}: Props) => {\n const [isDragging, setDragging] = useState(false);\n const [isMouseDown, setMouseDown] = useState(false);\n const [previousPageX, setPreviousPageX] = useState(0);\n const [offsetX, setOffsetX] = useState(0);\n const {links, nodes, nodeWidth, path} = useSankey({data, width, height});\n\n useEffect(() => {\n setOffsetX(0);\n setPreviousPageX(0);\n }, [width, height]);\n\n const sankeyNodes = useMemo(\n () =>\n nodes.map((node, index) => (\n <Node\n highlightEnabled={accentContributors}\n isColored={accentContributors}\n node={node}\n nodeWidth={nodeWidth}\n key={`SankeyNode-${index}`}\n disableUnmerge={disableUnmerge}\n onUnmerge={onUnmerge}\n isDragging={isDragging}\n />\n )),\n [nodes, accentContributors, nodeWidth, width, height, isDragging]\n );\n\n const sankeyLinks = useMemo(\n () =>\n links.map((link, index) => (\n <Link\n highlightEnabled={!accentContributors}\n isColored={!accentContributors}\n link={link}\n path={path(link)}\n key={`SankeyLink-${index}`}\n />\n )),\n [accentContributors, links, path]\n );\n\n const extractPositionDelta = (event: React.MouseEvent) => {\n const left = event.pageX;\n const offsetX = left - previousPageX;\n setPreviousPageX(left);\n return offsetX;\n };\n\n const onDown = (event: React.MouseEvent) => {\n event.preventDefault();\n setMouseDown(true);\n extractPositionDelta(event);\n };\n const onMove = (event: React.MouseEvent) => {\n if (!isMouseDown) return;\n setDragging(true);\n const left = extractPositionDelta(event);\n setOffsetX(offsetX + left);\n };\n const onUp = () => {\n setMouseDown(false);\n setDragging(false);\n };\n\n const pointerEvents = isDragging ? 'none' : 'auto';\n const cursor = isDragging ? 'move' : 'auto';\n\n return (\n <svg\n width={width}\n height={height}\n cursor={cursor}\n onMouseDown={onDown}\n onMouseMove={onMove}\n onMouseUp={onUp}\n onMouseLeave={onUp}\n >\n <g transform={`translate(${offsetX},${height - 1}) rotate(-90)`} pointerEvents={pointerEvents}>\n <g>{sankeyLinks}</g>\n <g>{sankeyNodes}</g>\n </g>\n </svg>\n );\n};\n\nexport default SankeyChart;\n","import {chain, concat, curry, evolve, filter, map, pipe, uniq} from 'ramda';\nimport {CrosswalkBase, CrosswalkTree, eqCrosswalks} from '@reltio/mdm-sdk';\nimport {SankeyLink, SankeyNode} from '../../types/SankeyChartData';\n\nconst isCrosswalkDisplayed = curry(\n (displayedCrosswalks: CrosswalkBase[], crosswalk: CrosswalkBase) =>\n !displayedCrosswalks || displayedCrosswalks.some(eqCrosswalks(crosswalk))\n);\n\nconst filterDisplayedCrosswalks = curry((displayedCrosswalks: CrosswalkBase[], tree: CrosswalkTree) => {\n return evolve(\n {\n crosswalks: filter(isCrosswalkDisplayed(displayedCrosswalks)),\n merges: map(\n evolve({\n losers: map(filterDisplayedCrosswalks(displayedCrosswalks))\n })\n )\n },\n tree\n );\n});\n\nconst addCrosswalkUniqueId = (tree: CrosswalkTree) => {\n let count = 1;\n const addIdToSubtree = pipe(\n evolve({crosswalks: map((crosswalk) => ({...crosswalk, uuid: count++}))}),\n evolve({\n merges: map(\n evolve({\n losers: map((loser) => addIdToSubtree(loser))\n })\n )\n })\n );\n return addIdToSubtree(tree);\n};\n\nconst processTree = (tree: CrosswalkTree & {label?: string}) => {\n const nodes: SankeyNode[] = [];\n const links: SankeyLink[] = [];\n\n const processSubTree = (tree, parentIndex, time) => {\n const {crosswalks = [], merges = [], uri = '', label} = tree;\n\n nodes.push({entity: tree, name: uri, time, label});\n const index = nodes.length - 1;\n\n const mergesCrosswalks = pipe(\n chain(({losers, time}) => {\n return pipe(\n filter((loser) => loser.crosswalks?.length || loser.merges?.length),\n chain((loser) => processSubTree(loser, index, time))\n )(losers);\n }),\n concat(crosswalks)\n )(merges);\n\n if (parentIndex != -1)\n mergesCrosswalks.forEach((crosswalk) =>\n links.push({\n source: nodes[index],\n target: nodes[parentIndex],\n value: 10,\n crosswalk\n })\n );\n\n return mergesCrosswalks;\n };\n processSubTree(tree, -1, Date.now());\n\n const linkedNodes = pipe(\n chain(({source, target}) => [source, target]),\n uniq\n )(links);\n\n return {nodes: nodes.filter((node) => linkedNodes.includes(node)), links};\n};\n\nexport const getSankeyData = (\n crosswalkTree: CrosswalkTree,\n entityLabel = '',\n displayedCrosswalks?: CrosswalkBase[]\n) => {\n return pipe(\n filterDisplayedCrosswalks(displayedCrosswalks),\n addCrosswalkUniqueId,\n processTree\n )({uri: 'ROOT', label: entityLabel, crosswalks: [], merges: [{time: Date.now(), losers: [crosswalkTree]}]});\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n graph: {\n padding: '8px 0px',\n boxSizing: 'border-box',\n height: '100%',\n width: '100%'\n }\n}));\n","import React, {memo} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {noop} from '@reltio/components';\nimport SankeyChart from '../SankeyChart/SankeyChart';\nimport {getSankeyData} from './helpers';\nimport {CrosswalkBase, CrosswalkTree} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n crosswalkTree: CrosswalkTree;\n entityLabel?: string;\n visibleCrosswalks?: CrosswalkBase[];\n accentContributors?: boolean;\n disableUnmerge?: boolean;\n onUnmerge?: (contributorUri: string) => void;\n};\n\nconst CrosswalkTreeView = ({\n crosswalkTree,\n entityLabel,\n visibleCrosswalks,\n accentContributors,\n disableUnmerge = false,\n onUnmerge = noop\n}: Props) => {\n const styles = useStyles();\n const sankeyData = getSankeyData(crosswalkTree, entityLabel, visibleCrosswalks);\n\n return (\n <div className={styles.graph} data-reltio-id=\"reltio-crosswalk-tree\">\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleWidth handleHeight>\n {({width = 0, height = 200}: {width: number; height: number}) => (\n <SankeyChart\n width={width}\n height={height}\n data={sankeyData}\n accentContributors={accentContributors}\n disableUnmerge={disableUnmerge}\n onUnmerge={onUnmerge}\n />\n )}\n </ReactResizeDetector>\n </div>\n );\n};\n\nexport default memo(CrosswalkTreeView);\n","import {makeStyles} from '@material-ui/core/styles';\n\ntype StylesProps = {\n isFocused?: boolean;\n};\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n paddingRight: '8px',\n '& button + button': {\n marginLeft: '4px'\n }\n },\n focusedIcon: ({isFocused}: StylesProps) => ({\n width: 28,\n height: 28,\n color: isFocused ? '#000' : 'rgba(0, 0, 0, 0.54)',\n borderRadius: 0\n }),\n title: {\n color: theme.palette.text.secondary,\n paddingLeft: '6px',\n paddingRight: '2px'\n },\n uri: {\n lineHeight: '15px',\n color: theme.palette.text.primary\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport {SmallIconButtonWithTooltip, Spacer} from '@reltio/components';\nimport {getLastUriPart} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype ContributorAction = React.ComponentPropsWithRef<typeof SmallIconButtonWithTooltip> & {\n show: boolean;\n};\n\ntype Props = {\n contributorUri: string;\n isFocused: boolean;\n focusable: boolean;\n onToggleFocus: () => void;\n contributorActions: ContributorAction[];\n};\n\nconst ContributorRow = ({contributorUri, focusable, contributorActions, onToggleFocus, isFocused}: Props) => {\n const styles = useStyles({isFocused});\n return (\n <div className={styles.root}>\n <SmallIconButtonWithTooltip\n size=\"XXS\"\n onClick={() => onToggleFocus()}\n className={styles.focusedIcon}\n icon={focusable && VisibilityIcon}\n disabled={!focusable}\n tooltipTitle={focusable && i18n.text('Focus')}\n />\n <Typography variant={'body2'} className={styles.uri}>\n <span className={styles.title}>{i18n.text('Entity ID:')}</span>\n {getLastUriPart(contributorUri)}\n </Typography>\n <Spacer />\n {contributorActions.map(({show, ...buttonProps}, i) => {\n return show && <SmallIconButtonWithTooltip key={i} size=\"XS\" showForDisabled {...buttonProps} />;\n })}\n </div>\n );\n};\n\nexport default ContributorRow;\n","import {makeStyles} from '@material-ui/core/styles';\n\ntype StylesProps = {\n contributorColor: string;\n};\n\nexport const useStyles = makeStyles(() => ({\n root: ({contributorColor}: StylesProps) => ({\n fontSize: '13px',\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n border: '1px solid rgba(0, 0, 0, 0.05)',\n paddingLeft: '8px',\n '&:before': {\n content: '\" \"',\n borderLeft: `8px solid ${contributorColor}`,\n position: 'absolute',\n top: -1,\n left: 0,\n bottom: -1\n },\n '& > div + div': {\n marginTop: '1px'\n }\n }),\n editor: {\n padding: '0px 30px 0px 25px'\n }\n}));\n","import React, {useEffect, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport {\n CrosswalkEditor,\n SourceCrosswalksRow,\n CrosswalksByTypes,\n CrosswalkType,\n useCrosswalkFocus,\n useHighlightedCrosswalks\n} from '@reltio/components';\nimport mdm from '@reltio/mdm-module';\nimport {\n Crosswalk,\n DataTenant,\n eqCrosswalks,\n getContributorColor,\n getDataTenantFromCrosswalks,\n RelationCrosswalk\n} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport {chain, find, flatten, head, pipe, pluck, propOr, props, values} from 'ramda';\nimport AddIcon from '@material-ui/icons/Add';\nimport UnmergeIcon from '../../../icons/notMatch.svg';\nimport UnsubscribeIcon from '@material-ui/icons/Delete';\nimport ContributorRow from './ContributorRow/ContributorRow';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n contributorUri: string;\n accentContributor?: boolean;\n crosswalksBySources: {\n source: string;\n crosswalksByTypes: CrosswalksByTypes;\n }[];\n canUnmerge: boolean;\n disableAddCrosswalk: boolean;\n disableEditCrosswalk: boolean;\n disableDeleteCrosswalk: boolean;\n disableUnmergeContributor: boolean;\n onAdd: (event: {contributorCrosswalk: Crosswalk; crosswalk: Omit<Crosswalk, 'uri'>}) => void;\n onDelete: (crosswalkId: string) => void;\n onEdit: (event: {crosswalkId: string; attributeName: string; value?: string}) => void;\n onUnmerge: () => void;\n expandedSources?: string[];\n onToggleSourceExpanded: (sourceUri: string) => void;\n onUnsubscribeContributor: (event: {contributorUri: string; dataTenant: DataTenant; crosswalk: Crosswalk}) => void;\n};\n\nconst LegendTableRow = ({\n className,\n contributorUri,\n accentContributor,\n crosswalksBySources,\n expandedSources,\n canUnmerge,\n disableAddCrosswalk,\n disableEditCrosswalk,\n disableDeleteCrosswalk,\n disableUnmergeContributor,\n onUnmerge,\n onEdit,\n onDelete,\n onAdd,\n onToggleSourceExpanded,\n onUnsubscribeContributor\n}: Props) => {\n const contributorColor = accentContributor ? getContributorColor(contributorUri) : 'rgba(0, 0, 0, 0.38)';\n const styles = useStyles({contributorColor});\n const dataTenants = useSelector(mdm.selectors.getDataTenants);\n\n const ref = useRef(null);\n const [scrollToCrosswalk] = useHighlightedCrosswalks();\n useEffect(() => {\n if (accentContributor && scrollToCrosswalk) {\n const crosswalks = pipe(\n find(({source}) => source === scrollToCrosswalk.type),\n propOr({}, 'crosswalksByTypes'),\n values,\n flatten\n )(crosswalksBySources);\n if (\n crosswalks.some(\n (crosswalk) => eqCrosswalks(scrollToCrosswalk, crosswalk) && crosswalk !== scrollToCrosswalk\n )\n ) {\n ref?.current?.scrollIntoView({behavior: 'smooth'});\n }\n }\n }, [scrollToCrosswalk]);\n\n const [showEditor, setShowEditor] = useState(false);\n\n const contributorCrosswalk: Crosswalk = pipe(\n pluck('crosswalksByTypes'),\n find((crosswalks) => crosswalks[CrosswalkType.Simple].length || crosswalks[CrosswalkType.Empty].length),\n props([CrosswalkType.Simple, CrosswalkType.Empty]),\n flatten,\n head\n )(crosswalksBySources);\n const {toggleCrosswalkFocus, isFocused} = useCrosswalkFocus(contributorCrosswalk);\n\n const allContributorCrosswalks: (Crosswalk | RelationCrosswalk)[] = pipe(\n pluck('crosswalksByTypes'),\n chain(values),\n flatten\n )(crosswalksBySources);\n\n const dataTenantForExternalCrosswalk = getDataTenantFromCrosswalks(allContributorCrosswalks, dataTenants);\n\n const unsubscribeContributor = () =>\n onUnsubscribeContributor({\n contributorUri,\n dataTenant: dataTenantForExternalCrosswalk,\n crosswalk: contributorCrosswalk\n });\n\n const contributorActions = [\n {\n icon: AddIcon,\n tooltipTitle: i18n.text('Add crosswalk'),\n onClick: () => setShowEditor(true),\n disabled: disableAddCrosswalk,\n show: !!contributorCrosswalk\n },\n {\n icon: UnmergeIcon,\n tooltipTitle: i18n.text('Unmerge'),\n onClick: () => onUnmerge(),\n disabled: disableUnmergeContributor,\n show: canUnmerge\n },\n {\n icon: UnsubscribeIcon,\n tooltipTitle: i18n.text('Unsubscribe'),\n onClick: () => unsubscribeContributor(),\n disabled: disableUnmergeContributor,\n show: canUnmerge && !!dataTenantForExternalCrosswalk\n }\n ];\n\n return (\n <div ref={ref} className={classnames(styles.root, className)}>\n <ContributorRow\n contributorUri={contributorUri}\n focusable={accentContributor && !!contributorCrosswalk}\n isFocused={accentContributor && isFocused}\n onToggleFocus={toggleCrosswalkFocus}\n contributorActions={contributorActions}\n />\n {crosswalksBySources.map(({source, crosswalksByTypes}) => (\n <SourceCrosswalksRow\n key={source}\n source={source}\n crosswalksByTypes={crosswalksByTypes}\n showCrosswalkColors={!accentContributor}\n crosswalksFocusEnabled={!accentContributor}\n expanded={expandedSources?.includes(source)}\n disableEditCrosswalk={disableEditCrosswalk}\n disableDeleteCrosswalk={disableDeleteCrosswalk}\n onEdit={onEdit}\n onDelete={onDelete}\n onToggleExpanded={() => onToggleSourceExpanded(source)}\n />\n ))}\n {showEditor && (\n <CrosswalkEditor\n className={styles.editor}\n onAdd={(crosswalk) => onAdd({contributorCrosswalk, crosswalk})}\n onClose={() => setShowEditor(false)}\n />\n )}\n </div>\n );\n};\n\nexport default LegendTableRow;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n table: {\n overflowY: 'auto',\n overflowX: 'hidden',\n paddingLeft: '16px',\n paddingRight: '6px'\n },\n tableRow: {\n '& + &': {\n marginTop: '10px'\n },\n margin: 'auto',\n maxWidth: '448px'\n }\n}));\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {\n AttributeType,\n checkCanCreateCrosswalk,\n checkCanDeleteCrosswalk,\n checkCanEditCrosswalk,\n Contributor,\n CrosswalkBase,\n Entity,\n TEntityType\n} from '@reltio/mdm-sdk';\nimport {AddCrosswalkEvent, DeleteCrosswalkEvent, EditCrosswalkEvent, noop} from '@reltio/components';\nimport {buildTableRowsData, collectVisibleCrosswalks} from './helpers';\nimport LegendTableRow from './LegendTableRow/LegendTableRow';\nimport {append, assoc, evolve, has, ifElse, includes, pipe, unless, without} from 'ramda';\nimport {UnsubscribeContributorEvent} from '../../types';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n entity: Entity;\n entityType: TEntityType;\n contributors: Contributor[];\n accentContributors?: boolean;\n selectedAttributeTypes?: AttributeType[];\n onChangeVisibleCrosswalks: (visibleCrosswalks: CrosswalkBase[]) => void;\n readOnly?: boolean;\n canUnmerge: boolean;\n disableUnmerge: boolean;\n onAddCrosswalk?: (event: AddCrosswalkEvent) => void;\n onEditCrosswalk?: (event: EditCrosswalkEvent) => void;\n onDeleteCrosswalk?: (event: DeleteCrosswalkEvent) => void;\n onUnmergeContributor?: (contributorUri: string) => void;\n onUnsubscribeContributor?: (event: UnsubscribeContributorEvent & {contributorUri: string}) => void;\n};\n\nconst LegendTable = ({\n accentContributors,\n entity,\n entityType,\n contributors,\n selectedAttributeTypes,\n onChangeVisibleCrosswalks,\n readOnly,\n canUnmerge,\n disableUnmerge,\n onAddCrosswalk = noop,\n onEditCrosswalk = noop,\n onDeleteCrosswalk = noop,\n onUnmergeContributor = noop,\n onUnsubscribeContributor = noop\n}: Props) => {\n const styles = useStyles();\n\n const rowsData = useMemo(\n () => buildTableRowsData(entity, contributors, selectedAttributeTypes),\n [entity, contributors, selectedAttributeTypes]\n );\n const [expandedByContributor, setExpandedByContributor] = useState<{[contributorUri: string]: string[]}>({});\n const visibleCrosswalks = useMemo(\n () => collectVisibleCrosswalks(rowsData, expandedByContributor),\n [rowsData, expandedByContributor]\n );\n useEffect(() => {\n onChangeVisibleCrosswalks(visibleCrosswalks);\n }, [visibleCrosswalks]);\n\n const handleDelete = useCallback(\n (crosswalkId: string) => {\n onDeleteCrosswalk({entityUri: entity?.uri, crosswalkId});\n },\n [entity?.uri, onDeleteCrosswalk]\n );\n\n const handleEdit = useCallback(\n (params: Omit<EditCrosswalkEvent, 'entityUri'>) => {\n onEditCrosswalk({...params, entityUri: entity?.uri});\n },\n [entity?.uri, onEditCrosswalk]\n );\n\n return (\n <div className={styles.table}>\n {rowsData.map(({contributorUri, crosswalksBySources}) => {\n return (\n <LegendTableRow\n key={contributorUri}\n className={styles.tableRow}\n canUnmerge={canUnmerge}\n contributorUri={contributorUri}\n accentContributor={accentContributors}\n crosswalksBySources={crosswalksBySources}\n disableAddCrosswalk={readOnly || !checkCanCreateCrosswalk(entityType)}\n disableEditCrosswalk={readOnly || !checkCanEditCrosswalk(entityType)}\n disableDeleteCrosswalk={readOnly || !checkCanDeleteCrosswalk(entityType)}\n disableUnmergeContributor={disableUnmerge}\n onAdd={(params) => onAddCrosswalk({...params, entity})}\n onDelete={handleDelete}\n onEdit={handleEdit}\n onUnmerge={() => onUnmergeContributor(contributorUri)}\n onUnsubscribeContributor={onUnsubscribeContributor}\n expandedSources={expandedByContributor[contributorUri]}\n onToggleSourceExpanded={(sourceUri: string) => {\n setExpandedByContributor(\n pipe(\n unless(has(contributorUri), assoc(contributorUri, [])),\n evolve({\n [contributorUri]: ifElse(\n includes(sourceUri),\n without([sourceUri]),\n append(sourceUri)\n )\n })\n )\n );\n }}\n />\n );\n })}\n </div>\n );\n};\n\nexport default memo(LegendTable);\n","import {\n AttributeType,\n Contributor,\n Crosswalk,\n Entity,\n eqCrosswalks,\n getRelationCrosswalks,\n isEmptyValue,\n RelationCrosswalk\n} from '@reltio/mdm-sdk';\nimport {chain, filter, map, pipe} from 'ramda';\nimport {CrosswalksByTypes, CrosswalkType, groupCrosswalksByTypesAndSources} from '@reltio/components';\n\ntype TableRow = {\n contributorUri: string;\n crosswalksBySources: {\n source: string;\n crosswalksByTypes: CrosswalksByTypes;\n }[];\n};\n\nexport const buildTableRowsData = (\n entity: Entity,\n contributors: Contributor[],\n selectedAttributeTypes: AttributeType[] = []\n): TableRow[] => {\n const entityCrosswalks: Crosswalk[] = entity.crosswalks;\n const relationCrosswalks: RelationCrosswalk[] = getRelationCrosswalks(entity);\n return contributors\n .filter((contributor) => !isEmptyValue(contributor.crosswalks))\n .map(({uri, crosswalks}) => {\n const crosswalksBySources = pipe(\n map((crosswalk) => {\n if (crosswalk.ownerType === 'relation') {\n const relationCrosswalk = relationCrosswalks.find(eqCrosswalks(crosswalk));\n return relationCrosswalk && {ownerType: 'relation', ...relationCrosswalk};\n } else {\n const entityCrosswalk = entityCrosswalks.find(eqCrosswalks(crosswalk));\n return entityCrosswalk && {ownerType: 'entity', ...entityCrosswalk};\n }\n }),\n filter((crosswalk) => !!crosswalk),\n groupCrosswalksByTypesAndSources(entity.type, selectedAttributeTypes)\n )(crosswalks);\n\n return {contributorUri: uri, crosswalksBySources};\n })\n .filter(({crosswalksBySources}) => crosswalksBySources.length > 0);\n};\n\nexport const collectVisibleCrosswalks = (\n rowsData: TableRow[],\n expandedByContributor: {[contributorUri: string]: string[]}\n) => {\n return rowsData.reduce((acc, {contributorUri, crosswalksBySources}) => {\n const visibleCrosswalks = chain(({source, crosswalksByTypes}) => {\n const isExpandedSource = expandedByContributor[contributorUri]?.includes(source);\n return crosswalksByTypes[CrosswalkType.Simple]\n .concat(crosswalksByTypes[CrosswalkType.Empty])\n .concat(isExpandedSource ? crosswalksByTypes[CrosswalkType.Dependent] : []);\n }, crosswalksBySources);\n return acc.concat(visibleCrosswalks);\n }, []);\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n '& + &': {\n marginLeft: '16px'\n }\n },\n title: {\n fontSize: '13px',\n lineHeight: '15px',\n color: '#666666',\n marginBottom: '7px'\n },\n hintIcon: {\n width: '16px',\n height: '16px',\n verticalAlign: 'middle'\n },\n graph: {\n width: '400px',\n height: '300px',\n borderRadius: '8px',\n background: 'rgba(0, 0, 0, 0.03)',\n border: '1px solid rgba(0, 0, 0, 0.03)',\n position: 'relative'\n },\n checkedIcon: {\n position: 'absolute',\n height: '20px',\n width: '20px',\n right: '10px',\n top: '10px',\n color: theme.palette.primary.main\n },\n selectedTree: {\n border: `1px solid ${theme.palette.primary.main}`,\n background: 'rgba(0, 114, 206, 0.05)'\n }\n}));\n","import React, {useCallback} from 'react';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport InfoIcon from '@material-ui/icons/Info';\nimport {CrosswalksDisplayProvider, noop} from '@reltio/components';\nimport {\n CrosswalkBase,\n CrosswalkTree,\n getCrosswalkColor as getUniqueCrosswalkColor,\n getCrosswalkId\n} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport CrosswalkTreeView from '../CrosswalkTreeView/CrosswalkTreeView';\nimport {useStyles} from './styles';\n\ntype Props = {\n coloredCrosswalks: string[];\n crosswalkTree: CrosswalkTree;\n selected: boolean;\n title: string;\n onSelect?: () => void;\n};\n\nexport const SelectableTree = ({coloredCrosswalks, crosswalkTree, selected, title, onSelect = noop}: Props) => {\n const styles = useStyles();\n const getCrosswalkColor = useCallback(\n (crosswalk: CrosswalkBase) => {\n return coloredCrosswalks.includes(crosswalk.uri)\n ? getUniqueCrosswalkColor(getCrosswalkId(crosswalk))\n : '#CACCD1';\n },\n [coloredCrosswalks]\n );\n return (\n <CrosswalksDisplayProvider getCrosswalkColor={getCrosswalkColor}>\n <div className={styles.container} onClick={onSelect}>\n <span className={styles.title}>\n {title} <InfoIcon className={styles.hintIcon} />\n </span>\n <div className={classnames(styles.graph, {[`${styles.selectedTree}`]: selected})}>\n {selected && <CheckCircleIcon className={styles.checkedIcon} />}\n <CrosswalkTreeView crosswalkTree={crosswalkTree} disableUnmerge={true} />\n </div>\n </div>\n </CrosswalksDisplayProvider>\n );\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n dialogContainer: {\n maxWidth: 'unset'\n },\n dialogTitle: {\n padding: '13px 16px 0 16px',\n fontWeight: 500,\n fontSize: '20px',\n lineHeight: '23px',\n letterSpacing: '0.25px'\n },\n dialogContent: {\n display: 'flex',\n flexDirection: 'column',\n padding: '13px 16px 0 16px'\n },\n trees: {\n display: 'flex'\n },\n uri: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.primary,\n marginBottom: '15px'\n },\n title: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.secondary,\n paddingRight: '2px'\n }\n}));\n","import React, {useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport {Dialog as Dialog} from '@material-ui/core';\nimport {DialogActions as DialogActions} from '@material-ui/core';\nimport {DialogContent as DialogContent} from '@material-ui/core';\nimport {DialogTitle as DialogTitle} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SelectableTree} from '../SelectableTree/SelectableTree';\nimport {\n collectCrosswalksFromContributor,\n Contributor,\n CrosswalkTree,\n getLastUriPart,\n UnmergeOperation\n} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n contributor: Contributor;\n crosswalkTree: CrosswalkTree;\n canUnmerge?: boolean;\n onClose: () => void;\n onUnmergeContributor: (operationType: UnmergeOperation) => void;\n};\n\nexport const UnmergeDialog = ({canUnmerge, contributor, crosswalkTree, onClose, onUnmergeContributor}: Props) => {\n const styles = useStyles();\n\n const [unmergeOperation, setUnmergeOperation] = useState(UnmergeOperation.Unmerge);\n\n const getColoredCrosswalks = useCallback(\n (includeMerges: boolean) => collectCrosswalksFromContributor(contributor, includeMerges).map(({uri}) => uri),\n [contributor]\n );\n\n const unmergeContributor = () => {\n onUnmergeContributor(unmergeOperation);\n onClose();\n };\n\n return (\n <Dialog open={true} onClose={onClose} classes={{paper: styles.dialogContainer}}>\n <DialogTitle classes={{root: styles.dialogTitle}}>{i18n.text('Unmerge')}</DialogTitle>\n <DialogContent classes={{root: styles.dialogContent}}>\n <Typography variant={'body2'} className={styles.uri}>\n <span className={styles.title}>{i18n.text('Entity URI:')}</span>\n {getLastUriPart(contributor.uri).toUpperCase()}\n </Typography>\n <div className={styles.trees}>\n <SelectableTree\n onSelect={() => setUnmergeOperation(UnmergeOperation.Unmerge)}\n selected={unmergeOperation === UnmergeOperation.Unmerge}\n title={i18n.text('Unmerge')}\n crosswalkTree={crosswalkTree}\n coloredCrosswalks={getColoredCrosswalks(true)}\n />\n {contributor.merges && contributor.uri !== crosswalkTree.uri && (\n <SelectableTree\n onSelect={() => setUnmergeOperation(UnmergeOperation.TreeUnmerge)}\n selected={unmergeOperation === UnmergeOperation.TreeUnmerge}\n title={i18n.text('Tree unmerge')}\n crosswalkTree={crosswalkTree}\n coloredCrosswalks={getColoredCrosswalks(false)}\n />\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>{i18n.text('Cancel')}</Button>\n <Button disabled={!canUnmerge} onClick={unmergeContributor} color=\"primary\">\n {i18n.text('Unmerge')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n dialogContainer: {\n maxWidth: 'unset'\n },\n dialogTitle: {\n padding: '13px 16px 0 16px',\n fontWeight: 500,\n fontSize: '20px',\n lineHeight: '23px',\n letterSpacing: '0.25px'\n },\n dialogContent: {\n display: 'flex',\n flexDirection: 'column',\n padding: '13px 16px 0 16px'\n },\n uri: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.primary,\n marginBottom: '15px'\n },\n title: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.secondary,\n paddingRight: '2px'\n }\n}));\n","import React, {useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport {Dialog as Dialog} from '@material-ui/core';\nimport {DialogActions as DialogActions} from '@material-ui/core';\nimport {DialogContent as DialogContent} from '@material-ui/core';\nimport {DialogTitle as DialogTitle} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SelectableTree} from '../SelectableTree/SelectableTree';\nimport {collectCrosswalksFromContributor, Contributor, CrosswalkTree, getLastUriPart} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n contributor: Contributor;\n crosswalkTree: CrosswalkTree;\n canUnsubscribe?: boolean;\n onClose: () => void;\n onUnsubscribeContributor: () => void;\n};\n\nexport const UnsubscribeDialog = ({\n canUnsubscribe,\n contributor,\n crosswalkTree,\n onClose,\n onUnsubscribeContributor\n}: Props) => {\n const styles = useStyles();\n\n const coloredCrosswalks = useMemo(() => collectCrosswalksFromContributor(contributor, true).map(({uri}) => uri), [\n contributor\n ]);\n\n const unsubscribeContributor = () => {\n onUnsubscribeContributor();\n onClose();\n };\n\n return (\n <Dialog open={true} onClose={onClose} classes={{paper: styles.dialogContainer}}>\n <DialogTitle classes={{root: styles.dialogTitle}}>{i18n.text('Unsubscribe')}</DialogTitle>\n <DialogContent classes={{root: styles.dialogContent}}>\n <Typography variant={'body2'} className={styles.uri}>\n <span className={styles.title}>{i18n.text('Entity URI:')}</span>\n {getLastUriPart(contributor.uri).toUpperCase()}\n </Typography>\n <SelectableTree\n selected\n title={i18n.text('Unsubscribe')}\n crosswalkTree={crosswalkTree}\n coloredCrosswalks={coloredCrosswalks}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>{i18n.text('Cancel')}</Button>\n <Button disabled={!canUnsubscribe} onClick={unsubscribeContributor} color=\"primary\">\n {i18n.text('Unsubscribe')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n height: '100%'\n },\n modeSwitcher: {\n backgroundColor: theme.palette.background.paper,\n marginTop: '8px'\n },\n infoIcon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n hint: {\n color: theme.palette.text.secondary,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'flex-start',\n margin: '5px 12px 10px 12px'\n },\n hintText: {\n fontSize: '12px',\n lineHeight: '16px'\n },\n crosswalksList: {\n height: '100%',\n width: 'calc(100% - 24px)',\n margin: '8px 12px',\n background: theme.palette.divider,\n opacity: 0.2\n },\n pane: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n },\n resizablePanesWrapper: {\n flexGrow: 1,\n width: '100%'\n }\n}));\n","import React, {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport InfoIcon from '@material-ui/icons/Info';\nimport i18n from 'ui-i18n';\nimport {isEmpty} from 'ramda';\nimport mdmModule from '@reltio/mdm-module';\nimport {\n AttributeType,\n calculateCrosswalkTreeDeep,\n checkMetadataPermission,\n Contributor,\n Crosswalk,\n CrosswalkBase,\n CrosswalkTree,\n DataTenant,\n Entity,\n getEntityType,\n getLabel,\n Metadata,\n MetadataPermissions,\n TEntityType,\n UnmergeOperation\n} from '@reltio/mdm-sdk';\nimport {\n AddCrosswalkEvent,\n DeleteCrosswalkEvent,\n EditCrosswalkEvent,\n ModeSwitcher,\n noop,\n ResizablePanes\n} from '@reltio/components';\nimport {LegendMode, UnmergeContributorEvent, UnsubscribeContributorEvent} from '../../types';\nimport CrosswalkTreeView from '../CrosswalkTreeView/CrosswalkTreeView';\nimport LegendTable from '../LegendTable/LegendTable';\nimport {UnmergeDialog} from '../UnmergeDialog/UnmergeDialog';\nimport {UnsubscribeDialog} from '../UnsubscribeDialog/UnsubscribeDialog';\n\nimport {useStyles} from './styles';\n\nexport const DEFAULT_LINK_HEIGHT = 60;\nexport const MIN_PANE1_SIZE = 170;\nexport const MIN_PANE2_SIZE = 170;\n\ntype Props = {\n activeMode: LegendMode;\n onChangeMode: (mode: LegendMode) => void;\n crosswalkTree: CrosswalkTree;\n entity: Entity;\n contributors: Contributor[];\n selectedAttributeTypes?: AttributeType[];\n readOnly?: boolean;\n onAddCrosswalk?: (event: AddCrosswalkEvent) => void;\n onEditCrosswalk?: (event: EditCrosswalkEvent) => void;\n onDeleteCrosswalk?: (event: DeleteCrosswalkEvent) => void;\n onUnmergeContributor?: (event: UnmergeContributorEvent) => void;\n onUnsubscribeContributor?: (event: UnsubscribeContributorEvent) => void;\n};\n\nconst LegendView = ({\n activeMode,\n contributors,\n crosswalkTree,\n entity,\n onChangeMode,\n onUnmergeContributor = noop,\n onUnsubscribeContributor = noop,\n ...tableProps\n}: Props) => {\n const styles = useStyles();\n\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityType: TEntityType = getEntityType(metadata, entity?.type);\n\n const viewRef = useRef<HTMLDivElement>();\n const [paneSize, setPaneSize] = useState(MIN_PANE1_SIZE);\n const handlePaneSizeChange = useCallback(({percentageSize}) => setPaneSize(percentageSize), []);\n\n const [contributorForUnmerge, setContributorForUnmerge] = useState<string>();\n const [unsubscribeInfo, setUnsubscribeInfo] = useState<{\n contributorUri: string;\n dataTenant: DataTenant;\n crosswalk: Crosswalk;\n }>();\n\n const crosswalkTreeDeep = useMemo(() => calculateCrosswalkTreeDeep(crosswalkTree), [crosswalkTree]);\n const canUnmerge = crosswalkTreeDeep > 1;\n\n useEffect(() => {\n const height = Math.max(MIN_PANE1_SIZE, crosswalkTreeDeep * DEFAULT_LINK_HEIGHT);\n const maxPaneHeight = viewRef.current?.clientHeight - MIN_PANE2_SIZE;\n setPaneSize(Math.min(maxPaneHeight, height));\n }, [crosswalkTreeDeep]);\n\n const modes = useMemo(\n () => [\n {\n id: LegendMode.Crosswalk,\n title: i18n.text('Crosswalk')\n },\n {\n id: LegendMode.Source,\n title: i18n.text('Source')\n },\n {\n id: LegendMode.Contributor,\n title: i18n.text('Contributor')\n }\n ],\n []\n );\n\n const [visibleCrosswalks, setVisibleCrosswalks] = useState<CrosswalkBase[]>();\n const accentContributors = activeMode === LegendMode.Contributor;\n const disableUnmerge = tableProps.readOnly || !checkMetadataPermission(MetadataPermissions.UNMERGE, entityType);\n\n return (\n <div className={styles.root} ref={viewRef}>\n {contributorForUnmerge && (\n <UnmergeDialog\n canUnmerge={canUnmerge}\n onClose={() => setContributorForUnmerge(null)}\n onUnmergeContributor={(operationType: UnmergeOperation) => {\n onUnmergeContributor({\n entityUri: entity.uri,\n contributorUri: contributorForUnmerge,\n operationType\n });\n }}\n crosswalkTree={crosswalkTree}\n contributor={contributors.find(({uri}) => uri === contributorForUnmerge)}\n />\n )}\n {unsubscribeInfo && (\n <UnsubscribeDialog\n canUnsubscribe={canUnmerge}\n onClose={() => setUnsubscribeInfo(null)}\n onUnsubscribeContributor={() =>\n onUnsubscribeContributor({\n dataTenant: unsubscribeInfo.dataTenant,\n crosswalk: unsubscribeInfo.crosswalk\n })\n }\n crosswalkTree={crosswalkTree}\n contributor={contributors.find(({uri}) => uri === unsubscribeInfo.contributorUri)}\n />\n )}\n <ModeSwitcher<LegendMode>\n modes={modes}\n modeId={activeMode}\n className={styles.modeSwitcher}\n onChange={onChangeMode}\n />\n <ResizablePanes\n className={styles.resizablePanesWrapper}\n orientation=\"horizontal\"\n size={paneSize}\n minSize={MIN_PANE1_SIZE}\n maxSize={-MIN_PANE2_SIZE}\n allowResize\n onChange={handlePaneSizeChange}\n >\n <div className={styles.pane}>\n {crosswalkTree && !isEmpty(visibleCrosswalks) && (\n <CrosswalkTreeView\n entityLabel={getLabel(entity?.label)}\n crosswalkTree={crosswalkTree}\n visibleCrosswalks={visibleCrosswalks}\n accentContributors={accentContributors}\n disableUnmerge={disableUnmerge || !canUnmerge}\n onUnmerge={setContributorForUnmerge}\n />\n )}\n </div>\n <div className={styles.pane}>\n <div className={styles.hint}>\n <InfoIcon className={styles.infoIcon} />\n <span className={styles.hintText}>\n {i18n.text('You can drag a crosswalk to add values to attributes swimlanes')}\n </span>\n </div>\n {entity && (\n <LegendTable\n onUnmergeContributor={setContributorForUnmerge}\n onUnsubscribeContributor={setUnsubscribeInfo}\n accentContributors={accentContributors}\n contributors={contributors}\n entity={entity}\n entityType={entityType}\n onChangeVisibleCrosswalks={setVisibleCrosswalks}\n canUnmerge={canUnmerge}\n disableUnmerge={disableUnmerge}\n {...tableProps}\n />\n )}\n </div>\n </ResizablePanes>\n </div>\n );\n};\n\nexport default memo(LegendView);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg4041339336a\",\n masktype: \"alpha\",\n maskUnits: \"userSpaceOnUse\",\n x: \"2\",\n y: \"3\",\n width: \"19\",\n height: \"17\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2.5 5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S4.83 6.5 4 6.5 2.5 5.83 2.5 5zM21 20H8v-2h13v2zM8 10h13V8H8v2zm0-4V4h13v2H8zm0 10h13v-2H8v2zm-2.5.5v-3h-3v3h3z\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg4041339336a)\"\n}, React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n d: \"M0 0h24v24H0z\"\n}))));","import {ErrorPopup} from '@reltio/components';\nimport i18n from 'ui-i18n';\nimport {getRequestErrorMessage} from '@reltio/mdm-sdk';\n\nexport const showErrorMessage = (error: unknown) => {\n console.error(error); // eslint-disable-line\n ErrorPopup.addError({\n title: i18n.text('Error'),\n message: getRequestErrorMessage(error, i18n.text('Something went wrong'))\n });\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"90\",\n height: \"90\",\n viewBox: \"0 0 90 90\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"45\",\n cy: \"45\",\n r: \"45\",\n fill: \"#0072CE\",\n fillOpacity: \".1\"\n}), React.createElement(\"mask\", {\n id: \"svg985456408a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"0\",\n y: \"0\",\n width: \"90\",\n height: \"90\"\n}, React.createElement(\"circle\", {\n cx: \"45\",\n cy: \"45\",\n r: \"45\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg985456408a)\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M-5.625 3.164h90V90h-90V3.164z\",\n fill: \"url(#paint0_linear)\"\n}), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M66.01 19.992l20.615 20.615v52.337H32.83L18.281 79.131V19.99H66.01z\",\n fill: \"url(#paint1_linear)\"\n}), React.createElement(\"path\", {\n opacity: \".06\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M16.523 20.39H87.54A2.46 2.46 0 0190 22.853v55.195a2.46 2.46 0 01-2.46 2.46H16.522a2.46 2.46 0 01-2.46-2.46V22.852a2.46 2.46 0 012.46-2.461z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.578 19.688h70.664c.971 0 1.758.787 1.758 1.757v55.196c0 .97-.787 1.757-1.758 1.757H17.578c-.97 0-1.758-.787-1.758-1.757V21.445c0-.97.787-1.758 1.758-1.758z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.046 25.536c0-.583.472-1.055 1.055-1.055h14.633a1.055 1.055 0 110 2.11H38.101a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.914 29.754c0-.582.472-1.054 1.055-1.054H60.54a1.055 1.055 0 110 2.11H37.969a1.055 1.055 0 01-1.055-1.056z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.046 57.305c0-.583.472-1.055 1.055-1.055h14.633a1.055 1.055 0 110 2.11H38.101a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.914 61.523c0-.582.472-1.054 1.055-1.054H60.54a1.055 1.055 0 110 2.11H37.969a1.055 1.055 0 01-1.055-1.056z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.046 67.852c0-.583.472-1.055 1.055-1.055h28.696a1.055 1.055 0 110 2.11H38.1a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.914 72.07c0-.582.472-1.054 1.055-1.054h26.087a1.055 1.055 0 110 2.109H37.97a1.055 1.055 0 01-1.055-1.055z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.648 36.21c0-.582.472-1.054 1.054-1.054h28.696a1.055 1.055 0 110 2.11H49.702a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.516 40.43c0-.583.472-1.055 1.054-1.055h22.572a1.055 1.055 0 110 2.11H49.57a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#979797\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"27.773\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"27.773\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"42.188\",\n cy: \"37.266\",\n r: \"2.109\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"42.188\",\n cy: \"47.813\",\n r: \"2.109\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"59.414\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.555\",\n cy: \"69.961\",\n r: \"3.164\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.648 46.758c0-.583.472-1.055 1.054-1.055h28.696a1.055 1.055 0 110 2.11H49.702a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.516 50.977c0-.583.472-1.055 1.054-1.055h26.088a1.055 1.055 0 110 2.11H49.57a1.055 1.055 0 01-1.054-1.055z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M32.524 37.969v-2.813h-.703v14.191h3.93v-.703h-3.227v-9.972h3.227v-.703h-3.227z\",\n fill: \"#2B98F0\"\n}), React.createElement(\"path\", {\n opacity: \".54\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M33.423 27.07l-1.242 1.243-1.243-1.243h2.485z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n opacity: \".6\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.578 7.734h65.39a2.11 2.11 0 012.11 2.11v6.328a2.11 2.11 0 01-2.11 2.11h-65.39a2.11 2.11 0 01-2.11-2.11V9.844a2.11 2.11 0 012.11-2.11z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M20.39 13.008a2.11 2.11 0 012.11-2.11h24.61a2.11 2.11 0 110 4.22H22.5a2.11 2.11 0 01-2.11-2.11zM52.031 13.008a2.11 2.11 0 012.11-2.11h3.515a2.11 2.11 0 110 4.22h-3.515a2.11 2.11 0 01-2.11-2.11z\",\n fill: \"#979797\"\n})), React.createElement(\"defs\", null, React.createElement(\"linearGradient\", {\n id: \"paint0_linear\",\n x1: \"-5.625\",\n y1: \"3.164\",\n x2: \"-5.625\",\n y2: \"90\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#FAFAFA\",\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#F4F4F4\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint1_linear\",\n x1: \"93.557\",\n y1: \"63.672\",\n x2: \"54.451\",\n y2: \"27.31\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})))));","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n height: '100%',\n overflow: 'hidden',\n background: theme.palette.background.default,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: '115px'\n },\n info: {\n color: theme.palette.text.secondary,\n fontSize: '16px',\n lineHeight: '24px',\n marginTop: '16px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport EmptyIcon from './icons/EmptySources.svg';\n\nimport {useStyles} from './styles';\n\nconst EmptyState = () => {\n const styles = useStyles();\n\n return (\n <div className={styles.root}>\n <EmptyIcon />\n <span className={styles.info}>\n {i18n.text('Please persist your profile to be able to edit crosswalks')}\n </span>\n </div>\n );\n};\n\nexport default EmptyState;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n snackbarMessage: {\n display: 'flex',\n alignItems: 'center'\n },\n snackbarIcon: {\n paddingRight: 16\n }\n});\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Entity, getLabel} from '@reltio/mdm-sdk';\nimport {UrlGeneratorsContext} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport {Link as Link} from '@material-ui/core';\nimport InfoIcon from '@material-ui/icons/Info';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n entity: Entity;\n message: string;\n};\n\nconst TreeActionSnackbar = ({entity, message}: Props) => {\n const styles = useStyles();\n const uiPath = useSelector(mdmModule.selectors.getUIPath);\n const {generateEntityUrl} = useContext(UrlGeneratorsContext);\n const entityLink = generateEntityUrl({uiPath, uri: entity.uri});\n\n return (\n <div className={styles.snackbarMessage}>\n <InfoIcon className={styles.snackbarIcon} />\n <Typography>\n {getLabel(entity.label)}{' '}\n <Link href={entityLink} target=\"_blank\">\n {i18n.text('lookup profile')}\n </Link>{' '}\n {message}\n </Typography>\n </div>\n );\n};\n\nexport default TreeActionSnackbar;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n paddingTop: '14px',\n paddingBottom: '13px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.05)',\n whiteSpace: 'normal',\n '&:last-child': {\n borderBottom: 'none'\n }\n },\n label: {\n marginBottom: '2px',\n fontSize: '16px',\n lineHeight: '24px',\n color: theme.palette.text.primary\n },\n description: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.secondary\n }\n}));\n","import React from 'react';\nimport {SurvivorshipGroupType} from '@reltio/mdm-sdk';\nimport {MenuItem as MenuItem} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {useStyles} from './styles';\n\ntype MenuItemProps = React.ComponentPropsWithoutRef<typeof MenuItem>;\n\ntype Props = {\n innerRef: React.Ref<HTMLLIElement>;\n innerProps: MenuItemProps;\n data: SurvivorshipGroupType;\n};\n\nexport const RulesetOption = ({innerRef, innerProps, data}: Props) => {\n const styles = useStyles();\n const {label, description} = data;\n\n return (\n <MenuItem className={styles.root} ref={innerRef} {...innerProps}>\n <Typography className={styles.label}>{label}</Typography>\n {description && <Typography className={styles.description}>{description}</Typography>}\n </MenuItem>\n );\n};\n","import React from 'react';\nimport {MenuListComponentProps} from 'react-select';\n\nexport const RulesetsMenuList = <OptionType, IsMulti extends boolean>(\n props: MenuListComponentProps<OptionType, IsMulti>\n) => {\n const {innerRef, getStyles, children} = props;\n const styles = {...getStyles('menuList', props), maxHeight: '500px', padding: 0};\n return (\n <div ref={innerRef} style={styles}>\n {children}\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n width: '280px'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe, propEq, prop} from 'ramda';\nimport {DropDownSelector} from '@reltio/components';\nimport {getLabel, SurvivorshipGroupType} from '@reltio/mdm-sdk';\nimport {RulesetOption} from './RulesetOption/RulesetOption';\nimport {RulesetsMenuList} from './RulesetsMenuList/RulesetsMenuList';\nimport {useStyles} from './styles';\n\ntype Props = {\n survivorshipGroups: SurvivorshipGroupType[];\n currentSurvivorshipGroupUri: string;\n onChange: (uri: string) => void;\n};\n\nexport const RulesetsSelector = ({survivorshipGroups, currentSurvivorshipGroupUri, onChange}: Props) => {\n const styles = useStyles();\n const options = survivorshipGroups.map((group) => ({...group, label: getLabel(group.label)}));\n const value = options.find(propEq('uri', currentSurvivorshipGroupUri));\n return (\n <DropDownSelector\n height={40}\n className={styles.root}\n components={{Option: RulesetOption, MenuList: RulesetsMenuList}}\n label={i18n.text('Rulesets')}\n options={options}\n value={value}\n onChange={pipe(prop('uri'), onChange)}\n />\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n sourcesView: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflowX: 'hidden',\n overflowY: 'auto',\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\n display: 'flex'\n },\n '@global div[role=tooltip]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n '@global div[role=presentation]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n resizablePanesWrapper: {\n flexGrow: 1,\n height: '100%'\n },\n pane: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n },\n headerDivider: {\n marginLeft: '16px',\n marginRight: '8px',\n height: '32px',\n backgroundColor: 'rgba(0, 0, 0, 0.12)'\n },\n attributesTable: {\n backgroundColor: '#fff'\n }\n});\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport {Dispatch} from 'redux';\nimport {connect} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {equals, pipe, pluck, propEq, reject} from 'ramda';\nimport mdmModule, {HistoryEvent, profile} from '@reltio/mdm-module';\nimport {\n ApiError,\n ApiErrorCode,\n AttributeType,\n collectContributorsFromTree,\n Entity,\n getEntityType,\n Metadata,\n SourcesPerspectiveConfig\n} from '@reltio/mdm-sdk';\nimport {\n AttributesTable,\n CrosswalkDragLayer,\n CrosswalksDisplayProvider,\n ExpandedAttributesProvider,\n HistoryHeader,\n HistoryPanelEmptyState,\n HistoryView,\n ProfileResizablePanes,\n ScreenProfileBand,\n useDidUpdateEffect,\n useHistory,\n useHistoryEnabled,\n useHistorySlice,\n useModifiedEntity,\n useSavedState,\n useSnackbar\n} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport {Divider as Divider} from '@material-ui/core';\nimport HistoryIcon from '@material-ui/icons/History';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\nimport LegendView from '../LegendView/LegendView';\nimport {LegendMode, SourcesSavedState} from '../../types';\nimport {useCrosswalkTree} from '../../hooks/useCrosswalkTree';\nimport LegendIcon from './icons/LegendIcon.svg';\nimport {showErrorMessage} from '../../services/errors';\nimport {useCrosswalkTreeActions} from '../../hooks/useCrosswalkTreeActions';\nimport {useCrosswalksDisplay} from '../../hooks/useCrosswalksDisplay';\nimport {useEntityWithSurvivorshipGroups} from '../../hooks/useEntityWithSurvivorshipGroups';\nimport HTML5Backend from 'react-dnd-html5-backend';\nimport {DndProvider} from 'react-dnd';\nimport EmptyState from '../EmptyState/EmptyState';\nimport TreeActionSnackbar from '../TreeActionSnackbar/TreeActionSnackbar';\nimport {RulesetsSelector} from '../RulesestsSelector/RulesestsSelector';\nimport {useStyles} from './styles';\n\nconst perspectiveId = 'source';\n\ntype Props = {\n config: SourcesPerspectiveConfig;\n entity: Entity;\n metadata: Metadata;\n saveState: (state: SourcesSavedState) => void;\n getSavedState: () => Promise<SourcesSavedState>;\n dispatch: Dispatch;\n historyEvent: HistoryEvent;\n};\n\nenum ActivePanel {\n Legend,\n History\n}\n\nconst SourcesView = ({\n config,\n entity: defaultEntity,\n metadata,\n getSavedState,\n saveState,\n dispatch,\n historyEvent\n}: Props) => {\n const styles = useStyles();\n const [activeMode, setActiveMode] = useState(LegendMode.Crosswalk);\n const [isCrosswalkTreeLoading, setIsCrosswalkTreeLoading] = useState(false);\n\n const {\n survivorshipGroups,\n currentSurvivorshipGroupUri,\n onChangeSurvivorshipGroup,\n entity,\n isDefaultSurvivorshipGroupUri,\n isLoading: isEntityLoading\n } = useEntityWithSurvivorshipGroups(defaultEntity);\n\n const {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({\n perspectiveId,\n entity,\n historyButtonId: ActivePanel.History\n });\n\n const persistedEntity = isProfilePersisted ? entity : null;\n\n const entityUri = persistedEntity?.uri;\n const entityType = getEntityType(metadata, entity?.type);\n\n const {historySlice} = useHistorySlice({entity: persistedEntity, historyEvent});\n\n const [selectedAttrTypes, setSelectedAttrTypes] = useState<AttributeType[]>();\n useDidUpdateEffect(() => {\n setSelectedAttrTypes(undefined);\n }, [historySlice]);\n useDidUpdateEffect(() => {\n setSelectedAttrTypes(undefined);\n }, [entityUri]);\n\n const {SnackbarRenderer, showSnackbarMessage} = useSnackbar({\n anchorOrigin: {vertical: 'top', horizontal: 'center'},\n showDismiss: true\n });\n const {isLoaded, savedState} = useSavedState<SourcesSavedState>(getSavedState);\n const [visibleColumns, setVisibleColumns] = useState<string[]>();\n useEffect(() => {\n if (isLoaded) {\n setVisibleColumns(savedState.visibleColumns);\n }\n }, [isLoaded]); // eslint-disable-line\n useEffect(() => {\n const hasVisibleColumnsChanged = !equals(visibleColumns, savedState.visibleColumns);\n if (isLoaded && hasVisibleColumnsChanged) {\n saveState({visibleColumns});\n }\n }, [visibleColumns]); // eslint-disable-line\n\n const onCrosswalkTreeLoaded = useCallback(() => {\n setIsCrosswalkTreeLoading(false);\n }, []);\n\n const {crosswalkTree, reload: reloadCrosswalkTree} = useCrosswalkTree({\n entityUri: historySlice?.aEntity.uri || entityUri,\n onSuccess: onCrosswalkTreeLoaded\n });\n const contributors = useMemo(() => collectContributorsFromTree(crosswalkTree), [crosswalkTree]);\n\n const refreshEntity = useCallback(() => {\n entityUri &&\n dispatch(\n profile.entity.actions.loadEntity({\n viewId: config.id,\n uri: entityUri\n })\n );\n }, [entityUri, config, dispatch]);\n\n const refreshData = useCallback(pipe(refreshEntity, reloadCrosswalkTree), [refreshEntity, reloadCrosswalkTree]);\n\n const {\n modifiedEntity,\n crosswalksMap,\n newlyCreatedAttributes,\n onDeleteAttribute,\n onPinAttribute,\n onIgnoreAttribute,\n onEditAttribute,\n onAddAttribute\n } = useModifiedEntity({\n entity: historySlice?.aEntity || persistedEntity,\n onModify: refreshData,\n onError: showErrorMessage\n });\n\n const displayProps = useCrosswalksDisplay({activeMode, contributors, entity});\n const onShowMessage = useCallback((message: string, entity?: Entity) => {\n showSnackbarMessage(entity ? <TreeActionSnackbar entity={entity} message={message} /> : message);\n }, []);\n\n const {addCrosswalk, deleteCrosswalk, editCrosswalk, unmergeContributor, unsubscribeContributor} =\n useCrosswalkTreeActions({\n onShowMessage,\n onSuccess: refreshData,\n onError: useCallback(\n (error: ApiError) => {\n showErrorMessage(error);\n if (error.errorCode === ApiErrorCode.CROSSWALK_NOT_FOUND) {\n refreshData();\n }\n },\n [refreshData]\n ),\n onLoad: useCallback(() => setIsCrosswalkTreeLoading(true), [])\n });\n\n const {\n historyFilter,\n onApplyFilter,\n isLoading: isHistoryLoading,\n historicUris,\n historyWithTotal,\n canLoadMore,\n onLoadMore\n } = useHistory({entity: persistedEntity, enabled: isHistoryEnabled});\n\n const tabs = [\n {\n buttonProps: {\n id: ActivePanel.Legend,\n icon: LegendIcon,\n tooltipTitle: i18n.text('Legend')\n },\n title: <Typography variant=\"h6\">{i18n.text('Legend')}</Typography>,\n content: (\n <LegendView\n activeMode={activeMode}\n onChangeMode={setActiveMode}\n entity={historySlice?.aEntity || persistedEntity}\n crosswalkTree={crosswalkTree}\n contributors={contributors}\n selectedAttributeTypes={selectedAttrTypes}\n readOnly={!!historySlice || isCrosswalkTreeLoading}\n onAddCrosswalk={addCrosswalk}\n onUnmergeContributor={unmergeContributor}\n onUnsubscribeContributor={unsubscribeContributor}\n onEditCrosswalk={editCrosswalk}\n onDeleteCrosswalk={deleteCrosswalk}\n />\n )\n },\n {\n buttonProps: {\n id: ActivePanel.History,\n icon: HistoryIcon,\n tooltipTitle: i18n.text('History')\n },\n title: (\n <HistoryHeader\n total={(historicUris?.length || 0) + 1}\n entityType={entityType}\n filter={historyFilter}\n onApplyFilter={onApplyFilter}\n />\n ),\n content: isProfilePersisted ? (\n <HistoryView\n isLoading={isHistoryLoading}\n historyWithTotal={historyWithTotal}\n contributorsUris={historicUris}\n entityUri={entityUri}\n historyEvent={historyEvent}\n onLoadMore={onLoadMore}\n canLoadMore={canLoadMore}\n />\n ) : (\n <HistoryPanelEmptyState />\n )\n }\n ];\n const additionalHeaderItems = (\n <>\n <RulesetsSelector\n survivorshipGroups={survivorshipGroups}\n currentSurvivorshipGroupUri={currentSurvivorshipGroupUri}\n onChange={onChangeSurvivorshipGroup}\n />\n <Divider className={styles.headerDivider} orientation=\"vertical\" />\n </>\n );\n\n return (\n <div className={styles.sourcesView}>\n <CrosswalksDisplayProvider {...displayProps}>\n <DndProvider backend={HTML5Backend}>\n <CrosswalkDragLayer />\n <ProfileResizablePanes\n perspectiveId={perspectiveId}\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(tabs)}\n >\n <>\n <ScreenProfileBand entity={entity} historySlice={historySlice} />\n {isProfilePersisted ? (\n <ExpandedAttributesProvider attributeUris={newlyCreatedAttributes}>\n <AttributesTable\n className={styles.attributesTable}\n isLoading={isEntityLoading}\n visibleColumns={visibleColumns}\n onChangeVisibleColumns={setVisibleColumns}\n entity={modifiedEntity}\n crosswalksMap={crosswalksMap}\n selectedAttributeTypes={selectedAttrTypes}\n onSelectAttributeTypes={setSelectedAttrTypes}\n readOnly={!!historySlice || !isDefaultSurvivorshipGroupUri}\n onDelete={onDeleteAttribute}\n onPin={onPinAttribute}\n onIgnore={onIgnoreAttribute}\n onEdit={onEditAttribute}\n onAdd={onAddAttribute}\n additionalHeaderItems={additionalHeaderItems}\n activeSurvivorshipGroupUri={currentSurvivorshipGroupUri}\n />\n </ExpandedAttributesProvider>\n ) : (\n <EmptyState />\n )}\n </>\n <RightSidePanel tabs={tabs} />\n </ProfileResizablePanes>\n </DndProvider>\n </CrosswalksDisplayProvider>\n <SnackbarRenderer />\n </div>\n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n entity: mdmModule.selectors.getEntity(state),\n metadata: mdmModule.selectors.getMetadata(state),\n historyEvent: mdmModule.selectors.getHistoryEvent(state)\n };\n};\n\nexport default connect(mapStateToProps)(SourcesView);\n","import {useCallback, useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {pipe, propOr, find, propEq, prop} from 'ramda';\nimport {getEntityType, getEntityBySurvivorshipGroupUri, Entity} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {useSafePromise} from '@reltio/components';\n\nexport const useEntityWithSurvivorshipGroups = (defaultEntity: Entity) => {\n const entityTypeUri = defaultEntity?.type;\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const survivorshipGroups = pipe(getEntityType(metadata), propOr([], 'survivorshipGroups'))(entityTypeUri);\n const defaultSurvivorshipGroupUri = pipe(find(propEq('default', true)), prop('uri'))(survivorshipGroups);\n const [currentSurvivorshipGroupUri, setCurrentSurvivorshipGroupUri] = useState(null);\n const [entity, setEntity] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const safePromise = useSafePromise();\n\n useEffect(() => {\n if (defaultEntity) {\n setEntity(defaultEntity);\n setCurrentSurvivorshipGroupUri(defaultSurvivorshipGroupUri);\n }\n }, [defaultEntity, defaultSurvivorshipGroupUri]);\n\n const onChangeSurvivorshipGroup = useCallback(\n (survivorshipGroupUri: string) => {\n setCurrentSurvivorshipGroupUri(survivorshipGroupUri);\n const isDefaultSurvivorshipGroupUri = defaultSurvivorshipGroupUri === survivorshipGroupUri;\n if (!isDefaultSurvivorshipGroupUri) {\n setIsLoading(true);\n safePromise(getEntityBySurvivorshipGroupUri(entity.uri, survivorshipGroupUri))\n .then(setEntity)\n .finally(() => setIsLoading(false));\n } else {\n setEntity(defaultEntity);\n }\n },\n [defaultEntity, defaultSurvivorshipGroupUri, entity, safePromise]\n );\n\n const isDefaultSurvivorshipGroupUri = defaultSurvivorshipGroupUri === currentSurvivorshipGroupUri;\n\n return {\n survivorshipGroups,\n currentSurvivorshipGroupUri,\n onChangeSurvivorshipGroup,\n entity,\n isLoading,\n isDefaultSurvivorshipGroupUri\n };\n};\n","import {useCallback, useEffect, useState} from 'react';\nimport {getCrosswalkTree, CrosswalkTree} from '@reltio/mdm-sdk';\nimport {noop, useSafePromise} from '@reltio/components';\n\ntype Props = {\n entityUri?: string;\n onSuccess?: () => void;\n};\n\nexport const useCrosswalkTree = ({entityUri, onSuccess = noop}: Props) => {\n const [crosswalkTree, setCrosswalkTree] = useState<CrosswalkTree>(null);\n const safePromise = useSafePromise();\n\n const onError = (e) => {\n console.warn('Failed to load crosswalk tree', e);\n setCrosswalkTree(null);\n };\n\n const loadData = useCallback(() => {\n if (entityUri) {\n safePromise(getCrosswalkTree({entityUri}))\n .then((results) => {\n setCrosswalkTree(results);\n })\n .catch(onError)\n .finally(onSuccess);\n } else {\n setCrosswalkTree(null);\n onSuccess();\n }\n }, [entityUri, onSuccess]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n return {crosswalkTree, reload: loadData};\n};\n","import {useCallback, useEffect, useMemo, useState, useRef} from 'react';\nimport {any, concat} from 'ramda';\nimport {LegendMode} from '../types';\nimport {\n Contributor,\n CrosswalkBase,\n debounce,\n Entity,\n eqCrosswalks,\n findContributorForCrosswalk,\n getContributorColor,\n getCrosswalkColor,\n getCrosswalkId,\n getSourceColor\n} from '@reltio/mdm-sdk';\n\ntype Props = {\n activeMode: LegendMode;\n contributors: Contributor[];\n entity: Entity;\n};\n\nexport const useCrosswalksDisplay = ({activeMode, contributors, entity}: Props) => {\n const getCrosswalkColorForActiveMode = useCallback(\n (crosswalk: CrosswalkBase) => {\n switch (activeMode) {\n case LegendMode.Source:\n return getSourceColor(crosswalk.type);\n case LegendMode.Contributor:\n return getContributorColor(findContributorForCrosswalk(contributors, crosswalk)?.uri || '');\n case LegendMode.Crosswalk:\n return getCrosswalkColor(getCrosswalkId(crosswalk));\n }\n },\n [activeMode, contributors]\n );\n const [highlightedCrosswalks, setHighlightedCrosswalks] = useState<CrosswalkBase[]>([]);\n const highlightedCrosswalksCache = useRef([]);\n const applyHighlightedCrosswalks = useCallback(\n debounce(() => {\n setHighlightedCrosswalks([...highlightedCrosswalksCache.current]);\n }, 50),\n []\n );\n const cacheHighlightedCrosswalks = useCallback(\n (arr) => {\n highlightedCrosswalksCache.current = arr;\n applyHighlightedCrosswalks(arr);\n },\n [applyHighlightedCrosswalks]\n );\n\n const setCrosswalkHighlighted = useCallback(\n (crosswalk: CrosswalkBase, highlighted: boolean) => {\n if (!crosswalk) return;\n if (highlighted) {\n if (activeMode === LegendMode.Contributor) {\n const contributor = findContributorForCrosswalk(contributors, crosswalk);\n cacheHighlightedCrosswalks([crosswalk, ...(contributor?.crosswalks || [])]);\n } else {\n cacheHighlightedCrosswalks([crosswalk]);\n }\n } else {\n cacheHighlightedCrosswalks([]);\n }\n },\n [activeMode, cacheHighlightedCrosswalks, contributors]\n );\n\n const [focusedCrosswalks, setFocusedCrosswalks] = useState<CrosswalkBase[]>([]);\n const calculateFocusedCrosswalks = useCallback(\n (prev: CrosswalkBase[], next: CrosswalkBase[]) =>\n concat(\n prev.filter((prevCrosswalk) => !any(eqCrosswalks(prevCrosswalk), next)),\n next.filter((nextCrosswalk) => !any(eqCrosswalks(nextCrosswalk), prev))\n ),\n []\n );\n const toggleCrosswalkFocus = useCallback(\n (crosswalk: CrosswalkBase) => {\n if (!crosswalk) return;\n if (activeMode === LegendMode.Contributor) {\n const contributor = findContributorForCrosswalk(contributors, crosswalk);\n setFocusedCrosswalks((prevValue) =>\n calculateFocusedCrosswalks([crosswalk, ...(contributor?.crosswalks || [])], prevValue)\n );\n } else {\n setFocusedCrosswalks((prevValue) => calculateFocusedCrosswalks([crosswalk], prevValue));\n }\n },\n [activeMode, calculateFocusedCrosswalks, contributors]\n );\n\n useEffect(() => {\n if (focusedCrosswalks.length) {\n setFocusedCrosswalks([]);\n }\n }, [activeMode, entity]);\n\n return {\n getCrosswalkColor: getCrosswalkColorForActiveMode,\n highlightedCrosswalks: useMemo(\n () => [...highlightedCrosswalks, ...focusedCrosswalks],\n [highlightedCrosswalks, focusedCrosswalks]\n ),\n focusedCrosswalks,\n toggleCrosswalkFocus,\n setCrosswalkHighlighted\n };\n};\n","import {useCallback} from 'react';\nimport {useSelector} from 'react-redux';\nimport {andThen, pipe} from 'ramda';\nimport i18n from 'ui-i18n';\nimport mdm from '@reltio/mdm-module';\nimport {\n Entity,\n unmergeContributor as unmergeContributorRequest,\n unsubscribeEntityFromDataTenantEntity\n} from '@reltio/mdm-sdk';\nimport {useCrosswalkActions, noop} from '@reltio/components';\nimport {UnmergeContributorEvent, UnsubscribeContributorEvent} from '../types';\n\ntype Props = {\n onLoad?: () => void;\n onSuccess?: () => void;\n onError?: (error: unknown) => void;\n onShowMessage?: (message: string, entity?: Entity) => void;\n};\n\nexport const useCrosswalkTreeActions = ({\n onLoad = noop,\n onSuccess = noop,\n onError = noop,\n onShowMessage = noop\n}: Props) => {\n const {addCrosswalk, editCrosswalk, deleteCrosswalk} = useCrosswalkActions({onLoad, onSuccess, onError});\n const dtssPath = useSelector(mdm.selectors.getDtssPath);\n const tenant = useSelector(mdm.selectors.getTenant);\n\n const handleAction = useCallback(\n (request: Promise<unknown>) => {\n onLoad();\n request\n .then(() => {\n onSuccess();\n })\n .catch(onError);\n },\n [onLoad, onError, onSuccess]\n );\n\n const unmergeContributor = useCallback(\n (event: UnmergeContributorEvent) =>\n pipe(\n unmergeContributorRequest,\n andThen((response) => {\n onShowMessage(i18n.text('has been unmerged'), response.b);\n return response;\n }),\n handleAction\n )(event),\n [handleAction, onShowMessage]\n );\n\n const unsubscribeContributor = useCallback(\n ({crosswalk, dataTenant}: UnsubscribeContributorEvent) =>\n pipe(\n unsubscribeEntityFromDataTenantEntity,\n andThen((response) => {\n if (!response.successful) throw new Error(i18n.text('Failed to unsubscribe contributor'));\n return response;\n }),\n handleAction\n )({\n dtssPath,\n value: crosswalk.value,\n type: crosswalk.type,\n sourceTable: crosswalk.sourceTable,\n dataTenant: dataTenant.id,\n customerTenant: tenant\n }),\n [handleAction, dtssPath, tenant]\n );\n\n return {\n addCrosswalk,\n editCrosswalk,\n deleteCrosswalk,\n unmergeContributor,\n unsubscribeContributor\n };\n};\n","import React, {useCallback} from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\n\nimport MomentUtils from '@date-io/moment';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {SourcesSavedState} from '../../types';\nimport SourcesView from './SourcesView';\nimport {promisifyCallback, SourcesPerspectiveConfig} from '@reltio/mdm-sdk';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'sourcesPerspective',\n disableGlobal: true\n});\n\ntype Props = {\n config: SourcesPerspectiveConfig;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n saveState: (state: SourcesSavedState) => void;\n getSavedState: (clb: (state: SourcesSavedState) => void) => void;\n};\n\nconst SourcesPerspective = ({config, store, onResize, saveState, getSavedState}: Props) => {\n const getSavedStatePromisified: () => Promise<SourcesSavedState> = useCallback(promisifyCallback(getSavedState), [\n getSavedState\n ]);\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize?.(Math.floor(width), Math.floor(height))}\n />\n {config && (\n <SourcesView\n config={config}\n saveState={saveState}\n getSavedState={getSavedStatePromisified}\n />\n )}\n <ErrorPopup />\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default SourcesPerspective;\n","import {SourcesView} from '@reltio/sources';\n\nexport default SourcesView;\n"],"names":["contextSelector","CellRenderer","withContext","TableContext","useSavedState","getSavedState","isLoaded","setIsLoaded","useState","savedState","setSavedState","useEffect","then","_","catch","useStyles","makeStyles","header","display","flexDirection","alignItems","padding","borderBottom","closeButton","marginRight","RightSidePanel","active","onClose","tabs","styles","content","title","className","SmallIconButton","icon","CloseIcon","onClick","LegendMode","sumValues","links","pipe","map","prop","sum","data","width","height","useMemo","nodes","sankeyLayout","nodeWidth","smallestNodeMaxHeight","smallestNodeMinHeight","nodePadding","size","sankey","graph","forEach","node","sourceLinks","targetLinks","link","source","push","target","computeNodeLinks","value","Math","max","computeNodeValues","length","nextNodes","remainingNodes","x","dx","indexOf","w","computeNodeBreadths","nodesByBreadth","groupBy","toPairs","sort","a","b","nth","ky","reduce","min","Infinity","i","y","dy","initializeNodeDepth","y0","n","y1","last","computeNodeDepths","computeLinkDepths","concat","ty","correctNodesDepth","result","linksByUuid","l","crosswalk","uuid","sourceNodes","this","j","index","resultByUuid","newSources","filter","sizeForNewSources","sy","setNodeWidth","setNodePadding","setSmallestNodeMaxHeight","setSmallestNodeMinHeight","setSize","newSize","update","curvature","d","lastLine","x0","x1","xi","t","x2","x3","appendix","arguments","path","safeData","safeNodes","getSafeNode","originalNode","safeLinks","shallowCopy","tooltipTitle","fontWeight","fontSize","lineHeight","letterSpacing","marginBottom","userSelect","tooltipRow","tooltipIcon","color","stroke","strokeWidth","strokeOpacity","rootNode","transform","popupContainer","boxSizing","user","time","children","i18n","CalendarToday","Person","LightArrowTooltip","placement","_extends","Object","assign","key","prototype","hasOwnProperty","call","apply","props","React","viewBox","version","xmlns","xmlnsXlink","id","fill","fillRule","xlinkHref","fillOpacity","mask","highlightEnabled","isColored","disableUnmerge","onUnmerge","isDragging","labelX","setLabelX","anchorEl","setAnchorEl","textRef","useRef","name","label","entity","crosswalks","merges","firstCrosswalk","isDimmed","highlightCrosswalk","removeHighlight","useCrosswalkHighlight","useCrosswalkColor","startNodeHeight","closePopup","nodeHeight","textWidth","current","clientWidth","ref","opacity","onMouseEnter","onMouseLeave","noop","e","currentTarget","cursor","Popover","open","anchorOrigin","vertical","horizontal","classes","paper","UnmergeIcon","timeMap","sources","start","end","acc","head","renderMergeNodes","accentContributors","setDragging","isMouseDown","setMouseDown","previousPageX","setPreviousPageX","offsetX","setOffsetX","useSankey","sankeyNodes","sankeyLinks","extractPositionDelta","event","left","pageX","onUp","pointerEvents","onMouseDown","preventDefault","onMouseMove","onMouseUp","isCrosswalkDisplayed","curry","displayedCrosswalks","some","eqCrosswalks","filterDisplayedCrosswalks","tree","evolve","losers","addCrosswalkUniqueId","count","addIdToSubtree","loser","processTree","processSubTree","parentIndex","uri","mergesCrosswalks","chain","Date","now","linkedNodes","uniq","includes","memo","crosswalkTree","entityLabel","visibleCrosswalks","sankeyData","getSankeyData","refreshMode","refreshRate","handleWidth","handleHeight","theme","root","paddingRight","marginLeft","focusedIcon","isFocused","borderRadius","palette","text","secondary","paddingLeft","primary","contributorUri","focusable","contributorActions","onToggleFocus","VisibilityIcon","disabled","Typography","variant","getLastUriPart","Spacer","show","buttonProps","showForDisabled","contributorColor","position","border","borderLeft","top","bottom","marginTop","editor","accentContributor","crosswalksBySources","expandedSources","canUnmerge","disableAddCrosswalk","disableEditCrosswalk","disableDeleteCrosswalk","disableUnmergeContributor","onEdit","onDelete","onAdd","onToggleSourceExpanded","onUnsubscribeContributor","getContributorColor","dataTenants","useSelector","mdm","scrollToCrosswalk","useHighlightedCrosswalks","find","type","propOr","values","flatten","scrollIntoView","behavior","showEditor","setShowEditor","contributorCrosswalk","pluck","CrosswalkType","toggleCrosswalkFocus","useCrosswalkFocus","allContributorCrosswalks","dataTenantForExternalCrosswalk","getDataTenantFromCrosswalks","AddIcon","UnsubscribeIcon","dataTenant","classnames","crosswalksByTypes","SourceCrosswalksRow","showCrosswalkColors","crosswalksFocusEnabled","expanded","onToggleExpanded","CrosswalkEditor","table","overflowY","overflowX","tableRow","margin","maxWidth","entityType","contributors","selectedAttributeTypes","onChangeVisibleCrosswalks","readOnly","onAddCrosswalk","onEditCrosswalk","onDeleteCrosswalk","onUnmergeContributor","rowsData","entityCrosswalks","relationCrosswalks","getRelationCrosswalks","contributor","isEmptyValue","ownerType","relationCrosswalk","entityCrosswalk","groupCrosswalksByTypesAndSources","buildTableRowsData","expandedByContributor","setExpandedByContributor","isExpandedSource","collectVisibleCrosswalks","handleDelete","useCallback","crosswalkId","entityUri","handleEdit","params","checkCanCreateCrosswalk","checkCanEditCrosswalk","checkCanDeleteCrosswalk","sourceUri","unless","has","assoc","ifElse","without","append","container","hintIcon","verticalAlign","background","checkedIcon","right","main","selectedTree","SelectableTree","coloredCrosswalks","selected","onSelect","getCrosswalkColor","getUniqueCrosswalkColor","getCrosswalkId","Info","CheckCircle","dialogContainer","dialogTitle","dialogContent","trees","UnmergeDialog","unmergeOperation","setUnmergeOperation","UnmergeOperation","getColoredCrosswalks","includeMerges","collectCrosswalksFromContributor","Dialog","DialogTitle","DialogContent","toUpperCase","DialogActions","Button","UnsubscribeDialog","canUnsubscribe","modeSwitcher","backgroundColor","infoIcon","hint","alignSelf","hintText","crosswalksList","divider","pane","overflow","resizablePanesWrapper","flexGrow","activeMode","onChangeMode","tableProps","metadata","mdmModule","getEntityType","viewRef","paneSize","setPaneSize","handlePaneSizeChange","percentageSize","contributorForUnmerge","setContributorForUnmerge","unsubscribeInfo","setUnsubscribeInfo","crosswalkTreeDeep","calculateCrosswalkTreeDeep","maxPaneHeight","clientHeight","modes","Crosswalk","Source","Contributor","setVisibleCrosswalks","checkMetadataPermission","MetadataPermissions","operationType","ModeSwitcher","modeId","onChange","ResizablePanes","orientation","minSize","maxSize","allowResize","isEmpty","getLabel","masktype","maskUnits","clipRule","showErrorMessage","error","console","ErrorPopup","message","getRequestErrorMessage","cx","cy","r","style","maskType","y2","gradientUnits","stopColor","stopOpacity","offset","default","paddingTop","info","snackbarMessage","snackbarIcon","uiPath","generateEntityUrl","useContext","UrlGeneratorsContext","entityLink","Link","href","paddingBottom","whiteSpace","description","RulesetOption","innerRef","innerProps","MenuItem","RulesetsMenuList","getStyles","maxHeight","RulesetsSelector","survivorshipGroups","currentSurvivorshipGroupUri","options","group","propEq","DropDownSelector","components","Option","MenuList","sourcesView","fontFamily","headerDivider","attributesTable","perspectiveId","ActivePanel","connect","state","historyEvent","config","defaultEntity","saveState","dispatch","setActiveMode","isCrosswalkTreeLoading","setIsCrosswalkTreeLoading","onChangeSurvivorshipGroup","isDefaultSurvivorshipGroupUri","isLoading","isEntityLoading","entityTypeUri","defaultSurvivorshipGroupUri","setCurrentSurvivorshipGroupUri","setEntity","setIsLoading","safePromise","useSafePromise","survivorshipGroupUri","getEntityBySurvivorshipGroupUri","finally","useEntityWithSurvivorshipGroups","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","historyButtonId","History","persistedEntity","historySlice","useHistorySlice","selectedAttrTypes","setSelectedAttrTypes","useDidUpdateEffect","undefined","SnackbarRenderer","showSnackbarMessage","useSnackbar","showDismiss","visibleColumns","setVisibleColumns","hasVisibleColumnsChanged","equals","onCrosswalkTreeLoaded","reload","reloadCrosswalkTree","onSuccess","setCrosswalkTree","onError","warn","loadData","getCrosswalkTree","results","useCrosswalkTree","aEntity","collectContributorsFromTree","refreshEntity","profile","viewId","refreshData","modifiedEntity","crosswalksMap","newlyCreatedAttributes","onDeleteAttribute","onPinAttribute","onIgnoreAttribute","onEditAttribute","onAddAttribute","useModifiedEntity","onModify","displayProps","getCrosswalkColorForActiveMode","getSourceColor","findContributorForCrosswalk","highlightedCrosswalks","setHighlightedCrosswalks","highlightedCrosswalksCache","applyHighlightedCrosswalks","debounce","cacheHighlightedCrosswalks","arr","setCrosswalkHighlighted","highlighted","focusedCrosswalks","setFocusedCrosswalks","calculateFocusedCrosswalks","prev","next","prevCrosswalk","any","nextCrosswalk","prevValue","useCrosswalksDisplay","onShowMessage","addCrosswalk","deleteCrosswalk","editCrosswalk","unmergeContributor","unsubscribeContributor","onLoad","useCrosswalkActions","dtssPath","tenant","handleAction","request","unmergeContributorRequest","andThen","response","unsubscribeEntityFromDataTenantEntity","successful","Error","sourceTable","customerTenant","useCrosswalkTreeActions","errorCode","ApiErrorCode","historyFilter","onApplyFilter","isHistoryLoading","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","enabled","Legend","LegendIcon","HistoryIcon","HistoryHeader","total","HistoryView","contributorsUris","HistoryPanelEmptyState","additionalHeaderItems","Divider","DndProvider","backend","HTML5Backend","CrosswalkDragLayer","ProfileResizablePanes","buttonsProps","reject","ScreenProfileBand","attributeUris","AttributesTable","onChangeVisibleColumns","onSelectAttributeTypes","onPin","onIgnore","activeSurvivorshipGroupUri","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","store","onResize","getSavedStatePromisified","promisifyCallback","Provider","ViewIdContext","StylesProvider","MuiPickersUtilsProvider","utils","MomentUtils","floor"],"sourceRoot":""}