@reltio/remotes 1.4.1348 → 1.4.1349

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.
Files changed (94) hide show
  1. package/1635.js +2 -0
  2. package/{807.js.map → 1635.js.map} +1 -1
  3. package/1667.js +2 -0
  4. package/1667.js.map +1 -0
  5. package/1920.js +1 -1
  6. package/2114.js +1 -1
  7. package/2378.js +1 -2
  8. package/2378.js.map +1 -1
  9. package/2493.js +1 -1
  10. package/2890.js +1 -1
  11. package/2986.js +3 -0
  12. package/{3537.js.LICENSE.txt → 2986.js.LICENSE.txt} +0 -0
  13. package/2986.js.map +1 -0
  14. package/3307.js +1 -1
  15. package/350.js +1 -1
  16. package/3509.js +1 -1
  17. package/3509.js.map +1 -1
  18. package/3540.js +1 -1
  19. package/3540.js.map +1 -1
  20. package/3640.js +1 -1
  21. package/3786.js +1 -1
  22. package/4007.js +1 -1
  23. package/4038.js +1 -1
  24. package/4038.js.map +1 -1
  25. package/4115.js +1 -1
  26. package/4143.js +2 -0
  27. package/4143.js.map +1 -0
  28. package/447.js +1 -1
  29. package/4689.js +1 -1
  30. package/4843.js +1 -1
  31. package/4889.js +1 -1
  32. package/4897.js +2 -0
  33. package/4897.js.map +1 -0
  34. package/{4171.js → 5295.js} +2 -2
  35. package/5295.js.map +1 -0
  36. package/5400.js +1 -1
  37. package/5501.js +2 -0
  38. package/5501.js.map +1 -0
  39. package/5709.js +1 -1
  40. package/5709.js.map +1 -1
  41. package/5720.js +1 -1
  42. package/5937.js +1 -1
  43. package/6103.js +1 -1
  44. package/612.js +1 -1
  45. package/6401.js +3 -0
  46. package/{2378.js.LICENSE.txt → 6401.js.LICENSE.txt} +0 -0
  47. package/6401.js.map +1 -0
  48. package/6403.js +2 -0
  49. package/6403.js.map +1 -0
  50. package/6619.js +2 -0
  51. package/6619.js.map +1 -0
  52. package/{2605.js → 7601.js} +2 -2
  53. package/7601.js.map +1 -0
  54. package/{7741.js → 7776.js} +2 -2
  55. package/7776.js.map +1 -0
  56. package/7937.js +1 -1
  57. package/8051.js +1 -1
  58. package/8532.js +1 -1
  59. package/8532.js.map +1 -1
  60. package/8969.js +1 -1
  61. package/8969.js.map +1 -1
  62. package/9043.js +1 -1
  63. package/9417.js +1 -1
  64. package/9431.js +1 -1
  65. package/9606.js +1 -1
  66. package/9630.js +1 -1
  67. package/98.js +1 -1
  68. package/main.js +1 -1
  69. package/main.js.map +1 -1
  70. package/package.json +1 -1
  71. package/remoteEntry.js +1 -1
  72. package/remoteEntry.js.map +1 -1
  73. package/2605.js.map +0 -1
  74. package/3537.js +0 -3
  75. package/3537.js.map +0 -1
  76. package/3698.js +0 -2
  77. package/3698.js.map +0 -1
  78. package/4171.js.map +0 -1
  79. package/4277.js +0 -2
  80. package/4277.js.map +0 -1
  81. package/4730.js +0 -2
  82. package/4730.js.map +0 -1
  83. package/5058.js +0 -2
  84. package/5058.js.map +0 -1
  85. package/6523.js +0 -2
  86. package/6523.js.map +0 -1
  87. package/7004.js +0 -2
  88. package/7004.js.map +0 -1
  89. package/7741.js.map +0 -1
  90. package/8047.js +0 -2
  91. package/8047.js.map +0 -1
  92. package/807.js +0 -2
  93. package/8903.js +0 -2
  94. package/8903.js.map +0 -1
package/3509.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"3509.js","mappings":"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","sources":["webpack://@reltio/remotes/../components/src/components/AttributeSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/AttributeSelector/AttributeSelector.tsx","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTable/HOCs/withTableContext.js","webpack://@reltio/remotes/../components/src/icons/Table.tsx","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTableHeader/ColumnsSettings/ColumnsSettings.js","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTableHeader/ColumnsSettings/styles.js","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTableHeader/ColumnsSettings/ColumnListItem.js","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTableHeader/ColumnsSettings/ColumnsSettingsPopup.tsx","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTableHeader/ColumnsSettings/columnHelpers.js","webpack://@reltio/remotes/../components/src/components/DateIntervalSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/DateIntervalSelector/DateIntervalSelector.tsx","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/searchProviders/SearchProviderFactory.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/hooks/useSearchNavigation.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/ReactSelect/CreatableSelect.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/components/Option.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/components/index.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/MultiSelect.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/index.js","webpack://@reltio/remotes/../components/src/components/SideIconPanel/styles.ts","webpack://@reltio/remotes/../components/src/components/SideIconPanel/SideButtonsPanel.tsx","webpack://@reltio/remotes/../components/src/components/Spacer/Spacer.js","webpack://@reltio/remotes/../components/src/components/UserSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/UserSelector/UserSelector.tsx","webpack://@reltio/remotes/../components/src/components/activityLog/types/ActivityTypes.ts","webpack://@reltio/remotes/../components/src/components/activityLog/utils/activities.ts","webpack://@reltio/remotes/../components/src/components/editors/CustomDateRangeEditor/styles.ts","webpack://@reltio/remotes/../components/src/components/editors/CustomDateRangeEditor/CustomDateRangeEditor.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/hooks/useCollaboration.ts","webpack://@reltio/remotes/../components/src/hooks/useSavedState.ts","webpack://@reltio/remotes/../components/src/hooks/useSnackbar.tsx","webpack://@reltio/remotes/../components/src/types/index.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/SourcesView/styles.ts","webpack://@reltio/remotes/../sources/src/components/SourcesView/SourcesView.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 {makeStyles} from '@material-ui/core/styles';\n\nexport const customStyles = {\n input: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n menuPortal: (currentStyles) => ({...currentStyles, zIndex: 1300})\n};\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n title: {\n paddingBottom: '10px',\n paddingLeft: '5px',\n fontSize: '14px'\n },\n dropDownInput: {\n width: '100%',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n borderTop: '4px'\n },\n option: {\n fontSize: '14px',\n height: '32px'\n },\n noOptionsMessage: {\n fontSize: '14px'\n }\n});\n","import React, {useCallback, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {pipe, defaultTo} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {AttributeOption} from '../../types';\nimport mdmModule from '@reltio/mdm-module';\nimport {MultiValueProps, OptionProps} from 'react-select';\nimport {AttributeType, getAttributeTypeSubAttributes, Metadata, TEntityType} from '@reltio/mdm-sdk';\nimport {Typography as Typography} from '@material-ui/core';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport MultiValue from '../ReactSelect/commonComponents/MultiValue';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport AttributeListItem from '../AttributeListItem/AttributeListItem';\nimport {customStyles, useStyles} from './styles';\n\ntype Props = {\n entityType: TEntityType;\n selectedAttributes: AttributeOption[];\n className?: string;\n onChange?: (attributes: AttributeOption[]) => void;\n title?: string;\n disableUnderline?: boolean;\n menuPlacement?: string;\n};\n\nconst AttributeSelector = ({\n entityType,\n selectedAttributes,\n className,\n onChange,\n title,\n disableUnderline,\n menuPlacement = 'bottom'\n}: Props) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const styles = useStyles();\n\n const prepareItems = useCallback(\n (data: AttributeType[], level = 0, prevLabel = ''): AttributeOption[] => {\n return data.reduce((acc, item) => {\n if (item.hidden) return acc;\n const chipLabel = `${prevLabel && prevLabel + ' / '}${item.label}`;\n acc.push({\n label: item.label,\n value: item.uri,\n attrType: item,\n chipLabel,\n level\n });\n const subAttributes = getAttributeTypeSubAttributes(metadata, item);\n return acc.concat(subAttributes ? prepareItems(subAttributes, level + 1, chipLabel) : []);\n }, []);\n },\n [metadata]\n );\n\n const options = useMemo(() => prepareItems(entityType?.attributes || []), [entityType, prepareItems]);\n\n const CustomOption = ({isFocused, isSelected, data, label, innerProps}: OptionProps<AttributeOption, true>) => (\n <div {...innerProps}>\n <AttributeListItem\n checked={isSelected}\n level={data.level}\n data={data}\n label={label}\n labelInText={label}\n isFocused={isFocused}\n />\n </div>\n );\n\n const CustomMultiValue = ({data, ...props}: MultiValueProps<AttributeOption>) => (\n <MultiValue {...props}>{data.chipLabel}</MultiValue>\n );\n\n return (\n <div className={classnames(styles.root, className)}>\n <Typography className={styles.title} variant={'subtitle1'}>\n {title || i18n.text('Attribute')}\n </Typography>\n <MultiSelect\n value={selectedAttributes}\n options={options}\n TextFieldProps={{\n InputProps: {disableUnderline},\n classes: {root: styles.dropDownInput}\n }}\n components={{\n DropdownIndicator: DropdownIndicatorWithIconButton,\n MultiValue: CustomMultiValue,\n Option: CustomOption\n }}\n onChange={pipe(defaultTo([]), onChange)}\n styles={customStyles}\n classes={styles}\n menuPlacement={menuPlacement}\n menuPortalTarget={document.body}\n />\n </div>\n );\n};\n\nexport default AttributeSelector;\n","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 React from 'react';\n\nconst SvgTable: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={20} height={18} viewBox=\"0 0 20 18\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M16 7.24V6h-4v1.24a8.417 8.417 0 00-2 .768V6H6v6h.29a8.497 8.497 0 00-.15.358l-.29.733.29.733.07.176H2c-1.1 0-2-.9-2-2V2C0 .9.9 0 2 0h14c1.1 0 2 .9 2 2v6.008a8.417 8.417 0 00-2-.768zM4 12V6H2v6h2zm0-8V2H2v2h2zm6 0V2H6v2h4zm6 0V2h-4v2h4zm-2 5a6.451 6.451 0 00-6 4.09 6.451 6.451 0 006 4.092 6.451 6.451 0 006-4.091A6.451 6.451 0 0014 9zm0 6.818a2.728 2.728 0 010-5.454 2.728 2.728 0 010 5.454zm0-4.363c-.905 0-1.636.73-1.636 1.636 0 .905.73 1.636 1.636 1.636.905 0 1.636-.73 1.636-1.636 0-.906-.73-1.636-1.636-1.636z\"\n fill=\"#000\"\n fillRule=\"nonzero\"\n stroke=\"none\"\n strokeWidth={1}\n opacity={0.54}\n />\n </svg>\n );\n};\n\nexport default SvgTable;\n","import React, {useCallback, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport {ColumnsDataType} from '../../../../constants';\nimport TableIcon from '../../../../icons/Table';\nimport {SmallIconButtonWithTooltip} from '../../../SmallIconButton';\nimport {pipe, uniq, pluck, difference, concat} from 'ramda';\n\nimport {ColumnsSettingsPopup} from './ColumnsSettingsPopup';\n\nimport i18n from 'ui-i18n';\nimport {getChildColumns, isColumnSelected} from './columnHelpers';\n\nconst ColumnsSettings = ({columnsData, selectedColumns, onChangeColumns, title, tooltipTitle}) => {\n const [anchorEl, setAnchorEl] = useState(null);\n const openPopup = (event) => setAnchorEl(event.currentTarget);\n const closePopup = () => setAnchorEl(null);\n const handleColumnClick = useCallback(\n (column) => {\n const changedColumns = pipe(getChildColumns, pluck('id'))(column);\n const wasSelected = isColumnSelected(selectedColumns, column);\n onChangeColumns(\n wasSelected\n ? difference(selectedColumns, changedColumns)\n : uniq(concat(selectedColumns, changedColumns))\n );\n },\n [selectedColumns, onChangeColumns]\n );\n return (\n <>\n <SmallIconButtonWithTooltip\n tooltipTitle={tooltipTitle || i18n.text('Show/hide columns')}\n size=\"L\"\n icon={TableIcon}\n onClick={openPopup}\n />\n <ColumnsSettingsPopup\n onColumnClick={handleColumnClick}\n anchorEl={anchorEl}\n columnsData={columnsData}\n onClose={closePopup}\n title={title}\n selectedColumns={selectedColumns}\n />\n </>\n );\n};\n\nColumnsSettings.propTypes = {\n columnsData: ColumnsDataType,\n selectedColumns: PropTypes.arrayOf(PropTypes.string),\n onChangeColumns: PropTypes.func,\n title: PropTypes.string,\n tooltipTitle: PropTypes.string\n};\n\nexport default ColumnsSettings;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n popup: {\n minWidth: '200px'\n },\n groupItem: {\n backgroundColor: 'rgba(0,0,0,0.04)'\n }\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport AttributeListItem from '../../../AttributeListItem/AttributeListItem';\nimport Highlighter from '../../../Highlighter/Highlighter';\n\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\nconst ColumnListItem = ({item, onClick, checked, level, style, isFocused, isGroupItem, hideCheckBox}) => {\n const styles = useStyles();\n return (\n <AttributeListItem\n hideCheckBox={hideCheckBox}\n key={item.id}\n onClick={onClick}\n checked={checked}\n level={level}\n data={item}\n label={<Highlighter text={item.label} highlight={item.filterText} />}\n labelInText={item.label}\n style={style}\n isFocused={isFocused}\n hideIcon={isGroupItem}\n className={classnames({[styles.groupItem]: isGroupItem})}\n />\n );\n};\n\nColumnListItem.propTypes = {\n item: PropTypes.shape({\n label: PropTypes.string,\n filterText: PropTypes.string\n }),\n level: PropTypes.number,\n onClick: PropTypes.func,\n checked: PropTypes.bool,\n style: PropTypes.object,\n isGroupItem: PropTypes.bool,\n isFocused: PropTypes.bool,\n hideCheckBox: PropTypes.bool\n};\n\nexport default ColumnListItem;\n","import React, {useState, useMemo, useCallback} from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe} from 'ramda';\n\nimport {getMaxItemWidth, DataTypeDefinition} from '@reltio/mdm-sdk';\n\nimport VirtualGroupedList from '../../../VirtualGroupedList/VirtualGroupedList';\nimport SelectionPopup from '../../../SelectionPopup/SelectionPopup';\nimport {buildColumnItems, isColumnSelected, isGroupColumn} from './columnHelpers';\nimport {flattenGroupedItemsData} from '../../../VirtualGroupedList/helpers';\nimport {useKeyboardNavigation} from '../../../SelectionPopup/helpers';\nimport ColumnListItem from './ColumnListItem';\n\nimport {useStyles} from './styles';\nimport {ListItemProps} from '@material-ui/core/ListItem';\n\ntype Column = {\n id: string;\n label: string;\n};\n\ntype GroupedColumnData =\n | {\n id: string;\n label: string;\n columns: Column[];\n }\n | Column;\n\ntype GroupedColumnList = {\n id: string;\n groupId: string;\n label: string;\n attrType: DataTypeDefinition;\n};\n\ntype Props = {\n anchorEl: HTMLElement;\n onClose: () => void;\n title?: string;\n columnsData: GroupedColumnData[];\n onColumnClick: (column: {id: string}) => void;\n selectedColumns: string[];\n hideCheckBox?: boolean;\n};\n\nconst ITEM_HEIGHT = 32;\nconst MAX_LIST_CONTAINER_HEIGHT = 300;\nconst DEFAULT_MIN_CONTAINER_WIDTH = 308;\nconst CONTAINER_HEADER_HEIGHT = 108;\nconst MIN_CONTAINER_HEIGHT = 140;\n\nexport const ColumnsSettingsPopup = ({\n anchorEl,\n onClose,\n title,\n columnsData,\n onColumnClick,\n selectedColumns,\n hideCheckBox\n}: Props) => {\n const styles = useStyles();\n const [filterText, setFilterText] = useState('');\n const clearFilter = () => setFilterText('');\n const groupedItems = useMemo(() => buildColumnItems(columnsData, filterText), [columnsData, filterText]);\n\n const items = useMemo(() => flattenGroupedItemsData(groupedItems), [groupedItems]);\n const containerWidth: number = getMaxItemWidth('label')(groupedItems) || DEFAULT_MIN_CONTAINER_WIDTH;\n\n const handleSearchOnEnter = useCallback(\n ({item}: {item: {id: string}; groupData: {item: {id: string}}}) => onColumnClick(item),\n [onColumnClick]\n );\n\n const {focusIndex, handleKeyDown} = useKeyboardNavigation({\n items,\n open: true,\n onSelectFocusedItem: handleSearchOnEnter,\n selectedItems: selectedColumns,\n onClose\n });\n const handleClose = useCallback(pipe(onClose, clearFilter), [onClose]);\n\n const renderColumnItem = (\n style: ListItemProps['style'],\n {item, level = 0}: {item: GroupedColumnList; level?: number},\n index: number\n ) => {\n return (\n <ColumnListItem\n hideCheckBox={hideCheckBox}\n style={style}\n item={item}\n level={level}\n isFocused={focusIndex === index}\n checked={isColumnSelected(selectedColumns, item)}\n isGroupItem={isGroupColumn(item)}\n onClick={hideCheckBox ? pipe(onColumnClick, handleClose) : onColumnClick}\n />\n );\n };\n\n const listHeight = Math.min(MAX_LIST_CONTAINER_HEIGHT, ITEM_HEIGHT * items.length);\n const containerHeight = Math.max(MIN_CONTAINER_HEIGHT, listHeight + CONTAINER_HEADER_HEIGHT);\n\n return (\n <SelectionPopup\n className={styles.popup}\n open={!!anchorEl}\n anchorEl={anchorEl}\n onClose={handleClose}\n onSearch={setFilterText}\n title={title || i18n.text('Show/hide columns')}\n containerWidth={containerWidth}\n containerHeight={containerHeight}\n searchInputOnKeyDown={handleKeyDown}\n >\n <VirtualGroupedList\n fixedTitle={false}\n height={listHeight}\n renderItem={renderColumnItem}\n items={items}\n getItemSize={() => ITEM_HEIGHT}\n focusIndex={focusIndex}\n />\n </SelectionPopup>\n );\n};\n","import {assoc, chain, curry, either, filter, has, pipe, propOr, reduce, when} from 'ramda';\nimport {utils} from '@reltio/mdm-sdk';\n\nconst isGroupColumn = (column) => column.id === column.groupId;\nconst isParentToColumn = curry(\n ({id, groupId}, parent) => parent.groupId === groupId && (id === parent.id || id.startsWith(`${parent.id}.`))\n);\nconst isGroupToColumn = curry(({groupId}, group) => groupId === group.id);\nconst isHideableColumn = propOr(true, 'hideable');\n\nconst getColumnRoot = (columns, column) => columns.find(either(isGroupToColumn(column), isParentToColumn(column)));\n\nconst addColumn = (columns, column) => {\n const root = getColumnRoot(columns, column);\n if (root) {\n root.children = addColumn(root.children || [], column);\n return columns;\n } else {\n return columns.concat(column);\n }\n};\n\nconst filterColumnsByLabel = curry(\n (filterText, column) =>\n utils.strings.search(column.label, filterText) || (column.children || []).some(filterColumnsByLabel(filterText))\n);\n\nconst buildColumnsTrees = reduce(\n (acc, columnData) =>\n addColumn(acc, {\n id: columnData.id,\n groupId: columnData.groupId,\n label: columnData.label,\n attrType: columnData.dataTypeDefinition\n }),\n []\n);\n\nconst buildFilteredColumnItems = curry((filterText, columns, level = 0) =>\n pipe(\n filter(filterColumnsByLabel(filterText)),\n chain((column) => {\n const item = {\n item: {...column, filterText},\n level\n };\n const childrenItems = column.children\n ? buildFilteredColumnItems(filterText, column.children, level + 1)\n : [];\n return [item, ...childrenItems];\n })\n )(columns)\n);\n\nconst isGroupedColumnsData = has('columns');\nconst flattenGroupedColumnsData = ({id, label, columns}) => [\n {id, groupId: id, label},\n ...columns.map(assoc('groupId', id))\n];\n\nconst buildColumnItems = (columnsData, filterText) => {\n return pipe(\n chain(when(isGroupedColumnsData, flattenGroupedColumnsData)),\n filter(either(isGroupColumn, isHideableColumn)),\n buildColumnsTrees,\n buildFilteredColumnItems(filterText)\n )(columnsData);\n};\n\nconst getChildColumns = (column) => (column.children ? chain(getChildColumns, column.children) : [column]);\n\nconst isColumnSelected = (selectedColumns, column) => {\n const childColumns = getChildColumns(column);\n const isColumnSelected = (column) => selectedColumns.includes(column.id);\n return isGroupColumn(column) ? childColumns.every(isColumnSelected) : childColumns.some(isColumnSelected);\n};\n\nexport {buildColumnItems, getChildColumns, isGroupColumn, isColumnSelected};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n flex: 1\n },\n input: {\n height: '100%',\n paddingLeft: '12px',\n paddingRight: '8px',\n fontSize: '14px'\n },\n inputNumber: {\n minWidth: '60px',\n marginRight: 10,\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n },\n inputUnit: {\n width: '100%'\n }\n});\n","import React from 'react';\nimport {pipe} from 'ramda';\nimport i18n from 'ui-i18n';\nimport capitalize from '@material-ui/core/utils/capitalize';\nimport {TextField as TextField} from '@material-ui/core';\nimport SimpleDropDownSelector from '../SimpleDropDownSelector/SimpleDropDownSelector';\nimport {getValue} from '../../core/utils';\nimport {useStyles} from './styles';\n\ntype Props = {\n interval: [number, string];\n onChange: ([number, string]) => void;\n onFocus?: () => void;\n};\n\nconst periods = [\n i18n.text('minutes'),\n i18n.text('hours'),\n i18n.text('days'),\n i18n.text('weeks'),\n i18n.text('months'),\n i18n.text('years')\n];\n\nconst DateIntervalSelector = ({interval: [value, unit], onChange, onFocus}: Props) => {\n const styles = useStyles();\n const getIntervalFromValue = (newValue: number) => [newValue, unit];\n const getIntervalFromUnit = ({value: newUnit}: {value: string}) => [value, newUnit];\n const onNumberChange = pipe(getValue, parseInt, getIntervalFromValue, onChange);\n const onUnitChange = pipe(getIntervalFromUnit, onChange);\n return (\n <div className={styles.root}>\n <TextField\n type=\"number\"\n value={value || ''}\n onChange={onNumberChange}\n inputProps={{min: 1, onFocus: onFocus}}\n InputProps={{classes: {root: styles.input}}}\n className={styles.inputNumber}\n />\n <SimpleDropDownSelector\n label={''}\n placeholder={capitalize(unit)}\n className={styles.inputUnit}\n value={{value: unit, label: capitalize(unit)}}\n options={periods.map((value) => ({\n value,\n label: capitalize(value)\n }))}\n onChange={onUnitChange}\n TextFieldProps={{\n inputProps: {onFocus: onFocus},\n InputProps: {classes: {root: styles.input}}\n }}\n />\n </div>\n );\n};\n\nexport default DateIntervalSelector;\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: 'inset 0 -1px 0 0 rgba(0,114,206,0.06), inset 0 1px 0 0 rgba(0,114,206,0.06);',\n\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} 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};\n\nconst ProfileBand = ({className, entity, children, classes}: 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 {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 from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {Link as Link} from '@material-ui/core';\nimport {withTooltip} from '../../HOCs';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';\nimport KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\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 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={i18n.text('Go to search results')}\n >\n {formatNumberAsMetric(total, 1000000)}{' '}\n {total === 1 ? i18n.text('Search result') : i18n.text('Search results')}\n </LinkWithTooltip>\n <SmallIconButtonWithTooltip\n size=\"L\"\n icon={KeyboardArrowLeft}\n tooltipTitle={i18n.text('Go to previous profile')}\n onClick={onPrev}\n disabled={isPrevDisabled}\n showForDisabled\n />\n <SmallIconButtonWithTooltip\n size=\"L\"\n icon={KeyboardArrowRight}\n tooltipTitle={i18n.text('Go to 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 {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 {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 {ViewIdContext} from '../../../contexts';\nimport {useSafePromise} from '../../../hooks';\nimport {getSearchProvider} from '../searchProviders/SearchProviderFactory';\nimport {SearchNavigationData, SearchProviderData} from '../types';\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 {uri, index, total, tenant: searchTenant, 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 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 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 CreatableSelect from 'react-select/creatable';\nimport withMuiSkin from './withMuiSkin';\n\nexport default withMuiSkin(CreatableSelect);\n","import {MenuItem as MenuItem} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport classNames from 'classnames';\nimport ExpandedValueTooltip from '../../../ExpandedValueTooltip/ExpandedValueTooltip';\n\nexport default function Option(props) {\n const {\n innerProps,\n innerRef,\n children,\n isFocused,\n isSelected,\n selectProps: {classes},\n label\n } = props;\n\n return (\n <MenuItem\n className={classNames(classes.option, {[classes['option--selected']]: isSelected})}\n ref={innerRef}\n selected={isFocused}\n component=\"div\"\n {...innerProps}\n >\n <Checkbox color=\"primary\" checked={isSelected} />\n <ExpandedValueTooltip value={label}>\n <div className={classes['option--item']}>{children}</div>\n </ExpandedValueTooltip>\n </MenuItem>\n );\n}\n\nOption.propTypes = {\n children: PropTypes.node,\n innerProps: PropTypes.shape({\n id: PropTypes.string.isRequired,\n key: PropTypes.string,\n onClick: PropTypes.func.isRequired,\n onMouseMove: PropTypes.func.isRequired,\n onMouseOver: PropTypes.func.isRequired,\n tabIndex: PropTypes.number.isRequired\n }).isRequired,\n innerRef: PropTypes.oneOfType([\n PropTypes.oneOf([null]),\n PropTypes.func,\n PropTypes.shape({\n current: PropTypes.any.isRequired\n })\n ]),\n isFocused: PropTypes.bool.isRequired,\n isSelected: PropTypes.bool.isRequired,\n label: PropTypes.string,\n selectProps: PropTypes.shape({\n classes: PropTypes.shape({\n option: PropTypes.string\n })\n })\n};\n","import Option from './Option';\n\nconst components = {\n Option\n};\n\nexport default components;\n","import React, {useState} from 'react';\nimport PropTypes from 'prop-types';\nimport {omit} from 'ramda';\nimport CreatableSelect from '../CreatableSelect';\nimport Select from '../Select';\nimport AsyncSelect from '../AsyncSelect';\nimport multiSelectComponents from './components';\nimport {makeStyles} from '@material-ui/core/styles';\nimport {mergeClasses} from '../../../core/utils';\n\nconst useStyles = makeStyles((theme) => ({\n label: {\n top: 6,\n left: 16\n },\n placeholder: (props) => ({\n display: !props.placeholder || props.label ? 'none' : undefined\n }),\n 'option--selected': {\n fontWeight: 400\n },\n clearIndicator: {\n padding: theme.spacing(1),\n margin: theme.spacing(0.25, 0.5)\n },\n dropdownIndicator: {\n padding: theme.spacing(1),\n margin: theme.spacing(0.25, 0.5)\n }\n}));\n\nlet id = 0;\nconst getInputId = () => `custom-select-${id++}`;\n\nfunction MultiSelect(props) {\n const {\n label,\n creatable,\n getOptions,\n loadingIndicator,\n components: componentsProp,\n classes: classesProp,\n styles: stylesProp,\n onChange: onChangeProp,\n onInputChange: onInputChangeProp,\n menuPlacement = 'auto',\n ...reactSelectProps\n } = props;\n\n const SelectComponent = creatable ? CreatableSelect : getOptions ? AsyncSelect : Select;\n\n const [inputValue, setInputValue] = useState('');\n const multiSelectClasses = useStyles(omit(['classes'], props));\n const inputId = getInputId();\n\n const components = {\n ...multiSelectComponents,\n ...componentsProp\n };\n\n const classes = mergeClasses(multiSelectClasses, classesProp);\n\n function handleInputChange(value, {action}) {\n onInputChangeProp(value, {action});\n if (action !== 'set-value') {\n setInputValue(value);\n }\n }\n\n function handleChange(value, actionMeta) {\n onChangeProp(value, actionMeta);\n if (actionMeta.action === 'create-option') {\n setInputValue('');\n onInputChangeProp('', {action: 'input-change'});\n }\n }\n\n const styles = {\n indicatorSeparator: (base) => ({\n ...base,\n margin: '10px 0'\n }),\n loadingIndicator: (base) => ({\n ...base,\n display: loadingIndicator ? base.display : 'none'\n }),\n loadingMessage: (base) => ({\n ...base,\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif'\n }),\n ...stylesProp\n };\n\n const labelProps = label\n ? {\n inputId,\n TextFieldProps: {\n label,\n InputLabelProps: {\n htmlFor: inputId,\n shrink: props.value && props.value.length ? true : undefined,\n className: classes.label\n },\n ...props.TextFieldProps\n }\n }\n : {};\n\n return (\n <SelectComponent\n isMulti\n inputId={inputId}\n inputValue={inputValue}\n onChange={handleChange}\n onInputChange={handleInputChange}\n closeMenuOnSelect={false}\n hideSelectedOptions={false}\n classes={classes}\n components={components}\n styles={styles}\n menuPlacement={menuPlacement}\n loadOptions={getOptions}\n {...labelProps}\n {...reactSelectProps}\n />\n );\n}\n\nMultiSelect.defaultProps = {\n creatable: false,\n cacheOptions: true,\n components: {},\n classes: {},\n placeholder: '',\n loadingIndicator: false,\n onInputChange: () => {},\n onChange: () => {}\n};\n\nMultiSelect.propTypes = {\n /**\n * Async creatable multi select with optional placeholder, shrink-label, non-closing menu and options with checkboxes.\n * Based on react-select/creatable and react-select/async.\n * See react-select docs: https://react-select.com\n *\n * Below are listed only props used in the MultiSelect component. Check https://react-select.com/props first.\n * */\n\n /** Ability to create values. React-select/async-creatable is used internally */\n creatable: PropTypes.bool,\n /** True for enabling cache. Recommended. */\n cacheOptions: PropTypes.bool,\n defaultOptions: PropTypes.bool,\n /** Array of selected options. */\n value: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any\n })\n ),\n options: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any\n })\n ),\n /** Way to receive updated values */\n onChange: PropTypes.func,\n /** Way to receive updated inputValue */\n onInputChange: PropTypes.func,\n /** Input placeholder. Will not be shown if the label prop is specified */\n placeholder: PropTypes.string,\n /** Floating label from @material-ui/core/TextField component */\n label: PropTypes.string,\n /** Enable to show default react-select's indicator */\n loadingIndicator: PropTypes.bool,\n /** You could redefine any of these components */\n components: PropTypes.shape({\n ClearIndicator: PropTypes.func,\n Control: PropTypes.func,\n DropdownIndicator: PropTypes.func,\n DownChevron: PropTypes.func,\n CrossIcon: PropTypes.func,\n Group: PropTypes.func,\n GroupHeading: PropTypes.func,\n IndicatorsContainer: PropTypes.func,\n IndicatorSeparator: PropTypes.func,\n Input: PropTypes.func,\n LoadingIndicator: PropTypes.func,\n Menu: PropTypes.func,\n MenuList: PropTypes.func,\n MenuPortal: PropTypes.func,\n LoadingMessage: PropTypes.func,\n NoOptionsMessage: PropTypes.func,\n MultiValue: PropTypes.func,\n MultiValueContainer: PropTypes.func,\n MultiValueLabel: PropTypes.func,\n MultiValueRemove: PropTypes.func,\n Option: PropTypes.func,\n Placeholder: PropTypes.func,\n SelectContainer: PropTypes.func,\n SingleValue: PropTypes.func,\n ValueContainer: PropTypes.func\n }),\n /** Classes are passed to mui skin components. Provided classes will be merged with existing ones. */\n classes: PropTypes.shape({\n control: PropTypes.string,\n valueContainer: PropTypes.string,\n multiValue: PropTypes.string,\n noOptionsMessage: PropTypes.string,\n singleValue: PropTypes.string,\n placeholder: PropTypes.string,\n menu: PropTypes.string,\n clearIndicator: PropTypes.string,\n dropdownIndicator: PropTypes.string,\n option: PropTypes.string,\n 'option--selected': PropTypes.string,\n label: PropTypes.string\n }),\n /**\n * React-select's way to customise style. Could be used to style default react-select components.\n * In other cases better to use classes and components props\n * */\n styles: PropTypes.shape({\n clearIndicator: PropTypes.func,\n container: PropTypes.func,\n control: PropTypes.func,\n dropdownIndicator: PropTypes.func,\n group: PropTypes.func,\n groupHeading: PropTypes.func,\n indicatorsContainer: PropTypes.func,\n indicatorSeparator: PropTypes.func,\n input: PropTypes.func,\n loadingIndicator: PropTypes.func,\n loadingMessage: PropTypes.func,\n menu: PropTypes.func,\n menuList: PropTypes.func,\n menuPortal: PropTypes.func,\n multiValue: PropTypes.func,\n multiValueLabel: PropTypes.func,\n multiValueRemove: PropTypes.func,\n noOptionsMessage: PropTypes.func,\n option: PropTypes.func,\n placeholder: PropTypes.func,\n singleValue: PropTypes.func,\n valueContainer: PropTypes.func\n }),\n /** Props from https://material-ui.com/api/text-field/ */\n TextFieldProps: PropTypes.object /* eslint-disable-line react/forbid-prop-types */,\n getOptions: PropTypes.func,\n menuPlacement: PropTypes.string,\n menuPortalTarget: PropTypes.object,\n getOptionValue: PropTypes.func,\n isSearchable: PropTypes.bool,\n inputRef: PropTypes.shape({current: PropTypes.object})\n};\n\nexport default MultiSelect;\n","import MultiSelect from './MultiSelect';\n\nexport default MultiSelect;\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, {VFC, 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 }[];\n classes?: {active?: string; buttonWrapper?: string} & IconButtonProps['classes'];\n activeIndexId: number;\n className?: string;\n onButtonClick: (id: number) => void;\n};\n\nexport const SideButtonsPanel: VFC<Props> = ({buttonsProps, activeIndexId, className, onButtonClick, classes = {}}) => {\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 React from 'react';\n\nconst Spacer = () => <div style={{flex: 1}} />;\n\nexport default Spacer;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const customStyles = {\n input: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n loadingMessage: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n menuPortal: (currentStyles) => ({...currentStyles, zIndex: 1300})\n};\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n title: {\n paddingBottom: '10px',\n paddingLeft: '5px',\n fontSize: '14px'\n },\n dropDownInput: {\n width: '100%',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n borderTop: '4px'\n },\n option: {\n fontSize: '14px',\n height: '32px'\n }\n});\n","import React, {useRef} from 'react';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {defaultTo, pipe, pluck, prop} from 'ramda';\nimport classnames from 'classnames';\nimport {Typography as Typography} from '@material-ui/core';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport {getAllUsersForTenant, User, utils} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {customStyles, useStyles} from './styles';\n\ntype Props = {\n selectedUsers: string[];\n onChange: (activities: string[]) => void;\n className?: string;\n disableUnderline?: boolean;\n};\n\nconst UserSelector = ({selectedUsers, onChange, className, disableUnderline}: Props) => {\n const styles = useStyles();\n\n const valueToOption = (value: string) => ({value, label: value});\n const prepareValues = (values: string[]) => values.map(valueToOption);\n const filterUsers = (inputValue) => (users) =>\n inputValue ? users.filter((username) => utils.strings.search(username, inputValue)) : users;\n\n const tenant = useSelector(mdmModule.selectors.getTenant);\n const servicesPath = useSelector(mdmModule.selectors.getServicesPath);\n\n const cachedRequest = useRef<Promise<{array: User[]}>>();\n const getOptions = (inputValue) => {\n if (!cachedRequest.current) {\n cachedRequest.current = getAllUsersForTenant({tenant, servicesPath});\n }\n return cachedRequest.current.then(\n pipe(prop('array'), pluck('username'), filterUsers(inputValue), prepareValues)\n );\n };\n\n return (\n <div className={classnames(styles.root, className)}>\n <Typography className={styles.title} variant={'subtitle1'}>\n {i18n.text('User')}\n </Typography>\n <MultiSelect\n value={prepareValues(selectedUsers)}\n onChange={pipe(defaultTo([]), pluck('value'), onChange)}\n defaultOptions={true}\n getOptions={getOptions}\n TextFieldProps={{\n InputProps: {disableUnderline},\n className: styles.dropDownInput\n }}\n components={{\n DropdownIndicator: DropdownIndicatorWithIconButton\n }}\n styles={customStyles}\n classes={styles}\n menuPortalTarget={document.body}\n />\n </div>\n );\n};\n\nexport default UserSelector;\n","export enum ActivityTypes {\n MODEL_UPDATED = 'MODEL_UPDATED',\n ENTITY_REMOVED = 'ENTITY_REMOVED',\n ENTITY_CREATED = 'ENTITY_CREATED',\n ENTITY_CHANGED = 'ENTITY_CHANGED',\n ENTITIES_MERGED = 'ENTITIES_MERGED',\n ENTITIES_SPLITTED = 'ENTITIES_SPLITTED',\n ENTITY_LOST_MERGE = 'ENTITY_LOST_MERGE',\n RELATIONSHIP_CREATED = 'RELATIONSHIP_CREATED',\n RELATIONSHIP_REMOVED = 'RELATIONSHIP_REMOVED',\n RELATIONSHIP_CHANGED = 'RELATIONSHIP_CHANGED',\n POTENTIAL_MATCHES_FOUND = 'POTENTIAL_MATCHES_FOUND',\n NOT_MATCHES_SET = 'NOT_MATCHES_SET',\n NOT_MATCHES_RESET = 'NOT_MATCHES_RESET',\n PERIODIC_TASK_SCHEDULED = 'PERIODIC_TASK_SCHEDULED',\n ENTITIES_MERGED_MANUALLY = 'ENTITIES_MERGED_MANUALLY',\n POTENTIAL_MATCHES_REMOVED = 'POTENTIAL_MATCHES_REMOVED',\n ENTITIES_MERGED_ON_THE_FLY = 'ENTITIES_MERGED_ON_THE_FLY',\n USER_LOGIN = 'USER_LOGIN',\n USER_LOGOUT = 'USER_LOGOUT',\n USER_SEARCH = 'USER_SEARCH',\n USER_PROFILE_VIEW = 'USER_PROFILE_VIEW',\n COMMENT_ADDED = 'COMMENT_ADDED',\n COMMENT_UPDATED = 'COMMENT_UPDATED',\n COMMENT_DELETED = 'COMMENT_DELETED',\n ANALYTICS_ATTRIBUTES_CHANGED = 'ANALYTICS_ATTRIBUTES_CHANGED',\n SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE = 'SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE',\n GROUP_CREATED = 'GROUP_CREATED',\n GROUP_REMOVED = 'GROUP_REMOVED',\n GROUP_CHANGED = 'GROUP_CHANGED'\n}\n","import {filter, groupBy, ifElse, map, path, pipe, propOr, values, is, isNil, includes, reject} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {ActivityData, ActivityItem, ActivityTypes, DeltaValue} from '../types';\n\nconst getItemDataType = path(['data', 'type']);\n\nexport const getActivityType = (activity: ActivityData) => {\n const {items, label} = activity;\n const [firstItem] = items || [];\n return getItemDataType(firstItem) || label;\n};\n\nexport const isValidActivityType = (type: string): boolean => pipe(values, includes(type))(ActivityTypes);\n\nexport const removeIgnoredItems = (activity: ActivityData): ActivityData => {\n const {items, label} = activity;\n const isImplementedItem = (item: ActivityItem): boolean => isValidActivityType(getItemDataType(item) || label);\n const filteredItems = filter(isImplementedItem)(items);\n if (items.length !== filteredItems.length) {\n console.error('Activities not implemented:', reject(isImplementedItem)(items));\n }\n return {\n ...activity,\n items: filteredItems,\n itemsTotal: filteredItems.length\n };\n};\n\nexport const splitActivityByType = (activity: ActivityData) => {\n return pipe(\n propOr([], 'items'),\n groupBy(getItemDataType),\n values,\n ifElse(\n ({length}) => length > 1,\n map((items) => ({\n ...activity,\n items,\n itemsTotal: items.length\n })),\n () => [activity]\n )\n )(activity);\n};\n\nexport const stringifyDeltaValue = (delta: string | Record<string, DeltaValue[]> | DeltaValue | DeltaValue[]) => {\n if (isNil(delta)) {\n return '';\n } else if (typeof delta === 'string') {\n return delta;\n } else if (Array.isArray(delta)) {\n return delta.map(stringifyDeltaValue).join(', ');\n } else if (is(Object, delta)) {\n return 'value' in delta ? stringifyDeltaValue(delta.value) : stringifyDeltaValue(Object.values(delta));\n } else {\n return delta.toString();\n }\n};\n\nexport const getActivityLabel = (type: ActivityTypes) => {\n const labels = {\n [ActivityTypes.COMMENT_ADDED]: i18n.text('Comment added'),\n [ActivityTypes.COMMENT_DELETED]: i18n.text('Comment deleted'),\n [ActivityTypes.COMMENT_UPDATED]: i18n.text('Comment updated'),\n [ActivityTypes.ENTITIES_MERGED]: i18n.text('Profile merged'),\n [ActivityTypes.ENTITIES_MERGED_MANUALLY]: i18n.text('Profile merged manually'),\n [ActivityTypes.ENTITIES_MERGED_ON_THE_FLY]: i18n.text('Profile merged on the fly'),\n [ActivityTypes.ENTITIES_SPLITTED]: i18n.text('Profile un-merged'),\n [ActivityTypes.ENTITY_CHANGED]: i18n.text('Profile updated'),\n [ActivityTypes.ENTITY_CREATED]: i18n.text('Profile created'),\n [ActivityTypes.ENTITY_LOST_MERGE]: i18n.text('Profile lost merge'),\n [ActivityTypes.ENTITY_REMOVED]: i18n.text('Profile removed'),\n [ActivityTypes.GROUP_CHANGED]: i18n.text('Group updated'),\n [ActivityTypes.GROUP_CREATED]: i18n.text('Group created'),\n [ActivityTypes.GROUP_REMOVED]: i18n.text('Group removed'),\n [ActivityTypes.MODEL_UPDATED]: i18n.text('Model was updated'),\n [ActivityTypes.NOT_MATCHES_RESET]: i18n.text('Not matches reset'),\n [ActivityTypes.NOT_MATCHES_SET]: i18n.text('Not matches set'),\n [ActivityTypes.PERIODIC_TASK_SCHEDULED]: i18n.text('Periodic task was scheduled'),\n [ActivityTypes.POTENTIAL_MATCHES_FOUND]: i18n.text('Potential matches found'),\n [ActivityTypes.POTENTIAL_MATCHES_REMOVED]: i18n.text('Potential matches removed'),\n [ActivityTypes.RELATIONSHIP_CHANGED]: i18n.text('Relationship updated'),\n [ActivityTypes.RELATIONSHIP_CREATED]: i18n.text('Relationship created'),\n [ActivityTypes.RELATIONSHIP_REMOVED]: i18n.text('Relationship removed'),\n [ActivityTypes.USER_LOGIN]: i18n.text('Logged in'),\n [ActivityTypes.USER_LOGOUT]: i18n.text('Logged out'),\n [ActivityTypes.USER_PROFILE_VIEW]: i18n.text('Profile viewed'),\n [ActivityTypes.USER_SEARCH]: i18n.text('Searched'),\n [ActivityTypes.ANALYTICS_ATTRIBUTES_CHANGED]: i18n.text('Analytics attribute changed'),\n [ActivityTypes.SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE]: i18n.text('SFDC connector synchronization issue')\n };\n return labels[type] || '';\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n dropdownIndicator: {\n transition: 'transform .15s ease'\n },\n inputRoot: {\n fontSize: '14px',\n height: 46\n },\n input: {\n padding: '0 12px 0'\n },\n dateOptionLabel: {\n minWidth: '100px'\n },\n paper: {\n minWidth: '112px'\n }\n});\n","import React, {useCallback, useRef, useState} from 'react';\nimport moment from 'moment';\nimport i18n from 'ui-i18n';\nimport {isNil} from 'ramda';\nimport {DataTypes, formatDataTypeValue} from '@reltio/mdm-sdk';\n\nimport {TextField as TextField} from '@material-ui/core';\nimport {Menu as Menu} from '@material-ui/core';\nimport DropdownIndicatorWithIconButton from '../../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport DateRangePicker from '../../DateRangePicker/DateRangePicker';\nimport {useStyles} from './styles';\n\ntype DateValues = [Date, Date];\ntype Props = {\n values: DateValues;\n onChange: (values: DateValues) => void;\n onFocus?: () => void;\n};\n\nconst localeFormat = moment.localeData().longDateFormat('L');\n\nconst formatValue = (value: Date, placeholder: string) => {\n return isNil(value)\n ? `${placeholder}`\n : `${formatDataTypeValue({dataTypeDefinition: {type: DataTypes.TYPE_ACTIVENESS_DATE}}, value)}`;\n};\n\nconst CustomDateRangeEditor = ({values, onChange, onFocus}: Props) => {\n const placeholder = localeFormat;\n const inputRef = useRef(null);\n const [open, setOpen] = useState(false);\n const styles = useStyles();\n\n const onApply = (values: DateValues) => {\n onChange(values);\n setOpen(false);\n };\n\n const handleToggle = useCallback(() => {\n setOpen((open) => !open);\n onFocus();\n }, [onFocus]);\n\n const onCancel = () => {\n setOpen(false);\n };\n\n return (\n <div className={styles.root}>\n <TextField\n fullWidth\n value={values.map((value) => formatValue(value, placeholder)).join(' \\u2014 ')}\n onClick={handleToggle}\n variant=\"filled\"\n ref={inputRef}\n InputProps={{\n endAdornment: (\n <DropdownIndicatorWithIconButton\n selectProps={{classes: styles, menuIsOpen: open}}\n innerProps={{}}\n />\n ),\n disableUnderline: isNil(values),\n readOnly: true,\n classes: {\n root: styles.inputRoot,\n input: styles.input\n }\n }}\n InputLabelProps={{\n shrink: false\n }}\n placeholder={i18n.text(`${placeholder} \\u2014 ${placeholder}`)}\n />\n <Menu\n variant=\"menu\"\n open={open}\n autoFocus={false}\n classes={{paper: styles.paper}}\n anchorEl={inputRef.current}\n onClose={onCancel}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left'\n }}\n elevation={2}\n getContentAnchorEl={null}\n MenuListProps={{\n autoFocusItem: open,\n style: {width: '100%'}\n }}\n >\n <DateRangePicker\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n values={values}\n onCancel={onCancel}\n onApply={onApply}\n type={DataTypes.TYPE_ACTIVENESS_DATE}\n />\n </Menu>\n </div>\n );\n};\n\nexport default CustomDateRangeEditor;\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 {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: ''\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 permanentLink: '',\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 React, {useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Portal as Portal} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport Snackbar, {SnackbarOrigin} from '@material-ui/core/Snackbar';\n\ntype SnackbarOptions = {\n anchorOrigin?: SnackbarOrigin;\n showDismiss?: boolean;\n};\nconst FIVE_MINUTES = 5 * 60 * 1000;\nexport const useSnackbar = (options: SnackbarOptions = {}) => {\n const {anchorOrigin, showDismiss} = options;\n const [isOpenSnackbar, setIsOpenSnackbar] = useState(false);\n const [snackbarMessage, setSnackbarMessage] = useState('');\n\n const closeSnackbar = useCallback(() => {\n setIsOpenSnackbar(false);\n setSnackbarMessage('');\n }, []);\n\n const showSnackbarMessage = useCallback((message) => {\n setIsOpenSnackbar(true);\n setSnackbarMessage(message);\n }, []);\n\n const SnackbarRenderer = useCallback(() => {\n return (\n <Portal container={document.body}>\n <Snackbar\n open={isOpenSnackbar}\n anchorOrigin={anchorOrigin}\n autoHideDuration={FIVE_MINUTES}\n onClose={closeSnackbar}\n message={snackbarMessage}\n action={\n showDismiss ? (\n <Button color=\"primary\" onClick={closeSnackbar}>\n {i18n.text('Dismiss')}\n </Button>\n ) : undefined\n }\n />\n </Portal>\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpenSnackbar, closeSnackbar, snackbarMessage]);\n\n return {SnackbarRenderer, showSnackbarMessage};\n};\n","import {AttributeType} from '@reltio/mdm-sdk';\n\nexport type ReactGridLayoutItem = {\n i: string;\n x: number;\n y: number;\n w: number;\n h: number;\n minW?: number;\n minH?: number;\n maxW?: number;\n maxH?: number;\n static?: boolean;\n};\n\nexport type AttributeOption = {\n label: string;\n value: string;\n attrType: AttributeType;\n chipLabel: string;\n level: number;\n};\n\nexport enum DateRangeTypes {\n WITHIN = 'within',\n AGO = 'ago',\n BETWEEN = 'between'\n}\n\nexport type DateRangeFilter = {\n type: DateRangeTypes;\n period: [number, string] | [Date, Date];\n};\n\nexport type QueryBuilderAttributeData = {\n title: string;\n pathToTitle: Array<string>;\n fieldName: string;\n entityTypeUri: string;\n attrType: AttributeType;\n uri: string;\n groupName: string;\n filterOptions: Array<string>;\n};\n\nexport type QueryBuilderAttribute = {\n id: string;\n values: Array<unknown>;\n data: QueryBuilderAttributeData;\n filter: string;\n operator: string;\n};\n\nexport type AttributeSelectorItem = {\n attrType?: AttributeType;\n entityTypeUri?: string;\n fieldName: string;\n groupName?: string;\n title: string;\n uri?: string;\n children?: AttributeSelectorItem[];\n pathToTitle?: string[];\n};\n\nexport type AttributeSelectorItemsGroup = {\n id?: string;\n title: string;\n attributes: AttributeSelectorItem[];\n};\n\nexport type AttributeSelectionInfo = {\n index: number;\n checked: boolean;\n attribute: AttributeSelectorItem;\n selectedAttributes: AttributeSelectorItem[];\n};\n\nexport type BasicAttributeSelectorProps = {\n className?: string;\n itemsGroups: AttributeSelectorItemsGroup[];\n value: AttributeSelectorItem;\n onSelect: (selectInfo: AttributeSelectionInfo) => void;\n onRestoreFocus?: () => void;\n onOpenPopup?: () => void;\n getLabel?: (value: {fieldName?: string; pathToTitle?: string[]; title: string}) => string;\n disableRestoreFocus?: boolean;\n disableEnforceFocus?: boolean;\n single?: boolean;\n ungroup?: boolean;\n disabled?: boolean;\n hideCheckBox?: boolean;\n};\nexport enum RequestStates {\n INIT = 'init',\n LOADING = 'loading',\n LOADED = 'loaded',\n ERROR = 'error'\n}\n\nexport type SelectableItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selected?: boolean;\n};\n\nexport type DropDownMenuItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selectable?: boolean;\n selected?: boolean;\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 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 opacity={highlightEnabled && isDimmed ? 0.1 : 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 <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 from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Entity, getEntityLink, getLabel} from '@reltio/mdm-sdk';\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 entityLink = getEntityLink({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({\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});\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 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 HTML5Backend from 'react-dnd-html5-backend';\nimport {DndProvider} from 'react-dnd';\nimport EmptyState from '../EmptyState/EmptyState';\nimport TreeActionSnackbar from '../TreeActionSnackbar/TreeActionSnackbar';\n\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 = ({config, entity, metadata, getSavedState, saveState, dispatch, historyEvent}: Props) => {\n const styles = useStyles();\n const [activeMode, setActiveMode] = useState(LegendMode.Crosswalk);\n\n const [activeTab, setActiveTab] = useState(0);\n const toggleActive = (newIndex: number) => setActiveTab((active) => (active === newIndex ? null : newIndex));\n const isSidePanelOpen = activeTab !== null;\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 {crosswalkTree, reload: reloadCrosswalkTree} = useCrosswalkTree(historySlice?.aEntity.uri || entityUri);\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 });\n\n const {historyFilter, onApplyFilter, isLoading, historicUris, historyWithTotal, canLoadMore, 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}\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={isLoading}\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 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 visibleColumns={visibleColumns}\n onChangeVisibleColumns={setVisibleColumns}\n entity={modifiedEntity}\n crosswalksMap={crosswalksMap}\n selectedAttributeTypes={selectedAttrTypes}\n onSelectAttributeTypes={setSelectedAttrTypes}\n readOnly={!!historySlice}\n onDelete={onDeleteAttribute}\n onPin={onPinAttribute}\n onIgnore={onIgnoreAttribute}\n onEdit={onEditAttribute}\n onAdd={onAddAttribute}\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 {getCrosswalkTree, CrosswalkTree} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '@reltio/components';\n\nexport const useCrosswalkTree = (entityUri: string) => {\n const [crosswalkTree, setCrosswalkTree] = useState<CrosswalkTree>(null);\n const [isLoading, setIsLoading] = useState(false);\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 setIsLoading(true);\n safePromise(getCrosswalkTree({entityUri}))\n .then((results) => {\n setCrosswalkTree(results);\n })\n .catch(onError)\n .finally(() => {\n setIsLoading(false);\n });\n } else {\n setCrosswalkTree(null);\n }\n }, [entityUri]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n return {isLoading, 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":["customStyles","input","currentStyles","fontSize","menuPortal","zIndex","useStyles","makeStyles","root","flex","title","paddingBottom","paddingLeft","dropDownInput","width","justifyContent","backgroundColor","borderTop","option","height","noOptionsMessage","entityType","selectedAttributes","className","onChange","disableUnderline","menuPlacement","metadata","useSelector","mdmModule","styles","prepareItems","useCallback","data","level","prevLabel","reduce","acc","item","hidden","chipLabel","label","push","value","uri","attrType","subAttributes","getAttributeTypeSubAttributes","concat","options","useMemo","attributes","classnames","Typography","variant","i18n","MultiSelect","TextFieldProps","InputProps","classes","components","DropdownIndicator","DropdownIndicatorWithIconButton","MultiValue","props","Option","isFocused","isSelected","innerProps","AttributeListItem","checked","labelInText","pipe","defaultTo","menuPortalTarget","document","body","contextSelector","CellRenderer","withContext","TableContext","viewBox","xmlns","d","fill","fillRule","stroke","strokeWidth","opacity","ColumnsSettings","columnsData","selectedColumns","onChangeColumns","tooltipTitle","anchorEl","setAnchorEl","useState","handleColumnClick","column","changedColumns","getChildColumns","pluck","wasSelected","isColumnSelected","difference","uniq","SmallIconButton","size","icon","TableIcon","onClick","event","currentTarget","ColumnsSettingsPopup","onColumnClick","onClose","propTypes","ColumnsDataType","PropTypes","popup","minWidth","groupItem","ColumnListItem","style","isGroupItem","hideCheckBox","key","id","Highlighter","text","highlight","filterText","hideIcon","setFilterText","groupedItems","buildColumnItems","items","flattenGroupedItemsData","containerWidth","getMaxItemWidth","handleSearchOnEnter","focusIndex","handleKeyDown","useKeyboardNavigation","open","onSelectFocusedItem","selectedItems","handleClose","listHeight","Math","min","length","containerHeight","max","SelectionPopup","onSearch","searchInputOnKeyDown","VirtualGroupedList","fixedTitle","renderItem","index","isGroupColumn","getItemSize","groupId","isParentToColumn","curry","parent","startsWith","isGroupToColumn","group","isHideableColumn","propOr","addColumn","columns","find","either","getColumnRoot","children","filterColumnsByLabel","utils","some","buildColumnsTrees","columnData","dataTypeDefinition","buildFilteredColumnItems","filter","chain","isGroupedColumnsData","has","flattenGroupedColumnsData","map","assoc","when","childColumns","includes","every","display","paddingRight","inputNumber","marginRight","inputUnit","periods","interval","unit","onFocus","onNumberChange","getValue","parseInt","newValue","onUnitChange","newUnit","TextField","type","inputProps","SimpleDropDownSelector","placeholder","capitalize","textOverflow","overflow","whiteSpace","padding","lineHeight","borderRadius","flexShrink","fontWeight","entity","entityTypeUri","getEntityType","entityTypeColor","getPropWithInheritance","theme","entityTypeLabel","getEntityTypeLabel","ExpandedValueTooltip","placement","color","component","profileBandWrapper","profileBand","alignItems","boxShadow","content","minHeight","inactive","background","inactiveBackground","profileIcon","imageProfileIcon","profileInfo","flexDirection","badge","letterSpacing","palette","primary","wordBreak","marginTop","secondaryLabel","marginLeft","businessCard","secondary","specialInfo","flexWrap","entityId","cursor","textDecoration","showEntityId","handleCopyEntityIdToClipboard","navigator","clipboard","writeText","getEntityId","isNil","getLabel","businessCardText","getBusinessCardAttributesText","isActive","isActiveObject","entityUri","EntityAvatar","avatarClassName","imageClassName","EntityTypeBadge","isTempUri","Tooltip","container","link","LinkWithTooltip","withTooltip","Link","ProfileBandNavigationWidget","total","onPrev","onNext","onSearchResultsClick","isPrevDisabled","isNextDisabled","underline","formatNumberAsMetric","KeyboardArrowLeft","disabled","showForDisabled","KeyboardArrowRight","MainSearchProvider","constructor","query","sortField","sortOrder","tenant","searchTenant","apiPath","dtssPath","globalSearchRequestOptions","isDT","this","getQueryFilter","rawFilter","getEntities","filters","requestFilters","requestOptions","sort","order","select","scoreEnabled","getFilteredEntitiesFromDataTenant","customerTenant","dataTenant","getFilteredEntities","checkEntity","fieldName","values","offset","then","entities","requestEntities","requestTotal","getTotalFromDataTenant","getTotals","json","GraphSearchProvider","searchBody","allFilters","getGraphSearchEntities","buildFilterQueryString","from","getGraphSearchCount","count","getNewUris","cache","prop","reject","ProfileBandNavigation","safeCheckEntityPromise","useSafePromise","safeRequestTotalPromise","safeRequestEntitiesPromise","state","viewId","useContext","ViewIdContext","dispatch","useDispatch","loading","setLoading","searchProvider","getSearchProvider","updateNavigationData","mdmModuleSearch","openEntity","preparedUri","getEntityUriForLink","mdmModuleUi","source","perspectiveId","useEffect","requestNextPage","newIndex","newUris","finally","requestPrevPage","stepForwardWithCheck","cacheIndex","isExists","clearedCache","splice","stepBackWithCheck","indexOf","useSearchNavigation","mode","isViewMode","useSearchNavigationVisibility","withMuiSkin","CreatableSelect","innerRef","selectProps","MenuItem","classNames","ref","selected","Checkbox","onMouseMove","onMouseOver","tabIndex","isRequired","current","top","left","undefined","clearIndicator","spacing","margin","dropdownIndicator","creatable","getOptions","loadingIndicator","componentsProp","classesProp","stylesProp","onChangeProp","onInputChange","onInputChangeProp","reactSelectProps","SelectComponent","AsyncSelect","Select","inputValue","setInputValue","multiSelectClasses","omit","inputId","multiSelectComponents","mergeClasses","indicatorSeparator","base","loadingMessage","fontFamily","labelProps","InputLabelProps","htmlFor","shrink","isMulti","actionMeta","action","closeMenuOnSelect","hideSelectedOptions","loadOptions","defaultProps","cacheOptions","defaultOptions","ClearIndicator","Control","DownChevron","CrossIcon","Group","GroupHeading","IndicatorsContainer","IndicatorSeparator","Input","LoadingIndicator","Menu","MenuList","MenuPortal","LoadingMessage","NoOptionsMessage","MultiValueContainer","MultiValueLabel","MultiValueRemove","Placeholder","SelectContainer","SingleValue","ValueContainer","control","valueContainer","multiValue","singleValue","menu","groupHeading","indicatorsContainer","menuList","multiValueLabel","multiValueRemove","getOptionValue","isSearchable","inputRef","paddingTop","paper","active","fade","main","position","buttonWrapper","SideButtonsPanel","buttonsProps","activeIndexId","onButtonClick","iconButtonClasses","buttonProps","selectedUsers","valueToOption","prepareValues","servicesPath","cachedRequest","useRef","getAllUsersForTenant","users","username","filterUsers","ActivityTypes","getItemDataType","path","getActivityType","activity","firstItem","removeIgnoredItems","isImplementedItem","isValidActivityType","filteredItems","console","error","itemsTotal","splitActivityByType","groupBy","ifElse","stringifyDeltaValue","delta","Array","isArray","join","is","Object","toString","getActivityLabel","transition","inputRoot","dateOptionLabel","localeFormat","moment","longDateFormat","setOpen","handleToggle","onCancel","fullWidth","formatDataTypeValue","DataTypes","formatValue","endAdornment","menuIsOpen","readOnly","autoFocus","anchorOrigin","vertical","horizontal","transformOrigin","elevation","getContentAnchorEl","MenuListProps","autoFocusItem","DateRangePicker","onApply","slice","cancelButton","historyEvent","profile","aStamp","Button","filterReplies","replyId","replies","reply","getUpdatedReplies","comment","changedReplyIndex","findIndex","newReplies","defaultObjectIds","catchErrorInRequest","e","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","fromPairs","otherwise","uris","getComments","relatedObjectUri","getCommentsRequest","nextPageToken","prevComments","uniqBy","catch","getComment","commentId","getCommentRequest","createComment","namedUsers","objectType","relatedObjectUris","objectId","visibility","permanentLink","createCommentRequest","prevCommentsMap","status","addCommentToState","editComment","updateCommentRequest","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","assocPath","mergeRight","clearCommentState","dissocPath","useSavedState","getSavedState","isLoaded","setIsLoaded","savedState","setSavedState","_","FIVE_MINUTES","useSnackbar","showDismiss","isOpenSnackbar","setIsOpenSnackbar","snackbarMessage","setSnackbarMessage","closeSnackbar","showSnackbarMessage","message","SnackbarRenderer","Portal","autoHideDuration","DateRangeTypes","RequestStates","header","borderBottom","closeButton","RightSidePanel","CloseIcon","LegendMode","sumValues","links","sum","nodes","sankeyLayout","nodeWidth","smallestNodeMaxHeight","smallestNodeMinHeight","nodePadding","sankey","graph","forEach","node","sourceLinks","targetLinks","target","computeNodeLinks","computeNodeValues","nextNodes","remainingNodes","x","dx","w","computeNodeBreadths","nodesByBreadth","toPairs","a","b","nth","ky","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","lastLine","x0","x1","xi","t","x2","x3","appendix","arguments","safeData","safeNodes","getSafeNode","originalNode","safeLinks","shallowCopy","marginBottom","userSelect","tooltipRow","tooltipIcon","strokeOpacity","rootNode","transform","user","time","CalendarToday","Person","LightArrowTooltip","highlightEnabled","isColored","labelX","setLabelX","textRef","name","crosswalks","merges","firstCrosswalk","isDimmed","highlightCrosswalk","removeHighlight","useCrosswalkHighlight","useCrosswalkColor","startNodeHeight","nodeHeight","textWidth","clientWidth","onMouseEnter","onMouseLeave","timeMap","sources","start","end","head","fillOpacity","renderMergeNodes","accentContributors","isDragging","setDragging","previousPageX","setPreviousPageX","offsetX","setOffsetX","useSankey","sankeyNodes","sankeyLinks","extractPositionDelta","pageX","onUp","pointerEvents","onPointerDown","preventDefault","onPointerMove","onPointerUp","onPointerLeave","isCrosswalkDisplayed","displayedCrosswalks","eqCrosswalks","filterDisplayedCrosswalks","tree","evolve","losers","addCrosswalkUniqueId","addIdToSubtree","loser","processTree","processSubTree","parentIndex","mergesCrosswalks","Date","now","linkedNodes","boxSizing","memo","crosswalkTree","entityLabel","visibleCrosswalks","sankeyData","getSankeyData","refreshMode","refreshRate","handleWidth","handleHeight","_extends","assign","prototype","hasOwnProperty","call","apply","React","version","xmlnsXlink","xlinkHref","mask","focusedIcon","contributorUri","focusable","contributorActions","onToggleFocus","VisibilityIcon","getLastUriPart","Spacer","show","contributorColor","border","borderLeft","bottom","editor","accentContributor","crosswalksBySources","expandedSources","canUnmerge","disableAddCrosswalk","disableEditCrosswalk","disableDeleteCrosswalk","disableUnmergeContributor","onUnmerge","onEdit","onDelete","onAdd","onToggleSourceExpanded","onUnsubscribeContributor","getContributorColor","dataTenants","scrollToCrosswalk","useHighlightedCrosswalks","flatten","scrollIntoView","behavior","showEditor","setShowEditor","contributorCrosswalk","CrosswalkType","toggleCrosswalkFocus","useCrosswalkFocus","allContributorCrosswalks","dataTenantForExternalCrosswalk","getDataTenantFromCrosswalks","AddIcon","UnmergeIcon","UnsubscribeIcon","crosswalksByTypes","SourceCrosswalksRow","showCrosswalkColors","crosswalksFocusEnabled","expanded","onToggleExpanded","CrosswalkEditor","table","overflowY","overflowX","tableRow","maxWidth","contributors","selectedAttributeTypes","onChangeVisibleCrosswalks","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","without","append","hintIcon","verticalAlign","checkedIcon","right","selectedTree","SelectableTree","coloredCrosswalks","onSelect","getCrosswalkColor","getUniqueCrosswalkColor","getCrosswalkId","Info","CheckCircle","dialogContainer","dialogTitle","dialogContent","trees","UnmergeDialog","unmergeOperation","setUnmergeOperation","UnmergeOperation","getColoredCrosswalks","includeMerges","collectCrosswalksFromContributor","Dialog","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","ResizablePanes","orientation","minSize","maxSize","allowResize","isEmpty","masktype","maskUnits","clipRule","showErrorMessage","ErrorPopup","getRequestErrorMessage","cx","cy","r","maskType","y2","gradientUnits","stopColor","stopOpacity","default","info","snackbarIcon","uiPath","entityLink","getEntityLink","href","sourcesView","tabs","ActivePanel","connect","config","saveState","setActiveMode","activeTab","setActiveTab","toggleActive","isSidePanelOpen","isHistoryTabActive","History","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","persistedEntity","historySlice","useHistorySlice","selectedAttrTypes","setSelectedAttrTypes","useDidUpdateEffect","visibleColumns","setVisibleColumns","hasVisibleColumnsChanged","equals","reload","reloadCrosswalkTree","setCrosswalkTree","isLoading","setIsLoading","safePromise","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","onSuccess","useCrosswalkActions","handleAction","request","unmergeContributorRequest","response","unsubscribeEntityFromDataTenantEntity","successful","Error","sourceTable","useCrosswalkTreeActions","errorCode","ApiErrorCode","historyFilter","onApplyFilter","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","DndProvider","backend","HTML5Backend","CrosswalkDragLayer","ScreenProfileBand","attributeUris","AttributesTable","onChangeVisibleColumns","onSelectAttributeTypes","onPin","onIgnore","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","store","onResize","getSavedStatePromisified","promisifyCallback","Provider","StylesProvider","MuiPickersUtilsProvider","MomentUtils","floor"],"sourceRoot":""}
1
+ {"version":3,"file":"3509.js","mappings":"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","sources":["webpack://@reltio/remotes/../components/src/components/AttributeSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/AttributeSelector/AttributeSelector.tsx","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTable/HOCs/withTableContext.js","webpack://@reltio/remotes/../components/src/icons/Table.tsx","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTableHeader/ColumnsSettings/ColumnsSettings.js","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTableHeader/ColumnsSettings/styles.js","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTableHeader/ColumnsSettings/ColumnListItem.js","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTableHeader/ColumnsSettings/ColumnsSettingsPopup.tsx","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTableHeader/ColumnsSettings/columnHelpers.js","webpack://@reltio/remotes/../components/src/components/DateIntervalSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/DateIntervalSelector/DateIntervalSelector.tsx","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/searchProviders/SearchProviderFactory.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/hooks/useSearchNavigation.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/ReactSelect/CreatableSelect.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/components/Option.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/components/index.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/MultiSelect.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/index.js","webpack://@reltio/remotes/../components/src/components/SideIconPanel/styles.ts","webpack://@reltio/remotes/../components/src/components/SideIconPanel/SideButtonsPanel.tsx","webpack://@reltio/remotes/../components/src/components/Spacer/Spacer.js","webpack://@reltio/remotes/../components/src/components/UserSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/UserSelector/UserSelector.tsx","webpack://@reltio/remotes/../components/src/components/activityLog/types/ActivityTypes.ts","webpack://@reltio/remotes/../components/src/components/activityLog/utils/activities.ts","webpack://@reltio/remotes/../components/src/components/editors/CustomDateRangeEditor/styles.ts","webpack://@reltio/remotes/../components/src/components/editors/CustomDateRangeEditor/CustomDateRangeEditor.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/hooks/useCollaboration.ts","webpack://@reltio/remotes/../components/src/hooks/useSavedState.ts","webpack://@reltio/remotes/../components/src/hooks/useSnackbar.tsx","webpack://@reltio/remotes/../components/src/types/index.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/SourcesView/styles.ts","webpack://@reltio/remotes/../sources/src/components/SourcesView/SourcesView.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 {makeStyles} from '@material-ui/core/styles';\n\nexport const customStyles = {\n input: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n menuPortal: (currentStyles) => ({...currentStyles, zIndex: 1300})\n};\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n title: {\n paddingBottom: '10px',\n paddingLeft: '5px',\n fontSize: '14px'\n },\n dropDownInput: {\n width: '100%',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n borderTop: '4px'\n },\n option: {\n fontSize: '14px',\n height: '32px'\n },\n noOptionsMessage: {\n fontSize: '14px'\n }\n});\n","import React, {useCallback, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {pipe, defaultTo} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {AttributeOption} from '../../types';\nimport mdmModule from '@reltio/mdm-module';\nimport {MultiValueProps, OptionProps} from 'react-select';\nimport {AttributeType, getAttributeTypeSubAttributes, Metadata, TEntityType} from '@reltio/mdm-sdk';\nimport {Typography as Typography} from '@material-ui/core';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport MultiValue from '../ReactSelect/commonComponents/MultiValue';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport AttributeListItem from '../AttributeListItem/AttributeListItem';\nimport {customStyles, useStyles} from './styles';\n\ntype Props = {\n entityType: TEntityType;\n selectedAttributes: AttributeOption[];\n className?: string;\n onChange?: (attributes: AttributeOption[]) => void;\n title?: string;\n disableUnderline?: boolean;\n menuPlacement?: string;\n};\n\nconst AttributeSelector = ({\n entityType,\n selectedAttributes,\n className,\n onChange,\n title,\n disableUnderline,\n menuPlacement = 'bottom'\n}: Props) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const styles = useStyles();\n\n const prepareItems = useCallback(\n (data: AttributeType[], level = 0, prevLabel = ''): AttributeOption[] => {\n return data.reduce((acc, item) => {\n if (item.hidden) return acc;\n const chipLabel = `${prevLabel && prevLabel + ' / '}${item.label}`;\n acc.push({\n label: item.label,\n value: item.uri,\n attrType: item,\n chipLabel,\n level\n });\n const subAttributes = getAttributeTypeSubAttributes(metadata, item);\n return acc.concat(subAttributes ? prepareItems(subAttributes, level + 1, chipLabel) : []);\n }, []);\n },\n [metadata]\n );\n\n const options = useMemo(() => prepareItems(entityType?.attributes || []), [entityType, prepareItems]);\n\n const CustomOption = ({isFocused, isSelected, data, label, innerProps}: OptionProps<AttributeOption, true>) => (\n <div {...innerProps}>\n <AttributeListItem\n checked={isSelected}\n level={data.level}\n data={data}\n label={label}\n labelInText={label}\n isFocused={isFocused}\n />\n </div>\n );\n\n const CustomMultiValue = ({data, ...props}: MultiValueProps<AttributeOption>) => (\n <MultiValue {...props}>{data.chipLabel}</MultiValue>\n );\n\n return (\n <div className={classnames(styles.root, className)}>\n <Typography className={styles.title} variant={'subtitle1'}>\n {title || i18n.text('Attribute')}\n </Typography>\n <MultiSelect\n value={selectedAttributes}\n options={options}\n TextFieldProps={{\n InputProps: {disableUnderline},\n classes: {root: styles.dropDownInput}\n }}\n components={{\n DropdownIndicator: DropdownIndicatorWithIconButton,\n MultiValue: CustomMultiValue,\n Option: CustomOption\n }}\n onChange={pipe(defaultTo([]), onChange)}\n styles={customStyles}\n classes={styles}\n menuPlacement={menuPlacement}\n menuPortalTarget={document.body}\n />\n </div>\n );\n};\n\nexport default AttributeSelector;\n","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 React from 'react';\n\nconst SvgTable: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={20} height={18} viewBox=\"0 0 20 18\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M16 7.24V6h-4v1.24a8.417 8.417 0 00-2 .768V6H6v6h.29a8.497 8.497 0 00-.15.358l-.29.733.29.733.07.176H2c-1.1 0-2-.9-2-2V2C0 .9.9 0 2 0h14c1.1 0 2 .9 2 2v6.008a8.417 8.417 0 00-2-.768zM4 12V6H2v6h2zm0-8V2H2v2h2zm6 0V2H6v2h4zm6 0V2h-4v2h4zm-2 5a6.451 6.451 0 00-6 4.09 6.451 6.451 0 006 4.092 6.451 6.451 0 006-4.091A6.451 6.451 0 0014 9zm0 6.818a2.728 2.728 0 010-5.454 2.728 2.728 0 010 5.454zm0-4.363c-.905 0-1.636.73-1.636 1.636 0 .905.73 1.636 1.636 1.636.905 0 1.636-.73 1.636-1.636 0-.906-.73-1.636-1.636-1.636z\"\n fill=\"#000\"\n fillRule=\"nonzero\"\n stroke=\"none\"\n strokeWidth={1}\n opacity={0.54}\n />\n </svg>\n );\n};\n\nexport default SvgTable;\n","import React, {useCallback, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport {ColumnsDataType} from '../../../../constants';\nimport TableIcon from '../../../../icons/Table';\nimport {SmallIconButtonWithTooltip} from '../../../SmallIconButton';\nimport {pipe, uniq, pluck, difference, concat} from 'ramda';\n\nimport {ColumnsSettingsPopup} from './ColumnsSettingsPopup';\n\nimport i18n from 'ui-i18n';\nimport {getChildColumns, isColumnSelected} from './columnHelpers';\n\nconst ColumnsSettings = ({columnsData, selectedColumns, onChangeColumns, title, tooltipTitle}) => {\n const [anchorEl, setAnchorEl] = useState(null);\n const openPopup = (event) => setAnchorEl(event.currentTarget);\n const closePopup = () => setAnchorEl(null);\n const handleColumnClick = useCallback(\n (column) => {\n const changedColumns = pipe(getChildColumns, pluck('id'))(column);\n const wasSelected = isColumnSelected(selectedColumns, column);\n onChangeColumns(\n wasSelected\n ? difference(selectedColumns, changedColumns)\n : uniq(concat(selectedColumns, changedColumns))\n );\n },\n [selectedColumns, onChangeColumns]\n );\n return (\n <>\n <SmallIconButtonWithTooltip\n tooltipTitle={tooltipTitle || i18n.text('Show/hide columns')}\n size=\"L\"\n icon={TableIcon}\n onClick={openPopup}\n />\n <ColumnsSettingsPopup\n onColumnClick={handleColumnClick}\n anchorEl={anchorEl}\n columnsData={columnsData}\n onClose={closePopup}\n title={title}\n selectedColumns={selectedColumns}\n />\n </>\n );\n};\n\nColumnsSettings.propTypes = {\n columnsData: ColumnsDataType,\n selectedColumns: PropTypes.arrayOf(PropTypes.string),\n onChangeColumns: PropTypes.func,\n title: PropTypes.string,\n tooltipTitle: PropTypes.string\n};\n\nexport default ColumnsSettings;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n popup: {\n minWidth: '200px'\n },\n groupItem: {\n backgroundColor: 'rgba(0,0,0,0.04)'\n }\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport AttributeListItem from '../../../AttributeListItem/AttributeListItem';\nimport Highlighter from '../../../Highlighter/Highlighter';\n\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\nconst ColumnListItem = ({item, onClick, checked, level, style, isFocused, isGroupItem, hideCheckBox}) => {\n const styles = useStyles();\n return (\n <AttributeListItem\n hideCheckBox={hideCheckBox}\n key={item.id}\n onClick={onClick}\n checked={checked}\n level={level}\n data={item}\n label={<Highlighter text={item.label} highlight={item.filterText} />}\n labelInText={item.label}\n style={style}\n isFocused={isFocused}\n hideIcon={isGroupItem}\n className={classnames({[styles.groupItem]: isGroupItem})}\n />\n );\n};\n\nColumnListItem.propTypes = {\n item: PropTypes.shape({\n label: PropTypes.string,\n filterText: PropTypes.string\n }),\n level: PropTypes.number,\n onClick: PropTypes.func,\n checked: PropTypes.bool,\n style: PropTypes.object,\n isGroupItem: PropTypes.bool,\n isFocused: PropTypes.bool,\n hideCheckBox: PropTypes.bool\n};\n\nexport default ColumnListItem;\n","import React, {useState, useMemo, useCallback} from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe} from 'ramda';\n\nimport {getMaxItemWidth, DataTypeDefinition} from '@reltio/mdm-sdk';\n\nimport VirtualGroupedList from '../../../VirtualGroupedList/VirtualGroupedList';\nimport SelectionPopup from '../../../SelectionPopup/SelectionPopup';\nimport {buildColumnItems, isColumnSelected, isGroupColumn} from './columnHelpers';\nimport {flattenGroupedItemsData} from '../../../VirtualGroupedList/helpers';\nimport {useKeyboardNavigation} from '../../../SelectionPopup/helpers';\nimport ColumnListItem from './ColumnListItem';\n\nimport {useStyles} from './styles';\nimport {ListItemProps} from '@material-ui/core/ListItem';\n\ntype Column = {\n id: string;\n label: string;\n};\n\ntype GroupedColumnData =\n | {\n id: string;\n label: string;\n columns: Column[];\n }\n | Column;\n\ntype GroupedColumnList = {\n id: string;\n groupId: string;\n label: string;\n attrType: DataTypeDefinition;\n};\n\ntype Props = {\n anchorEl: HTMLElement;\n onClose: () => void;\n title?: string;\n columnsData: GroupedColumnData[];\n onColumnClick: (column: {id: string}) => void;\n selectedColumns: string[];\n hideCheckBox?: boolean;\n};\n\nconst ITEM_HEIGHT = 32;\nconst MAX_LIST_CONTAINER_HEIGHT = 300;\nconst DEFAULT_MIN_CONTAINER_WIDTH = 308;\nconst CONTAINER_HEADER_HEIGHT = 108;\nconst MIN_CONTAINER_HEIGHT = 140;\n\nexport const ColumnsSettingsPopup = ({\n anchorEl,\n onClose,\n title,\n columnsData,\n onColumnClick,\n selectedColumns,\n hideCheckBox\n}: Props) => {\n const styles = useStyles();\n const [filterText, setFilterText] = useState('');\n const clearFilter = () => setFilterText('');\n const groupedItems = useMemo(() => buildColumnItems(columnsData, filterText), [columnsData, filterText]);\n\n const items = useMemo(() => flattenGroupedItemsData(groupedItems), [groupedItems]);\n const containerWidth: number = getMaxItemWidth('label')(groupedItems) || DEFAULT_MIN_CONTAINER_WIDTH;\n\n const handleSearchOnEnter = useCallback(\n ({item}: {item: {id: string}; groupData: {item: {id: string}}}) => onColumnClick(item),\n [onColumnClick]\n );\n\n const {focusIndex, handleKeyDown} = useKeyboardNavigation({\n items,\n open: true,\n onSelectFocusedItem: handleSearchOnEnter,\n selectedItems: selectedColumns,\n onClose\n });\n const handleClose = useCallback(pipe(onClose, clearFilter), [onClose]);\n\n const renderColumnItem = (\n style: ListItemProps['style'],\n {item, level = 0}: {item: GroupedColumnList; level?: number},\n index: number\n ) => {\n return (\n <ColumnListItem\n hideCheckBox={hideCheckBox}\n style={style}\n item={item}\n level={level}\n isFocused={focusIndex === index}\n checked={isColumnSelected(selectedColumns, item)}\n isGroupItem={isGroupColumn(item)}\n onClick={hideCheckBox ? pipe(onColumnClick, handleClose) : onColumnClick}\n />\n );\n };\n\n const listHeight = Math.min(MAX_LIST_CONTAINER_HEIGHT, ITEM_HEIGHT * items.length);\n const containerHeight = Math.max(MIN_CONTAINER_HEIGHT, listHeight + CONTAINER_HEADER_HEIGHT);\n\n return (\n <SelectionPopup\n className={styles.popup}\n open={!!anchorEl}\n anchorEl={anchorEl}\n onClose={handleClose}\n onSearch={setFilterText}\n title={title || i18n.text('Show/hide columns')}\n containerWidth={containerWidth}\n containerHeight={containerHeight}\n searchInputOnKeyDown={handleKeyDown}\n >\n <VirtualGroupedList\n fixedTitle={false}\n height={listHeight}\n renderItem={renderColumnItem}\n items={items}\n getItemSize={() => ITEM_HEIGHT}\n focusIndex={focusIndex}\n />\n </SelectionPopup>\n );\n};\n","import {assoc, chain, curry, either, filter, has, pipe, propOr, reduce, when} from 'ramda';\nimport {utils} from '@reltio/mdm-sdk';\n\nconst isGroupColumn = (column) => column.id === column.groupId;\nconst isParentToColumn = curry(\n ({id, groupId}, parent) => parent.groupId === groupId && (id === parent.id || id.startsWith(`${parent.id}.`))\n);\nconst isGroupToColumn = curry(({groupId}, group) => groupId === group.id);\nconst isHideableColumn = propOr(true, 'hideable');\n\nconst getColumnRoot = (columns, column) => columns.find(either(isGroupToColumn(column), isParentToColumn(column)));\n\nconst addColumn = (columns, column) => {\n const root = getColumnRoot(columns, column);\n if (root) {\n root.children = addColumn(root.children || [], column);\n return columns;\n } else {\n return columns.concat(column);\n }\n};\n\nconst filterColumnsByLabel = curry(\n (filterText, column) =>\n utils.strings.search(column.label, filterText) || (column.children || []).some(filterColumnsByLabel(filterText))\n);\n\nconst buildColumnsTrees = reduce(\n (acc, columnData) =>\n addColumn(acc, {\n id: columnData.id,\n groupId: columnData.groupId,\n label: columnData.label,\n attrType: columnData.dataTypeDefinition\n }),\n []\n);\n\nconst buildFilteredColumnItems = curry((filterText, columns, level = 0) =>\n pipe(\n filter(filterColumnsByLabel(filterText)),\n chain((column) => {\n const item = {\n item: {...column, filterText},\n level\n };\n const childrenItems = column.children\n ? buildFilteredColumnItems(filterText, column.children, level + 1)\n : [];\n return [item, ...childrenItems];\n })\n )(columns)\n);\n\nconst isGroupedColumnsData = has('columns');\nconst flattenGroupedColumnsData = ({id, label, columns}) => [\n {id, groupId: id, label},\n ...columns.map(assoc('groupId', id))\n];\n\nconst buildColumnItems = (columnsData, filterText) => {\n return pipe(\n chain(when(isGroupedColumnsData, flattenGroupedColumnsData)),\n filter(either(isGroupColumn, isHideableColumn)),\n buildColumnsTrees,\n buildFilteredColumnItems(filterText)\n )(columnsData);\n};\n\nconst getChildColumns = (column) => (column.children ? chain(getChildColumns, column.children) : [column]);\n\nconst isColumnSelected = (selectedColumns, column) => {\n const childColumns = getChildColumns(column);\n const isColumnSelected = (column) => selectedColumns.includes(column.id);\n return isGroupColumn(column) ? childColumns.every(isColumnSelected) : childColumns.some(isColumnSelected);\n};\n\nexport {buildColumnItems, getChildColumns, isGroupColumn, isColumnSelected};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n flex: 1\n },\n input: {\n height: '100%',\n paddingLeft: '12px',\n paddingRight: '8px',\n fontSize: '14px'\n },\n inputNumber: {\n minWidth: '60px',\n marginRight: 10,\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n },\n inputUnit: {\n width: '100%'\n }\n});\n","import React from 'react';\nimport {pipe} from 'ramda';\nimport i18n from 'ui-i18n';\nimport capitalize from '@material-ui/core/utils/capitalize';\nimport {TextField as TextField} from '@material-ui/core';\nimport SimpleDropDownSelector from '../SimpleDropDownSelector/SimpleDropDownSelector';\nimport {getValue} from '../../core/utils';\nimport {useStyles} from './styles';\n\ntype Props = {\n interval: [number, string];\n onChange: ([number, string]) => void;\n onFocus?: () => void;\n};\n\nconst periods = [\n i18n.text('minutes'),\n i18n.text('hours'),\n i18n.text('days'),\n i18n.text('weeks'),\n i18n.text('months'),\n i18n.text('years')\n];\n\nconst DateIntervalSelector = ({interval: [value, unit], onChange, onFocus}: Props) => {\n const styles = useStyles();\n const getIntervalFromValue = (newValue: number) => [newValue, unit];\n const getIntervalFromUnit = ({value: newUnit}: {value: string}) => [value, newUnit];\n const onNumberChange = pipe(getValue, parseInt, getIntervalFromValue, onChange);\n const onUnitChange = pipe(getIntervalFromUnit, onChange);\n return (\n <div className={styles.root}>\n <TextField\n type=\"number\"\n value={value || ''}\n onChange={onNumberChange}\n inputProps={{min: 1, onFocus: onFocus}}\n InputProps={{classes: {root: styles.input}}}\n className={styles.inputNumber}\n />\n <SimpleDropDownSelector\n label={''}\n placeholder={capitalize(unit)}\n className={styles.inputUnit}\n value={{value: unit, label: capitalize(unit)}}\n options={periods.map((value) => ({\n value,\n label: capitalize(value)\n }))}\n onChange={onUnitChange}\n TextFieldProps={{\n inputProps: {onFocus: onFocus},\n InputProps: {classes: {root: styles.input}}\n }}\n />\n </div>\n );\n};\n\nexport default DateIntervalSelector;\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: 'inset 0 -1px 0 0 rgba(0,114,206,0.06), inset 0 1px 0 0 rgba(0,114,206,0.06);',\n\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} 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};\n\nconst ProfileBand = ({className, entity, children, classes}: 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 {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 from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {Link as Link} from '@material-ui/core';\nimport {withTooltip} from '../../HOCs';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';\nimport KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\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 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={i18n.text('Go to search results')}\n >\n {formatNumberAsMetric(total, 1000000)}{' '}\n {total === 1 ? i18n.text('Search result') : i18n.text('Search results')}\n </LinkWithTooltip>\n <SmallIconButtonWithTooltip\n size=\"L\"\n icon={KeyboardArrowLeft}\n tooltipTitle={i18n.text('Go to previous profile')}\n onClick={onPrev}\n disabled={isPrevDisabled}\n showForDisabled\n />\n <SmallIconButtonWithTooltip\n size=\"L\"\n icon={KeyboardArrowRight}\n tooltipTitle={i18n.text('Go to 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 {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 {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 {ViewIdContext} from '../../../contexts';\nimport {useSafePromise} from '../../../hooks';\nimport {getSearchProvider} from '../searchProviders/SearchProviderFactory';\nimport {SearchNavigationData, SearchProviderData} from '../types';\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 {uri, index, total, tenant: searchTenant, 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 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 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 CreatableSelect from 'react-select/creatable';\nimport withMuiSkin from './withMuiSkin';\n\nexport default withMuiSkin(CreatableSelect);\n","import {MenuItem as MenuItem} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport classNames from 'classnames';\nimport ExpandedValueTooltip from '../../../ExpandedValueTooltip/ExpandedValueTooltip';\n\nexport default function Option(props) {\n const {\n innerProps,\n innerRef,\n children,\n isFocused,\n isSelected,\n selectProps: {classes},\n label\n } = props;\n\n return (\n <MenuItem\n className={classNames(classes.option, {[classes['option--selected']]: isSelected})}\n ref={innerRef}\n selected={isFocused}\n component=\"div\"\n {...innerProps}\n >\n <Checkbox color=\"primary\" checked={isSelected} />\n <ExpandedValueTooltip value={label}>\n <div className={classes['option--item']}>{children}</div>\n </ExpandedValueTooltip>\n </MenuItem>\n );\n}\n\nOption.propTypes = {\n children: PropTypes.node,\n innerProps: PropTypes.shape({\n id: PropTypes.string.isRequired,\n key: PropTypes.string,\n onClick: PropTypes.func.isRequired,\n onMouseMove: PropTypes.func.isRequired,\n onMouseOver: PropTypes.func.isRequired,\n tabIndex: PropTypes.number.isRequired\n }).isRequired,\n innerRef: PropTypes.oneOfType([\n PropTypes.oneOf([null]),\n PropTypes.func,\n PropTypes.shape({\n current: PropTypes.any.isRequired\n })\n ]),\n isFocused: PropTypes.bool.isRequired,\n isSelected: PropTypes.bool.isRequired,\n label: PropTypes.string,\n selectProps: PropTypes.shape({\n classes: PropTypes.shape({\n option: PropTypes.string\n })\n })\n};\n","import Option from './Option';\n\nconst components = {\n Option\n};\n\nexport default components;\n","import React, {useState} from 'react';\nimport PropTypes from 'prop-types';\nimport {omit} from 'ramda';\nimport CreatableSelect from '../CreatableSelect';\nimport Select from '../Select';\nimport AsyncSelect from '../AsyncSelect';\nimport multiSelectComponents from './components';\nimport {makeStyles} from '@material-ui/core/styles';\nimport {mergeClasses} from '../../../core/utils';\n\nconst useStyles = makeStyles((theme) => ({\n label: {\n top: 6,\n left: 16\n },\n placeholder: (props) => ({\n display: !props.placeholder || props.label ? 'none' : undefined\n }),\n 'option--selected': {\n fontWeight: 400\n },\n clearIndicator: {\n padding: theme.spacing(1),\n margin: theme.spacing(0.25, 0.5)\n },\n dropdownIndicator: {\n padding: theme.spacing(1),\n margin: theme.spacing(0.25, 0.5)\n }\n}));\n\nlet id = 0;\nconst getInputId = () => `custom-select-${id++}`;\n\nfunction MultiSelect(props) {\n const {\n label,\n creatable,\n getOptions,\n loadingIndicator,\n components: componentsProp,\n classes: classesProp,\n styles: stylesProp,\n onChange: onChangeProp,\n onInputChange: onInputChangeProp,\n menuPlacement = 'auto',\n ...reactSelectProps\n } = props;\n\n const SelectComponent = creatable ? CreatableSelect : getOptions ? AsyncSelect : Select;\n\n const [inputValue, setInputValue] = useState('');\n const multiSelectClasses = useStyles(omit(['classes'], props));\n const inputId = getInputId();\n\n const components = {\n ...multiSelectComponents,\n ...componentsProp\n };\n\n const classes = mergeClasses(multiSelectClasses, classesProp);\n\n function handleInputChange(value, {action}) {\n onInputChangeProp(value, {action});\n if (action !== 'set-value') {\n setInputValue(value);\n }\n }\n\n function handleChange(value, actionMeta) {\n onChangeProp(value, actionMeta);\n if (actionMeta.action === 'create-option') {\n setInputValue('');\n onInputChangeProp('', {action: 'input-change'});\n }\n }\n\n const styles = {\n indicatorSeparator: (base) => ({\n ...base,\n margin: '10px 0'\n }),\n loadingIndicator: (base) => ({\n ...base,\n display: loadingIndicator ? base.display : 'none'\n }),\n loadingMessage: (base) => ({\n ...base,\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif'\n }),\n ...stylesProp\n };\n\n const labelProps = label\n ? {\n inputId,\n TextFieldProps: {\n label,\n InputLabelProps: {\n htmlFor: inputId,\n shrink: props.value && props.value.length ? true : undefined,\n className: classes.label\n },\n ...props.TextFieldProps\n }\n }\n : {};\n\n return (\n <SelectComponent\n isMulti\n inputId={inputId}\n inputValue={inputValue}\n onChange={handleChange}\n onInputChange={handleInputChange}\n closeMenuOnSelect={false}\n hideSelectedOptions={false}\n classes={classes}\n components={components}\n styles={styles}\n menuPlacement={menuPlacement}\n loadOptions={getOptions}\n {...labelProps}\n {...reactSelectProps}\n />\n );\n}\n\nMultiSelect.defaultProps = {\n creatable: false,\n cacheOptions: true,\n components: {},\n classes: {},\n placeholder: '',\n loadingIndicator: false,\n onInputChange: () => {},\n onChange: () => {}\n};\n\nMultiSelect.propTypes = {\n /**\n * Async creatable multi select with optional placeholder, shrink-label, non-closing menu and options with checkboxes.\n * Based on react-select/creatable and react-select/async.\n * See react-select docs: https://react-select.com\n *\n * Below are listed only props used in the MultiSelect component. Check https://react-select.com/props first.\n * */\n\n /** Ability to create values. React-select/async-creatable is used internally */\n creatable: PropTypes.bool,\n /** True for enabling cache. Recommended. */\n cacheOptions: PropTypes.bool,\n defaultOptions: PropTypes.bool,\n /** Array of selected options. */\n value: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any\n })\n ),\n options: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any\n })\n ),\n /** Way to receive updated values */\n onChange: PropTypes.func,\n /** Way to receive updated inputValue */\n onInputChange: PropTypes.func,\n /** Input placeholder. Will not be shown if the label prop is specified */\n placeholder: PropTypes.string,\n /** Floating label from @material-ui/core/TextField component */\n label: PropTypes.string,\n /** Enable to show default react-select's indicator */\n loadingIndicator: PropTypes.bool,\n /** You could redefine any of these components */\n components: PropTypes.shape({\n ClearIndicator: PropTypes.func,\n Control: PropTypes.func,\n DropdownIndicator: PropTypes.func,\n DownChevron: PropTypes.func,\n CrossIcon: PropTypes.func,\n Group: PropTypes.func,\n GroupHeading: PropTypes.func,\n IndicatorsContainer: PropTypes.func,\n IndicatorSeparator: PropTypes.func,\n Input: PropTypes.func,\n LoadingIndicator: PropTypes.func,\n Menu: PropTypes.func,\n MenuList: PropTypes.func,\n MenuPortal: PropTypes.func,\n LoadingMessage: PropTypes.func,\n NoOptionsMessage: PropTypes.func,\n MultiValue: PropTypes.func,\n MultiValueContainer: PropTypes.func,\n MultiValueLabel: PropTypes.func,\n MultiValueRemove: PropTypes.func,\n Option: PropTypes.func,\n Placeholder: PropTypes.func,\n SelectContainer: PropTypes.func,\n SingleValue: PropTypes.func,\n ValueContainer: PropTypes.func\n }),\n /** Classes are passed to mui skin components. Provided classes will be merged with existing ones. */\n classes: PropTypes.shape({\n control: PropTypes.string,\n valueContainer: PropTypes.string,\n multiValue: PropTypes.string,\n noOptionsMessage: PropTypes.string,\n singleValue: PropTypes.string,\n placeholder: PropTypes.string,\n menu: PropTypes.string,\n clearIndicator: PropTypes.string,\n dropdownIndicator: PropTypes.string,\n option: PropTypes.string,\n 'option--selected': PropTypes.string,\n label: PropTypes.string\n }),\n /**\n * React-select's way to customise style. Could be used to style default react-select components.\n * In other cases better to use classes and components props\n * */\n styles: PropTypes.shape({\n clearIndicator: PropTypes.func,\n container: PropTypes.func,\n control: PropTypes.func,\n dropdownIndicator: PropTypes.func,\n group: PropTypes.func,\n groupHeading: PropTypes.func,\n indicatorsContainer: PropTypes.func,\n indicatorSeparator: PropTypes.func,\n input: PropTypes.func,\n loadingIndicator: PropTypes.func,\n loadingMessage: PropTypes.func,\n menu: PropTypes.func,\n menuList: PropTypes.func,\n menuPortal: PropTypes.func,\n multiValue: PropTypes.func,\n multiValueLabel: PropTypes.func,\n multiValueRemove: PropTypes.func,\n noOptionsMessage: PropTypes.func,\n option: PropTypes.func,\n placeholder: PropTypes.func,\n singleValue: PropTypes.func,\n valueContainer: PropTypes.func\n }),\n /** Props from https://material-ui.com/api/text-field/ */\n TextFieldProps: PropTypes.object /* eslint-disable-line react/forbid-prop-types */,\n getOptions: PropTypes.func,\n menuPlacement: PropTypes.string,\n menuPortalTarget: PropTypes.object,\n getOptionValue: PropTypes.func,\n isSearchable: PropTypes.bool,\n inputRef: PropTypes.shape({current: PropTypes.object})\n};\n\nexport default MultiSelect;\n","import MultiSelect from './MultiSelect';\n\nexport default MultiSelect;\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, {VFC, 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 }[];\n classes?: {active?: string; buttonWrapper?: string} & IconButtonProps['classes'];\n activeIndexId: number;\n className?: string;\n onButtonClick: (id: number) => void;\n};\n\nexport const SideButtonsPanel: VFC<Props> = ({buttonsProps, activeIndexId, className, onButtonClick, classes = {}}) => {\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 React from 'react';\n\nconst Spacer = () => <div style={{flex: 1}} />;\n\nexport default Spacer;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const customStyles = {\n input: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n loadingMessage: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n menuPortal: (currentStyles) => ({...currentStyles, zIndex: 1300})\n};\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n title: {\n paddingBottom: '10px',\n paddingLeft: '5px',\n fontSize: '14px'\n },\n dropDownInput: {\n width: '100%',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n borderTop: '4px'\n },\n option: {\n fontSize: '14px',\n height: '32px'\n }\n});\n","import React, {useRef} from 'react';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {defaultTo, pipe, pluck, prop} from 'ramda';\nimport classnames from 'classnames';\nimport {Typography as Typography} from '@material-ui/core';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport {getAllUsersForTenant, User, utils} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {customStyles, useStyles} from './styles';\n\ntype Props = {\n selectedUsers: string[];\n onChange: (activities: string[]) => void;\n className?: string;\n disableUnderline?: boolean;\n};\n\nconst UserSelector = ({selectedUsers, onChange, className, disableUnderline}: Props) => {\n const styles = useStyles();\n\n const valueToOption = (value: string) => ({value, label: value});\n const prepareValues = (values: string[]) => values.map(valueToOption);\n const filterUsers = (inputValue) => (users) =>\n inputValue ? users.filter((username) => utils.strings.search(username, inputValue)) : users;\n\n const tenant = useSelector(mdmModule.selectors.getTenant);\n const servicesPath = useSelector(mdmModule.selectors.getServicesPath);\n\n const cachedRequest = useRef<Promise<{array: User[]}>>();\n const getOptions = (inputValue) => {\n if (!cachedRequest.current) {\n cachedRequest.current = getAllUsersForTenant({tenant, servicesPath});\n }\n return cachedRequest.current.then(\n pipe(prop('array'), pluck('username'), filterUsers(inputValue), prepareValues)\n );\n };\n\n return (\n <div className={classnames(styles.root, className)}>\n <Typography className={styles.title} variant={'subtitle1'}>\n {i18n.text('User')}\n </Typography>\n <MultiSelect\n value={prepareValues(selectedUsers)}\n onChange={pipe(defaultTo([]), pluck('value'), onChange)}\n defaultOptions={true}\n getOptions={getOptions}\n TextFieldProps={{\n InputProps: {disableUnderline},\n className: styles.dropDownInput\n }}\n components={{\n DropdownIndicator: DropdownIndicatorWithIconButton\n }}\n styles={customStyles}\n classes={styles}\n menuPortalTarget={document.body}\n />\n </div>\n );\n};\n\nexport default UserSelector;\n","export enum ActivityTypes {\n MODEL_UPDATED = 'MODEL_UPDATED',\n ENTITY_REMOVED = 'ENTITY_REMOVED',\n ENTITY_CREATED = 'ENTITY_CREATED',\n ENTITY_CHANGED = 'ENTITY_CHANGED',\n ENTITIES_MERGED = 'ENTITIES_MERGED',\n ENTITIES_SPLITTED = 'ENTITIES_SPLITTED',\n ENTITY_LOST_MERGE = 'ENTITY_LOST_MERGE',\n RELATIONSHIP_CREATED = 'RELATIONSHIP_CREATED',\n RELATIONSHIP_REMOVED = 'RELATIONSHIP_REMOVED',\n RELATIONSHIP_CHANGED = 'RELATIONSHIP_CHANGED',\n POTENTIAL_MATCHES_FOUND = 'POTENTIAL_MATCHES_FOUND',\n NOT_MATCHES_SET = 'NOT_MATCHES_SET',\n NOT_MATCHES_RESET = 'NOT_MATCHES_RESET',\n PERIODIC_TASK_SCHEDULED = 'PERIODIC_TASK_SCHEDULED',\n ENTITIES_MERGED_MANUALLY = 'ENTITIES_MERGED_MANUALLY',\n POTENTIAL_MATCHES_REMOVED = 'POTENTIAL_MATCHES_REMOVED',\n ENTITIES_MERGED_ON_THE_FLY = 'ENTITIES_MERGED_ON_THE_FLY',\n USER_LOGIN = 'USER_LOGIN',\n USER_LOGOUT = 'USER_LOGOUT',\n USER_SEARCH = 'USER_SEARCH',\n USER_PROFILE_VIEW = 'USER_PROFILE_VIEW',\n COMMENT_ADDED = 'COMMENT_ADDED',\n COMMENT_UPDATED = 'COMMENT_UPDATED',\n COMMENT_DELETED = 'COMMENT_DELETED',\n ANALYTICS_ATTRIBUTES_CHANGED = 'ANALYTICS_ATTRIBUTES_CHANGED',\n SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE = 'SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE',\n GROUP_CREATED = 'GROUP_CREATED',\n GROUP_REMOVED = 'GROUP_REMOVED',\n GROUP_CHANGED = 'GROUP_CHANGED'\n}\n","import {filter, groupBy, ifElse, map, path, pipe, propOr, values, is, isNil, includes, reject} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {ActivityData, ActivityItem, ActivityTypes, DeltaValue} from '../types';\n\nconst getItemDataType = path(['data', 'type']);\n\nexport const getActivityType = (activity: ActivityData) => {\n const {items, label} = activity;\n const [firstItem] = items || [];\n return getItemDataType(firstItem) || label;\n};\n\nexport const isValidActivityType = (type: string): boolean => pipe(values, includes(type))(ActivityTypes);\n\nexport const removeIgnoredItems = (activity: ActivityData): ActivityData => {\n const {items, label} = activity;\n const isImplementedItem = (item: ActivityItem): boolean => isValidActivityType(getItemDataType(item) || label);\n const filteredItems = filter(isImplementedItem)(items);\n if (items.length !== filteredItems.length) {\n console.error('Activities not implemented:', reject(isImplementedItem)(items));\n }\n return {\n ...activity,\n items: filteredItems,\n itemsTotal: filteredItems.length\n };\n};\n\nexport const splitActivityByType = (activity: ActivityData) => {\n return pipe(\n propOr([], 'items'),\n groupBy(getItemDataType),\n values,\n ifElse(\n ({length}) => length > 1,\n map((items) => ({\n ...activity,\n items,\n itemsTotal: items.length\n })),\n () => [activity]\n )\n )(activity);\n};\n\nexport const stringifyDeltaValue = (delta: string | Record<string, DeltaValue[]> | DeltaValue | DeltaValue[]) => {\n if (isNil(delta)) {\n return '';\n } else if (typeof delta === 'string') {\n return delta;\n } else if (Array.isArray(delta)) {\n return delta.map(stringifyDeltaValue).join(', ');\n } else if (is(Object, delta)) {\n return 'value' in delta ? stringifyDeltaValue(delta.value) : stringifyDeltaValue(Object.values(delta));\n } else {\n return delta.toString();\n }\n};\n\nexport const getActivityLabel = (type: ActivityTypes) => {\n const labels = {\n [ActivityTypes.COMMENT_ADDED]: i18n.text('Comment added'),\n [ActivityTypes.COMMENT_DELETED]: i18n.text('Comment deleted'),\n [ActivityTypes.COMMENT_UPDATED]: i18n.text('Comment updated'),\n [ActivityTypes.ENTITIES_MERGED]: i18n.text('Profile merged'),\n [ActivityTypes.ENTITIES_MERGED_MANUALLY]: i18n.text('Profile merged manually'),\n [ActivityTypes.ENTITIES_MERGED_ON_THE_FLY]: i18n.text('Profile merged on the fly'),\n [ActivityTypes.ENTITIES_SPLITTED]: i18n.text('Profile un-merged'),\n [ActivityTypes.ENTITY_CHANGED]: i18n.text('Profile updated'),\n [ActivityTypes.ENTITY_CREATED]: i18n.text('Profile created'),\n [ActivityTypes.ENTITY_LOST_MERGE]: i18n.text('Profile lost merge'),\n [ActivityTypes.ENTITY_REMOVED]: i18n.text('Profile removed'),\n [ActivityTypes.GROUP_CHANGED]: i18n.text('Group updated'),\n [ActivityTypes.GROUP_CREATED]: i18n.text('Group created'),\n [ActivityTypes.GROUP_REMOVED]: i18n.text('Group removed'),\n [ActivityTypes.MODEL_UPDATED]: i18n.text('Model was updated'),\n [ActivityTypes.NOT_MATCHES_RESET]: i18n.text('Not matches reset'),\n [ActivityTypes.NOT_MATCHES_SET]: i18n.text('Not matches set'),\n [ActivityTypes.PERIODIC_TASK_SCHEDULED]: i18n.text('Periodic task was scheduled'),\n [ActivityTypes.POTENTIAL_MATCHES_FOUND]: i18n.text('Potential matches found'),\n [ActivityTypes.POTENTIAL_MATCHES_REMOVED]: i18n.text('Potential matches removed'),\n [ActivityTypes.RELATIONSHIP_CHANGED]: i18n.text('Relationship updated'),\n [ActivityTypes.RELATIONSHIP_CREATED]: i18n.text('Relationship created'),\n [ActivityTypes.RELATIONSHIP_REMOVED]: i18n.text('Relationship removed'),\n [ActivityTypes.USER_LOGIN]: i18n.text('Logged in'),\n [ActivityTypes.USER_LOGOUT]: i18n.text('Logged out'),\n [ActivityTypes.USER_PROFILE_VIEW]: i18n.text('Profile viewed'),\n [ActivityTypes.USER_SEARCH]: i18n.text('Searched'),\n [ActivityTypes.ANALYTICS_ATTRIBUTES_CHANGED]: i18n.text('Analytics attribute changed'),\n [ActivityTypes.SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE]: i18n.text('SFDC connector synchronization issue')\n };\n return labels[type] || '';\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n dropdownIndicator: {\n transition: 'transform .15s ease'\n },\n inputRoot: {\n fontSize: '14px',\n height: 46\n },\n input: {\n padding: '0 12px 0'\n },\n dateOptionLabel: {\n minWidth: '100px'\n },\n paper: {\n minWidth: '112px'\n }\n});\n","import React, {useCallback, useRef, useState} from 'react';\nimport moment from 'moment';\nimport i18n from 'ui-i18n';\nimport {isNil} from 'ramda';\nimport {DataTypes, formatDataTypeValue} from '@reltio/mdm-sdk';\n\nimport {TextField as TextField} from '@material-ui/core';\nimport {Menu as Menu} from '@material-ui/core';\nimport DropdownIndicatorWithIconButton from '../../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport DateRangePicker from '../../DateRangePicker/DateRangePicker';\nimport {useStyles} from './styles';\n\ntype DateValues = [Date, Date];\ntype Props = {\n values: DateValues;\n onChange: (values: DateValues) => void;\n onFocus?: () => void;\n};\n\nconst localeFormat = moment.localeData().longDateFormat('L');\n\nconst formatValue = (value: Date, placeholder: string) => {\n return isNil(value)\n ? `${placeholder}`\n : `${formatDataTypeValue({dataTypeDefinition: {type: DataTypes.TYPE_ACTIVENESS_DATE}}, value)}`;\n};\n\nconst CustomDateRangeEditor = ({values, onChange, onFocus}: Props) => {\n const placeholder = localeFormat;\n const inputRef = useRef(null);\n const [open, setOpen] = useState(false);\n const styles = useStyles();\n\n const onApply = (values: DateValues) => {\n onChange(values);\n setOpen(false);\n };\n\n const handleToggle = useCallback(() => {\n setOpen((open) => !open);\n onFocus();\n }, [onFocus]);\n\n const onCancel = () => {\n setOpen(false);\n };\n\n return (\n <div className={styles.root}>\n <TextField\n fullWidth\n value={values.map((value) => formatValue(value, placeholder)).join(' \\u2014 ')}\n onClick={handleToggle}\n variant=\"filled\"\n ref={inputRef}\n InputProps={{\n endAdornment: (\n <DropdownIndicatorWithIconButton\n selectProps={{classes: styles, menuIsOpen: open}}\n innerProps={{}}\n />\n ),\n disableUnderline: isNil(values),\n readOnly: true,\n classes: {\n root: styles.inputRoot,\n input: styles.input\n }\n }}\n InputLabelProps={{\n shrink: false\n }}\n placeholder={i18n.text(`${placeholder} \\u2014 ${placeholder}`)}\n />\n <Menu\n variant=\"menu\"\n open={open}\n autoFocus={false}\n classes={{paper: styles.paper}}\n anchorEl={inputRef.current}\n onClose={onCancel}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left'\n }}\n elevation={2}\n getContentAnchorEl={null}\n MenuListProps={{\n autoFocusItem: open,\n style: {width: '100%'}\n }}\n >\n <DateRangePicker\n values={values}\n onCancel={onCancel}\n onApply={onApply}\n type={DataTypes.TYPE_ACTIVENESS_DATE}\n />\n </Menu>\n </div>\n );\n};\n\nexport default CustomDateRangeEditor;\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 {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: ''\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 permanentLink: '',\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 React, {useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Portal as Portal} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport Snackbar, {SnackbarOrigin} from '@material-ui/core/Snackbar';\n\ntype SnackbarOptions = {\n anchorOrigin?: SnackbarOrigin;\n showDismiss?: boolean;\n};\nconst FIVE_MINUTES = 5 * 60 * 1000;\nexport const useSnackbar = (options: SnackbarOptions = {}) => {\n const {anchorOrigin, showDismiss} = options;\n const [isOpenSnackbar, setIsOpenSnackbar] = useState(false);\n const [snackbarMessage, setSnackbarMessage] = useState('');\n\n const closeSnackbar = useCallback(() => {\n setIsOpenSnackbar(false);\n setSnackbarMessage('');\n }, []);\n\n const showSnackbarMessage = useCallback((message) => {\n setIsOpenSnackbar(true);\n setSnackbarMessage(message);\n }, []);\n\n const SnackbarRenderer = useCallback(() => {\n return (\n <Portal container={document.body}>\n <Snackbar\n open={isOpenSnackbar}\n anchorOrigin={anchorOrigin}\n autoHideDuration={FIVE_MINUTES}\n onClose={closeSnackbar}\n message={snackbarMessage}\n action={\n showDismiss ? (\n <Button color=\"primary\" onClick={closeSnackbar}>\n {i18n.text('Dismiss')}\n </Button>\n ) : undefined\n }\n />\n </Portal>\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpenSnackbar, closeSnackbar, snackbarMessage]);\n\n return {SnackbarRenderer, showSnackbarMessage};\n};\n","import {AttributeType} from '@reltio/mdm-sdk';\n\nexport type ReactGridLayoutItem = {\n i: string;\n x: number;\n y: number;\n w: number;\n h: number;\n minW?: number;\n minH?: number;\n maxW?: number;\n maxH?: number;\n static?: boolean;\n};\n\nexport type AttributeOption = {\n label: string;\n value: string;\n attrType: AttributeType;\n chipLabel: string;\n level: number;\n};\n\nexport enum DateRangeTypes {\n WITHIN = 'within',\n AGO = 'ago',\n BETWEEN = 'between'\n}\n\nexport type DateRangeFilter = {\n type: DateRangeTypes;\n period: [number, string] | [Date, Date];\n};\n\nexport type QueryBuilderAttributeData = {\n title: string;\n pathToTitle: Array<string>;\n fieldName: string;\n entityTypeUri: string;\n attrType: AttributeType;\n uri: string;\n groupName: string;\n filterOptions: Array<string>;\n};\n\nexport type QueryBuilderAttribute = {\n id: string;\n values: Array<unknown>;\n data: QueryBuilderAttributeData;\n filter: string;\n operator: string;\n};\n\nexport type AttributeSelectorItem = {\n attrType?: AttributeType;\n entityTypeUri?: string;\n fieldName: string;\n groupName?: string;\n title: string;\n uri?: string;\n children?: AttributeSelectorItem[];\n pathToTitle?: string[];\n};\n\nexport type AttributeSelectorItemsGroup = {\n id?: string;\n title: string;\n attributes: AttributeSelectorItem[];\n};\n\nexport type AttributeSelectionInfo = {\n index: number;\n checked: boolean;\n attribute: AttributeSelectorItem;\n selectedAttributes: AttributeSelectorItem[];\n};\n\nexport type BasicAttributeSelectorProps = {\n className?: string;\n itemsGroups: AttributeSelectorItemsGroup[];\n value: AttributeSelectorItem;\n onSelect: (selectInfo: AttributeSelectionInfo) => void;\n onRestoreFocus?: () => void;\n onOpenPopup?: () => void;\n getLabel?: (value: {fieldName?: string; pathToTitle?: string[]; title: string}) => string;\n disableRestoreFocus?: boolean;\n disableEnforceFocus?: boolean;\n single?: boolean;\n ungroup?: boolean;\n disabled?: boolean;\n hideCheckBox?: boolean;\n};\nexport enum RequestStates {\n INIT = 'init',\n LOADING = 'loading',\n LOADED = 'loaded',\n ERROR = 'error'\n}\n\nexport type SelectableItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selected?: boolean;\n};\n\nexport type DropDownMenuItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selectable?: boolean;\n selected?: boolean;\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 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 opacity={highlightEnabled && isDimmed ? 0.1 : 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 <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 from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Entity, getEntityLink, getLabel} from '@reltio/mdm-sdk';\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 entityLink = getEntityLink({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({\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});\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 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 HTML5Backend from 'react-dnd-html5-backend';\nimport {DndProvider} from 'react-dnd';\nimport EmptyState from '../EmptyState/EmptyState';\nimport TreeActionSnackbar from '../TreeActionSnackbar/TreeActionSnackbar';\n\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 = ({config, entity, metadata, getSavedState, saveState, dispatch, historyEvent}: Props) => {\n const styles = useStyles();\n const [activeMode, setActiveMode] = useState(LegendMode.Crosswalk);\n\n const [activeTab, setActiveTab] = useState(0);\n const toggleActive = (newIndex: number) => setActiveTab((active) => (active === newIndex ? null : newIndex));\n const isSidePanelOpen = activeTab !== null;\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 {crosswalkTree, reload: reloadCrosswalkTree} = useCrosswalkTree(historySlice?.aEntity.uri || entityUri);\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 });\n\n const {historyFilter, onApplyFilter, isLoading, historicUris, historyWithTotal, canLoadMore, 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}\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={isLoading}\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 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 visibleColumns={visibleColumns}\n onChangeVisibleColumns={setVisibleColumns}\n entity={modifiedEntity}\n crosswalksMap={crosswalksMap}\n selectedAttributeTypes={selectedAttrTypes}\n onSelectAttributeTypes={setSelectedAttrTypes}\n readOnly={!!historySlice}\n onDelete={onDeleteAttribute}\n onPin={onPinAttribute}\n onIgnore={onIgnoreAttribute}\n onEdit={onEditAttribute}\n onAdd={onAddAttribute}\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 {getCrosswalkTree, CrosswalkTree} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '@reltio/components';\n\nexport const useCrosswalkTree = (entityUri: string) => {\n const [crosswalkTree, setCrosswalkTree] = useState<CrosswalkTree>(null);\n const [isLoading, setIsLoading] = useState(false);\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 setIsLoading(true);\n safePromise(getCrosswalkTree({entityUri}))\n .then((results) => {\n setCrosswalkTree(results);\n })\n .catch(onError)\n .finally(() => {\n setIsLoading(false);\n });\n } else {\n setCrosswalkTree(null);\n }\n }, [entityUri]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n return {isLoading, 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":["customStyles","input","currentStyles","fontSize","menuPortal","zIndex","useStyles","makeStyles","root","flex","title","paddingBottom","paddingLeft","dropDownInput","width","justifyContent","backgroundColor","borderTop","option","height","noOptionsMessage","entityType","selectedAttributes","className","onChange","disableUnderline","menuPlacement","metadata","useSelector","mdmModule","styles","prepareItems","useCallback","data","level","prevLabel","reduce","acc","item","hidden","chipLabel","label","push","value","uri","attrType","subAttributes","getAttributeTypeSubAttributes","concat","options","useMemo","attributes","classnames","Typography","variant","i18n","MultiSelect","TextFieldProps","InputProps","classes","components","DropdownIndicator","DropdownIndicatorWithIconButton","MultiValue","props","Option","isFocused","isSelected","innerProps","AttributeListItem","checked","labelInText","pipe","defaultTo","menuPortalTarget","document","body","contextSelector","CellRenderer","withContext","TableContext","viewBox","xmlns","d","fill","fillRule","stroke","strokeWidth","opacity","ColumnsSettings","columnsData","selectedColumns","onChangeColumns","tooltipTitle","anchorEl","setAnchorEl","useState","handleColumnClick","column","changedColumns","getChildColumns","pluck","wasSelected","isColumnSelected","difference","uniq","SmallIconButton","size","icon","TableIcon","onClick","event","currentTarget","ColumnsSettingsPopup","onColumnClick","onClose","propTypes","ColumnsDataType","PropTypes","popup","minWidth","groupItem","ColumnListItem","style","isGroupItem","hideCheckBox","key","id","Highlighter","text","highlight","filterText","hideIcon","setFilterText","groupedItems","buildColumnItems","items","flattenGroupedItemsData","containerWidth","getMaxItemWidth","handleSearchOnEnter","focusIndex","handleKeyDown","useKeyboardNavigation","open","onSelectFocusedItem","selectedItems","handleClose","listHeight","Math","min","length","containerHeight","max","SelectionPopup","onSearch","searchInputOnKeyDown","VirtualGroupedList","fixedTitle","renderItem","index","isGroupColumn","getItemSize","groupId","isParentToColumn","curry","parent","startsWith","isGroupToColumn","group","isHideableColumn","propOr","addColumn","columns","find","either","getColumnRoot","children","filterColumnsByLabel","utils","some","buildColumnsTrees","columnData","dataTypeDefinition","buildFilteredColumnItems","filter","chain","isGroupedColumnsData","has","flattenGroupedColumnsData","map","assoc","when","childColumns","includes","every","display","paddingRight","inputNumber","marginRight","inputUnit","periods","interval","unit","onFocus","onNumberChange","getValue","parseInt","newValue","onUnitChange","newUnit","TextField","type","inputProps","SimpleDropDownSelector","placeholder","capitalize","textOverflow","overflow","whiteSpace","padding","lineHeight","borderRadius","flexShrink","fontWeight","entity","entityTypeUri","getEntityType","entityTypeColor","getPropWithInheritance","theme","entityTypeLabel","getEntityTypeLabel","ExpandedValueTooltip","placement","color","component","profileBandWrapper","profileBand","alignItems","boxShadow","content","minHeight","inactive","background","inactiveBackground","profileIcon","imageProfileIcon","profileInfo","flexDirection","badge","letterSpacing","palette","primary","wordBreak","marginTop","secondaryLabel","marginLeft","businessCard","secondary","specialInfo","flexWrap","entityId","cursor","textDecoration","showEntityId","handleCopyEntityIdToClipboard","navigator","clipboard","writeText","getEntityId","isNil","getLabel","businessCardText","getBusinessCardAttributesText","isActive","isActiveObject","entityUri","EntityAvatar","avatarClassName","imageClassName","EntityTypeBadge","isTempUri","Tooltip","container","link","LinkWithTooltip","withTooltip","Link","ProfileBandNavigationWidget","total","onPrev","onNext","onSearchResultsClick","isPrevDisabled","isNextDisabled","underline","formatNumberAsMetric","KeyboardArrowLeft","disabled","showForDisabled","KeyboardArrowRight","MainSearchProvider","constructor","query","sortField","sortOrder","tenant","searchTenant","apiPath","dtssPath","globalSearchRequestOptions","isDT","this","getQueryFilter","rawFilter","getEntities","filters","requestFilters","requestOptions","sort","order","select","scoreEnabled","getFilteredEntitiesFromDataTenant","customerTenant","dataTenant","getFilteredEntities","checkEntity","fieldName","values","offset","then","entities","requestEntities","requestTotal","getTotalFromDataTenant","getTotals","json","GraphSearchProvider","searchBody","allFilters","getGraphSearchEntities","buildFilterQueryString","from","getGraphSearchCount","count","getNewUris","cache","prop","reject","ProfileBandNavigation","safeCheckEntityPromise","useSafePromise","safeRequestTotalPromise","safeRequestEntitiesPromise","state","viewId","useContext","ViewIdContext","dispatch","useDispatch","loading","setLoading","searchProvider","getSearchProvider","updateNavigationData","mdmModuleSearch","openEntity","preparedUri","getEntityUriForLink","mdmModuleUi","source","perspectiveId","useEffect","requestNextPage","newIndex","newUris","finally","requestPrevPage","stepForwardWithCheck","cacheIndex","isExists","clearedCache","splice","stepBackWithCheck","indexOf","useSearchNavigation","mode","isViewMode","useSearchNavigationVisibility","withMuiSkin","CreatableSelect","innerRef","selectProps","MenuItem","classNames","ref","selected","Checkbox","onMouseMove","onMouseOver","tabIndex","isRequired","current","top","left","undefined","clearIndicator","spacing","margin","dropdownIndicator","creatable","getOptions","loadingIndicator","componentsProp","classesProp","stylesProp","onChangeProp","onInputChange","onInputChangeProp","reactSelectProps","SelectComponent","AsyncSelect","Select","inputValue","setInputValue","multiSelectClasses","omit","inputId","multiSelectComponents","mergeClasses","indicatorSeparator","base","loadingMessage","fontFamily","labelProps","InputLabelProps","htmlFor","shrink","isMulti","actionMeta","action","closeMenuOnSelect","hideSelectedOptions","loadOptions","defaultProps","cacheOptions","defaultOptions","ClearIndicator","Control","DownChevron","CrossIcon","Group","GroupHeading","IndicatorsContainer","IndicatorSeparator","Input","LoadingIndicator","Menu","MenuList","MenuPortal","LoadingMessage","NoOptionsMessage","MultiValueContainer","MultiValueLabel","MultiValueRemove","Placeholder","SelectContainer","SingleValue","ValueContainer","control","valueContainer","multiValue","singleValue","menu","groupHeading","indicatorsContainer","menuList","multiValueLabel","multiValueRemove","getOptionValue","isSearchable","inputRef","paddingTop","paper","active","fade","main","position","buttonWrapper","SideButtonsPanel","buttonsProps","activeIndexId","onButtonClick","iconButtonClasses","buttonProps","selectedUsers","valueToOption","prepareValues","servicesPath","cachedRequest","useRef","getAllUsersForTenant","users","username","filterUsers","ActivityTypes","getItemDataType","path","getActivityType","activity","firstItem","removeIgnoredItems","isImplementedItem","isValidActivityType","filteredItems","console","error","itemsTotal","splitActivityByType","groupBy","ifElse","stringifyDeltaValue","delta","Array","isArray","join","is","Object","toString","getActivityLabel","transition","inputRoot","dateOptionLabel","localeFormat","moment","longDateFormat","setOpen","handleToggle","onCancel","fullWidth","formatDataTypeValue","DataTypes","formatValue","endAdornment","menuIsOpen","readOnly","autoFocus","anchorOrigin","vertical","horizontal","transformOrigin","elevation","getContentAnchorEl","MenuListProps","autoFocusItem","DateRangePicker","onApply","slice","cancelButton","historyEvent","profile","aStamp","Button","filterReplies","replyId","replies","reply","getUpdatedReplies","comment","changedReplyIndex","findIndex","newReplies","defaultObjectIds","catchErrorInRequest","e","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","fromPairs","otherwise","uris","getComments","relatedObjectUri","getCommentsRequest","nextPageToken","prevComments","uniqBy","catch","getComment","commentId","getCommentRequest","createComment","namedUsers","objectType","relatedObjectUris","objectId","visibility","permanentLink","createCommentRequest","prevCommentsMap","status","addCommentToState","editComment","updateCommentRequest","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","assocPath","mergeRight","clearCommentState","dissocPath","useSavedState","getSavedState","isLoaded","setIsLoaded","savedState","setSavedState","_","FIVE_MINUTES","useSnackbar","showDismiss","isOpenSnackbar","setIsOpenSnackbar","snackbarMessage","setSnackbarMessage","closeSnackbar","showSnackbarMessage","message","SnackbarRenderer","Portal","autoHideDuration","DateRangeTypes","RequestStates","header","borderBottom","closeButton","RightSidePanel","CloseIcon","LegendMode","sumValues","links","sum","nodes","sankeyLayout","nodeWidth","smallestNodeMaxHeight","smallestNodeMinHeight","nodePadding","sankey","graph","forEach","node","sourceLinks","targetLinks","target","computeNodeLinks","computeNodeValues","nextNodes","remainingNodes","x","dx","w","computeNodeBreadths","nodesByBreadth","toPairs","a","b","nth","ky","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","lastLine","x0","x1","xi","t","x2","x3","appendix","arguments","safeData","safeNodes","getSafeNode","originalNode","safeLinks","shallowCopy","marginBottom","userSelect","tooltipRow","tooltipIcon","strokeOpacity","rootNode","transform","user","time","CalendarToday","Person","LightArrowTooltip","highlightEnabled","isColored","labelX","setLabelX","textRef","name","crosswalks","merges","firstCrosswalk","isDimmed","highlightCrosswalk","removeHighlight","useCrosswalkHighlight","useCrosswalkColor","startNodeHeight","nodeHeight","textWidth","clientWidth","onMouseEnter","onMouseLeave","timeMap","sources","start","end","head","fillOpacity","renderMergeNodes","accentContributors","isDragging","setDragging","previousPageX","setPreviousPageX","offsetX","setOffsetX","useSankey","sankeyNodes","sankeyLinks","extractPositionDelta","pageX","onUp","pointerEvents","onPointerDown","preventDefault","onPointerMove","onPointerUp","onPointerLeave","isCrosswalkDisplayed","displayedCrosswalks","eqCrosswalks","filterDisplayedCrosswalks","tree","evolve","losers","addCrosswalkUniqueId","addIdToSubtree","loser","processTree","processSubTree","parentIndex","mergesCrosswalks","Date","now","linkedNodes","boxSizing","memo","crosswalkTree","entityLabel","visibleCrosswalks","sankeyData","getSankeyData","refreshMode","refreshRate","handleWidth","handleHeight","_extends","assign","prototype","hasOwnProperty","call","apply","React","version","xmlnsXlink","xlinkHref","mask","focusedIcon","contributorUri","focusable","contributorActions","onToggleFocus","VisibilityIcon","getLastUriPart","Spacer","show","contributorColor","border","borderLeft","bottom","editor","accentContributor","crosswalksBySources","expandedSources","canUnmerge","disableAddCrosswalk","disableEditCrosswalk","disableDeleteCrosswalk","disableUnmergeContributor","onUnmerge","onEdit","onDelete","onAdd","onToggleSourceExpanded","onUnsubscribeContributor","getContributorColor","dataTenants","scrollToCrosswalk","useHighlightedCrosswalks","flatten","scrollIntoView","behavior","showEditor","setShowEditor","contributorCrosswalk","CrosswalkType","toggleCrosswalkFocus","useCrosswalkFocus","allContributorCrosswalks","dataTenantForExternalCrosswalk","getDataTenantFromCrosswalks","AddIcon","UnmergeIcon","UnsubscribeIcon","crosswalksByTypes","SourceCrosswalksRow","showCrosswalkColors","crosswalksFocusEnabled","expanded","onToggleExpanded","CrosswalkEditor","table","overflowY","overflowX","tableRow","maxWidth","contributors","selectedAttributeTypes","onChangeVisibleCrosswalks","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","without","append","hintIcon","verticalAlign","checkedIcon","right","selectedTree","SelectableTree","coloredCrosswalks","onSelect","getCrosswalkColor","getUniqueCrosswalkColor","getCrosswalkId","Info","CheckCircle","dialogContainer","dialogTitle","dialogContent","trees","UnmergeDialog","unmergeOperation","setUnmergeOperation","UnmergeOperation","getColoredCrosswalks","includeMerges","collectCrosswalksFromContributor","Dialog","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","ResizablePanes","orientation","minSize","maxSize","allowResize","isEmpty","masktype","maskUnits","clipRule","showErrorMessage","ErrorPopup","getRequestErrorMessage","cx","cy","r","maskType","y2","gradientUnits","stopColor","stopOpacity","default","info","snackbarIcon","uiPath","entityLink","getEntityLink","href","sourcesView","tabs","ActivePanel","connect","config","saveState","setActiveMode","activeTab","setActiveTab","toggleActive","isSidePanelOpen","isHistoryTabActive","History","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","persistedEntity","historySlice","useHistorySlice","selectedAttrTypes","setSelectedAttrTypes","useDidUpdateEffect","visibleColumns","setVisibleColumns","hasVisibleColumnsChanged","equals","reload","reloadCrosswalkTree","setCrosswalkTree","isLoading","setIsLoading","safePromise","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","onSuccess","useCrosswalkActions","handleAction","request","unmergeContributorRequest","response","unsubscribeEntityFromDataTenantEntity","successful","Error","sourceTable","useCrosswalkTreeActions","errorCode","ApiErrorCode","historyFilter","onApplyFilter","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","DndProvider","backend","HTML5Backend","CrosswalkDragLayer","ScreenProfileBand","attributeUris","AttributesTable","onChangeVisibleColumns","onSelectAttributeTypes","onPin","onIgnore","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","store","onResize","getSavedStatePromisified","promisifyCallback","Provider","StylesProvider","MuiPickersUtilsProvider","MomentUtils","floor"],"sourceRoot":""}