@reltio/remotes 1.4.1519 → 1.4.1521

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/6880.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"6880.js","mappings":"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","sources":["webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTable/HOCs/withTableContext.js","webpack://@reltio/remotes/../components/src/components/EntityTypeBadge/styles.ts","webpack://@reltio/remotes/../components/src/components/EntityTypeBadge/EntityTypeBadge.tsx","webpack://@reltio/remotes/../components/src/components/ProfileBand/styles.ts","webpack://@reltio/remotes/../components/src/components/ProfileBand/ProfileBand.tsx","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/styles.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/ProfileBandNavigationWidget.tsx","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/searchProviders/MainSearchProvider.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/searchProviders/GraphSearchProvider.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/helpers/index.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/hooks/useSearchNavigation.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/searchProviders/SearchProviderFactory.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/ProfileBandNavigation.tsx","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/hooks/useSearchNavigationVisibility.ts","webpack://@reltio/remotes/../components/src/components/SideIconPanel/styles.ts","webpack://@reltio/remotes/../components/src/components/SideIconPanel/SideButtonsPanel.tsx","webpack://@reltio/remotes/../components/src/components/history/ProfileBandHistory/styles.ts","webpack://@reltio/remotes/../components/src/components/history/ProfileBandHistory/ProfileBandHistory.tsx","webpack://@reltio/remotes/../components/src/contexts/ActionsHookContext/index.tsx","webpack://@reltio/remotes/../components/src/contexts/LabelsContext/index.ts","webpack://@reltio/remotes/../components/src/hooks/useCollaboration.ts","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/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/icons/notMatch.svg","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/useCrosswalkTreeActions.ts","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalksDisplay.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 {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles({\n 'entityType-overflow': {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap'\n },\n\n 'entityType-small': {\n padding: '1px 4px',\n fontSize: '10px',\n lineHeight: 'normal',\n marginRight: '12px',\n borderRadius: '2px',\n flexShrink: 0\n },\n 'entityType-medium': {\n padding: '2px 8px 3px',\n borderRadius: '2px',\n fontSize: '13px',\n fontWeight: 500,\n lineHeight: '15px',\n marginRight: '16px',\n flexShrink: 0\n }\n});\n\nexport default useStyles;\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport {getEntityType, getEntityTypeLabel, getPropWithInheritance, theme, utils, Entity} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport ExpandedValueTooltip from '../ExpandedValueTooltip/ExpandedValueTooltip';\nimport useStyles from './styles';\n\ntype Props = {\n entity: Entity;\n className?: string;\n size?: 'small' | 'medium';\n};\n\nconst EntityTypeBadge = ({entity, className, size = 'small'}: Props) => {\n const styles = useStyles();\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityTypeUri = entity.type;\n const entityType = getEntityType(metadata, entityTypeUri) || {};\n const entityTypeColor = getPropWithInheritance(metadata, entityType, 'typeColor') || theme.palette.primary.main;\n const entityTypeLabel = getEntityTypeLabel(metadata, entity);\n\n return (\n <ExpandedValueTooltip value={entityTypeLabel} placement=\"top\">\n <Typography\n style={{\n backgroundColor: entityTypeColor,\n color: utils.Colors.getColor(entityTypeColor) ? '#FFFFFF' : '#212121'\n }}\n className={classnames(styles[`entityType-${size}`], styles['entityType-overflow'], className)}\n component=\"div\"\n >\n {entityTypeLabel}\n </Typography>\n </ExpandedValueTooltip>\n );\n};\n\nexport default EntityTypeBadge;\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {inactiveBackground: string}) => ({\n profileBandWrapper: {\n // especially for IE (overflow fix)\n flexShrink: 0\n },\n profileBand: {\n display: 'flex',\n padding: '16px 12px 16px 16px',\n alignItems: 'flex-start',\n backgroundColor: '#fff',\n boxShadow: '0px 1px 0px rgba(0, 0, 0, 0.12)',\n marginBottom: '1px',\n '&:after': {\n // IE workaround for minHeight and centering items\n content: '\"\"',\n minHeight: 'inherit',\n fontSize: 0\n }\n },\n inactive: {\n background: theme.inactiveBackground\n },\n profileIcon: {\n marginRight: '12px'\n },\n imageProfileIcon: {\n width: '48px',\n height: '48px'\n },\n profileInfo: {\n display: 'flex',\n flexDirection: 'column',\n flex: '1 1 50%'\n },\n badge: {},\n label: {\n lineHeight: '1.2',\n letterSpacing: '0.25px',\n color: theme.palette.text.primary,\n wordBreak: 'break-word',\n\n '&+ $specialInfo': {\n marginTop: '4px'\n }\n },\n secondaryLabel: {\n display: 'inline-flex',\n color: theme.palette.text.primary,\n marginTop: '2px',\n lineHeight: '16px',\n fontSize: '14px',\n fontWeight: 400,\n\n '&+ $businessCard': {\n marginLeft: '12px'\n }\n },\n businessCard: {\n color: theme.palette.text.secondary,\n display: 'inline-flex',\n fontSize: '14px',\n marginTop: '4px',\n lineHeight: '1.2'\n },\n specialInfo: {\n display: 'flex',\n justifyContent: 'space-between',\n flexWrap: 'wrap',\n width: '100%',\n marginTop: '8px'\n },\n entityType: {\n display: 'flex',\n flexWrap: 'wrap'\n },\n entityId: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n whiteSpace: 'nowrap',\n cursor: 'pointer',\n '&:hover': {\n textDecoration: 'underline'\n }\n }\n}));\n\nexport default useStyles;\n","import React, {ReactNode, useCallback} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {isNil, identity} from 'ramda';\nimport {Typography as Typography} from '@material-ui/core';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport i18n from 'ui-i18n';\n\nimport {getLabel, isActiveObject, getBusinessCardAttributesText, getEntityId, isTempUri, Entity} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\n\nimport EntityAvatar from '../EntityAvatar/EntityAvatar';\nimport EntityTypeBadge from '../EntityTypeBadge/EntityTypeBadge';\n\nimport useStyles from './styles';\n\ntype Props = {\n className?: string;\n entity?: Entity;\n children?: ReactNode;\n classes?: Partial<ReturnType<typeof useStyles>>;\n renderLabel?: (label: string) => React.ReactNode;\n};\n\nconst ProfileBand = ({className, entity, children, classes, renderLabel = identity}: Props) => {\n const styles = useStyles({classes});\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const showEntityId = useSelector(mdmModule.selectors.getShowEntityId);\n const handleCopyEntityIdToClipboard = useCallback(() => {\n navigator.clipboard.writeText(getEntityId(entity));\n }, [entity]);\n\n if (isNil(entity)) {\n return null;\n }\n\n const label = getLabel(entity.label);\n const secondaryLabel = entity.secondaryLabel;\n const businessCardText = getBusinessCardAttributesText(metadata, entity);\n const isActive = isActiveObject(entity);\n const entityUri = entity.uri;\n const entityId = getEntityId(entity);\n return (\n <div className={classnames(styles.profileBandWrapper, className)}>\n <div\n className={classnames(styles.profileBand, {\n [styles.inactive]: !isActive\n })}\n data-entity-uri={entityUri}\n >\n <EntityAvatar\n key={entity.uri}\n entity={entity}\n avatarClassName={styles.profileIcon}\n imageClassName={styles.imageProfileIcon}\n />\n <div className={styles.profileInfo}>\n <div>\n <Typography variant=\"h6\" className={styles.label}>\n {renderLabel(label)}\n </Typography>\n {secondaryLabel && (\n <Typography variant=\"subtitle2\" className={styles.secondaryLabel}>\n {secondaryLabel}\n </Typography>\n )}\n {businessCardText && (\n <Typography variant=\"subtitle1\" className={styles.businessCard}>\n {businessCardText}\n </Typography>\n )}\n </div>\n <div className={styles.specialInfo}>\n <div className={styles.entityType}>\n <EntityTypeBadge entity={entity} size=\"medium\" className={styles.badge} />\n {!isTempUri(entityUri) && showEntityId && (\n <Tooltip title={i18n.text('Copy to clipboard')}>\n <Typography\n display=\"inline\"\n variant=\"body2\"\n className={styles.entityId}\n onClick={handleCopyEntityIdToClipboard}\n >\n {i18n.text('Entity ID')}: {entityId}\n </Typography>\n </Tooltip>\n )}\n </div>\n </div>\n </div>\n {children && <div>{children}</div>}\n </div>\n </div>\n );\n};\n\nexport default ProfileBand;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n container: {\n display: 'flex',\n alignItems: 'center'\n },\n link: {\n whiteSpace: 'nowrap',\n marginRight: '9px'\n }\n});\n","import React, {useContext} from 'react';\nimport {Link as Link} from '@material-ui/core';\nimport KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';\nimport KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport {mergeRight} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {LabelsContext} from '../../contexts/LabelsContext';\nimport {withTooltip} from '../../HOCs';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\n\nimport {useStyles} from './styles';\n\nconst LinkWithTooltip = withTooltip<typeof Link, {component: string}>(Link);\n\ntype Props = {\n className?: string;\n total?: number;\n onPrev?: () => void;\n onNext?: () => void;\n onSearchResultsClick?: () => void;\n isPrevDisabled?: boolean;\n isNextDisabled?: boolean;\n};\n\nconst ProfileBandNavigationWidget = ({\n className,\n total = 0,\n onPrev,\n onNext,\n onSearchResultsClick,\n isPrevDisabled,\n isNextDisabled\n}: Props) => {\n const styles = useStyles();\n const labels = useContext(LabelsContext);\n const {OPEN_RESULTS, SEARCH_RESULT, SEARCH_RESULTS, NEXT_PROFILE, PREVIOUS_PROFILE} = mergeRight(\n {\n OPEN_RESULTS: i18n.text('Go to search results'),\n SEARCH_RESULT: i18n.text('Search result'),\n SEARCH_RESULTS: i18n.text('Search results'),\n PREVIOUS_PROFILE: i18n.text('Go to previous profile'),\n NEXT_PROFILE: i18n.text('Go to next profile')\n },\n labels?.profileBand ?? {}\n );\n return (\n <div className={classnames(styles.container, className)}>\n <LinkWithTooltip\n className={styles.link}\n component=\"button\"\n variant=\"caption\"\n onClick={onSearchResultsClick}\n underline=\"none\"\n tooltipTitle={OPEN_RESULTS}\n >\n {formatNumberAsMetric(total, 1000000)} {total === 1 ? SEARCH_RESULT : SEARCH_RESULTS}\n </LinkWithTooltip>\n <SmallIconButtonWithTooltip\n size=\"L\"\n icon={KeyboardArrowLeft}\n tooltipTitle={PREVIOUS_PROFILE}\n onClick={onPrev}\n disabled={isPrevDisabled}\n showForDisabled\n />\n <SmallIconButtonWithTooltip\n size=\"L\"\n icon={KeyboardArrowRight}\n tooltipTitle={NEXT_PROFILE}\n onClick={onNext}\n disabled={isNextDisabled}\n showForDisabled\n />\n </div>\n );\n};\n\nexport {ProfileBandNavigationWidget, LinkWithTooltip};\n","import {\n Entity,\n getFilteredEntities,\n getFilteredEntitiesFromDataTenant,\n getTotals,\n getTotalFromDataTenant,\n TotalResponse\n} from '@reltio/mdm-sdk';\n\nimport {SearchProvider} from './SearchProvider';\n\nexport class MainSearchProvider implements SearchProvider {\n private readonly query;\n private readonly sortField;\n private readonly sortOrder;\n private readonly tenant;\n private readonly searchTenant;\n private readonly apiPath;\n private readonly dtssPath;\n private readonly globalSearchRequestOptions;\n\n constructor({\n data: {query, sortField, sortOrder},\n tenant,\n searchTenant,\n apiPath,\n dtssPath,\n globalSearchRequestOptions\n }) {\n this.query = query;\n this.sortField = sortField;\n this.sortOrder = sortOrder;\n this.tenant = tenant;\n this.searchTenant = searchTenant;\n this.apiPath = apiPath;\n this.dtssPath = dtssPath;\n this.globalSearchRequestOptions = globalSearchRequestOptions;\n }\n\n private isDT = () => this.tenant !== this.searchTenant;\n\n private getQueryFilter = () => ({rawFilter: this.query});\n\n private getEntities = (filters = [], options = {}): Promise<Entity[]> => {\n const requestFilters = [this.getQueryFilter(), ...filters];\n const requestOptions = {\n ...this.globalSearchRequestOptions,\n sort: this.sortField,\n order: this.sortOrder,\n select: 'uri,label,type',\n scoreEnabled: false,\n ...options\n };\n return this.isDT()\n ? getFilteredEntitiesFromDataTenant({\n filters: requestFilters,\n options: requestOptions,\n customerTenant: this.tenant,\n dataTenant: this.searchTenant,\n dtssPath: this.dtssPath\n })\n : getFilteredEntities(requestFilters, requestOptions);\n };\n\n checkEntity = (uri): Promise<boolean> => {\n return this.getEntities(\n [\n {\n filter: 'equals',\n fieldName: 'uri',\n values: [uri]\n }\n ],\n {offset: 0, max: 1}\n ).then((entities) => {\n return entities && entities.length > 0 && entities[0].uri === uri;\n });\n };\n\n requestEntities = (max, offset): Promise<Entity[]> => {\n return this.getEntities([], {offset, max});\n };\n\n requestTotal = (): Promise<number> => {\n const filters = [this.getQueryFilter()];\n const options = this.globalSearchRequestOptions;\n return (this.isDT()\n ? getTotalFromDataTenant({\n filters,\n options,\n customerTenant: this.tenant,\n dataTenant: this.searchTenant,\n dtssPath: this.dtssPath\n })\n : getTotals(filters, options)\n ).then((json) => (json as TotalResponse).total);\n };\n}\n","import {\n Entity,\n getGraphSearchCount,\n getGraphSearchEntities,\n getEntityId,\n buildFilterQueryString\n} from '@reltio/mdm-sdk';\n\nimport {SearchProvider} from './SearchProvider';\n\nexport class GraphSearchProvider implements SearchProvider {\n private readonly searchBody;\n private readonly tenant;\n private readonly apiPath;\n\n constructor({data, tenant, apiPath}) {\n this.searchBody = data;\n this.tenant = tenant;\n this.apiPath = apiPath;\n }\n\n private getEntities = (filters = [], options = {}): Promise<Entity[]> => {\n const allFilters = [\n {\n rawFilter: this.searchBody.filter\n },\n ...filters\n ];\n return getGraphSearchEntities({\n apiPath: this.apiPath,\n tenant: this.tenant,\n searchBody: {\n ...this.searchBody,\n filter: filters.length ? buildFilterQueryString()(allFilters) : this.searchBody.filter\n },\n options\n });\n };\n\n checkEntity = (uri): Promise<boolean> => {\n return this.getEntities(\n [\n {\n filter: 'equals',\n fieldName: 'id',\n values: [getEntityId({uri})]\n }\n ],\n {from: 0, max: 1}\n ).then((entities) => {\n return entities && entities.length > 0 && entities[0].uri === uri;\n });\n };\n\n requestEntities = (max, from): Promise<Entity[]> => {\n return this.getEntities([], {from, max});\n };\n\n requestTotal = (): Promise<number> => {\n return getGraphSearchCount({\n apiPath: this.apiPath,\n tenant: this.tenant,\n searchBody: this.searchBody\n }).then((json) => json.count);\n };\n}\n","import {SearchNavigationData} from '../types';\n\ntype Payload = {\n winnerUri: string;\n losersUris: string[];\n};\n\nconst replaceWithWinnerUri = (searchNavigationData: SearchNavigationData, winnerUri: string): SearchNavigationData => {\n let {uri, index, total, cache} = searchNavigationData;\n if (winnerUri && winnerUri !== uri) {\n if (cache && cache.includes(uri)) {\n cache = [...cache];\n const winnerIndex = cache.indexOf(winnerUri);\n let uriIndex = cache.indexOf(uri);\n if (winnerIndex >= 0) {\n cache.splice(winnerIndex, 1);\n total--;\n if (winnerIndex < uriIndex) {\n index--;\n }\n }\n uriIndex = cache.indexOf(uri);\n cache.splice(uriIndex, 1, winnerUri);\n }\n uri = winnerUri;\n return {\n ...searchNavigationData,\n uri,\n index,\n cache,\n total\n };\n }\n return searchNavigationData;\n};\n\nconst removeLosersUris = (searchNavigationData: SearchNavigationData, losersUris: string[]): SearchNavigationData => {\n const {cache = [], index, total, uri} = searchNavigationData;\n const losersInCache = losersUris.filter((uri) => cache.includes(uri));\n if (losersInCache.length === 0) {\n return searchNavigationData;\n }\n const updatedTotal = total - losersInCache.length;\n const uriIndex = cache.indexOf(uri);\n let updatedIndex = index;\n for (const loser of losersInCache) {\n const loserIndex = cache.indexOf(loser);\n if (loserIndex < uriIndex) {\n updatedIndex--;\n }\n }\n const updatedCache = cache.filter((uri) => !losersInCache.includes(uri));\n\n return {\n ...searchNavigationData,\n cache: updatedCache,\n index: updatedIndex,\n total: updatedTotal\n };\n};\n\nexport const applyMergeToSearchNavigationData = (\n searchNavigationData: SearchNavigationData,\n payload: Payload\n): SearchNavigationData => {\n const {winnerUri, losersUris = []} = payload;\n const updatedSearchNavigationData = replaceWithWinnerUri(searchNavigationData, winnerUri);\n return removeLosersUris(updatedSearchNavigationData, losersUris);\n};\n","import {useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {search as mdmModuleSearch, ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {getEntityUriForLink} from '@reltio/mdm-sdk';\nimport {map, pipe, prop, reject} from 'ramda';\nimport {useActionsHook, ViewIdContext} from '../../../contexts';\nimport {useSafePromise} from '../../../hooks';\nimport {getSearchProvider} from '../searchProviders/SearchProviderFactory';\nimport {SearchNavigationData, SearchProviderData} from '../types';\nimport {applyMergeToSearchNavigationData} from '../helpers';\n\nexport const REQUEST_PAGE_SIZE = 15;\n\nconst getNewUris = (entities, cache) =>\n pipe(\n map(prop('uri')),\n reject((uri) => cache.includes(uri))\n )(entities);\n\nconst useSearchNavigation = () => {\n const safeCheckEntityPromise = useSafePromise();\n const safeRequestTotalPromise = useSafePromise();\n const safeRequestEntitiesPromise = useSafePromise();\n const {\n uri,\n index,\n total,\n tenant: searchTenant,\n cache\n } = useSelector<unknown, SearchNavigationData>(mdmModule.selectors.getSearchNavigationData) || {};\n const {type, data} = useSelector<unknown, SearchProviderData>(mdmModule.selectors.getSearchProviderData) || {};\n const tenant = useSelector<unknown, string>(mdmModule.selectors.getTenant);\n const apiPath = useSelector<unknown, string>(mdmModule.selectors.getApiPath);\n const dtssPath = useSelector<unknown, string>(mdmModule.selectors.getDtssPath);\n const globalSearchRequestOptions = useSelector((state) =>\n mdmModule.selectors.getGlobalSearchRequestOptions(state, ['ovOnly'])\n );\n const viewId = useContext(ViewIdContext);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState<boolean>(false);\n\n const searchProvider = useMemo(\n () => getSearchProvider(type, {data, tenant, searchTenant, apiPath, dtssPath, globalSearchRequestOptions}),\n [type, data, tenant, searchTenant, apiPath, dtssPath, globalSearchRequestOptions]\n );\n\n const updateNavigationData = useCallback(\n (data: Partial<SearchNavigationData>) => {\n dispatch(mdmModuleSearch.actions.updateSearchNavigationDataFields(data));\n },\n [dispatch]\n );\n\n const openEntity = useCallback(\n (uri: string) => {\n const preparedUri = tenant !== searchTenant ? getEntityUriForLink({uri, dataTenant: searchTenant}) : uri;\n dispatch(mdmModuleUi.actions.openEntity({uri: preparedUri, viewId, source: 'navigation'}));\n },\n [dispatch, viewId, tenant, searchTenant]\n );\n\n const onSearchResultsClick = useCallback(() => {\n dispatch(mdmModuleUi.actions.openPerspective({perspectiveId: type, viewId}));\n }, [dispatch, type, viewId]);\n\n useEffect(() => {\n if (index >= total) {\n updateNavigationData({\n index: total - 1\n });\n } else if (index < 0) {\n updateNavigationData({\n index: 0\n });\n }\n }, [total, index, updateNavigationData]);\n\n const listenToActions = useActionsHook();\n\n useEffect(() => {\n const stopListeningActions = listenToActions((action, state) => {\n switch (action.type) {\n case mdmModuleSearch.constants.UPDATE_SEARCH_NAVIGATION_DATA_ON_MERGE: {\n const searchNavigationData: SearchNavigationData =\n mdmModule.selectors.getSearchNavigationData(state);\n if (searchNavigationData) {\n updateNavigationData(applyMergeToSearchNavigationData(searchNavigationData, action.payload));\n }\n break;\n }\n }\n });\n return () => stopListeningActions();\n }, [listenToActions, updateNavigationData]);\n\n const requestNextPage = useCallback(\n (cache: string[], total: number, index: number): Promise<void> => {\n setLoading(true);\n safeRequestTotalPromise(searchProvider.requestTotal()).then((total) => updateNavigationData({total}));\n\n const newIndex = index + 1;\n return safeRequestEntitiesPromise(searchProvider.requestEntities(REQUEST_PAGE_SIZE, newIndex))\n .then((entities) => {\n if (!entities) {\n return;\n }\n if (entities.length) {\n const newUris = getNewUris(entities, cache);\n if (newUris.length > 0) {\n updateNavigationData({\n cache: cache.concat(newUris),\n uri: newUris[0],\n index: newIndex + entities.length - newUris.length\n });\n openEntity(newUris[0]);\n return;\n } else if (index + entities.length < total - 1) {\n return requestNextPage(cache, total - entities.length, index + entities.length);\n }\n }\n updateNavigationData({\n index: newIndex\n });\n })\n .finally(() => {\n setLoading(false);\n });\n },\n [searchProvider, updateNavigationData, openEntity]\n );\n\n const requestPrevPage = useCallback(\n (cache: string[], index: number): Promise<void> => {\n setLoading(true);\n safeRequestTotalPromise(searchProvider.requestTotal()).then((total) => updateNavigationData({total}));\n\n const newIndex = index - 1;\n const offset = Math.max(0, index - REQUEST_PAGE_SIZE);\n const max = REQUEST_PAGE_SIZE + Math.min(0, index - REQUEST_PAGE_SIZE);\n return safeRequestEntitiesPromise(searchProvider.requestEntities(max, offset))\n .then((entities) => {\n if (!entities) {\n return;\n }\n if (entities.length) {\n const newUris = getNewUris(entities, cache);\n if (newUris.length > 0) {\n updateNavigationData({\n cache: newUris.concat(cache),\n uri: newUris[newUris.length - 1],\n index: newIndex - (entities.length - newUris.length)\n });\n openEntity(newUris[newUris.length - 1]);\n return;\n } else if (index - entities.length > 0) {\n return requestPrevPage(cache, index - entities.length);\n }\n }\n updateNavigationData({\n index: 0\n });\n })\n .finally(() => {\n setLoading(false);\n });\n },\n [searchProvider, updateNavigationData, openEntity]\n );\n\n const stepForwardWithCheck = useCallback(\n (cache: string[], cacheIndex: number, total: number, index: number): Promise<void> | void => {\n if (cacheIndex < cache.length) {\n const uri = cache[cacheIndex];\n setLoading(true);\n return safeCheckEntityPromise(searchProvider.checkEntity(uri))\n .then((isExists) => {\n if (isExists) {\n updateNavigationData({\n index: index + 1,\n uri,\n cache,\n total\n });\n openEntity(uri);\n } else {\n const clearedCache = [...cache];\n clearedCache.splice(cacheIndex, 1);\n return stepForwardWithCheck(clearedCache, cacheIndex, total - 1, index);\n }\n })\n .finally(() => {\n setLoading(false);\n });\n } else if (index >= total - 1) {\n updateNavigationData({\n cache,\n total,\n index: total - 1\n });\n } else {\n return requestNextPage(cache, total, index);\n }\n },\n [searchProvider, updateNavigationData, openEntity, requestNextPage]\n );\n\n const stepBackWithCheck = useCallback(\n (cache: string[], cacheIndex: number, total: number, index: number): Promise<void> | void => {\n if (cacheIndex > -1) {\n const uri = cache[cacheIndex];\n setLoading(true);\n return safeCheckEntityPromise(searchProvider.checkEntity(uri))\n .then((isExists) => {\n if (isExists) {\n updateNavigationData({\n index: index - 1,\n uri,\n cache,\n total\n });\n openEntity(uri);\n } else {\n const clearedCache = [...cache];\n clearedCache.splice(cacheIndex, 1);\n return stepBackWithCheck(clearedCache, cacheIndex - 1, total - 1, index - 1);\n }\n })\n .finally(() => {\n setLoading(false);\n });\n } else if (index <= 0) {\n updateNavigationData({\n index: 0,\n cache,\n total\n });\n } else {\n return requestPrevPage(cache, index);\n }\n },\n [searchProvider, updateNavigationData, openEntity, requestPrevPage]\n );\n\n const onPrev = useCallback(() => {\n if (cache && uri) {\n const cacheIndex = cache.indexOf(uri) - 1;\n stepBackWithCheck(cache, cacheIndex, total, index);\n }\n }, [stepBackWithCheck, cache, uri, total, index]);\n\n const onNext = useCallback(() => {\n if (cache && uri) {\n const cacheIndex = cache.indexOf(uri) + 1;\n stepForwardWithCheck(cache, cacheIndex, total, index);\n }\n }, [stepForwardWithCheck, cache, uri, total, index]);\n\n const isPrevDisabled = loading || index <= 0;\n const isNextDisabled = loading || index >= total - 1;\n return {total, onPrev, onNext, onSearchResultsClick, isPrevDisabled, isNextDisabled};\n};\n\nexport {useSearchNavigation};\n","import {MainSearchProvider} from './MainSearchProvider';\nimport {GraphSearchProvider} from './GraphSearchProvider';\n\nexport const getSearchProvider = (type: string, options) => {\n switch (type) {\n case 'search':\n return new MainSearchProvider(options);\n case 'graphsearch':\n return new GraphSearchProvider(options);\n }\n};\n","import React from 'react';\n\nimport {ProfileBandNavigationWidget} from './ProfileBandNavigationWidget';\nimport {useSearchNavigation} from './hooks/useSearchNavigation';\nimport {useSearchNavigationVisibility} from './hooks/useSearchNavigationVisibility';\n\ntype Props = {\n className?: string;\n};\n\nconst ProfileBandNavigation = ({className}: Props) => {\n const {total, onPrev, onNext, onSearchResultsClick, isPrevDisabled, isNextDisabled} = useSearchNavigation();\n const isVisible = useSearchNavigationVisibility();\n return isVisible ? (\n <ProfileBandNavigationWidget\n className={className}\n total={total}\n onPrev={onPrev}\n onNext={onNext}\n onSearchResultsClick={onSearchResultsClick}\n isPrevDisabled={isPrevDisabled}\n isNextDisabled={isNextDisabled}\n />\n ) : null;\n};\n\nexport {ProfileBandNavigation};\n","import {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Entity, isViewMode} from '@reltio/mdm-sdk';\nimport {SearchNavigationData} from '../types';\n\nconst useSearchNavigationVisibility = () => {\n const {cache} = useSelector<unknown, SearchNavigationData>(mdmModule.selectors.getSearchNavigationData) || {};\n const mode = useSelector<unknown, string>(mdmModule.selectors.getMode);\n const entity = useSelector<unknown, Entity>(mdmModule.selectors.getEntity);\n\n return isViewMode(mode) && cache?.includes(entity?.uri);\n};\n\nexport {useSearchNavigationVisibility};\n","import {fade, makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0,\n width: '64px',\n paddingTop: '8px',\n backgroundColor: theme.palette.background.paper,\n boxShadow: '0 1px 1px 0 rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12), 0 1px 3px 0 rgba(0,0,0,0.2)'\n },\n active: {\n backgroundColor: fade(theme.palette.primary.main, 0.12),\n color: theme.palette.primary.main,\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n height: '42px',\n width: '3px',\n backgroundColor: theme.palette.primary.main,\n left: '-8px',\n borderRadius: '0 6px 6px 0'\n }\n },\n buttonWrapper: {\n position: 'relative',\n width: '48px',\n height: '44px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '6px',\n margin: '2px 8px',\n color: theme.palette.text.secondary\n }\n}));\n","import React, {ElementType} from 'react';\nimport classnames from 'classnames';\nimport {IconButtonProps} from '@material-ui/core/IconButton';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n buttonsProps: {\n icon: ElementType;\n tooltipTitle: string;\n id: number;\n disabled?: boolean;\n }[];\n classes?: {active?: string; buttonWrapper?: string} & IconButtonProps['classes'];\n activeIndexId: number;\n className?: string;\n onButtonClick: (id: number) => void;\n};\n\nexport const SideButtonsPanel = ({buttonsProps, activeIndexId, className, onButtonClick, classes = {}}: Props) => {\n const styles = useStyles();\n const {active, buttonWrapper, ...iconButtonClasses} = classes;\n\n return (\n <div className={classnames(styles.container, className)}>\n {buttonsProps.map(({id, ...buttonProps}) => {\n return (\n <SmallIconButtonWithTooltip\n {...buttonProps}\n classes={iconButtonClasses}\n size=\"S\"\n key={id}\n className={classnames(\n {[classnames(styles.active, active)]: activeIndexId === id},\n styles.buttonWrapper,\n buttonWrapper\n )}\n onClick={() => onButtonClick(id)}\n data-reltio-id={`reltio-profile-right-side-button-${id}`}\n />\n );\n })}\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n alignItems: 'flex-start'\n },\n slice: {\n fontWeight: 500\n },\n cancelButton: {\n width: '88px',\n flexShrink: 0,\n marginLeft: '15px'\n }\n});\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {Button as Button} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {pipe} from 'ramda';\nimport i18n from 'ui-i18n';\n\nimport {useStyles} from './styles';\n\nconst ProfileBandHistory = () => {\n const styles = useStyles();\n\n const historyEvent = useSelector(mdmModule.selectors.getHistoryEvent);\n const dispatch = useDispatch();\n const onCancel = pipe(profile.history.actions.clearHistoryEvent, dispatch);\n\n return historyEvent ? (\n <div className={styles.root}>\n <Typography component={'div'}>\n {i18n.text('You are viewing a historic slice:')}{' '}\n <span className={styles.slice}>{i18n.date(historyEvent.aStamp, 'llll')}</span>\n </Typography>\n <Button className={styles.cancelButton} variant=\"contained\" color=\"primary\" onClick={onCancel}>\n {i18n.text('Cancel')}\n </Button>\n </div>\n ) : null;\n};\n\nexport default ProfileBandHistory;\n","import React, {createContext, useContext} from 'react';\nimport {AnyAction} from 'redux';\n\ntype ActionsHook = (listener: (action: AnyAction, state: any) => void) => () => void;\n\nconst ActionsHookContext = createContext<ActionsHook | null>(null);\nActionsHookContext.displayName = 'ActionsHookContext';\n\ntype ProviderProps = {\n hook: ActionsHook;\n children: React.ReactNode;\n};\n\nexport const ActionsHookProvider = ({children, hook}: ProviderProps) => {\n return <ActionsHookContext.Provider value={hook}>{children}</ActionsHookContext.Provider>;\n};\n\nexport const useActionsHook = () => {\n const listenToActions = useContext(ActionsHookContext);\n if (!listenToActions) {\n throw new Error('ActionsHookContext must be provided');\n }\n return listenToActions;\n};\n","import React from 'react';\n\ntype Labels = {\n profileBand: {\n OPEN_RESULTS?: string;\n SEARCH_RESULT?: string;\n SEARCH_RESULTS?: string;\n NEXT_PROFILE?: string;\n PREVIOUS_PROFILE?: string;\n };\n};\nexport const LabelsContext = React.createContext<Labels>({\n profileBand: {}\n});\n\nLabelsContext.displayName = 'LabelsContext';\n","import {useCallback, useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {\n andThen,\n fromPairs,\n map,\n otherwise,\n pipe,\n props,\n uniqBy,\n prop,\n propEq,\n when,\n always,\n assocPath,\n dissocPath,\n path,\n pathOr,\n mergeRight\n} from 'ramda';\nimport {\n CollaborationObjectTypes,\n Comment,\n CommentsMap,\n createComment as createCommentRequest,\n createReply as createReplyRequest,\n getComment as getCommentRequest,\n getCommentsCount as getCommentsCountRequest,\n Reply,\n updateComment as updateCommentRequest,\n updateReply as updateReplyRequest,\n deleteComment as deleteCommentRequest,\n deleteReply as deleteReplyRequest,\n getComments as getCommentsRequest,\n isTempUri,\n CollaborationStateMap,\n CommentState\n} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\n\ntype Props = {\n objectIds?: string[];\n objectTypes?: CollaborationObjectTypes[];\n enabled?: boolean;\n};\n\nconst filterReplies = (replyId: string, replies: Reply[]) => replies.filter((reply) => reply.replyId !== replyId);\n\nconst getUpdatedReplies = (comment: Comment, reply: Reply) => {\n const changedReplyIndex = comment.replies.findIndex(({replyId}) => replyId === reply.replyId);\n const newReplies = [...comment.replies];\n newReplies[changedReplyIndex] = reply;\n return newReplies;\n};\n\nconst defaultObjectIds = [];\nconst catchErrorInRequest = (e) => console.error('Collaboration error', e);\nexport const useCollaboration = ({objectIds = defaultObjectIds, objectTypes, enabled = true}: Props) => {\n const entity = useSelector(mdm.selectors.getEntity);\n const tenant: string = useSelector(mdm.selectors.getTenant);\n const collaborationPath: string = useSelector(mdm.selectors.getCollaborationPath);\n const isCollaborationEnabled = useSelector(mdm.selectors.isCollaborationEnabled) && enabled;\n\n const [pageToken, setPageToken] = useState<string | null>(null);\n const [comments, setComments] = useState<Comment[]>([]);\n const [commentsMap, setCommentsMap] = useState<CommentsMap>(null);\n const [currentComment, setCurrentComment] = useState<Comment | null>(null);\n const [sending, setSending] = useState(false);\n const [loading, setLoading] = useState(false);\n const [collaborationStateMap, setCollaborationStateMap] = useState<CollaborationStateMap>({});\n\n const addCommentsToCommentsMap = useCallback((commentsMap: CommentsMap) => {\n setCommentsMap((currentCommentsMap) => ({\n ...currentCommentsMap,\n ...commentsMap\n }));\n }, []);\n const entityUri = entity?.uri;\n const getCommentsCount = useCallback(\n (objectIds: string[], shouldResetCommentsMap = false) => {\n if (isCollaborationEnabled && entityUri && !isTempUri(entityUri)) {\n const onError = (e) => {\n console.warn('Collaboration error', e);\n setCommentsMap(null);\n };\n pipe(\n getCommentsCountRequest,\n andThen(map(props(['objectId', 'comments']))),\n andThen(fromPairs),\n andThen(shouldResetCommentsMap ? setCommentsMap : addCommentsToCommentsMap),\n otherwise(onError)\n )({uris: objectIds, tenant, collaborationPath});\n } else {\n setCommentsMap(null);\n }\n },\n [addCommentsToCommentsMap, collaborationPath, entityUri, isCollaborationEnabled, tenant]\n );\n\n useEffect(() => {\n getCommentsCount(objectIds, true);\n }, [objectIds, getCommentsCount]);\n\n const getComments = useCallback(\n (relatedObjectUri: string, pageToken?: string) => {\n getCommentsRequest({collaborationPath, tenant, relatedObjectUri, pageToken})\n .then(({items, nextPageToken}) => {\n setComments((prevComments) => {\n if (!pageToken) {\n return items;\n }\n return uniqBy(prop('commentId'), [...prevComments, ...items]);\n });\n setPageToken(nextPageToken);\n })\n .catch(catchErrorInRequest);\n },\n [collaborationPath, tenant]\n );\n\n const getComment = useCallback(\n (commentId: string) => {\n setLoading(true);\n\n getCommentRequest({collaborationPath, tenant, commentId})\n .then(setCurrentComment)\n .catch(catchErrorInRequest)\n .finally(() => setLoading(false));\n },\n [collaborationPath, tenant]\n );\n\n const addCommentToState = (comment: Comment, uri: string) => {\n setCurrentComment(comment);\n setCommentsMap((prevCommentsMap) => {\n return {\n ...prevCommentsMap,\n [uri]: [...(prevCommentsMap[uri] || []), {commentId: comment.commentId, replies: 0, status: 'open'}]\n };\n });\n setComments((prevComments) => [comment, ...prevComments]);\n };\n const updateCommentInState = (comment: Comment) => {\n setCurrentComment(comment);\n setComments(map(when(propEq('commentId', comment.commentId), always(comment))));\n };\n const deleteCommentFromState = (commentId: string, uri: string) => {\n setCurrentComment(null);\n setCommentsMap((prevCommentsMap) => {\n const comments = prevCommentsMap[uri] || [];\n return {\n ...prevCommentsMap,\n [uri]: comments.filter((c) => c.commentId !== commentId)\n };\n });\n setComments((prevComments) => {\n return prevComments.filter((comment) => comment.commentId !== commentId);\n });\n };\n const createComment = useCallback(\n ({content, namedUsers, objectType, uri, relatedObjectUris}) => {\n setSending(true);\n\n const data = {\n objectId: uri,\n content,\n relatedObjectUris,\n objectType,\n visibility: 'public',\n namedUsers,\n permanentLink: `${window.location.href}&commentId=${encodeURIComponent('{commentId}')}`\n };\n\n return createCommentRequest({collaborationPath, tenant, data})\n .then(([comment]) => addCommentToState(comment, uri))\n .catch(catchErrorInRequest)\n .finally(() => setSending(false));\n },\n [collaborationPath, tenant]\n );\n\n const editComment = useCallback(\n ({content, namedUsers, objectType, uri, relatedObjectUris, commentId, replies}) => {\n setSending(true);\n\n const data = {\n objectId: uri,\n content,\n relatedObjectUris,\n objectType,\n visibility: 'public',\n namedUsers,\n commentId,\n replies\n };\n\n return updateCommentRequest({collaborationPath, tenant, data})\n .then((comment) => updateCommentInState({...comment, replies}))\n .catch(catchErrorInRequest)\n .finally(() => setSending(false));\n },\n [collaborationPath, tenant]\n );\n\n const deleteComment = useCallback(\n ({uri, commentId}) => {\n setSending(true);\n\n deleteCommentRequest({collaborationPath, tenant, commentId})\n .then(() => deleteCommentFromState(commentId, uri))\n .catch(catchErrorInRequest)\n .finally(() => setSending(false));\n },\n [collaborationPath, tenant]\n );\n\n const updateReplyInState = useCallback((reply: Reply, uri: string, commentId: string, isDeleteReply?: boolean) => {\n const newStatus = reply.action === 'resolve' ? 'resolved' : 'open';\n const {replyId} = reply;\n if (newStatus === 'resolved') {\n setCurrentComment((prevCurrentComment) => {\n if (prevCurrentComment) {\n return null;\n }\n });\n } else {\n setCurrentComment((prevCurrentComment) => {\n if (prevCurrentComment) {\n return {\n ...prevCurrentComment,\n replies: isDeleteReply\n ? filterReplies(replyId, prevCurrentComment.replies)\n : [...prevCurrentComment.replies, reply]\n };\n }\n });\n }\n\n setCommentsMap((prevCommentsMap) => ({\n ...prevCommentsMap,\n [uri]: (prevCommentsMap[uri] || []).map((comment) => {\n if (comment.commentId === commentId) {\n return {\n ...comment,\n status: newStatus,\n replies: isDeleteReply ? comment.replies - 1 : comment.replies + 1\n };\n }\n\n return comment;\n })\n }));\n\n setComments((prevComments) => {\n return prevComments.map((comment) => {\n if (comment.commentId === commentId) {\n return {\n ...comment,\n status: newStatus,\n replies: isDeleteReply\n ? filterReplies(reply.replyId, comment.replies)\n : [...comment.replies, reply]\n };\n }\n\n return comment;\n });\n });\n }, []);\n\n const deleteReply = useCallback(\n ({uri, commentId, reply}) => {\n setSending(true);\n\n deleteReplyRequest({collaborationPath, tenant, commentId, replyId: reply.replyId})\n .then(() => updateReplyInState(reply, uri, commentId, true))\n .catch(catchErrorInRequest)\n .finally(() => setSending(false));\n },\n [collaborationPath, updateReplyInState, tenant]\n );\n\n const editReplyInState = useCallback((reply: Reply, commentId: string) => {\n setCurrentComment((prevCurrentComment) => {\n if (prevCurrentComment) {\n return {\n ...prevCurrentComment,\n replies: getUpdatedReplies(prevCurrentComment, reply)\n };\n }\n });\n\n setComments((prevComments) => {\n return prevComments.map((comment) => {\n if (comment.commentId === commentId) {\n return {\n ...comment,\n replies: getUpdatedReplies(comment, reply)\n };\n }\n\n return comment;\n });\n });\n }, []);\n\n const editReply = useCallback(\n ({content, namedUsers, commentId, replyId}) => {\n setSending(true);\n const data = {\n content,\n namedUsers\n };\n return updateReplyRequest({collaborationPath, tenant, commentId, replyId, data})\n .then((reply) => editReplyInState(reply, commentId))\n .catch(catchErrorInRequest)\n .finally(() => setSending(false));\n },\n [collaborationPath, tenant, editReplyInState]\n );\n\n const createReply = useCallback(\n ({content, namedUsers, commentId, action, uri}) => {\n setSending(true);\n\n const data = {\n content,\n action,\n namedUsers\n };\n\n return createReplyRequest({collaborationPath, tenant, commentId, data})\n .then(([reply]) => updateReplyInState(reply, uri, commentId))\n .catch(catchErrorInRequest)\n .finally(() => setSending(false));\n },\n [collaborationPath, tenant, updateReplyInState]\n );\n\n const resolveThread = useCallback(\n ({commentId, uri}) => {\n createReply({content: '', namedUsers: [], commentId, action: 'resolve', uri});\n },\n [createReply]\n );\n\n const reOpenThread = useCallback(\n ({commentId, uri}) => {\n createReply({content: '', namedUsers: [], commentId, action: 'reopen', uri});\n },\n [createReply]\n );\n\n const clearCurrentComment = useCallback(() => {\n setCurrentComment(null);\n }, []);\n\n const getCommentState = (uri: string, commentUri: string) => pathOr({}, [uri, commentUri], collaborationStateMap);\n\n const clearCommentState = (uri: string, commentUri: string) =>\n setCollaborationStateMap(dissocPath([uri, commentUri]));\n\n const updateCommentState = (uri: string, commentUri: string, newState: CommentState) => {\n setCollaborationStateMap((prevCollaborationStateMap) => {\n const pathToCommentState = [uri, commentUri];\n const prevCommentState = path(pathToCommentState, prevCollaborationStateMap);\n return assocPath(pathToCommentState, mergeRight(prevCommentState, newState), prevCollaborationStateMap);\n });\n };\n\n return {\n clearCurrentComment,\n comments,\n commentsMap,\n getCommentState,\n updateCommentState,\n clearCommentState,\n createComment,\n createReply,\n currentComment,\n deleteComment,\n editComment,\n getComment,\n getComments,\n getCommentsCount,\n loading,\n objectTypes,\n pageToken,\n reOpenThread,\n resolveThread,\n sending,\n deleteReply,\n editReply\n };\n};\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 {SmallIconButton} from '@reltio/components';\nimport {useStyles} from './styles';\n\ntype Props = {\n title: React.ReactNode;\n className: string;\n onClose: () => void;\n children?: React.ReactNode;\n};\n\nexport const RightSidePanel = ({title, className, onClose, children}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={className}>\n <div className={styles.header}>\n <SmallIconButton className={styles.closeButton} icon={CloseIcon} onClick={onClose} />\n {title}\n </div>\n {children}\n </div>\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});\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","import React, {useEffect, useRef, useState} from 'react';\nimport MergeTooltip from './MergeTooltip';\nimport {SankeyNode} from '../../types/SankeyChartData';\nimport {useCrosswalkColor, useCrosswalkHighlight} from '@reltio/components';\nimport {groupBy, prop, pipe, map, head, last, max, min} from 'ramda';\nimport {useStyles} from './styles';\n\ntype Props = {\n nodeWidth: number;\n node: SankeyNode;\n highlightEnabled: boolean;\n isColored: boolean;\n};\n\nexport const Node = ({node, nodeWidth, highlightEnabled, isColored}: Props) => {\n const styles = useStyles();\n const [labelX, setLabelX] = useState(0);\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 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 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 />\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};\n\nconst SankeyChart = ({width, height, data, accentContributors}: Props) => {\n const [isDragging, setDragging] = 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 />\n )),\n [nodes, accentContributors, nodeWidth, width, height]\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.PointerEvent) => {\n const left = event.pageX;\n const offsetX = left - previousPageX;\n setPreviousPageX(left);\n return offsetX;\n };\n\n const onDown = (event: React.PointerEvent) => {\n event.preventDefault();\n setDragging(true);\n extractPositionDelta(event);\n };\n const onMove = (event: React.PointerEvent) => {\n if (!isDragging) return;\n const left = extractPositionDelta(event);\n setOffsetX(offsetX + left);\n };\n const onUp = () => setDragging(false);\n\n const pointerEvents = isDragging ? 'none' : 'auto';\n const cursor = isDragging ? 'move' : 'default';\n\n return (\n <svg\n width={width}\n height={height}\n cursor={cursor}\n onPointerDown={onDown}\n onPointerMove={onMove}\n onPointerUp={onUp}\n onPointerLeave={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 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};\n\nconst CrosswalkTreeView = ({crosswalkTree, entityLabel, visibleCrosswalks, accentContributors}: Props) => {\n const styles = useStyles();\n const sankeyData = getSankeyData(crosswalkTree, entityLabel, visibleCrosswalks);\n\n return (\n <div className={styles.graph}>\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 />\n )}\n </ReactResizeDetector>\n </div>\n );\n};\n\nexport default memo(CrosswalkTreeView);\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: \"svg1833706754a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg1833706754b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg1833706754a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg1833706754b)\",\n d: \"M0 0h24v24H0z\"\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 {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {\n AttributeType,\n checkCanCreateCrosswalk,\n checkCanDeleteCrosswalk,\n checkCanEditCrosswalk,\n checkMetadataPermission,\n Contributor,\n CrosswalkBase,\n Entity,\n getEntityType,\n Metadata,\n MetadataPermissions,\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 contributors: Contributor[];\n accentContributors?: boolean;\n selectedAttributeTypes?: AttributeType[];\n onChangeVisibleCrosswalks: (visibleCrosswalks: CrosswalkBase[]) => void;\n readOnly?: boolean;\n canUnmerge: 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 contributors,\n selectedAttributeTypes,\n onChangeVisibleCrosswalks,\n readOnly,\n canUnmerge,\n onAddCrosswalk = noop,\n onEditCrosswalk = noop,\n onDeleteCrosswalk = noop,\n onUnmergeContributor = noop,\n onUnsubscribeContributor = noop\n}: Props) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityType: TEntityType = getEntityType(metadata, entity.type);\n\n const styles = useStyles();\n\n const rowsData = useMemo(() => buildTableRowsData(entity, contributors, selectedAttributeTypes), [\n entity,\n contributors,\n selectedAttributeTypes\n ]);\n const [expandedByContributor, setExpandedByContributor] = useState<{[contributorUri: string]: string[]}>({});\n const visibleCrosswalks = useMemo(() => collectVisibleCrosswalks(rowsData, expandedByContributor), [\n rowsData,\n 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={\n readOnly || !checkMetadataPermission(MetadataPermissions.UNMERGE, entityType)\n }\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 InfoIcon from '@material-ui/icons/Info';\nimport i18n from 'ui-i18n';\nimport {isEmpty} from 'ramda';\nimport {\n AttributeType,\n calculateCrosswalkTreeDeep,\n Contributor,\n Crosswalk,\n CrosswalkBase,\n CrosswalkTree,\n DataTenant,\n Entity,\n getLabel,\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 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\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 />\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 onChangeVisibleCrosswalks={setVisibleCrosswalks}\n canUnmerge={canUnmerge}\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 tabs: {\n marginLeft: '1px'\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 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 ResizablePanes,\n ScreenProfileBand,\n SideButtonsPanel,\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 {equals, pipe, pluck, propEq, reject} from 'ramda';\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\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\nconst MIN_PANE1_SIZE = 480;\nconst MIN_PANE2_SIZE = 480;\nconst MAX_PANE1_SIZE = -MIN_PANE2_SIZE;\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 [activeTab, setActiveTab] = useState(0);\n const [isCrosswalkTreeLoading, setIsCrosswalkTreeLoading] = useState(false);\n const toggleActive = (newIndex: number) => setActiveTab((active) => (active === newIndex ? null : newIndex));\n const isSidePanelOpen = activeTab !== null;\n\n const {\n survivorshipGroups,\n currentSurvivorshipGroupUri,\n onChangeSurvivorshipGroup,\n entity,\n isDefaultSurvivorshipGroupUri,\n isLoading: isEntityLoading\n } = useEntityWithSurvivorshipGroups(defaultEntity);\n\n const isHistoryTabActive = activeTab === ActivePanel.History;\n const {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({isHistoryTabActive, entity});\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 [paneSize, setPaneSize] = useState(MAX_PANE1_SIZE);\n const handlePaneSizeChange = useCallback(({percentageSize}) => setPaneSize(percentageSize), []);\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 onShowMessage = useCallback((message: string, entity?: Entity) => {\n showSnackbarMessage(entity ? <TreeActionSnackbar entity={entity} message={message} /> : message);\n }, []);\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 {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 displayProps = useCrosswalksDisplay({activeMode, contributors, entity});\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\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 <ResizablePanes\n className={styles.resizablePanesWrapper}\n orientation=\"vertical\"\n size={isSidePanelOpen ? paneSize : '100%'}\n minSize={MIN_PANE1_SIZE}\n maxSize={MAX_PANE1_SIZE}\n allowResize={isSidePanelOpen}\n onChange={handlePaneSizeChange}\n >\n <div className={styles.pane}>\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 </div>\n <RightSidePanel\n className={styles.pane}\n title={tabs[activeTab]?.title}\n onClose={() => toggleActive(activeTab)}\n >\n {tabs[activeTab]?.content}\n </RightSidePanel>\n </ResizablePanes>\n </DndProvider>\n </CrosswalksDisplayProvider>\n <SideButtonsPanel\n className={styles.tabs}\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(tabs)}\n onButtonClick={toggleActive}\n activeIndexId={activeTab}\n />\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} 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 {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 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","makeStyles","textOverflow","overflow","whiteSpace","padding","fontSize","lineHeight","marginRight","borderRadius","flexShrink","fontWeight","entity","className","size","styles","useStyles","metadata","useSelector","mdmModule","entityTypeUri","type","entityType","getEntityType","entityTypeColor","getPropWithInheritance","theme","entityTypeLabel","getEntityTypeLabel","ExpandedValueTooltip","value","placement","Typography","style","backgroundColor","color","utils","classnames","component","profileBandWrapper","profileBand","display","alignItems","boxShadow","marginBottom","content","minHeight","inactive","background","inactiveBackground","profileIcon","imageProfileIcon","width","height","profileInfo","flexDirection","flex","badge","label","letterSpacing","palette","text","primary","wordBreak","marginTop","secondaryLabel","marginLeft","businessCard","secondary","specialInfo","justifyContent","flexWrap","entityId","cursor","textDecoration","children","classes","renderLabel","identity","showEntityId","handleCopyEntityIdToClipboard","useCallback","navigator","clipboard","writeText","getEntityId","isNil","getLabel","businessCardText","getBusinessCardAttributesText","isActive","isActiveObject","entityUri","uri","EntityAvatar","key","avatarClassName","imageClassName","variant","EntityTypeBadge","isTempUri","Tooltip","title","i18n","onClick","container","link","LinkWithTooltip","withTooltip","Link","ProfileBandNavigationWidget","total","onPrev","onNext","onSearchResultsClick","isPrevDisabled","isNextDisabled","labels","useContext","LabelsContext","OPEN_RESULTS","SEARCH_RESULT","SEARCH_RESULTS","NEXT_PROFILE","PREVIOUS_PROFILE","mergeRight","underline","tooltipTitle","formatNumberAsMetric","SmallIconButton","icon","KeyboardArrowLeft","disabled","showForDisabled","KeyboardArrowRight","MainSearchProvider","constructor","data","query","sortField","sortOrder","tenant","searchTenant","apiPath","dtssPath","globalSearchRequestOptions","isDT","this","getQueryFilter","rawFilter","getEntities","filters","options","requestFilters","requestOptions","sort","order","select","scoreEnabled","getFilteredEntitiesFromDataTenant","customerTenant","dataTenant","getFilteredEntities","checkEntity","filter","fieldName","values","offset","max","then","entities","length","requestEntities","requestTotal","getTotalFromDataTenant","getTotals","json","GraphSearchProvider","searchBody","allFilters","getGraphSearchEntities","buildFilterQueryString","from","getGraphSearchCount","count","getNewUris","cache","pipe","map","prop","reject","includes","useSearchNavigation","safeCheckEntityPromise","useSafePromise","safeRequestTotalPromise","safeRequestEntitiesPromise","index","state","viewId","ViewIdContext","dispatch","useDispatch","loading","setLoading","useState","searchProvider","useMemo","getSearchProvider","updateNavigationData","mdmModuleSearch","openEntity","preparedUri","getEntityUriForLink","mdmModuleUi","source","perspectiveId","useEffect","listenToActions","useActionsHook","stopListeningActions","action","searchNavigationData","payload","winnerUri","losersUris","updatedSearchNavigationData","winnerIndex","indexOf","uriIndex","splice","replaceWithWinnerUri","losersInCache","updatedTotal","updatedIndex","loser","updatedCache","removeLosersUris","applyMergeToSearchNavigationData","requestNextPage","newIndex","newUris","concat","finally","requestPrevPage","Math","min","stepForwardWithCheck","cacheIndex","isExists","clearedCache","stepBackWithCheck","ProfileBandNavigation","mode","isViewMode","useSearchNavigationVisibility","paddingTop","paper","active","fade","main","position","left","buttonWrapper","margin","SideButtonsPanel","buttonsProps","activeIndexId","onButtonClick","iconButtonClasses","id","buttonProps","root","slice","cancelButton","historyEvent","onCancel","profile","aStamp","Button","ActionsHookContext","createContext","displayName","ActionsHookProvider","hook","Provider","Error","React","filterReplies","replyId","replies","reply","getUpdatedReplies","comment","changedReplyIndex","findIndex","newReplies","defaultObjectIds","catchErrorInRequest","e","console","error","useCollaboration","objectIds","objectTypes","enabled","mdm","collaborationPath","isCollaborationEnabled","pageToken","setPageToken","comments","setComments","commentsMap","setCommentsMap","currentComment","setCurrentComment","sending","setSending","collaborationStateMap","setCollaborationStateMap","addCommentsToCommentsMap","currentCommentsMap","getCommentsCount","shouldResetCommentsMap","onError","warn","getCommentsCountRequest","andThen","props","fromPairs","otherwise","uris","getComments","relatedObjectUri","getCommentsRequest","items","nextPageToken","prevComments","uniqBy","catch","getComment","commentId","getCommentRequest","createComment","namedUsers","objectType","relatedObjectUris","objectId","visibility","permanentLink","window","location","href","encodeURIComponent","createCommentRequest","prevCommentsMap","status","addCommentToState","editComment","updateCommentRequest","when","propEq","always","updateCommentInState","deleteComment","deleteCommentRequest","c","deleteCommentFromState","updateReplyInState","isDeleteReply","newStatus","prevCurrentComment","deleteReply","deleteReplyRequest","editReplyInState","editReply","updateReplyRequest","createReply","createReplyRequest","resolveThread","reOpenThread","clearCurrentComment","getCommentState","commentUri","pathOr","updateCommentState","newState","prevCollaborationStateMap","pathToCommentState","prevCommentState","path","assocPath","clearCommentState","dissocPath","useSavedState","getSavedState","isLoaded","setIsLoaded","savedState","setSavedState","_","header","borderBottom","closeButton","RightSidePanel","onClose","CloseIcon","LegendMode","sumValues","links","sum","nodes","sankeyLayout","nodeWidth","smallestNodeMaxHeight","smallestNodeMinHeight","nodePadding","sankey","graph","forEach","node","sourceLinks","targetLinks","push","target","computeNodeLinks","computeNodeValues","nextNodes","remainingNodes","x","dx","w","computeNodeBreadths","nodesByBreadth","groupBy","toPairs","a","b","nth","ky","reduce","Infinity","i","y","dy","initializeNodeDepth","y0","n","y1","last","computeNodeDepths","computeLinkDepths","ty","correctNodesDepth","result","linksByUuid","l","crosswalk","uuid","sourceNodes","j","resultByUuid","newSources","sizeForNewSources","sy","setNodeWidth","setNodePadding","setSmallestNodeMaxHeight","setSmallestNodeMinHeight","setSize","newSize","update","curvature","d","lastLine","x0","x1","xi","t","x2","x3","appendix","arguments","safeData","safeNodes","getSafeNode","originalNode","safeLinks","shallowCopy","userSelect","tooltipRow","tooltipIcon","stroke","strokeWidth","strokeOpacity","rootNode","transform","user","time","CalendarToday","Person","LightArrowTooltip","highlightEnabled","isColored","labelX","setLabelX","textRef","useRef","name","crosswalks","merges","firstCrosswalk","isDimmed","highlightCrosswalk","removeHighlight","useCrosswalkHighlight","useCrosswalkColor","startNodeHeight","nodeHeight","textWidth","current","clientWidth","ref","fill","opacity","onMouseEnter","onMouseLeave","timeMap","sources","start","end","acc","head","fillOpacity","renderMergeNodes","accentContributors","isDragging","setDragging","previousPageX","setPreviousPageX","offsetX","setOffsetX","useSankey","sankeyNodes","sankeyLinks","extractPositionDelta","event","pageX","onUp","pointerEvents","onPointerDown","preventDefault","onPointerMove","onPointerUp","onPointerLeave","filterUnits","isCrosswalkDisplayed","curry","displayedCrosswalks","some","eqCrosswalks","filterDisplayedCrosswalks","tree","evolve","losers","addCrosswalkUniqueId","addIdToSubtree","processTree","processSubTree","parentIndex","mergesCrosswalks","chain","Date","now","linkedNodes","uniq","boxSizing","memo","crosswalkTree","entityLabel","visibleCrosswalks","sankeyData","getSankeyData","refreshMode","refreshRate","handleWidth","handleHeight","_extends","Object","assign","prototype","hasOwnProperty","call","apply","viewBox","version","xmlns","xmlnsXlink","fillRule","xlinkHref","mask","paddingRight","focusedIcon","isFocused","paddingLeft","contributorUri","focusable","contributorActions","onToggleFocus","VisibilityIcon","getLastUriPart","Spacer","show","contributorColor","border","borderLeft","top","bottom","editor","accentContributor","crosswalksBySources","expandedSources","canUnmerge","disableAddCrosswalk","disableEditCrosswalk","disableDeleteCrosswalk","disableUnmergeContributor","onUnmerge","onEdit","onDelete","onAdd","onToggleSourceExpanded","onUnsubscribeContributor","getContributorColor","dataTenants","scrollToCrosswalk","useHighlightedCrosswalks","find","propOr","flatten","scrollIntoView","behavior","showEditor","setShowEditor","contributorCrosswalk","pluck","CrosswalkType","toggleCrosswalkFocus","useCrosswalkFocus","allContributorCrosswalks","dataTenantForExternalCrosswalk","getDataTenantFromCrosswalks","AddIcon","UnmergeIcon","UnsubscribeIcon","crosswalksByTypes","SourceCrosswalksRow","showCrosswalkColors","crosswalksFocusEnabled","expanded","onToggleExpanded","CrosswalkEditor","table","overflowY","overflowX","tableRow","maxWidth","contributors","selectedAttributeTypes","onChangeVisibleCrosswalks","readOnly","onAddCrosswalk","noop","onEditCrosswalk","onDeleteCrosswalk","onUnmergeContributor","rowsData","entityCrosswalks","relationCrosswalks","getRelationCrosswalks","contributor","isEmptyValue","ownerType","relationCrosswalk","entityCrosswalk","groupCrosswalksByTypesAndSources","buildTableRowsData","expandedByContributor","setExpandedByContributor","isExpandedSource","collectVisibleCrosswalks","handleDelete","crosswalkId","handleEdit","params","checkCanCreateCrosswalk","checkCanEditCrosswalk","checkCanDeleteCrosswalk","checkMetadataPermission","MetadataPermissions","sourceUri","unless","has","assoc","ifElse","without","append","hintIcon","verticalAlign","checkedIcon","right","selectedTree","SelectableTree","coloredCrosswalks","selected","onSelect","getCrosswalkColor","getUniqueCrosswalkColor","getCrosswalkId","Info","CheckCircle","dialogContainer","dialogTitle","dialogContent","trees","UnmergeDialog","unmergeOperation","setUnmergeOperation","UnmergeOperation","getColoredCrosswalks","includeMerges","collectCrosswalksFromContributor","Dialog","open","DialogTitle","DialogContent","toUpperCase","DialogActions","UnsubscribeDialog","canUnsubscribe","modeSwitcher","infoIcon","hint","alignSelf","hintText","crosswalksList","divider","pane","resizablePanesWrapper","flexGrow","activeMode","onChangeMode","tableProps","viewRef","paneSize","setPaneSize","handlePaneSizeChange","percentageSize","contributorForUnmerge","setContributorForUnmerge","unsubscribeInfo","setUnsubscribeInfo","crosswalkTreeDeep","calculateCrosswalkTreeDeep","maxPaneHeight","clientHeight","modes","Crosswalk","Source","Contributor","setVisibleCrosswalks","operationType","ModeSwitcher","modeId","onChange","ResizablePanes","orientation","minSize","maxSize","allowResize","isEmpty","masktype","maskUnits","clipRule","showErrorMessage","ErrorPopup","message","getRequestErrorMessage","cx","cy","r","maskType","y2","gradientUnits","stopColor","stopOpacity","default","info","snackbarMessage","snackbarIcon","uiPath","generateEntityUrl","UrlGeneratorsContext","entityLink","paddingBottom","description","RulesetOption","innerRef","innerProps","MenuItem","RulesetsMenuList","getStyles","maxHeight","RulesetsSelector","survivorshipGroups","currentSurvivorshipGroupUri","group","DropDownSelector","components","Option","MenuList","sourcesView","fontFamily","tabs","headerDivider","attributesTable","ActivePanel","connect","config","defaultEntity","saveState","setActiveMode","activeTab","setActiveTab","isCrosswalkTreeLoading","setIsCrosswalkTreeLoading","toggleActive","isSidePanelOpen","onChangeSurvivorshipGroup","isDefaultSurvivorshipGroupUri","isLoading","isEntityLoading","defaultSurvivorshipGroupUri","setCurrentSurvivorshipGroupUri","setEntity","setIsLoading","safePromise","survivorshipGroupUri","getEntityBySurvivorshipGroupUri","useEntityWithSurvivorshipGroups","isHistoryTabActive","History","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","persistedEntity","historySlice","useHistorySlice","selectedAttrTypes","setSelectedAttrTypes","useDidUpdateEffect","undefined","SnackbarRenderer","showSnackbarMessage","useSnackbar","anchorOrigin","vertical","horizontal","showDismiss","visibleColumns","setVisibleColumns","hasVisibleColumnsChanged","equals","onCrosswalkTreeLoaded","reload","reloadCrosswalkTree","onSuccess","setCrosswalkTree","loadData","getCrosswalkTree","results","useCrosswalkTree","aEntity","collectContributorsFromTree","refreshEntity","refreshData","onShowMessage","modifiedEntity","crosswalksMap","newlyCreatedAttributes","onDeleteAttribute","onPinAttribute","onIgnoreAttribute","onEditAttribute","onAddAttribute","useModifiedEntity","onModify","addCrosswalk","deleteCrosswalk","editCrosswalk","unmergeContributor","unsubscribeContributor","onLoad","useCrosswalkActions","handleAction","request","unmergeContributorRequest","response","unsubscribeEntityFromDataTenantEntity","successful","sourceTable","useCrosswalkTreeActions","errorCode","ApiErrorCode","historyFilter","onApplyFilter","isHistoryLoading","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","displayProps","getCrosswalkColorForActiveMode","getSourceColor","findContributorForCrosswalk","highlightedCrosswalks","setHighlightedCrosswalks","highlightedCrosswalksCache","applyHighlightedCrosswalks","debounce","cacheHighlightedCrosswalks","arr","setCrosswalkHighlighted","highlighted","focusedCrosswalks","setFocusedCrosswalks","calculateFocusedCrosswalks","prev","next","prevCrosswalk","any","nextCrosswalk","prevValue","useCrosswalksDisplay","Legend","LegendIcon","HistoryIcon","HistoryHeader","HistoryView","contributorsUris","HistoryPanelEmptyState","additionalHeaderItems","Divider","DndProvider","backend","HTML5Backend","CrosswalkDragLayer","ScreenProfileBand","attributeUris","AttributesTable","onChangeVisibleColumns","onSelectAttributeTypes","onPin","onIgnore","activeSurvivorshipGroupUri","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","store","onResize","getSavedStatePromisified","promisifyCallback","StylesProvider","MuiPickersUtilsProvider","MomentUtils","floor"],"sourceRoot":""}
1
+ {"version":3,"file":"6880.js","mappings":"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","sources":["webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTable/HOCs/withTableContext.js","webpack://@reltio/remotes/../components/src/components/EntityTypeBadge/styles.ts","webpack://@reltio/remotes/../components/src/components/EntityTypeBadge/EntityTypeBadge.tsx","webpack://@reltio/remotes/../components/src/components/ProfileBand/styles.ts","webpack://@reltio/remotes/../components/src/components/ProfileBand/ProfileBand.tsx","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/styles.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/ProfileBandNavigationWidget.tsx","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/searchProviders/MainSearchProvider.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/searchProviders/GraphSearchProvider.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/helpers/index.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/hooks/useSearchNavigation.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/searchProviders/SearchProviderFactory.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/ProfileBandNavigation.tsx","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/hooks/useSearchNavigationVisibility.ts","webpack://@reltio/remotes/../components/src/components/SideIconPanel/styles.ts","webpack://@reltio/remotes/../components/src/components/SideIconPanel/SideButtonsPanel.tsx","webpack://@reltio/remotes/../components/src/components/history/ProfileBandHistory/styles.ts","webpack://@reltio/remotes/../components/src/components/history/ProfileBandHistory/ProfileBandHistory.tsx","webpack://@reltio/remotes/../components/src/contexts/ActionsHookContext/index.tsx","webpack://@reltio/remotes/../components/src/contexts/EntityLoadingIndicationContext/index.tsx","webpack://@reltio/remotes/../components/src/contexts/LabelsContext/index.ts","webpack://@reltio/remotes/../components/src/hooks/useCollaboration.ts","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/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/icons/notMatch.svg","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/useCrosswalkTreeActions.ts","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalksDisplay.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 {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles({\n 'entityType-overflow': {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap'\n },\n\n 'entityType-small': {\n padding: '1px 4px',\n fontSize: '10px',\n lineHeight: 'normal',\n marginRight: '12px',\n borderRadius: '2px',\n flexShrink: 0\n },\n 'entityType-medium': {\n padding: '2px 8px 3px',\n borderRadius: '2px',\n fontSize: '13px',\n fontWeight: 500,\n lineHeight: '15px',\n marginRight: '16px',\n flexShrink: 0\n }\n});\n\nexport default useStyles;\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport {getEntityType, getEntityTypeLabel, getPropWithInheritance, theme, utils, Entity} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport ExpandedValueTooltip from '../ExpandedValueTooltip/ExpandedValueTooltip';\nimport useStyles from './styles';\n\ntype Props = {\n entity: Entity;\n className?: string;\n size?: 'small' | 'medium';\n};\n\nconst EntityTypeBadge = ({entity, className, size = 'small'}: Props) => {\n const styles = useStyles();\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityTypeUri = entity.type;\n const entityType = getEntityType(metadata, entityTypeUri) || {};\n const entityTypeColor = getPropWithInheritance(metadata, entityType, 'typeColor') || theme.palette.primary.main;\n const entityTypeLabel = getEntityTypeLabel(metadata, entity);\n\n return (\n <ExpandedValueTooltip value={entityTypeLabel} placement=\"top\">\n <Typography\n style={{\n backgroundColor: entityTypeColor,\n color: utils.Colors.getColor(entityTypeColor) ? '#FFFFFF' : '#212121'\n }}\n className={classnames(styles[`entityType-${size}`], styles['entityType-overflow'], className)}\n component=\"div\"\n >\n {entityTypeLabel}\n </Typography>\n </ExpandedValueTooltip>\n );\n};\n\nexport default EntityTypeBadge;\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {inactiveBackground: string}) => ({\n profileBandWrapper: {\n // especially for IE (overflow fix)\n flexShrink: 0\n },\n profileBand: {\n display: 'flex',\n padding: '16px 12px 16px 16px',\n alignItems: 'flex-start',\n backgroundColor: '#fff',\n boxShadow: '0px 1px 0px rgba(0, 0, 0, 0.12)',\n marginBottom: '1px',\n '&:after': {\n // IE workaround for minHeight and centering items\n content: '\"\"',\n minHeight: 'inherit',\n fontSize: 0\n }\n },\n inactive: {\n background: theme.inactiveBackground\n },\n profileIcon: {\n marginRight: '12px'\n },\n imageProfileIcon: {\n width: '48px',\n height: '48px'\n },\n profileInfo: {\n display: 'flex',\n flexDirection: 'column',\n flex: '1 1 50%'\n },\n badge: {},\n label: {\n lineHeight: '1.2',\n letterSpacing: '0.25px',\n color: theme.palette.text.primary,\n wordBreak: 'break-word',\n\n '&+ $specialInfo': {\n marginTop: '4px'\n }\n },\n secondaryLabel: {\n display: 'inline-flex',\n color: theme.palette.text.primary,\n marginTop: '2px',\n lineHeight: '16px',\n fontSize: '14px',\n fontWeight: 400,\n\n '&+ $businessCard': {\n marginLeft: '12px'\n }\n },\n businessCard: {\n color: theme.palette.text.secondary,\n display: 'inline-flex',\n fontSize: '14px',\n marginTop: '4px',\n lineHeight: '1.2'\n },\n specialInfo: {\n display: 'flex',\n justifyContent: 'space-between',\n flexWrap: 'wrap',\n width: '100%',\n marginTop: '8px'\n },\n entityType: {\n display: 'flex',\n flexWrap: 'wrap'\n },\n entityId: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n whiteSpace: 'nowrap',\n cursor: 'pointer',\n '&:hover': {\n textDecoration: 'underline'\n }\n }\n}));\n\nexport default useStyles;\n","import React, {ReactNode, useCallback} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {isNil, identity} from 'ramda';\nimport {Typography as Typography} from '@material-ui/core';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport i18n from 'ui-i18n';\n\nimport {getLabel, isActiveObject, getBusinessCardAttributesText, getEntityId, isTempUri, Entity} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\n\nimport EntityAvatar from '../EntityAvatar/EntityAvatar';\nimport EntityTypeBadge from '../EntityTypeBadge/EntityTypeBadge';\n\nimport useStyles from './styles';\n\ntype Props = {\n className?: string;\n entity?: Entity;\n children?: ReactNode;\n classes?: Partial<ReturnType<typeof useStyles>>;\n renderLabel?: (label: string) => React.ReactNode;\n};\n\nconst ProfileBand = ({className, entity, children, classes, renderLabel = identity}: Props) => {\n const styles = useStyles({classes});\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const showEntityId = useSelector(mdmModule.selectors.getShowEntityId);\n const handleCopyEntityIdToClipboard = useCallback(() => {\n navigator.clipboard.writeText(getEntityId(entity));\n }, [entity]);\n\n if (isNil(entity)) {\n return null;\n }\n\n const label = getLabel(entity.label);\n const secondaryLabel = entity.secondaryLabel;\n const businessCardText = getBusinessCardAttributesText(metadata, entity);\n const isActive = isActiveObject(entity);\n const entityUri = entity.uri;\n const entityId = getEntityId(entity);\n return (\n <div className={classnames(styles.profileBandWrapper, className)}>\n <div\n className={classnames(styles.profileBand, {\n [styles.inactive]: !isActive\n })}\n data-entity-uri={entityUri}\n >\n <EntityAvatar\n key={entity.uri}\n entity={entity}\n avatarClassName={styles.profileIcon}\n imageClassName={styles.imageProfileIcon}\n />\n <div className={styles.profileInfo}>\n <div>\n <Typography variant=\"h6\" className={styles.label}>\n {renderLabel(label)}\n </Typography>\n {secondaryLabel && (\n <Typography variant=\"subtitle2\" className={styles.secondaryLabel}>\n {secondaryLabel}\n </Typography>\n )}\n {businessCardText && (\n <Typography variant=\"subtitle1\" className={styles.businessCard}>\n {businessCardText}\n </Typography>\n )}\n </div>\n <div className={styles.specialInfo}>\n <div className={styles.entityType}>\n <EntityTypeBadge entity={entity} size=\"medium\" className={styles.badge} />\n {!isTempUri(entityUri) && showEntityId && (\n <Tooltip title={i18n.text('Copy to clipboard')}>\n <Typography\n display=\"inline\"\n variant=\"body2\"\n className={styles.entityId}\n onClick={handleCopyEntityIdToClipboard}\n >\n {i18n.text('Entity ID')}: {entityId}\n </Typography>\n </Tooltip>\n )}\n </div>\n </div>\n </div>\n {children && <div>{children}</div>}\n </div>\n </div>\n );\n};\n\nexport default ProfileBand;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n container: {\n display: 'flex',\n alignItems: 'center'\n },\n link: {\n whiteSpace: 'nowrap',\n marginRight: '9px'\n }\n});\n","import React, {useContext} from 'react';\nimport {Link as Link} from '@material-ui/core';\nimport KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';\nimport KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport {mergeRight} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {LabelsContext} from '../../contexts/LabelsContext';\nimport {withTooltip} from '../../HOCs';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\n\nimport {useStyles} from './styles';\n\nconst LinkWithTooltip = withTooltip<typeof Link, {component: string}>(Link);\n\ntype Props = {\n className?: string;\n total?: number;\n onPrev?: () => void;\n onNext?: () => void;\n onSearchResultsClick?: () => void;\n isPrevDisabled?: boolean;\n isNextDisabled?: boolean;\n};\n\nconst ProfileBandNavigationWidget = ({\n className,\n total = 0,\n onPrev,\n onNext,\n onSearchResultsClick,\n isPrevDisabled,\n isNextDisabled\n}: Props) => {\n const styles = useStyles();\n const labels = useContext(LabelsContext);\n const {OPEN_RESULTS, SEARCH_RESULT, SEARCH_RESULTS, NEXT_PROFILE, PREVIOUS_PROFILE} = mergeRight(\n {\n OPEN_RESULTS: i18n.text('Go to search results'),\n SEARCH_RESULT: i18n.text('Search result'),\n SEARCH_RESULTS: i18n.text('Search results'),\n PREVIOUS_PROFILE: i18n.text('Go to previous profile'),\n NEXT_PROFILE: i18n.text('Go to next profile')\n },\n labels?.profileBand ?? {}\n );\n return (\n <div className={classnames(styles.container, className)}>\n <LinkWithTooltip\n className={styles.link}\n component=\"button\"\n variant=\"caption\"\n onClick={onSearchResultsClick}\n underline=\"none\"\n tooltipTitle={OPEN_RESULTS}\n >\n {formatNumberAsMetric(total, 1000000)} {total === 1 ? SEARCH_RESULT : SEARCH_RESULTS}\n </LinkWithTooltip>\n <SmallIconButtonWithTooltip\n size=\"L\"\n icon={KeyboardArrowLeft}\n tooltipTitle={PREVIOUS_PROFILE}\n onClick={onPrev}\n disabled={isPrevDisabled}\n showForDisabled\n />\n <SmallIconButtonWithTooltip\n size=\"L\"\n icon={KeyboardArrowRight}\n tooltipTitle={NEXT_PROFILE}\n onClick={onNext}\n disabled={isNextDisabled}\n showForDisabled\n />\n </div>\n );\n};\n\nexport {ProfileBandNavigationWidget, LinkWithTooltip};\n","import {\n Entity,\n getFilteredEntities,\n getFilteredEntitiesFromDataTenant,\n getTotals,\n getTotalFromDataTenant,\n TotalResponse\n} from '@reltio/mdm-sdk';\n\nimport {SearchProvider} from './SearchProvider';\n\nexport class MainSearchProvider implements SearchProvider {\n private readonly query;\n private readonly sortField;\n private readonly sortOrder;\n private readonly tenant;\n private readonly searchTenant;\n private readonly apiPath;\n private readonly dtssPath;\n private readonly globalSearchRequestOptions;\n\n constructor({\n data: {query, sortField, sortOrder},\n tenant,\n searchTenant,\n apiPath,\n dtssPath,\n globalSearchRequestOptions\n }) {\n this.query = query;\n this.sortField = sortField;\n this.sortOrder = sortOrder;\n this.tenant = tenant;\n this.searchTenant = searchTenant;\n this.apiPath = apiPath;\n this.dtssPath = dtssPath;\n this.globalSearchRequestOptions = globalSearchRequestOptions;\n }\n\n private isDT = () => this.tenant !== this.searchTenant;\n\n private getQueryFilter = () => ({rawFilter: this.query});\n\n private getEntities = (filters = [], options = {}): Promise<Entity[]> => {\n const requestFilters = [this.getQueryFilter(), ...filters];\n const requestOptions = {\n ...this.globalSearchRequestOptions,\n sort: this.sortField,\n order: this.sortOrder,\n select: 'uri,label,type',\n scoreEnabled: false,\n ...options\n };\n return this.isDT()\n ? getFilteredEntitiesFromDataTenant({\n filters: requestFilters,\n options: requestOptions,\n customerTenant: this.tenant,\n dataTenant: this.searchTenant,\n dtssPath: this.dtssPath\n })\n : getFilteredEntities(requestFilters, requestOptions);\n };\n\n checkEntity = (uri): Promise<boolean> => {\n return this.getEntities(\n [\n {\n filter: 'equals',\n fieldName: 'uri',\n values: [uri]\n }\n ],\n {offset: 0, max: 1}\n ).then((entities) => {\n return entities && entities.length > 0 && entities[0].uri === uri;\n });\n };\n\n requestEntities = (max, offset): Promise<Entity[]> => {\n return this.getEntities([], {offset, max});\n };\n\n requestTotal = (): Promise<number> => {\n const filters = [this.getQueryFilter()];\n const options = this.globalSearchRequestOptions;\n return (this.isDT()\n ? getTotalFromDataTenant({\n filters,\n options,\n customerTenant: this.tenant,\n dataTenant: this.searchTenant,\n dtssPath: this.dtssPath\n })\n : getTotals(filters, options)\n ).then((json) => (json as TotalResponse).total);\n };\n}\n","import {\n Entity,\n getGraphSearchCount,\n getGraphSearchEntities,\n getEntityId,\n buildFilterQueryString\n} from '@reltio/mdm-sdk';\n\nimport {SearchProvider} from './SearchProvider';\n\nexport class GraphSearchProvider implements SearchProvider {\n private readonly searchBody;\n private readonly tenant;\n private readonly apiPath;\n\n constructor({data, tenant, apiPath}) {\n this.searchBody = data;\n this.tenant = tenant;\n this.apiPath = apiPath;\n }\n\n private getEntities = (filters = [], options = {}): Promise<Entity[]> => {\n const allFilters = [\n {\n rawFilter: this.searchBody.filter\n },\n ...filters\n ];\n return getGraphSearchEntities({\n apiPath: this.apiPath,\n tenant: this.tenant,\n searchBody: {\n ...this.searchBody,\n filter: filters.length ? buildFilterQueryString()(allFilters) : this.searchBody.filter\n },\n options\n });\n };\n\n checkEntity = (uri): Promise<boolean> => {\n return this.getEntities(\n [\n {\n filter: 'equals',\n fieldName: 'id',\n values: [getEntityId({uri})]\n }\n ],\n {from: 0, max: 1}\n ).then((entities) => {\n return entities && entities.length > 0 && entities[0].uri === uri;\n });\n };\n\n requestEntities = (max, from): Promise<Entity[]> => {\n return this.getEntities([], {from, max});\n };\n\n requestTotal = (): Promise<number> => {\n return getGraphSearchCount({\n apiPath: this.apiPath,\n tenant: this.tenant,\n searchBody: this.searchBody\n }).then((json) => json.count);\n };\n}\n","import {SearchNavigationData} from '../types';\n\ntype Payload = {\n winnerUri: string;\n losersUris: string[];\n};\n\nconst replaceWithWinnerUri = (searchNavigationData: SearchNavigationData, winnerUri: string): SearchNavigationData => {\n let {uri, index, total, cache} = searchNavigationData;\n if (winnerUri && winnerUri !== uri) {\n if (cache && cache.includes(uri)) {\n cache = [...cache];\n const winnerIndex = cache.indexOf(winnerUri);\n let uriIndex = cache.indexOf(uri);\n if (winnerIndex >= 0) {\n cache.splice(winnerIndex, 1);\n total--;\n if (winnerIndex < uriIndex) {\n index--;\n }\n }\n uriIndex = cache.indexOf(uri);\n cache.splice(uriIndex, 1, winnerUri);\n }\n uri = winnerUri;\n return {\n ...searchNavigationData,\n uri,\n index,\n cache,\n total\n };\n }\n return searchNavigationData;\n};\n\nconst removeLosersUris = (searchNavigationData: SearchNavigationData, losersUris: string[]): SearchNavigationData => {\n const {cache = [], index, total, uri} = searchNavigationData;\n const losersInCache = losersUris.filter((uri) => cache.includes(uri));\n if (losersInCache.length === 0) {\n return searchNavigationData;\n }\n const updatedTotal = total - losersInCache.length;\n const uriIndex = cache.indexOf(uri);\n let updatedIndex = index;\n for (const loser of losersInCache) {\n const loserIndex = cache.indexOf(loser);\n if (loserIndex < uriIndex) {\n updatedIndex--;\n }\n }\n const updatedCache = cache.filter((uri) => !losersInCache.includes(uri));\n\n return {\n ...searchNavigationData,\n cache: updatedCache,\n index: updatedIndex,\n total: updatedTotal\n };\n};\n\nexport const applyMergeToSearchNavigationData = (\n searchNavigationData: SearchNavigationData,\n payload: Payload\n): SearchNavigationData => {\n const {winnerUri, losersUris = []} = payload;\n const updatedSearchNavigationData = replaceWithWinnerUri(searchNavigationData, winnerUri);\n return removeLosersUris(updatedSearchNavigationData, losersUris);\n};\n","import {useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {search as mdmModuleSearch, ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {getEntityUriForLink} from '@reltio/mdm-sdk';\nimport {map, pipe, prop, reject} from 'ramda';\nimport {useEntityLoadingIndication, useActionsHook, ViewIdContext} from '../../../contexts';\nimport {useSafePromise} from '../../../hooks';\nimport {getSearchProvider} from '../searchProviders/SearchProviderFactory';\nimport {SearchNavigationData, SearchProviderData} from '../types';\nimport {applyMergeToSearchNavigationData} from '../helpers';\n\nexport const REQUEST_PAGE_SIZE = 15;\n\nconst getNewUris = (entities, cache) =>\n pipe(\n map(prop('uri')),\n reject((uri) => cache.includes(uri))\n )(entities);\n\nconst useSearchNavigation = () => {\n const safeCheckEntityPromise = useSafePromise();\n const safeRequestTotalPromise = useSafePromise();\n const safeRequestEntitiesPromise = useSafePromise();\n const {\n uri,\n index,\n total,\n tenant: searchTenant,\n cache\n } = useSelector<unknown, SearchNavigationData>(mdmModule.selectors.getSearchNavigationData) || {};\n const {type, data} = useSelector<unknown, SearchProviderData>(mdmModule.selectors.getSearchProviderData) || {};\n const tenant = useSelector<unknown, string>(mdmModule.selectors.getTenant);\n const apiPath = useSelector<unknown, string>(mdmModule.selectors.getApiPath);\n const dtssPath = useSelector<unknown, string>(mdmModule.selectors.getDtssPath);\n const globalSearchRequestOptions = useSelector((state) =>\n mdmModule.selectors.getGlobalSearchRequestOptions(state, ['ovOnly'])\n );\n const {updateEntitiesNavigationLoadingState} = useEntityLoadingIndication();\n const viewId = useContext(ViewIdContext);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState<boolean>(false);\n\n const searchProvider = useMemo(\n () => getSearchProvider(type, {data, tenant, searchTenant, apiPath, dtssPath, globalSearchRequestOptions}),\n [type, data, tenant, searchTenant, apiPath, dtssPath, globalSearchRequestOptions]\n );\n\n const updateNavigationData = useCallback(\n (data: Partial<SearchNavigationData>) => {\n dispatch(mdmModuleSearch.actions.updateSearchNavigationDataFields(data));\n },\n [dispatch]\n );\n\n const openEntity = useCallback(\n (uri: string) => {\n const preparedUri = tenant !== searchTenant ? getEntityUriForLink({uri, dataTenant: searchTenant}) : uri;\n dispatch(mdmModuleUi.actions.openEntity({uri: preparedUri, viewId, source: 'navigation'}));\n },\n [dispatch, viewId, tenant, searchTenant]\n );\n\n const onSearchResultsClick = useCallback(() => {\n dispatch(mdmModuleUi.actions.openPerspective({perspectiveId: type, viewId}));\n }, [dispatch, type, viewId]);\n\n useEffect(() => {\n if (index >= total) {\n updateNavigationData({\n index: total - 1\n });\n } else if (index < 0) {\n updateNavigationData({\n index: 0\n });\n }\n }, [total, index, updateNavigationData]);\n\n const listenToActions = useActionsHook();\n\n useEffect(() => {\n const stopListeningActions = listenToActions((action, state) => {\n switch (action.type) {\n case mdmModuleSearch.constants.UPDATE_SEARCH_NAVIGATION_DATA_ON_MERGE: {\n const searchNavigationData: SearchNavigationData =\n mdmModule.selectors.getSearchNavigationData(state);\n if (searchNavigationData) {\n updateNavigationData(applyMergeToSearchNavigationData(searchNavigationData, action.payload));\n }\n break;\n }\n }\n });\n return () => stopListeningActions();\n }, [listenToActions, updateNavigationData]);\n\n const requestNextPage = useCallback(\n (cache: string[], total: number, index: number): Promise<void> => {\n setLoading(true);\n safeRequestTotalPromise(searchProvider.requestTotal()).then((total) => updateNavigationData({total}));\n\n const newIndex = index + 1;\n return safeRequestEntitiesPromise(searchProvider.requestEntities(REQUEST_PAGE_SIZE, newIndex))\n .then((entities) => {\n if (!entities) {\n return;\n }\n if (entities.length) {\n const newUris = getNewUris(entities, cache);\n if (newUris.length > 0) {\n updateNavigationData({\n cache: cache.concat(newUris),\n uri: newUris[0],\n index: newIndex + entities.length - newUris.length\n });\n openEntity(newUris[0]);\n return;\n } else if (index + entities.length < total - 1) {\n return requestNextPage(cache, total - entities.length, index + entities.length);\n }\n }\n updateNavigationData({\n index: newIndex\n });\n })\n .finally(() => {\n setLoading(false);\n });\n },\n [searchProvider, updateNavigationData, openEntity]\n );\n\n const requestPrevPage = useCallback(\n (cache: string[], index: number): Promise<void> => {\n setLoading(true);\n safeRequestTotalPromise(searchProvider.requestTotal()).then((total) => updateNavigationData({total}));\n\n const newIndex = index - 1;\n const offset = Math.max(0, index - REQUEST_PAGE_SIZE);\n const max = REQUEST_PAGE_SIZE + Math.min(0, index - REQUEST_PAGE_SIZE);\n return safeRequestEntitiesPromise(searchProvider.requestEntities(max, offset))\n .then((entities) => {\n if (!entities) {\n return;\n }\n if (entities.length) {\n const newUris = getNewUris(entities, cache);\n if (newUris.length > 0) {\n updateNavigationData({\n cache: newUris.concat(cache),\n uri: newUris[newUris.length - 1],\n index: newIndex - (entities.length - newUris.length)\n });\n openEntity(newUris[newUris.length - 1]);\n return;\n } else if (index - entities.length > 0) {\n return requestPrevPage(cache, index - entities.length);\n }\n }\n updateNavigationData({\n index: 0\n });\n })\n .finally(() => {\n setLoading(false);\n });\n },\n [searchProvider, updateNavigationData, openEntity]\n );\n\n const stepForwardWithCheck = useCallback(\n (cache: string[], cacheIndex: number, total: number, index: number): Promise<void> | void => {\n if (cacheIndex < cache.length) {\n const uri = cache[cacheIndex];\n setLoading(true);\n return safeCheckEntityPromise(searchProvider.checkEntity(uri))\n .then((isExists) => {\n if (isExists) {\n updateNavigationData({\n index: index + 1,\n uri,\n cache,\n total\n });\n openEntity(uri);\n } else {\n const clearedCache = [...cache];\n clearedCache.splice(cacheIndex, 1);\n return stepForwardWithCheck(clearedCache, cacheIndex, total - 1, index);\n }\n })\n .finally(() => {\n setLoading(false);\n });\n } else if (index >= total - 1) {\n updateNavigationData({\n cache,\n total,\n index: total - 1\n });\n } else {\n return requestNextPage(cache, total, index);\n }\n },\n [searchProvider, updateNavigationData, openEntity, requestNextPage]\n );\n\n const stepBackWithCheck = useCallback(\n (cache: string[], cacheIndex: number, total: number, index: number): Promise<void> | void => {\n if (cacheIndex > -1) {\n const uri = cache[cacheIndex];\n setLoading(true);\n return safeCheckEntityPromise(searchProvider.checkEntity(uri))\n .then((isExists) => {\n if (isExists) {\n updateNavigationData({\n index: index - 1,\n uri,\n cache,\n total\n });\n openEntity(uri);\n } else {\n const clearedCache = [...cache];\n clearedCache.splice(cacheIndex, 1);\n return stepBackWithCheck(clearedCache, cacheIndex - 1, total - 1, index - 1);\n }\n })\n .finally(() => {\n setLoading(false);\n });\n } else if (index <= 0) {\n updateNavigationData({\n index: 0,\n cache,\n total\n });\n } else {\n return requestPrevPage(cache, index);\n }\n },\n [searchProvider, updateNavigationData, openEntity, requestPrevPage]\n );\n\n const onPrev = useCallback(() => {\n if (cache && uri) {\n const cacheIndex = cache.indexOf(uri) - 1;\n stepBackWithCheck(cache, cacheIndex, total, index);\n }\n }, [stepBackWithCheck, cache, uri, total, index]);\n\n const onNext = useCallback(() => {\n if (cache && uri) {\n const cacheIndex = cache.indexOf(uri) + 1;\n stepForwardWithCheck(cache, cacheIndex, total, index);\n }\n }, [stepForwardWithCheck, cache, uri, total, index]);\n\n useEffect(() => {\n updateEntitiesNavigationLoadingState(loading);\n }, [updateEntitiesNavigationLoadingState, loading]);\n\n useEffect(() => {\n return () => updateEntitiesNavigationLoadingState(false);\n }, []);\n\n const isPrevDisabled = loading || index <= 0;\n const isNextDisabled = loading || index >= total - 1;\n return {total, onPrev, onNext, onSearchResultsClick, isPrevDisabled, isNextDisabled};\n};\n\nexport {useSearchNavigation};\n","import {MainSearchProvider} from './MainSearchProvider';\nimport {GraphSearchProvider} from './GraphSearchProvider';\n\nexport const getSearchProvider = (type: string, options) => {\n switch (type) {\n case 'search':\n return new MainSearchProvider(options);\n case 'graphsearch':\n return new GraphSearchProvider(options);\n }\n};\n","import React from 'react';\n\nimport {ProfileBandNavigationWidget} from './ProfileBandNavigationWidget';\nimport {useSearchNavigation} from './hooks/useSearchNavigation';\nimport {useSearchNavigationVisibility} from './hooks/useSearchNavigationVisibility';\n\ntype Props = {\n className?: string;\n};\n\nconst ProfileBandNavigation = ({className}: Props) => {\n const {total, onPrev, onNext, onSearchResultsClick, isPrevDisabled, isNextDisabled} = useSearchNavigation();\n const isVisible = useSearchNavigationVisibility();\n return isVisible ? (\n <ProfileBandNavigationWidget\n className={className}\n total={total}\n onPrev={onPrev}\n onNext={onNext}\n onSearchResultsClick={onSearchResultsClick}\n isPrevDisabled={isPrevDisabled}\n isNextDisabled={isNextDisabled}\n />\n ) : null;\n};\n\nexport {ProfileBandNavigation};\n","import {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Entity, isViewMode} from '@reltio/mdm-sdk';\nimport {SearchNavigationData} from '../types';\n\nconst useSearchNavigationVisibility = () => {\n const {cache} = useSelector<unknown, SearchNavigationData>(mdmModule.selectors.getSearchNavigationData) || {};\n const mode = useSelector<unknown, string>(mdmModule.selectors.getMode);\n const entity = useSelector<unknown, Entity>(mdmModule.selectors.getEntity);\n\n return isViewMode(mode) && cache?.includes(entity?.uri);\n};\n\nexport {useSearchNavigationVisibility};\n","import {fade, makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0,\n width: '64px',\n paddingTop: '8px',\n backgroundColor: theme.palette.background.paper,\n boxShadow: '0 1px 1px 0 rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12), 0 1px 3px 0 rgba(0,0,0,0.2)'\n },\n active: {\n backgroundColor: fade(theme.palette.primary.main, 0.12),\n color: theme.palette.primary.main,\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n height: '42px',\n width: '3px',\n backgroundColor: theme.palette.primary.main,\n left: '-8px',\n borderRadius: '0 6px 6px 0'\n }\n },\n buttonWrapper: {\n position: 'relative',\n width: '48px',\n height: '44px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '6px',\n margin: '2px 8px',\n color: theme.palette.text.secondary\n }\n}));\n","import React, {ElementType} from 'react';\nimport classnames from 'classnames';\nimport {IconButtonProps} from '@material-ui/core/IconButton';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n buttonsProps: {\n icon: ElementType;\n tooltipTitle: string;\n id: number;\n disabled?: boolean;\n }[];\n classes?: {active?: string; buttonWrapper?: string} & IconButtonProps['classes'];\n activeIndexId: number;\n className?: string;\n onButtonClick: (id: number) => void;\n};\n\nexport const SideButtonsPanel = ({buttonsProps, activeIndexId, className, onButtonClick, classes = {}}: Props) => {\n const styles = useStyles();\n const {active, buttonWrapper, ...iconButtonClasses} = classes;\n\n return (\n <div className={classnames(styles.container, className)}>\n {buttonsProps.map(({id, ...buttonProps}) => {\n return (\n <SmallIconButtonWithTooltip\n {...buttonProps}\n classes={iconButtonClasses}\n size=\"S\"\n key={id}\n className={classnames(\n {[classnames(styles.active, active)]: activeIndexId === id},\n styles.buttonWrapper,\n buttonWrapper\n )}\n onClick={() => onButtonClick(id)}\n data-reltio-id={`reltio-profile-right-side-button-${id}`}\n />\n );\n })}\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n alignItems: 'flex-start'\n },\n slice: {\n fontWeight: 500\n },\n cancelButton: {\n width: '88px',\n flexShrink: 0,\n marginLeft: '15px'\n }\n});\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {Button as Button} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {pipe} from 'ramda';\nimport i18n from 'ui-i18n';\n\nimport {useStyles} from './styles';\n\nconst ProfileBandHistory = () => {\n const styles = useStyles();\n\n const historyEvent = useSelector(mdmModule.selectors.getHistoryEvent);\n const dispatch = useDispatch();\n const onCancel = pipe(profile.history.actions.clearHistoryEvent, dispatch);\n\n return historyEvent ? (\n <div className={styles.root}>\n <Typography component={'div'}>\n {i18n.text('You are viewing a historic slice:')}{' '}\n <span className={styles.slice}>{i18n.date(historyEvent.aStamp, 'llll')}</span>\n </Typography>\n <Button className={styles.cancelButton} variant=\"contained\" color=\"primary\" onClick={onCancel}>\n {i18n.text('Cancel')}\n </Button>\n </div>\n ) : null;\n};\n\nexport default ProfileBandHistory;\n","import React, {createContext, useContext} from 'react';\nimport {AnyAction} from 'redux';\n\ntype ActionsHook = (listener: (action: AnyAction, state: any) => void) => () => void;\n\nconst ActionsHookContext = createContext<ActionsHook | null>(null);\nActionsHookContext.displayName = 'ActionsHookContext';\n\ntype ProviderProps = {\n hook: ActionsHook;\n children: React.ReactNode;\n};\n\nexport const ActionsHookProvider = ({children, hook}: ProviderProps) => {\n return <ActionsHookContext.Provider value={hook}>{children}</ActionsHookContext.Provider>;\n};\n\nexport const useActionsHook = () => {\n const listenToActions = useContext(ActionsHookContext);\n if (!listenToActions) {\n throw new Error('ActionsHookContext must be provided');\n }\n return listenToActions;\n};\n","import React, {useState, useCallback, useContext} from 'react';\nimport {noop} from '../../core/utils';\n\ntype LoadingState = {\n entitiesNavigation: boolean;\n entity: boolean;\n};\n\ntype ContextValue = {\n isLoading: boolean;\n updateEntityLoadingState: (loading: boolean) => void;\n updateEntitiesNavigationLoadingState: (loading: boolean) => void;\n resetLoadingState: () => void;\n};\n\nconst EntityLoadingIndicationContext = React.createContext<ContextValue>({\n isLoading: false,\n updateEntityLoadingState: noop,\n updateEntitiesNavigationLoadingState: noop,\n resetLoadingState: noop\n});\n\nconst defaultLoadingState: LoadingState = {entitiesNavigation: false, entity: false};\n\nconst useEntityLoadingIndicationHook = () => {\n const [loadingState, setLoadingState] = useState(defaultLoadingState);\n\n const updateEntityLoadingState = useCallback((loading: boolean) => {\n setLoadingState((prevLoadingState) => ({...prevLoadingState, entity: loading}));\n }, []);\n\n const updateEntitiesNavigationLoadingState = useCallback((loading: boolean) => {\n setLoadingState((prevLoadingState) => ({...prevLoadingState, entitiesNavigation: loading}));\n }, []);\n\n const resetLoadingState = useCallback(() => {\n setLoadingState(defaultLoadingState);\n }, []);\n\n const isLoading = Object.values(loadingState).includes(true);\n\n return {isLoading, updateEntityLoadingState, updateEntitiesNavigationLoadingState, resetLoadingState};\n};\n\ntype Props = {\n children: React.ReactNode;\n};\n\nexport const EntityLoadingIndicationProvider = ({children}: Props) => {\n const value = useEntityLoadingIndicationHook();\n return <EntityLoadingIndicationContext.Provider value={value}>{children}</EntityLoadingIndicationContext.Provider>;\n};\n\nexport const useEntityLoadingIndication = () => {\n return useContext(EntityLoadingIndicationContext);\n};\n","import React from 'react';\n\ntype Labels = {\n profileBand: {\n OPEN_RESULTS?: string;\n SEARCH_RESULT?: string;\n SEARCH_RESULTS?: string;\n NEXT_PROFILE?: string;\n PREVIOUS_PROFILE?: string;\n };\n};\nexport const LabelsContext = React.createContext<Labels>({\n profileBand: {}\n});\n\nLabelsContext.displayName = 'LabelsContext';\n","import {useCallback, useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {\n andThen,\n fromPairs,\n map,\n otherwise,\n pipe,\n props,\n uniqBy,\n prop,\n propEq,\n when,\n always,\n assocPath,\n dissocPath,\n path,\n pathOr,\n mergeRight\n} from 'ramda';\nimport {\n CollaborationObjectTypes,\n Comment,\n CommentsMap,\n createComment as createCommentRequest,\n createReply as createReplyRequest,\n getComment as getCommentRequest,\n getCommentsCount as getCommentsCountRequest,\n Reply,\n updateComment as updateCommentRequest,\n updateReply as updateReplyRequest,\n deleteComment as deleteCommentRequest,\n deleteReply as deleteReplyRequest,\n getComments as getCommentsRequest,\n isTempUri,\n CollaborationStateMap,\n CommentState\n} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\n\ntype Props = {\n objectIds?: string[];\n objectTypes?: CollaborationObjectTypes[];\n enabled?: boolean;\n};\n\nconst filterReplies = (replyId: string, replies: Reply[]) => replies.filter((reply) => reply.replyId !== replyId);\n\nconst getUpdatedReplies = (comment: Comment, reply: Reply) => {\n const changedReplyIndex = comment.replies.findIndex(({replyId}) => replyId === reply.replyId);\n const newReplies = [...comment.replies];\n newReplies[changedReplyIndex] = reply;\n return newReplies;\n};\n\nconst defaultObjectIds = [];\nconst catchErrorInRequest = (e) => console.error('Collaboration error', e);\nexport const useCollaboration = ({objectIds = defaultObjectIds, objectTypes, enabled = true}: Props) => {\n const entity = useSelector(mdm.selectors.getEntity);\n const tenant: string = useSelector(mdm.selectors.getTenant);\n const collaborationPath: string = useSelector(mdm.selectors.getCollaborationPath);\n const isCollaborationEnabled = useSelector(mdm.selectors.isCollaborationEnabled) && enabled;\n\n const [pageToken, setPageToken] = useState<string | null>(null);\n const [comments, setComments] = useState<Comment[]>([]);\n const [commentsMap, setCommentsMap] = useState<CommentsMap>(null);\n const [currentComment, setCurrentComment] = useState<Comment | null>(null);\n const [sending, setSending] = useState(false);\n const [loading, setLoading] = useState(false);\n const [collaborationStateMap, setCollaborationStateMap] = useState<CollaborationStateMap>({});\n\n const addCommentsToCommentsMap = useCallback((commentsMap: CommentsMap) => {\n setCommentsMap((currentCommentsMap) => ({\n ...currentCommentsMap,\n ...commentsMap\n }));\n }, []);\n const entityUri = entity?.uri;\n const getCommentsCount = useCallback(\n (objectIds: string[], shouldResetCommentsMap = false) => {\n if (isCollaborationEnabled && entityUri && !isTempUri(entityUri)) {\n const onError = (e) => {\n console.warn('Collaboration error', e);\n setCommentsMap(null);\n };\n pipe(\n getCommentsCountRequest,\n andThen(map(props(['objectId', 'comments']))),\n andThen(fromPairs),\n andThen(shouldResetCommentsMap ? setCommentsMap : addCommentsToCommentsMap),\n otherwise(onError)\n )({uris: objectIds, tenant, collaborationPath});\n } else {\n setCommentsMap(null);\n }\n },\n [addCommentsToCommentsMap, collaborationPath, entityUri, isCollaborationEnabled, tenant]\n );\n\n useEffect(() => {\n getCommentsCount(objectIds, true);\n }, [objectIds, getCommentsCount]);\n\n const getComments = useCallback(\n (relatedObjectUri: string, pageToken?: string) => {\n getCommentsRequest({collaborationPath, tenant, relatedObjectUri, pageToken})\n .then(({items, nextPageToken}) => {\n setComments((prevComments) => {\n if (!pageToken) {\n return items;\n }\n return uniqBy(prop('commentId'), [...prevComments, ...items]);\n });\n setPageToken(nextPageToken);\n })\n .catch(catchErrorInRequest);\n },\n [collaborationPath, tenant]\n );\n\n const getComment = useCallback(\n (commentId: string) => {\n setLoading(true);\n\n getCommentRequest({collaborationPath, tenant, commentId})\n .then(setCurrentComment)\n .catch(catchErrorInRequest)\n .finally(() => setLoading(false));\n },\n [collaborationPath, tenant]\n );\n\n const addCommentToState = (comment: Comment, uri: string) => {\n setCurrentComment(comment);\n setCommentsMap((prevCommentsMap) => {\n return {\n ...prevCommentsMap,\n [uri]: [...(prevCommentsMap[uri] || []), {commentId: comment.commentId, replies: 0, status: 'open'}]\n };\n });\n setComments((prevComments) => [comment, ...prevComments]);\n };\n const updateCommentInState = (comment: Comment) => {\n setCurrentComment(comment);\n setComments(map(when(propEq('commentId', comment.commentId), always(comment))));\n };\n const deleteCommentFromState = (commentId: string, uri: string) => {\n setCurrentComment(null);\n setCommentsMap((prevCommentsMap) => {\n const comments = prevCommentsMap[uri] || [];\n return {\n ...prevCommentsMap,\n [uri]: comments.filter((c) => c.commentId !== commentId)\n };\n });\n setComments((prevComments) => {\n return prevComments.filter((comment) => comment.commentId !== commentId);\n });\n };\n const createComment = useCallback(\n ({content, namedUsers, objectType, uri, relatedObjectUris}) => {\n setSending(true);\n\n const data = {\n objectId: uri,\n content,\n relatedObjectUris,\n objectType,\n visibility: 'public',\n namedUsers,\n permanentLink: `${window.location.href}&commentId=${encodeURIComponent('{commentId}')}`\n };\n\n return createCommentRequest({collaborationPath, tenant, data})\n .then(([comment]) => addCommentToState(comment, uri))\n .catch(catchErrorInRequest)\n .finally(() => setSending(false));\n },\n [collaborationPath, tenant]\n );\n\n const editComment = useCallback(\n ({content, namedUsers, objectType, uri, relatedObjectUris, commentId, replies}) => {\n setSending(true);\n\n const data = {\n objectId: uri,\n content,\n relatedObjectUris,\n objectType,\n visibility: 'public',\n namedUsers,\n commentId,\n replies\n };\n\n return updateCommentRequest({collaborationPath, tenant, data})\n .then((comment) => updateCommentInState({...comment, replies}))\n .catch(catchErrorInRequest)\n .finally(() => setSending(false));\n },\n [collaborationPath, tenant]\n );\n\n const deleteComment = useCallback(\n ({uri, commentId}) => {\n setSending(true);\n\n deleteCommentRequest({collaborationPath, tenant, commentId})\n .then(() => deleteCommentFromState(commentId, uri))\n .catch(catchErrorInRequest)\n .finally(() => setSending(false));\n },\n [collaborationPath, tenant]\n );\n\n const updateReplyInState = useCallback((reply: Reply, uri: string, commentId: string, isDeleteReply?: boolean) => {\n const newStatus = reply.action === 'resolve' ? 'resolved' : 'open';\n const {replyId} = reply;\n if (newStatus === 'resolved') {\n setCurrentComment((prevCurrentComment) => {\n if (prevCurrentComment) {\n return null;\n }\n });\n } else {\n setCurrentComment((prevCurrentComment) => {\n if (prevCurrentComment) {\n return {\n ...prevCurrentComment,\n replies: isDeleteReply\n ? filterReplies(replyId, prevCurrentComment.replies)\n : [...prevCurrentComment.replies, reply]\n };\n }\n });\n }\n\n setCommentsMap((prevCommentsMap) => ({\n ...prevCommentsMap,\n [uri]: (prevCommentsMap[uri] || []).map((comment) => {\n if (comment.commentId === commentId) {\n return {\n ...comment,\n status: newStatus,\n replies: isDeleteReply ? comment.replies - 1 : comment.replies + 1\n };\n }\n\n return comment;\n })\n }));\n\n setComments((prevComments) => {\n return prevComments.map((comment) => {\n if (comment.commentId === commentId) {\n return {\n ...comment,\n status: newStatus,\n replies: isDeleteReply\n ? filterReplies(reply.replyId, comment.replies)\n : [...comment.replies, reply]\n };\n }\n\n return comment;\n });\n });\n }, []);\n\n const deleteReply = useCallback(\n ({uri, commentId, reply}) => {\n setSending(true);\n\n deleteReplyRequest({collaborationPath, tenant, commentId, replyId: reply.replyId})\n .then(() => updateReplyInState(reply, uri, commentId, true))\n .catch(catchErrorInRequest)\n .finally(() => setSending(false));\n },\n [collaborationPath, updateReplyInState, tenant]\n );\n\n const editReplyInState = useCallback((reply: Reply, commentId: string) => {\n setCurrentComment((prevCurrentComment) => {\n if (prevCurrentComment) {\n return {\n ...prevCurrentComment,\n replies: getUpdatedReplies(prevCurrentComment, reply)\n };\n }\n });\n\n setComments((prevComments) => {\n return prevComments.map((comment) => {\n if (comment.commentId === commentId) {\n return {\n ...comment,\n replies: getUpdatedReplies(comment, reply)\n };\n }\n\n return comment;\n });\n });\n }, []);\n\n const editReply = useCallback(\n ({content, namedUsers, commentId, replyId}) => {\n setSending(true);\n const data = {\n content,\n namedUsers\n };\n return updateReplyRequest({collaborationPath, tenant, commentId, replyId, data})\n .then((reply) => editReplyInState(reply, commentId))\n .catch(catchErrorInRequest)\n .finally(() => setSending(false));\n },\n [collaborationPath, tenant, editReplyInState]\n );\n\n const createReply = useCallback(\n ({content, namedUsers, commentId, action, uri}) => {\n setSending(true);\n\n const data = {\n content,\n action,\n namedUsers\n };\n\n return createReplyRequest({collaborationPath, tenant, commentId, data})\n .then(([reply]) => updateReplyInState(reply, uri, commentId))\n .catch(catchErrorInRequest)\n .finally(() => setSending(false));\n },\n [collaborationPath, tenant, updateReplyInState]\n );\n\n const resolveThread = useCallback(\n ({commentId, uri}) => {\n createReply({content: '', namedUsers: [], commentId, action: 'resolve', uri});\n },\n [createReply]\n );\n\n const reOpenThread = useCallback(\n ({commentId, uri}) => {\n createReply({content: '', namedUsers: [], commentId, action: 'reopen', uri});\n },\n [createReply]\n );\n\n const clearCurrentComment = useCallback(() => {\n setCurrentComment(null);\n }, []);\n\n const getCommentState = (uri: string, commentUri: string) => pathOr({}, [uri, commentUri], collaborationStateMap);\n\n const clearCommentState = (uri: string, commentUri: string) =>\n setCollaborationStateMap(dissocPath([uri, commentUri]));\n\n const updateCommentState = (uri: string, commentUri: string, newState: CommentState) => {\n setCollaborationStateMap((prevCollaborationStateMap) => {\n const pathToCommentState = [uri, commentUri];\n const prevCommentState = path(pathToCommentState, prevCollaborationStateMap);\n return assocPath(pathToCommentState, mergeRight(prevCommentState, newState), prevCollaborationStateMap);\n });\n };\n\n return {\n clearCurrentComment,\n comments,\n commentsMap,\n getCommentState,\n updateCommentState,\n clearCommentState,\n createComment,\n createReply,\n currentComment,\n deleteComment,\n editComment,\n getComment,\n getComments,\n getCommentsCount,\n loading,\n objectTypes,\n pageToken,\n reOpenThread,\n resolveThread,\n sending,\n deleteReply,\n editReply\n };\n};\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 {SmallIconButton} from '@reltio/components';\nimport {useStyles} from './styles';\n\ntype Props = {\n title: React.ReactNode;\n className: string;\n onClose: () => void;\n children?: React.ReactNode;\n};\n\nexport const RightSidePanel = ({title, className, onClose, children}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={className}>\n <div className={styles.header}>\n <SmallIconButton className={styles.closeButton} icon={CloseIcon} onClick={onClose} />\n {title}\n </div>\n {children}\n </div>\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});\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","import React, {useEffect, useRef, useState} from 'react';\nimport MergeTooltip from './MergeTooltip';\nimport {SankeyNode} from '../../types/SankeyChartData';\nimport {useCrosswalkColor, useCrosswalkHighlight} from '@reltio/components';\nimport {groupBy, prop, pipe, map, head, last, max, min} from 'ramda';\nimport {useStyles} from './styles';\n\ntype Props = {\n nodeWidth: number;\n node: SankeyNode;\n highlightEnabled: boolean;\n isColored: boolean;\n};\n\nexport const Node = ({node, nodeWidth, highlightEnabled, isColored}: Props) => {\n const styles = useStyles();\n const [labelX, setLabelX] = useState(0);\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 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 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 />\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};\n\nconst SankeyChart = ({width, height, data, accentContributors}: Props) => {\n const [isDragging, setDragging] = 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 />\n )),\n [nodes, accentContributors, nodeWidth, width, height]\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.PointerEvent) => {\n const left = event.pageX;\n const offsetX = left - previousPageX;\n setPreviousPageX(left);\n return offsetX;\n };\n\n const onDown = (event: React.PointerEvent) => {\n event.preventDefault();\n setDragging(true);\n extractPositionDelta(event);\n };\n const onMove = (event: React.PointerEvent) => {\n if (!isDragging) return;\n const left = extractPositionDelta(event);\n setOffsetX(offsetX + left);\n };\n const onUp = () => setDragging(false);\n\n const pointerEvents = isDragging ? 'none' : 'auto';\n const cursor = isDragging ? 'move' : 'default';\n\n return (\n <svg\n width={width}\n height={height}\n cursor={cursor}\n onPointerDown={onDown}\n onPointerMove={onMove}\n onPointerUp={onUp}\n onPointerLeave={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 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};\n\nconst CrosswalkTreeView = ({crosswalkTree, entityLabel, visibleCrosswalks, accentContributors}: Props) => {\n const styles = useStyles();\n const sankeyData = getSankeyData(crosswalkTree, entityLabel, visibleCrosswalks);\n\n return (\n <div className={styles.graph}>\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 />\n )}\n </ReactResizeDetector>\n </div>\n );\n};\n\nexport default memo(CrosswalkTreeView);\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: \"svg1833706754a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg1833706754b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg1833706754a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg1833706754b)\",\n d: \"M0 0h24v24H0z\"\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 {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {\n AttributeType,\n checkCanCreateCrosswalk,\n checkCanDeleteCrosswalk,\n checkCanEditCrosswalk,\n checkMetadataPermission,\n Contributor,\n CrosswalkBase,\n Entity,\n getEntityType,\n Metadata,\n MetadataPermissions,\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 contributors: Contributor[];\n accentContributors?: boolean;\n selectedAttributeTypes?: AttributeType[];\n onChangeVisibleCrosswalks: (visibleCrosswalks: CrosswalkBase[]) => void;\n readOnly?: boolean;\n canUnmerge: 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 contributors,\n selectedAttributeTypes,\n onChangeVisibleCrosswalks,\n readOnly,\n canUnmerge,\n onAddCrosswalk = noop,\n onEditCrosswalk = noop,\n onDeleteCrosswalk = noop,\n onUnmergeContributor = noop,\n onUnsubscribeContributor = noop\n}: Props) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityType: TEntityType = getEntityType(metadata, entity.type);\n\n const styles = useStyles();\n\n const rowsData = useMemo(() => buildTableRowsData(entity, contributors, selectedAttributeTypes), [\n entity,\n contributors,\n selectedAttributeTypes\n ]);\n const [expandedByContributor, setExpandedByContributor] = useState<{[contributorUri: string]: string[]}>({});\n const visibleCrosswalks = useMemo(() => collectVisibleCrosswalks(rowsData, expandedByContributor), [\n rowsData,\n 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={\n readOnly || !checkMetadataPermission(MetadataPermissions.UNMERGE, entityType)\n }\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 InfoIcon from '@material-ui/icons/Info';\nimport i18n from 'ui-i18n';\nimport {isEmpty} from 'ramda';\nimport {\n AttributeType,\n calculateCrosswalkTreeDeep,\n Contributor,\n Crosswalk,\n CrosswalkBase,\n CrosswalkTree,\n DataTenant,\n Entity,\n getLabel,\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 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\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 />\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 onChangeVisibleCrosswalks={setVisibleCrosswalks}\n canUnmerge={canUnmerge}\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 tabs: {\n marginLeft: '1px'\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 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 ResizablePanes,\n ScreenProfileBand,\n SideButtonsPanel,\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 {equals, pipe, pluck, propEq, reject} from 'ramda';\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\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\nconst MIN_PANE1_SIZE = 480;\nconst MIN_PANE2_SIZE = 480;\nconst MAX_PANE1_SIZE = -MIN_PANE2_SIZE;\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 [activeTab, setActiveTab] = useState(0);\n const [isCrosswalkTreeLoading, setIsCrosswalkTreeLoading] = useState(false);\n const toggleActive = (newIndex: number) => setActiveTab((active) => (active === newIndex ? null : newIndex));\n const isSidePanelOpen = activeTab !== null;\n\n const {\n survivorshipGroups,\n currentSurvivorshipGroupUri,\n onChangeSurvivorshipGroup,\n entity,\n isDefaultSurvivorshipGroupUri,\n isLoading: isEntityLoading\n } = useEntityWithSurvivorshipGroups(defaultEntity);\n\n const isHistoryTabActive = activeTab === ActivePanel.History;\n const {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({isHistoryTabActive, entity});\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 [paneSize, setPaneSize] = useState(MAX_PANE1_SIZE);\n const handlePaneSizeChange = useCallback(({percentageSize}) => setPaneSize(percentageSize), []);\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 onShowMessage = useCallback((message: string, entity?: Entity) => {\n showSnackbarMessage(entity ? <TreeActionSnackbar entity={entity} message={message} /> : message);\n }, []);\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 {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 displayProps = useCrosswalksDisplay({activeMode, contributors, entity});\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\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 <ResizablePanes\n className={styles.resizablePanesWrapper}\n orientation=\"vertical\"\n size={isSidePanelOpen ? paneSize : '100%'}\n minSize={MIN_PANE1_SIZE}\n maxSize={MAX_PANE1_SIZE}\n allowResize={isSidePanelOpen}\n onChange={handlePaneSizeChange}\n >\n <div className={styles.pane}>\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 </div>\n <RightSidePanel\n className={styles.pane}\n title={tabs[activeTab]?.title}\n onClose={() => toggleActive(activeTab)}\n >\n {tabs[activeTab]?.content}\n </RightSidePanel>\n </ResizablePanes>\n </DndProvider>\n </CrosswalksDisplayProvider>\n <SideButtonsPanel\n className={styles.tabs}\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(tabs)}\n onButtonClick={toggleActive}\n activeIndexId={activeTab}\n />\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} 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 {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 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","makeStyles","textOverflow","overflow","whiteSpace","padding","fontSize","lineHeight","marginRight","borderRadius","flexShrink","fontWeight","entity","className","size","styles","useStyles","metadata","useSelector","mdmModule","entityTypeUri","type","entityType","getEntityType","entityTypeColor","getPropWithInheritance","theme","entityTypeLabel","getEntityTypeLabel","ExpandedValueTooltip","value","placement","Typography","style","backgroundColor","color","utils","classnames","component","profileBandWrapper","profileBand","display","alignItems","boxShadow","marginBottom","content","minHeight","inactive","background","inactiveBackground","profileIcon","imageProfileIcon","width","height","profileInfo","flexDirection","flex","badge","label","letterSpacing","palette","text","primary","wordBreak","marginTop","secondaryLabel","marginLeft","businessCard","secondary","specialInfo","justifyContent","flexWrap","entityId","cursor","textDecoration","children","classes","renderLabel","identity","showEntityId","handleCopyEntityIdToClipboard","useCallback","navigator","clipboard","writeText","getEntityId","isNil","getLabel","businessCardText","getBusinessCardAttributesText","isActive","isActiveObject","entityUri","uri","EntityAvatar","key","avatarClassName","imageClassName","variant","EntityTypeBadge","isTempUri","Tooltip","title","i18n","onClick","container","link","LinkWithTooltip","withTooltip","Link","ProfileBandNavigationWidget","total","onPrev","onNext","onSearchResultsClick","isPrevDisabled","isNextDisabled","labels","useContext","LabelsContext","OPEN_RESULTS","SEARCH_RESULT","SEARCH_RESULTS","NEXT_PROFILE","PREVIOUS_PROFILE","mergeRight","underline","tooltipTitle","formatNumberAsMetric","SmallIconButton","icon","KeyboardArrowLeft","disabled","showForDisabled","KeyboardArrowRight","MainSearchProvider","constructor","data","query","sortField","sortOrder","tenant","searchTenant","apiPath","dtssPath","globalSearchRequestOptions","isDT","this","getQueryFilter","rawFilter","getEntities","filters","options","requestFilters","requestOptions","sort","order","select","scoreEnabled","getFilteredEntitiesFromDataTenant","customerTenant","dataTenant","getFilteredEntities","checkEntity","filter","fieldName","values","offset","max","then","entities","length","requestEntities","requestTotal","getTotalFromDataTenant","getTotals","json","GraphSearchProvider","searchBody","allFilters","getGraphSearchEntities","buildFilterQueryString","from","getGraphSearchCount","count","getNewUris","cache","pipe","map","prop","reject","includes","useSearchNavigation","safeCheckEntityPromise","useSafePromise","safeRequestTotalPromise","safeRequestEntitiesPromise","index","state","updateEntitiesNavigationLoadingState","useEntityLoadingIndication","viewId","ViewIdContext","dispatch","useDispatch","loading","setLoading","useState","searchProvider","useMemo","getSearchProvider","updateNavigationData","mdmModuleSearch","openEntity","preparedUri","getEntityUriForLink","mdmModuleUi","source","perspectiveId","useEffect","listenToActions","useActionsHook","stopListeningActions","action","searchNavigationData","payload","winnerUri","losersUris","updatedSearchNavigationData","winnerIndex","indexOf","uriIndex","splice","replaceWithWinnerUri","losersInCache","updatedTotal","updatedIndex","loser","updatedCache","removeLosersUris","applyMergeToSearchNavigationData","requestNextPage","newIndex","newUris","concat","finally","requestPrevPage","Math","min","stepForwardWithCheck","cacheIndex","isExists","clearedCache","stepBackWithCheck","ProfileBandNavigation","mode","isViewMode","useSearchNavigationVisibility","paddingTop","paper","active","fade","main","position","left","buttonWrapper","margin","SideButtonsPanel","buttonsProps","activeIndexId","onButtonClick","iconButtonClasses","id","buttonProps","root","slice","cancelButton","historyEvent","onCancel","profile","aStamp","Button","ActionsHookContext","createContext","displayName","ActionsHookProvider","hook","Provider","Error","EntityLoadingIndicationContext","React","isLoading","updateEntityLoadingState","noop","resetLoadingState","defaultLoadingState","entitiesNavigation","EntityLoadingIndicationProvider","loadingState","setLoadingState","prevLoadingState","Object","useEntityLoadingIndicationHook","filterReplies","replyId","replies","reply","getUpdatedReplies","comment","changedReplyIndex","findIndex","newReplies","defaultObjectIds","catchErrorInRequest","e","console","error","useCollaboration","objectIds","objectTypes","enabled","mdm","collaborationPath","isCollaborationEnabled","pageToken","setPageToken","comments","setComments","commentsMap","setCommentsMap","currentComment","setCurrentComment","sending","setSending","collaborationStateMap","setCollaborationStateMap","addCommentsToCommentsMap","currentCommentsMap","getCommentsCount","shouldResetCommentsMap","onError","warn","getCommentsCountRequest","andThen","props","fromPairs","otherwise","uris","getComments","relatedObjectUri","getCommentsRequest","items","nextPageToken","prevComments","uniqBy","catch","getComment","commentId","getCommentRequest","createComment","namedUsers","objectType","relatedObjectUris","objectId","visibility","permanentLink","window","location","href","encodeURIComponent","createCommentRequest","prevCommentsMap","status","addCommentToState","editComment","updateCommentRequest","when","propEq","always","updateCommentInState","deleteComment","deleteCommentRequest","c","deleteCommentFromState","updateReplyInState","isDeleteReply","newStatus","prevCurrentComment","deleteReply","deleteReplyRequest","editReplyInState","editReply","updateReplyRequest","createReply","createReplyRequest","resolveThread","reOpenThread","clearCurrentComment","getCommentState","commentUri","pathOr","updateCommentState","newState","prevCollaborationStateMap","pathToCommentState","prevCommentState","path","assocPath","clearCommentState","dissocPath","useSavedState","getSavedState","isLoaded","setIsLoaded","savedState","setSavedState","_","header","borderBottom","closeButton","RightSidePanel","onClose","CloseIcon","LegendMode","sumValues","links","sum","nodes","sankeyLayout","nodeWidth","smallestNodeMaxHeight","smallestNodeMinHeight","nodePadding","sankey","graph","forEach","node","sourceLinks","targetLinks","push","target","computeNodeLinks","computeNodeValues","nextNodes","remainingNodes","x","dx","w","computeNodeBreadths","nodesByBreadth","groupBy","toPairs","a","b","nth","ky","reduce","Infinity","i","y","dy","initializeNodeDepth","y0","n","y1","last","computeNodeDepths","computeLinkDepths","ty","correctNodesDepth","result","linksByUuid","l","crosswalk","uuid","sourceNodes","j","resultByUuid","newSources","sizeForNewSources","sy","setNodeWidth","setNodePadding","setSmallestNodeMaxHeight","setSmallestNodeMinHeight","setSize","newSize","update","curvature","d","lastLine","x0","x1","xi","t","x2","x3","appendix","arguments","safeData","safeNodes","getSafeNode","originalNode","safeLinks","shallowCopy","userSelect","tooltipRow","tooltipIcon","stroke","strokeWidth","strokeOpacity","rootNode","transform","user","time","CalendarToday","Person","LightArrowTooltip","highlightEnabled","isColored","labelX","setLabelX","textRef","useRef","name","crosswalks","merges","firstCrosswalk","isDimmed","highlightCrosswalk","removeHighlight","useCrosswalkHighlight","useCrosswalkColor","startNodeHeight","nodeHeight","textWidth","current","clientWidth","ref","fill","opacity","onMouseEnter","onMouseLeave","timeMap","sources","start","end","acc","head","fillOpacity","renderMergeNodes","accentContributors","isDragging","setDragging","previousPageX","setPreviousPageX","offsetX","setOffsetX","useSankey","sankeyNodes","sankeyLinks","extractPositionDelta","event","pageX","onUp","pointerEvents","onPointerDown","preventDefault","onPointerMove","onPointerUp","onPointerLeave","filterUnits","isCrosswalkDisplayed","curry","displayedCrosswalks","some","eqCrosswalks","filterDisplayedCrosswalks","tree","evolve","losers","addCrosswalkUniqueId","addIdToSubtree","processTree","processSubTree","parentIndex","mergesCrosswalks","chain","Date","now","linkedNodes","uniq","boxSizing","memo","crosswalkTree","entityLabel","visibleCrosswalks","sankeyData","getSankeyData","refreshMode","refreshRate","handleWidth","handleHeight","_extends","assign","prototype","hasOwnProperty","call","apply","viewBox","version","xmlns","xmlnsXlink","fillRule","xlinkHref","mask","paddingRight","focusedIcon","isFocused","paddingLeft","contributorUri","focusable","contributorActions","onToggleFocus","VisibilityIcon","getLastUriPart","Spacer","show","contributorColor","border","borderLeft","top","bottom","editor","accentContributor","crosswalksBySources","expandedSources","canUnmerge","disableAddCrosswalk","disableEditCrosswalk","disableDeleteCrosswalk","disableUnmergeContributor","onUnmerge","onEdit","onDelete","onAdd","onToggleSourceExpanded","onUnsubscribeContributor","getContributorColor","dataTenants","scrollToCrosswalk","useHighlightedCrosswalks","find","propOr","flatten","scrollIntoView","behavior","showEditor","setShowEditor","contributorCrosswalk","pluck","CrosswalkType","toggleCrosswalkFocus","useCrosswalkFocus","allContributorCrosswalks","dataTenantForExternalCrosswalk","getDataTenantFromCrosswalks","AddIcon","UnmergeIcon","UnsubscribeIcon","crosswalksByTypes","SourceCrosswalksRow","showCrosswalkColors","crosswalksFocusEnabled","expanded","onToggleExpanded","CrosswalkEditor","table","overflowY","overflowX","tableRow","maxWidth","contributors","selectedAttributeTypes","onChangeVisibleCrosswalks","readOnly","onAddCrosswalk","onEditCrosswalk","onDeleteCrosswalk","onUnmergeContributor","rowsData","entityCrosswalks","relationCrosswalks","getRelationCrosswalks","contributor","isEmptyValue","ownerType","relationCrosswalk","entityCrosswalk","groupCrosswalksByTypesAndSources","buildTableRowsData","expandedByContributor","setExpandedByContributor","isExpandedSource","collectVisibleCrosswalks","handleDelete","crosswalkId","handleEdit","params","checkCanCreateCrosswalk","checkCanEditCrosswalk","checkCanDeleteCrosswalk","checkMetadataPermission","MetadataPermissions","sourceUri","unless","has","assoc","ifElse","without","append","hintIcon","verticalAlign","checkedIcon","right","selectedTree","SelectableTree","coloredCrosswalks","selected","onSelect","getCrosswalkColor","getUniqueCrosswalkColor","getCrosswalkId","Info","CheckCircle","dialogContainer","dialogTitle","dialogContent","trees","UnmergeDialog","unmergeOperation","setUnmergeOperation","UnmergeOperation","getColoredCrosswalks","includeMerges","collectCrosswalksFromContributor","Dialog","open","DialogTitle","DialogContent","toUpperCase","DialogActions","UnsubscribeDialog","canUnsubscribe","modeSwitcher","infoIcon","hint","alignSelf","hintText","crosswalksList","divider","pane","resizablePanesWrapper","flexGrow","activeMode","onChangeMode","tableProps","viewRef","paneSize","setPaneSize","handlePaneSizeChange","percentageSize","contributorForUnmerge","setContributorForUnmerge","unsubscribeInfo","setUnsubscribeInfo","crosswalkTreeDeep","calculateCrosswalkTreeDeep","maxPaneHeight","clientHeight","modes","Crosswalk","Source","Contributor","setVisibleCrosswalks","operationType","ModeSwitcher","modeId","onChange","ResizablePanes","orientation","minSize","maxSize","allowResize","isEmpty","masktype","maskUnits","clipRule","showErrorMessage","ErrorPopup","message","getRequestErrorMessage","cx","cy","r","maskType","y2","gradientUnits","stopColor","stopOpacity","default","info","snackbarMessage","snackbarIcon","uiPath","generateEntityUrl","UrlGeneratorsContext","entityLink","paddingBottom","description","RulesetOption","innerRef","innerProps","MenuItem","RulesetsMenuList","getStyles","maxHeight","RulesetsSelector","survivorshipGroups","currentSurvivorshipGroupUri","group","DropDownSelector","components","Option","MenuList","sourcesView","fontFamily","tabs","headerDivider","attributesTable","ActivePanel","connect","config","defaultEntity","saveState","setActiveMode","activeTab","setActiveTab","isCrosswalkTreeLoading","setIsCrosswalkTreeLoading","toggleActive","isSidePanelOpen","onChangeSurvivorshipGroup","isDefaultSurvivorshipGroupUri","isEntityLoading","defaultSurvivorshipGroupUri","setCurrentSurvivorshipGroupUri","setEntity","setIsLoading","safePromise","survivorshipGroupUri","getEntityBySurvivorshipGroupUri","useEntityWithSurvivorshipGroups","isHistoryTabActive","History","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","persistedEntity","historySlice","useHistorySlice","selectedAttrTypes","setSelectedAttrTypes","useDidUpdateEffect","undefined","SnackbarRenderer","showSnackbarMessage","useSnackbar","anchorOrigin","vertical","horizontal","showDismiss","visibleColumns","setVisibleColumns","hasVisibleColumnsChanged","equals","onCrosswalkTreeLoaded","reload","reloadCrosswalkTree","onSuccess","setCrosswalkTree","loadData","getCrosswalkTree","results","useCrosswalkTree","aEntity","collectContributorsFromTree","refreshEntity","refreshData","onShowMessage","modifiedEntity","crosswalksMap","newlyCreatedAttributes","onDeleteAttribute","onPinAttribute","onIgnoreAttribute","onEditAttribute","onAddAttribute","useModifiedEntity","onModify","addCrosswalk","deleteCrosswalk","editCrosswalk","unmergeContributor","unsubscribeContributor","onLoad","useCrosswalkActions","handleAction","request","unmergeContributorRequest","response","unsubscribeEntityFromDataTenantEntity","successful","sourceTable","useCrosswalkTreeActions","errorCode","ApiErrorCode","historyFilter","onApplyFilter","isHistoryLoading","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","displayProps","getCrosswalkColorForActiveMode","getSourceColor","findContributorForCrosswalk","highlightedCrosswalks","setHighlightedCrosswalks","highlightedCrosswalksCache","applyHighlightedCrosswalks","debounce","cacheHighlightedCrosswalks","arr","setCrosswalkHighlighted","highlighted","focusedCrosswalks","setFocusedCrosswalks","calculateFocusedCrosswalks","prev","next","prevCrosswalk","any","nextCrosswalk","prevValue","useCrosswalksDisplay","Legend","LegendIcon","HistoryIcon","HistoryHeader","HistoryView","contributorsUris","HistoryPanelEmptyState","additionalHeaderItems","Divider","DndProvider","backend","HTML5Backend","CrosswalkDragLayer","ScreenProfileBand","attributeUris","AttributesTable","onChangeVisibleColumns","onSelectAttributeTypes","onPin","onIgnore","activeSurvivorshipGroupUri","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","store","onResize","getSavedStatePromisified","promisifyCallback","StylesProvider","MuiPickersUtilsProvider","MomentUtils","floor"],"sourceRoot":""}