@reltio/remotes 1.4.1712 → 1.4.1713
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/1088.js +1 -1
- package/1148.js +1 -1
- package/1215.js +1 -1
- package/1334.js +1 -1
- package/1425.js +1 -1
- package/1550.js +1 -1
- package/1664.js +1 -1
- package/1707.js +1 -1
- package/1840.js +1 -1
- package/2066.js +1 -1
- package/2066.js.map +1 -1
- package/2345.js +1 -1
- package/2383.js +1 -1
- package/2400.js +1 -1
- package/2617.js +1 -1
- package/2857.js +1 -1
- package/2966.js +1 -1
- package/3004.js +1 -1
- package/3096.js +1 -1
- package/3144.js +1 -1
- package/3191.js +1 -1
- package/3209.js +1 -1
- package/3348.js +1 -1
- package/3381.js +1 -1
- package/3383.js +1 -1
- package/3463.js +1 -1
- package/3469.js +1 -1
- package/3538.js +1 -1
- package/3639.js +1 -1
- package/3785.js +1 -1
- package/393.js +1 -1
- package/4038.js +1 -1
- package/4143.js +1 -1
- package/415.js +1 -1
- package/4212.js +1 -1
- package/4444.js +1 -1
- package/4481.js +1 -1
- package/4787.js +1 -1
- package/4838.js +1 -1
- package/4969.js +1 -1
- package/50.js +1 -1
- package/5039.js +1 -1
- package/5177.js +1 -1
- package/5177.js.map +1 -1
- package/5201.js +1 -1
- package/5292.js +1 -1
- package/5383.js +1 -1
- package/5738.js +1 -1
- package/5769.js +1 -1
- package/6287.js +1 -1
- package/6422.js +1 -1
- package/6506.js +1 -1
- package/6578.js +1 -1
- package/658.js +1 -1
- package/6799.js +1 -1
- package/6844.js +1 -1
- package/6903.js +1 -1
- package/7074.js +1 -1
- package/7119.js +1 -1
- package/7237.js +1 -1
- package/7340.js +1 -1
- package/735.js +1 -1
- package/7407.js +1 -1
- package/7422.js +1 -1
- package/7468.js +1 -1
- package/7626.js +1 -1
- package/7719.js +1 -1
- package/7744.js +1 -1
- package/7802.js +1 -1
- package/7896.js +1 -1
- package/820.js +1 -1
- package/8207.js +1 -1
- package/8216.js +1 -1
- package/829.js +1 -1
- package/8741.js +1 -1
- package/8786.js +1 -1
- package/9016.js +1 -1
- package/9032.js +1 -1
- package/9050.js +1 -1
- package/9109.js +1 -1
- package/9283.js +1 -1
- package/9328.js +1 -1
- package/9387.js +1 -1
- package/9719.js +1 -1
- package/main.js +1 -1
- package/package.json +1 -1
- package/remoteEntry.js +1 -1
package/5177.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"5177.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/DateIntervalSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/DateIntervalSelector/DateIntervalSelector.tsx","webpack://@reltio/remotes/../components/src/components/ProfileResizablePanes/styles.ts","webpack://@reltio/remotes/../components/src/components/ProfileResizablePanes/ProfileResizablePanes.tsx","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/hooks/useKeepInputVisible.ts","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/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/contexts/PerspectivesSettingsContext/index.ts","webpack://@reltio/remotes/../components/src/hooks/useSavedState.ts","webpack://@reltio/remotes/../sources/src/components/RightSidePanel/styles.ts","webpack://@reltio/remotes/../sources/src/components/RightSidePanel/RightSidePanel.tsx","webpack://@reltio/remotes/../sources/src/types/LegendMode.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/sankey.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/useSankey.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/styles.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/MergeTooltip.tsx","webpack://@reltio/remotes/../sources/src/icons/notMatch.svg","webpack://@reltio/remotes/../sources/src/components/SankeyChart/Node.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/Link.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/SankeyChart.tsx","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/helpers.ts","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/styles.ts","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/CrosswalkTreeView.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/ContributorRow/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/ContributorRow/ContributorRow.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/LegendTableRow.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTable.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/helpers.ts","webpack://@reltio/remotes/../sources/src/components/SelectableTree/styles.ts","webpack://@reltio/remotes/../sources/src/components/SelectableTree/SelectableTree.tsx","webpack://@reltio/remotes/../sources/src/components/UnmergeDialog/styles.ts","webpack://@reltio/remotes/../sources/src/components/UnmergeDialog/UnmergeDialog.tsx","webpack://@reltio/remotes/../sources/src/components/UnsubscribeDialog/styles.ts","webpack://@reltio/remotes/../sources/src/components/UnsubscribeDialog/UnsubscribeDialog.tsx","webpack://@reltio/remotes/../sources/src/components/LegendView/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendView/LegendView.tsx","webpack://@reltio/remotes/../sources/src/components/SourcesView/icons/LegendIcon.svg","webpack://@reltio/remotes/../sources/src/services/errors.ts","webpack://@reltio/remotes/../sources/src/components/EmptyState/icons/EmptySources.svg","webpack://@reltio/remotes/../sources/src/components/EmptyState/styles.ts","webpack://@reltio/remotes/../sources/src/components/EmptyState/EmptyState.tsx","webpack://@reltio/remotes/../sources/src/components/TreeActionSnackbar/styles.ts","webpack://@reltio/remotes/../sources/src/components/TreeActionSnackbar/TreeActionSnackbar.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetOption/styles.ts","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetOption/RulesetOption.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetsMenuList/RulesetsMenuList.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/styles.ts","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesestsSelector.tsx","webpack://@reltio/remotes/../sources/src/components/SourcesView/styles.ts","webpack://@reltio/remotes/../sources/src/components/SourcesView/SourcesView.tsx","webpack://@reltio/remotes/../sources/src/hooks/useEntityWithSurvivorshipGroups.tsx","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalkTree.ts","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalksDisplay.ts","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalkTreeActions.ts","webpack://@reltio/remotes/../sources/src/components/SourcesView/index.tsx","webpack://@reltio/remotes/./src/sources.ts"],"sourcesContent":["import {makeStyles} from '@mui/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 {AttributeOption} from '../../types';\nimport {MultiValueProps, OptionProps} from 'react-select';\nimport {AttributeType, getAttributeTypeSubAttributes, TEntityType} from '@reltio/mdm-sdk';\nimport Typography from '@mui/material/Typography';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport MultiValue from '../ReactSelect/commonComponents/MultiValue';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport AttributeListItem from '../AttributeListItem/AttributeListItem';\nimport {useMdmMetadata} from '../../contexts';\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 styles = useStyles();\n const metadata = useMdmMetadata();\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)} data-reltio-id=\"attribute-selector\">\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 menuShouldBlockScroll={true}\n captureMenuScroll={false}\n />\n </div>\n );\n};\n\nexport default AttributeSelector;\n","import {makeStyles} from '@mui/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 {getIntervalUnitLabel} from '@reltio/mdm-sdk';\nimport TextField from '@mui/material/TextField';\nimport SimpleDropDownSelector from '../SimpleDropDownSelector/SimpleDropDownSelector';\nimport {getValue} from '../../core/utils';\nimport {useStyles} from './styles';\n\nimport {capitalize} from '@mui/material/utils';\n\ntype Props = {\n interval: [number, string];\n onChange: ([number, string]) => void;\n onFocus?: () => void;\n};\n\nconst periods = ['minutes', 'hours', 'days', 'weeks', 'months', 'years'];\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 variant=\"standard\"\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(getIntervalUnitLabel(unit))}}\n options={periods.map((value) => ({\n value,\n label: capitalize(getIntervalUnitLabel(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 '@mui/styles';\n\nconst useStyles = makeStyles(() => ({\n resizablePanesWrapper: {\n flexGrow: 1,\n height: '100%',\n marginRight: '1px'\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}));\n\nexport {useStyles};\n","import React, {useCallback, cloneElement} from 'react';\nimport {ResizablePanes} from '../ResizablePanes/ResizablePanes';\nimport {SideButtonsPanel} from '../SideIconPanel/SideButtonsPanel';\nimport {usePerspectivesSettings} from '../../contexts';\nimport {isNil} from 'ramda';\n\nimport {useStyles} from './styles';\nimport {RightPanelTab} from '../../types';\n\nconst DEFAULT_R_PANE_SIZE = 480;\nconst MIN_R_PANE_SIZE = 320;\nconst MAX_R_PANE_SIZE = 640;\n\ntype Props = {\n perspectiveId: string;\n children: [React.ReactElement, React.ReactElement];\n buttonsProps: Array<RightPanelTab['buttonProps']>;\n disabled?: boolean;\n defaultTab?: number;\n};\n\nexport const ProfileResizablePanes = ({perspectiveId, children, buttonsProps, disabled, defaultTab}: Props) => {\n const styles = useStyles();\n\n const {perspectiveSettings, updatePerspectiveSettings} = usePerspectivesSettings(perspectiveId);\n const {width = DEFAULT_R_PANE_SIZE} = perspectiveSettings || {};\n const active = defaultTab || perspectiveSettings?.active;\n const isSidePanelOpen = !isNil(active) && !disabled;\n\n const handleUpdateSettings = useCallback(\n (newSetting) => {\n updatePerspectiveSettings(newSetting);\n },\n [updatePerspectiveSettings]\n );\n\n const toggleActive = useCallback(\n (newId: number) => {\n const newActive = active === newId ? null : newId;\n handleUpdateSettings({active: newActive});\n },\n [active, handleUpdateSettings]\n );\n\n const resetActive = useCallback((): void => {\n handleUpdateSettings({active: null});\n }, [handleUpdateSettings]);\n\n const handlePaneSizeChange = useCallback(\n ({size}) => {\n handleUpdateSettings({width: size});\n },\n [handleUpdateSettings]\n );\n\n return (\n <>\n <ResizablePanes\n className={styles.resizablePanesWrapper}\n primary=\"second\"\n orientation=\"vertical\"\n size={isSidePanelOpen ? width : 0}\n minSize={MIN_R_PANE_SIZE}\n maxSize={MAX_R_PANE_SIZE}\n allowResize={isSidePanelOpen}\n onChange={handlePaneSizeChange}\n debounceInterval={2500}\n >\n <div className={styles.pane}>{children[0]}</div>\n <div className={styles.pane}>{cloneElement(children[1], {active, onClose: resetActive})}</div>\n </ResizablePanes>\n <SideButtonsPanel\n disabled={disabled}\n buttonsProps={buttonsProps}\n onButtonClick={toggleActive}\n activeIndexId={active}\n />\n </>\n );\n};\n\nProfileResizablePanes.displayName = 'ProfileResizablePanes';\n","import CreatableSelect from 'react-select/creatable';\nimport withMuiSkin from './withMuiSkin';\n\nexport default withMuiSkin(CreatableSelect);\n","import MenuItem from '@mui/material/MenuItem';\nimport Checkbox from '@mui/material/Checkbox';\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 {useEffect, MutableRefObject} from 'react';\nimport {usePrevious} from '../../../hooks';\n\nconst findNearestScrollableElement = (element: HTMLElement) => {\n let currentElement = element?.parentElement;\n while (currentElement) {\n if (currentElement.scrollHeight > currentElement.clientHeight) {\n return currentElement;\n }\n currentElement = currentElement.parentElement;\n }\n return null;\n};\n\nconst needToScroll = (\n valueLength: number,\n prevValuesLength: number,\n parentElementWithScroll: HTMLElement,\n currentElement: HTMLElement\n) =>\n valueLength &&\n prevValuesLength < valueLength &&\n currentElement.getBoundingClientRect().bottom > parentElementWithScroll.getBoundingClientRect().bottom;\n\nexport const useKeepInputVisible = (values = [], ref: MutableRefObject<HTMLElement>) => {\n const prevValuesLength = usePrevious(values?.length);\n\n useEffect(() => {\n const timerId = setTimeout(() => {\n const parentElementWithScroll = findNearestScrollableElement(ref?.current);\n if (\n parentElementWithScroll &&\n needToScroll(values?.length, prevValuesLength, parentElementWithScroll, ref.current)\n ) {\n ref.current?.scrollIntoView(false);\n }\n }, 0);\n\n return () => {\n clearTimeout(timerId);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [values?.length]);\n};\n","import React, {useState, useRef} from 'react';\nimport PropTypes from 'prop-types';\nimport {omit, either, path} from 'ramda';\nimport CreatableSelect from '../CreatableSelect';\nimport Select from '../Select';\nimport AsyncSelect from '../AsyncSelect';\nimport multiSelectComponents from './components';\nimport {makeStyles} from '@mui/styles';\nimport {mergeClasses} from '../../../core/utils';\nimport {useKeepInputVisible} from '../hooks/useKeepInputVisible';\n\nconst getControlRef = (innerRef) => {\n const controlRef = {};\n if (innerRef.current) {\n controlRef.current = either(\n path(['select', 'controlRef']),\n path(['select', 'select', 'controlRef'])\n )(innerRef.current);\n }\n return controlRef;\n};\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 const innerRef = useRef();\n useKeepInputVisible(props.value, getControlRef(innerRef));\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 innerRef={innerRef}\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 @mui/material/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 menuShouldBlockScroll: PropTypes.bool,\n captureMenuScroll: PropTypes.bool,\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 {alpha} from '@mui/material/styles';\n\nimport {makeStyles} from '@mui/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: alpha(theme.palette.primary.main, 0.12),\n color: theme.palette.primary.main,\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n height: '42px',\n width: '3px',\n backgroundColor: theme.palette.primary.main,\n left: '-8px',\n borderRadius: '0 6px 6px 0'\n }\n },\n buttonWrapper: {\n position: 'relative',\n width: '48px',\n height: '44px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '6px',\n margin: '2px 8px',\n color: theme.palette.text.secondary\n }\n}));\n","import React, {ElementType} from 'react';\nimport classnames from 'classnames';\nimport {IconButtonProps} from '@mui/material/IconButton';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n disabled: boolean;\n buttonsProps: Array<{\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 = ({\n disabled,\n buttonsProps,\n activeIndexId,\n className,\n onButtonClick,\n classes = {}\n}: Props) => {\n const styles = useStyles();\n const {active, buttonWrapper, ...iconButtonClasses} = classes;\n\n return (\n <div className={classnames(styles.container, className)}>\n {buttonsProps.map(({id, ...buttonProps}) => {\n return (\n <SmallIconButtonWithTooltip\n {...buttonProps}\n disabled={disabled}\n classes={iconButtonClasses}\n size=\"S\"\n key={id}\n className={classnames(\n {[classnames(styles.active, active)]: activeIndexId === id},\n styles.buttonWrapper,\n buttonWrapper\n )}\n onClick={() => onButtonClick(id)}\n data-reltio-id={`reltio-profile-right-side-button-${id}`}\n />\n );\n })}\n </div>\n );\n};\n","import {makeStyles} from '@mui/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 i18n from 'ui-i18n';\nimport {defaultTo, pipe, pluck} from 'ramda';\nimport classnames from 'classnames';\nimport Typography from '@mui/material/Typography';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport {getAllUsersForTenant, UserInfo, utils} from '@reltio/mdm-sdk';\nimport {useMdmServicesPath, useMdmTenant} from '../../contexts';\nimport MenuWithPopper from '../commonReactSelectComponents/MenuWithPopper';\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 inputRef = useRef(null);\n\n const tenant = useMdmTenant();\n const servicesPath = useMdmServicesPath();\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 cachedRequest = useRef<Promise<UserInfo[]>>();\n const getOptions = (inputValue) => {\n if (!cachedRequest.current) {\n cachedRequest.current = getAllUsersForTenant({tenant, servicesPath});\n }\n return cachedRequest.current.then(pipe(pluck('username'), filterUsers(inputValue), prepareValues));\n };\n\n return (\n <div className={classnames(styles.root, className)} data-reltio-id=\"user-selector\">\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 ref: inputRef\n }}\n components={{\n DropdownIndicator: DropdownIndicatorWithIconButton,\n Menu: MenuWithPopper\n }}\n styles={customStyles}\n classes={styles}\n menuPortalTarget={document.body}\n menuShouldBlockScroll={true}\n captureMenuScroll={false}\n inputRef={inputRef}\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 {\n formatDataTypeValue,\n findAttributeTypeByUri,\n Metadata,\n AttributePresentations,\n makeAttrTypeUri,\n getAttrDataTypeDefinition\n} from '@reltio/mdm-sdk';\nimport {filter, groupBy, ifElse, map, path, pipe, propOr, values, 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.warn('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 = (\n deltaValue: DeltaValue['value'],\n attributeTypeUri: string,\n metadata: Metadata,\n attributePresentations: AttributePresentations\n) => {\n const attributeType = findAttributeTypeByUri(metadata, attributeTypeUri);\n const dataTypeDefinition = getAttrDataTypeDefinition(attributeType);\n const formatValue = formatDataTypeValue({attributePresentations, dataTypeDefinition});\n\n if (isNil(deltaValue)) {\n return '';\n }\n\n if (typeof deltaValue === 'string') {\n return attributeType ? formatValue(deltaValue) : deltaValue;\n }\n\n return Object.entries(deltaValue)\n .flatMap(([attributeTypeName, deltaValues]) =>\n deltaValues.map((deltaValue) =>\n stringifyDeltaValue(\n deltaValue.value,\n makeAttrTypeUri(attributeTypeUri, attributeTypeName),\n metadata,\n attributePresentations\n )\n )\n )\n .join(', ');\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 '@mui/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';\nimport {noop} from '../../../core';\nimport TextField from '@mui/material/TextField';\nimport Popover from '@mui/material/Popover';\nimport DropdownIndicatorWithIconButton from '../../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport DateRangePicker from '../../DateRangePicker/DateRangePicker';\n\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 = noop}: 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 <Popover\n open={open}\n anchorEl={inputRef.current}\n onClose={onCancel}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n elevation={2}\n >\n <DateRangePicker values={values} onApply={onApply} type={DataTypes.TYPE_ACTIVENESS_DATE} />\n </Popover>\n </div>\n );\n};\n\nexport default CustomDateRangeEditor;\n","import React, {useCallback, useContext} from 'react';\nimport {PerspectivesSettings, PerspectiveSettingItem} from '../../types';\n\ntype PerspectivesSettingsProps = {\n settings: PerspectivesSettings;\n onChange: (perspectiveId: string, newSetting: Partial<PerspectiveSettingItem>) => void;\n};\n\nexport const PerspectivesSettingsContext = React.createContext<PerspectivesSettingsProps>({\n settings: {},\n onChange: () => {}\n});\n\nPerspectivesSettingsContext.displayName = 'PerspectivesSettingsContext';\n\nexport const usePerspectivesSettings = (perspectiveId: string) => {\n const {settings, onChange} = useContext(PerspectivesSettingsContext) || {};\n const perspectiveSettings = settings?.[perspectiveId];\n\n const updatePerspectiveSettings = useCallback(\n (newSetting: Partial<PerspectiveSettingItem>) => {\n onChange(perspectiveId, newSetting);\n },\n [perspectiveId, onChange]\n );\n\n return {updatePerspectiveSettings, perspectiveSettings};\n};\n","import {useEffect, useState} from 'react';\n\nexport const useSavedState = <T>(getSavedState: () => Promise<T>) => {\n const [isLoaded, setIsLoaded] = useState(false);\n const [savedState, setSavedState] = useState<T | Record<string, never>>({});\n\n useEffect(() => {\n getSavedState()\n .then((savedState) => {\n setSavedState(savedState || {});\n })\n .then((_) => setIsLoaded(true))\n .catch((_) => setIsLoaded(true));\n }, []); // eslint-disable-line\n\n return {isLoaded, savedState};\n};\n","import {makeStyles} from '@mui/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 '@mui/icons-material/Close';\nimport {RightPanelTab, SmallIconButton} from '@reltio/components';\nimport {useStyles} from './styles';\n\ntype Props = {\n onClose?: () => void;\n active?: number;\n tabs: RightPanelTab[];\n};\n\nexport const RightSidePanel = ({active, onClose, tabs}: Props) => {\n const styles = useStyles();\n const {content, title} = tabs[active] || {};\n\n return (\n <>\n <div className={styles.header}>\n <SmallIconButton className={styles.closeButton} icon={CloseIcon} onClick={onClose} />\n {title}\n </div>\n {content}\n </>\n );\n};\n","export enum LegendMode {\n Crosswalk = 'crosswalks',\n Source = 'source',\n Contributor = 'contributor'\n}\n","import {sum, map, pipe, groupBy, toPairs, sort, nth, prop, reduce, last} from 'ramda';\nimport {SankeyLink, SankeyData} from '../../types/SankeyChartData';\n\nconst sumValues = (links: SankeyLink[]): number => pipe(map(prop('value')), sum)(links);\nconst interpolateNumber = (a: number, b: number) => ((a = +a), (b = +b), (t) => a * (1 - t) + b * t);\n\nexport default function Sankey() {\n const lastLinksSize = 22;\n\n let nodeWidth = 24,\n smallestNodeMaxHeight = 15,\n smallestNodeMinHeight = 10,\n nodePadding = 8,\n size = [1, 1] as [number, number];\n\n function sankey({nodes, links}: SankeyData) {\n const graph = {nodes, links};\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeBreadths(graph);\n computeNodeDepths(graph);\n computeLinkDepths(graph);\n correctNodesDepth(graph);\n return graph;\n }\n\n sankey.nodeWidth = () => nodeWidth;\n sankey.setNodeWidth = (width: number) => ((nodeWidth = +width), sankey);\n\n sankey.nodePadding = () => nodePadding;\n sankey.setNodePadding = (padding: number) => ((nodePadding = +padding), sankey);\n\n sankey.smallestNodeMaxHeight = () => smallestNodeMaxHeight;\n sankey.setSmallestNodeMaxHeight = (height: number) => ((smallestNodeMaxHeight = +height), sankey);\n\n sankey.smallestNodeMinHeight = () => smallestNodeMinHeight;\n sankey.setSmallestNodeMinHeight = (height: number) => ((smallestNodeMinHeight = +height), sankey);\n\n sankey.size = () => size;\n sankey.setSize = (newSize: [number, number]) => ((size = newSize), sankey);\n\n sankey.update = (graph) => {\n computeLinkDepths(graph);\n return graph;\n };\n\n sankey.link = () => {\n let curvature = 0.5;\n\n function link(d) {\n const lastLine = !d.target.sourceLinks || d.target.sourceLinks.length == 0;\n const addPixels = 0.13;\n const x0 = d.source.x + d.source.dx,\n x1 = d.target.x,\n xi = interpolateNumber(x0, x1),\n x2 = xi(curvature),\n x3 = xi(1 - curvature),\n y0 = d.source.y + d.sy - addPixels,\n y1 = d.target.y + d.ty - addPixels;\n const appendix = !lastLine\n ? `L${x1 + nodeWidth},${y1} L${x1 + nodeWidth},${y1 + d.dy + 2 * addPixels}`\n : '';\n\n return y0 === y1\n ? `M${x0},${y0} \n L${x1},${y1}${appendix} \n L${x1},${y1 + d.dy + 2 * addPixels} \n L${x0},${y0 + d.dy + 2 * addPixels} Z`\n : `M${x0},${y0}\n C${x2},${y0} ${x3},${y1} ${x1},${y1}${appendix} \n L${x1},${y1 + d.dy + 2 * addPixels} \n C${x3},${y1 + d.dy + 2 * addPixels} ${x2},${y0 + d.dy + 2 * addPixels} \n ${x0},${y0 + d.dy + 2 * addPixels} Z`;\n }\n\n link.curvature = function (_) {\n if (!arguments.length) return curvature;\n curvature = +_;\n return link;\n };\n\n return link;\n };\n\n // Populate the sourceLinks and targetLinks for each node.\n function computeNodeLinks({nodes, links}: SankeyData) {\n nodes.forEach((node) => {\n node.sourceLinks = [];\n node.targetLinks = [];\n });\n links.forEach((link) => {\n link.source.sourceLinks.push(link);\n link.target.targetLinks.push(link);\n });\n }\n\n // Compute the value (size) of each node by summing the associated links.\n function computeNodeValues({nodes}: SankeyData) {\n nodes.forEach((node) => {\n node.value = Math.max(sumValues(node.sourceLinks), sumValues(node.targetLinks));\n });\n }\n\n // Iteratively assign the breadth (x-position) for each node.\n // Nodes are assigned the maximum breadth of incoming neighbors plus one;\n // nodes with no incoming links are assigned breadth zero, while\n // nodes with no outgoing links are assigned the maximum breadth.\n function computeNodeBreadths({nodes}: SankeyData) {\n if (!nodes.length) return;\n let remainingNodes = [nodes[0]],\n nextNodes,\n x = 0;\n\n while (remainingNodes.length) {\n nextNodes = [];\n remainingNodes.forEach((node) => {\n node.x = x;\n node.dx = nodeWidth;\n node.targetLinks.forEach((link) => {\n if (nextNodes.indexOf(link.source) < 0) {\n nextNodes.push(link.source);\n }\n });\n });\n remainingNodes = nextNodes;\n ++x;\n }\n\n nodes.forEach((node) => {\n node.x = x - 1 - node.x;\n });\n\n if (x > 2) {\n const w = (size[0] - 2 * nodeWidth - lastLinksSize) / (x - 2);\n nodes.forEach((node) => {\n if (!node.sourceLinks || node.sourceLinks.length == 0) node.x = size[0] - nodeWidth;\n else node.x *= w;\n });\n } else {\n nodes[0].x = size[0] - nodeWidth;\n nodes[1].x = nodes[0].x - lastLinksSize - nodeWidth;\n }\n }\n\n function computeNodeDepths({nodes, links}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a, b) => a[0] - b[0]),\n map(nth(1))\n )(nodes);\n\n //\n initializeNodeDepth();\n resolveCollisions();\n\n const max = pipe(\n map((nodes) => (nodes.length - 1) * nodePadding + sum(map((node) => node.dy, nodes))),\n reduce(Math.max, 0)\n )(nodesByBreadth);\n\n const y1 = (size[1] - max) / 2;\n\n nodesByBreadth.forEach((nodes) => {\n const {y, dy} = last(nodes);\n const y0 = size[1] - (y + dy);\n nodes.forEach((node) => {\n node.y += y0;\n if (y1 > 0) node.y -= y1;\n });\n });\n\n function initializeNodeDepth() {\n let ky = pipe(\n map((nodes) => (size[1] - (nodes.length - 1) * nodePadding) / sumValues(nodes)),\n reduce(Math.min, Infinity)\n )(nodesByBreadth);\n\n const min = pipe(\n map((node) => node.value / (node.targetLinks?.length || 1)),\n reduce(Math.min, Infinity)\n )(nodes);\n\n ky = Math.max(Math.min(ky, smallestNodeMaxHeight / min), smallestNodeMinHeight / min);\n\n nodesByBreadth.forEach((nodes) => {\n nodes.forEach((node, i) => {\n node.y = i;\n node.dy = node.value * ky;\n });\n });\n\n links.forEach((link) => {\n link.dy = link.value * ky;\n });\n }\n\n function resolveCollisions() {\n nodesByBreadth.forEach((nodes) => {\n let node,\n dy,\n y0 = 0,\n i;\n const n = nodes.length;\n\n // Push any overlapping nodes down.\n nodes.sort((a, b) => a.y - b.y);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dy = y0 - node.y;\n if (dy > 0) node.y += dy;\n y0 = node.y + node.dy + nodePadding;\n }\n\n // If the bottommost node goes outside the bounds, push it back up.\n dy = y0 - nodePadding - size[1];\n if (dy > 0) {\n y0 = node.y -= dy;\n\n // Push any overlapping nodes back up.\n for (i = n - 2; i >= 0; --i) {\n node = nodes[i];\n dy = node.y + node.dy + nodePadding - y0;\n if (dy > 0) node.y -= dy;\n y0 = node.y;\n }\n }\n });\n }\n }\n\n function computeLinkDepths({nodes}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a: number, b: number) => a[0] - b[0]),\n map(nth(1))\n )(nodes);\n\n nodesByBreadth.forEach((nodes) => {\n nodes.forEach((node) => {\n if (node.targetLinks?.length) {\n const result = [];\n const linksByUuid = node.targetLinks.map((l) => l.crosswalk.uuid);\n const sourceNodes = [];\n node.targetLinks.forEach(function (l) {\n if (this.indexOf(l.source) == -1) this.push(l.source);\n }, sourceNodes);\n for (let i = 0; i < sourceNodes.length; i++)\n for (let j = 0; j < sourceNodes[i].sourceLinks.length; j++) {\n const index = linksByUuid.indexOf(sourceNodes[i].sourceLinks[j].crosswalk.uuid);\n if (index != -1) result.push(node.targetLinks[index]);\n }\n node.targetLinks = result;\n }\n\n if (node.sourceLinks?.length) {\n const result = [];\n if (node.targetLinks?.length) {\n const linksByUuid = node.sourceLinks.map((l) => l.crosswalk.uuid);\n for (let i = 0; i < node.targetLinks.length; i++) {\n const index = linksByUuid.indexOf(node.targetLinks[i].crosswalk.uuid);\n if (index != -1) result.push(node.sourceLinks[index]);\n }\n }\n\n const resultByUuid = result.map((l) => l.crosswalk.uuid);\n const newSources = node.sourceLinks.filter(function (l) {\n return this.indexOf(l.crosswalk.uuid) == -1;\n }, resultByUuid);\n\n node.sourceLinks = newSources.concat(result);\n if (result.length > 0) {\n let sizeForNewSources = 0;\n for (let i = 0; i < newSources.length; i++) sizeForNewSources += newSources[i].dy;\n node.sizeForNewSources = sizeForNewSources;\n }\n }\n });\n });\n\n nodes.forEach((node) => {\n let sy = 0,\n ty = node.sizeForNewSources || 0;\n delete node.sizeForNewSources;\n node.sourceLinks.forEach((link) => {\n link.sy = sy;\n sy += link.dy;\n });\n node.targetLinks.forEach((link) => {\n link.ty = ty;\n ty += link.dy;\n });\n });\n }\n\n function correctNodesDepth({nodes}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a: number, b: number) => b[0] - a[0]),\n map(nth(1))\n )(nodes);\n\n nodesByBreadth.forEach((nodes) => {\n nodes = nodes.concat().sort((a, b) => a.y - b.y);\n nodes.forEach((node, i) => {\n if (node.sourceLinks?.length) {\n const {target, ty, dy} = last(node.sourceLinks);\n let y0 = target.y + ty + dy - node.dy;\n if (nodes[i - 1]?.x == node.x && y0 < nodes[i - 1]?.y + nodes[i - 1]?.dy + nodePadding)\n y0 = nodes[i - 1].y + nodes[i - 1].dy + nodePadding;\n if (node.y > y0) {\n node.y = y0;\n }\n }\n });\n });\n }\n\n return sankey;\n}\n","import {useMemo} from 'react';\nimport {SankeyData, SankeyNode} from '../../types/SankeyChartData';\nimport sankey from './sankey';\n\ntype Props = {\n width: number;\n height: number;\n data: SankeyData;\n};\n\nconst useSankey = ({data, width, height}: Props) =>\n useMemo(() => {\n if (!width || !height) return {nodes: [], links: []};\n\n const shallowCopy = (data: SankeyData): SankeyData => {\n const safeNodes = data.nodes.map((node) => ({...node}));\n const getSafeNode = (originalNode: SankeyNode) => {\n const index = data.nodes.indexOf(originalNode);\n return safeNodes[index];\n };\n\n const safeLinks = data.links.map((link) => ({\n ...link,\n source: getSafeNode(link.source),\n target: getSafeNode(link.target)\n }));\n return {nodes: safeNodes, links: safeLinks};\n };\n\n const sankeyLayout = sankey()\n .setNodeWidth(14)\n .setNodePadding(20)\n .setSize([height - 2, width - 2]);\n\n const nodeWidth = sankeyLayout.nodeWidth();\n const path = sankeyLayout.link();\n\n const safeData = shallowCopy(data);\n const {nodes, links}: SankeyData = sankeyLayout(safeData);\n\n return {nodes, links, nodeWidth, path};\n }, [data, height, width]);\n\nexport default useSankey;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n tooltipTitle: {\n fontWeight: 500,\n fontSize: '16px',\n lineHeight: '24px',\n letterSpacing: '0.15px',\n marginBottom: '8px',\n userSelect: 'none'\n },\n tooltipRow: {\n display: 'flex',\n alignItems: 'center',\n fontSize: '13px',\n lineHeight: '15px',\n fontWeight: 'normal',\n '&:not(:last-child)': {\n marginBottom: '4px'\n }\n },\n tooltipIcon: {\n fontSize: '18px',\n color: 'rgba(0, 0, 0, 0.54)',\n marginRight: '8px'\n },\n node: {\n stroke: '#000000',\n strokeWidth: 1,\n strokeOpacity: 0.38\n },\n rootNode: {\n transform: 'rotate(90deg)',\n userSelect: 'none',\n fontSize: '13px'\n },\n popupContainer: {\n padding: 5,\n boxSizing: 'border-box'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {LightArrowTooltip} from '@reltio/components';\nimport CalendarTodayIcon from '@mui/icons-material/CalendarToday';\nimport PersonIcon from '@mui/icons-material/Person';\nimport {useStyles} from './styles';\n\ntype Props = {\n user: string;\n time: number;\n children: React.ReactElement;\n};\n\nexport const MergeTooltip = ({user, time, children}: Props) => {\n const styles = useStyles();\n const tooltipTitle = (\n <div>\n <span className={styles.tooltipTitle}>{i18n.text('Merge details')}</span>\n <div className={styles.tooltipRow}>\n <CalendarTodayIcon className={styles.tooltipIcon} />\n {i18n.date(time, 'L LTS')}\n </div>\n <div className={styles.tooltipRow}>\n <PersonIcon className={styles.tooltipIcon} />\n {user}\n </div>\n </div>\n );\n\n return (\n <LightArrowTooltip title={tooltipTitle} placement={'top'}>\n {children}\n </LightArrowTooltip>\n );\n};\n\nexport default MergeTooltip;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M17 13.138l4.5 4.5-4.5 4.5V18.5h-1.247l-3.488-3.479 1.413-1.414 2.901 2.893H17v-3.362zM17 1.5L21.5 6 17 10.5V7.138h-.421l-11.03 11H2v-2h2.723l11.03-11H17V1.5zm-11.45 4l3.294 3.286-1.414 1.413L4.723 7.5H2v-2h3.55z\",\n id: \"svg2499598299a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg2499598299b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2499598299a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2499598299b)\",\n d: \"M0 0h24v24H0z\"\n}))));","import React, {MouseEvent, useEffect, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport Popover from '@mui/material/Popover';\nimport MergeTooltip from './MergeTooltip';\nimport {SankeyNode} from '../../types/SankeyChartData';\nimport {SmallIconButtonWithTooltip, noop, useCrosswalkColor, useCrosswalkHighlight} from '@reltio/components';\nimport {groupBy, prop, pipe, map, head, last, max, min} from 'ramda';\nimport UnmergeIcon from '../../icons/notMatch.svg';\nimport {useStyles} from './styles';\n\ntype Props = {\n nodeWidth: number;\n node: SankeyNode;\n highlightEnabled: boolean;\n isColored: boolean;\n disableUnmerge: boolean;\n onUnmerge: (contributorUri: string) => void;\n isDragging: boolean;\n};\n\nexport const Node = ({node, nodeWidth, highlightEnabled, isColored, disableUnmerge, onUnmerge, isDragging}: Props) => {\n const styles = useStyles();\n const [labelX, setLabelX] = useState(0);\n const [anchorEl, setAnchorEl] = useState(null);\n const textRef = useRef(null);\n const {\n x,\n y,\n name,\n label,\n targetLinks,\n sourceLinks,\n entity: {crosswalks = [], merges}\n } = node;\n const [firstCrosswalk] = crosswalks;\n const {isDimmed, highlightCrosswalk, removeHighlight} = useCrosswalkHighlight(firstCrosswalk);\n const color = useCrosswalkColor(firstCrosswalk);\n const startNodeHeight = crosswalks?.length\n ? sourceLinks[crosswalks.length - 1].sy + sourceLinks[crosswalks.length - 1].dy\n : 0;\n\n const renderMergeNodes = () => {\n const timeMap = pipe(map(prop('source')), groupBy(prop('time')))(targetLinks);\n\n return merges?.map(({time, user}, index) => {\n const sources = timeMap[time];\n if (!sources) return;\n\n const [start, end] = sources.reduce(\n (acc, {sourceLinks}) => [\n min(head(sourceLinks).ty, acc[0]),\n max(last(sourceLinks).ty + last(sourceLinks).dy, acc[1])\n ],\n [Infinity, 0]\n );\n\n return (\n <MergeTooltip user={user} time={time} key={'node-' + index}>\n <rect\n transform={`translate(0,${start})`}\n height={end - start}\n width={nodeWidth}\n className={styles.node}\n fillOpacity={0.54}\n fill={'#F0F0F0'}\n opacity={highlightEnabled && isDimmed ? 0.38 : 1}\n />\n </MergeTooltip>\n );\n });\n };\n\n const openPopup = (e: MouseEvent<SVGRectElement>) => setAnchorEl(e.currentTarget);\n const closePopup = () => setAnchorEl(null);\n const handleUnmerge = () => {\n onUnmerge(name);\n closePopup();\n };\n\n useEffect(() => {\n const nodeHeight = node.dy;\n const textWidth = textRef?.current?.clientWidth || 0;\n if (nodeHeight < textWidth) setLabelX(nodeHeight / 2 - textWidth / 2);\n }, []);\n\n useEffect(() => {\n if (isDragging && !!anchorEl) closePopup();\n }, [isDragging]);\n\n return (\n <g transform={`translate(${x},${y})`}>\n {name === 'ROOT' ? (\n <text dy={-5} dx={labelX} ref={textRef} className={styles.rootNode}>\n {label || ''}\n </text>\n ) : (\n <>\n <rect\n height={startNodeHeight}\n width={14}\n className={styles.node}\n fill={isColored ? (isDimmed ? 'rgba(0, 0, 0, 0.12)' : color) : '#F0F0F0'}\n key={'node-main'}\n opacity={highlightEnabled && isDimmed ? 0.19 : 1}\n onMouseEnter={() => {\n if (highlightEnabled) highlightCrosswalk();\n }}\n onMouseLeave={() => {\n if (highlightEnabled) removeHighlight();\n }}\n onClick={disableUnmerge ? noop : openPopup}\n cursor={disableUnmerge ? 'default' : 'pointer'}\n data-reltio-id=\"reltio-sankey-chart-node\"\n />\n <Popover\n open={!!anchorEl}\n anchorEl={anchorEl}\n anchorOrigin={{vertical: 'top', horizontal: 'right'}}\n onClose={closePopup}\n classes={{paper: styles.popupContainer}}\n data-reltio-id=\"reltio-unmerge-popup\"\n >\n <SmallIconButtonWithTooltip\n size=\"XS\"\n tooltipTitle={i18n.text('Unmerge')}\n icon={UnmergeIcon}\n onClick={handleUnmerge}\n />\n </Popover>\n {!!targetLinks?.length && renderMergeNodes()}\n </>\n )}\n </g>\n );\n};\n\nexport default Node;\n","import React from 'react';\nimport {useCrosswalkColor, useCrosswalkHighlight} from '@reltio/components';\nimport {SankeyLink} from '../../types/SankeyChartData';\n\ntype Props = {\n link: SankeyLink;\n path: string;\n highlightEnabled: boolean;\n isColored: boolean;\n};\n\nexport const Link = ({link, path, highlightEnabled, isColored}: Props) => {\n const {crosswalk} = link;\n const color = useCrosswalkColor(crosswalk);\n const {isDimmed, highlightCrosswalk, removeHighlight} = useCrosswalkHighlight(crosswalk);\n return (\n <path\n d={path}\n fill={isColored ? (isDimmed ? 'rgba(0, 0, 0, 0.12)' : color) : '#F0F0F0'}\n opacity={highlightEnabled && isDimmed ? 0.19 : 1}\n onMouseEnter={() => {\n if (highlightEnabled) highlightCrosswalk();\n }}\n onMouseLeave={() => {\n if (highlightEnabled) removeHighlight();\n }}\n />\n );\n};\n\nexport default Link;\n","import React, {useMemo, useState, useEffect} from 'react';\nimport useSankey from './useSankey';\nimport Node from './Node';\nimport Link from './Link';\nimport {SankeyData} from '../../types/SankeyChartData';\n\ntype Props = {\n width: number;\n height: number;\n data: SankeyData;\n accentContributors?: boolean;\n disableUnmerge: boolean;\n onUnmerge: (contributorUri: string) => void;\n};\n\nconst SankeyChart = ({width, height, data, accentContributors, onUnmerge, disableUnmerge}: Props) => {\n const [isDragging, setDragging] = useState(false);\n const [isMouseDown, setMouseDown] = useState(false);\n const [previousPageX, setPreviousPageX] = useState(0);\n const [offsetX, setOffsetX] = useState(0);\n const {links, nodes, nodeWidth, path} = useSankey({data, width, height});\n\n useEffect(() => {\n setOffsetX(0);\n setPreviousPageX(0);\n }, [width, height]);\n\n const sankeyNodes = useMemo(\n () =>\n nodes.map((node, index) => (\n <Node\n highlightEnabled={accentContributors}\n isColored={accentContributors}\n node={node}\n nodeWidth={nodeWidth}\n key={`SankeyNode-${index}`}\n disableUnmerge={disableUnmerge}\n onUnmerge={onUnmerge}\n isDragging={isDragging}\n />\n )),\n [nodes, accentContributors, nodeWidth, width, height, isDragging]\n );\n\n const sankeyLinks = useMemo(\n () =>\n links.map((link, index) => (\n <Link\n highlightEnabled={!accentContributors}\n isColored={!accentContributors}\n link={link}\n path={path(link)}\n key={`SankeyLink-${index}`}\n />\n )),\n [accentContributors, links, path]\n );\n\n const extractPositionDelta = (event: React.MouseEvent) => {\n const left = event.pageX;\n const offsetX = left - previousPageX;\n setPreviousPageX(left);\n return offsetX;\n };\n\n const onDown = (event: React.MouseEvent) => {\n event.preventDefault();\n setMouseDown(true);\n extractPositionDelta(event);\n };\n const onMove = (event: React.MouseEvent) => {\n if (!isMouseDown) return;\n setDragging(true);\n const left = extractPositionDelta(event);\n setOffsetX(offsetX + left);\n };\n const onUp = () => {\n setMouseDown(false);\n setDragging(false);\n };\n\n const pointerEvents = isDragging ? 'none' : 'auto';\n const cursor = isDragging ? 'move' : 'auto';\n\n return (\n <svg\n width={width}\n height={height}\n cursor={cursor}\n onMouseDown={onDown}\n onMouseMove={onMove}\n onMouseUp={onUp}\n onMouseLeave={onUp}\n >\n <g transform={`translate(${offsetX},${height - 1}) rotate(-90)`} pointerEvents={pointerEvents}>\n <g>{sankeyLinks}</g>\n <g>{sankeyNodes}</g>\n </g>\n </svg>\n );\n};\n\nexport default SankeyChart;\n","import {chain, concat, curry, evolve, filter, map, pipe, uniq} from 'ramda';\nimport {CrosswalkBase, CrosswalkTree, eqCrosswalks} from '@reltio/mdm-sdk';\nimport {SankeyLink, SankeyNode} from '../../types/SankeyChartData';\n\nconst isCrosswalkDisplayed = curry(\n (displayedCrosswalks: CrosswalkBase[], crosswalk: CrosswalkBase) =>\n !displayedCrosswalks || displayedCrosswalks.some(eqCrosswalks(crosswalk))\n);\n\nconst filterDisplayedCrosswalks = curry((displayedCrosswalks: CrosswalkBase[], tree: CrosswalkTree) => {\n return evolve(\n {\n crosswalks: filter(isCrosswalkDisplayed(displayedCrosswalks)),\n merges: map(\n evolve({\n losers: map(filterDisplayedCrosswalks(displayedCrosswalks))\n })\n )\n },\n tree\n );\n});\n\nconst addCrosswalkUniqueId = (tree: CrosswalkTree) => {\n let count = 1;\n const addIdToSubtree = pipe(\n evolve({crosswalks: map((crosswalk) => ({...crosswalk, uuid: count++}))}),\n evolve({\n merges: map(\n evolve({\n losers: map((loser) => addIdToSubtree(loser))\n })\n )\n })\n );\n return addIdToSubtree(tree);\n};\n\nconst processTree = (tree: CrosswalkTree & {label?: string}) => {\n const nodes: SankeyNode[] = [];\n const links: SankeyLink[] = [];\n\n const processSubTree = (tree, parentIndex, time) => {\n const {crosswalks = [], merges = [], uri = '', label} = tree;\n\n nodes.push({entity: tree, name: uri, time, label});\n const index = nodes.length - 1;\n\n const mergesCrosswalks = pipe(\n chain(({losers, time}) => {\n return pipe(\n filter((loser) => loser.crosswalks?.length || loser.merges?.length),\n chain((loser) => processSubTree(loser, index, time))\n )(losers);\n }),\n concat(crosswalks)\n )(merges);\n\n if (parentIndex != -1)\n mergesCrosswalks.forEach((crosswalk) =>\n links.push({\n source: nodes[index],\n target: nodes[parentIndex],\n value: 10,\n crosswalk\n })\n );\n\n return mergesCrosswalks;\n };\n processSubTree(tree, -1, Date.now());\n\n const linkedNodes = pipe(\n chain(({source, target}) => [source, target]),\n uniq\n )(links);\n\n return {nodes: nodes.filter((node) => linkedNodes.includes(node)), links};\n};\n\nexport const getSankeyData = (\n crosswalkTree: CrosswalkTree,\n entityLabel = '',\n displayedCrosswalks?: CrosswalkBase[]\n) => {\n return pipe(\n filterDisplayedCrosswalks(displayedCrosswalks),\n addCrosswalkUniqueId,\n processTree\n )({uri: 'ROOT', label: entityLabel, crosswalks: [], merges: [{time: Date.now(), losers: [crosswalkTree]}]});\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n graph: {\n padding: '8px 0px',\n boxSizing: 'border-box',\n height: '100%',\n width: '100%'\n }\n}));\n","import React, {memo} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {noop} from '@reltio/components';\nimport SankeyChart from '../SankeyChart/SankeyChart';\nimport {getSankeyData} from './helpers';\nimport {CrosswalkBase, CrosswalkTree} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n crosswalkTree: CrosswalkTree;\n entityLabel?: string;\n visibleCrosswalks?: CrosswalkBase[];\n accentContributors?: boolean;\n disableUnmerge?: boolean;\n onUnmerge?: (contributorUri: string) => void;\n};\n\nconst CrosswalkTreeView = ({\n crosswalkTree,\n entityLabel,\n visibleCrosswalks,\n accentContributors,\n disableUnmerge = false,\n onUnmerge = noop\n}: Props) => {\n const styles = useStyles();\n const sankeyData = getSankeyData(crosswalkTree, entityLabel, visibleCrosswalks);\n\n return (\n <div className={styles.graph} data-reltio-id=\"reltio-crosswalk-tree\">\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleWidth handleHeight>\n {({width = 0, height = 200}: {width: number; height: number}) => (\n <SankeyChart\n width={width}\n height={height}\n data={sankeyData}\n accentContributors={accentContributors}\n disableUnmerge={disableUnmerge}\n onUnmerge={onUnmerge}\n />\n )}\n </ReactResizeDetector>\n </div>\n );\n};\n\nexport default memo(CrosswalkTreeView);\n","import {makeStyles} from '@mui/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 from '@mui/material/Typography';\nimport VisibilityIcon from '@mui/icons-material/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 '@mui/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 '@mui/icons-material/Add';\nimport UnmergeIcon from '../../../icons/notMatch.svg';\nimport UnsubscribeIcon from '@mui/icons-material/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 && !!contributorCrosswalk\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 '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n table: {\n overflowY: 'auto',\n overflowX: 'hidden',\n paddingLeft: '16px',\n paddingRight: '6px'\n },\n tableRow: {\n '& + &': {\n marginTop: '10px'\n },\n margin: 'auto',\n maxWidth: '448px'\n }\n}));\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {\n AttributeType,\n checkCanCreateCrosswalk,\n checkCanDeleteCrosswalk,\n checkCanEditCrosswalk,\n Contributor,\n CrosswalkBase,\n Entity,\n TEntityType\n} from '@reltio/mdm-sdk';\nimport {AddCrosswalkEvent, DeleteCrosswalkEvent, EditCrosswalkEvent, noop} from '@reltio/components';\nimport {buildTableRowsData, collectVisibleCrosswalks} from './helpers';\nimport LegendTableRow from './LegendTableRow/LegendTableRow';\nimport {append, assoc, evolve, has, ifElse, includes, pipe, unless, without} from 'ramda';\nimport {UnsubscribeContributorEvent} from '../../types';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n entity: Entity;\n entityType: TEntityType;\n contributors: Contributor[];\n accentContributors?: boolean;\n selectedAttributeTypes?: AttributeType[];\n onChangeVisibleCrosswalks: (visibleCrosswalks: CrosswalkBase[]) => void;\n readOnly?: boolean;\n canUnmerge: boolean;\n disableUnmerge: boolean;\n onAddCrosswalk?: (event: AddCrosswalkEvent) => void;\n onEditCrosswalk?: (event: EditCrosswalkEvent) => void;\n onDeleteCrosswalk?: (event: DeleteCrosswalkEvent) => void;\n onUnmergeContributor?: (contributorUri: string) => void;\n onUnsubscribeContributor?: (event: UnsubscribeContributorEvent & {contributorUri: string}) => void;\n};\n\nconst LegendTable = ({\n accentContributors,\n entity,\n entityType,\n contributors,\n selectedAttributeTypes,\n onChangeVisibleCrosswalks,\n readOnly,\n canUnmerge,\n disableUnmerge,\n onAddCrosswalk = noop,\n onEditCrosswalk = noop,\n onDeleteCrosswalk = noop,\n onUnmergeContributor = noop,\n onUnsubscribeContributor = noop\n}: Props) => {\n const styles = useStyles();\n\n const rowsData = useMemo(\n () => buildTableRowsData(entity, contributors, selectedAttributeTypes),\n [entity, contributors, selectedAttributeTypes]\n );\n const [expandedByContributor, setExpandedByContributor] = useState<{[contributorUri: string]: string[]}>({});\n const visibleCrosswalks = useMemo(\n () => collectVisibleCrosswalks(rowsData, expandedByContributor),\n [rowsData, expandedByContributor]\n );\n useEffect(() => {\n onChangeVisibleCrosswalks(visibleCrosswalks);\n }, [visibleCrosswalks]);\n\n const handleDelete = useCallback(\n (crosswalkId: string) => {\n onDeleteCrosswalk({entityUri: entity?.uri, crosswalkId});\n },\n [entity?.uri, onDeleteCrosswalk]\n );\n\n const handleEdit = useCallback(\n (params: Omit<EditCrosswalkEvent, 'entityUri'>) => {\n onEditCrosswalk({...params, entityUri: entity?.uri});\n },\n [entity?.uri, onEditCrosswalk]\n );\n\n return (\n <div className={styles.table}>\n {rowsData.map(({contributorUri, crosswalksBySources}) => {\n return (\n <LegendTableRow\n key={contributorUri}\n className={styles.tableRow}\n canUnmerge={canUnmerge}\n contributorUri={contributorUri}\n accentContributor={accentContributors}\n crosswalksBySources={crosswalksBySources}\n disableAddCrosswalk={readOnly || !checkCanCreateCrosswalk(entityType)}\n disableEditCrosswalk={readOnly || !checkCanEditCrosswalk(entityType)}\n disableDeleteCrosswalk={readOnly || !checkCanDeleteCrosswalk(entityType)}\n disableUnmergeContributor={disableUnmerge}\n onAdd={(params) => onAddCrosswalk({...params, entity})}\n onDelete={handleDelete}\n onEdit={handleEdit}\n onUnmerge={() => onUnmergeContributor(contributorUri)}\n onUnsubscribeContributor={onUnsubscribeContributor}\n expandedSources={expandedByContributor[contributorUri]}\n onToggleSourceExpanded={(sourceUri: string) => {\n setExpandedByContributor(\n pipe(\n unless(has(contributorUri), assoc(contributorUri, [])),\n evolve({\n [contributorUri]: ifElse(\n includes(sourceUri),\n without([sourceUri]),\n append(sourceUri)\n )\n })\n )\n );\n }}\n />\n );\n })}\n </div>\n );\n};\n\nexport default memo(LegendTable);\n","import {\n AttributeType,\n Contributor,\n Crosswalk,\n Entity,\n eqCrosswalks,\n getRelationCrosswalks,\n isEmptyValue,\n RelationCrosswalk\n} from '@reltio/mdm-sdk';\nimport {chain, filter, map, pipe} from 'ramda';\nimport {CrosswalksByTypes, CrosswalkType, groupCrosswalksByTypesAndSources} from '@reltio/components';\n\ntype TableRow = {\n contributorUri: string;\n crosswalksBySources: {\n source: string;\n crosswalksByTypes: CrosswalksByTypes;\n }[];\n};\n\nexport const buildTableRowsData = (\n entity: Entity,\n contributors: Contributor[],\n selectedAttributeTypes: AttributeType[] = []\n): TableRow[] => {\n const entityCrosswalks: Crosswalk[] = entity.crosswalks || [];\n const relationCrosswalks: RelationCrosswalk[] = getRelationCrosswalks(entity);\n return contributors\n .filter((contributor) => !isEmptyValue(contributor.crosswalks))\n .map(({uri, crosswalks}) => {\n const crosswalksBySources = pipe(\n map((crosswalk) => {\n if (crosswalk.ownerType === 'relation') {\n const relationCrosswalk = relationCrosswalks.find(eqCrosswalks(crosswalk));\n return relationCrosswalk && {ownerType: 'relation', ...relationCrosswalk};\n } else {\n const entityCrosswalk = entityCrosswalks.find(eqCrosswalks(crosswalk));\n return entityCrosswalk && {ownerType: 'entity', ...entityCrosswalk};\n }\n }),\n filter((crosswalk) => !!crosswalk),\n groupCrosswalksByTypesAndSources(entity.type, selectedAttributeTypes)\n )(crosswalks);\n\n return {contributorUri: uri, crosswalksBySources};\n })\n .filter(({crosswalksBySources}) => crosswalksBySources.length > 0);\n};\n\nexport const collectVisibleCrosswalks = (\n rowsData: TableRow[],\n expandedByContributor: {[contributorUri: string]: string[]}\n) => {\n return rowsData.reduce((acc, {contributorUri, crosswalksBySources}) => {\n const visibleCrosswalks = chain(({source, crosswalksByTypes}) => {\n const isExpandedSource = expandedByContributor[contributorUri]?.includes(source);\n return crosswalksByTypes[CrosswalkType.Simple]\n .concat(crosswalksByTypes[CrosswalkType.Empty])\n .concat(isExpandedSource ? crosswalksByTypes[CrosswalkType.Dependent] : []);\n }, crosswalksBySources);\n return acc.concat(visibleCrosswalks);\n }, []);\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((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 '@mui/icons-material/CheckCircle';\nimport InfoIcon from '@mui/icons-material/Info';\nimport {CrosswalksDisplayProvider, noop} from '@reltio/components';\nimport {\n CrosswalkBase,\n CrosswalkTree,\n getCrosswalkColor as getUniqueCrosswalkColor,\n getCrosswalkId\n} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport CrosswalkTreeView from '../CrosswalkTreeView/CrosswalkTreeView';\nimport {useStyles} from './styles';\n\ntype Props = {\n coloredCrosswalks: string[];\n crosswalkTree: CrosswalkTree;\n selected: boolean;\n title: string;\n onSelect?: () => void;\n};\n\nexport const SelectableTree = ({coloredCrosswalks, crosswalkTree, selected, title, onSelect = noop}: Props) => {\n const styles = useStyles();\n const getCrosswalkColor = useCallback(\n (crosswalk: CrosswalkBase) => {\n return coloredCrosswalks.includes(crosswalk.uri)\n ? getUniqueCrosswalkColor(getCrosswalkId(crosswalk))\n : '#CACCD1';\n },\n [coloredCrosswalks]\n );\n return (\n <CrosswalksDisplayProvider getCrosswalkColor={getCrosswalkColor}>\n <div className={styles.container} onClick={onSelect}>\n <span className={styles.title}>\n {title} <InfoIcon className={styles.hintIcon} />\n </span>\n <div className={classnames(styles.graph, {[`${styles.selectedTree}`]: selected})}>\n {selected && <CheckCircleIcon className={styles.checkedIcon} />}\n <CrosswalkTreeView crosswalkTree={crosswalkTree} disableUnmerge={true} />\n </div>\n </div>\n </CrosswalksDisplayProvider>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((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 from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Typography from '@mui/material/Typography';\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} from '@mui/styles';\n\nexport const useStyles = makeStyles((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 from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Typography from '@mui/material/Typography';\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(\n () => 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} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n height: '100%'\n },\n modeSwitcher: {\n backgroundColor: theme.palette.background.paper,\n marginTop: '8px'\n },\n infoIcon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n hint: {\n color: theme.palette.text.secondary,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'flex-start',\n margin: '5px 12px 10px 12px'\n },\n hintText: {\n fontSize: '12px',\n lineHeight: '16px'\n },\n crosswalksList: {\n height: '100%',\n width: 'calc(100% - 24px)',\n margin: '8px 12px',\n background: theme.palette.divider,\n opacity: 0.2\n },\n pane: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n },\n resizablePanesWrapper: {\n flexGrow: 1,\n width: '100%'\n }\n}));\n","import React, {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport InfoIcon from '@mui/icons-material/Info';\nimport i18n from 'ui-i18n';\nimport {isEmpty} from 'ramda';\nimport mdmModule from '@reltio/mdm-module';\nimport {\n AttributeType,\n calculateCrosswalkTreeDeep,\n checkMetadataPermission,\n Contributor,\n Crosswalk,\n CrosswalkBase,\n CrosswalkTree,\n DataTenant,\n Entity,\n getEntityType,\n getLabel,\n Metadata,\n MetadataPermissions,\n TEntityType,\n UnmergeOperation\n} from '@reltio/mdm-sdk';\nimport {\n AddCrosswalkEvent,\n DeleteCrosswalkEvent,\n EditCrosswalkEvent,\n ModeSwitcher,\n noop,\n ResizablePanes\n} from '@reltio/components';\nimport {LegendMode, UnmergeContributorEvent, UnsubscribeContributorEvent} from '../../types';\nimport CrosswalkTreeView from '../CrosswalkTreeView/CrosswalkTreeView';\nimport LegendTable from '../LegendTable/LegendTable';\nimport {UnmergeDialog} from '../UnmergeDialog/UnmergeDialog';\nimport {UnsubscribeDialog} from '../UnsubscribeDialog/UnsubscribeDialog';\n\nimport {useStyles} from './styles';\n\nexport const DEFAULT_LINK_HEIGHT = 60;\nexport const MIN_PANE1_SIZE = 170;\nexport const MIN_PANE2_SIZE = 170;\n\ntype Props = {\n activeMode: LegendMode;\n onChangeMode: (mode: LegendMode) => void;\n crosswalkTree: CrosswalkTree;\n entity: Entity;\n contributors: Contributor[];\n selectedAttributeTypes?: AttributeType[];\n readOnly?: boolean;\n onAddCrosswalk?: (event: AddCrosswalkEvent) => void;\n onEditCrosswalk?: (event: EditCrosswalkEvent) => void;\n onDeleteCrosswalk?: (event: DeleteCrosswalkEvent) => void;\n onUnmergeContributor?: (event: UnmergeContributorEvent) => void;\n onUnsubscribeContributor?: (event: UnsubscribeContributorEvent) => void;\n};\n\nconst LegendView = ({\n activeMode,\n contributors,\n crosswalkTree,\n entity,\n onChangeMode,\n onUnmergeContributor = noop,\n onUnsubscribeContributor = noop,\n ...tableProps\n}: Props) => {\n const styles = useStyles();\n\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityType: TEntityType = getEntityType(metadata, entity?.type);\n\n const viewRef = useRef<HTMLDivElement>();\n const [paneSize, setPaneSize] = useState(MIN_PANE1_SIZE);\n const handlePaneSizeChange = useCallback(({percentageSize}) => setPaneSize(percentageSize), []);\n\n const [contributorForUnmerge, setContributorForUnmerge] = useState<string>();\n const [unsubscribeInfo, setUnsubscribeInfo] = useState<{\n contributorUri: string;\n dataTenant: DataTenant;\n crosswalk: Crosswalk;\n }>();\n\n const crosswalkTreeDeep = useMemo(() => calculateCrosswalkTreeDeep(crosswalkTree), [crosswalkTree]);\n const canUnmerge = crosswalkTreeDeep > 1;\n\n useEffect(() => {\n const height = Math.max(MIN_PANE1_SIZE, crosswalkTreeDeep * DEFAULT_LINK_HEIGHT);\n const maxPaneHeight = viewRef.current?.clientHeight - MIN_PANE2_SIZE;\n setPaneSize(Math.min(maxPaneHeight, height));\n }, [crosswalkTreeDeep]);\n\n const modes = useMemo(\n () => [\n {\n id: LegendMode.Crosswalk,\n title: i18n.text('Crosswalk')\n },\n {\n id: LegendMode.Source,\n title: i18n.text('Source')\n },\n {\n id: LegendMode.Contributor,\n title: i18n.text('Contributor')\n }\n ],\n []\n );\n\n const [visibleCrosswalks, setVisibleCrosswalks] = useState<CrosswalkBase[]>();\n const accentContributors = activeMode === LegendMode.Contributor;\n const disableUnmerge = tableProps.readOnly || !checkMetadataPermission(MetadataPermissions.UNMERGE, entityType);\n\n return (\n <div className={styles.root} ref={viewRef}>\n {contributorForUnmerge && (\n <UnmergeDialog\n canUnmerge={canUnmerge}\n onClose={() => setContributorForUnmerge(null)}\n onUnmergeContributor={(operationType: UnmergeOperation) => {\n onUnmergeContributor({\n entityUri: entity.uri,\n contributorUri: contributorForUnmerge,\n operationType\n });\n }}\n crosswalkTree={crosswalkTree}\n contributor={contributors.find(({uri}) => uri === contributorForUnmerge)}\n />\n )}\n {unsubscribeInfo && (\n <UnsubscribeDialog\n canUnsubscribe={canUnmerge}\n onClose={() => setUnsubscribeInfo(null)}\n onUnsubscribeContributor={() =>\n onUnsubscribeContributor({\n dataTenant: unsubscribeInfo.dataTenant,\n crosswalk: unsubscribeInfo.crosswalk\n })\n }\n crosswalkTree={crosswalkTree}\n contributor={contributors.find(({uri}) => uri === unsubscribeInfo.contributorUri)}\n />\n )}\n <ModeSwitcher<LegendMode>\n modes={modes}\n modeId={activeMode}\n className={styles.modeSwitcher}\n onChange={onChangeMode}\n />\n <ResizablePanes\n className={styles.resizablePanesWrapper}\n orientation=\"horizontal\"\n size={paneSize}\n minSize={MIN_PANE1_SIZE}\n maxSize={-MIN_PANE2_SIZE}\n allowResize\n onChange={handlePaneSizeChange}\n >\n <div className={styles.pane}>\n {crosswalkTree && !isEmpty(visibleCrosswalks) && (\n <CrosswalkTreeView\n entityLabel={getLabel(entity?.label)}\n crosswalkTree={crosswalkTree}\n visibleCrosswalks={visibleCrosswalks}\n accentContributors={accentContributors}\n disableUnmerge={disableUnmerge || !canUnmerge}\n onUnmerge={setContributorForUnmerge}\n />\n )}\n </div>\n <div className={styles.pane}>\n <div className={styles.hint}>\n <InfoIcon className={styles.infoIcon} />\n <span className={styles.hintText}>\n {i18n.text('You can drag a crosswalk to add values to attributes swimlanes')}\n </span>\n </div>\n {entity && (\n <LegendTable\n onUnmergeContributor={setContributorForUnmerge}\n onUnsubscribeContributor={setUnsubscribeInfo}\n accentContributors={accentContributors}\n contributors={contributors}\n entity={entity}\n entityType={entityType}\n onChangeVisibleCrosswalks={setVisibleCrosswalks}\n canUnmerge={canUnmerge}\n disableUnmerge={disableUnmerge}\n {...tableProps}\n />\n )}\n </div>\n </ResizablePanes>\n </div>\n );\n};\n\nexport default memo(LegendView);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg4041339336a\",\n masktype: \"alpha\",\n maskUnits: \"userSpaceOnUse\",\n x: \"2\",\n y: \"3\",\n width: \"19\",\n height: \"17\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2.5 5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S4.83 6.5 4 6.5 2.5 5.83 2.5 5zM21 20H8v-2h13v2zM8 10h13V8H8v2zm0-4V4h13v2H8zm0 10h13v-2H8v2zm-2.5.5v-3h-3v3h3z\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg4041339336a)\"\n}, React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n d: \"M0 0h24v24H0z\"\n}))));","import {ErrorPopup} from '@reltio/components';\nimport i18n from 'ui-i18n';\nimport {getRequestErrorMessage} from '@reltio/mdm-sdk';\n\nexport const showErrorMessage = (error: unknown) => {\n console.warn(error);\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 '@mui/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 '@mui/styles';\n\nexport const useStyles = makeStyles({\n snackbarMessage: {\n display: 'flex',\n alignItems: 'center'\n },\n snackbarIcon: {\n paddingRight: 16\n }\n});\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Entity, getLabel} from '@reltio/mdm-sdk';\nimport {UrlGeneratorsContext} from '@reltio/components';\nimport Typography from '@mui/material/Typography';\nimport Link from '@mui/material/Link';\nimport InfoIcon from '@mui/icons-material/Info';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n entity: Entity;\n message: string;\n};\n\nconst TreeActionSnackbar = ({entity, message}: Props) => {\n const styles = useStyles();\n const uiPath = useSelector(mdmModule.selectors.getUIPath);\n const {generateEntityUrl} = useContext(UrlGeneratorsContext);\n const entityLink = generateEntityUrl({uiPath, uri: entity.uri});\n\n return (\n <div className={styles.snackbarMessage}>\n <InfoIcon className={styles.snackbarIcon} />\n <Typography>\n {getLabel(entity.label)}{' '}\n <Link href={entityLink} target=\"_blank\" underline=\"hover\">\n {i18n.text('lookup profile')}\n </Link>{' '}\n {message}\n </Typography>\n </div>\n );\n};\n\nexport default TreeActionSnackbar;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n paddingTop: '14px',\n paddingBottom: '13px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.05)',\n whiteSpace: 'normal',\n '&:last-child': {\n borderBottom: 'none'\n }\n },\n label: {\n marginBottom: '2px',\n fontSize: '16px',\n lineHeight: '24px',\n color: theme.palette.text.primary\n },\n description: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.secondary\n }\n}));\n","import React from 'react';\nimport {SurvivorshipGroupType} from '@reltio/mdm-sdk';\nimport MenuItem from '@mui/material/MenuItem';\nimport Typography from '@mui/material/Typography';\nimport {useStyles} from './styles';\n\ntype MenuItemProps = React.ComponentPropsWithoutRef<typeof MenuItem>;\n\ntype Props = {\n innerRef: React.Ref<HTMLLIElement>;\n innerProps: MenuItemProps;\n data: SurvivorshipGroupType;\n};\n\nexport const RulesetOption = ({innerRef, innerProps, data}: Props) => {\n const styles = useStyles();\n const {label, description} = data;\n\n return (\n <MenuItem className={styles.root} ref={innerRef} {...innerProps}>\n <Typography className={styles.label}>{label}</Typography>\n {description && <Typography className={styles.description}>{description}</Typography>}\n </MenuItem>\n );\n};\n","import React from 'react';\nimport {MenuListComponentProps} from 'react-select';\n\nexport const RulesetsMenuList = <OptionType, IsMulti extends boolean>(\n props: MenuListComponentProps<OptionType, IsMulti>\n) => {\n const {innerRef, getStyles, children} = props;\n const styles = {...getStyles('menuList', props), maxHeight: '500px', padding: 0};\n return (\n <div ref={innerRef} style={styles}>\n {children}\n </div>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n width: '280px'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe, propEq, prop} from 'ramda';\nimport {DropDownSelector} from '@reltio/components';\nimport {getLabel, SurvivorshipGroupType} from '@reltio/mdm-sdk';\nimport {RulesetOption} from './RulesetOption/RulesetOption';\nimport {RulesetsMenuList} from './RulesetsMenuList/RulesetsMenuList';\nimport {useStyles} from './styles';\n\ntype Props = {\n survivorshipGroups: SurvivorshipGroupType[];\n currentSurvivorshipGroupUri: string;\n onChange: (uri: string) => void;\n};\n\nexport const RulesetsSelector = ({survivorshipGroups, currentSurvivorshipGroupUri, onChange}: Props) => {\n const styles = useStyles();\n const options = survivorshipGroups.map((group) => ({...group, label: getLabel(group.label)}));\n const value = options.find(propEq('uri', currentSurvivorshipGroupUri));\n return (\n <DropDownSelector\n height={40}\n className={styles.root}\n components={{Option: RulesetOption, MenuList: RulesetsMenuList}}\n label={i18n.text('Rulesets')}\n options={options}\n value={value}\n onChange={pipe(prop('uri'), onChange)}\n />\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n sourcesView: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflowX: 'hidden',\n overflowY: 'auto',\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\n display: 'flex'\n },\n '@global div[role=tooltip]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n '@global div[role=presentation]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n resizablePanesWrapper: {\n flexGrow: 1,\n height: '100%'\n },\n pane: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n },\n headerDivider: {\n marginLeft: '16px',\n marginRight: '8px',\n height: '32px',\n borderColor: 'rgba(0, 0, 0, 0.12)'\n },\n attributesTable: {\n backgroundColor: '#fff'\n }\n});\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport {Dispatch} from 'redux';\nimport {connect} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {equals, pipe, pluck, propEq, reject} from 'ramda';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n ApiError,\n ApiErrorCode,\n AttributeType,\n collectContributorsFromTree,\n Entity,\n getEntityType,\n HistoryEvent,\n Metadata,\n SourcesPerspectiveConfig\n} from '@reltio/mdm-sdk';\nimport {\n AttributesTable,\n CrosswalkDragLayer,\n CrosswalksDisplayProvider,\n ExpandedAttributesProvider,\n HistoryHeader,\n HistoryPanelEmptyState,\n HistoryView,\n ProfileResizablePanes,\n ScreenProfileBand,\n useDidUpdateEffect,\n useHistory,\n useHistoryEnabled,\n useHistorySlice,\n useModifiedEntity,\n useSavedState,\n useSnackbar\n} from '@reltio/components';\nimport Typography from '@mui/material/Typography';\nimport Divider from '@mui/material/Divider';\nimport HistoryIcon from '@mui/icons-material/History';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\nimport LegendView from '../LegendView/LegendView';\nimport {LegendMode, SourcesSavedState} from '../../types';\nimport {useCrosswalkTree} from '../../hooks/useCrosswalkTree';\nimport LegendIcon from './icons/LegendIcon.svg';\nimport {showErrorMessage} from '../../services/errors';\nimport {useCrosswalkTreeActions} from '../../hooks/useCrosswalkTreeActions';\nimport {useCrosswalksDisplay} from '../../hooks/useCrosswalksDisplay';\nimport {useEntityWithSurvivorshipGroups} from '../../hooks/useEntityWithSurvivorshipGroups';\nimport HTML5Backend from 'react-dnd-html5-backend';\nimport {DndProvider} from 'react-dnd';\nimport EmptyState from '../EmptyState/EmptyState';\nimport TreeActionSnackbar from '../TreeActionSnackbar/TreeActionSnackbar';\nimport {RulesetsSelector} from '../RulesestsSelector/RulesestsSelector';\nimport {useStyles} from './styles';\n\nconst perspectiveId = 'source';\n\ntype Props = {\n config: SourcesPerspectiveConfig;\n entity: Entity;\n metadata: Metadata;\n saveState: (state: SourcesSavedState) => void;\n getSavedState: () => Promise<SourcesSavedState>;\n dispatch: Dispatch;\n historyEvent: HistoryEvent;\n};\n\nenum ActivePanel {\n Legend,\n History\n}\n\nconst SourcesView = ({\n config,\n entity: defaultEntity,\n metadata,\n getSavedState,\n saveState,\n dispatch,\n historyEvent\n}: Props) => {\n const styles = useStyles();\n const [activeMode, setActiveMode] = useState(LegendMode.Crosswalk);\n const [isCrosswalkTreeLoading, setIsCrosswalkTreeLoading] = useState(false);\n\n const {\n survivorshipGroups,\n currentSurvivorshipGroupUri,\n onChangeSurvivorshipGroup,\n entity,\n isDefaultSurvivorshipGroupUri,\n isLoading: isEntityLoading\n } = useEntityWithSurvivorshipGroups(defaultEntity);\n\n const {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({\n perspectiveId,\n entity,\n historyButtonId: ActivePanel.History\n });\n\n const persistedEntity = isProfilePersisted ? entity : null;\n\n const entityUri = persistedEntity?.uri;\n const entityType = getEntityType(metadata, entity?.type);\n\n const {historySlice} = useHistorySlice({entity: persistedEntity, historyEvent});\n\n const [selectedAttrTypes, setSelectedAttrTypes] = useState<AttributeType[]>();\n useDidUpdateEffect(() => {\n setSelectedAttrTypes(undefined);\n }, [historySlice]);\n useDidUpdateEffect(() => {\n setSelectedAttrTypes(undefined);\n }, [entityUri]);\n\n const {SnackbarRenderer, showSnackbarMessage} = useSnackbar({\n anchorOrigin: {vertical: 'top', horizontal: 'center'},\n showDismiss: true\n });\n const {isLoaded, savedState} = useSavedState<SourcesSavedState>(getSavedState);\n const [visibleColumns, setVisibleColumns] = useState<string[]>();\n useEffect(() => {\n if (isLoaded) {\n setVisibleColumns(savedState.visibleColumns);\n }\n }, [isLoaded]); // eslint-disable-line\n useEffect(() => {\n const hasVisibleColumnsChanged = !equals(visibleColumns, savedState.visibleColumns);\n if (isLoaded && hasVisibleColumnsChanged) {\n saveState({visibleColumns});\n }\n }, [visibleColumns]); // eslint-disable-line\n\n const onCrosswalkTreeLoaded = useCallback(() => {\n setIsCrosswalkTreeLoading(false);\n }, []);\n\n const {crosswalkTree, reload: reloadCrosswalkTree} = useCrosswalkTree({\n entityUri: historySlice?.aEntity.uri || entityUri,\n onSuccess: onCrosswalkTreeLoaded\n });\n const contributors = useMemo(() => collectContributorsFromTree(crosswalkTree), [crosswalkTree]);\n\n const refreshEntity = useCallback(() => {\n entityUri &&\n dispatch(\n profile.entity.actions.loadEntity({\n viewId: config.id,\n uri: entityUri\n })\n );\n }, [entityUri, config, dispatch]);\n\n const refreshData = useCallback(pipe(refreshEntity, reloadCrosswalkTree), [refreshEntity, reloadCrosswalkTree]);\n\n const {\n modifiedEntity,\n crosswalksMap,\n newlyCreatedAttributes,\n onDeleteAttribute,\n onPinAttribute,\n onIgnoreAttribute,\n onEditAttribute,\n onAddAttribute,\n emptyTempAttributeUris\n } = useModifiedEntity({\n entity: historySlice?.aEntity || persistedEntity,\n onModify: refreshData,\n onError: showErrorMessage\n });\n\n const displayProps = useCrosswalksDisplay({activeMode, contributors, entity});\n const onShowMessage = useCallback((message: string, entity?: Entity) => {\n showSnackbarMessage(entity ? <TreeActionSnackbar entity={entity} message={message} /> : message);\n }, []);\n\n const {addCrosswalk, deleteCrosswalk, editCrosswalk, unmergeContributor, unsubscribeContributor} =\n useCrosswalkTreeActions({\n onShowMessage,\n onSuccess: refreshData,\n onError: useCallback(\n (error: ApiError) => {\n showErrorMessage(error);\n if (error.errorCode === ApiErrorCode.CROSSWALK_NOT_FOUND) {\n refreshData();\n }\n },\n [refreshData]\n ),\n onLoad: useCallback(() => setIsCrosswalkTreeLoading(true), [])\n });\n\n const {\n historyFilter,\n onApplyFilter,\n isLoading: isHistoryLoading,\n historicUris,\n historyWithTotal,\n canLoadMore,\n onLoadMore\n } = useHistory({entity: persistedEntity, enabled: isHistoryEnabled});\n\n const tabs = [\n {\n buttonProps: {\n id: ActivePanel.Legend,\n icon: LegendIcon,\n tooltipTitle: i18n.text('Legend')\n },\n title: <Typography variant=\"h6\">{i18n.text('Legend')}</Typography>,\n content: (\n <LegendView\n activeMode={activeMode}\n onChangeMode={setActiveMode}\n entity={historySlice?.aEntity || persistedEntity}\n crosswalkTree={crosswalkTree}\n contributors={contributors}\n selectedAttributeTypes={selectedAttrTypes}\n readOnly={!!historySlice || isCrosswalkTreeLoading}\n onAddCrosswalk={addCrosswalk}\n onUnmergeContributor={unmergeContributor}\n onUnsubscribeContributor={unsubscribeContributor}\n onEditCrosswalk={editCrosswalk}\n onDeleteCrosswalk={deleteCrosswalk}\n />\n )\n },\n {\n buttonProps: {\n id: ActivePanel.History,\n icon: HistoryIcon,\n tooltipTitle: i18n.text('History')\n },\n title: (\n <HistoryHeader\n total={(historicUris?.length || 0) + 1}\n entityType={entityType}\n filter={historyFilter}\n onApplyFilter={onApplyFilter}\n />\n ),\n content: isProfilePersisted ? (\n <HistoryView\n isLoading={isHistoryLoading}\n historyWithTotal={historyWithTotal}\n contributorsUris={historicUris}\n entityUri={entityUri}\n historyEvent={historyEvent}\n onLoadMore={onLoadMore}\n canLoadMore={canLoadMore}\n />\n ) : (\n <HistoryPanelEmptyState />\n )\n }\n ];\n const additionalHeaderItems = (\n <>\n <RulesetsSelector\n survivorshipGroups={survivorshipGroups}\n currentSurvivorshipGroupUri={currentSurvivorshipGroupUri}\n onChange={onChangeSurvivorshipGroup}\n />\n <Divider className={styles.headerDivider} orientation=\"vertical\" />\n </>\n );\n\n return (\n <div className={styles.sourcesView}>\n <CrosswalksDisplayProvider {...displayProps}>\n <DndProvider backend={HTML5Backend}>\n <CrosswalkDragLayer />\n <ProfileResizablePanes\n perspectiveId={perspectiveId}\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(tabs)}\n >\n <>\n <ScreenProfileBand entity={entity} historySlice={historySlice} />\n {isProfilePersisted ? (\n <ExpandedAttributesProvider attributeUris={newlyCreatedAttributes}>\n <AttributesTable\n className={styles.attributesTable}\n isLoading={isEntityLoading}\n visibleColumns={visibleColumns}\n onChangeVisibleColumns={setVisibleColumns}\n entity={modifiedEntity}\n crosswalksMap={crosswalksMap}\n selectedAttributeTypes={selectedAttrTypes}\n onSelectAttributeTypes={setSelectedAttrTypes}\n readOnly={!!historySlice || !isDefaultSurvivorshipGroupUri}\n onDelete={onDeleteAttribute}\n onPin={onPinAttribute}\n onIgnore={onIgnoreAttribute}\n onEdit={onEditAttribute}\n onAdd={onAddAttribute}\n emptyTempAttributeUris={emptyTempAttributeUris}\n additionalHeaderItems={additionalHeaderItems}\n activeSurvivorshipGroupUri={currentSurvivorshipGroupUri}\n />\n </ExpandedAttributesProvider>\n ) : (\n <EmptyState />\n )}\n </>\n <RightSidePanel tabs={tabs} />\n </ProfileResizablePanes>\n </DndProvider>\n </CrosswalksDisplayProvider>\n <SnackbarRenderer />\n </div>\n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n entity: mdmModule.selectors.getEntity(state),\n metadata: mdmModule.selectors.getMetadata(state),\n historyEvent: mdmModule.selectors.getHistoryEvent(state)\n };\n};\n\nexport default connect(mapStateToProps)(SourcesView);\n","import {useCallback, useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {pipe, propOr, find, propEq, prop} from 'ramda';\nimport {getEntityType, getEntityBySurvivorshipGroupUri, Entity} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {useSafePromise} from '@reltio/components';\n\nexport const useEntityWithSurvivorshipGroups = (defaultEntity: Entity) => {\n const entityTypeUri = defaultEntity?.type;\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const survivorshipGroups = pipe(getEntityType(metadata), propOr([], 'survivorshipGroups'))(entityTypeUri);\n const defaultSurvivorshipGroupUri = pipe(find(propEq('default', true)), prop('uri'))(survivorshipGroups);\n const [currentSurvivorshipGroupUri, setCurrentSurvivorshipGroupUri] = useState(null);\n const [entity, setEntity] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const safePromise = useSafePromise();\n\n useEffect(() => {\n if (defaultEntity) {\n setEntity(defaultEntity);\n setCurrentSurvivorshipGroupUri(defaultSurvivorshipGroupUri);\n }\n }, [defaultEntity, defaultSurvivorshipGroupUri]);\n\n const onChangeSurvivorshipGroup = useCallback(\n (survivorshipGroupUri: string) => {\n setCurrentSurvivorshipGroupUri(survivorshipGroupUri);\n const isDefaultSurvivorshipGroupUri = defaultSurvivorshipGroupUri === survivorshipGroupUri;\n if (!isDefaultSurvivorshipGroupUri) {\n setIsLoading(true);\n safePromise(getEntityBySurvivorshipGroupUri(entity.uri, survivorshipGroupUri))\n .then(setEntity)\n .finally(() => setIsLoading(false));\n } else {\n setEntity(defaultEntity);\n }\n },\n [defaultEntity, defaultSurvivorshipGroupUri, entity, safePromise]\n );\n\n const isDefaultSurvivorshipGroupUri = defaultSurvivorshipGroupUri === currentSurvivorshipGroupUri;\n\n return {\n survivorshipGroups,\n currentSurvivorshipGroupUri,\n onChangeSurvivorshipGroup,\n entity,\n isLoading,\n isDefaultSurvivorshipGroupUri\n };\n};\n","import {useCallback, useEffect, useState} from 'react';\nimport {getCrosswalkTree, CrosswalkTree} from '@reltio/mdm-sdk';\nimport {noop, useSafePromise} from '@reltio/components';\n\ntype Props = {\n entityUri?: string;\n onSuccess?: () => void;\n};\n\nexport const useCrosswalkTree = ({entityUri, onSuccess = noop}: Props) => {\n const [crosswalkTree, setCrosswalkTree] = useState<CrosswalkTree>(null);\n const safePromise = useSafePromise();\n\n const onError = (e) => {\n console.warn('Failed to load crosswalk tree', e);\n setCrosswalkTree(null);\n };\n\n const loadData = useCallback(() => {\n if (entityUri) {\n safePromise(getCrosswalkTree({entityUri}))\n .then((results) => {\n setCrosswalkTree(results);\n })\n .catch(onError)\n .finally(onSuccess);\n } else {\n setCrosswalkTree(null);\n onSuccess();\n }\n }, [entityUri, onSuccess]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n return {crosswalkTree, reload: loadData};\n};\n","import {useCallback, useEffect, useMemo, useState, useRef} from 'react';\nimport {any, concat} from 'ramda';\nimport {LegendMode} from '../types';\nimport {\n Contributor,\n CrosswalkBase,\n debounce,\n Entity,\n eqCrosswalks,\n findContributorForCrosswalk,\n getContributorColor,\n getCrosswalkColor,\n getCrosswalkId,\n getSourceColor\n} from '@reltio/mdm-sdk';\n\ntype Props = {\n activeMode: LegendMode;\n contributors: Contributor[];\n entity: Entity;\n};\n\nexport const useCrosswalksDisplay = ({activeMode, contributors, entity}: Props) => {\n const getCrosswalkColorForActiveMode = useCallback(\n (crosswalk: CrosswalkBase) => {\n switch (activeMode) {\n case LegendMode.Source:\n return getSourceColor(crosswalk.type);\n case LegendMode.Contributor:\n return getContributorColor(findContributorForCrosswalk(contributors, crosswalk)?.uri || '');\n case LegendMode.Crosswalk:\n return getCrosswalkColor(getCrosswalkId(crosswalk));\n }\n },\n [activeMode, contributors]\n );\n const [highlightedCrosswalks, setHighlightedCrosswalks] = useState<CrosswalkBase[]>([]);\n const highlightedCrosswalksCache = useRef([]);\n const applyHighlightedCrosswalks = useCallback(\n debounce(() => {\n setHighlightedCrosswalks([...highlightedCrosswalksCache.current]);\n }, 50),\n []\n );\n const cacheHighlightedCrosswalks = useCallback(\n (arr) => {\n highlightedCrosswalksCache.current = arr;\n applyHighlightedCrosswalks(arr);\n },\n [applyHighlightedCrosswalks]\n );\n\n const setCrosswalkHighlighted = useCallback(\n (crosswalk: CrosswalkBase, highlighted: boolean) => {\n if (!crosswalk) return;\n if (highlighted) {\n if (activeMode === LegendMode.Contributor) {\n const contributor = findContributorForCrosswalk(contributors, crosswalk);\n cacheHighlightedCrosswalks([crosswalk, ...(contributor?.crosswalks || [])]);\n } else {\n cacheHighlightedCrosswalks([crosswalk]);\n }\n } else {\n cacheHighlightedCrosswalks([]);\n }\n },\n [activeMode, cacheHighlightedCrosswalks, contributors]\n );\n\n const [focusedCrosswalks, setFocusedCrosswalks] = useState<CrosswalkBase[]>([]);\n const calculateFocusedCrosswalks = useCallback(\n (prev: CrosswalkBase[], next: CrosswalkBase[]) =>\n concat(\n prev.filter((prevCrosswalk) => !any(eqCrosswalks(prevCrosswalk), next)),\n next.filter((nextCrosswalk) => !any(eqCrosswalks(nextCrosswalk), prev))\n ),\n []\n );\n const toggleCrosswalkFocus = useCallback(\n (crosswalk: CrosswalkBase) => {\n if (!crosswalk) return;\n if (activeMode === LegendMode.Contributor) {\n const contributor = findContributorForCrosswalk(contributors, crosswalk);\n setFocusedCrosswalks((prevValue) =>\n calculateFocusedCrosswalks([crosswalk, ...(contributor?.crosswalks || [])], prevValue)\n );\n } else {\n setFocusedCrosswalks((prevValue) => calculateFocusedCrosswalks([crosswalk], prevValue));\n }\n },\n [activeMode, calculateFocusedCrosswalks, contributors]\n );\n\n useEffect(() => {\n if (focusedCrosswalks.length) {\n setFocusedCrosswalks([]);\n }\n }, [activeMode, entity]);\n\n return {\n getCrosswalkColor: getCrosswalkColorForActiveMode,\n highlightedCrosswalks: useMemo(\n () => [...highlightedCrosswalks, ...focusedCrosswalks],\n [highlightedCrosswalks, focusedCrosswalks]\n ),\n focusedCrosswalks,\n toggleCrosswalkFocus,\n setCrosswalkHighlighted\n };\n};\n","import {useCallback} from 'react';\nimport {useSelector} from 'react-redux';\nimport {andThen, pipe} from 'ramda';\nimport i18n from 'ui-i18n';\nimport mdm from '@reltio/mdm-module';\nimport {\n Entity,\n unmergeContributor as unmergeContributorRequest,\n unsubscribeEntityFromDataTenantEntity\n} from '@reltio/mdm-sdk';\nimport {useCrosswalkActions, noop} from '@reltio/components';\nimport {UnmergeContributorEvent, UnsubscribeContributorEvent} from '../types';\n\ntype Props = {\n onLoad?: () => void;\n onSuccess?: () => void;\n onError?: (error: unknown) => void;\n onShowMessage?: (message: string, entity?: Entity) => void;\n};\n\nexport const useCrosswalkTreeActions = ({\n onLoad = noop,\n onSuccess = noop,\n onError = noop,\n onShowMessage = noop\n}: Props) => {\n const {addCrosswalk, editCrosswalk, deleteCrosswalk} = useCrosswalkActions({onLoad, onSuccess, onError});\n const dtssPath = useSelector(mdm.selectors.getDtssPath);\n const tenant = useSelector(mdm.selectors.getTenant);\n\n const handleAction = useCallback(\n (request: Promise<unknown>) => {\n onLoad();\n request\n .then(() => {\n onSuccess();\n })\n .catch(onError);\n },\n [onLoad, onError, onSuccess]\n );\n\n const unmergeContributor = useCallback(\n (event: UnmergeContributorEvent) =>\n pipe(\n unmergeContributorRequest,\n andThen((response) => {\n onShowMessage(i18n.text('has been unmerged'), response.b);\n return response;\n }),\n handleAction\n )(event),\n [handleAction, onShowMessage]\n );\n\n const unsubscribeContributor = useCallback(\n ({crosswalk, dataTenant}: UnsubscribeContributorEvent) =>\n pipe(\n unsubscribeEntityFromDataTenantEntity,\n andThen((response) => {\n if (!response.successful) throw new Error(i18n.text('Failed to unsubscribe contributor'));\n return response;\n }),\n handleAction\n )({\n dtssPath,\n value: crosswalk.value,\n type: crosswalk.type,\n sourceTable: crosswalk.sourceTable,\n dataTenant: dataTenant.id,\n customerTenant: tenant\n }),\n [handleAction, dtssPath, tenant]\n );\n\n return {\n addCrosswalk,\n editCrosswalk,\n deleteCrosswalk,\n unmergeContributor,\n unsubscribeContributor\n };\n};\n","import React, {useCallback} from 'react';\n\nimport {AdapterMoment} from '@mui/x-date-pickers/AdapterMoment';\nimport createGenerateClassName from '@mui/styles/createGenerateClassName';\nimport StylesProvider from '@mui/styles/StylesProvider';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider';\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 seed: 'srcs'\n});\n\ntype Props = {\n config: SourcesPerspectiveConfig;\n onResize?: (width: number, height: number) => void;\n saveState: (state: SourcesSavedState) => void;\n getSavedState: (clb: (state: SourcesSavedState) => void) => void;\n};\n\nconst SourcesPerspective = ({config, onResize, saveState, getSavedState}: Props) => {\n const getSavedStatePromisified: () => Promise<SourcesSavedState> = useCallback(promisifyCallback(getSavedState), [\n getSavedState\n ]);\n return (\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize?.(Math.floor(width), Math.floor(height))}\n />\n {config && (\n <SourcesView config={config} saveState={saveState} getSavedState={getSavedStatePromisified} />\n )}\n <ErrorPopup />\n </LocalizationProvider>\n </StylesProvider>\n </ViewIdContext.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","styles","metadata","useMdmMetadata","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","menuShouldBlockScroll","captureMenuScroll","display","paddingRight","inputNumber","minWidth","marginRight","inputUnit","periods","interval","unit","onFocus","onNumberChange","getValue","parseInt","newValue","onUnitChange","newUnit","TextField","type","inputProps","min","SimpleDropDownSelector","placeholder","capitalize","getIntervalUnitLabel","map","resizablePanesWrapper","flexGrow","pane","position","top","left","right","bottom","flexDirection","overflow","DEFAULT_R_PANE_SIZE","ProfileResizablePanes","perspectiveId","children","buttonsProps","disabled","defaultTab","perspectiveSettings","updatePerspectiveSettings","usePerspectivesSettings","active","isSidePanelOpen","isNil","handleUpdateSettings","newSetting","toggleActive","newId","resetActive","handlePaneSizeChange","size","ResizablePanes","primary","orientation","minSize","maxSize","allowResize","debounceInterval","cloneElement","onClose","SideButtonsPanel","onButtonClick","activeIndexId","displayName","withMuiSkin","CreatableSelect","innerRef","selectProps","MenuItem","classNames","ref","selected","component","Checkbox","color","ExpandedValueTooltip","propTypes","PropTypes","id","key","onClick","onMouseMove","onMouseOver","tabIndex","isRequired","current","findNearestScrollableElement","element","currentElement","parentElement","scrollHeight","clientHeight","needToScroll","valueLength","prevValuesLength","parentElementWithScroll","getBoundingClientRect","theme","undefined","fontWeight","clearIndicator","padding","spacing","margin","dropdownIndicator","creatable","getOptions","loadingIndicator","componentsProp","classesProp","stylesProp","onChangeProp","onInputChange","onInputChangeProp","reactSelectProps","SelectComponent","AsyncSelect","Select","inputValue","setInputValue","useState","multiSelectClasses","omit","inputId","useRef","values","usePrevious","length","useEffect","timerId","setTimeout","scrollIntoView","clearTimeout","useKeepInputVisible","controlRef","either","path","getControlRef","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","container","group","groupHeading","indicatorsContainer","menuList","multiValueLabel","multiValueRemove","getOptionValue","isSearchable","inputRef","flexShrink","paddingTop","palette","background","paper","boxShadow","alpha","main","content","borderRadius","buttonWrapper","alignItems","text","secondary","iconButtonClasses","buttonProps","SmallIconButton","selectedUsers","tenant","useMdmTenant","servicesPath","useMdmServicesPath","valueToOption","prepareValues","cachedRequest","pluck","getAllUsersForTenant","then","users","filter","username","utils","filterUsers","MenuWithPopper","ActivityTypes","getItemDataType","getActivityType","activity","items","firstItem","removeIgnoredItems","isImplementedItem","isValidActivityType","includes","filteredItems","console","warn","reject","itemsTotal","splitActivityByType","propOr","groupBy","ifElse","stringifyDeltaValue","deltaValue","attributeTypeUri","attributePresentations","attributeType","findAttributeTypeByUri","dataTypeDefinition","getAttrDataTypeDefinition","formatValue","formatDataTypeValue","Object","entries","flatMap","attributeTypeName","deltaValues","makeAttrTypeUri","join","getActivityLabel","transition","inputRoot","dateOptionLabel","localeFormat","moment","longDateFormat","noop","open","setOpen","handleToggle","fullWidth","DataTypes","endAdornment","menuIsOpen","readOnly","Popover","anchorEl","anchorOrigin","vertical","horizontal","transformOrigin","elevation","DateRangePicker","onApply","PerspectivesSettingsContext","React","settings","useContext","useSavedState","getSavedState","isLoaded","setIsLoaded","savedState","setSavedState","_","catch","header","borderBottom","closeButton","RightSidePanel","tabs","icon","CloseIcon","LegendMode","sumValues","links","prop","sum","nodes","sankeyLayout","nodeWidth","smallestNodeMaxHeight","smallestNodeMinHeight","nodePadding","sankey","graph","forEach","node","sourceLinks","targetLinks","link","source","target","computeNodeLinks","Math","max","computeNodeValues","nextNodes","remainingNodes","x","dx","indexOf","w","computeNodeBreadths","nodesByBreadth","toPairs","sort","a","b","nth","ky","Infinity","i","y","dy","initializeNodeDepth","y0","n","y1","last","computeNodeDepths","computeLinkDepths","ty","correctNodesDepth","result","linksByUuid","l","crosswalk","uuid","sourceNodes","this","j","index","resultByUuid","newSources","sizeForNewSources","sy","setNodeWidth","setNodePadding","setSmallestNodeMaxHeight","setSmallestNodeMinHeight","setSize","newSize","update","curvature","d","lastLine","x0","x1","xi","t","x2","x3","appendix","arguments","safeData","safeNodes","getSafeNode","originalNode","safeLinks","shallowCopy","tooltipTitle","lineHeight","letterSpacing","marginBottom","userSelect","tooltipRow","tooltipIcon","stroke","strokeWidth","strokeOpacity","rootNode","transform","popupContainer","boxSizing","user","time","CalendarToday","Person","LightArrowTooltip","placement","_extends","assign","prototype","hasOwnProperty","call","apply","viewBox","version","xmlns","xmlnsXlink","fill","fillRule","xlinkHref","fillOpacity","mask","highlightEnabled","isColored","disableUnmerge","onUnmerge","isDragging","labelX","setLabelX","setAnchorEl","textRef","name","entity","crosswalks","merges","firstCrosswalk","isDimmed","highlightCrosswalk","removeHighlight","useCrosswalkHighlight","useCrosswalkColor","startNodeHeight","closePopup","nodeHeight","textWidth","clientWidth","opacity","onMouseEnter","onMouseLeave","e","currentTarget","cursor","UnmergeIcon","timeMap","sources","start","end","head","renderMergeNodes","accentContributors","setDragging","isMouseDown","setMouseDown","previousPageX","setPreviousPageX","offsetX","setOffsetX","useSankey","sankeyNodes","sankeyLinks","extractPositionDelta","event","pageX","onUp","pointerEvents","onMouseDown","preventDefault","onMouseUp","isCrosswalkDisplayed","curry","displayedCrosswalks","some","eqCrosswalks","filterDisplayedCrosswalks","tree","evolve","losers","addCrosswalkUniqueId","count","addIdToSubtree","loser","processTree","processSubTree","parentIndex","mergesCrosswalks","chain","Date","now","linkedNodes","uniq","memo","crosswalkTree","entityLabel","visibleCrosswalks","sankeyData","getSankeyData","refreshMode","refreshRate","handleWidth","handleHeight","marginLeft","focusedIcon","contributorUri","focusable","contributorActions","onToggleFocus","VisibilityIcon","getLastUriPart","Spacer","show","showForDisabled","contributorColor","border","borderLeft","marginTop","editor","accentContributor","crosswalksBySources","expandedSources","canUnmerge","disableAddCrosswalk","disableEditCrosswalk","disableDeleteCrosswalk","disableUnmergeContributor","onEdit","onDelete","onAdd","onToggleSourceExpanded","onUnsubscribeContributor","getContributorColor","dataTenants","useSelector","mdm","scrollToCrosswalk","useHighlightedCrosswalks","find","flatten","behavior","showEditor","setShowEditor","contributorCrosswalk","CrosswalkType","toggleCrosswalkFocus","useCrosswalkFocus","allContributorCrosswalks","dataTenantForExternalCrosswalk","getDataTenantFromCrosswalks","AddIcon","UnsubscribeIcon","dataTenant","crosswalksByTypes","SourceCrosswalksRow","showCrosswalkColors","crosswalksFocusEnabled","expanded","onToggleExpanded","CrosswalkEditor","table","overflowY","overflowX","tableRow","maxWidth","contributors","selectedAttributeTypes","onChangeVisibleCrosswalks","onAddCrosswalk","onEditCrosswalk","onDeleteCrosswalk","onUnmergeContributor","rowsData","entityCrosswalks","relationCrosswalks","getRelationCrosswalks","contributor","isEmptyValue","ownerType","relationCrosswalk","entityCrosswalk","groupCrosswalksByTypesAndSources","buildTableRowsData","expandedByContributor","setExpandedByContributor","isExpandedSource","collectVisibleCrosswalks","handleDelete","crosswalkId","entityUri","handleEdit","params","checkCanCreateCrosswalk","checkCanEditCrosswalk","checkCanDeleteCrosswalk","sourceUri","unless","has","assoc","without","append","hintIcon","verticalAlign","checkedIcon","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","Button","UnsubscribeDialog","canUnsubscribe","modeSwitcher","infoIcon","hint","alignSelf","hintText","crosswalksList","divider","activeMode","onChangeMode","tableProps","mdmModule","getEntityType","viewRef","paneSize","setPaneSize","percentageSize","contributorForUnmerge","setContributorForUnmerge","unsubscribeInfo","setUnsubscribeInfo","crosswalkTreeDeep","calculateCrosswalkTreeDeep","maxPaneHeight","modes","Crosswalk","Source","Contributor","setVisibleCrosswalks","checkMetadataPermission","MetadataPermissions","operationType","ModeSwitcher","modeId","isEmpty","getLabel","masktype","maskUnits","clipRule","showErrorMessage","error","ErrorPopup","message","getRequestErrorMessage","cx","cy","r","style","maskType","y2","gradientUnits","stopColor","stopOpacity","offset","default","info","snackbarMessage","snackbarIcon","uiPath","generateEntityUrl","UrlGeneratorsContext","entityLink","href","underline","whiteSpace","description","RulesetOption","RulesetsMenuList","getStyles","maxHeight","RulesetsSelector","survivorshipGroups","currentSurvivorshipGroupUri","propEq","DropDownSelector","sourcesView","headerDivider","borderColor","attributesTable","ActivePanel","connect","state","historyEvent","config","defaultEntity","saveState","dispatch","setActiveMode","isCrosswalkTreeLoading","setIsCrosswalkTreeLoading","onChangeSurvivorshipGroup","isDefaultSurvivorshipGroupUri","isLoading","isEntityLoading","entityTypeUri","defaultSurvivorshipGroupUri","setCurrentSurvivorshipGroupUri","setEntity","setIsLoading","safePromise","useSafePromise","survivorshipGroupUri","getEntityBySurvivorshipGroupUri","finally","useEntityWithSurvivorshipGroups","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","historyButtonId","History","persistedEntity","historySlice","useHistorySlice","selectedAttrTypes","setSelectedAttrTypes","useDidUpdateEffect","SnackbarRenderer","showSnackbarMessage","useSnackbar","showDismiss","visibleColumns","setVisibleColumns","hasVisibleColumnsChanged","equals","onCrosswalkTreeLoaded","reload","reloadCrosswalkTree","onSuccess","setCrosswalkTree","onError","loadData","getCrosswalkTree","results","useCrosswalkTree","aEntity","collectContributorsFromTree","refreshEntity","profile","viewId","refreshData","modifiedEntity","crosswalksMap","newlyCreatedAttributes","onDeleteAttribute","onPinAttribute","onIgnoreAttribute","onEditAttribute","onAddAttribute","emptyTempAttributeUris","useModifiedEntity","onModify","displayProps","getCrosswalkColorForActiveMode","getSourceColor","findContributorForCrosswalk","highlightedCrosswalks","setHighlightedCrosswalks","highlightedCrosswalksCache","applyHighlightedCrosswalks","debounce","cacheHighlightedCrosswalks","arr","setCrosswalkHighlighted","highlighted","focusedCrosswalks","setFocusedCrosswalks","calculateFocusedCrosswalks","prev","next","prevCrosswalk","any","nextCrosswalk","prevValue","useCrosswalksDisplay","onShowMessage","addCrosswalk","deleteCrosswalk","editCrosswalk","unmergeContributor","unsubscribeContributor","onLoad","useCrosswalkActions","dtssPath","handleAction","request","unmergeContributorRequest","andThen","response","unsubscribeEntityFromDataTenantEntity","successful","Error","sourceTable","customerTenant","useCrosswalkTreeActions","errorCode","ApiErrorCode","historyFilter","onApplyFilter","isHistoryLoading","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","enabled","Legend","LegendIcon","HistoryIcon","HistoryHeader","total","HistoryView","contributorsUris","HistoryPanelEmptyState","additionalHeaderItems","Divider","DndProvider","backend","HTML5Backend","CrosswalkDragLayer","ScreenProfileBand","attributeUris","AttributesTable","onChangeVisibleColumns","onSelectAttributeTypes","onPin","onIgnore","activeSurvivorshipGroupUri","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","seed","onResize","getSavedStatePromisified","promisifyCallback","ViewIdContext","StylesProvider","LocalizationProvider","dateAdapter","AdapterMoment","floor"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"5177.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/DateIntervalSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/DateIntervalSelector/DateIntervalSelector.tsx","webpack://@reltio/remotes/../components/src/components/ProfileResizablePanes/styles.ts","webpack://@reltio/remotes/../components/src/components/ProfileResizablePanes/ProfileResizablePanes.tsx","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/hooks/useKeepInputVisible.ts","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/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/contexts/PerspectivesSettingsContext/index.ts","webpack://@reltio/remotes/../components/src/hooks/useSavedState.ts","webpack://@reltio/remotes/../sources/src/components/RightSidePanel/styles.ts","webpack://@reltio/remotes/../sources/src/components/RightSidePanel/RightSidePanel.tsx","webpack://@reltio/remotes/../sources/src/types/LegendMode.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/sankey.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/useSankey.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/styles.ts","webpack://@reltio/remotes/../sources/src/components/SankeyChart/MergeTooltip.tsx","webpack://@reltio/remotes/../sources/src/icons/notMatch.svg","webpack://@reltio/remotes/../sources/src/components/SankeyChart/Node.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/Link.tsx","webpack://@reltio/remotes/../sources/src/components/SankeyChart/SankeyChart.tsx","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/helpers.ts","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/styles.ts","webpack://@reltio/remotes/../sources/src/components/CrosswalkTreeView/CrosswalkTreeView.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/ContributorRow/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/ContributorRow/ContributorRow.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTableRow/LegendTableRow.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendTable/LegendTable.tsx","webpack://@reltio/remotes/../sources/src/components/LegendTable/helpers.ts","webpack://@reltio/remotes/../sources/src/components/SelectableTree/styles.ts","webpack://@reltio/remotes/../sources/src/components/SelectableTree/SelectableTree.tsx","webpack://@reltio/remotes/../sources/src/components/UnmergeDialog/styles.ts","webpack://@reltio/remotes/../sources/src/components/UnmergeDialog/UnmergeDialog.tsx","webpack://@reltio/remotes/../sources/src/components/UnsubscribeDialog/styles.ts","webpack://@reltio/remotes/../sources/src/components/UnsubscribeDialog/UnsubscribeDialog.tsx","webpack://@reltio/remotes/../sources/src/components/LegendView/styles.ts","webpack://@reltio/remotes/../sources/src/components/LegendView/LegendView.tsx","webpack://@reltio/remotes/../sources/src/components/SourcesView/icons/LegendIcon.svg","webpack://@reltio/remotes/../sources/src/services/errors.ts","webpack://@reltio/remotes/../sources/src/components/EmptyState/icons/EmptySources.svg","webpack://@reltio/remotes/../sources/src/components/EmptyState/styles.ts","webpack://@reltio/remotes/../sources/src/components/EmptyState/EmptyState.tsx","webpack://@reltio/remotes/../sources/src/components/TreeActionSnackbar/styles.ts","webpack://@reltio/remotes/../sources/src/components/TreeActionSnackbar/TreeActionSnackbar.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetOption/styles.ts","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetOption/RulesetOption.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesetsMenuList/RulesetsMenuList.tsx","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/styles.ts","webpack://@reltio/remotes/../sources/src/components/RulesestsSelector/RulesestsSelector.tsx","webpack://@reltio/remotes/../sources/src/components/SourcesView/styles.ts","webpack://@reltio/remotes/../sources/src/components/SourcesView/SourcesView.tsx","webpack://@reltio/remotes/../sources/src/hooks/useEntityWithSurvivorshipGroups.tsx","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalkTree.ts","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalksDisplay.ts","webpack://@reltio/remotes/../sources/src/hooks/useCrosswalkTreeActions.ts","webpack://@reltio/remotes/../sources/src/components/SourcesView/index.tsx","webpack://@reltio/remotes/./src/sources.ts"],"sourcesContent":["import {makeStyles} from '@mui/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 {AttributeOption} from '../../types';\nimport {MultiValueProps, OptionProps} from 'react-select';\nimport {AttributeType, getAttributeTypeSubAttributes, TEntityType} from '@reltio/mdm-sdk';\nimport Typography from '@mui/material/Typography';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport MultiValue from '../ReactSelect/commonComponents/MultiValue';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport AttributeListItem from '../AttributeListItem/AttributeListItem';\nimport {useMdmMetadata} from '../../contexts';\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 styles = useStyles();\n const metadata = useMdmMetadata();\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)} data-reltio-id=\"attribute-selector\">\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 menuShouldBlockScroll={true}\n captureMenuScroll={false}\n />\n </div>\n );\n};\n\nexport default AttributeSelector;\n","import {makeStyles} from '@mui/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 {getIntervalUnitLabel} from '@reltio/mdm-sdk';\nimport TextField from '@mui/material/TextField';\nimport SimpleDropDownSelector from '../SimpleDropDownSelector/SimpleDropDownSelector';\nimport {getValue} from '../../core/utils';\nimport {useStyles} from './styles';\n\nimport {capitalize} from '@mui/material/utils';\n\ntype Props = {\n interval: [number, string];\n onChange: ([number, string]) => void;\n onFocus?: () => void;\n};\n\nconst periods = ['minutes', 'hours', 'days', 'weeks', 'months', 'years'];\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 variant=\"standard\"\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(getIntervalUnitLabel(unit))}}\n options={periods.map((value) => ({\n value,\n label: capitalize(getIntervalUnitLabel(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 '@mui/styles';\n\nconst useStyles = makeStyles(() => ({\n resizablePanesWrapper: {\n flexGrow: 1,\n height: '100%',\n marginRight: '1px'\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}));\n\nexport {useStyles};\n","import React, {useCallback, cloneElement} from 'react';\nimport {ResizablePanes} from '../ResizablePanes/ResizablePanes';\nimport {SideButtonsPanel} from '../SideIconPanel/SideButtonsPanel';\nimport {usePerspectivesSettings} from '../../contexts';\nimport {isNil} from 'ramda';\n\nimport {useStyles} from './styles';\nimport {RightPanelTab} from '../../types';\n\nconst DEFAULT_R_PANE_SIZE = 480;\nconst MIN_R_PANE_SIZE = 320;\nconst MAX_R_PANE_SIZE = 640;\n\ntype Props = {\n perspectiveId: string;\n children: [React.ReactElement, React.ReactElement];\n buttonsProps: Array<RightPanelTab['buttonProps']>;\n disabled?: boolean;\n defaultTab?: number;\n};\n\nexport const ProfileResizablePanes = ({perspectiveId, children, buttonsProps, disabled, defaultTab}: Props) => {\n const styles = useStyles();\n\n const {perspectiveSettings, updatePerspectiveSettings} = usePerspectivesSettings(perspectiveId);\n const {width = DEFAULT_R_PANE_SIZE} = perspectiveSettings || {};\n const active = defaultTab || perspectiveSettings?.active;\n const isSidePanelOpen = !isNil(active) && !disabled;\n\n const handleUpdateSettings = useCallback(\n (newSetting) => {\n updatePerspectiveSettings(newSetting);\n },\n [updatePerspectiveSettings]\n );\n\n const toggleActive = useCallback(\n (newId: number) => {\n const newActive = active === newId ? null : newId;\n handleUpdateSettings({active: newActive});\n },\n [active, handleUpdateSettings]\n );\n\n const resetActive = useCallback((): void => {\n handleUpdateSettings({active: null});\n }, [handleUpdateSettings]);\n\n const handlePaneSizeChange = useCallback(\n ({size}) => {\n handleUpdateSettings({width: size});\n },\n [handleUpdateSettings]\n );\n\n return (\n <>\n <ResizablePanes\n className={styles.resizablePanesWrapper}\n primary=\"second\"\n orientation=\"vertical\"\n size={isSidePanelOpen ? width : 0}\n minSize={MIN_R_PANE_SIZE}\n maxSize={MAX_R_PANE_SIZE}\n allowResize={isSidePanelOpen}\n onChange={handlePaneSizeChange}\n debounceInterval={2500}\n >\n <div className={styles.pane}>{children[0]}</div>\n <div className={styles.pane}>{cloneElement(children[1], {active, onClose: resetActive})}</div>\n </ResizablePanes>\n <SideButtonsPanel\n disabled={disabled}\n buttonsProps={buttonsProps}\n onButtonClick={toggleActive}\n activeIndexId={active}\n />\n </>\n );\n};\n\nProfileResizablePanes.displayName = 'ProfileResizablePanes';\n","import CreatableSelect from 'react-select/creatable';\nimport withMuiSkin from './withMuiSkin';\n\nexport default withMuiSkin(CreatableSelect);\n","import MenuItem from '@mui/material/MenuItem';\nimport Checkbox from '@mui/material/Checkbox';\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 {useEffect, MutableRefObject} from 'react';\nimport {usePrevious} from '../../../hooks';\n\nconst findNearestScrollableElement = (element: HTMLElement) => {\n let currentElement = element?.parentElement;\n while (currentElement) {\n if (currentElement.scrollHeight > currentElement.clientHeight) {\n return currentElement;\n }\n currentElement = currentElement.parentElement;\n }\n return null;\n};\n\nconst needToScroll = (\n valueLength: number,\n prevValuesLength: number,\n parentElementWithScroll: HTMLElement,\n currentElement: HTMLElement\n) =>\n valueLength &&\n prevValuesLength < valueLength &&\n currentElement.getBoundingClientRect().bottom > parentElementWithScroll.getBoundingClientRect().bottom;\n\nexport const useKeepInputVisible = (values = [], ref: MutableRefObject<HTMLElement>) => {\n const prevValuesLength = usePrevious(values?.length);\n\n useEffect(() => {\n const timerId = setTimeout(() => {\n const parentElementWithScroll = findNearestScrollableElement(ref?.current);\n if (\n parentElementWithScroll &&\n needToScroll(values?.length, prevValuesLength, parentElementWithScroll, ref.current)\n ) {\n ref.current?.scrollIntoView(false);\n }\n }, 0);\n\n return () => {\n clearTimeout(timerId);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [values?.length]);\n};\n","import React, {useState, useRef} from 'react';\nimport PropTypes from 'prop-types';\nimport {omit, either, path} from 'ramda';\nimport CreatableSelect from '../CreatableSelect';\nimport Select from '../Select';\nimport AsyncSelect from '../AsyncSelect';\nimport multiSelectComponents from './components';\nimport {makeStyles} from '@mui/styles';\nimport {mergeClasses} from '../../../core/utils';\nimport {useKeepInputVisible} from '../hooks/useKeepInputVisible';\n\nconst getControlRef = (innerRef) => {\n const controlRef = {};\n if (innerRef.current) {\n controlRef.current = either(\n path(['select', 'controlRef']),\n path(['select', 'select', 'controlRef'])\n )(innerRef.current);\n }\n return controlRef;\n};\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 const innerRef = useRef();\n useKeepInputVisible(props.value, getControlRef(innerRef));\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 innerRef={innerRef}\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 @mui/material/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 menuShouldBlockScroll: PropTypes.bool,\n captureMenuScroll: PropTypes.bool,\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 {alpha} from '@mui/material/styles';\n\nimport {makeStyles} from '@mui/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: alpha(theme.palette.primary.main, 0.12),\n color: theme.palette.primary.main,\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n height: '42px',\n width: '3px',\n backgroundColor: theme.palette.primary.main,\n left: '-8px',\n borderRadius: '0 6px 6px 0'\n }\n },\n buttonWrapper: {\n position: 'relative',\n width: '48px',\n height: '44px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '6px',\n margin: '2px 8px',\n color: theme.palette.text.secondary\n }\n}));\n","import React, {ElementType} from 'react';\nimport classnames from 'classnames';\nimport {IconButtonProps} from '@mui/material/IconButton';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n disabled: boolean;\n buttonsProps: Array<{\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 = ({\n disabled,\n buttonsProps,\n activeIndexId,\n className,\n onButtonClick,\n classes = {}\n}: Props) => {\n const styles = useStyles();\n const {active, buttonWrapper, ...iconButtonClasses} = classes;\n\n return (\n <div className={classnames(styles.container, className)}>\n {buttonsProps.map(({id, ...buttonProps}) => {\n return (\n <SmallIconButtonWithTooltip\n {...buttonProps}\n disabled={disabled}\n classes={iconButtonClasses}\n size=\"S\"\n key={id}\n className={classnames(\n {[classnames(styles.active, active)]: activeIndexId === id},\n styles.buttonWrapper,\n buttonWrapper\n )}\n onClick={() => onButtonClick(id)}\n data-reltio-id={`reltio-profile-right-side-button-${id}`}\n />\n );\n })}\n </div>\n );\n};\n","import {makeStyles} from '@mui/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 i18n from 'ui-i18n';\nimport {defaultTo, pipe, pluck} from 'ramda';\nimport classnames from 'classnames';\nimport Typography from '@mui/material/Typography';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport {getAllUsersForTenant, UserInfo, utils} from '@reltio/mdm-sdk';\nimport {useMdmServicesPath, useMdmTenant} from '../../contexts';\nimport MenuWithPopper from '../commonReactSelectComponents/MenuWithPopper';\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 inputRef = useRef(null);\n\n const tenant = useMdmTenant();\n const servicesPath = useMdmServicesPath();\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 cachedRequest = useRef<Promise<UserInfo[]>>();\n const getOptions = (inputValue) => {\n if (!cachedRequest.current) {\n cachedRequest.current = getAllUsersForTenant({tenant, servicesPath});\n }\n return cachedRequest.current.then(pipe(pluck('username'), filterUsers(inputValue), prepareValues));\n };\n\n return (\n <div className={classnames(styles.root, className)} data-reltio-id=\"user-selector\">\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 ref: inputRef\n }}\n components={{\n DropdownIndicator: DropdownIndicatorWithIconButton,\n Menu: MenuWithPopper\n }}\n styles={customStyles}\n classes={styles}\n menuPortalTarget={document.body}\n menuShouldBlockScroll={true}\n captureMenuScroll={false}\n inputRef={inputRef}\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 {\n formatDataTypeValue,\n findAttributeTypeByUri,\n Metadata,\n AttributePresentations,\n makeAttrTypeUri,\n getAttrDataTypeDefinition\n} from '@reltio/mdm-sdk';\nimport {filter, groupBy, ifElse, map, path, pipe, propOr, values, 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.warn('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 = (\n deltaValue: DeltaValue['value'],\n attributeTypeUri: string,\n metadata: Metadata,\n attributePresentations: AttributePresentations\n) => {\n const attributeType = findAttributeTypeByUri(metadata, attributeTypeUri);\n const dataTypeDefinition = getAttrDataTypeDefinition(attributeType);\n const formatValue = formatDataTypeValue({attributePresentations, dataTypeDefinition});\n\n if (isNil(deltaValue)) {\n return '';\n }\n\n if (typeof deltaValue === 'string') {\n return attributeType ? formatValue(deltaValue) : deltaValue;\n }\n\n return Object.entries(deltaValue)\n .flatMap(([attributeTypeName, deltaValues]) =>\n deltaValues.map((deltaValue) =>\n stringifyDeltaValue(\n deltaValue.value,\n makeAttrTypeUri(attributeTypeUri, attributeTypeName),\n metadata,\n attributePresentations\n )\n )\n )\n .join(', ');\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 '@mui/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';\nimport {noop} from '../../../core';\nimport TextField from '@mui/material/TextField';\nimport Popover from '@mui/material/Popover';\nimport DropdownIndicatorWithIconButton from '../../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport DateRangePicker from '../../DateRangePicker/DateRangePicker';\n\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 = noop}: 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 <Popover\n open={open}\n anchorEl={inputRef.current}\n onClose={onCancel}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n elevation={2}\n >\n <DateRangePicker values={values} onApply={onApply} type={DataTypes.TYPE_ACTIVENESS_DATE} />\n </Popover>\n </div>\n );\n};\n\nexport default CustomDateRangeEditor;\n","import React, {useCallback, useContext} from 'react';\nimport {PerspectivesSettings, PerspectiveSettingItem} from '../../types';\n\ntype PerspectivesSettingsProps = {\n settings: PerspectivesSettings;\n onChange: (perspectiveId: string, newSetting: Partial<PerspectiveSettingItem>) => void;\n};\n\nexport const PerspectivesSettingsContext = React.createContext<PerspectivesSettingsProps>({\n settings: {},\n onChange: () => {}\n});\n\nPerspectivesSettingsContext.displayName = 'PerspectivesSettingsContext';\n\nexport const usePerspectivesSettings = (perspectiveId: string) => {\n const {settings, onChange} = useContext(PerspectivesSettingsContext) || {};\n const perspectiveSettings = settings?.[perspectiveId];\n\n const updatePerspectiveSettings = useCallback(\n (newSetting: Partial<PerspectiveSettingItem>) => {\n onChange(perspectiveId, newSetting);\n },\n [perspectiveId, onChange]\n );\n\n return {updatePerspectiveSettings, perspectiveSettings};\n};\n","import {useEffect, useState} from 'react';\n\nexport const useSavedState = <T>(getSavedState: () => Promise<T>) => {\n const [isLoaded, setIsLoaded] = useState(false);\n const [savedState, setSavedState] = useState<T | Record<string, never>>({});\n\n useEffect(() => {\n getSavedState()\n .then((savedState) => {\n setSavedState(savedState || {});\n })\n .then((_) => setIsLoaded(true))\n .catch((_) => setIsLoaded(true));\n }, []); // eslint-disable-line\n\n return {isLoaded, savedState};\n};\n","import {makeStyles} from '@mui/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 '@mui/icons-material/Close';\nimport {RightPanelTab, SmallIconButton} from '@reltio/components';\nimport {useStyles} from './styles';\n\ntype Props = {\n onClose?: () => void;\n active?: number;\n tabs: RightPanelTab[];\n};\n\nexport const RightSidePanel = ({active, onClose, tabs}: Props) => {\n const styles = useStyles();\n const {content, title} = tabs[active] || {};\n\n return (\n <>\n <div className={styles.header}>\n <SmallIconButton className={styles.closeButton} icon={CloseIcon} onClick={onClose} />\n {title}\n </div>\n {content}\n </>\n );\n};\n","export enum LegendMode {\n Crosswalk = 'crosswalks',\n Source = 'source',\n Contributor = 'contributor'\n}\n","import {sum, map, pipe, groupBy, toPairs, sort, nth, prop, reduce, last} from 'ramda';\nimport {SankeyLink, SankeyData} from '../../types/SankeyChartData';\n\nconst sumValues = (links: SankeyLink[]): number => pipe(map(prop('value')), sum)(links);\nconst interpolateNumber = (a: number, b: number) => ((a = +a), (b = +b), (t) => a * (1 - t) + b * t);\n\nexport default function Sankey() {\n const lastLinksSize = 22;\n\n let nodeWidth = 24,\n smallestNodeMaxHeight = 15,\n smallestNodeMinHeight = 10,\n nodePadding = 8,\n size = [1, 1] as [number, number];\n\n function sankey({nodes, links}: SankeyData) {\n const graph = {nodes, links};\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeBreadths(graph);\n computeNodeDepths(graph);\n computeLinkDepths(graph);\n correctNodesDepth(graph);\n return graph;\n }\n\n sankey.nodeWidth = () => nodeWidth;\n sankey.setNodeWidth = (width: number) => ((nodeWidth = +width), sankey);\n\n sankey.nodePadding = () => nodePadding;\n sankey.setNodePadding = (padding: number) => ((nodePadding = +padding), sankey);\n\n sankey.smallestNodeMaxHeight = () => smallestNodeMaxHeight;\n sankey.setSmallestNodeMaxHeight = (height: number) => ((smallestNodeMaxHeight = +height), sankey);\n\n sankey.smallestNodeMinHeight = () => smallestNodeMinHeight;\n sankey.setSmallestNodeMinHeight = (height: number) => ((smallestNodeMinHeight = +height), sankey);\n\n sankey.size = () => size;\n sankey.setSize = (newSize: [number, number]) => ((size = newSize), sankey);\n\n sankey.update = (graph) => {\n computeLinkDepths(graph);\n return graph;\n };\n\n sankey.link = () => {\n let curvature = 0.5;\n\n function link(d) {\n const lastLine = !d.target.sourceLinks || d.target.sourceLinks.length == 0;\n const addPixels = 0.13;\n const x0 = d.source.x + d.source.dx,\n x1 = d.target.x,\n xi = interpolateNumber(x0, x1),\n x2 = xi(curvature),\n x3 = xi(1 - curvature),\n y0 = d.source.y + d.sy - addPixels,\n y1 = d.target.y + d.ty - addPixels;\n const appendix = !lastLine\n ? `L${x1 + nodeWidth},${y1} L${x1 + nodeWidth},${y1 + d.dy + 2 * addPixels}`\n : '';\n\n return y0 === y1\n ? `M${x0},${y0} \n L${x1},${y1}${appendix} \n L${x1},${y1 + d.dy + 2 * addPixels} \n L${x0},${y0 + d.dy + 2 * addPixels} Z`\n : `M${x0},${y0}\n C${x2},${y0} ${x3},${y1} ${x1},${y1}${appendix} \n L${x1},${y1 + d.dy + 2 * addPixels} \n C${x3},${y1 + d.dy + 2 * addPixels} ${x2},${y0 + d.dy + 2 * addPixels} \n ${x0},${y0 + d.dy + 2 * addPixels} Z`;\n }\n\n link.curvature = function (_) {\n if (!arguments.length) return curvature;\n curvature = +_;\n return link;\n };\n\n return link;\n };\n\n // Populate the sourceLinks and targetLinks for each node.\n function computeNodeLinks({nodes, links}: SankeyData) {\n nodes.forEach((node) => {\n node.sourceLinks = [];\n node.targetLinks = [];\n });\n links.forEach((link) => {\n link.source.sourceLinks.push(link);\n link.target.targetLinks.push(link);\n });\n }\n\n // Compute the value (size) of each node by summing the associated links.\n function computeNodeValues({nodes}: SankeyData) {\n nodes.forEach((node) => {\n node.value = Math.max(sumValues(node.sourceLinks), sumValues(node.targetLinks));\n });\n }\n\n // Iteratively assign the breadth (x-position) for each node.\n // Nodes are assigned the maximum breadth of incoming neighbors plus one;\n // nodes with no incoming links are assigned breadth zero, while\n // nodes with no outgoing links are assigned the maximum breadth.\n function computeNodeBreadths({nodes}: SankeyData) {\n if (!nodes.length) return;\n let remainingNodes = [nodes[0]],\n nextNodes,\n x = 0;\n\n while (remainingNodes.length) {\n nextNodes = [];\n remainingNodes.forEach((node) => {\n node.x = x;\n node.dx = nodeWidth;\n node.targetLinks.forEach((link) => {\n if (nextNodes.indexOf(link.source) < 0) {\n nextNodes.push(link.source);\n }\n });\n });\n remainingNodes = nextNodes;\n ++x;\n }\n\n nodes.forEach((node) => {\n node.x = x - 1 - node.x;\n });\n\n if (x > 2) {\n const w = (size[0] - 2 * nodeWidth - lastLinksSize) / (x - 2);\n nodes.forEach((node) => {\n if (!node.sourceLinks || node.sourceLinks.length == 0) node.x = size[0] - nodeWidth;\n else node.x *= w;\n });\n } else {\n nodes[0].x = size[0] - nodeWidth;\n nodes[1].x = nodes[0].x - lastLinksSize - nodeWidth;\n }\n }\n\n function computeNodeDepths({nodes, links}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a, b) => a[0] - b[0]),\n map(nth(1))\n )(nodes);\n\n //\n initializeNodeDepth();\n resolveCollisions();\n\n const max = pipe(\n map((nodes) => (nodes.length - 1) * nodePadding + sum(map((node) => node.dy, nodes))),\n reduce(Math.max, 0)\n )(nodesByBreadth);\n\n const y1 = (size[1] - max) / 2;\n\n nodesByBreadth.forEach((nodes) => {\n const {y, dy} = last(nodes);\n const y0 = size[1] - (y + dy);\n nodes.forEach((node) => {\n node.y += y0;\n if (y1 > 0) node.y -= y1;\n });\n });\n\n function initializeNodeDepth() {\n let ky = pipe(\n map((nodes) => (size[1] - (nodes.length - 1) * nodePadding) / sumValues(nodes)),\n reduce(Math.min, Infinity)\n )(nodesByBreadth);\n\n const min = pipe(\n map((node) => node.value / (node.targetLinks?.length || 1)),\n reduce(Math.min, Infinity)\n )(nodes);\n\n ky = Math.max(Math.min(ky, smallestNodeMaxHeight / min), smallestNodeMinHeight / min);\n\n nodesByBreadth.forEach((nodes) => {\n nodes.forEach((node, i) => {\n node.y = i;\n node.dy = node.value * ky;\n });\n });\n\n links.forEach((link) => {\n link.dy = link.value * ky;\n });\n }\n\n function resolveCollisions() {\n nodesByBreadth.forEach((nodes) => {\n let node,\n dy,\n y0 = 0,\n i;\n const n = nodes.length;\n\n // Push any overlapping nodes down.\n nodes.sort((a, b) => a.y - b.y);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dy = y0 - node.y;\n if (dy > 0) node.y += dy;\n y0 = node.y + node.dy + nodePadding;\n }\n\n // If the bottommost node goes outside the bounds, push it back up.\n dy = y0 - nodePadding - size[1];\n if (dy > 0) {\n y0 = node.y -= dy;\n\n // Push any overlapping nodes back up.\n for (i = n - 2; i >= 0; --i) {\n node = nodes[i];\n dy = node.y + node.dy + nodePadding - y0;\n if (dy > 0) node.y -= dy;\n y0 = node.y;\n }\n }\n });\n }\n }\n\n function computeLinkDepths({nodes}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a: number, b: number) => a[0] - b[0]),\n map(nth(1))\n )(nodes);\n\n nodesByBreadth.forEach((nodes) => {\n nodes.forEach((node) => {\n if (node.targetLinks?.length) {\n const result = [];\n const linksByUuid = node.targetLinks.map((l) => l.crosswalk.uuid);\n const sourceNodes = [];\n node.targetLinks.forEach(function (l) {\n if (this.indexOf(l.source) == -1) this.push(l.source);\n }, sourceNodes);\n for (let i = 0; i < sourceNodes.length; i++)\n for (let j = 0; j < sourceNodes[i].sourceLinks.length; j++) {\n const index = linksByUuid.indexOf(sourceNodes[i].sourceLinks[j].crosswalk.uuid);\n if (index != -1) result.push(node.targetLinks[index]);\n }\n node.targetLinks = result;\n }\n\n if (node.sourceLinks?.length) {\n const result = [];\n if (node.targetLinks?.length) {\n const linksByUuid = node.sourceLinks.map((l) => l.crosswalk.uuid);\n for (let i = 0; i < node.targetLinks.length; i++) {\n const index = linksByUuid.indexOf(node.targetLinks[i].crosswalk.uuid);\n if (index != -1) result.push(node.sourceLinks[index]);\n }\n }\n\n const resultByUuid = result.map((l) => l.crosswalk.uuid);\n const newSources = node.sourceLinks.filter(function (l) {\n return this.indexOf(l.crosswalk.uuid) == -1;\n }, resultByUuid);\n\n node.sourceLinks = newSources.concat(result);\n if (result.length > 0) {\n let sizeForNewSources = 0;\n for (let i = 0; i < newSources.length; i++) sizeForNewSources += newSources[i].dy;\n node.sizeForNewSources = sizeForNewSources;\n }\n }\n });\n });\n\n nodes.forEach((node) => {\n let sy = 0,\n ty = node.sizeForNewSources || 0;\n delete node.sizeForNewSources;\n node.sourceLinks.forEach((link) => {\n link.sy = sy;\n sy += link.dy;\n });\n node.targetLinks.forEach((link) => {\n link.ty = ty;\n ty += link.dy;\n });\n });\n }\n\n function correctNodesDepth({nodes}: SankeyData) {\n const nodesByBreadth = pipe(\n groupBy(prop('x')),\n toPairs,\n sort((a: number, b: number) => b[0] - a[0]),\n map(nth(1))\n )(nodes);\n\n nodesByBreadth.forEach((nodes) => {\n nodes = nodes.concat().sort((a, b) => a.y - b.y);\n nodes.forEach((node, i) => {\n if (node.sourceLinks?.length) {\n const {target, ty, dy} = last(node.sourceLinks);\n let y0 = target.y + ty + dy - node.dy;\n if (nodes[i - 1]?.x == node.x && y0 < nodes[i - 1]?.y + nodes[i - 1]?.dy + nodePadding)\n y0 = nodes[i - 1].y + nodes[i - 1].dy + nodePadding;\n if (node.y > y0) {\n node.y = y0;\n }\n }\n });\n });\n }\n\n return sankey;\n}\n","import {useMemo} from 'react';\nimport {SankeyData, SankeyNode} from '../../types/SankeyChartData';\nimport sankey from './sankey';\n\ntype Props = {\n width: number;\n height: number;\n data: SankeyData;\n};\n\nconst useSankey = ({data, width, height}: Props) =>\n useMemo(() => {\n if (!width || !height) return {nodes: [], links: []};\n\n const shallowCopy = (data: SankeyData): SankeyData => {\n const safeNodes = data.nodes.map((node) => ({...node}));\n const getSafeNode = (originalNode: SankeyNode) => {\n const index = data.nodes.indexOf(originalNode);\n return safeNodes[index];\n };\n\n const safeLinks = data.links.map((link) => ({\n ...link,\n source: getSafeNode(link.source),\n target: getSafeNode(link.target)\n }));\n return {nodes: safeNodes, links: safeLinks};\n };\n\n const sankeyLayout = sankey()\n .setNodeWidth(14)\n .setNodePadding(20)\n .setSize([height - 2, width - 2]);\n\n const nodeWidth = sankeyLayout.nodeWidth();\n const path = sankeyLayout.link();\n\n const safeData = shallowCopy(data);\n const {nodes, links}: SankeyData = sankeyLayout(safeData);\n\n return {nodes, links, nodeWidth, path};\n }, [data, height, width]);\n\nexport default useSankey;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n tooltipTitle: {\n fontWeight: 500,\n fontSize: '16px',\n lineHeight: '24px',\n letterSpacing: '0.15px',\n marginBottom: '8px',\n userSelect: 'none'\n },\n tooltipRow: {\n display: 'flex',\n alignItems: 'center',\n fontSize: '13px',\n lineHeight: '15px',\n fontWeight: 'normal',\n '&:not(:last-child)': {\n marginBottom: '4px'\n }\n },\n tooltipIcon: {\n fontSize: '18px',\n color: 'rgba(0, 0, 0, 0.54)',\n marginRight: '8px'\n },\n node: {\n stroke: '#000000',\n strokeWidth: 1,\n strokeOpacity: 0.38\n },\n rootNode: {\n transform: 'rotate(90deg)',\n userSelect: 'none',\n fontSize: '13px'\n },\n popupContainer: {\n padding: 5,\n boxSizing: 'border-box'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {LightArrowTooltip} from '@reltio/components';\nimport CalendarTodayIcon from '@mui/icons-material/CalendarToday';\nimport PersonIcon from '@mui/icons-material/Person';\nimport {useStyles} from './styles';\n\ntype Props = {\n user: string;\n time: number;\n children: React.ReactElement;\n};\n\nexport const MergeTooltip = ({user, time, children}: Props) => {\n const styles = useStyles();\n const tooltipTitle = (\n <div>\n <span className={styles.tooltipTitle}>{i18n.text('Merge details')}</span>\n <div className={styles.tooltipRow}>\n <CalendarTodayIcon className={styles.tooltipIcon} />\n {i18n.date(time, 'L LTS')}\n </div>\n <div className={styles.tooltipRow}>\n <PersonIcon className={styles.tooltipIcon} />\n {user}\n </div>\n </div>\n );\n\n return (\n <LightArrowTooltip title={tooltipTitle} placement={'top'}>\n {children}\n </LightArrowTooltip>\n );\n};\n\nexport default MergeTooltip;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M17 13.138l4.5 4.5-4.5 4.5V18.5h-1.247l-3.488-3.479 1.413-1.414 2.901 2.893H17v-3.362zM17 1.5L21.5 6 17 10.5V7.138h-.421l-11.03 11H2v-2h2.723l11.03-11H17V1.5zm-11.45 4l3.294 3.286-1.414 1.413L4.723 7.5H2v-2h3.55z\",\n id: \"svg2499598299a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg2499598299b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2499598299a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2499598299b)\",\n d: \"M0 0h24v24H0z\"\n}))));","import React, {MouseEvent, useEffect, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport Popover from '@mui/material/Popover';\nimport MergeTooltip from './MergeTooltip';\nimport {SankeyNode} from '../../types/SankeyChartData';\nimport {SmallIconButtonWithTooltip, noop, useCrosswalkColor, useCrosswalkHighlight} from '@reltio/components';\nimport {groupBy, prop, pipe, map, head, last, max, min} from 'ramda';\nimport UnmergeIcon from '../../icons/notMatch.svg';\nimport {useStyles} from './styles';\n\ntype Props = {\n nodeWidth: number;\n node: SankeyNode;\n highlightEnabled: boolean;\n isColored: boolean;\n disableUnmerge: boolean;\n onUnmerge: (contributorUri: string) => void;\n isDragging: boolean;\n};\n\nexport const Node = ({node, nodeWidth, highlightEnabled, isColored, disableUnmerge, onUnmerge, isDragging}: Props) => {\n const styles = useStyles();\n const [labelX, setLabelX] = useState(0);\n const [anchorEl, setAnchorEl] = useState(null);\n const textRef = useRef(null);\n const {\n x,\n y,\n name,\n label,\n targetLinks,\n sourceLinks,\n entity: {crosswalks = [], merges}\n } = node;\n const [firstCrosswalk] = crosswalks;\n const {isDimmed, highlightCrosswalk, removeHighlight} = useCrosswalkHighlight(firstCrosswalk);\n const color = useCrosswalkColor(firstCrosswalk);\n const startNodeHeight = crosswalks?.length\n ? sourceLinks[crosswalks.length - 1].sy + sourceLinks[crosswalks.length - 1].dy\n : 0;\n\n const renderMergeNodes = () => {\n const timeMap = pipe(map(prop('source')), groupBy(prop('time')))(targetLinks);\n\n return merges?.map(({time, user}, index) => {\n const sources = timeMap[time];\n if (!sources) return;\n\n const [start, end] = sources.reduce(\n (acc, {sourceLinks}) => [\n min(head(sourceLinks).ty, acc[0]),\n max(last(sourceLinks).ty + last(sourceLinks).dy, acc[1])\n ],\n [Infinity, 0]\n );\n\n return (\n <MergeTooltip user={user} time={time} key={'node-' + index}>\n <rect\n transform={`translate(0,${start})`}\n height={end - start}\n width={nodeWidth}\n className={styles.node}\n fillOpacity={0.54}\n fill={'#F0F0F0'}\n opacity={highlightEnabled && isDimmed ? 0.38 : 1}\n />\n </MergeTooltip>\n );\n });\n };\n\n const openPopup = (e: MouseEvent<SVGRectElement>) => setAnchorEl(e.currentTarget);\n const closePopup = () => setAnchorEl(null);\n const handleUnmerge = () => {\n onUnmerge(name);\n closePopup();\n };\n\n useEffect(() => {\n const nodeHeight = node.dy;\n const textWidth = textRef?.current?.clientWidth || 0;\n if (nodeHeight < textWidth) setLabelX(nodeHeight / 2 - textWidth / 2);\n }, []);\n\n useEffect(() => {\n if (isDragging && !!anchorEl) closePopup();\n }, [isDragging]);\n\n return (\n <g transform={`translate(${x},${y})`}>\n {name === 'ROOT' ? (\n <text dy={-5} dx={labelX} ref={textRef} className={styles.rootNode}>\n {label || ''}\n </text>\n ) : (\n <>\n <rect\n height={startNodeHeight}\n width={14}\n className={styles.node}\n fill={isColored ? (isDimmed ? 'rgba(0, 0, 0, 0.12)' : color) : '#F0F0F0'}\n key={'node-main'}\n opacity={highlightEnabled && isDimmed ? 0.19 : 1}\n onMouseEnter={() => {\n if (highlightEnabled) highlightCrosswalk();\n }}\n onMouseLeave={() => {\n if (highlightEnabled) removeHighlight();\n }}\n onClick={disableUnmerge ? noop : openPopup}\n cursor={disableUnmerge ? 'default' : 'pointer'}\n data-reltio-id=\"reltio-sankey-chart-node\"\n />\n <Popover\n open={!!anchorEl}\n anchorEl={anchorEl}\n anchorOrigin={{vertical: 'top', horizontal: 'right'}}\n onClose={closePopup}\n classes={{paper: styles.popupContainer}}\n data-reltio-id=\"reltio-unmerge-popup\"\n >\n <SmallIconButtonWithTooltip\n size=\"XS\"\n tooltipTitle={i18n.text('Unmerge')}\n icon={UnmergeIcon}\n onClick={handleUnmerge}\n />\n </Popover>\n {!!targetLinks?.length && renderMergeNodes()}\n </>\n )}\n </g>\n );\n};\n\nexport default Node;\n","import React from 'react';\nimport {useCrosswalkColor, useCrosswalkHighlight} from '@reltio/components';\nimport {SankeyLink} from '../../types/SankeyChartData';\n\ntype Props = {\n link: SankeyLink;\n path: string;\n highlightEnabled: boolean;\n isColored: boolean;\n};\n\nexport const Link = ({link, path, highlightEnabled, isColored}: Props) => {\n const {crosswalk} = link;\n const color = useCrosswalkColor(crosswalk);\n const {isDimmed, highlightCrosswalk, removeHighlight} = useCrosswalkHighlight(crosswalk);\n return (\n <path\n d={path}\n fill={isColored ? (isDimmed ? 'rgba(0, 0, 0, 0.12)' : color) : '#F0F0F0'}\n opacity={highlightEnabled && isDimmed ? 0.19 : 1}\n onMouseEnter={() => {\n if (highlightEnabled) highlightCrosswalk();\n }}\n onMouseLeave={() => {\n if (highlightEnabled) removeHighlight();\n }}\n />\n );\n};\n\nexport default Link;\n","import React, {useMemo, useState, useEffect} from 'react';\nimport useSankey from './useSankey';\nimport Node from './Node';\nimport Link from './Link';\nimport {SankeyData} from '../../types/SankeyChartData';\n\ntype Props = {\n width: number;\n height: number;\n data: SankeyData;\n accentContributors?: boolean;\n disableUnmerge: boolean;\n onUnmerge: (contributorUri: string) => void;\n};\n\nconst SankeyChart = ({width, height, data, accentContributors, onUnmerge, disableUnmerge}: Props) => {\n const [isDragging, setDragging] = useState(false);\n const [isMouseDown, setMouseDown] = useState(false);\n const [previousPageX, setPreviousPageX] = useState(0);\n const [offsetX, setOffsetX] = useState(0);\n const {links, nodes, nodeWidth, path} = useSankey({data, width, height});\n\n useEffect(() => {\n setOffsetX(0);\n setPreviousPageX(0);\n }, [width, height]);\n\n const sankeyNodes = useMemo(\n () =>\n nodes.map((node, index) => (\n <Node\n highlightEnabled={accentContributors}\n isColored={accentContributors}\n node={node}\n nodeWidth={nodeWidth}\n key={`SankeyNode-${index}`}\n disableUnmerge={disableUnmerge}\n onUnmerge={onUnmerge}\n isDragging={isDragging}\n />\n )),\n [nodes, accentContributors, nodeWidth, width, height, isDragging]\n );\n\n const sankeyLinks = useMemo(\n () =>\n links.map((link, index) => (\n <Link\n highlightEnabled={!accentContributors}\n isColored={!accentContributors}\n link={link}\n path={path(link)}\n key={`SankeyLink-${index}`}\n />\n )),\n [accentContributors, links, path]\n );\n\n const extractPositionDelta = (event: React.MouseEvent) => {\n const left = event.pageX;\n const offsetX = left - previousPageX;\n setPreviousPageX(left);\n return offsetX;\n };\n\n const onDown = (event: React.MouseEvent) => {\n event.preventDefault();\n setMouseDown(true);\n extractPositionDelta(event);\n };\n const onMove = (event: React.MouseEvent) => {\n if (!isMouseDown) return;\n setDragging(true);\n const left = extractPositionDelta(event);\n setOffsetX(offsetX + left);\n };\n const onUp = () => {\n setMouseDown(false);\n setDragging(false);\n };\n\n const pointerEvents = isDragging ? 'none' : 'auto';\n const cursor = isDragging ? 'move' : 'auto';\n\n return (\n <svg\n width={width}\n height={height}\n cursor={cursor}\n onMouseDown={onDown}\n onMouseMove={onMove}\n onMouseUp={onUp}\n onMouseLeave={onUp}\n >\n <g transform={`translate(${offsetX},${height - 1}) rotate(-90)`} pointerEvents={pointerEvents}>\n <g>{sankeyLinks}</g>\n <g>{sankeyNodes}</g>\n </g>\n </svg>\n );\n};\n\nexport default SankeyChart;\n","import {chain, concat, curry, evolve, filter, map, pipe, uniq} from 'ramda';\nimport {CrosswalkBase, CrosswalkTree, eqCrosswalks} from '@reltio/mdm-sdk';\nimport {SankeyLink, SankeyNode} from '../../types/SankeyChartData';\n\nconst isCrosswalkDisplayed = curry(\n (displayedCrosswalks: CrosswalkBase[], crosswalk: CrosswalkBase) =>\n !displayedCrosswalks || displayedCrosswalks.some(eqCrosswalks(crosswalk))\n);\n\nconst filterDisplayedCrosswalks = curry((displayedCrosswalks: CrosswalkBase[], tree: CrosswalkTree) => {\n return evolve(\n {\n crosswalks: filter(isCrosswalkDisplayed(displayedCrosswalks)),\n merges: map(\n evolve({\n losers: map(filterDisplayedCrosswalks(displayedCrosswalks))\n })\n )\n },\n tree\n );\n});\n\nconst addCrosswalkUniqueId = (tree: CrosswalkTree) => {\n let count = 1;\n const addIdToSubtree = pipe(\n evolve({crosswalks: map((crosswalk) => ({...crosswalk, uuid: count++}))}),\n evolve({\n merges: map(\n evolve({\n losers: map((loser) => addIdToSubtree(loser))\n })\n )\n })\n );\n return addIdToSubtree(tree);\n};\n\nconst processTree = (tree: CrosswalkTree & {label?: string}) => {\n const nodes: SankeyNode[] = [];\n const links: SankeyLink[] = [];\n\n const processSubTree = (tree, parentIndex, time) => {\n const {crosswalks = [], merges = [], uri = '', label} = tree;\n\n nodes.push({entity: tree, name: uri, time, label});\n const index = nodes.length - 1;\n\n const mergesCrosswalks = pipe(\n chain(({losers, time}) => {\n return pipe(\n filter((loser) => loser.crosswalks?.length || loser.merges?.length),\n chain((loser) => processSubTree(loser, index, time))\n )(losers);\n }),\n concat(crosswalks)\n )(merges);\n\n if (parentIndex != -1)\n mergesCrosswalks.forEach((crosswalk) =>\n links.push({\n source: nodes[index],\n target: nodes[parentIndex],\n value: 10,\n crosswalk\n })\n );\n\n return mergesCrosswalks;\n };\n processSubTree(tree, -1, Date.now());\n\n const linkedNodes = pipe(\n chain(({source, target}) => [source, target]),\n uniq\n )(links);\n\n return {nodes: nodes.filter((node) => linkedNodes.includes(node)), links};\n};\n\nexport const getSankeyData = (\n crosswalkTree: CrosswalkTree,\n entityLabel = '',\n displayedCrosswalks?: CrosswalkBase[]\n) => {\n return pipe(\n filterDisplayedCrosswalks(displayedCrosswalks),\n addCrosswalkUniqueId,\n processTree\n )({uri: 'ROOT', label: entityLabel, crosswalks: [], merges: [{time: Date.now(), losers: [crosswalkTree]}]});\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n graph: {\n padding: '8px 0px',\n boxSizing: 'border-box',\n height: '100%',\n width: '100%'\n }\n}));\n","import React, {memo} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {noop} from '@reltio/components';\nimport SankeyChart from '../SankeyChart/SankeyChart';\nimport {getSankeyData} from './helpers';\nimport {CrosswalkBase, CrosswalkTree} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n crosswalkTree: CrosswalkTree;\n entityLabel?: string;\n visibleCrosswalks?: CrosswalkBase[];\n accentContributors?: boolean;\n disableUnmerge?: boolean;\n onUnmerge?: (contributorUri: string) => void;\n};\n\nconst CrosswalkTreeView = ({\n crosswalkTree,\n entityLabel,\n visibleCrosswalks,\n accentContributors,\n disableUnmerge = false,\n onUnmerge = noop\n}: Props) => {\n const styles = useStyles();\n const sankeyData = getSankeyData(crosswalkTree, entityLabel, visibleCrosswalks);\n\n return (\n <div className={styles.graph} data-reltio-id=\"reltio-crosswalk-tree\">\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleWidth handleHeight>\n {({width = 0, height = 200}: {width: number; height: number}) => (\n <SankeyChart\n width={width}\n height={height}\n data={sankeyData}\n accentContributors={accentContributors}\n disableUnmerge={disableUnmerge}\n onUnmerge={onUnmerge}\n />\n )}\n </ReactResizeDetector>\n </div>\n );\n};\n\nexport default memo(CrosswalkTreeView);\n","import {makeStyles} from '@mui/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 from '@mui/material/Typography';\nimport VisibilityIcon from '@mui/icons-material/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 '@mui/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 '@mui/icons-material/Add';\nimport UnmergeIcon from '../../../icons/notMatch.svg';\nimport UnsubscribeIcon from '@mui/icons-material/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 && !!contributorCrosswalk\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 '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n table: {\n overflowY: 'auto',\n overflowX: 'hidden',\n paddingLeft: '16px',\n paddingRight: '6px'\n },\n tableRow: {\n '& + &': {\n marginTop: '10px'\n },\n margin: 'auto',\n maxWidth: '448px'\n }\n}));\n","import React, {memo, useCallback, useEffect, useMemo, useState} from 'react';\nimport {\n AttributeType,\n checkCanCreateCrosswalk,\n checkCanDeleteCrosswalk,\n checkCanEditCrosswalk,\n Contributor,\n CrosswalkBase,\n Entity,\n TEntityType\n} from '@reltio/mdm-sdk';\nimport {AddCrosswalkEvent, DeleteCrosswalkEvent, EditCrosswalkEvent, noop} from '@reltio/components';\nimport {buildTableRowsData, collectVisibleCrosswalks} from './helpers';\nimport LegendTableRow from './LegendTableRow/LegendTableRow';\nimport {append, assoc, evolve, has, ifElse, includes, pipe, unless, without} from 'ramda';\nimport {UnsubscribeContributorEvent} from '../../types';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n entity: Entity;\n entityType: TEntityType;\n contributors: Contributor[];\n accentContributors?: boolean;\n selectedAttributeTypes?: AttributeType[];\n onChangeVisibleCrosswalks: (visibleCrosswalks: CrosswalkBase[]) => void;\n readOnly?: boolean;\n canUnmerge: boolean;\n disableUnmerge: boolean;\n onAddCrosswalk?: (event: AddCrosswalkEvent) => void;\n onEditCrosswalk?: (event: EditCrosswalkEvent) => void;\n onDeleteCrosswalk?: (event: DeleteCrosswalkEvent) => void;\n onUnmergeContributor?: (contributorUri: string) => void;\n onUnsubscribeContributor?: (event: UnsubscribeContributorEvent & {contributorUri: string}) => void;\n};\n\nconst LegendTable = ({\n accentContributors,\n entity,\n entityType,\n contributors,\n selectedAttributeTypes,\n onChangeVisibleCrosswalks,\n readOnly,\n canUnmerge,\n disableUnmerge,\n onAddCrosswalk = noop,\n onEditCrosswalk = noop,\n onDeleteCrosswalk = noop,\n onUnmergeContributor = noop,\n onUnsubscribeContributor = noop\n}: Props) => {\n const styles = useStyles();\n\n const rowsData = useMemo(\n () => buildTableRowsData(entity, contributors, selectedAttributeTypes),\n [entity, contributors, selectedAttributeTypes]\n );\n const [expandedByContributor, setExpandedByContributor] = useState<{[contributorUri: string]: string[]}>({});\n const visibleCrosswalks = useMemo(\n () => collectVisibleCrosswalks(rowsData, expandedByContributor),\n [rowsData, expandedByContributor]\n );\n useEffect(() => {\n onChangeVisibleCrosswalks(visibleCrosswalks);\n }, [visibleCrosswalks]);\n\n const handleDelete = useCallback(\n (crosswalkId: string) => {\n onDeleteCrosswalk({entityUri: entity?.uri, crosswalkId});\n },\n [entity?.uri, onDeleteCrosswalk]\n );\n\n const handleEdit = useCallback(\n (params: Omit<EditCrosswalkEvent, 'entityUri'>) => {\n onEditCrosswalk({...params, entityUri: entity?.uri});\n },\n [entity?.uri, onEditCrosswalk]\n );\n\n return (\n <div className={styles.table}>\n {rowsData.map(({contributorUri, crosswalksBySources}) => {\n return (\n <LegendTableRow\n key={contributorUri}\n className={styles.tableRow}\n canUnmerge={canUnmerge}\n contributorUri={contributorUri}\n accentContributor={accentContributors}\n crosswalksBySources={crosswalksBySources}\n disableAddCrosswalk={readOnly || !checkCanCreateCrosswalk(entityType)}\n disableEditCrosswalk={readOnly || !checkCanEditCrosswalk(entityType)}\n disableDeleteCrosswalk={readOnly || !checkCanDeleteCrosswalk(entityType)}\n disableUnmergeContributor={disableUnmerge}\n onAdd={(params) => onAddCrosswalk({...params, entity})}\n onDelete={handleDelete}\n onEdit={handleEdit}\n onUnmerge={() => onUnmergeContributor(contributorUri)}\n onUnsubscribeContributor={onUnsubscribeContributor}\n expandedSources={expandedByContributor[contributorUri]}\n onToggleSourceExpanded={(sourceUri: string) => {\n setExpandedByContributor(\n pipe(\n unless(has(contributorUri), assoc(contributorUri, [])),\n evolve({\n [contributorUri]: ifElse(\n includes(sourceUri),\n without([sourceUri]),\n append(sourceUri)\n )\n })\n )\n );\n }}\n />\n );\n })}\n </div>\n );\n};\n\nexport default memo(LegendTable);\n","import {\n AttributeType,\n Contributor,\n Crosswalk,\n Entity,\n eqCrosswalks,\n getRelationCrosswalks,\n isEmptyValue,\n RelationCrosswalk\n} from '@reltio/mdm-sdk';\nimport {chain, filter, map, pipe} from 'ramda';\nimport {CrosswalksByTypes, CrosswalkType, groupCrosswalksByTypesAndSources} from '@reltio/components';\n\ntype TableRow = {\n contributorUri: string;\n crosswalksBySources: {\n source: string;\n crosswalksByTypes: CrosswalksByTypes;\n }[];\n};\n\nexport const buildTableRowsData = (\n entity: Entity,\n contributors: Contributor[],\n selectedAttributeTypes: AttributeType[] = []\n): TableRow[] => {\n const entityCrosswalks: Crosswalk[] = entity.crosswalks || [];\n const relationCrosswalks: RelationCrosswalk[] = getRelationCrosswalks(entity);\n return contributors\n .filter((contributor) => !isEmptyValue(contributor.crosswalks))\n .map(({uri, crosswalks}) => {\n const crosswalksBySources = pipe(\n map((crosswalk) => {\n if (crosswalk.ownerType === 'relation') {\n const relationCrosswalk = relationCrosswalks.find(eqCrosswalks(crosswalk));\n return relationCrosswalk && {ownerType: 'relation', ...relationCrosswalk};\n } else {\n const entityCrosswalk = entityCrosswalks.find(eqCrosswalks(crosswalk));\n return entityCrosswalk && {ownerType: 'entity', ...entityCrosswalk};\n }\n }),\n filter((crosswalk) => !!crosswalk),\n groupCrosswalksByTypesAndSources(entity.type, selectedAttributeTypes)\n )(crosswalks);\n\n return {contributorUri: uri, crosswalksBySources};\n })\n .filter(({crosswalksBySources}) => crosswalksBySources.length > 0);\n};\n\nexport const collectVisibleCrosswalks = (\n rowsData: TableRow[],\n expandedByContributor: {[contributorUri: string]: string[]}\n) => {\n return rowsData.reduce((acc, {contributorUri, crosswalksBySources}) => {\n const visibleCrosswalks = chain(({source, crosswalksByTypes}) => {\n const isExpandedSource = expandedByContributor[contributorUri]?.includes(source);\n return crosswalksByTypes[CrosswalkType.Simple]\n .concat(crosswalksByTypes[CrosswalkType.Empty])\n .concat(isExpandedSource ? crosswalksByTypes[CrosswalkType.Dependent] : []);\n }, crosswalksBySources);\n return acc.concat(visibleCrosswalks);\n }, []);\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((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 '@mui/icons-material/CheckCircle';\nimport InfoIcon from '@mui/icons-material/Info';\nimport {CrosswalksDisplayProvider, noop} from '@reltio/components';\nimport {\n CrosswalkBase,\n CrosswalkTree,\n getCrosswalkColor as getUniqueCrosswalkColor,\n getCrosswalkId\n} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport CrosswalkTreeView from '../CrosswalkTreeView/CrosswalkTreeView';\nimport {useStyles} from './styles';\n\ntype Props = {\n coloredCrosswalks: string[];\n crosswalkTree: CrosswalkTree;\n selected: boolean;\n title: string;\n onSelect?: () => void;\n};\n\nexport const SelectableTree = ({coloredCrosswalks, crosswalkTree, selected, title, onSelect = noop}: Props) => {\n const styles = useStyles();\n const getCrosswalkColor = useCallback(\n (crosswalk: CrosswalkBase) => {\n return coloredCrosswalks.includes(crosswalk.uri)\n ? getUniqueCrosswalkColor(getCrosswalkId(crosswalk))\n : '#CACCD1';\n },\n [coloredCrosswalks]\n );\n return (\n <CrosswalksDisplayProvider getCrosswalkColor={getCrosswalkColor}>\n <div className={styles.container} onClick={onSelect}>\n <span className={styles.title}>\n {title} <InfoIcon className={styles.hintIcon} />\n </span>\n <div className={classnames(styles.graph, {[`${styles.selectedTree}`]: selected})}>\n {selected && <CheckCircleIcon className={styles.checkedIcon} />}\n <CrosswalkTreeView crosswalkTree={crosswalkTree} disableUnmerge={true} />\n </div>\n </div>\n </CrosswalksDisplayProvider>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((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 from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Typography from '@mui/material/Typography';\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} from '@mui/styles';\n\nexport const useStyles = makeStyles((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 from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Typography from '@mui/material/Typography';\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(\n () => 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} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n height: '100%'\n },\n modeSwitcher: {\n backgroundColor: theme.palette.background.paper,\n marginTop: '8px'\n },\n infoIcon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n hint: {\n color: theme.palette.text.secondary,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'flex-start',\n margin: '5px 12px 10px 12px'\n },\n hintText: {\n fontSize: '12px',\n lineHeight: '16px'\n },\n crosswalksList: {\n height: '100%',\n width: 'calc(100% - 24px)',\n margin: '8px 12px',\n background: theme.palette.divider,\n opacity: 0.2\n },\n pane: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n },\n resizablePanesWrapper: {\n flexGrow: 1,\n width: '100%'\n }\n}));\n","import React, {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport InfoIcon from '@mui/icons-material/Info';\nimport i18n from 'ui-i18n';\nimport {isEmpty} from 'ramda';\nimport mdmModule from '@reltio/mdm-module';\nimport {\n AttributeType,\n calculateCrosswalkTreeDeep,\n checkMetadataPermission,\n Contributor,\n Crosswalk,\n CrosswalkBase,\n CrosswalkTree,\n DataTenant,\n Entity,\n getEntityType,\n getLabel,\n Metadata,\n MetadataPermissions,\n TEntityType,\n UnmergeOperation\n} from '@reltio/mdm-sdk';\nimport {\n AddCrosswalkEvent,\n DeleteCrosswalkEvent,\n EditCrosswalkEvent,\n ModeSwitcher,\n noop,\n ResizablePanes\n} from '@reltio/components';\nimport {LegendMode, UnmergeContributorEvent, UnsubscribeContributorEvent} from '../../types';\nimport CrosswalkTreeView from '../CrosswalkTreeView/CrosswalkTreeView';\nimport LegendTable from '../LegendTable/LegendTable';\nimport {UnmergeDialog} from '../UnmergeDialog/UnmergeDialog';\nimport {UnsubscribeDialog} from '../UnsubscribeDialog/UnsubscribeDialog';\n\nimport {useStyles} from './styles';\n\nexport const DEFAULT_LINK_HEIGHT = 60;\nexport const MIN_PANE1_SIZE = 170;\nexport const MIN_PANE2_SIZE = 170;\n\ntype Props = {\n activeMode: LegendMode;\n onChangeMode: (mode: LegendMode) => void;\n crosswalkTree: CrosswalkTree;\n entity: Entity;\n contributors: Contributor[];\n selectedAttributeTypes?: AttributeType[];\n readOnly?: boolean;\n onAddCrosswalk?: (event: AddCrosswalkEvent) => void;\n onEditCrosswalk?: (event: EditCrosswalkEvent) => void;\n onDeleteCrosswalk?: (event: DeleteCrosswalkEvent) => void;\n onUnmergeContributor?: (event: UnmergeContributorEvent) => void;\n onUnsubscribeContributor?: (event: UnsubscribeContributorEvent) => void;\n};\n\nconst LegendView = ({\n activeMode,\n contributors,\n crosswalkTree,\n entity,\n onChangeMode,\n onUnmergeContributor = noop,\n onUnsubscribeContributor = noop,\n ...tableProps\n}: Props) => {\n const styles = useStyles();\n\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityType: TEntityType = getEntityType(metadata, entity?.type);\n\n const viewRef = useRef<HTMLDivElement>();\n const [paneSize, setPaneSize] = useState(MIN_PANE1_SIZE);\n const handlePaneSizeChange = useCallback(({percentageSize}) => setPaneSize(percentageSize), []);\n\n const [contributorForUnmerge, setContributorForUnmerge] = useState<string>();\n const [unsubscribeInfo, setUnsubscribeInfo] = useState<{\n contributorUri: string;\n dataTenant: DataTenant;\n crosswalk: Crosswalk;\n }>();\n\n const crosswalkTreeDeep = useMemo(() => calculateCrosswalkTreeDeep(crosswalkTree), [crosswalkTree]);\n const canUnmerge = crosswalkTreeDeep > 1;\n\n useEffect(() => {\n const height = Math.max(MIN_PANE1_SIZE, crosswalkTreeDeep * DEFAULT_LINK_HEIGHT);\n const maxPaneHeight = viewRef.current?.clientHeight - MIN_PANE2_SIZE;\n setPaneSize(Math.min(maxPaneHeight, height));\n }, [crosswalkTreeDeep]);\n\n const modes = useMemo(\n () => [\n {\n id: LegendMode.Crosswalk,\n title: i18n.text('Crosswalk')\n },\n {\n id: LegendMode.Source,\n title: i18n.text('Source')\n },\n {\n id: LegendMode.Contributor,\n title: i18n.text('Contributor')\n }\n ],\n []\n );\n\n const [visibleCrosswalks, setVisibleCrosswalks] = useState<CrosswalkBase[]>();\n const accentContributors = activeMode === LegendMode.Contributor;\n const disableUnmerge = tableProps.readOnly || !checkMetadataPermission(MetadataPermissions.UNMERGE, entityType);\n\n return (\n <div className={styles.root} ref={viewRef}>\n {contributorForUnmerge && (\n <UnmergeDialog\n canUnmerge={canUnmerge}\n onClose={() => setContributorForUnmerge(null)}\n onUnmergeContributor={(operationType: UnmergeOperation) => {\n onUnmergeContributor({\n entityUri: entity.uri,\n contributorUri: contributorForUnmerge,\n operationType\n });\n }}\n crosswalkTree={crosswalkTree}\n contributor={contributors.find(({uri}) => uri === contributorForUnmerge)}\n />\n )}\n {unsubscribeInfo && (\n <UnsubscribeDialog\n canUnsubscribe={canUnmerge}\n onClose={() => setUnsubscribeInfo(null)}\n onUnsubscribeContributor={() =>\n onUnsubscribeContributor({\n dataTenant: unsubscribeInfo.dataTenant,\n crosswalk: unsubscribeInfo.crosswalk\n })\n }\n crosswalkTree={crosswalkTree}\n contributor={contributors.find(({uri}) => uri === unsubscribeInfo.contributorUri)}\n />\n )}\n <ModeSwitcher<LegendMode>\n modes={modes}\n modeId={activeMode}\n className={styles.modeSwitcher}\n onChange={onChangeMode}\n />\n <ResizablePanes\n className={styles.resizablePanesWrapper}\n orientation=\"horizontal\"\n size={paneSize}\n minSize={MIN_PANE1_SIZE}\n maxSize={-MIN_PANE2_SIZE}\n allowResize\n onChange={handlePaneSizeChange}\n >\n <div className={styles.pane}>\n {crosswalkTree && !isEmpty(visibleCrosswalks) && (\n <CrosswalkTreeView\n entityLabel={getLabel(entity?.label)}\n crosswalkTree={crosswalkTree}\n visibleCrosswalks={visibleCrosswalks}\n accentContributors={accentContributors}\n disableUnmerge={disableUnmerge || !canUnmerge}\n onUnmerge={setContributorForUnmerge}\n />\n )}\n </div>\n <div className={styles.pane}>\n <div className={styles.hint}>\n <InfoIcon className={styles.infoIcon} />\n <span className={styles.hintText}>\n {i18n.text('You can drag a crosswalk to add values to attributes swimlanes')}\n </span>\n </div>\n {entity && (\n <LegendTable\n onUnmergeContributor={setContributorForUnmerge}\n onUnsubscribeContributor={setUnsubscribeInfo}\n accentContributors={accentContributors}\n contributors={contributors}\n entity={entity}\n entityType={entityType}\n onChangeVisibleCrosswalks={setVisibleCrosswalks}\n canUnmerge={canUnmerge}\n disableUnmerge={disableUnmerge}\n {...tableProps}\n />\n )}\n </div>\n </ResizablePanes>\n </div>\n );\n};\n\nexport default memo(LegendView);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg4041339336a\",\n masktype: \"alpha\",\n maskUnits: \"userSpaceOnUse\",\n x: \"2\",\n y: \"3\",\n width: \"19\",\n height: \"17\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2.5 5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S4.83 6.5 4 6.5 2.5 5.83 2.5 5zM21 20H8v-2h13v2zM8 10h13V8H8v2zm0-4V4h13v2H8zm0 10h13v-2H8v2zm-2.5.5v-3h-3v3h3z\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg4041339336a)\"\n}, React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n d: \"M0 0h24v24H0z\"\n}))));","import {ErrorPopup} from '@reltio/components';\nimport i18n from 'ui-i18n';\nimport {getRequestErrorMessage} from '@reltio/mdm-sdk';\n\nexport const showErrorMessage = (error: unknown) => {\n console.warn(error);\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 '@mui/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 '@mui/styles';\n\nexport const useStyles = makeStyles({\n snackbarMessage: {\n display: 'flex',\n alignItems: 'center'\n },\n snackbarIcon: {\n paddingRight: 16\n }\n});\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Entity, getLabel} from '@reltio/mdm-sdk';\nimport {UrlGeneratorsContext} from '@reltio/components';\nimport Typography from '@mui/material/Typography';\nimport Link from '@mui/material/Link';\nimport InfoIcon from '@mui/icons-material/Info';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n entity: Entity;\n message: string;\n};\n\nconst TreeActionSnackbar = ({entity, message}: Props) => {\n const styles = useStyles();\n const uiPath = useSelector(mdmModule.selectors.getUIPath);\n const {generateEntityUrl} = useContext(UrlGeneratorsContext);\n const entityLink = generateEntityUrl({uiPath, uri: entity.uri});\n\n return (\n <div className={styles.snackbarMessage}>\n <InfoIcon className={styles.snackbarIcon} />\n <Typography>\n {getLabel(entity.label)}{' '}\n <Link href={entityLink} target=\"_blank\" underline=\"hover\">\n {i18n.text('lookup profile')}\n </Link>{' '}\n {message}\n </Typography>\n </div>\n );\n};\n\nexport default TreeActionSnackbar;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n paddingTop: '14px',\n paddingBottom: '13px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.05)',\n whiteSpace: 'normal',\n '&:last-child': {\n borderBottom: 'none'\n }\n },\n label: {\n marginBottom: '2px',\n fontSize: '16px',\n lineHeight: '24px',\n color: theme.palette.text.primary\n },\n description: {\n fontSize: '13px',\n lineHeight: '15px',\n color: theme.palette.text.secondary\n }\n}));\n","import React from 'react';\nimport {SurvivorshipGroupType} from '@reltio/mdm-sdk';\nimport MenuItem from '@mui/material/MenuItem';\nimport Typography from '@mui/material/Typography';\nimport {useStyles} from './styles';\n\ntype MenuItemProps = React.ComponentPropsWithoutRef<typeof MenuItem>;\n\ntype Props = {\n innerRef: React.Ref<HTMLLIElement>;\n innerProps: MenuItemProps;\n data: SurvivorshipGroupType;\n};\n\nexport const RulesetOption = ({innerRef, innerProps, data}: Props) => {\n const styles = useStyles();\n const {label, description} = data;\n\n return (\n <MenuItem className={styles.root} ref={innerRef} {...innerProps}>\n <Typography className={styles.label}>{label}</Typography>\n {description && <Typography className={styles.description}>{description}</Typography>}\n </MenuItem>\n );\n};\n","import React from 'react';\nimport {MenuListComponentProps} from 'react-select';\n\nexport const RulesetsMenuList = <OptionType, IsMulti extends boolean>(\n props: MenuListComponentProps<OptionType, IsMulti>\n) => {\n const {innerRef, getStyles, children} = props;\n const styles = {...getStyles('menuList', props), maxHeight: '500px', padding: 0};\n return (\n <div ref={innerRef} style={styles}>\n {children}\n </div>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n width: '280px'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe, propEq, prop} from 'ramda';\nimport {DropDownSelector} from '@reltio/components';\nimport {getLabel, SurvivorshipGroupType} from '@reltio/mdm-sdk';\nimport {RulesetOption} from './RulesetOption/RulesetOption';\nimport {RulesetsMenuList} from './RulesetsMenuList/RulesetsMenuList';\nimport {useStyles} from './styles';\n\ntype Props = {\n survivorshipGroups: SurvivorshipGroupType[];\n currentSurvivorshipGroupUri: string;\n onChange: (uri: string) => void;\n};\n\nexport const RulesetsSelector = ({survivorshipGroups, currentSurvivorshipGroupUri, onChange}: Props) => {\n const styles = useStyles();\n const options = survivorshipGroups.map((group) => ({...group, label: getLabel(group.label)}));\n const value = options.find(propEq('uri', currentSurvivorshipGroupUri));\n return (\n <DropDownSelector\n height={40}\n className={styles.root}\n components={{Option: RulesetOption, MenuList: RulesetsMenuList}}\n label={i18n.text('Rulesets')}\n options={options}\n value={value}\n onChange={pipe(prop('uri'), onChange)}\n />\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n sourcesView: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflowX: 'hidden',\n overflowY: 'auto',\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\n display: 'flex'\n },\n '@global div[role=tooltip]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n '@global div[role=presentation]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n resizablePanesWrapper: {\n flexGrow: 1,\n height: '100%'\n },\n pane: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n },\n headerDivider: {\n marginLeft: '16px',\n marginRight: '8px',\n height: '32px',\n borderColor: 'rgba(0, 0, 0, 0.12)'\n },\n attributesTable: {\n backgroundColor: '#fff'\n }\n});\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport {Dispatch} from 'redux';\nimport {connect} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {equals, pipe, pluck, propEq, reject} from 'ramda';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n ApiError,\n ApiErrorCode,\n AttributeType,\n collectContributorsFromTree,\n Entity,\n getEntityType,\n HistoryEvent,\n Metadata,\n SourcesPerspectiveConfig\n} from '@reltio/mdm-sdk';\nimport {\n AttributesTable,\n CrosswalkDragLayer,\n CrosswalksDisplayProvider,\n ExpandedAttributesProvider,\n HistoryHeader,\n HistoryPanelEmptyState,\n HistoryView,\n ProfileResizablePanes,\n ScreenProfileBand,\n useDidUpdateEffect,\n useHistory,\n useHistoryEnabled,\n useHistorySlice,\n useModifiedEntity,\n useSavedState,\n useSnackbar\n} from '@reltio/components';\nimport Typography from '@mui/material/Typography';\nimport Divider from '@mui/material/Divider';\nimport HistoryIcon from '@mui/icons-material/History';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\nimport LegendView from '../LegendView/LegendView';\nimport {LegendMode, SourcesSavedState} from '../../types';\nimport {useCrosswalkTree} from '../../hooks/useCrosswalkTree';\nimport LegendIcon from './icons/LegendIcon.svg';\nimport {showErrorMessage} from '../../services/errors';\nimport {useCrosswalkTreeActions} from '../../hooks/useCrosswalkTreeActions';\nimport {useCrosswalksDisplay} from '../../hooks/useCrosswalksDisplay';\nimport {useEntityWithSurvivorshipGroups} from '../../hooks/useEntityWithSurvivorshipGroups';\nimport HTML5Backend from 'react-dnd-html5-backend';\nimport {DndProvider} from 'react-dnd';\nimport EmptyState from '../EmptyState/EmptyState';\nimport TreeActionSnackbar from '../TreeActionSnackbar/TreeActionSnackbar';\nimport {RulesetsSelector} from '../RulesestsSelector/RulesestsSelector';\nimport {useStyles} from './styles';\n\nconst perspectiveId = 'source';\n\ntype Props = {\n config: SourcesPerspectiveConfig;\n entity: Entity;\n metadata: Metadata;\n saveState: (state: SourcesSavedState) => void;\n getSavedState: () => Promise<SourcesSavedState>;\n dispatch: Dispatch;\n historyEvent: HistoryEvent;\n};\n\nenum ActivePanel {\n Legend,\n History\n}\n\nconst SourcesView = ({\n config,\n entity: defaultEntity,\n metadata,\n getSavedState,\n saveState,\n dispatch,\n historyEvent\n}: Props) => {\n const styles = useStyles();\n const [activeMode, setActiveMode] = useState(LegendMode.Crosswalk);\n const [isCrosswalkTreeLoading, setIsCrosswalkTreeLoading] = useState(false);\n const [areChangesApplying, setAreChangesApplying] = useState(false);\n const onChangesApplyingStart = useCallback(() => setAreChangesApplying(true), []);\n const onChangesApplyingFinish = useCallback(() => setAreChangesApplying(false), []);\n\n const {\n survivorshipGroups,\n currentSurvivorshipGroupUri,\n onChangeSurvivorshipGroup,\n entity,\n isDefaultSurvivorshipGroupUri,\n isLoading: isEntityLoading\n } = useEntityWithSurvivorshipGroups(defaultEntity);\n\n const {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({\n perspectiveId,\n entity,\n historyButtonId: ActivePanel.History\n });\n\n const persistedEntity = isProfilePersisted ? entity : null;\n\n const entityUri = persistedEntity?.uri;\n const entityType = getEntityType(metadata, entity?.type);\n\n const {historySlice} = useHistorySlice({entity: persistedEntity, historyEvent});\n\n const [selectedAttrTypes, setSelectedAttrTypes] = useState<AttributeType[]>();\n useDidUpdateEffect(() => {\n setSelectedAttrTypes(undefined);\n }, [historySlice]);\n useDidUpdateEffect(() => {\n setSelectedAttrTypes(undefined);\n }, [entityUri]);\n\n const {SnackbarRenderer, showSnackbarMessage} = useSnackbar({\n anchorOrigin: {vertical: 'top', horizontal: 'center'},\n showDismiss: true\n });\n const {isLoaded, savedState} = useSavedState<SourcesSavedState>(getSavedState);\n const [visibleColumns, setVisibleColumns] = useState<string[]>();\n useEffect(() => {\n if (isLoaded) {\n setVisibleColumns(savedState.visibleColumns);\n }\n }, [isLoaded]); // eslint-disable-line\n useEffect(() => {\n const hasVisibleColumnsChanged = !equals(visibleColumns, savedState.visibleColumns);\n if (isLoaded && hasVisibleColumnsChanged) {\n saveState({visibleColumns});\n }\n }, [visibleColumns]); // eslint-disable-line\n\n const onCrosswalkTreeLoaded = useCallback(() => {\n setIsCrosswalkTreeLoading(false);\n }, []);\n\n const {crosswalkTree, reload: reloadCrosswalkTree} = useCrosswalkTree({\n entityUri: historySlice?.aEntity.uri || entityUri,\n onSuccess: onCrosswalkTreeLoaded\n });\n const contributors = useMemo(() => collectContributorsFromTree(crosswalkTree), [crosswalkTree]);\n\n const refreshEntity = useCallback(() => {\n entityUri &&\n dispatch(\n profile.entity.actions.loadEntity({\n viewId: config.id,\n uri: entityUri\n })\n );\n }, [entityUri, config, dispatch]);\n\n const refreshData = useCallback(pipe(refreshEntity, reloadCrosswalkTree), [refreshEntity, reloadCrosswalkTree]);\n\n const {\n modifiedEntity,\n crosswalksMap,\n newlyCreatedAttributes,\n onDeleteAttribute,\n onPinAttribute,\n onIgnoreAttribute,\n onEditAttribute,\n onAddAttribute,\n emptyTempAttributeUris\n } = useModifiedEntity({\n entity: historySlice?.aEntity || persistedEntity,\n onLoad: onChangesApplyingStart,\n onModify: useCallback(() => {\n onChangesApplyingFinish();\n refreshData();\n }, [onChangesApplyingFinish, refreshData]),\n onError: useCallback(\n (e) => {\n onChangesApplyingFinish();\n showErrorMessage(e);\n },\n [onChangesApplyingFinish]\n )\n });\n\n const displayProps = useCrosswalksDisplay({activeMode, contributors, entity});\n const onShowMessage = useCallback((message: string, entity?: Entity) => {\n showSnackbarMessage(entity ? <TreeActionSnackbar entity={entity} message={message} /> : message);\n }, []);\n\n const {addCrosswalk, deleteCrosswalk, editCrosswalk, unmergeContributor, unsubscribeContributor} =\n useCrosswalkTreeActions({\n onShowMessage,\n onSuccess: refreshData,\n onError: useCallback(\n (error: ApiError) => {\n showErrorMessage(error);\n if (error.errorCode === ApiErrorCode.CROSSWALK_NOT_FOUND) {\n refreshData();\n }\n },\n [refreshData]\n ),\n onLoad: useCallback(() => setIsCrosswalkTreeLoading(true), [])\n });\n\n const {\n historyFilter,\n onApplyFilter,\n isLoading: isHistoryLoading,\n historicUris,\n historyWithTotal,\n canLoadMore,\n onLoadMore\n } = useHistory({entity: persistedEntity, enabled: isHistoryEnabled});\n\n const tabs = [\n {\n buttonProps: {\n id: ActivePanel.Legend,\n icon: LegendIcon,\n tooltipTitle: i18n.text('Legend')\n },\n title: <Typography variant=\"h6\">{i18n.text('Legend')}</Typography>,\n content: (\n <LegendView\n activeMode={activeMode}\n onChangeMode={setActiveMode}\n entity={historySlice?.aEntity || persistedEntity}\n crosswalkTree={crosswalkTree}\n contributors={contributors}\n selectedAttributeTypes={selectedAttrTypes}\n readOnly={!!historySlice || isCrosswalkTreeLoading}\n onAddCrosswalk={addCrosswalk}\n onUnmergeContributor={unmergeContributor}\n onUnsubscribeContributor={unsubscribeContributor}\n onEditCrosswalk={editCrosswalk}\n onDeleteCrosswalk={deleteCrosswalk}\n />\n )\n },\n {\n buttonProps: {\n id: ActivePanel.History,\n icon: HistoryIcon,\n tooltipTitle: i18n.text('History')\n },\n title: (\n <HistoryHeader\n total={(historicUris?.length || 0) + 1}\n entityType={entityType}\n filter={historyFilter}\n onApplyFilter={onApplyFilter}\n />\n ),\n content: isProfilePersisted ? (\n <HistoryView\n isLoading={isHistoryLoading}\n historyWithTotal={historyWithTotal}\n contributorsUris={historicUris}\n entityUri={entityUri}\n historyEvent={historyEvent}\n onLoadMore={onLoadMore}\n canLoadMore={canLoadMore}\n />\n ) : (\n <HistoryPanelEmptyState />\n )\n }\n ];\n const additionalHeaderItems = (\n <>\n <RulesetsSelector\n survivorshipGroups={survivorshipGroups}\n currentSurvivorshipGroupUri={currentSurvivorshipGroupUri}\n onChange={onChangeSurvivorshipGroup}\n />\n <Divider className={styles.headerDivider} orientation=\"vertical\" />\n </>\n );\n\n return (\n <div className={styles.sourcesView}>\n <CrosswalksDisplayProvider {...displayProps}>\n <DndProvider backend={HTML5Backend}>\n <CrosswalkDragLayer />\n <ProfileResizablePanes\n perspectiveId={perspectiveId}\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(tabs)}\n >\n <>\n <ScreenProfileBand entity={entity} historySlice={historySlice} />\n {isProfilePersisted ? (\n <ExpandedAttributesProvider attributeUris={newlyCreatedAttributes}>\n <AttributesTable\n className={styles.attributesTable}\n isLoading={isEntityLoading || areChangesApplying}\n visibleColumns={visibleColumns}\n onChangeVisibleColumns={setVisibleColumns}\n entity={modifiedEntity}\n crosswalksMap={crosswalksMap}\n selectedAttributeTypes={selectedAttrTypes}\n onSelectAttributeTypes={setSelectedAttrTypes}\n readOnly={!!historySlice || !isDefaultSurvivorshipGroupUri}\n onDelete={onDeleteAttribute}\n onPin={onPinAttribute}\n onIgnore={onIgnoreAttribute}\n onEdit={onEditAttribute}\n onAdd={onAddAttribute}\n emptyTempAttributeUris={emptyTempAttributeUris}\n additionalHeaderItems={additionalHeaderItems}\n activeSurvivorshipGroupUri={currentSurvivorshipGroupUri}\n />\n </ExpandedAttributesProvider>\n ) : (\n <EmptyState />\n )}\n </>\n <RightSidePanel tabs={tabs} />\n </ProfileResizablePanes>\n </DndProvider>\n </CrosswalksDisplayProvider>\n <SnackbarRenderer />\n </div>\n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n entity: mdmModule.selectors.getEntity(state),\n metadata: mdmModule.selectors.getMetadata(state),\n historyEvent: mdmModule.selectors.getHistoryEvent(state)\n };\n};\n\nexport default connect(mapStateToProps)(SourcesView);\n","import {useCallback, useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {pipe, propOr, find, propEq, prop} from 'ramda';\nimport {getEntityType, getEntityBySurvivorshipGroupUri, Entity} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {useSafePromise} from '@reltio/components';\n\nexport const useEntityWithSurvivorshipGroups = (defaultEntity: Entity) => {\n const entityTypeUri = defaultEntity?.type;\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const survivorshipGroups = pipe(getEntityType(metadata), propOr([], 'survivorshipGroups'))(entityTypeUri);\n const defaultSurvivorshipGroupUri = pipe(find(propEq('default', true)), prop('uri'))(survivorshipGroups);\n const [currentSurvivorshipGroupUri, setCurrentSurvivorshipGroupUri] = useState(null);\n const [entity, setEntity] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const safePromise = useSafePromise();\n\n useEffect(() => {\n if (defaultEntity) {\n setEntity(defaultEntity);\n setCurrentSurvivorshipGroupUri(defaultSurvivorshipGroupUri);\n }\n }, [defaultEntity, defaultSurvivorshipGroupUri]);\n\n const onChangeSurvivorshipGroup = useCallback(\n (survivorshipGroupUri: string) => {\n setCurrentSurvivorshipGroupUri(survivorshipGroupUri);\n const isDefaultSurvivorshipGroupUri = defaultSurvivorshipGroupUri === survivorshipGroupUri;\n if (!isDefaultSurvivorshipGroupUri) {\n setIsLoading(true);\n safePromise(getEntityBySurvivorshipGroupUri(entity.uri, survivorshipGroupUri))\n .then(setEntity)\n .finally(() => setIsLoading(false));\n } else {\n setEntity(defaultEntity);\n }\n },\n [defaultEntity, defaultSurvivorshipGroupUri, entity, safePromise]\n );\n\n const isDefaultSurvivorshipGroupUri = defaultSurvivorshipGroupUri === currentSurvivorshipGroupUri;\n\n return {\n survivorshipGroups,\n currentSurvivorshipGroupUri,\n onChangeSurvivorshipGroup,\n entity,\n isLoading,\n isDefaultSurvivorshipGroupUri\n };\n};\n","import {useCallback, useEffect, useState} from 'react';\nimport {getCrosswalkTree, CrosswalkTree} from '@reltio/mdm-sdk';\nimport {noop, useSafePromise} from '@reltio/components';\n\ntype Props = {\n entityUri?: string;\n onSuccess?: () => void;\n};\n\nexport const useCrosswalkTree = ({entityUri, onSuccess = noop}: Props) => {\n const [crosswalkTree, setCrosswalkTree] = useState<CrosswalkTree>(null);\n const safePromise = useSafePromise();\n\n const onError = (e) => {\n console.warn('Failed to load crosswalk tree', e);\n setCrosswalkTree(null);\n };\n\n const loadData = useCallback(() => {\n if (entityUri) {\n safePromise(getCrosswalkTree({entityUri}))\n .then((results) => {\n setCrosswalkTree(results);\n })\n .catch(onError)\n .finally(onSuccess);\n } else {\n setCrosswalkTree(null);\n onSuccess();\n }\n }, [entityUri, onSuccess]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n return {crosswalkTree, reload: loadData};\n};\n","import {useCallback, useEffect, useMemo, useState, useRef} from 'react';\nimport {any, concat} from 'ramda';\nimport {LegendMode} from '../types';\nimport {\n Contributor,\n CrosswalkBase,\n debounce,\n Entity,\n eqCrosswalks,\n findContributorForCrosswalk,\n getContributorColor,\n getCrosswalkColor,\n getCrosswalkId,\n getSourceColor\n} from '@reltio/mdm-sdk';\n\ntype Props = {\n activeMode: LegendMode;\n contributors: Contributor[];\n entity: Entity;\n};\n\nexport const useCrosswalksDisplay = ({activeMode, contributors, entity}: Props) => {\n const getCrosswalkColorForActiveMode = useCallback(\n (crosswalk: CrosswalkBase) => {\n switch (activeMode) {\n case LegendMode.Source:\n return getSourceColor(crosswalk.type);\n case LegendMode.Contributor:\n return getContributorColor(findContributorForCrosswalk(contributors, crosswalk)?.uri || '');\n case LegendMode.Crosswalk:\n return getCrosswalkColor(getCrosswalkId(crosswalk));\n }\n },\n [activeMode, contributors]\n );\n const [highlightedCrosswalks, setHighlightedCrosswalks] = useState<CrosswalkBase[]>([]);\n const highlightedCrosswalksCache = useRef([]);\n const applyHighlightedCrosswalks = useCallback(\n debounce(() => {\n setHighlightedCrosswalks([...highlightedCrosswalksCache.current]);\n }, 50),\n []\n );\n const cacheHighlightedCrosswalks = useCallback(\n (arr) => {\n highlightedCrosswalksCache.current = arr;\n applyHighlightedCrosswalks(arr);\n },\n [applyHighlightedCrosswalks]\n );\n\n const setCrosswalkHighlighted = useCallback(\n (crosswalk: CrosswalkBase, highlighted: boolean) => {\n if (!crosswalk) return;\n if (highlighted) {\n if (activeMode === LegendMode.Contributor) {\n const contributor = findContributorForCrosswalk(contributors, crosswalk);\n cacheHighlightedCrosswalks([crosswalk, ...(contributor?.crosswalks || [])]);\n } else {\n cacheHighlightedCrosswalks([crosswalk]);\n }\n } else {\n cacheHighlightedCrosswalks([]);\n }\n },\n [activeMode, cacheHighlightedCrosswalks, contributors]\n );\n\n const [focusedCrosswalks, setFocusedCrosswalks] = useState<CrosswalkBase[]>([]);\n const calculateFocusedCrosswalks = useCallback(\n (prev: CrosswalkBase[], next: CrosswalkBase[]) =>\n concat(\n prev.filter((prevCrosswalk) => !any(eqCrosswalks(prevCrosswalk), next)),\n next.filter((nextCrosswalk) => !any(eqCrosswalks(nextCrosswalk), prev))\n ),\n []\n );\n const toggleCrosswalkFocus = useCallback(\n (crosswalk: CrosswalkBase) => {\n if (!crosswalk) return;\n if (activeMode === LegendMode.Contributor) {\n const contributor = findContributorForCrosswalk(contributors, crosswalk);\n setFocusedCrosswalks((prevValue) =>\n calculateFocusedCrosswalks([crosswalk, ...(contributor?.crosswalks || [])], prevValue)\n );\n } else {\n setFocusedCrosswalks((prevValue) => calculateFocusedCrosswalks([crosswalk], prevValue));\n }\n },\n [activeMode, calculateFocusedCrosswalks, contributors]\n );\n\n useEffect(() => {\n if (focusedCrosswalks.length) {\n setFocusedCrosswalks([]);\n }\n }, [activeMode, entity]);\n\n return {\n getCrosswalkColor: getCrosswalkColorForActiveMode,\n highlightedCrosswalks: useMemo(\n () => [...highlightedCrosswalks, ...focusedCrosswalks],\n [highlightedCrosswalks, focusedCrosswalks]\n ),\n focusedCrosswalks,\n toggleCrosswalkFocus,\n setCrosswalkHighlighted\n };\n};\n","import {useCallback} from 'react';\nimport {useSelector} from 'react-redux';\nimport {andThen, pipe} from 'ramda';\nimport i18n from 'ui-i18n';\nimport mdm from '@reltio/mdm-module';\nimport {\n Entity,\n unmergeContributor as unmergeContributorRequest,\n unsubscribeEntityFromDataTenantEntity\n} from '@reltio/mdm-sdk';\nimport {useCrosswalkActions, noop} from '@reltio/components';\nimport {UnmergeContributorEvent, UnsubscribeContributorEvent} from '../types';\n\ntype Props = {\n onLoad?: () => void;\n onSuccess?: () => void;\n onError?: (error: unknown) => void;\n onShowMessage?: (message: string, entity?: Entity) => void;\n};\n\nexport const useCrosswalkTreeActions = ({\n onLoad = noop,\n onSuccess = noop,\n onError = noop,\n onShowMessage = noop\n}: Props) => {\n const {addCrosswalk, editCrosswalk, deleteCrosswalk} = useCrosswalkActions({onLoad, onSuccess, onError});\n const dtssPath = useSelector(mdm.selectors.getDtssPath);\n const tenant = useSelector(mdm.selectors.getTenant);\n\n const handleAction = useCallback(\n (request: Promise<unknown>) => {\n onLoad();\n request\n .then(() => {\n onSuccess();\n })\n .catch(onError);\n },\n [onLoad, onError, onSuccess]\n );\n\n const unmergeContributor = useCallback(\n (event: UnmergeContributorEvent) =>\n pipe(\n unmergeContributorRequest,\n andThen((response) => {\n onShowMessage(i18n.text('has been unmerged'), response.b);\n return response;\n }),\n handleAction\n )(event),\n [handleAction, onShowMessage]\n );\n\n const unsubscribeContributor = useCallback(\n ({crosswalk, dataTenant}: UnsubscribeContributorEvent) =>\n pipe(\n unsubscribeEntityFromDataTenantEntity,\n andThen((response) => {\n if (!response.successful) throw new Error(i18n.text('Failed to unsubscribe contributor'));\n return response;\n }),\n handleAction\n )({\n dtssPath,\n value: crosswalk.value,\n type: crosswalk.type,\n sourceTable: crosswalk.sourceTable,\n dataTenant: dataTenant.id,\n customerTenant: tenant\n }),\n [handleAction, dtssPath, tenant]\n );\n\n return {\n addCrosswalk,\n editCrosswalk,\n deleteCrosswalk,\n unmergeContributor,\n unsubscribeContributor\n };\n};\n","import React, {useCallback} from 'react';\n\nimport {AdapterMoment} from '@mui/x-date-pickers/AdapterMoment';\nimport createGenerateClassName from '@mui/styles/createGenerateClassName';\nimport StylesProvider from '@mui/styles/StylesProvider';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider';\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 seed: 'srcs'\n});\n\ntype Props = {\n config: SourcesPerspectiveConfig;\n onResize?: (width: number, height: number) => void;\n saveState: (state: SourcesSavedState) => void;\n getSavedState: (clb: (state: SourcesSavedState) => void) => void;\n};\n\nconst SourcesPerspective = ({config, onResize, saveState, getSavedState}: Props) => {\n const getSavedStatePromisified: () => Promise<SourcesSavedState> = useCallback(promisifyCallback(getSavedState), [\n getSavedState\n ]);\n return (\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize?.(Math.floor(width), Math.floor(height))}\n />\n {config && (\n <SourcesView config={config} saveState={saveState} getSavedState={getSavedStatePromisified} />\n )}\n <ErrorPopup />\n </LocalizationProvider>\n </StylesProvider>\n </ViewIdContext.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","styles","metadata","useMdmMetadata","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","menuShouldBlockScroll","captureMenuScroll","display","paddingRight","inputNumber","minWidth","marginRight","inputUnit","periods","interval","unit","onFocus","onNumberChange","getValue","parseInt","newValue","onUnitChange","newUnit","TextField","type","inputProps","min","SimpleDropDownSelector","placeholder","capitalize","getIntervalUnitLabel","map","resizablePanesWrapper","flexGrow","pane","position","top","left","right","bottom","flexDirection","overflow","DEFAULT_R_PANE_SIZE","ProfileResizablePanes","perspectiveId","children","buttonsProps","disabled","defaultTab","perspectiveSettings","updatePerspectiveSettings","usePerspectivesSettings","active","isSidePanelOpen","isNil","handleUpdateSettings","newSetting","toggleActive","newId","resetActive","handlePaneSizeChange","size","ResizablePanes","primary","orientation","minSize","maxSize","allowResize","debounceInterval","cloneElement","onClose","SideButtonsPanel","onButtonClick","activeIndexId","displayName","withMuiSkin","CreatableSelect","innerRef","selectProps","MenuItem","classNames","ref","selected","component","Checkbox","color","ExpandedValueTooltip","propTypes","PropTypes","id","key","onClick","onMouseMove","onMouseOver","tabIndex","isRequired","current","findNearestScrollableElement","element","currentElement","parentElement","scrollHeight","clientHeight","needToScroll","valueLength","prevValuesLength","parentElementWithScroll","getBoundingClientRect","theme","undefined","fontWeight","clearIndicator","padding","spacing","margin","dropdownIndicator","creatable","getOptions","loadingIndicator","componentsProp","classesProp","stylesProp","onChangeProp","onInputChange","onInputChangeProp","reactSelectProps","SelectComponent","AsyncSelect","Select","inputValue","setInputValue","useState","multiSelectClasses","omit","inputId","useRef","values","usePrevious","length","useEffect","timerId","setTimeout","scrollIntoView","clearTimeout","useKeepInputVisible","controlRef","either","path","getControlRef","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","container","group","groupHeading","indicatorsContainer","menuList","multiValueLabel","multiValueRemove","getOptionValue","isSearchable","inputRef","flexShrink","paddingTop","palette","background","paper","boxShadow","alpha","main","content","borderRadius","buttonWrapper","alignItems","text","secondary","iconButtonClasses","buttonProps","SmallIconButton","selectedUsers","tenant","useMdmTenant","servicesPath","useMdmServicesPath","valueToOption","prepareValues","cachedRequest","pluck","getAllUsersForTenant","then","users","filter","username","utils","filterUsers","MenuWithPopper","ActivityTypes","getItemDataType","getActivityType","activity","items","firstItem","removeIgnoredItems","isImplementedItem","isValidActivityType","includes","filteredItems","console","warn","reject","itemsTotal","splitActivityByType","propOr","groupBy","ifElse","stringifyDeltaValue","deltaValue","attributeTypeUri","attributePresentations","attributeType","findAttributeTypeByUri","dataTypeDefinition","getAttrDataTypeDefinition","formatValue","formatDataTypeValue","Object","entries","flatMap","attributeTypeName","deltaValues","makeAttrTypeUri","join","getActivityLabel","transition","inputRoot","dateOptionLabel","localeFormat","moment","longDateFormat","noop","open","setOpen","handleToggle","fullWidth","DataTypes","endAdornment","menuIsOpen","readOnly","Popover","anchorEl","anchorOrigin","vertical","horizontal","transformOrigin","elevation","DateRangePicker","onApply","PerspectivesSettingsContext","React","settings","useContext","useSavedState","getSavedState","isLoaded","setIsLoaded","savedState","setSavedState","_","catch","header","borderBottom","closeButton","RightSidePanel","tabs","icon","CloseIcon","LegendMode","sumValues","links","prop","sum","nodes","sankeyLayout","nodeWidth","smallestNodeMaxHeight","smallestNodeMinHeight","nodePadding","sankey","graph","forEach","node","sourceLinks","targetLinks","link","source","target","computeNodeLinks","Math","max","computeNodeValues","nextNodes","remainingNodes","x","dx","indexOf","w","computeNodeBreadths","nodesByBreadth","toPairs","sort","a","b","nth","ky","Infinity","i","y","dy","initializeNodeDepth","y0","n","y1","last","computeNodeDepths","computeLinkDepths","ty","correctNodesDepth","result","linksByUuid","l","crosswalk","uuid","sourceNodes","this","j","index","resultByUuid","newSources","sizeForNewSources","sy","setNodeWidth","setNodePadding","setSmallestNodeMaxHeight","setSmallestNodeMinHeight","setSize","newSize","update","curvature","d","lastLine","x0","x1","xi","t","x2","x3","appendix","arguments","safeData","safeNodes","getSafeNode","originalNode","safeLinks","shallowCopy","tooltipTitle","lineHeight","letterSpacing","marginBottom","userSelect","tooltipRow","tooltipIcon","stroke","strokeWidth","strokeOpacity","rootNode","transform","popupContainer","boxSizing","user","time","CalendarToday","Person","LightArrowTooltip","placement","_extends","assign","prototype","hasOwnProperty","call","apply","viewBox","version","xmlns","xmlnsXlink","fill","fillRule","xlinkHref","fillOpacity","mask","highlightEnabled","isColored","disableUnmerge","onUnmerge","isDragging","labelX","setLabelX","setAnchorEl","textRef","name","entity","crosswalks","merges","firstCrosswalk","isDimmed","highlightCrosswalk","removeHighlight","useCrosswalkHighlight","useCrosswalkColor","startNodeHeight","closePopup","nodeHeight","textWidth","clientWidth","opacity","onMouseEnter","onMouseLeave","e","currentTarget","cursor","UnmergeIcon","timeMap","sources","start","end","head","renderMergeNodes","accentContributors","setDragging","isMouseDown","setMouseDown","previousPageX","setPreviousPageX","offsetX","setOffsetX","useSankey","sankeyNodes","sankeyLinks","extractPositionDelta","event","pageX","onUp","pointerEvents","onMouseDown","preventDefault","onMouseUp","isCrosswalkDisplayed","curry","displayedCrosswalks","some","eqCrosswalks","filterDisplayedCrosswalks","tree","evolve","losers","addCrosswalkUniqueId","count","addIdToSubtree","loser","processTree","processSubTree","parentIndex","mergesCrosswalks","chain","Date","now","linkedNodes","uniq","memo","crosswalkTree","entityLabel","visibleCrosswalks","sankeyData","getSankeyData","refreshMode","refreshRate","handleWidth","handleHeight","marginLeft","focusedIcon","contributorUri","focusable","contributorActions","onToggleFocus","VisibilityIcon","getLastUriPart","Spacer","show","showForDisabled","contributorColor","border","borderLeft","marginTop","editor","accentContributor","crosswalksBySources","expandedSources","canUnmerge","disableAddCrosswalk","disableEditCrosswalk","disableDeleteCrosswalk","disableUnmergeContributor","onEdit","onDelete","onAdd","onToggleSourceExpanded","onUnsubscribeContributor","getContributorColor","dataTenants","useSelector","mdm","scrollToCrosswalk","useHighlightedCrosswalks","find","flatten","behavior","showEditor","setShowEditor","contributorCrosswalk","CrosswalkType","toggleCrosswalkFocus","useCrosswalkFocus","allContributorCrosswalks","dataTenantForExternalCrosswalk","getDataTenantFromCrosswalks","AddIcon","UnsubscribeIcon","dataTenant","crosswalksByTypes","SourceCrosswalksRow","showCrosswalkColors","crosswalksFocusEnabled","expanded","onToggleExpanded","CrosswalkEditor","table","overflowY","overflowX","tableRow","maxWidth","contributors","selectedAttributeTypes","onChangeVisibleCrosswalks","onAddCrosswalk","onEditCrosswalk","onDeleteCrosswalk","onUnmergeContributor","rowsData","entityCrosswalks","relationCrosswalks","getRelationCrosswalks","contributor","isEmptyValue","ownerType","relationCrosswalk","entityCrosswalk","groupCrosswalksByTypesAndSources","buildTableRowsData","expandedByContributor","setExpandedByContributor","isExpandedSource","collectVisibleCrosswalks","handleDelete","crosswalkId","entityUri","handleEdit","params","checkCanCreateCrosswalk","checkCanEditCrosswalk","checkCanDeleteCrosswalk","sourceUri","unless","has","assoc","without","append","hintIcon","verticalAlign","checkedIcon","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","Button","UnsubscribeDialog","canUnsubscribe","modeSwitcher","infoIcon","hint","alignSelf","hintText","crosswalksList","divider","activeMode","onChangeMode","tableProps","mdmModule","getEntityType","viewRef","paneSize","setPaneSize","percentageSize","contributorForUnmerge","setContributorForUnmerge","unsubscribeInfo","setUnsubscribeInfo","crosswalkTreeDeep","calculateCrosswalkTreeDeep","maxPaneHeight","modes","Crosswalk","Source","Contributor","setVisibleCrosswalks","checkMetadataPermission","MetadataPermissions","operationType","ModeSwitcher","modeId","isEmpty","getLabel","masktype","maskUnits","clipRule","showErrorMessage","error","ErrorPopup","message","getRequestErrorMessage","cx","cy","r","style","maskType","y2","gradientUnits","stopColor","stopOpacity","offset","default","info","snackbarMessage","snackbarIcon","uiPath","generateEntityUrl","UrlGeneratorsContext","entityLink","href","underline","whiteSpace","description","RulesetOption","RulesetsMenuList","getStyles","maxHeight","RulesetsSelector","survivorshipGroups","currentSurvivorshipGroupUri","propEq","DropDownSelector","sourcesView","headerDivider","borderColor","attributesTable","ActivePanel","connect","state","historyEvent","config","defaultEntity","saveState","dispatch","setActiveMode","isCrosswalkTreeLoading","setIsCrosswalkTreeLoading","areChangesApplying","setAreChangesApplying","onChangesApplyingStart","onChangesApplyingFinish","onChangeSurvivorshipGroup","isDefaultSurvivorshipGroupUri","isLoading","isEntityLoading","entityTypeUri","defaultSurvivorshipGroupUri","setCurrentSurvivorshipGroupUri","setEntity","setIsLoading","safePromise","useSafePromise","survivorshipGroupUri","getEntityBySurvivorshipGroupUri","finally","useEntityWithSurvivorshipGroups","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","historyButtonId","History","persistedEntity","historySlice","useHistorySlice","selectedAttrTypes","setSelectedAttrTypes","useDidUpdateEffect","SnackbarRenderer","showSnackbarMessage","useSnackbar","showDismiss","visibleColumns","setVisibleColumns","hasVisibleColumnsChanged","equals","onCrosswalkTreeLoaded","reload","reloadCrosswalkTree","onSuccess","setCrosswalkTree","onError","loadData","getCrosswalkTree","results","useCrosswalkTree","aEntity","collectContributorsFromTree","refreshEntity","profile","viewId","refreshData","modifiedEntity","crosswalksMap","newlyCreatedAttributes","onDeleteAttribute","onPinAttribute","onIgnoreAttribute","onEditAttribute","onAddAttribute","emptyTempAttributeUris","useModifiedEntity","onLoad","onModify","displayProps","getCrosswalkColorForActiveMode","getSourceColor","findContributorForCrosswalk","highlightedCrosswalks","setHighlightedCrosswalks","highlightedCrosswalksCache","applyHighlightedCrosswalks","debounce","cacheHighlightedCrosswalks","arr","setCrosswalkHighlighted","highlighted","focusedCrosswalks","setFocusedCrosswalks","calculateFocusedCrosswalks","prev","next","prevCrosswalk","any","nextCrosswalk","prevValue","useCrosswalksDisplay","onShowMessage","addCrosswalk","deleteCrosswalk","editCrosswalk","unmergeContributor","unsubscribeContributor","useCrosswalkActions","dtssPath","handleAction","request","unmergeContributorRequest","andThen","response","unsubscribeEntityFromDataTenantEntity","successful","Error","sourceTable","customerTenant","useCrosswalkTreeActions","errorCode","ApiErrorCode","historyFilter","onApplyFilter","isHistoryLoading","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","enabled","Legend","LegendIcon","HistoryIcon","HistoryHeader","total","HistoryView","contributorsUris","HistoryPanelEmptyState","additionalHeaderItems","Divider","DndProvider","backend","HTML5Backend","CrosswalkDragLayer","ScreenProfileBand","attributeUris","AttributesTable","onChangeVisibleColumns","onSelectAttributeTypes","onPin","onIgnore","activeSurvivorshipGroupUri","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","seed","onResize","getSavedStatePromisified","promisifyCallback","ViewIdContext","StylesProvider","LocalizationProvider","dateAdapter","AdapterMoment","floor"],"sourceRoot":""}
|