@reltio/remotes 1.4.1302 → 1.4.1304

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/2192.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"2192.js","mappings":"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","sources":["webpack://@reltio/remotes/../components/src/components/ActionButton/styles.ts","webpack://@reltio/remotes/../components/src/components/ActionButton/ActionButton.tsx","webpack://@reltio/remotes/../components/src/components/AutoSizeList/styles.ts","webpack://@reltio/remotes/../components/src/components/AutoSizeList/AutoSizeList.tsx","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTablePagination/styles.js","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTablePagination/BasicTablePagination.js","webpack://@reltio/remotes/../components/src/components/BasicView/styles.js","webpack://@reltio/remotes/../components/src/components/BasicView/BasicView.tsx","webpack://@reltio/remotes/../components/src/components/ConfirmationDialog/styles.ts","webpack://@reltio/remotes/../components/src/components/ConfirmationDialog/ConfirmationDialog.tsx","webpack://@reltio/remotes/../components/src/components/ConnectionEditor/styles.ts","webpack://@reltio/remotes/../components/src/components/ConnectionEditor/ConnectionEditor.tsx","webpack://@reltio/remotes/../components/src/components/ConnectionRelationTypeSelector/ConnectionRelationTypeSelector.js","webpack://@reltio/remotes/../components/src/components/EntityTypeBadge/styles.ts","webpack://@reltio/remotes/../components/src/components/EntityTypeBadge/EntityTypeBadge.tsx","webpack://@reltio/remotes/../components/src/components/EntityTypesSelector/EntityTypesSelector.tsx","webpack://@reltio/remotes/../components/src/components/FacetViewHeader/styles.ts","webpack://@reltio/remotes/../components/src/components/FacetViewHeader/FacetViewHeader.tsx","webpack://@reltio/remotes/../components/src/components/MetadataTypesSelector/ListLabel/styles.ts","webpack://@reltio/remotes/../components/src/components/MetadataTypesSelector/ListLabel/helpers.ts","webpack://@reltio/remotes/../components/src/components/MetadataTypesSelector/ListLabel/ListLabel.tsx","webpack://@reltio/remotes/../components/src/components/MetadataTypesSelector/SelectMetadataTypesList.tsx","webpack://@reltio/remotes/../components/src/components/MetadataTypesSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/MetadataTypesSelector/MetadataTypesSelector.tsx","webpack://@reltio/remotes/../components/src/components/ProfileBand/styles.ts","webpack://@reltio/remotes/../components/src/components/ProfileBand/ProfileBand.tsx","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/styles.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/ProfileBandNavigationWidget.tsx","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/searchProviders/MainSearchProvider.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/searchProviders/GraphSearchProvider.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/searchProviders/SearchProviderFactory.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/hooks/useSearchNavigation.ts","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/ProfileBandNavigation.tsx","webpack://@reltio/remotes/../components/src/components/ProfileBandNavigation/hooks/useSearchNavigationVisibility.ts","webpack://@reltio/remotes/../components/src/components/RelationTypesSelector/RelationTypesSelector.tsx","webpack://@reltio/remotes/../components/src/components/SideIconPanel/styles.ts","webpack://@reltio/remotes/../components/src/components/SideIconPanel/SideButtonsPanel.tsx","webpack://@reltio/remotes/../components/src/components/SidePanel/styles.ts","webpack://@reltio/remotes/../components/src/components/SidePanel/SidePanel.tsx","webpack://@reltio/remotes/../components/src/components/attributes/readMode/AttributesView/styles.ts","webpack://@reltio/remotes/../components/src/components/attributes/readMode/AttributesView/index.ts","webpack://@reltio/remotes/../components/src/components/attributes/readMode/AttributesView/AttributesView.tsx","webpack://@reltio/remotes/../components/src/components/attributes/editMode/AttributesView/styles.ts","webpack://@reltio/remotes/../components/src/components/attributes/editMode/AttributesView/AttributesView.tsx","webpack://@reltio/remotes/../components/src/components/attributes/editMode/AttributesView/index.ts","webpack://@reltio/remotes/../components/src/components/attributes/AttributesView/AttributesView.tsx","webpack://@reltio/remotes/../components/src/components/attributes/AttributesView/index.ts","webpack://@reltio/remotes/../components/src/components/attributes/editMode/RelationTypeSelector/components/styles.js","webpack://@reltio/remotes/../components/src/components/attributes/editMode/RelationTypeSelector/components/RelationOption.js","webpack://@reltio/remotes/../components/src/components/attributes/editMode/RelationTypeSelector/RelationTypeSelector.js","webpack://@reltio/remotes/../components/src/hooks/useEditableConnection.ts","webpack://@reltio/remotes/../components/src/hooks/useRelationTypeSelector.js","webpack://@reltio/remotes/../graph/src/utils/hopsData.ts","webpack://@reltio/remotes/../graph/src/utils/graph.ts","webpack://@reltio/remotes/../graph/src/utils/processResponseToGraph.ts","webpack://@reltio/remotes/../graph/src/hooks/useGraphLoader.ts","webpack://@reltio/remotes/../graph/src/hooks/useSelectedEntity.ts","webpack://@reltio/remotes/../graph/src/constants/index.ts","webpack://@reltio/remotes/../graph/src/hooks/useRelationshipTable.ts","webpack://@reltio/remotes/../graph/src/hooks/useRelationshipTableFilters.ts","webpack://@reltio/remotes/../graph/src/contexts/GraphStateContext.tsx","webpack://@reltio/remotes/../graph/src/components/GraphProfileBand/styles.ts","webpack://@reltio/remotes/../graph/src/components/GraphProfileBand/GraphProfileBand.tsx","webpack://@reltio/remotes/../graph/src/components/GraphRightSidePanel/styles.ts","webpack://@reltio/remotes/../graph/src/components/GraphRightSidePanel/icons/relationship-icon.svg","webpack://@reltio/remotes/../graph/src/components/RightPanelProfileBand/RightPanelProfileBand.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelEntityDetails/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelEntityDetails/RightPanelEntityDetails.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/CollapsibleTable/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/CollapsibleTable/TableHead.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/CollapsibleTable/CollapsibleTable.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/cell-renderers/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/cell-renderers/HeadCellRenderer.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/cell-renderers/DefaultCellRenderer.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/cell-renderers/ProfileCellRenderer.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/cell-renderers/ExpandedRowRenderer.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/DeleteRelationDialog/DeleteRelationDialog.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/cell-renderers/components/DeleteRelationButton.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/cell-renderers/ControlsCellRenderer.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/RelationshipTable.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipsFilters/RelationshipsSearchTextField/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipsFilters/RelationshipsSearchTextField/RelationshipsSearchTextField.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipsFilters/RelationshipsFiltersDialog/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipsFilters/RelationshipsFiltersDialog/RelationshipsFiltersDialog.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipsFilters/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipsFilters/RelationshipsFilters.tsx","webpack://@reltio/remotes/../graph/src/helpers/relationsHelpers.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/GraphAddRelationDialog/useCreatableInOutRelationTypes.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/GraphAddRelationDialog/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/GraphAddRelationDialog/GraphAddRelationDialog.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/GraphAddRelationDialog/GraphAddRelationButton.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/RightPanelRelationship.tsx","webpack://@reltio/remotes/../graph/src/components/GraphRightSidePanel/GraphRightSidePanel.tsx","webpack://@reltio/remotes/../graph/src/rendering/canvas/nodeBackground.ts","webpack://@reltio/remotes/../graph/src/rendering/canvas/label.ts","webpack://@reltio/remotes/../graph/src/rendering/canvas/hover.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/node.border.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/shaders/node.border.vert.glsl.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/shaders/node.border.frag.glsl.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/image.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/helpers/imageHelper.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/node.image.ts","webpack://@reltio/remotes/../graph/src/rendering/icons/no_photo.inline.svg.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/shaders/node.image.vert.glsl.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/shaders/node.image.frag.glsl.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/shaders/node.buttons.vert.glsl.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/node.buttons.ts","webpack://@reltio/remotes/../graph/src/rendering/icons/expandIcon.inline.svg.ts","webpack://@reltio/remotes/../graph/src/rendering/icons/collapseIcon.inline.svg.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/shaders/node.buttons.frag.glsl.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/edge.arrowHead.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/edge.reversedArrowHead.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/edge.clamped.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/shaders/edge.clamped.vert.glsl.ts","webpack://@reltio/remotes/../graph/src/components/SigmaGraphContainer/SigmaGraphContainer.tsx","webpack://@reltio/remotes/../graph/src/rendering/canvas/edgeLabelRenderer.ts","webpack://@reltio/remotes/../graph/src/hooks/useGraphLayout.ts","webpack://@reltio/remotes/../graph/src/types/graphDataTypes.ts","webpack://@reltio/remotes/../graph/src/components/CircleLayout/CircleLayout.tsx","webpack://@reltio/remotes/../graph/src/components/HierarchyLayout/buildHierarchy.ts","webpack://@reltio/remotes/../graph/src/components/HierarchyLayout/calculations.ts","webpack://@reltio/remotes/../graph/src/components/HierarchyLayout/HierarchyLayout.ts","webpack://@reltio/remotes/../graph/src/components/GraphTypeSelector/styles.ts","webpack://@reltio/remotes/../graph/src/components/GraphTypeSelector/GraphTypeSelector.tsx","webpack://@reltio/remotes/../graph/src/components/GraphLayoutSelector/styles.ts","webpack://@reltio/remotes/../graph/src/components/GraphLayoutSelector/GraphLayoutSelector.tsx","webpack://@reltio/remotes/../graph/src/components/SigmaGraphResizer/SigmaGraphResizer.tsx","webpack://@reltio/remotes/../graph/src/components/ZoomSlider/styles.ts","webpack://@reltio/remotes/../graph/src/components/ZoomSlider/ZoomSlider.tsx","webpack://@reltio/remotes/../graph/src/components/GotoButton/styles.ts","webpack://@reltio/remotes/../graph/src/components/GotoButton/GotoButton.tsx","webpack://@reltio/remotes/../graph/src/components/GraphArea/styles.ts","webpack://@reltio/remotes/../graph/src/components/GraphArea/GraphArea.tsx","webpack://@reltio/remotes/../graph/src/components/GraphPerspectiveView/styles.ts","webpack://@reltio/remotes/../graph/src/components/GraphPerspectiveView/GraphPerspectiveView.tsx","webpack://@reltio/remotes/../graph/src/hooks/useGraphState.ts","webpack://@reltio/remotes/../graph/src/index.tsx","webpack://@reltio/remotes/./src/graph.ts"],"sourcesContent":["import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n button: {\n padding: '9px 16px 9px 12px',\n '& svg g path, & svg path': {\n fill: theme.palette.primary.main,\n fillOpacity: 1\n }\n },\n iconButton: {\n '& svg g path, & svg path': {\n fill: theme.palette.primary.main,\n fillOpacity: 1\n }\n },\n startIcon: {\n marginLeft: 0,\n marginRight: '8px',\n width: '18px',\n height: '18px',\n alignItems: 'center'\n },\n label: {\n whiteSpace: 'nowrap',\n fontSize: '14px',\n lineHeight: '16px',\n letterSpacing: 0\n },\n overflowStyle: {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n menuIcon: {\n marginRight: '12px'\n },\n menuItem: {\n minHeight: '28px',\n padding: '2px 16px 2px 12px'\n },\n menuText: {\n color: theme.palette.text.primary,\n fontSize: '13px',\n lineHeight: '15px',\n letterSpacing: 0\n }\n}));\n","import React, {forwardRef} from 'react';\nimport classnames from 'classnames';\nimport {Button as Button} from '@material-ui/core';\nimport {MenuItem as MenuItem} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport {useStyles} from './styles';\nimport {noop} from '../../core';\nimport ExpandedValueTooltip from '../ExpandedValueTooltip/ExpandedValueTooltip';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\n\nexport enum ActionButtonMode {\n iconButton = 'iconButton',\n button = 'button',\n menuItem = 'menuItem'\n}\n\nexport type Props = {\n className?: string;\n disabled?: boolean;\n icon: React.ElementType;\n label: string;\n mode: ActionButtonMode;\n onClick: () => void;\n onMenuClose?: () => void;\n};\n\nexport const ActionButton = forwardRef<HTMLLIElement, Props>(\n (\n {\n className,\n mode = ActionButtonMode.iconButton,\n label,\n disabled,\n icon: Icon,\n onClick = noop,\n onMenuClose = noop,\n ...otherProps\n }: Props,\n ref: React.Ref<HTMLLIElement>\n ) => {\n const styles = useStyles();\n\n const getButtonView = () => {\n switch (mode) {\n case 'iconButton': {\n return (\n <SmallIconButtonWithTooltip\n disabled={disabled}\n className={classnames(styles.iconButton, className)}\n size=\"S\"\n tooltipTitle={label}\n onClick={onClick}\n icon={Icon}\n {...otherProps}\n />\n );\n }\n case 'button': {\n return (\n <Button\n className={classnames(styles.button, className)}\n disabled={disabled}\n startIcon={<Icon />}\n onClick={onClick}\n color=\"primary\"\n classes={{startIcon: styles.startIcon, label: styles.label}}\n {...otherProps}\n >\n <ExpandedValueTooltip value={label}>\n <div className={styles.overflowStyle}>{label}</div>\n </ExpandedValueTooltip>\n </Button>\n );\n }\n case 'menuItem': {\n const handleClick = () => {\n onMenuClose();\n onClick();\n };\n return (\n <MenuItem\n classes={{root: styles.menuItem}}\n onClick={handleClick}\n disabled={disabled}\n ref={ref}\n {...otherProps}\n >\n <>\n <Icon className={styles.menuIcon} />\n <Typography classes={{root: styles.menuText}}>{label}</Typography>\n </>\n </MenuItem>\n );\n }\n }\n };\n\n return getButtonView();\n }\n);\n\nActionButton.displayName = 'ActionButton';\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n item: {\n overflow: 'hidden'\n }\n});\n","import React, {memo, MutableRefObject, useCallback, useMemo, useRef, useState} from 'react';\nimport {VariableSizeList as List} from 'react-window';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {debounce} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props<T> = {\n width: number;\n height: number;\n data: T[];\n defaultItemSize: number;\n itemKey?: (index: number, data: T[]) => string;\n children: ({data, index}: {data: T[]; index: number}) => React.ReactNode;\n showNotMeasuredItems?: boolean;\n listRef?: MutableRefObject<List>;\n};\n\nconst AutoSizeList = <T extends unknown>({\n width = 0,\n height = 0,\n defaultItemSize,\n data,\n children,\n itemKey,\n showNotMeasuredItems,\n listRef: listRefProp\n}: Props<T>) => {\n const styles = useStyles();\n const rowHeightsCache = useRef({});\n const cacheRowHeight = (key, height) => {\n rowHeightsCache.current = {\n ...rowHeightsCache.current,\n [key]: height\n };\n };\n\n const [rowHeights, setRowHeights] = useState({});\n const applyRowHeights = useCallback(\n debounce(() => {\n setRowHeights({...rowHeightsCache.current});\n }),\n []\n );\n\n const getItemKeyFromData = useCallback((data, index) => (itemKey ? itemKey(index, data) : index), [itemKey]);\n const getItemKey = (index) => getItemKeyFromData(data, index);\n const getItemSize = (index) => rowHeights[getItemKey(index)] || defaultItemSize;\n\n const localListRef = useRef<List>();\n const listRef = listRefProp || localListRef;\n listRef.current && listRef.current.resetAfterIndex(0, false);\n\n const Row = useMemo(\n //eslint-disable-next-line\n () => ({data, index, style}) => {\n const key = getItemKeyFromData(data, index);\n return (\n <div style={style} className={styles.item}>\n <div\n style={\n !showNotMeasuredItems ? {visibility: key in rowHeights ? undefined : 'hidden'} : undefined\n }\n >\n <ReactResizeDetector\n handleHeight={true}\n onResize={(_, height) => {\n if (rowHeightsCache.current[key] !== height) {\n cacheRowHeight(key, height);\n applyRowHeights();\n }\n }}\n />\n {children({data, index})}\n </div>\n </div>\n );\n },\n //eslint-disable-next-line react-hooks/exhaustive-deps\n [children, showNotMeasuredItems, getItemKeyFromData, applyRowHeights, !showNotMeasuredItems && rowHeights]\n );\n\n return (\n <List\n ref={listRef}\n width={width}\n height={height}\n itemCount={data.length}\n itemData={data}\n itemSize={getItemSize}\n itemKey={itemKey}\n >\n {Row}\n </List>\n );\n};\n\nexport default memo(AutoSizeList);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n pagination: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n height: '56px',\n borderTop: '1px solid rgba(0,0,0,0.12)',\n boxShadow: 'none'\n },\n caption: {\n color: 'rgba(0,0,0,0.6)',\n fontSize: '12px',\n lineHeight: '16px'\n },\n selectRoot: {\n marginLeft: '5px',\n marginRight: '36px'\n },\n select: {\n color: 'rgba(0,0,0,0.6)',\n fontSize: '12px',\n lineHeight: '16px',\n textAlign: 'right'\n },\n actions: {\n marginLeft: '32px'\n }\n});\n","import PropTypes from 'prop-types';\nimport React, {useCallback} from 'react';\nimport classnames from 'classnames';\nimport {TablePagination as TablePagination} from '@material-ui/core';\nimport i18n from 'ui-i18n';\nimport {getValue} from '../../../core/utils';\nimport {nthArg, pipe, pathOr, identity} from 'ramda';\nimport {useStyles} from './styles';\n\nconst BasicTablePagination = ({\n classes = {},\n count,\n rowsPerPageOptions,\n page,\n onChangePage,\n rowsPerPage,\n onChangeRowsPerPage,\n basicTableRef,\n labelRowsPerPage\n}) => {\n const labelDisplayedRows = ({from, to, count}) =>\n i18n.text('${fromRow}-${toRow} of ${countRows}', {\n fromRow: i18n.number(from, '0,0'),\n toRow: i18n.number(to, '0,0'),\n countRows: i18n.number(count, '0,0')\n });\n const styles = useStyles();\n const resetScrollbarPosition = useCallback(() => {\n pathOr(identity, ['current', 'resetScrollbarPosition'], basicTableRef)();\n }, [basicTableRef]);\n const handleChangePage = useCallback(\n (value) => {\n onChangePage(value);\n resetScrollbarPosition();\n },\n [onChangePage, resetScrollbarPosition]\n );\n const handleChangeRowsPerPage = useCallback(\n (value) => {\n onChangePage(0);\n onChangeRowsPerPage(value);\n resetScrollbarPosition();\n },\n [onChangePage, onChangeRowsPerPage, resetScrollbarPosition]\n );\n return (\n <TablePagination\n classes={{\n ...classes,\n root: classnames(styles.pagination, classes.root),\n select: classnames(styles.select, classes.select),\n caption: styles.caption,\n selectRoot: styles.selectRoot,\n actions: styles.actions\n }}\n component=\"div\"\n labelRowsPerPage={labelRowsPerPage || i18n.text('Rows per page:')}\n labelDisplayedRows={labelDisplayedRows}\n count={count}\n rowsPerPageOptions={rowsPerPageOptions}\n page={page}\n onChangePage={pipe(nthArg(1), handleChangePage)}\n rowsPerPage={rowsPerPage}\n onChangeRowsPerPage={pipe(getValue, handleChangeRowsPerPage)}\n />\n );\n};\n\nBasicTablePagination.propTypes = {\n classes: PropTypes.object,\n rowsPerPageOptions: PropTypes.arrayOf(PropTypes.number),\n count: PropTypes.number,\n page: PropTypes.number,\n onChangePage: PropTypes.func,\n rowsPerPage: PropTypes.number,\n onChangeRowsPerPage: PropTypes.func,\n basicTableRef: PropTypes.shape({current: PropTypes.object}),\n labelRowsPerPage: PropTypes.string\n};\n\nexport default React.memo(BasicTablePagination);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n 'basic-view__paper': {\n display: 'flex',\n flexDirection: 'column',\n ...theme.basicView\n }\n}));\n","import Paper, {PaperProps} from '@material-ui/core/Paper';\nimport PropTypes from 'prop-types';\nimport React, {forwardRef, Ref} from 'react';\nimport {useStyles} from './styles';\n\nconst BasicView = forwardRef<Ref<typeof Paper>, PaperProps>(({children, className, ...otherProps}, ref) => {\n const styles = useStyles();\n return (\n <Paper ref={ref} className={className} classes={{root: styles['basic-view__paper']}} {...otherProps}>\n {children}\n </Paper>\n );\n});\n\nBasicView.displayName = 'BasicView';\n\nBasicView.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string\n};\n\nexport default BasicView;\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles({\n paper: {\n minHeight: '180px'\n },\n title: {\n padding: '16px 16px 10px 16px',\n fontSize: '20px',\n fontWeight: 500,\n letterSpacing: '0.25px',\n lineHeight: '24px'\n },\n content: {\n padding: '0 16px'\n },\n contentText: {\n marginBottom: 0,\n fontSize: '16px',\n letterSpacing: '0.15px',\n lineHeight: '24px'\n },\n actionButtons: {\n display: 'flex',\n paddingTop: '4px',\n fontSize: '14px',\n fontWeight: 500,\n letterSpacing: 0,\n lineHeight: '16px',\n '& > div': {\n marginLeft: 'auto'\n }\n },\n discardButton: {\n marginRight: '8px'\n }\n});\n\nexport {useStyles};\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport {Dialog as Dialog} from '@material-ui/core';\nimport {DialogActions as DialogActions} from '@material-ui/core';\nimport {DialogContent as DialogContent} from '@material-ui/core';\nimport {DialogContentText as DialogContentText} from '@material-ui/core';\nimport {DialogTitle as DialogTitle} from '@material-ui/core';\n\nimport {useStyles} from './styles';\n\nexport type Props = {\n open: boolean;\n title: React.ReactNode;\n content: React.ReactNode;\n cancelCaption?: string;\n discardCaption?: string;\n saveCaption?: string;\n disabledSave?: boolean;\n onCancel?: () => void;\n onDiscard?: () => void;\n onSave: () => void;\n};\n\nconst ConfirmationDialog = ({\n open,\n title,\n content,\n onCancel,\n cancelCaption = i18n.text('Cancel'),\n onDiscard,\n discardCaption = '',\n onSave,\n saveCaption = i18n.text('Save'),\n disabledSave = false\n}: Props) => {\n const styles = useStyles();\n\n return (\n <Dialog open={open} onClose={onCancel} classes={{paperScrollPaper: styles.paper}}>\n <DialogTitle classes={{root: styles.title}}>{title}</DialogTitle>\n <DialogContent classes={{root: styles.content}}>\n <DialogContentText classes={{root: styles.contentText}}>{content}</DialogContentText>\n </DialogContent>\n <DialogActions className={styles.actionButtons} disableSpacing>\n {onCancel && <Button onClick={onCancel}>{cancelCaption}</Button>}\n <div>\n {onDiscard && (\n <Button onClick={onDiscard} classes={{root: styles.discardButton}}>\n {discardCaption}\n </Button>\n )}\n <Button onClick={onSave} color=\"primary\" disabled={disabledSave} autoFocus>\n {saveCaption}\n </Button>\n </div>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default ConfirmationDialog;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n item: {\n marginBottom: '16px'\n },\n dense: {\n marginBottom: 0\n }\n});\n","import {useStyles} from './styles';\nimport {useDidUpdateEffect} from '../../hooks';\n\nimport React, {useCallback, useEffect, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\n\nimport {\n AttributeItem,\n Directions,\n EditingConnection,\n Entity,\n getActivenessAttributes,\n getSuitableEntityTypeUrisForRelationTypes,\n getDefaultRelationTypeObject,\n getLabel,\n getRelationAttributesList,\n getRelationType,\n isAvailableRelationBetweenEntities,\n ModeTypes,\n TRelationType\n} from '@reltio/mdm-sdk';\nimport AttributesList from '../attributes/editMode/AttributesList';\n\nimport classnames from 'classnames';\nimport {uniq} from 'ramda';\nimport ConnectionRelationTypeSelector from '../ConnectionRelationTypeSelector/ConnectionRelationTypeSelector';\nimport ErrorWrapper from '../ErrorWrapper/ErrorWrapper';\nimport EntitySelector from '../attributes/editMode/EntitySelector/EntitySelector';\n\ntype Props = {\n connection: EditingConnection;\n showEmptyEditors?: boolean;\n onChangeAttribute: (attribute: AttributeItem) => void;\n onAddAttributes: (attributes: AttributeItem[]) => void;\n onRemoveAttribute: (attributes: AttributeItem) => void;\n onChangeRelationType?: (value: {type: string; direction: string}) => void;\n onChangeEntity?: (entity: Entity) => void;\n relatedEntity?: Entity;\n inRelationTypes?: TRelationType[];\n outRelationTypes?: TRelationType[];\n entityErrorMessage?: string;\n};\n\nexport const ConnectionEditor = ({\n connection,\n relatedEntity,\n inRelationTypes = [],\n outRelationTypes = [],\n showEmptyEditors,\n entityErrorMessage,\n onChangeAttribute,\n onRemoveAttribute,\n onAddAttributes,\n onChangeRelationType,\n onChangeEntity\n}: Props) => {\n const styles = useStyles();\n const {relation, entity} = connection;\n const {attributes, uri: relationUri, type: relationTypeUri = '', direction} = relation || {};\n const isRelationTypeSelected = Boolean(relationTypeUri);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n\n const attributeListEntity = useMemo(\n () =>\n relation && {\n attributes,\n ...getActivenessAttributes(relation)\n },\n [relation, attributes]\n );\n\n const relationAttrTypes = useMemo(() => getRelationAttributesList(metadata, relationTypeUri), [\n relationTypeUri,\n metadata\n ]);\n\n const availableEntityTypeUris = useMemo(() => {\n return isRelationTypeSelected\n ? getSuitableEntityTypeUrisForRelationTypes(direction === Directions.OUT, metadata, [\n getRelationType(metadata, relationTypeUri)\n ])\n : uniq(\n getSuitableEntityTypeUrisForRelationTypes(true, metadata, outRelationTypes).concat(\n getSuitableEntityTypeUrisForRelationTypes(false, metadata, inRelationTypes)\n )\n );\n }, [isRelationTypeSelected, relationTypeUri, metadata, inRelationTypes, outRelationTypes]);\n\n const globalSearchRequestOptions = useSelector((state) =>\n mdmModule.selectors.getGlobalSearchRequestOptions(state, ['ovOnly'])\n );\n\n const selectorCompatibleRelation = useMemo(\n () =>\n relation && {\n relationType: relation.type,\n direction: relation.direction\n },\n [relation]\n );\n\n const selectorCompatibleEntity = useMemo(\n () =>\n entity && {\n entityUri: entity.uri,\n entityType: entity.type,\n entityLabel: getLabel(entity.label)\n },\n [entity]\n );\n\n const availableInRelationTypes = useMemo(\n () =>\n entity && entity.uri\n ? inRelationTypes.filter(isAvailableRelationBetweenEntities(false, entity, relatedEntity, metadata))\n : inRelationTypes,\n [entity, inRelationTypes, relatedEntity, metadata]\n );\n\n const availableOutRelationTypes = useMemo(\n () =>\n entity && entity.uri\n ? outRelationTypes.filter(isAvailableRelationBetweenEntities(true, entity, relatedEntity, metadata))\n : outRelationTypes,\n [entity, outRelationTypes, relatedEntity, metadata]\n );\n\n useEffect(() => {\n // autoselecting relation type on mount\n const {type, direction} = getDefaultRelationTypeObject(inRelationTypes, outRelationTypes) || {};\n\n if (!relationTypeUri && type && onChangeRelationType) {\n onChangeRelationType({type: type.uri, direction});\n }\n }, [relationTypeUri, inRelationTypes, outRelationTypes, onChangeRelationType]);\n\n useDidUpdateEffect(() => {\n // autoselecting relation type on entity change\n const {type, direction} =\n getDefaultRelationTypeObject(availableInRelationTypes, availableOutRelationTypes) || {};\n\n if (!relationTypeUri && type) {\n onChangeRelationType({type: type.uri, direction});\n }\n }, [relationTypeUri, entity, availableInRelationTypes, availableOutRelationTypes, onChangeEntity]);\n\n const handleChangeRelationType = useCallback(\n ({type, direction}: {type: TRelationType; direction: string}) => {\n onChangeRelationType({type: type.uri, direction});\n },\n [onChangeRelationType]\n );\n\n return (\n <>\n {onChangeRelationType && (\n <ConnectionRelationTypeSelector\n className={styles.item}\n relation={selectorCompatibleRelation}\n metadata={metadata}\n inRelationTypes={inRelationTypes}\n outRelationTypes={outRelationTypes}\n onChange={handleChangeRelationType}\n />\n )}\n {onChangeEntity && (\n <ErrorWrapper errorMessage={entityErrorMessage} className={styles.item}>\n <EntitySelector\n key={relationTypeUri}\n className={classnames({[styles.dense]: entityErrorMessage})}\n entity={selectorCompatibleEntity || {}}\n entityTypesUris={availableEntityTypeUris}\n max={20}\n globalSearchRequestOptions={globalSearchRequestOptions}\n mode={ModeTypes.EDITING}\n onChange={onChangeEntity}\n onCreate={undefined}\n metadata={metadata}\n attributeTypesSelectionStrategy={undefined}\n />\n </ErrorWrapper>\n )}\n {relationTypeUri && (\n <AttributesList\n attrTypes={relationAttrTypes}\n entity={attributeListEntity}\n showEmptyEditors={showEmptyEditors}\n mode={ModeTypes.EDITING}\n parentUri={relationUri}\n onAddAttributes={onAddAttributes}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onRemoveAttribute}\n />\n )}\n </>\n );\n};\n","import React, {useMemo, useCallback, useEffect} from 'react';\nimport PropTypes from 'prop-types';\nimport {ConnectionRelationType, RelationTypeType} from '@reltio/mdm-sdk';\nimport {identity, pipe} from 'ramda';\nimport {useRelationTypeSelector} from '../../hooks';\nimport RelationTypeSelector from '../attributes/editMode/RelationTypeSelector/RelationTypeSelector';\n\nconst ConnectionRelationTypeSelector = ({\n relation = {},\n inRelationTypes = [],\n outRelationTypes = [],\n onChange = identity,\n applyFirstByDefault = false,\n reversedContextLabels = false,\n ...otherProps\n}) => {\n const {getRelationTypesOptions, fromEditorValue, toEditorValue} = useRelationTypeSelector({reversedContextLabels});\n\n const relationsTypesOptions = useMemo(() => getRelationTypesOptions(inRelationTypes, outRelationTypes), [\n getRelationTypesOptions,\n inRelationTypes,\n outRelationTypes\n ]);\n\n const handleChange = useCallback(pipe(fromEditorValue(inRelationTypes, outRelationTypes), onChange), [\n fromEditorValue,\n inRelationTypes,\n outRelationTypes,\n onChange\n ]);\n\n const hasValue = !!relation.relationType;\n\n useEffect(() => {\n if (applyFirstByDefault && relationsTypesOptions.length && !hasValue) {\n handleChange(relationsTypesOptions[0]);\n }\n }, [relationsTypesOptions, applyFirstByDefault, handleChange, hasValue]);\n\n return (\n <RelationTypeSelector\n value={toEditorValue(relation, relationsTypesOptions)}\n options={relationsTypesOptions}\n onChange={handleChange}\n {...otherProps}\n />\n );\n};\n\nConnectionRelationTypeSelector.propTypes = {\n className: PropTypes.string,\n relation: ConnectionRelationType,\n inRelationTypes: PropTypes.arrayOf(RelationTypeType),\n outRelationTypes: PropTypes.arrayOf(RelationTypeType),\n applyFirstByDefault: PropTypes.bool,\n reversedContextLabels: PropTypes.bool,\n onChange: PropTypes.func\n};\n\nexport default ConnectionRelationTypeSelector;\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles({\n 'entityType-overflow': {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap'\n },\n\n 'entityType-small': {\n padding: '1px 4px',\n fontSize: '10px',\n lineHeight: 'normal',\n marginRight: '12px',\n borderRadius: '2px'\n },\n 'entityType-medium': {\n padding: '2px 8px 3px',\n borderRadius: '2px',\n fontSize: '13px',\n fontWeight: 500,\n lineHeight: '15px',\n marginRight: '16px'\n }\n});\n\nexport default useStyles;\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport {getEntityType, getEntityTypeLabel, getPropWithInheritance, theme, utils, Entity} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport ExpandedValueTooltip from '../ExpandedValueTooltip/ExpandedValueTooltip';\nimport useStyles from './styles';\n\ntype Props = {\n entity: Entity;\n className?: string;\n size?: 'small' | 'medium';\n};\n\nconst EntityTypeBadge = ({entity, className, size = 'small'}: Props) => {\n const styles = useStyles();\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityTypeUri = entity.type;\n const entityType = getEntityType(metadata, entityTypeUri) || {};\n const entityTypeColor = getPropWithInheritance(metadata, entityType, 'typeColor') || theme.palette.primary.main;\n const entityTypeLabel = getEntityTypeLabel(metadata, entity);\n\n return (\n <ExpandedValueTooltip value={entityTypeLabel} placement=\"top\">\n <Typography\n style={{\n backgroundColor: entityTypeColor,\n color: utils.Colors.getColor(entityTypeColor) ? '#FFFFFF' : '#212121'\n }}\n className={classnames(styles[`entityType-${size}`], styles['entityType-overflow'], className)}\n component=\"div\"\n >\n {entityTypeLabel}\n </Typography>\n </ExpandedValueTooltip>\n );\n};\n\nexport default EntityTypeBadge;\n","import React, {useMemo, memo} from 'react';\nimport i18n from 'ui-i18n';\nimport {isAvailableEntityType, TEntityType} from '@reltio/mdm-sdk';\nimport {MetadataTypesSelector} from '../MetadataTypesSelector/MetadataTypesSelector';\n\ntype MetadataTypesSelectorProps = React.ComponentProps<typeof MetadataTypesSelector>;\n\ntype Props = {\n entityTypes: TEntityType[];\n selectedEntityTypes: string[];\n onChange: (values: string[]) => void;\n single?: boolean;\n placeholder?: string;\n enableEmptyValueUnderline?: boolean;\n classes?: MetadataTypesSelectorProps['classes'];\n ListLabelProps?: MetadataTypesSelectorProps['ListLabelProps'];\n disabled?: boolean;\n};\n\nexport const EntityTypesSelector = memo(\n ({\n entityTypes,\n selectedEntityTypes,\n single,\n placeholder,\n enableEmptyValueUnderline,\n onChange,\n classes = {},\n ListLabelProps = {},\n disabled = false\n }: Props) => {\n const items = useMemo(() => entityTypes.filter(isAvailableEntityType), [entityTypes]);\n\n return (\n <MetadataTypesSelector\n items={items}\n selectedItemsUris={selectedEntityTypes}\n single={single}\n placeholder={placeholder}\n enableEmptyValueUnderline={enableEmptyValueUnderline}\n onChange={onChange}\n classes={classes}\n ListLabelProps={ListLabelProps}\n disabled={disabled}\n label={i18n.text('Entity type')}\n dataReltioId=\"entity-type-selector\"\n selectionPopupTitle={i18n.text('Select entity types')}\n />\n );\n }\n);\n\nEntityTypesSelector.displayName = 'EntityTypesSelector';\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n container: {\n padding: '0 16px',\n minHeight: '48px'\n },\n title: {\n fontSize: '16px',\n lineHeight: '19px',\n paddingTop: '16px',\n paddingBottom: '13px',\n justifyContent: 'flex-start'\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport BasicViewHeader from '../BasicViewHeader/BasicViewHeader';\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n title: string;\n children?: React.ReactNode;\n};\n\nconst FacetViewHeader = ({className, title, children}: Props) => {\n const styles = useStyles();\n return (\n <BasicViewHeader title={title} classes={{root: classnames(styles.container, className), title: styles.title}}>\n {children}\n </BasicViewHeader>\n );\n};\n\nexport default FacetViewHeader;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n listLabelContainer: {\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n justifyContent: 'space-between',\n height: '100%',\n width: '100%'\n },\n listLabel: {\n visibility: 'hidden',\n position: 'absolute',\n overflow: 'hidden'\n },\n visibleItemsLabel: {\n textOverflow: 'ellipsis',\n marginRight: '5px',\n overflow: 'hidden',\n flex: 1,\n flexBasis: 'auto'\n },\n hiddenCount: {\n color: 'rgba(0,0,0,0.87)',\n fontSize: '13px',\n lineHeight: '15px',\n padding: '5px 8px',\n borderRadius: '16px',\n backgroundColor: 'rgba(0,0,0,.12)'\n }\n});\n","import {isNil} from 'ramda';\n\nconst ITEMS_SEPARATOR = ', ';\nconst ALWAYS_VISIBLE_ITEMS_COUNT = 1;\nconst HIDDEN_COUNT_WIDTH = 35;\n\nconst countHiddenItems = (list: string[], labelEl: HTMLDivElement) => {\n const itemsCount = list.length;\n const overflowItemsCount = countOverflowItems(list, labelEl);\n const visibleItemsCount = Math.max(ALWAYS_VISIBLE_ITEMS_COUNT, itemsCount - overflowItemsCount);\n return itemsCount - visibleItemsCount;\n};\n\nconst countOverflowItems = (list: string[], labelEl: HTMLDivElement) => {\n if (labelEl) {\n const firstOverflowItemIndex = findFirstOverflowItemIndex(list, labelEl);\n return firstOverflowItemIndex === -1 ? 0 : list.length - firstOverflowItemIndex;\n } else {\n return 0;\n }\n};\n\nconst findFirstOverflowItemIndex = (list: string[], labelEl: HTMLDivElement) => {\n const {childNodes, clientLeft, clientWidth} = labelEl;\n if (childNodes.length > 0) {\n const [textNode] = Array.from(childNodes);\n const range = document.createRange();\n range.setStart(textNode, 0);\n\n for (let index = 0; index < list.length; index++) {\n range.setEnd(textNode, range.endOffset + list[index].length);\n const {width: rangeWidth} = range.getBoundingClientRect();\n if (clientLeft + rangeWidth > clientWidth) {\n return index;\n }\n if (index !== list.length - 1) {\n range.setEnd(textNode, range.endOffset + ITEMS_SEPARATOR.length);\n }\n }\n }\n return -1;\n};\n\nconst getListLabel = (list: string[]) => list.join(ITEMS_SEPARATOR);\n\nconst getListLabelWidth = (maxWidth?: number) => {\n const maxCssWidth = isNil(maxWidth) ? '100%' : `${maxWidth}px`;\n return `calc(${maxCssWidth} - ${HIDDEN_COUNT_WIDTH}px)`;\n};\n\nexport {countHiddenItems, getListLabel, getListLabelWidth};\n","import React, {useEffect, useRef, useState} from 'react';\n\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {useStyles} from './styles';\nimport {countHiddenItems, getListLabel, getListLabelWidth} from './helpers';\n\ntype Props = {\n maxWidth?: number;\n list: string[];\n};\n\nexport const ListLabel = ({list, maxWidth}: Props) => {\n const styles = useStyles();\n\n const labelRef = useRef<HTMLDivElement>();\n const [hiddenItemsCount, setHiddenItemsCount] = useState(0);\n useEffect(() => {\n setHiddenItemsCount(countHiddenItems(list, labelRef.current));\n }, [list]);\n\n const listLabel = getListLabel(list);\n const hasHiddenItems = hiddenItemsCount > 0;\n const visibleItemsLabel = hasHiddenItems ? getListLabel(list.slice(0, -hiddenItemsCount)) : listLabel;\n\n return (\n <Tooltip title={hasHiddenItems ? listLabel : ''}>\n <div className={styles.listLabelContainer}>\n <div style={{width: getListLabelWidth(maxWidth)}} className={styles.listLabel} ref={labelRef}>\n {listLabel}\n </div>\n <div className={styles.visibleItemsLabel}>{visibleItemsLabel}</div>\n {hasHiddenItems && <div className={styles.hiddenCount}>{`+${hiddenItemsCount}`}</div>}\n </div>\n </Tooltip>\n );\n};\n","import React, {memo} from 'react';\nimport {always} from 'ramda';\nimport {TEntityType, TRelationType} from '@reltio/mdm-sdk';\nimport AttributeListItem from '../AttributeListItem/AttributeListItem';\nimport Highlighter from '../Highlighter/Highlighter';\nimport VirtualGroupedList from '../VirtualGroupedList/VirtualGroupedList';\n\nconst ITEM_HEIGHT = 32;\nconst getItemSize = always(ITEM_HEIGHT);\n\ntype AttributeListItemProps = React.ComponentPropsWithoutRef<typeof AttributeListItem>;\n\ntype Item = {\n item: {\n item: TEntityType | TRelationType;\n };\n index: number;\n};\n\ntype Props = {\n selectedItems: string[];\n onItemClick: AttributeListItemProps['onClick'];\n focusIndex: number;\n items: Item[];\n width: number;\n height: number;\n};\n\nexport const SelectMetadataTypesList = memo(\n ({selectedItems, onItemClick, focusIndex, width, height, ...otherProps}: Props) => {\n const renderItem = (style, {item}, index) => {\n const isSelected = !!selectedItems.find((uri) => item.uri === uri);\n const isFocused = index === focusIndex;\n return (\n <AttributeListItem\n key={item.uri}\n onClick={onItemClick}\n checked={isSelected}\n data={item}\n label={<Highlighter text={item.label} highlight={item.filterText} />}\n labelInText={item.label}\n style={style}\n isFocused={isFocused}\n hideIcon={true}\n LogoIcon={item.LogoIcon}\n />\n );\n };\n\n return (\n <VirtualGroupedList\n getItemSize={getItemSize}\n renderItem={renderItem}\n focusIndex={focusIndex}\n fixedTitle={false}\n disableHorizontalScrollbar={true}\n width={width as any}\n height={height}\n {...otherProps}\n />\n );\n }\n);\n\nSelectMetadataTypesList.displayName = 'SelectMetadataTypesList';\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n borderRadius: '4px 4px 0 0',\n margin: 0,\n fontSize: '14px',\n letterSpacing: 0,\n lineHeight: '16px'\n },\n inputLabel: {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n width: '100%',\n top: 'calc(50% - 23px)'\n },\n inputText: {\n display: 'flex',\n flexGrow: 1,\n alignItems: 'center',\n height: '25px',\n width: 'calc(100% - 53px)',\n paddingTop: '18px',\n paddingBottom: '4px',\n color: 'rgba(0,0,0,0.87)',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n input: {\n width: 0,\n cursor: 'pointer',\n '&[disabled]': {\n backgroundColor: 'transparent',\n cursor: 'default'\n },\n '&$emptyInput': {\n width: '100%'\n }\n },\n emptyInput: {},\n disabledInput: {},\n disabledPointer: {},\n disabledUnderline: {},\n inputRoot: {\n flex: 1,\n paddingRight: '4px',\n fontSize: '14px',\n letterSpacing: 0,\n lineHeight: '16px',\n '&$disabledInput': {\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n cursor: 'pointer',\n '&$disabledPointer': {\n cursor: 'default'\n },\n '&$disabledUnderline::before': {\n borderBottomStyle: 'solid'\n }\n }\n },\n icon: {\n transform: 'rotate(0deg)',\n transition: 'transform 0.35s ease'\n },\n 'popup-opened-icon': {\n transform: 'rotate(-180deg)'\n }\n});\n","import React, {useRef, useState, useCallback, useMemo, memo} from 'react';\nimport classnames from 'classnames';\nimport {pipe, propEq, prop} from 'ramda';\nimport {TEntityType, TRelationType, utils} from '@reltio/mdm-sdk';\nimport {TextField as TextField} from '@material-ui/core';\nimport ArrowDropDown from '@material-ui/icons/ArrowDropDown';\nimport {ListLabel} from './ListLabel/ListLabel';\nimport {SmallIconButton} from '../SmallIconButton';\nimport SelectionPopup from '../SelectionPopup/SelectionPopup';\nimport {useKeyboardNavigation} from '../SelectionPopup/helpers';\nimport {SelectMetadataTypesList} from './SelectMetadataTypesList';\nimport {useStyles} from './styles';\n\nconst MIN_CONTAINER_WIDTH = 255;\nconst LIST_HEIGHT = 245;\nconst POPUP_HEIGHT = 355;\n\ntype ListLabelProps = React.ComponentPropsWithoutRef<typeof ListLabel>;\n\ntype Classes = {\n inputText?: string;\n input?: string;\n root?: string;\n label?: string;\n};\n\ntype Props = {\n items: (TEntityType | TRelationType)[];\n selectedItemsUris: string[];\n onChange: (values: string[]) => void;\n label: string;\n dataReltioId: string;\n selectionPopupTitle: string;\n classes?: Classes;\n placeholder?: string;\n ListLabelProps?: Omit<ListLabelProps, 'list'>;\n disabled?: boolean;\n enableEmptyValueUnderline?: boolean;\n single?: boolean;\n};\n\nexport const MetadataTypesSelector = memo(\n ({\n placeholder,\n classes = {},\n items,\n selectedItemsUris,\n onChange,\n ListLabelProps = {},\n disabled,\n enableEmptyValueUnderline,\n single,\n label,\n dataReltioId,\n selectionPopupTitle\n }: Props) => {\n const styles = useStyles();\n\n const [isPopupOpen, setIsPopupOpen] = useState(false);\n const openPopup = useCallback(() => setIsPopupOpen(true), []);\n const closePopup = useCallback(() => setIsPopupOpen(false), []);\n const [filterText, setFilterText] = useState('');\n\n const clearFilterText = useCallback(() => setFilterText(''), []);\n\n const handleClose = useCallback(pipe(clearFilterText, closePopup), [closePopup, clearFilterText]);\n\n const filteredItems = items\n .filter(({label}) => utils.strings.search(label, filterText))\n .map((item, index) => ({item: {item: {...item, filterText}}, index}));\n\n const selectedLabels = useMemo(\n () => selectedItemsUris.map((uri) => items.find(propEq('uri', uri))).map(prop('label')),\n [selectedItemsUris, items]\n ) as string[];\n\n const handleListItemClick = useCallback(\n (item, checked) => {\n if (single) {\n onChange(checked ? [item.uri] : []);\n handleClose();\n } else {\n onChange(\n checked\n ? selectedItemsUris.concat(item.uri)\n : selectedItemsUris.filter((uri) => uri !== item.uri)\n );\n }\n },\n [selectedItemsUris, onChange, single, handleClose]\n );\n\n const handleSearchOnEnter = useCallback(\n ({item}) => {\n const checked = !selectedItemsUris.includes(item.uri);\n handleListItemClick(item, checked);\n },\n [selectedItemsUris, handleListItemClick]\n );\n\n const {focusIndex, handleKeyDown} = useKeyboardNavigation({\n items: filteredItems,\n open: isPopupOpen,\n onSelectFocusedItem: handleSearchOnEnter,\n selectedItems: selectedItemsUris,\n onClose: handleClose\n });\n\n const rootRef = useRef<HTMLDivElement>();\n const rootWidth = rootRef.current ? rootRef.current.getBoundingClientRect().width : 0;\n const containerWidth = Math.max(rootWidth, MIN_CONTAINER_WIDTH);\n\n const noTypesSelected = selectedItemsUris.length === 0;\n\n return (\n <>\n <TextField\n label={label}\n ref={rootRef}\n InputProps={{\n startAdornment:\n noTypesSelected && !placeholder ? null : (\n <div className={classnames(styles.inputText, classes.inputText)}>\n {noTypesSelected ? (\n <div>{placeholder}</div>\n ) : (\n <ListLabel {...ListLabelProps} list={selectedLabels} />\n )}\n </div>\n ),\n classes: {\n root: styles.inputRoot,\n input: classnames(styles.input, classes.input, {\n [styles.emptyInput]: noTypesSelected && !placeholder\n }),\n disabled: classnames(styles.disabledInput, {[styles.disabledPointer]: disabled}),\n underline: styles.disabledUnderline\n },\n endAdornment: (\n <SmallIconButton\n size={'L'}\n icon={ArrowDropDown}\n iconClassName={classnames(styles.icon, {\n [styles['popup-opened-icon']]: isPopupOpen\n })}\n disabled={disabled}\n />\n ),\n readOnly: true,\n disabled: true,\n disableUnderline: noTypesSelected && !enableEmptyValueUnderline\n }}\n inputProps={{\n tabIndex: -1\n }}\n InputLabelProps={{\n classes: {\n root: classnames(styles.inputLabel, classes.label)\n }\n }}\n value=\"\"\n onClick={disabled ? undefined : openPopup}\n classes={{root: classnames(styles.root, classes.root)}}\n margin=\"dense\"\n variant=\"filled\"\n disabled={disabled}\n data-reltio-id={dataReltioId}\n />\n <SelectionPopup\n open={isPopupOpen}\n anchorEl={rootRef.current}\n onClose={handleClose}\n onSearch={setFilterText}\n title={selectionPopupTitle}\n containerWidth={containerWidth}\n containerHeight={POPUP_HEIGHT}\n searchInputOnKeyDown={handleKeyDown}\n transformOrigin={{horizontal: 'left', vertical: 'top'}}\n anchorOrigin={{horizontal: 'left', vertical: 'bottom'}}\n PaperProps={{['data-reltio-id']: `${dataReltioId}-popup`}}\n >\n <SelectMetadataTypesList\n items={filteredItems}\n onItemClick={handleListItemClick}\n selectedItems={selectedItemsUris}\n width={containerWidth}\n height={LIST_HEIGHT}\n focusIndex={focusIndex}\n />\n </SelectionPopup>\n </>\n );\n }\n);\n\nMetadataTypesSelector.displayName = 'MetadataTypesSelector';\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {inactiveBackground: string}) => ({\n profileBandWrapper: {\n // especially for IE (overflow fix)\n flexShrink: 0\n },\n profileBand: {\n display: 'flex',\n padding: '16px 12px 16px 16px',\n alignItems: 'flex-start',\n backgroundColor: '#fff',\n boxShadow: 'inset 0 -1px 0 0 rgba(0,114,206,0.06), inset 0 1px 0 0 rgba(0,114,206,0.06);',\n\n '&:after': {\n // IE workaround for minHeight and centering items\n content: '\"\"',\n minHeight: 'inherit',\n fontSize: 0\n }\n },\n inactive: {\n background: theme.inactiveBackground\n },\n profileIcon: {\n marginRight: '12px'\n },\n imageProfileIcon: {\n width: '48px',\n height: '48px'\n },\n profileInfo: {\n display: 'flex',\n flexDirection: 'column',\n flex: '1 1 50%'\n },\n badge: {},\n label: {\n lineHeight: '1.2',\n letterSpacing: '0.25px',\n color: theme.palette.text.primary,\n wordBreak: 'break-word',\n\n '&+ $specialInfo': {\n marginTop: '4px'\n }\n },\n secondaryLabel: {\n display: 'inline-flex',\n color: theme.palette.text.primary,\n marginTop: '2px',\n lineHeight: '16px',\n fontSize: '14px',\n fontWeight: 400,\n\n '&+ $businessCard': {\n marginLeft: '12px'\n }\n },\n businessCard: {\n color: theme.palette.text.secondary,\n display: 'inline-flex',\n fontSize: '14px',\n marginTop: '4px',\n lineHeight: '1.2'\n },\n specialInfo: {\n display: 'flex',\n justifyContent: 'space-between',\n flexWrap: 'wrap',\n width: '100%',\n marginTop: '8px'\n },\n entityType: {\n display: 'flex',\n flexWrap: 'wrap'\n },\n entityId: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n whiteSpace: 'nowrap',\n cursor: 'pointer',\n '&:hover': {\n textDecoration: 'underline'\n }\n }\n}));\n\nexport default useStyles;\n","import React, {ReactNode, useCallback} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {isNil} from 'ramda';\nimport {Typography as Typography} from '@material-ui/core';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport i18n from 'ui-i18n';\n\nimport {getLabel, isActiveObject, getBusinessCardAttributesText, getEntityId, isTempUri, Entity} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\n\nimport EntityAvatar from '../EntityAvatar/EntityAvatar';\nimport EntityTypeBadge from '../EntityTypeBadge/EntityTypeBadge';\n\nimport useStyles from './styles';\n\ntype Props = {\n className?: string;\n entity?: Entity;\n children?: ReactNode;\n};\n\nconst ProfileBand = ({className, entity, children}: Props) => {\n const styles = useStyles();\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const showEntityId = useSelector(mdmModule.selectors.getShowEntityId);\n const handleCopyEntityIdToClipboard = useCallback(() => {\n navigator.clipboard.writeText(getEntityId(entity));\n }, [entity]);\n\n if (isNil(entity)) {\n return null;\n }\n\n const label = getLabel(entity.label);\n const secondaryLabel = entity.secondaryLabel;\n const businessCardText = getBusinessCardAttributesText(metadata, entity);\n const isActive = isActiveObject(entity);\n const entityUri = entity.uri;\n const entityId = getEntityId(entity);\n return (\n <div className={classnames(styles.profileBandWrapper, className)}>\n <div\n className={classnames(styles.profileBand, {\n [styles.inactive]: !isActive\n })}\n data-entity-uri={entityUri}\n >\n <EntityAvatar\n key={entity.uri}\n entity={entity}\n avatarClassName={styles.profileIcon}\n imageClassName={styles.imageProfileIcon}\n />\n <div className={styles.profileInfo}>\n <div>\n <Typography variant=\"h6\" className={styles.label}>\n {label}\n </Typography>\n {secondaryLabel && (\n <Typography variant=\"subtitle2\" className={styles.secondaryLabel}>\n {secondaryLabel}\n </Typography>\n )}\n {businessCardText && (\n <Typography variant=\"subtitle1\" className={styles.businessCard}>\n {businessCardText}\n </Typography>\n )}\n </div>\n <div className={styles.specialInfo}>\n <div className={styles.entityType}>\n <EntityTypeBadge entity={entity} size=\"medium\" className={styles.badge} />\n {!isTempUri(entityUri) && showEntityId && (\n <Tooltip title={i18n.text('Copy to clipboard')}>\n <Typography\n display=\"inline\"\n variant=\"body2\"\n className={styles.entityId}\n onClick={handleCopyEntityIdToClipboard}\n >\n {i18n.text('Entity ID')}: {entityId}\n </Typography>\n </Tooltip>\n )}\n </div>\n </div>\n </div>\n {children && <div>{children}</div>}\n </div>\n </div>\n );\n};\n\nexport default ProfileBand;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n container: {\n display: 'flex',\n alignItems: 'center'\n },\n link: {\n whiteSpace: 'nowrap',\n marginRight: '9px'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {Link as Link} from '@material-ui/core';\nimport {withTooltip} from '../../HOCs';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';\nimport KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\nconst LinkWithTooltip = withTooltip<typeof Link, {component: string}>(Link);\n\ntype Props = {\n total?: number;\n onPrev?: () => void;\n onNext?: () => void;\n onSearchResultsClick?: () => void;\n isPrevDisabled?: boolean;\n isNextDisabled?: boolean;\n};\n\nconst ProfileBandNavigationWidget = ({\n total = 0,\n onPrev,\n onNext,\n onSearchResultsClick,\n isPrevDisabled,\n isNextDisabled\n}: Props) => {\n const styles = useStyles();\n return (\n <div className={styles.container}>\n <LinkWithTooltip\n className={styles.link}\n component=\"button\"\n variant=\"caption\"\n onClick={onSearchResultsClick}\n underline=\"none\"\n tooltipTitle={i18n.text('Go to search results')}\n >\n {formatNumberAsMetric(total, 1000000)}{' '}\n {total === 1 ? i18n.text('Search result') : i18n.text('Search results')}\n </LinkWithTooltip>\n <SmallIconButtonWithTooltip\n size=\"L\"\n icon={KeyboardArrowLeft}\n tooltipTitle={i18n.text('Go to previous profile')}\n onClick={onPrev}\n disabled={isPrevDisabled}\n showForDisabled\n />\n <SmallIconButtonWithTooltip\n size=\"L\"\n icon={KeyboardArrowRight}\n tooltipTitle={i18n.text('Go to next profile')}\n onClick={onNext}\n disabled={isNextDisabled}\n showForDisabled\n />\n </div>\n );\n};\n\nexport {ProfileBandNavigationWidget, LinkWithTooltip};\n","import {\n Entity,\n getFilteredEntities,\n getFilteredEntitiesFromDataTenant,\n getTotals,\n getTotalFromDataTenant,\n TotalResponse\n} from '@reltio/mdm-sdk';\n\nimport {SearchProvider} from './SearchProvider';\n\nexport class MainSearchProvider implements SearchProvider {\n private readonly query;\n private readonly sortField;\n private readonly sortOrder;\n private readonly tenant;\n private readonly searchTenant;\n private readonly apiPath;\n private readonly dtssPath;\n private readonly globalSearchRequestOptions;\n\n constructor({\n data: {query, sortField, sortOrder},\n tenant,\n searchTenant,\n apiPath,\n dtssPath,\n globalSearchRequestOptions\n }) {\n this.query = query;\n this.sortField = sortField;\n this.sortOrder = sortOrder;\n this.tenant = tenant;\n this.searchTenant = searchTenant;\n this.apiPath = apiPath;\n this.dtssPath = dtssPath;\n this.globalSearchRequestOptions = globalSearchRequestOptions;\n }\n\n private isDT = () => this.tenant !== this.searchTenant;\n\n private getQueryFilter = () => ({rawFilter: this.query});\n\n private getEntities = (filters = [], options = {}): Promise<Entity[]> => {\n const requestFilters = [this.getQueryFilter(), ...filters];\n const requestOptions = {\n ...this.globalSearchRequestOptions,\n sort: this.sortField,\n order: this.sortOrder,\n select: 'uri,label,type',\n scoreEnabled: false,\n ...options\n };\n return this.isDT()\n ? getFilteredEntitiesFromDataTenant({\n filters: requestFilters,\n options: requestOptions,\n customerTenant: this.tenant,\n dataTenant: this.searchTenant,\n dtssPath: this.dtssPath\n })\n : getFilteredEntities(requestFilters, requestOptions);\n };\n\n checkEntity = (uri): Promise<boolean> => {\n return this.getEntities(\n [\n {\n filter: 'equals',\n fieldName: 'uri',\n values: [uri]\n }\n ],\n {offset: 0, max: 1}\n ).then((entities) => {\n return entities && entities.length > 0 && entities[0].uri === uri;\n });\n };\n\n requestEntities = (max, offset): Promise<Entity[]> => {\n return this.getEntities([], {offset, max});\n };\n\n requestTotal = (): Promise<number> => {\n const filters = [this.getQueryFilter()];\n const options = this.globalSearchRequestOptions;\n return (this.isDT()\n ? getTotalFromDataTenant({\n filters,\n options,\n customerTenant: this.tenant,\n dataTenant: this.searchTenant,\n dtssPath: this.dtssPath\n })\n : getTotals(filters, options)\n ).then((json) => (json as TotalResponse).total);\n };\n}\n","import {\n Entity,\n getGraphSearchCount,\n getGraphSearchEntities,\n getEntityId,\n buildFilterQueryString\n} from '@reltio/mdm-sdk';\n\nimport {SearchProvider} from './SearchProvider';\n\nexport class GraphSearchProvider implements SearchProvider {\n private readonly searchBody;\n private readonly tenant;\n private readonly apiPath;\n\n constructor({data, tenant, apiPath}) {\n this.searchBody = data;\n this.tenant = tenant;\n this.apiPath = apiPath;\n }\n\n private getEntities = (filters = [], options = {}): Promise<Entity[]> => {\n const allFilters = [\n {\n rawFilter: this.searchBody.filter\n },\n ...filters\n ];\n return getGraphSearchEntities({\n apiPath: this.apiPath,\n tenant: this.tenant,\n searchBody: {\n ...this.searchBody,\n filter: filters.length ? buildFilterQueryString()(allFilters) : this.searchBody.filter\n },\n options\n });\n };\n\n checkEntity = (uri): Promise<boolean> => {\n return this.getEntities(\n [\n {\n filter: 'equals',\n fieldName: 'id',\n values: [getEntityId({uri})]\n }\n ],\n {from: 0, max: 1}\n ).then((entities) => {\n return entities && entities.length > 0 && entities[0].uri === uri;\n });\n };\n\n requestEntities = (max, from): Promise<Entity[]> => {\n return this.getEntities([], {from, max});\n };\n\n requestTotal = (): Promise<number> => {\n return getGraphSearchCount({\n apiPath: this.apiPath,\n tenant: this.tenant,\n searchBody: this.searchBody\n }).then((json) => json.count);\n };\n}\n","import {MainSearchProvider} from './MainSearchProvider';\nimport {GraphSearchProvider} from './GraphSearchProvider';\n\nexport const getSearchProvider = (type: string, options) => {\n switch (type) {\n case 'search':\n return new MainSearchProvider(options);\n case 'graphsearch':\n return new GraphSearchProvider(options);\n }\n};\n","import {useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {search as mdmModuleSearch, ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {getEntityUriForLink} from '@reltio/mdm-sdk';\nimport {map, pipe, prop, reject} from 'ramda';\nimport {ViewIdContext} from '../../../contexts';\nimport {useSafePromise} from '../../../hooks';\nimport {getSearchProvider} from '../searchProviders/SearchProviderFactory';\nimport {SearchNavigationData, SearchProviderData} from '../types';\n\nexport const REQUEST_PAGE_SIZE = 15;\n\nconst getNewUris = (entities, cache) =>\n pipe(\n map(prop('uri')),\n reject((uri) => cache.includes(uri))\n )(entities);\n\nconst useSearchNavigation = () => {\n const safeCheckEntityPromise = useSafePromise();\n const safeRequestTotalPromise = useSafePromise();\n const safeRequestEntitiesPromise = useSafePromise();\n const {uri, index, total, tenant: searchTenant, cache} =\n useSelector<unknown, SearchNavigationData>(mdmModule.selectors.getSearchNavigationData) || {};\n const {type, data} = useSelector<unknown, SearchProviderData>(mdmModule.selectors.getSearchProviderData) || {};\n const tenant = useSelector<unknown, string>(mdmModule.selectors.getTenant);\n const apiPath = useSelector<unknown, string>(mdmModule.selectors.getApiPath);\n const dtssPath = useSelector<unknown, string>(mdmModule.selectors.getDtssPath);\n const globalSearchRequestOptions = useSelector((state) =>\n mdmModule.selectors.getGlobalSearchRequestOptions(state, ['ovOnly'])\n );\n const viewId = useContext(ViewIdContext);\n const dispatch = useDispatch();\n const [loading, setLoading] = useState<boolean>(false);\n\n const searchProvider = useMemo(\n () => getSearchProvider(type, {data, tenant, searchTenant, apiPath, dtssPath, globalSearchRequestOptions}),\n [type, data, tenant, searchTenant, apiPath, dtssPath, globalSearchRequestOptions]\n );\n\n const updateNavigationData = useCallback(\n (data: Partial<SearchNavigationData>) => {\n dispatch(mdmModuleSearch.actions.updateSearchNavigationDataFields(data));\n },\n [dispatch]\n );\n\n const openEntity = useCallback(\n (uri: string) => {\n const preparedUri = tenant !== searchTenant ? getEntityUriForLink({uri, dataTenant: searchTenant}) : uri;\n dispatch(mdmModuleUi.actions.openEntity({uri: preparedUri, viewId, source: 'navigation'}));\n },\n [dispatch, viewId, tenant, searchTenant]\n );\n\n const onSearchResultsClick = useCallback(() => {\n dispatch(mdmModuleUi.actions.openPerspective({perspectiveId: type, viewId}));\n }, [dispatch, type, viewId]);\n\n useEffect(() => {\n if (index >= total) {\n updateNavigationData({\n index: total - 1\n });\n } else if (index < 0) {\n updateNavigationData({\n index: 0\n });\n }\n }, [total, index, updateNavigationData]);\n\n const requestNextPage = useCallback(\n (cache: string[], total: number, index: number): Promise<void> => {\n setLoading(true);\n safeRequestTotalPromise(searchProvider.requestTotal()).then((total) => updateNavigationData({total}));\n\n const newIndex = index + 1;\n return safeRequestEntitiesPromise(searchProvider.requestEntities(REQUEST_PAGE_SIZE, newIndex))\n .then((entities) => {\n if (!entities) {\n return;\n }\n if (entities.length) {\n const newUris = getNewUris(entities, cache);\n if (newUris.length > 0) {\n updateNavigationData({\n cache: cache.concat(newUris),\n uri: newUris[0],\n index: newIndex + entities.length - newUris.length\n });\n openEntity(newUris[0]);\n return;\n } else if (index + entities.length < total - 1) {\n return requestNextPage(cache, total - entities.length, index + entities.length);\n }\n }\n updateNavigationData({\n index: newIndex\n });\n })\n .finally(() => {\n setLoading(false);\n });\n },\n [searchProvider, updateNavigationData, openEntity]\n );\n\n const requestPrevPage = useCallback(\n (cache: string[], index: number): Promise<void> => {\n setLoading(true);\n safeRequestTotalPromise(searchProvider.requestTotal()).then((total) => updateNavigationData({total}));\n\n const newIndex = index - 1;\n const offset = Math.max(0, index - REQUEST_PAGE_SIZE);\n const max = REQUEST_PAGE_SIZE + Math.min(0, index - REQUEST_PAGE_SIZE);\n return safeRequestEntitiesPromise(searchProvider.requestEntities(max, offset))\n .then((entities) => {\n if (!entities) {\n return;\n }\n if (entities.length) {\n const newUris = getNewUris(entities, cache);\n if (newUris.length > 0) {\n updateNavigationData({\n cache: newUris.concat(cache),\n uri: newUris[newUris.length - 1],\n index: newIndex - (entities.length - newUris.length)\n });\n openEntity(newUris[newUris.length - 1]);\n return;\n } else if (index - entities.length > 0) {\n return requestPrevPage(cache, index - entities.length);\n }\n }\n updateNavigationData({\n index: 0\n });\n })\n .finally(() => {\n setLoading(false);\n });\n },\n [searchProvider, updateNavigationData, openEntity]\n );\n\n const stepForwardWithCheck = useCallback(\n (cache: string[], cacheIndex: number, total: number, index: number): Promise<void> | void => {\n if (cacheIndex < cache.length) {\n const uri = cache[cacheIndex];\n setLoading(true);\n return safeCheckEntityPromise(searchProvider.checkEntity(uri))\n .then((isExists) => {\n if (isExists) {\n updateNavigationData({\n index: index + 1,\n uri,\n cache,\n total\n });\n openEntity(uri);\n } else {\n const clearedCache = [...cache];\n clearedCache.splice(cacheIndex, 1);\n return stepForwardWithCheck(clearedCache, cacheIndex, total - 1, index);\n }\n })\n .finally(() => {\n setLoading(false);\n });\n } else if (index >= total - 1) {\n updateNavigationData({\n cache,\n total,\n index: total - 1\n });\n } else {\n return requestNextPage(cache, total, index);\n }\n },\n [searchProvider, updateNavigationData, openEntity, requestNextPage]\n );\n\n const stepBackWithCheck = useCallback(\n (cache: string[], cacheIndex: number, total: number, index: number): Promise<void> | void => {\n if (cacheIndex > -1) {\n const uri = cache[cacheIndex];\n setLoading(true);\n return safeCheckEntityPromise(searchProvider.checkEntity(uri))\n .then((isExists) => {\n if (isExists) {\n updateNavigationData({\n index: index - 1,\n uri,\n cache,\n total\n });\n openEntity(uri);\n } else {\n const clearedCache = [...cache];\n clearedCache.splice(cacheIndex, 1);\n return stepBackWithCheck(clearedCache, cacheIndex - 1, total - 1, index - 1);\n }\n })\n .finally(() => {\n setLoading(false);\n });\n } else if (index <= 0) {\n updateNavigationData({\n index: 0,\n cache,\n total\n });\n } else {\n return requestPrevPage(cache, index);\n }\n },\n [searchProvider, updateNavigationData, openEntity, requestPrevPage]\n );\n\n const onPrev = useCallback(() => {\n if (cache && uri) {\n const cacheIndex = cache.indexOf(uri) - 1;\n stepBackWithCheck(cache, cacheIndex, total, index);\n }\n }, [stepBackWithCheck, cache, uri, total, index]);\n\n const onNext = useCallback(() => {\n if (cache && uri) {\n const cacheIndex = cache.indexOf(uri) + 1;\n stepForwardWithCheck(cache, cacheIndex, total, index);\n }\n }, [stepForwardWithCheck, cache, uri, total, index]);\n\n const isPrevDisabled = loading || index <= 0;\n const isNextDisabled = loading || index >= total - 1;\n return {total, onPrev, onNext, onSearchResultsClick, isPrevDisabled, isNextDisabled};\n};\n\nexport {useSearchNavigation};\n","import React from 'react';\n\nimport {ProfileBandNavigationWidget} from './ProfileBandNavigationWidget';\nimport {useSearchNavigation} from './hooks/useSearchNavigation';\nimport {useSearchNavigationVisibility} from './hooks/useSearchNavigationVisibility';\n\nconst ProfileBandNavigation = () => {\n const {total, onPrev, onNext, onSearchResultsClick, isPrevDisabled, isNextDisabled} = useSearchNavigation();\n const isVisible = useSearchNavigationVisibility();\n return isVisible ? (\n <ProfileBandNavigationWidget\n total={total}\n onPrev={onPrev}\n onNext={onNext}\n onSearchResultsClick={onSearchResultsClick}\n isPrevDisabled={isPrevDisabled}\n isNextDisabled={isNextDisabled}\n />\n ) : null;\n};\n\nexport {ProfileBandNavigation};\n","import {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Entity, isViewMode} from '@reltio/mdm-sdk';\nimport {SearchNavigationData} from '../types';\n\nconst useSearchNavigationVisibility = () => {\n const {cache} = useSelector<unknown, SearchNavigationData>(mdmModule.selectors.getSearchNavigationData) || {};\n const mode = useSelector<unknown, string>(mdmModule.selectors.getMode);\n const entity = useSelector<unknown, Entity>(mdmModule.selectors.getEntity);\n\n return isViewMode(mode) && cache?.includes(entity?.uri);\n};\n\nexport {useSearchNavigationVisibility};\n","import React, {useMemo, memo} from 'react';\nimport i18n from 'ui-i18n';\nimport {isAvailableRelationType, TRelationType} from '@reltio/mdm-sdk';\nimport {MetadataTypesSelector} from '../MetadataTypesSelector/MetadataTypesSelector';\n\ntype MetadataTypesSelectorProps = React.ComponentProps<typeof MetadataTypesSelector>;\n\ntype Props = {\n relationTypes: TRelationType[];\n selectedRelationTypes: string[];\n enableEmptyValueUnderline?: boolean;\n onChange: (values: string[]) => void;\n single?: boolean;\n placeholder?: string;\n classes?: MetadataTypesSelectorProps['classes'];\n ListLabelProps?: MetadataTypesSelectorProps['ListLabelProps'];\n disabled?: boolean;\n};\n\nexport const RelationTypesSelector = memo(\n ({\n relationTypes,\n selectedRelationTypes,\n single,\n placeholder,\n enableEmptyValueUnderline,\n onChange,\n classes = {},\n ListLabelProps = {},\n disabled = false\n }: Props) => {\n const items = useMemo(() => relationTypes.filter(isAvailableRelationType), [relationTypes]);\n\n return (\n <MetadataTypesSelector\n items={items}\n selectedItemsUris={selectedRelationTypes}\n single={single}\n placeholder={placeholder}\n enableEmptyValueUnderline={enableEmptyValueUnderline}\n onChange={onChange}\n classes={classes}\n ListLabelProps={ListLabelProps}\n disabled={disabled}\n label={i18n.text('Relation type')}\n dataReltioId=\"relation-type-selector\"\n selectionPopupTitle={i18n.text('Select relation types')}\n />\n );\n }\n);\n\nRelationTypesSelector.displayName = 'RelationTypesSelector';\n","import {fade, makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0,\n width: '64px',\n paddingTop: '8px',\n backgroundColor: theme.palette.background.paper,\n boxShadow: '0 1px 1px 0 rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12), 0 1px 3px 0 rgba(0,0,0,0.2)'\n },\n active: {\n backgroundColor: fade(theme.palette.primary.main, 0.12),\n color: theme.palette.primary.main,\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n height: '42px',\n width: '3px',\n backgroundColor: theme.palette.primary.main,\n left: '-8px',\n borderRadius: '0 6px 6px 0'\n }\n },\n buttonWrapper: {\n position: 'relative',\n width: '48px',\n height: '44px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '6px',\n margin: '2px 8px',\n color: theme.palette.text.secondary\n }\n}));\n","import React, {VFC, ElementType} from 'react';\nimport classnames from 'classnames';\nimport {IconButtonProps} from '@material-ui/core/IconButton';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n buttonsProps: {\n icon: ElementType;\n tooltipTitle: string;\n id: number;\n }[];\n classes?: {active?: string; buttonWrapper?: string} & IconButtonProps['classes'];\n activeIndexId: number;\n className?: string;\n onButtonClick: (id: number) => void;\n};\n\nexport const SideButtonsPanel: VFC<Props> = ({buttonsProps, activeIndexId, className, onButtonClick, classes = {}}) => {\n const styles = useStyles();\n const {active, buttonWrapper, ...iconButtonClasses} = classes;\n\n return (\n <div className={classnames(styles.container, className)}>\n {buttonsProps.map(({id, ...buttonProps}) => {\n return (\n <SmallIconButtonWithTooltip\n {...buttonProps}\n classes={iconButtonClasses}\n size=\"S\"\n key={id}\n className={classnames(\n {[classnames(styles.active, active)]: activeIndexId === id},\n styles.buttonWrapper,\n buttonWrapper\n )}\n onClick={() => onButtonClick(id)}\n data-reltio-id={`reltio-profile-right-side-button-${id}`}\n />\n );\n })}\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n contentWrapper: {\n display: 'flex',\n flexDirection: 'column',\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 marginLeft: '3px',\n transition: theme.transitions.create(['width'], {\n duration: theme.transitions.duration.enteringScreen\n })\n }\n}));\n","import React, {ReactNode, VFC} from 'react';\nimport {useStyles} from './styles';\n\ntype Props = {\n width: number;\n open: boolean;\n children: ReactNode;\n};\n\nexport const SidePanel: VFC<Props> = ({width, open, children}) => {\n const styles = useStyles();\n return (\n <div\n className={styles.contentWrapper}\n style={{\n width: `${open ? width : 0}px`\n }}\n >\n {open && <>{children}</>}\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n attributesContainer: {\n padding: '0 16px 16px 16px'\n },\n header: {\n marginBottom: '4px'\n },\n noCaption: {\n paddingTop: '16px'\n },\n noData: {\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)'\n }\n});\n","import {connect} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {AttributesViewStateProps} from '../../types';\nimport AttributesView from './AttributesView';\n\nconst mapStateToProps = (state): AttributesViewStateProps => ({\n metadata: mdmModule.selectors.getMetadata(state)\n});\n\nexport {AttributesView};\n\nexport default connect(mapStateToProps)(AttributesView);\n","import React, {useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {Entity, getAttributesListForReadMode, isEmptyValue, PivotingAttribute} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {Box as Box} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {PivotingAttributeContext} from '../../../../contexts';\nimport BasicView from '../../../BasicView/BasicView';\nimport FacetViewHeader from '../../../FacetViewHeader/FacetViewHeader';\nimport AttributesList from '../AttributesList';\nimport {AttributesViewProps} from '../../types';\nimport {getFilteredAttrTypes} from '../../helpers/attributesView';\nimport {useStyles} from './styles';\n\ntype Props = Omit<AttributesViewProps, 'mode'>;\n\nconst AttributesView = ({\n className,\n entity = {} as Entity,\n metadata,\n caption = '',\n excludeUris = [],\n includeUris = [],\n attributesCount = 16\n}: Props) => {\n const styles = useStyles();\n const pivotingAttributes: PivotingAttribute[] = useSelector(mdm.selectors.getPivotingAttributes);\n\n const filteredAttrTypes = useMemo(() => getFilteredAttrTypes(metadata, entity.type, includeUris, excludeUris), [\n excludeUris,\n includeUris,\n metadata,\n entity.type\n ]);\n\n const attributesList = getAttributesListForReadMode(filteredAttrTypes, entity);\n\n const isShowAttributeList = attributesList.filter(({values}) => !isEmptyValue(values)).length > 0;\n\n return isShowAttributeList || !isEmptyValue(caption) ? (\n <PivotingAttributeContext.Provider value={pivotingAttributes}>\n <BasicView className={className}>\n {caption && <FacetViewHeader className={styles.header} title={caption} />}\n <Box className={classnames(styles.attributesContainer, {[styles.noCaption]: !caption})}>\n {isShowAttributeList ? (\n <AttributesList\n entity={entity}\n attrTypes={filteredAttrTypes}\n parentUri={entity.uri}\n drawLines={false}\n max={attributesCount}\n />\n ) : (\n <Typography className={styles.noData}>{i18n.text('No data found')}</Typography>\n )}\n </Box>\n </BasicView>\n </PivotingAttributeContext.Provider>\n ) : null;\n};\n\nexport default AttributesView;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n attributesContainer: {\n padding: '0 16px 16px 16px'\n },\n header: {\n marginBottom: '4px'\n },\n noCaption: {\n paddingTop: '16px'\n }\n});\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport {pipe} from 'ramda';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {Entity, isTempUri, getPinnedAttributesForUser, AttributeItem} from '@reltio/mdm-sdk';\nimport {Box as Box} from '@material-ui/core';\nimport BasicView from '../../../BasicView/BasicView';\nimport FacetViewHeader from '../../../FacetViewHeader/FacetViewHeader';\nimport AttributesList from '../AttributesList';\nimport {ViewIdContext} from '../../../../contexts';\nimport {AttributesViewProps} from '../../types';\nimport {getFilteredAttrTypes} from '../../helpers/attributesView';\nimport {PinnedAttributesContext} from '../contexts/PinnedAttributesContext';\nimport {useStyles} from './styles';\n\ntype Props = Omit<AttributesViewProps, 'attributesCount'>;\n\nconst AttributesView = ({\n className,\n entity = {} as Entity,\n mode,\n metadata,\n caption = '',\n excludeUris = [],\n includeUris = [],\n pinnedAttributes\n}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const userRoles = useSelector(mdmModule.selectors.getUserRoles);\n const pinnedAttributeUris = useMemo(() => getPinnedAttributesForUser(pinnedAttributes, userRoles), [\n pinnedAttributes,\n userRoles\n ]);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entity.uri) || ({} as Entity)\n );\n\n const filteredAttrTypes = useMemo(\n () => getFilteredAttrTypes(metadata, modifiedEntity.type, includeUris, excludeUris),\n [excludeUris, includeUris, metadata, modifiedEntity.type]\n );\n\n const onAddAttributes = useCallback(\n (params: AttributeItem[]) =>\n pipe(profile.actions.addAttributes, dispatch)(params.map((param) => ({...param, viewId}))),\n [viewId, dispatch]\n );\n\n const onChangeAttribute = useCallback(\n (params: AttributeItem) => pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const onDeleteAttribute = useCallback(\n (params: AttributeItem) => pipe(profile.actions.removeAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n return (\n <BasicView className={className}>\n {caption && <FacetViewHeader className={styles.header} title={caption} />}\n <Box className={classnames(styles.attributesContainer, {[styles.noCaption]: !caption})}>\n <PinnedAttributesContext.Provider value={pinnedAttributeUris}>\n <AttributesList\n entity={modifiedEntity}\n attrTypes={filteredAttrTypes}\n parentUri={modifiedEntity.uri}\n drawLines={false}\n mode={mode}\n showEmptyEditors={isTempUri(modifiedEntity.uri)}\n crosswalks={modifiedEntity.crosswalks}\n onAddAttributes={onAddAttributes}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onDeleteAttribute}\n />\n </PinnedAttributesContext.Provider>\n </Box>\n </BasicView>\n );\n};\n\nexport default AttributesView;\n","import {connect} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {AttributesViewStateProps} from '../../types';\nimport AttributesView from './AttributesView';\n\nconst mapStateToProps = (state): AttributesViewStateProps => ({\n metadata: mdmModule.selectors.getMetadata(state)\n});\n\nexport {AttributesView};\n\nexport default connect(mapStateToProps)(AttributesView);\n","import React from 'react';\nimport {isViewMode, Mode} from '@reltio/mdm-sdk';\nimport {AttributesViewOwnProps} from '../types';\nimport ReadModeAttributesView from '../readMode/AttributesView';\nimport EditModeAttributesView from '../editMode/AttributesView';\nimport {EntityContext} from '../../../contexts';\n\nconst AttributesView = ({\n mode = Mode.Viewing,\n attributesCount,\n pinnedAttributes,\n entity,\n ...restProps\n}: AttributesViewOwnProps) => {\n return (\n <EntityContext.Provider value={entity}>\n {isViewMode(mode) ? (\n <ReadModeAttributesView attributesCount={attributesCount} entity={entity} {...restProps} />\n ) : (\n <EditModeAttributesView\n mode={mode}\n pinnedAttributes={pinnedAttributes}\n entity={entity}\n {...restProps}\n />\n )}\n </EntityContext.Provider>\n );\n};\n\nexport default AttributesView;\n","import {connect} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {AttributesViewOwnProps} from '../types';\nimport AttributesView from './AttributesView';\n\ntype Props = Pick<AttributesViewOwnProps, 'entity' | 'mode'>;\n\nconst mapStateToProps = (state, ownProps: Props): Props => ({\n entity: ownProps.entity || mdm.selectors.getEntityWithDiff(state),\n mode: ownProps.mode || mdm.selectors.getMode(state)\n});\n\nexport {AttributesView};\n\nexport default connect(mapStateToProps)(AttributesView);\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst iconsWidth = '68px';\n\nexport const useOptionStyles = makeStyles({\n container: {\n display: 'flex',\n alignItems: 'center',\n height: '32px',\n minHeight: '32px',\n padding: 0\n },\n text: {\n display: 'flex',\n width: `calc(100% - ${iconsWidth})`\n },\n textItem: {\n fontSize: '13px',\n lineHeight: '15px',\n marginRight: 10\n },\n primaryTextItem: {\n flex: '1 0',\n flexBasis: 0,\n maxWidth: '50%',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n secondaryTextItem: {\n flex: '1 0',\n flexBasis: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n icons: {\n transform: 'scale(0.5)',\n position: 'relative',\n flexShrink: 0,\n width: iconsWidth,\n bottom: '10px'\n },\n iconTop: {\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: 1\n },\n iconBottom: {\n position: 'absolute',\n top: 0,\n left: 26,\n zIndex: 0\n }\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport {MenuItem as MenuItem} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {useOptionStyles} from './styles';\nimport EntityTypeIcon from '../../../../EntityTypeIcon/EntityTypeIcon';\nimport ExpandedValueTooltip from '../../../../ExpandedValueTooltip/ExpandedValueTooltip';\n\nconst RelationOption = ({innerRef, innerProps, selectOption, data}) => {\n const styles = useOptionStyles();\n const {value, label, startObject, endObject} = data;\n const secondaryLabel = startObject.objectType.label + ' \\u2194 ' + endObject.objectType.label;\n return (\n <MenuItem\n className={styles.container}\n ref={innerRef}\n key={value}\n onClick={() => selectOption({label, value, startObject, endObject})}\n {...innerProps}\n >\n <div className={styles.icons}>\n <EntityTypeIcon className={styles.iconTop} entityType={startObject.objectType} />\n <EntityTypeIcon className={styles.iconBottom} entityType={endObject.objectType} />\n </div>\n <div className={styles.text}>\n <ExpandedValueTooltip value={label}>\n <Typography className={classnames(styles.textItem, styles.primaryTextItem)}>{label}</Typography>\n </ExpandedValueTooltip>\n <ExpandedValueTooltip value={secondaryLabel}>\n <Typography color=\"textSecondary\" className={classnames(styles.textItem, styles.secondaryTextItem)}>\n {secondaryLabel}\n </Typography>\n </ExpandedValueTooltip>\n </div>\n </MenuItem>\n );\n};\n\nRelationOption.propTypes = {\n innerRef: PropTypes.oneOfType([\n PropTypes.oneOf([null]),\n PropTypes.func,\n PropTypes.shape({\n current: PropTypes.any.isRequired\n })\n ]),\n innerProps: PropTypes.object.isRequired,\n selectOption: PropTypes.func.isRequired,\n data: PropTypes.shape({\n value: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n startObject: PropTypes.object,\n endObject: PropTypes.object\n })\n};\n\nexport default RelationOption;\n","import React, {useMemo} from 'react';\nimport PropTypes from 'prop-types';\nimport i18n from 'ui-i18n';\nimport {identity, defaultTo} from 'ramda';\nimport RelationOption from './components/RelationOption';\nimport DropDownSelector from '../../../DropDownSelector/DropDownSelector';\n\nconst RelationTypeSelector = ({value = {}, options = [], onChange = identity, TextFieldProps, ...otherProps}) => {\n const textFieldProps = useMemo(\n () => ({\n ...defaultTo({}, TextFieldProps),\n ['data-reltio-id']: 'relation-type-selector'\n }),\n [TextFieldProps]\n );\n return (\n <DropDownSelector\n value={value}\n options={options}\n onChange={onChange}\n label={i18n.text('Select relationship type ')}\n components={{Option: RelationOption}}\n TextFieldProps={textFieldProps}\n {...otherProps}\n />\n );\n};\n\nconst ValueType = PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n startObject: PropTypes.object,\n endObject: PropTypes.object\n});\n\nRelationTypeSelector.propTypes = {\n value: ValueType,\n options: PropTypes.arrayOf(ValueType),\n onChange: PropTypes.func\n};\n\nexport default RelationTypeSelector;\n","import {useCallback} from 'react';\n\nimport {\n Relation,\n EditingConnection,\n isAvailableRelationBetweenEntities,\n Directions,\n getRelationType,\n removeEntityAttribute,\n addEntityAttributes,\n changeEntityAttribute,\n AttributeItem,\n Entity\n} from '@reltio/mdm-sdk';\n\nimport {pipe} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\n\ntype EditRelationActions = {\n onChangeAttribute: (attribute: AttributeItem) => void;\n onAddAttributes: (attributes: AttributeItem[]) => void;\n onRemoveAttribute: (attributes: AttributeItem) => void;\n onChangeEntity: (entity: Entity) => void;\n onChangeRelationType: (value: {type: string; direction: string}) => void;\n};\n\ntype Props = {\n connection: EditingConnection;\n onConnectionChange: (connection: EditingConnection) => void;\n relatedEntity?: Entity;\n};\n\nexport const useEditableConnection = ({connection, onConnectionChange, relatedEntity}: Props): EditRelationActions => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n\n const onRelationChange = useCallback((relation: Relation) => onConnectionChange({...connection, relation}), [\n connection,\n onConnectionChange\n ]);\n\n const handleAddAttributes = useCallback(pipe(addEntityAttributes(connection.relation), onRelationChange), [\n connection.relation,\n onRelationChange\n ]);\n\n const handleChangeAttribute = useCallback(pipe(changeEntityAttribute(connection.relation), onRelationChange), [\n connection.relation,\n onRelationChange\n ]);\n\n const handleRemoveAttribute = useCallback(pipe(removeEntityAttribute(connection.relation), onRelationChange), [\n connection.relation,\n onRelationChange\n ]);\n\n const handleChangeRelationType = useCallback(\n ({type, direction}) => {\n const newConnection: EditingConnection = {\n entity:\n connection.entity &&\n isAvailableRelationBetweenEntities(\n direction === Directions.OUT,\n connection.entity,\n relatedEntity,\n metadata,\n getRelationType(metadata, type)\n )\n ? connection.entity\n : null,\n relation: {\n ...connection.relation,\n attributes: {},\n type,\n direction\n }\n };\n\n onConnectionChange(newConnection);\n },\n [connection, onConnectionChange, relatedEntity, metadata]\n );\n\n const handleChangeEntity = useCallback((entity) => onConnectionChange({...connection, entity}), [\n connection,\n onConnectionChange\n ]);\n\n return {\n onAddAttributes: handleAddAttributes,\n onChangeAttribute: handleChangeAttribute,\n onRemoveAttribute: handleRemoveAttribute,\n onChangeEntity: handleChangeEntity,\n onChangeRelationType: handleChangeRelationType\n };\n};\n","import {useCallback} from 'react';\nimport {Directions, getDirectionalLabelFromObject} from '@reltio/mdm-sdk';\nimport {ascend, curry, evolve, pipe, prop, propEq, propOr, tap} from 'ramda';\n\nexport const useRelationTypeSelector = ({reversedContextLabels}) => {\n const getRelationTypesOptions = useCallback(\n (inRelations, outRelations) => {\n const labelsMap = {};\n const addLabelInMap = (label) => (labelsMap[label] = propOr(0, label, labelsMap) + 1);\n const getDirectionalLabel = pipe(getDirectionalLabelFromObject, tap(addLabelInMap));\n const byLabel = ascend(prop('label'));\n\n const prepareRelation = curry((direction, {uri, label, startObject, endObject}) => {\n const dirObject =\n direction === (reversedContextLabels ? Directions.OUT : Directions.IN) ? startObject : endObject;\n return {\n label: {directionalLabel: getDirectionalLabel(dirObject), typeLabel: label},\n value: `${uri},${direction}`,\n startObject,\n endObject\n };\n });\n\n return inRelations\n .map(prepareRelation(Directions.IN))\n .concat(outRelations.map(prepareRelation(Directions.OUT)))\n .map(\n evolve({\n label: ({directionalLabel, typeLabel}) => {\n return directionalLabel\n ? labelsMap[directionalLabel] > 1\n ? `${directionalLabel} (${typeLabel})`\n : directionalLabel\n : typeLabel;\n }\n })\n )\n .sort(byLabel);\n },\n [reversedContextLabels]\n );\n\n const fromEditorValue = useCallback(\n (inRelationTypes, outRelationTypes) => (relation) => {\n const [uri, direction] = relation.value.split(',');\n const type = (direction === Directions.IN ? inRelationTypes : outRelationTypes).find(propEq('uri', uri));\n return {type, direction};\n },\n []\n );\n\n const toEditorValue = useCallback(\n (relation, relationsTypesOptions) =>\n relationsTypesOptions.find(propEq('value', `${relation.relationType},${relation.direction}`)),\n []\n );\n\n return {\n getRelationTypesOptions,\n fromEditorValue,\n toEditorValue\n };\n};\n","import Graph from 'graphology';\nimport {\n always,\n append,\n chain,\n cond,\n either,\n equals,\n evolve,\n includes,\n map,\n pick,\n pipe,\n prop,\n propEq,\n reject,\n T,\n uniq,\n without\n} from 'ramda';\nimport {bidirectional} from 'graphology-shortest-path';\nimport {toUndirected} from 'graphology-operators';\nimport {\n getEndObjectUri,\n getRelationType,\n getStartObjectUri,\n HopEntity,\n HopRelation,\n HopsResponse,\n Metadata,\n Relation,\n TRelationType\n} from '@reltio/mdm-sdk';\n\nconst addRelationToHopsData = (data: HopsResponse, respondedRelation: Relation, metadata: Metadata): HopsResponse => {\n const startEntityUri = respondedRelation.startObject.objectURI;\n const endEntityUri = respondedRelation.endObject.objectURI;\n const nodeUris = [startEntityUri, endEntityUri];\n const entitiesUris = data.entities.map(prop('uri'));\n const relationType: TRelationType = getRelationType(metadata, respondedRelation.type);\n\n const extraEntityUri = nodeUris.find((node) => !includes(node, entitiesUris));\n const extraEntity =\n extraEntityUri &&\n (respondedRelation.startObject.objectURI === extraEntityUri\n ? respondedRelation.startObject\n : respondedRelation.endObject);\n\n const extraEntityFormatted = extraEntity && {\n type: extraEntity.type,\n label: extraEntity.label,\n uri: extraEntity.objectURI,\n traversedRelations: 0,\n untraversedRelations: 1\n };\n\n const relation: HopRelation = {\n ...pick(['uri', 'type', 'attributes', 'startDate', 'endDate', 'crosswalks', 'direction'], respondedRelation),\n startObject: pick(['objectURI', 'directionalLabel'], respondedRelation.startObject),\n endObject: pick(['objectURI', 'directionalLabel'], respondedRelation.endObject),\n direction: relationType?.direction\n };\n\n const updateTraversedRelationsCount = (entity) => {\n if (entity.uri === startEntityUri || entity.uri === endEntityUri) {\n return {\n ...entity,\n traversedRelations: entity.traversedRelations + 1\n };\n }\n return entity;\n };\n\n const newData = {\n entities: (extraEntityFormatted ? data.entities.concat([extraEntityFormatted]) : data.entities).map(\n updateTraversedRelationsCount\n ),\n relations: (data.relations || []).concat([relation])\n };\n\n return newData;\n};\n\nconst removeRelationFromHopsData = (\n entityUri: string,\n relationUri: string,\n graph: Graph,\n data: HopsResponse\n): {updatedData: HopsResponse; removedEntitiesUris: string[]} => {\n const relation = data.relations.find(propEq('uri', relationUri));\n const startNodeId: string = getStartObjectUri(relation);\n const endNodeId: string = getEndObjectUri(relation);\n const undirectedGraph = toUndirected(graph);\n const isolatedNodeId: string = cond([\n [() => !bidirectional(undirectedGraph, entityUri, startNodeId), always(startNodeId)],\n [() => !bidirectional(undirectedGraph, entityUri, endNodeId), always(endNodeId)],\n [T, always(null)]\n ])();\n\n const updateTraversedRelationsCount = (entity) => {\n if (entity.uri === startNodeId || entity.uri === endNodeId) {\n return {\n ...entity,\n traversedRelations: entity.traversedRelations - 1\n };\n }\n return entity;\n };\n\n const dataWithoutRelation: HopsResponse = evolve({\n entities: map(updateTraversedRelationsCount),\n relations: reject(propEq('uri', relationUri))\n })(data);\n const {updatedData, removedEntitiesUris} = isolatedNodeId\n ? removeIsolatedSubgraph(isolatedNodeId, dataWithoutRelation)\n : {\n updatedData: dataWithoutRelation,\n removedEntitiesUris: []\n };\n return {updatedData, removedEntitiesUris};\n};\n\nconst removeIsolatedSubgraph = (isolatedNodeId: string, data: HopsResponse) => {\n const isolatedRelations = findSubgraphRelations(isolatedNodeId, data);\n const isolatedEntitiesUris: string[] = pipe(\n getAllRelatedEntitiesUris,\n append(isolatedNodeId),\n uniq\n )(isolatedRelations);\n const updatedData: HopsResponse = evolve({\n relations: reject((relation) => isolatedRelations.includes(relation)),\n entities: reject((entity) => isolatedEntitiesUris.includes(entity.uri))\n })(data);\n return {\n updatedData,\n removedEntitiesUris: isolatedEntitiesUris\n };\n};\n\nconst findSubgraphRelations = (\n nodeId: string,\n data: HopsResponse,\n foundRelations: HopRelation[] = []\n): HopRelation[] => {\n const relations = data.relations\n .filter((relation) => !foundRelations.includes(relation))\n .filter(either(pipe(getStartObjectUri, equals(nodeId)), pipe(getEndObjectUri, equals(nodeId))));\n foundRelations.push(...relations);\n const relatedNodes: string[] = pipe(getAllRelatedEntitiesUris, without([nodeId]))(relations);\n relatedNodes.forEach((relatedNodeId) => findSubgraphRelations(relatedNodeId, data, foundRelations));\n return foundRelations;\n};\n\nconst getAllRelatedEntitiesUris = (relations: HopRelation[]): string[] =>\n pipe(\n chain((relation) => [getStartObjectUri(relation), getEndObjectUri(relation)]),\n uniq\n )(relations);\n\nconst mergeHopsData = (data: HopsResponse, newData: HopsResponse, hopsEntityUri: string) => {\n const {entities: hopsEntities = [], relations: hopsRelations = []} = newData;\n\n const newEntities = hopsEntities.reduce(\n (entities: HopEntity[], entity: HopEntity): HopEntity[] => {\n if (!entities.some(({uri}) => uri === entity.uri)) {\n entities.push(entity);\n } else if (entity.uri === hopsEntityUri) {\n const index = entities.findIndex(({uri}) => uri === hopsEntityUri);\n\n entities[index] = {\n ...entities[index],\n traversedRelations: entity.traversedRelations,\n untraversedRelations: entity.untraversedRelations\n };\n }\n return entities;\n },\n [...(data.entities || [])]\n );\n\n const newRelations = hopsRelations.reduce(\n (relations: HopRelation[], relation: HopRelation): HopRelation[] => {\n if (!relations.some(({uri}) => uri === relation.uri)) {\n relations.push(relation);\n }\n\n return relations;\n },\n [...(data.relations || [])]\n );\n\n return {\n entities: newEntities,\n relations: newRelations\n };\n};\n\nexport {addRelationToHopsData, removeRelationFromHopsData, mergeHopsData};\n","import Graph from 'graphology';\nimport {toUndirected} from 'graphology-operators';\nimport {bidirectional} from 'graphology-shortest-path';\nimport {uniq} from 'ramda';\nimport {HopsResponse, getLabel} from '@reltio/mdm-sdk';\nimport processResponseToGraph from './processResponseToGraph';\n\nexport const fillGraphWithHopsResponse = (graph: Graph, data: HopsResponse) => {\n const graphologyData = processResponseToGraph(data);\n graphologyData.nodes.forEach((node) => {\n if (!graph.hasNode(node.id)) {\n graph.addNode(node.id, {\n label: getLabel(node.name),\n entityTypeUri: node.entityTypeUri,\n traversedRelationsCount: node.traversedRelationsCount,\n untraversedRelationsCount: node.untraversedRelationsCount,\n x: 1,\n y: 1\n });\n }\n });\n graphologyData.edges.forEach((edge) => {\n const isSelfRelation = edge.from === edge.to;\n\n if (!graph.hasEdge(edge.key)) {\n graph.addEdgeWithKey(edge.key, edge.from, edge.to, {\n size: 1,\n color: 'rgba(0, 0, 0, 0.2)',\n forceLabel: isSelfRelation,\n loop: isSelfRelation,\n relationTypeUri: edge.relationTypeUri,\n direction: edge.direction\n });\n }\n });\n};\n\nexport const removeNodesFromGraph = (graph: Graph, nodesIdsToRemove?: string[]) => {\n (nodesIdsToRemove || []).forEach((id) => {\n graph.dropNode(id);\n });\n};\n\nconst getIsolatedNodeId = (undirectedGraph: Graph, firstNode: string, secondaryNode: string) => {\n return !bidirectional(undirectedGraph, firstNode, secondaryNode) ? secondaryNode : null;\n};\n\nconst findSubgraphNodes = (nodeId: string, graph: Graph, foundNodes: string[] = []): string[] => {\n const nodes = graph.neighbors(nodeId).filter((node) => !foundNodes.includes(node));\n foundNodes.push(...nodes);\n nodes.forEach((neighborNodeId) => findSubgraphNodes(neighborNodeId, graph, foundNodes));\n return foundNodes;\n};\n\nexport const getIsolatedNodes = (entityUri: string, mainNode: string, nodes: string[], graph: Graph) => {\n const undirectedGraph = toUndirected(graph);\n\n const dropEdge = (firstNode: string, secondNode: string) => {\n const edges = undirectedGraph.filterEdges(firstNode, secondNode, (x) => !!x);\n edges.forEach((edge) => undirectedGraph.dropEdge(edge));\n };\n\n nodes.forEach((node) => {\n dropEdge(mainNode, node);\n undirectedGraph.forEachNeighbor(node, (neighborNode) => {\n dropEdge(node, neighborNode);\n });\n });\n\n const isolatedNodes = [];\n undirectedGraph.nodes().forEach((node) => {\n if (getIsolatedNodeId(undirectedGraph, entityUri, node)) {\n isolatedNodes.push(node);\n }\n });\n\n return uniq(\n isolatedNodes.reduce((nodes, isolatedNode) => findSubgraphNodes(isolatedNode, undirectedGraph, nodes), [\n ...isolatedNodes\n ])\n );\n};\n","import {HopsResponse, RelationTypeDirection} from '@reltio/mdm-sdk';\nimport {Node, Edge, GraphologyGraphData} from '../types/graphDataTypes';\n\nconst processResponseToGraph = (data: HopsResponse): GraphologyGraphData => {\n const nodesSet = new Set<string>();\n const relationsSet = new Set<string>();\n data.entities.forEach((entity) => nodesSet.add(entity.uri));\n const filteredRelations =\n data.relations?.filter(\n (relation) => nodesSet.has(relation.startObject.objectURI) && nodesSet.has(relation.endObject.objectURI)\n ) || [];\n filteredRelations.forEach((relation) => {\n relationsSet.add(\n `${relation.startObject.objectURI}--${relation.endObject.objectURI}--${relation.uri}--${relation.type}--${relation.direction}`\n );\n });\n const nodes: Node[] = data.entities.map((entity) => ({\n id: entity.uri,\n name: entity.label,\n entityTypeUri: entity.type,\n traversedRelationsCount: entity.traversedRelations,\n untraversedRelationsCount: entity.untraversedRelations\n }));\n const edges: Edge[] = [];\n relationsSet.forEach((relationKey) => {\n const [from, to, key, relationTypeUri, direction] = relationKey.split('--');\n edges.push({from, to, key, relationTypeUri, direction: direction as RelationTypeDirection});\n });\n return {nodes, edges};\n};\n\nexport default processResponseToGraph;\n","import {useCallback, useEffect, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport Graph, {MultiGraph} from 'graphology';\nimport {difference, prop} from 'ramda';\nimport {\n Entity,\n getHops,\n getRequestErrorMessage,\n HopsResponse,\n isDataTenantEntity,\n isTempUri,\n getLastUriPart,\n createRelation,\n removeRelation,\n Relation,\n Metadata\n} from '@reltio/mdm-sdk';\nimport i18n from 'ui-i18n';\nimport mdmModule, {ui} from '@reltio/mdm-module';\n\nimport {GraphPathType, GraphState} from '../types/graphDataTypes';\nimport {addRelationToHopsData, removeRelationFromHopsData, mergeHopsData} from '../utils/hopsData';\nimport {fillGraphWithHopsResponse, getIsolatedNodes, removeNodesFromGraph} from '../utils/graph';\nimport {useSafePromise} from '@reltio/components';\n\nexport const useGraphLoader = (\n entity: Entity\n): Pick<\n GraphState,\n | 'graphLoading'\n | 'data'\n | 'graphTypeUri'\n | 'setGraphTypeUri'\n | 'onAddRelation'\n | 'onDeleteRelation'\n | 'onCollapseEntity'\n | 'onExpandEntity'\n | 'graphologyGraph'\n> => {\n const [graphTypeUri, setGraphTypeUri] = useState(null);\n const [graphologyGraph, setGraphologyGraph] = useState<Graph>(null);\n const dispatch = useDispatch();\n const [data, setData] = useState<HopsResponse>(null);\n const [loading, setLoading] = useState(false);\n const entityUri = entity?.uri;\n const isDTEntity = isDataTenantEntity(entity);\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n\n const safePromise = useSafePromise();\n\n const loadHopsForEntity = useCallback(\n (uri: string, deep = 1) => {\n return safePromise(\n getHops({\n uri,\n deep,\n limitCreditsConsumption: true,\n graphTypes: graphTypeUri ? [getLastUriPart(graphTypeUri)] : null,\n activenessDate: null,\n max: graphTypeUri ? 200 : 3000\n })\n );\n },\n [graphTypeUri, safePromise]\n );\n\n useEffect(() => {\n if (entityUri && !isTempUri(entityUri) && !isDTEntity) {\n setLoading(true);\n getHops({\n uri: entityUri,\n deep: graphTypeUri ? 2 : 1,\n limitCreditsConsumption: true,\n graphTypes: graphTypeUri ? [getLastUriPart(graphTypeUri)] : null,\n activenessDate: null,\n max: graphTypeUri ? 200 : 3000\n })\n .then((data) => {\n const graph = new MultiGraph();\n fillGraphWithHopsResponse(graph, data);\n setGraphologyGraph(graph);\n setData(data);\n })\n .catch((error) => {\n console.error(error);\n setData(null);\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n })\n .finally(() => {\n setLoading(false);\n });\n }\n\n return () => {\n setGraphologyGraph(null);\n setData(null);\n setLoading(false);\n };\n }, [entityUri, isDTEntity, dispatch, graphTypeUri]);\n\n const onAddRelation = useCallback(\n ({startEntityUri, endEntityUri, relationType, attributes, startDate, endDate}) => {\n setLoading(true);\n return createRelation({\n startEntityUri,\n endEntityUri,\n relationType,\n attributes,\n startDate,\n endDate\n })\n .then((response) => {\n if (!response?.[0]?.successful) {\n throw response?.[0];\n }\n const respondedRelation: Relation = response[0].object;\n const newData = addRelationToHopsData(data, respondedRelation, metadata);\n fillGraphWithHopsResponse(graphologyGraph, newData);\n\n const extremities = [\n respondedRelation.startObject.objectURI,\n respondedRelation.endObject.objectURI\n ];\n const entitiesUris = data.entities.map(prop('uri'));\n\n extremities.map((node) => {\n if (entitiesUris.includes(node)) {\n const traversedRelationsCount = graphologyGraph.getNodeAttribute(\n node,\n 'traversedRelationsCount'\n );\n graphologyGraph.setNodeAttribute(\n node,\n 'traversedRelationsCount',\n traversedRelationsCount + 1\n );\n }\n });\n\n setData(newData);\n })\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n throw error;\n })\n .finally(() => {\n setLoading(false);\n });\n },\n [dispatch, data, graphologyGraph, metadata]\n );\n\n const onDeleteRelation = useCallback(\n (uri: string) => {\n setLoading(true);\n removeRelation(uri)\n .then(() => {\n const extremities = graphologyGraph.extremities(uri);\n extremities.map((node) => {\n const traversedRelationsCount = graphologyGraph.getNodeAttribute(\n node,\n 'traversedRelationsCount'\n );\n graphologyGraph.setNodeAttribute(node, 'traversedRelationsCount', traversedRelationsCount - 1);\n });\n graphologyGraph.dropEdge(uri);\n const {updatedData, removedEntitiesUris} = removeRelationFromHopsData(\n entityUri,\n uri,\n graphologyGraph,\n data\n );\n removeNodesFromGraph(graphologyGraph, removedEntitiesUris);\n setData(updatedData);\n })\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n })\n .finally(() => {\n setLoading(false);\n });\n },\n [dispatch, graphologyGraph, entityUri, data]\n );\n\n const onCollapseEntity = useCallback(\n (uri: string, path: GraphPathType) => {\n const {nodes = []} = path;\n\n const neighbors = difference(graphologyGraph.neighbors(uri), nodes);\n const nodesToHide = getIsolatedNodes(entityUri, uri, neighbors, graphologyGraph);\n nodesToHide.forEach((node) => {\n if (node !== entityUri && node !== uri) {\n graphologyGraph.setNodeAttribute(node, 'hidden', true);\n }\n });\n },\n [entityUri, graphologyGraph]\n );\n\n const onExpandEntity = useCallback(\n (uri: string) => {\n if (uri && !isTempUri(uri) && !isDTEntity) {\n const untraversedRelationsCount = graphologyGraph.getNodeAttribute(uri, 'untraversedRelationsCount');\n\n const neighbors = graphologyGraph.neighbors(uri);\n neighbors.forEach((node) => {\n graphologyGraph.setNodeAttribute(node, 'hidden', false);\n });\n\n if (untraversedRelationsCount > 0) {\n setLoading(true);\n loadHopsForEntity(uri)\n .then((newData) => {\n const mergedData = mergeHopsData(data, newData, uri);\n\n fillGraphWithHopsResponse(graphologyGraph, newData);\n const loadedEntity = newData.entities.find((entity) => entity.uri === uri);\n graphologyGraph.setNodeAttribute(\n uri,\n 'untraversedRelationsCount',\n loadedEntity.untraversedRelations\n );\n graphologyGraph.setNodeAttribute(\n uri,\n 'traversedRelationsCount',\n loadedEntity.traversedRelations\n );\n\n setData(mergedData);\n })\n .catch((error) => {\n console.error(error);\n dispatch(\n ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong')))\n );\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }\n },\n [data, dispatch, graphologyGraph, isDTEntity, loadHopsForEntity]\n );\n\n return {\n graphLoading: loading,\n data,\n graphologyGraph,\n graphTypeUri,\n setGraphTypeUri,\n onAddRelation,\n onDeleteRelation,\n onCollapseEntity,\n onExpandEntity\n };\n};\n","import {useEffect, useState, useRef, useCallback} from 'react';\nimport {useDispatch} from 'react-redux';\nimport {propEq} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {Entity, getEntity, getRequestErrorMessage, HopsResponse} from '@reltio/mdm-sdk';\nimport {ui} from '@reltio/mdm-module';\nimport {useSafePromise} from '@reltio/components';\n\nimport {GraphState} from '../types/graphDataTypes';\n\nconst MAX_CACHE_SIZE = 50;\n\nconst addToEntitiesMap = (entitiesMap, entity) => {\n const newEntitiesMap = {\n ...entitiesMap,\n [entity?.uri]: entity\n };\n const keys = Object.keys(newEntitiesMap);\n if (keys.length > MAX_CACHE_SIZE) {\n delete newEntitiesMap[keys[0]];\n }\n return newEntitiesMap;\n};\n\nexport const useSelectedEntity = (\n entity: Entity,\n data: HopsResponse\n): Pick<GraphState, 'selectedEntity' | 'onEntitySelect' | 'selectedEntityLoading'> => {\n const safePromise = useSafePromise();\n const dispatch = useDispatch();\n const [selectedEntity, setSelectedEntity] = useState<Entity>(null);\n const entitiesMap = useRef<Record<string, Entity>>({});\n const [loading, setLoading] = useState(false);\n\n const getCachedEntity = useCallback((uri) => {\n const cachedEntity = entitiesMap.current[uri];\n return cachedEntity\n ? Promise.resolve(cachedEntity)\n : getEntity(uri).then((entity) => {\n entitiesMap.current = addToEntitiesMap(entitiesMap.current, entity);\n return entity;\n });\n }, []);\n\n const onEntitySelect = useCallback(\n (selectedEntityUri) => {\n const briefEntityInfo = data?.entities?.find(propEq('uri', selectedEntityUri));\n if (briefEntityInfo) {\n setSelectedEntity(briefEntityInfo);\n }\n setLoading(true);\n safePromise(getCachedEntity(selectedEntityUri))\n .then(setSelectedEntity)\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n })\n .finally(() => {\n setLoading(false);\n });\n },\n [dispatch, data, safePromise, getCachedEntity]\n );\n\n useEffect(() => {\n if (entity?.uri) {\n entitiesMap.current = addToEntitiesMap({}, entity);\n onEntitySelect(entity.uri);\n }\n }, [entity?.uri]); //eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const isActualSelectedEntity = data?.entities.find((entity) => selectedEntity?.uri === entity.uri);\n if (!isActualSelectedEntity) {\n if (entity?.uri) {\n entitiesMap.current = addToEntitiesMap({}, entity);\n onEntitySelect(entity.uri);\n } else {\n entitiesMap.current = {};\n setSelectedEntity(null);\n }\n }\n }, [data]); //eslint-disable-line react-hooks/exhaustive-deps\n\n return {\n selectedEntityLoading: loading,\n selectedEntity,\n onEntitySelect\n };\n};\n","export const ROWS_PER_PAGE_OPTIONS = [25, 50, 100];\n","import {useCallback, useEffect, useMemo, useState} from 'react';\nimport {either, equals, filter, identity, map, pipe, prop, sort, uniqBy, zipObj, ifElse, includes, T} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n EntitiesMap,\n getEndObjectUri,\n getEntityTypeLabel,\n getLabel,\n getRelationTypeLabelFromMetadata,\n getStartObjectUri,\n HopEntity,\n HopRelation,\n HopsResponse,\n Metadata,\n utils,\n getRelation,\n Relation,\n updateRelation,\n getRequestErrorMessage\n} from '@reltio/mdm-sdk';\n\nimport mdm, {ui} from '@reltio/mdm-module';\nimport {useRelationshipTableFilters} from './useRelationshipTableFilters';\nimport {RelationshipRow, RelationshipTableState} from '../types/graphDataTypes';\nimport {ROWS_PER_PAGE_OPTIONS} from '../constants';\n\nimport i18n from 'ui-i18n';\n\nconst getSecondEntityUri = (firstEntityUri: string, relation: HopRelation) => {\n const startEntityUri = getStartObjectUri(relation);\n const endEntityUri = getEndObjectUri(relation);\n return startEntityUri === firstEntityUri ? endEntityUri : startEntityUri;\n};\n\nconst getRelationTypeLabel = (metadata: Metadata, relation: HopRelation, entityUri: string) => {\n const {startObject, endObject, type} = relation;\n const {directionalLabel} = getStartObjectUri(relation) === entityUri ? startObject : endObject;\n return directionalLabel || getRelationTypeLabelFromMetadata(metadata, type);\n};\n\ntype Props = {\n data: HopsResponse;\n selectedEntityUri: string;\n mainEntityUri: string;\n graphTypeUri: string;\n};\n\nexport const useRelationshipTable = ({\n data,\n selectedEntityUri,\n mainEntityUri,\n graphTypeUri\n}: Props): RelationshipTableState => {\n const [sorting, setSorting] = useState({\n field: '',\n order: 'asc'\n });\n const [page, setPage] = useState(0);\n const [rowsPerPage, setRowsPerPage] = useState(ROWS_PER_PAGE_OPTIONS[0]);\n const [editingRelations, setEditingRelations] = useState<Array<{initialRelation: Relation; relation: Relation}>>(\n []\n );\n const [loading, setLoading] = useState(false);\n const dispatch = useDispatch();\n const metadata = useSelector(mdm.selectors.getMetadata);\n\n const entitiesMap: EntitiesMap<HopEntity> = useMemo(() => {\n const entities = data?.entities || [];\n return zipObj(entities.map(prop('uri')), entities);\n }, [data?.entities]);\n\n const allRowsData: RelationshipRow[] = useMemo(\n () =>\n pipe(\n filter(\n either(\n pipe(getStartObjectUri, equals(selectedEntityUri)),\n pipe(getEndObjectUri, equals(selectedEntityUri))\n )\n ),\n uniqBy(prop('uri')),\n map((relation: HopRelation) => {\n const entity = entitiesMap[getSecondEntityUri(selectedEntityUri, relation)];\n return {\n relation,\n entity,\n entityLabel: getLabel(entity.label),\n entityTypeLabel: getEntityTypeLabel(metadata, entity),\n relationTypeLabel: getRelationTypeLabel(metadata, relation, entity.uri)\n };\n })\n )(data?.relations || []),\n [data, selectedEntityUri, entitiesMap, metadata]\n );\n\n const {\n searchText,\n onChangeSearchText,\n filters,\n onFilter,\n relationTypesOptions,\n entityTypesOptions\n } = useRelationshipTableFilters(allRowsData);\n\n const filteredRowsData: RelationshipRow[] = useMemo(\n () =>\n pipe(\n filter(({entityLabel, entity, relation}: RelationshipRow) => {\n const {entityTypesUris, relationTypesUris} = filters;\n return (\n utils.strings.search(entityLabel, searchText) &&\n ifElse(prop('length'), includes(relation.type), T)(relationTypesUris) &&\n ifElse(prop('length'), includes(entity.type), T)(entityTypesUris)\n );\n }),\n sorting.field\n ? sort((a: RelationshipRow, b: RelationshipRow) =>\n utils.strings.sort(sorting.order, a[sorting.field], b[sorting.field])\n )\n : identity\n )(allRowsData),\n [allRowsData, sorting, searchText, filters]\n );\n\n const pagedRowsData: RelationshipRow[] = useMemo(\n () => filteredRowsData.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage),\n [filteredRowsData, page, rowsPerPage]\n );\n\n const onStartRelationEditing = useCallback(\n (uri: string) => {\n setLoading(true);\n getRelation(uri)\n .then((relation) => {\n setEditingRelations((prev) => [...prev, {initialRelation: relation, relation}]);\n })\n .catch((error) => {\n dispatch(\n ui.actions.errorSet(\n getRequestErrorMessage(error, i18n.text(\"Can't load relationship's attributes\"))\n )\n );\n })\n .finally(() => setLoading(false));\n },\n [dispatch]\n );\n\n const onUpdateEditingRelation = useCallback((relation: Relation) => {\n setEditingRelations((prev) =>\n prev.map((rel) => (rel.relation.uri === relation.uri ? {...rel, relation} : rel))\n );\n }, []);\n\n useEffect(() => {\n setPage(0);\n onChangeSearchText('');\n }, [selectedEntityUri, graphTypeUri, onChangeSearchText, onFilter]);\n\n useEffect(() => {\n onFilter({entityTypesUris: [], relationTypesUris: []});\n }, [graphTypeUri, mainEntityUri, onFilter]);\n\n useEffect(() => {\n setPage(0);\n }, [sorting, searchText, filters]);\n\n const onCancelRelationEditing = useCallback((uri: string) => {\n setEditingRelations((prev) => prev.filter((rel) => rel.relation.uri !== uri));\n }, []);\n\n const onSaveEditingRelation = useCallback(\n (oldRelation: Relation, newRelation: Relation) => {\n setLoading(true);\n updateRelation({\n oldRelation,\n newRelation\n })\n .then(() => {\n onCancelRelationEditing(newRelation.uri);\n })\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text(\"Can't edit relationship\"))));\n })\n .finally(() => setLoading(false));\n },\n [onCancelRelationEditing, dispatch]\n );\n\n return {\n rowsData: pagedRowsData,\n onSort: setSorting,\n sorting: sorting,\n searchText,\n onChangeSearchText,\n filters,\n onFilter,\n entityTypesOptions,\n relationTypesOptions,\n editingRelations,\n onStartRelationEditing,\n onCancelRelationEditing,\n onUpdateEditingRelation,\n total: filteredRowsData.length,\n page: page,\n rowsPerPage: rowsPerPage,\n onPageChange: setPage,\n onRowsPerPageChange: setRowsPerPage,\n onSaveEditingRelation,\n loading\n };\n};\n","import {useState, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {pipe, map, uniq, concat, __} from 'ramda';\nimport {getRelationType, getEntityType, Metadata, TEntityType, TRelationType} from '@reltio/mdm-sdk';\nimport {Filters, RelationshipRow} from '../types/graphDataTypes';\n\nexport const useRelationshipTableFilters = (allRowsData: RelationshipRow[]) => {\n const [searchText, setSearchText] = useState('');\n const [filters, setFilters] = useState<Filters>({entityTypesUris: [], relationTypesUris: []});\n\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n\n const entityTypesOptions: TEntityType[] = useMemo(\n () =>\n pipe(\n map(({entity}) => entity.type),\n concat(__, filters.entityTypesUris),\n uniq,\n map(getEntityType(metadata))\n )(allRowsData),\n [allRowsData, metadata, filters.entityTypesUris]\n );\n const relationTypesOptions: TRelationType[] = useMemo(\n () =>\n pipe(\n map(({relation}) => relation.type),\n concat(__, filters.relationTypesUris),\n uniq,\n map(getRelationType(metadata))\n )(allRowsData),\n [allRowsData, metadata, filters.relationTypesUris]\n );\n\n return {\n searchText,\n onChangeSearchText: setSearchText,\n filters,\n onFilter: setFilters,\n entityTypesOptions,\n relationTypesOptions\n };\n};\n","import React from 'react';\n\nimport {GraphState} from '../types/graphDataTypes';\n\nexport const GraphStateContext = React.createContext<GraphState>({\n graphLoading: false,\n data: null,\n graphologyGraph: null,\n selectedEntityLoading: false,\n selectedEntity: null,\n onEntitySelect: () => {},\n relationshipTable: {},\n onCollapseEntity: () => {},\n onExpandEntity: () => {}\n});\n\nGraphStateContext.displayName = 'GraphStateContext';\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n comments: {\n display: 'flex',\n justifyContent: 'flex-end',\n marginTop: '10px'\n }\n});\n","import React, {memo} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {Entity, CollaborationObjectTypes, createRelatedObjectUris} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {\n ProfileBand,\n CommentsContainer,\n COMMENTS_CONTAINER_VISIBILITY_AREA,\n ProfileBandNavigation\n} from '@reltio/components';\nimport {Box as Box} from '@material-ui/core';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst GraphProfileBand = memo(({className}: Props) => {\n const styles = useStyles();\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n const entityUri: string = useSelector(mdm.selectors.getEntityUriWithDataTenant);\n\n return (\n <ProfileBand className={classnames(className, COMMENTS_CONTAINER_VISIBILITY_AREA)} entity={entity}>\n <Box display=\"flex\" alignItems=\"center\">\n <Box mr={3}>\n <ProfileBandNavigation />\n </Box>\n </Box>\n <Box className={styles.comments}>\n <CommentsContainer\n uri={entityUri}\n relatedObjectUris={createRelatedObjectUris(CollaborationObjectTypes.ENTITY, {\n entityUri\n })}\n objectType={CollaborationObjectTypes.ENTITY}\n />\n </Box>\n </ProfileBand>\n );\n});\n\nGraphProfileBand.displayName = 'GraphProfileBand';\n\nexport default GraphProfileBand;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n display: 'flex',\n overflow: 'hidden',\n marginLeft: 'auto',\n flexShrink: 0\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: \"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(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M6 7v2h2V7H6zm0 4v2h2v-2H6zm0 4v2h2v-2H6zm4-8v2h8V7h-8zm10-2v5.02a6.52 6.52 0 012 2.01V3H2v18h11.028a6.52 6.52 0 01-2.009-2H4V5h16zm-9.503 8a6.497 6.497 0 011.31-2H10v2h.497zM10 15.5c0-.168.006-.335.019-.5H10v.5zm0 0c0 .516.06 1.018.173 1.5H10v-1.5zm10.3 2.39L23.42 21 22 22.42l-3.12-3.12c-.69.44-1.51.7-2.39.7-2.48 0-4.49-2.01-4.49-4.5s2.01-4.5 4.5-4.5 4.5 2.01 4.5 4.5c0 .88-.26 1.69-.7 2.39zm-3.8.11a2.5 2.5 0 000-5 2.5 2.5 0 000 5z\",\n fill: \"currentColor\"\n})));","import React from 'react';\nimport {pick} from 'ramda';\nimport {Entity} from '@reltio/mdm-sdk';\nimport {ProfileBand, withContext} from '@reltio/components';\nimport {GraphStateContext} from '../../contexts/GraphStateContext';\n\ntype Props = {\n selectedEntity?: Entity;\n};\n\nconst RightPanelProfileBand = ({selectedEntity}: Props) => {\n return <ProfileBand entity={selectedEntity} />;\n};\n\nexport default withContext(GraphStateContext, pick(['selectedEntity']), RightPanelProfileBand);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n noShadowBlock: {\n boxShadow: 'none'\n },\n wrapper: {\n position: 'relative',\n paddingRight: '1px',\n overflow: 'auto'\n }\n});\n","import React from 'react';\nimport {pick} from 'ramda';\nimport {Entity} from '@reltio/mdm-sdk';\nimport {AttributesView, withContext, LinearLoadIndicator} from '@reltio/components';\nimport {GraphStateContext} from '../../contexts/GraphStateContext';\n\nimport {useStyles} from './styles';\nimport i18n from 'ui-i18n';\n\ntype Props = {\n selectedEntity?: Entity;\n selectedEntityLoading?: boolean;\n};\n\nconst RightPanelEntityDetails = ({selectedEntity, selectedEntityLoading}: Props) => {\n const styles = useStyles();\n return (\n <div className={styles.wrapper}>\n {selectedEntityLoading && <LinearLoadIndicator />}\n <AttributesView\n entity={selectedEntity}\n caption={i18n.text('Entity details')}\n className={styles.noShadowBlock}\n />\n </div>\n );\n};\n\nexport default withContext(\n GraphStateContext,\n pick(['selectedEntity', 'selectedEntityLoading']),\n RightPanelEntityDetails\n);\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst border = '1px solid rgba(0, 0, 0, 0.05)';\n\nexport const useStyles = makeStyles({\n table: {\n flex: 1,\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n },\n tableBody: {\n height: '100%',\n overflow: 'auto'\n },\n tableBodyWrapper: {\n height: '100%',\n overflow: 'hidden'\n },\n tableRowWrapper: {\n borderBottom: border\n },\n tableRow: {\n display: 'flex',\n alignItems: 'center',\n '& > div': {\n flexShrink: 0\n }\n },\n editingRow: {\n paddingTop: '8px',\n paddingBottom: '8px'\n },\n headRow: {\n borderBottom: border\n }\n});\n","import React, {memo} from 'react';\nimport classnames from 'classnames';\nimport {toggleSortOrder} from '@reltio/components';\n\nimport {ColumnsDataItem, Sorting} from './types';\nimport {useStyles} from './styles';\n\ntype Props = {\n columnsData: ColumnsDataItem[];\n sorting: Sorting;\n onSort?: ({field, order}: {field: string; order: string}) => void;\n};\n\nconst TableHead = ({columnsData, sorting, onSort}: Props) => {\n const styles = useStyles();\n return (\n <div className={classnames(styles.tableRow, styles.headRow)}>\n {columnsData.map((columnData) => {\n const {id, sortable, headCellRenderer, columnClassName} = columnData;\n const HeadCellRenderer = headCellRenderer;\n const sortHandler = () => {\n onSort({\n field: id,\n order: sorting.field === id ? toggleSortOrder(sorting.order) : 'asc'\n });\n };\n const sortingProps = sortable ? {sortField: sorting.field, sortOrder: sorting.order, sortHandler} : {};\n return (\n <div key={id} className={columnClassName}>\n <HeadCellRenderer headCellData={columnData} {...sortingProps} />\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default memo(TableHead);\n","import React, {ElementType, forwardRef, memo, useCallback, useImperativeHandle, useRef, useState} from 'react';\nimport classnames from 'classnames';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {AutoSizeList} from '@reltio/components';\n\nimport {ColumnsDataItem, RowsDataItem, Sorting} from './types';\nimport TableHead from './TableHead';\nimport {useStyles} from './styles';\n\ntype Props = {\n classes?: {\n tableRowWrapper?: string;\n tableRow?: string;\n };\n columnsData?: ColumnsDataItem[];\n rowsData: RowsDataItem[];\n sorting?: Sorting;\n onSort?: ({field, order}: {field: string; order: string}) => void;\n getRowKey?: (index: number, data: unknown) => string;\n ExpandedRowRenderer?: ElementType;\n defaultRowHeight?: number;\n};\n\nconst CollapsibleTable = forwardRef(\n (\n {classes, columnsData, rowsData, sorting, onSort, getRowKey, ExpandedRowRenderer, defaultRowHeight}: Props,\n ref\n ) => {\n const styles = useStyles();\n const [dimensions, setDimensions] = useState({\n width: 0,\n height: 0\n });\n\n const renderRow = useCallback(\n ({data, index}) => {\n const item = data[index];\n return (\n <div className={classnames(styles.tableRowWrapper, classes?.tableRowWrapper)}>\n <div\n className={classnames(styles.tableRow, classes?.tableRow, {\n [styles.editingRow]: item.expanded\n })}\n >\n {columnsData.map(({id, rowCellValueRenderer, columnClassName}) => {\n const Renderer = rowCellValueRenderer;\n return (\n <div key={id} className={columnClassName}>\n <Renderer value={item[id]} rowValue={item} />\n </div>\n );\n })}\n </div>\n {item.expanded && ExpandedRowRenderer && (\n <ExpandedRowRenderer open={item.expanded} rowValue={item} />\n )}\n </div>\n );\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [columnsData, ExpandedRowRenderer]\n );\n\n const onTableBodyResize = useCallback((width, height) => {\n setDimensions({width, height});\n }, []);\n\n const listRef = useRef(null);\n\n useImperativeHandle(ref, () => ({\n resetScrollbarPosition: () => {\n listRef.current?.scrollTo(0);\n }\n }));\n\n return (\n <div className={styles.table}>\n <TableHead columnsData={columnsData} sorting={sorting} onSort={onSort} />\n <div className={styles.tableBodyWrapper}>\n <ReactResizeDetector handleHeight handleWidth onResize={onTableBodyResize} />\n <div className={styles.tableBody}>\n <AutoSizeList\n listRef={listRef}\n width={dimensions.width}\n height={dimensions.height}\n data={rowsData}\n defaultItemSize={defaultRowHeight}\n itemKey={getRowKey}\n showNotMeasuredItems\n >\n {renderRow}\n </AutoSizeList>\n </div>\n </div>\n </div>\n );\n }\n);\n\nexport default memo(CollapsibleTable);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const collapsibleTableRowClassName = 'collapsibleTableRow';\nexport const hoverBackground = 'rgba(238, 238, 238, 1)';\n\nexport const useStyles = makeStyles({\n tableWithPagination: {\n flex: 1,\n overflow: 'hidden',\n paddingRight: '1px',\n display: 'flex',\n flexDirection: 'column'\n },\n tableContainer: {\n flex: 1,\n overflow: 'hidden'\n },\n profileColumn: {\n width: '200px'\n },\n relationshipTypeColumn: {\n width: '130px'\n },\n entityTypeColumn: {\n width: '140px'\n },\n row: {\n position: 'relative',\n '&:hover': {\n background: hoverBackground\n }\n }\n});\n","import {makeStyles} from '@material-ui/core/styles';\nimport {collapsibleTableRowClassName, hoverBackground} from '../styles';\n\nconst textOverflow = {\n content: '\"\"',\n position: 'absolute',\n right: 0,\n top: 0,\n width: '40px',\n height: '100%',\n background: 'linear-gradient(to right, rgba(255, 255, 255, 0.2), #fff 100%)',\n pointerEvents: 'none'\n};\n\nconst hoverRule = `.${collapsibleTableRowClassName}:hover &`;\n\nconst textOverflowWithHover = {\n ...textOverflow,\n [hoverRule]: {\n background: `linear-gradient(to right, rgba(238, 238, 238, 0), ${hoverBackground} 100%)`\n }\n};\n\nexport const useStyles = makeStyles((theme) => ({\n headCell: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n height: '33px',\n padding: '6px 0 6px 16px',\n '&>div': {\n flexDirection: 'row'\n },\n '&>div>span[role=button]': {\n width: 'calc(100% + 49px)'\n }\n },\n headLabel: {\n color: theme.palette.text.primary,\n fontSize: '12px',\n fontWeight: 500,\n lineHeight: '16px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n '&:after': textOverflow\n },\n defaultCell: {\n position: 'relative',\n color: theme.palette.text.primary,\n fontSize: '13px',\n fontWeight: 'normal',\n lineHeight: '15px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n padding: '6px 16px',\n '&:after': textOverflowWithHover\n },\n clickable: {\n cursor: 'pointer'\n },\n profileCell: {\n paddingTop: '3px',\n paddingBottom: '4px'\n },\n controlsCell: {\n position: 'absolute',\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n flexShrink: 0,\n top: 0,\n right: '9px',\n visibility: 'hidden',\n [hoverRule]: {\n visibility: 'visible',\n background: hoverBackground\n }\n },\n editingMode: {\n visibility: 'visible'\n },\n hidden: {\n visibility: 'hidden'\n },\n editButton: {\n marginRight: '7px'\n },\n entityAvatar: {\n width: '20px',\n height: '20px',\n marginRight: '8px'\n },\n actionButtons: {\n display: 'flex',\n justifyContent: 'flex-end',\n margin: '0 8px 10px',\n\n '& > button': {\n fontSize: '14px',\n lineHeight: '16px',\n marginLeft: '8px',\n padding: '10px 8px',\n backgroundColor: 'rgba(98, 2, 238, 0)'\n }\n },\n expandedRow: {\n padding: '0 16px 6px',\n fontSize: '13px'\n }\n}));\n","import React from 'react';\nimport classnames from 'classnames';\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {ExpandedValueTooltip} from '@reltio/components';\n\nimport {ColumnsDataItem} from '../../CollapsibleTable/types';\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n headCellData: ColumnsDataItem;\n};\n\nconst HeadCellRenderer = ({className, headCellData, ...otherProps}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.headCell, className)}>\n <DefaultHeadCellRenderer\n {...otherProps}\n headCellData={{\n ...headCellData,\n label: (\n <ExpandedValueTooltip value={headCellData.label}>\n <div className={styles.headLabel}>{headCellData.label}</div>\n </ExpandedValueTooltip>\n )\n }}\n />\n </div>\n );\n};\n\nexport default HeadCellRenderer;\n","import React, {memo, ReactNode} from 'react';\nimport classnames from 'classnames';\nimport {ExpandedValueTooltip} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n value?: ReactNode | string;\n tooltip?: string;\n className?: string;\n onClick?: () => void;\n};\n\nconst DefaultCellRenderer = ({value = '', tooltip, onClick, className}: Props) => {\n const styles = useStyles();\n tooltip = tooltip || (value as string);\n return (\n <ExpandedValueTooltip value={tooltip}>\n <div\n className={classnames(styles.defaultCell, className, {[styles.clickable]: !!onClick})}\n onClick={onClick}\n >\n {value}\n </div>\n </ExpandedValueTooltip>\n );\n};\n\nexport default memo(DefaultCellRenderer);\n","import React from 'react';\nimport {EntityAvatar, withContext} from '@reltio/components';\nimport classnames from 'classnames';\n\nimport DefaultCellRenderer from './DefaultCellRenderer';\nimport {GraphStateContext} from '../../../../../contexts/GraphStateContext';\nimport {RelationshipRow} from '../../../../../types/graphDataTypes';\nimport {useStyles} from './styles';\n\ntype Props = {\n value: string;\n className?: string;\n rowValue: RelationshipRow;\n onClick?: (entityUri: string) => void;\n};\n\nexport const ProfileCellRenderer = ({value, rowValue: {entity}, className, onClick}: Props) => {\n const styles = useStyles();\n const cellValue = (\n <>\n <EntityAvatar entity={entity} avatarClassName={styles.entityAvatar} />\n {value}\n </>\n );\n return (\n <DefaultCellRenderer\n value={cellValue}\n tooltip={value}\n className={classnames(styles.profileCell, className)}\n onClick={() => onClick(entity.uri)}\n />\n );\n};\n\nexport default withContext(\n GraphStateContext,\n ({onEntitySelect}) => ({\n onClick: onEntitySelect\n }),\n ProfileCellRenderer\n);\n","import React, {useCallback, useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Button as Button} from '@material-ui/core';\nimport {equals} from 'ramda';\nimport i18n from 'ui-i18n';\n\nimport {EditingConnection, Relation, validateConnectionRelation} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {withContext, ConnectionEditor, useEditableConnection} from '@reltio/components';\n\nimport {RelationshipRow} from '../../../../../types/graphDataTypes';\nimport {GraphStateContext} from '../../../../../contexts/GraphStateContext';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n open: boolean;\n rowValue: RelationshipRow;\n editingRelationObject?: {initialRelation: Relation; relation: Relation};\n onUpdateEditingRelation?: (relation: Relation) => void;\n onCancelRelationEditing?: (uri: string) => void;\n onSaveEditingRelation?: (oldRelation: Relation, newRelation: Relation) => void;\n loading?: boolean;\n};\n\nexport const ExpandedRowRenderer = ({\n open,\n editingRelationObject,\n onUpdateEditingRelation,\n onCancelRelationEditing,\n onSaveEditingRelation\n}: Props) => {\n const dispatch = useDispatch();\n const metadata = useSelector(mdm.selectors.getMetadata);\n const {relation: editingRelation, initialRelation} = editingRelationObject;\n const hasChanges = useMemo(() => !equals(initialRelation, editingRelation), [editingRelation, initialRelation]);\n const styles = useStyles();\n const onUpdateConnection = useCallback(({relation}: EditingConnection) => onUpdateEditingRelation(relation), [\n onUpdateEditingRelation\n ]);\n\n const handleCancelRelationEditing = useCallback(() => onCancelRelationEditing(editingRelation.uri), [\n onCancelRelationEditing,\n editingRelation.uri\n ]);\n const connection = useMemo(() => ({relation: editingRelation}), [editingRelation]);\n const {onAddAttributes, onChangeAttribute, onRemoveAttribute} = useEditableConnection({\n connection,\n onConnectionChange: onUpdateConnection\n });\n\n const validate = (relation: Relation) => {\n const errors = validateConnectionRelation(metadata, {relation: {object: relation}});\n dispatch(profile.errors.actions.errorsSet(errors));\n return errors.length === 0;\n };\n\n const onSave = () => {\n if (validate(editingRelation)) {\n onSaveEditingRelation(initialRelation, editingRelation);\n }\n };\n\n return open ? (\n <div className={styles.expandedRow}>\n <ConnectionEditor\n connection={connection}\n onAddAttributes={onAddAttributes}\n onChangeAttribute={onChangeAttribute}\n onRemoveAttribute={onRemoveAttribute}\n />\n <div className={styles.actionButtons}>\n <Button onClick={handleCancelRelationEditing}>{i18n.text('Cancel')}</Button>\n <Button color=\"primary\" disabled={!hasChanges} onClick={onSave}>\n {i18n.text('Save')}\n </Button>\n </div>\n </div>\n ) : null;\n};\n\nexport default withContext(\n GraphStateContext,\n ({relationshipTable}, props) => ({\n editingRelationObject: relationshipTable.editingRelations.find(\n (rel) => rel.initialRelation.uri === props?.rowValue.relation?.uri\n ),\n onUpdateEditingRelation: relationshipTable.onUpdateEditingRelation,\n onCancelRelationEditing: relationshipTable.onCancelRelationEditing,\n onSaveEditingRelation: relationshipTable.onSaveEditingRelation\n }),\n ExpandedRowRenderer\n);\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {pick} from 'ramda';\nimport {ConfirmationDialog, withContext} from '@reltio/components';\n\nimport {GraphStateContext} from '../../../../contexts/GraphStateContext';\n\ntype Props = {\n uri: string;\n open: boolean;\n onClose: () => void;\n onDeleteRelation?: (uri) => void;\n};\n\nconst DeleteRelationDialog = ({uri, open, onClose, onDeleteRelation}: Props) => {\n return (\n <ConfirmationDialog\n open={open}\n title={i18n.text('Do you want to make a clean break?')}\n content={i18n.text(\n 'To end this relationship, click Delete Relationship. To keep the connection, click Cancel.'\n )}\n saveCaption={i18n.text('Delete relationship')}\n discardCaption={i18n.text('Cancel')}\n onDiscard={onClose}\n onSave={() => {\n onDeleteRelation(uri);\n onClose();\n }}\n />\n );\n};\n\nexport default withContext(GraphStateContext, pick(['onDeleteRelation']), DeleteRelationDialog);\n","import React, {memo, useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\nimport DeleteIcon from '@material-ui/icons/Delete';\n\nimport DeleteRelationDialog from '../../../DeleteRelationDialog/DeleteRelationDialog';\n\ntype Props = {\n uri: string;\n};\n\nconst DeleteRelationButton = memo(({uri}: Props) => {\n const [open, setOpen] = useState(false);\n const onOpen = useCallback(() => setOpen(true), []);\n const onClose = useCallback(() => setOpen(false), []);\n return (\n <>\n <SmallIconButtonWithTooltip\n icon={DeleteIcon}\n size={'XXS'}\n tooltipTitle={i18n.text('Delete')}\n data-reltio-id=\"reltio-delete-relation-button\"\n onClick={onOpen}\n />\n <DeleteRelationDialog open={open} onClose={onClose} uri={uri} />\n </>\n );\n});\n\nDeleteRelationButton.displayName = 'DeleteRelationButton';\n\nexport default DeleteRelationButton;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {SmallIconButtonWithTooltip, withContext} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {checkMetadataForUpdate, checkMetadataForDelete, getRelationType, Mode} from '@reltio/mdm-sdk';\nimport EditIcon from '@material-ui/icons/Edit';\n\nimport {GraphStateContext} from '../../../../../contexts/GraphStateContext';\nimport {RelationshipRow} from '../../../../../types/graphDataTypes';\nimport DeleteRelationButton from './components/DeleteRelationButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n rowValue: RelationshipRow;\n className?: string;\n onEdit?: (uri: string) => void;\n isEditing?: boolean;\n};\n\nconst ControlsCellRenderer = ({\n rowValue: {\n relation: {uri, type}\n },\n className,\n onEdit,\n isEditing\n}: Props) => {\n const styles = useStyles();\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const relationType = getRelationType(metadata, type);\n const canEdit = checkMetadataForUpdate(Mode.Editing, relationType);\n const canDelete = checkMetadataForDelete(Mode.Editing, relationType);\n return (\n <div className={classnames(styles.controlsCell, className, {[styles.editingMode]: isEditing})}>\n {canEdit && (\n <SmallIconButtonWithTooltip\n className={classnames(styles.editButton, {[styles.hidden]: isEditing})}\n icon={EditIcon}\n size={'XXS'}\n tooltipTitle={i18n.text('Edit')}\n data-reltio-id=\"reltio-edit-relationship-button\"\n onClick={() => onEdit(uri)}\n />\n )}\n {canDelete && <DeleteRelationButton uri={uri} />}\n </div>\n );\n};\n\nexport default withContext(\n GraphStateContext,\n ({relationshipTable: {onStartRelationEditing, editingRelations}}, props) => ({\n onEdit: onStartRelationEditing,\n isEditing: editingRelations.some((rel) => rel.initialRelation.uri === props?.rowValue.relation?.uri)\n }),\n ControlsCellRenderer\n);\n","import React, {useEffect, useMemo, useRef} from 'react';\nimport i18n from 'ui-i18n';\nimport {BasicTablePagination, LinearLoadIndicator, withContext} from '@reltio/components';\nimport classnames from 'classnames';\n\nimport {GraphStateContext} from '../../../../contexts/GraphStateContext';\nimport {RelationshipRow, RelationshipTableState} from '../../../../types/graphDataTypes';\nimport CollapsibleTable from '../CollapsibleTable/CollapsibleTable';\nimport HeadCellRenderer from './cell-renderers/HeadCellRenderer';\nimport DefaultCellRenderer from './cell-renderers/DefaultCellRenderer';\nimport ProfileCellRenderer from './cell-renderers/ProfileCellRenderer';\nimport ExpandedRowRenderer from './cell-renderers/ExpandedRowRenderer';\nimport ControlsCellRenderer from './cell-renderers/ControlsCellRenderer';\nimport {ROWS_PER_PAGE_OPTIONS} from '../../../../constants';\nimport {collapsibleTableRowClassName, useStyles} from './styles';\n\nexport const getRowKey = (index: number, data: RelationshipRow[]) => {\n const row = data[index];\n return row.relation.uri || `${index}`;\n};\n\nconst RelationshipTable = ({\n rowsData,\n sorting,\n onSort,\n total,\n page,\n rowsPerPage,\n onPageChange,\n onRowsPerPageChange,\n editingRelations,\n loading\n}: RelationshipTableState) => {\n const styles = useStyles();\n\n const columnsData = useMemo(\n () => [\n {\n id: 'entityLabel',\n label: i18n.text('Profile'),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: ProfileCellRenderer,\n sortable: true,\n columnClassName: styles.profileColumn\n },\n {\n id: 'relationTypeLabel',\n label: i18n.text('Relationship type'),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: DefaultCellRenderer,\n sortable: true,\n columnClassName: styles.relationshipTypeColumn\n },\n {\n id: 'entityTypeLabel',\n label: i18n.text('Entity Type'),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: DefaultCellRenderer,\n sortable: true,\n columnClassName: styles.entityTypeColumn\n },\n {\n id: 'controls',\n label: '',\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: ControlsCellRenderer\n }\n ],\n [styles]\n );\n\n const tableRef = useRef(null);\n\n useEffect(() => {\n tableRef.current?.resetScrollbarPosition();\n }, [rowsData]);\n\n const rowsDataWithExpandedInfo = useMemo(\n () =>\n rowsData.map((row) =>\n editingRelations?.some((rel) => rel.initialRelation.uri === row?.relation?.uri)\n ? {...row, expanded: true}\n : row\n ),\n [rowsData, editingRelations]\n );\n\n const tableClasses = useMemo(\n () => ({\n tableRow: classnames(styles.row, collapsibleTableRowClassName)\n }),\n [styles]\n );\n\n return (\n <div className={styles.tableWithPagination}>\n <div className={styles.tableContainer}>\n <CollapsibleTable\n ref={tableRef}\n columnsData={columnsData}\n rowsData={rowsDataWithExpandedInfo}\n sorting={sorting}\n onSort={onSort}\n getRowKey={getRowKey}\n ExpandedRowRenderer={ExpandedRowRenderer}\n defaultRowHeight={28}\n classes={tableClasses}\n />\n </div>\n {total > ROWS_PER_PAGE_OPTIONS[0] && (\n <BasicTablePagination\n count={total}\n rowsPerPageOptions={ROWS_PER_PAGE_OPTIONS}\n rowsPerPage={rowsPerPage}\n onChangeRowsPerPage={onRowsPerPageChange}\n page={page}\n onChangePage={onPageChange}\n basicTableRef={tableRef}\n />\n )}\n {loading && <LinearLoadIndicator />}\n </div>\n );\n};\n\nexport default withContext(GraphStateContext, ({relationshipTable}) => ({...relationshipTable}), RelationshipTable);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n inactiveSearchIcon: {\n color: theme.palette.text.secondary\n },\n activeSearchIcon: {\n color: theme.palette.text.primary\n },\n input: {\n fontSize: '14px',\n '&::placeholder': {\n color: `${theme.palette.text.secondary} !important`,\n opacity: 1\n }\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe, pick, prop} from 'ramda';\nimport {SearchInput, withContext} from '@reltio/components';\nimport {GraphStateContext} from '../../../../../contexts/GraphStateContext';\nimport {useStyles} from './styles';\nimport {RelationshipTableState} from '../../../../../types/graphDataTypes';\n\ntype Props = Partial<Pick<RelationshipTableState, 'searchText' | 'onChangeSearchText'>>;\n\nconst RelationshipsSearchTextField = ({searchText, onChangeSearchText}: Props) => {\n const styles = useStyles();\n\n return (\n <SearchInput\n fullWidth\n height={40}\n autofocus={false}\n value={searchText}\n onSearch={onChangeSearchText}\n placeholder={i18n.text('Search profiles')}\n classes={{input: styles.input}}\n />\n );\n};\n\nexport default withContext(\n GraphStateContext,\n pipe(prop('relationshipTable'), pick(['searchText', 'onChangeSearchText'])),\n RelationshipsSearchTextField\n);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n dialogPaper: {\n display: 'flex',\n flexDirection: 'column',\n padding: '12px 16px 8px'\n },\n title: {\n marginBottom: '21px',\n fontWeight: 500,\n fontSize: '20px',\n lineHeight: '23px',\n letterSpacing: '0.25px',\n color: theme.palette.text.primary\n },\n entityTypesSelector: {\n width: '468px',\n marginBottom: '20px'\n },\n relationTypesSelector: {\n width: '468px',\n marginBottom: '32px'\n },\n footer: {\n display: 'flex'\n },\n clearAllButton: {\n marginRight: 'auto'\n },\n cancelButton: {\n marginRight: '8px'\n }\n}));\n","import React, {useEffect, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe, pick, prop} from 'ramda';\nimport {EntityTypesSelector, RelationTypesSelector, withContext} from '@reltio/components';\nimport {Button as Button} from '@material-ui/core';\nimport {Dialog as Dialog} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {GraphStateContext} from '../../../../../contexts/GraphStateContext';\nimport {RelationshipTableState} from '../../../../../types/graphDataTypes';\nimport {useStyles} from './styles';\n\ntype Props = {\n open: boolean;\n onClose: () => void;\n} & Partial<Pick<RelationshipTableState, 'filters' | 'onFilter' | 'entityTypesOptions' | 'relationTypesOptions'>>;\n\nconst RelationshipsFiltersDialog = ({\n open,\n onClose,\n filters,\n onFilter,\n entityTypesOptions,\n relationTypesOptions\n}: Props) => {\n const styles = useStyles();\n\n const [localSelectedEntityTypes, setLocalSelectedEntityTypes] = useState([]);\n const [localSelectedRelationTypes, setLocalSelectedRelationTypes] = useState([]);\n\n const handleCancel = () => {\n setLocalSelectedEntityTypes(filters.entityTypesUris);\n setLocalSelectedRelationTypes(filters.relationTypesUris);\n onClose();\n };\n\n const handleApply = () => {\n onFilter({entityTypesUris: localSelectedEntityTypes, relationTypesUris: localSelectedRelationTypes});\n onClose();\n };\n\n const handleClear = () => {\n setLocalSelectedEntityTypes([]);\n setLocalSelectedRelationTypes([]);\n };\n\n useEffect(() => {\n setLocalSelectedEntityTypes(filters.entityTypesUris);\n setLocalSelectedRelationTypes(filters.relationTypesUris);\n }, [filters.entityTypesUris, filters.relationTypesUris]);\n\n return (\n <Dialog classes={{paper: styles.dialogPaper}} onClose={handleCancel} open={open}>\n <Typography className={styles.title}>{i18n.text('Filter')}</Typography>\n <EntityTypesSelector\n classes={{\n root: styles.entityTypesSelector\n }}\n entityTypes={entityTypesOptions}\n selectedEntityTypes={localSelectedEntityTypes}\n enableEmptyValueUnderline\n onChange={setLocalSelectedEntityTypes}\n />\n <RelationTypesSelector\n classes={{\n root: styles.relationTypesSelector\n }}\n relationTypes={relationTypesOptions}\n selectedRelationTypes={localSelectedRelationTypes}\n enableEmptyValueUnderline\n onChange={setLocalSelectedRelationTypes}\n />\n <div className={styles.footer}>\n <Button className={styles.clearAllButton} onClick={handleClear}>\n {i18n.text('Clear All')}\n </Button>\n <Button className={styles.cancelButton} onClick={handleCancel}>\n {i18n.text('Cancel')}\n </Button>\n <Button onClick={handleApply} color=\"primary\">\n {i18n.text('Apply')}\n </Button>\n </div>\n </Dialog>\n );\n};\n\nexport default withContext(\n GraphStateContext,\n pipe(prop('relationshipTable'), pick(['onFilter', 'filters', 'entityTypesOptions', 'relationTypesOptions'])),\n RelationshipsFiltersDialog\n);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex',\n alignItems: 'center',\n paddingLeft: '16px',\n paddingRight: '2px'\n },\n iconButton: {\n marginLeft: '4px'\n },\n activeFiltersIcon: {\n color: theme.palette.primary.main\n },\n inactiveFiltersIcon: {\n color: theme.palette.text.secondary\n }\n}));\n","import React, {useState} from 'react';\nimport {pick, pipe, prop} from 'ramda';\nimport {withContext} from '@reltio/components';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport {IconButton as IconButton} from '@material-ui/core';\nimport RelationshipsSearchTextField from './RelationshipsSearchTextField/RelationshipsSearchTextField';\nimport RelationshipsFiltersDialog from './RelationshipsFiltersDialog/RelationshipsFiltersDialog';\nimport {RelationshipTableState} from '../../../../types/graphDataTypes';\nimport {GraphStateContext} from '../../../../contexts/GraphStateContext';\nimport {useStyles} from './styles';\n\ntype Props = Partial<Pick<RelationshipTableState, 'filters'>>;\n\nconst RelationshipsFilters = ({filters}: Props) => {\n const styles = useStyles();\n const [open, setOpen] = useState(false);\n\n const handleOpenDialog = () => setOpen(true);\n const handleCloseDialog = () => setOpen(false);\n\n const {entityTypesUris, relationTypesUris} = filters;\n\n const hasAppliedFilters = entityTypesUris.length || relationTypesUris.length;\n\n return (\n <div className={styles.wrapper}>\n <RelationshipsSearchTextField />\n <IconButton\n data-reltio-id=\"reltio-filter-relationship-button\"\n className={styles.iconButton}\n onClick={handleOpenDialog}\n >\n <FilterListIcon className={hasAppliedFilters ? styles.activeFiltersIcon : styles.inactiveFiltersIcon} />\n </IconButton>\n <RelationshipsFiltersDialog open={open} onClose={handleCloseDialog} />\n </div>\n );\n};\n\nexport default withContext(GraphStateContext, pipe(prop('relationshipTable'), pick(['filters'])), RelationshipsFilters);\n","import {generateNewRelationUri, EditingConnection} from '@reltio/mdm-sdk';\n\nexport const createNewConnection = (): EditingConnection => ({\n relation: {\n uri: generateNewRelationUri(),\n type: null,\n attributes: {}\n }\n});\n","import {useMemo} from 'react';\nimport {checkMetadataForCreate, getInOutRelationTypesForEntityTypeUri, Mode} from '@reltio/mdm-sdk';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\n\nexport const useCreatableInOutRelationTypes = (entityTypeUri: string) => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const {inRelations: inRelationTypes = [], outRelations: outRelationTypes = []} = useMemo(\n () => getInOutRelationTypesForEntityTypeUri(metadata, entityTypeUri, checkMetadataForCreate(Mode.Editing)),\n [metadata, entityTypeUri]\n );\n return {inRelationTypes, outRelationTypes};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n dialogPaper: {\n height: '600px',\n maxWidth: '600px'\n },\n dialogTitle: {\n padding: '12px 16px'\n },\n titleText: {\n color: theme.palette.text.primary,\n fontSize: '18px',\n letterSpacing: 0,\n lineHeight: '21px',\n fontWeight: 'bold'\n },\n content: {\n padding: '8px 16px 0px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.12)'\n },\n attributeList: {\n paddingTop: '22px'\n }\n}));\n","import React, {useState, useCallback, useEffect} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\n\nimport {Typography as Typography} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport {Dialog as Dialog} from '@material-ui/core';\nimport {DialogActions as DialogActions} from '@material-ui/core';\nimport {DialogContent as DialogContent} from '@material-ui/core';\nimport {DialogTitle as DialogTitle} from '@material-ui/core';\nimport {ConnectionEditor, useEditableConnection, withContext} from '@reltio/components';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {Directions, EditingConnection, Entity, validateConnectionRelation} from '@reltio/mdm-sdk';\nimport {GraphStateContext} from '../../../../contexts/GraphStateContext';\nimport {GraphState} from '../../../../types/graphDataTypes';\nimport {createNewConnection} from '../../../../helpers/relationsHelpers';\nimport {useCreatableInOutRelationTypes} from './useCreatableInOutRelationTypes';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n selectedEntity?: Entity;\n open: boolean;\n onClose: () => void;\n onAddRelation?: GraphState['onAddRelation'];\n};\n\nconst GraphAddRelationDialog = ({selectedEntity, open, onClose, onAddRelation}: Props) => {\n const styles = useStyles();\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n\n const [connection, setConnection] = useState<EditingConnection>({});\n const {relation, entity} = connection;\n const {type: relationTypeUri, direction} = relation || {};\n\n const [loading, setLoading] = useState(false);\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (open) {\n setConnection(createNewConnection());\n }\n }, [open]);\n\n const {inRelationTypes, outRelationTypes} = useCreatableInOutRelationTypes(selectedEntity.type);\n\n const validate = useCallback(() => {\n const errors = validateConnectionRelation(metadata, {relation: {object: relation}});\n dispatch(profile.errors.actions.errorsSet(errors));\n return errors.length === 0;\n }, [relation, metadata, dispatch]);\n\n const handleAdd = () => {\n const {type: relationType, attributes = {}, startDate, endDate} = relation;\n const startEntityUri = direction === Directions.OUT ? selectedEntity.uri : entity.uri;\n const endEntityUri = direction === Directions.OUT ? entity.uri : selectedEntity.uri;\n\n if (validate()) {\n setLoading(true);\n onAddRelation({\n startEntityUri,\n endEntityUri,\n relationType,\n attributes,\n startDate,\n endDate\n })\n .then(() => {\n onClose();\n })\n .catch((e) => {\n console.error(e);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n };\n\n const {\n onAddAttributes,\n onChangeAttribute,\n onRemoveAttribute,\n onChangeEntity,\n onChangeRelationType\n } = useEditableConnection({connection, onConnectionChange: setConnection, relatedEntity: selectedEntity});\n\n return (\n <Dialog open={open} fullWidth maxWidth=\"sm\" onClose={onClose} classes={{paper: styles.dialogPaper}}>\n <DialogTitle disableTypography classes={{root: styles.dialogTitle}}>\n <Typography variant=\"subtitle1\" classes={{root: styles.titleText}}>\n {i18n.text('Add relationship')}\n </Typography>\n </DialogTitle>\n <DialogContent classes={{root: styles.content}}>\n <ConnectionEditor\n connection={connection}\n onAddAttributes={onAddAttributes}\n onChangeAttribute={onChangeAttribute}\n onRemoveAttribute={onRemoveAttribute}\n relatedEntity={selectedEntity}\n inRelationTypes={inRelationTypes}\n outRelationTypes={outRelationTypes}\n onChangeRelationType={onChangeRelationType}\n onChangeEntity={onChangeEntity}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>{i18n.text('Cancel')}</Button>\n <Button\n disabled={!connection?.entity || !relationTypeUri || loading}\n color=\"primary\"\n onClick={handleAdd}\n >\n {i18n.text('Add')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default withContext(\n GraphStateContext,\n ({selectedEntity, onAddRelation}) => ({selectedEntity, onAddRelation}),\n GraphAddRelationDialog\n);\n","import React, {useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {pick} from 'ramda';\nimport AddIcon from '@material-ui/icons/Add';\nimport {ActionButton, ActionButtonMode, withContext} from '@reltio/components';\nimport {Entity} from '@reltio/mdm-sdk';\n\nimport {GraphStateContext} from '../../../../contexts/GraphStateContext';\nimport GraphAddRelationDialog from './GraphAddRelationDialog';\nimport {useCreatableInOutRelationTypes} from './useCreatableInOutRelationTypes';\n\ntype Props = {\n selectedEntity?: Entity;\n};\n\nconst GraphAddRelationButton = ({selectedEntity}: Props) => {\n const {inRelationTypes, outRelationTypes} = useCreatableInOutRelationTypes(selectedEntity.type);\n const canAddSomeRelation = inRelationTypes.length + outRelationTypes.length > 0;\n const [openDialog, setOpenDialog] = useState(false);\n const handleClick = () => {\n setOpenDialog(true);\n };\n const onCancel = () => {\n setOpenDialog(false);\n };\n\n return (\n canAddSomeRelation && (\n <>\n <ActionButton\n data-reltio-id=\"reltio-add-relationship-button\"\n mode={ActionButtonMode.button}\n label={i18n.text('Add relationship')}\n icon={AddIcon}\n onClick={handleClick}\n />\n <GraphAddRelationDialog open={openDialog} onClose={onCancel} />\n </>\n )\n );\n};\n\nexport default withContext(GraphStateContext, pick(['selectedEntity']), GraphAddRelationButton);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n caption: {\n marginLeft: '16px',\n marginTop: '12px',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '14px',\n fontSize: '16px',\n lineHeight: '24px'\n },\n wrapper: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n height: 0\n }\n});\n","import React from 'react';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport i18n from 'ui-i18n';\nimport RelationshipTable from './components/RelationshipTable/RelationshipTable';\nimport RelationshipsFilters from './components/RelationshipsFilters/RelationshipsFilters';\nimport GraphAddRelationButton from './components/GraphAddRelationDialog/GraphAddRelationButton';\nimport {useStyles} from './styles';\n\nconst RightPanelRelationship = () => {\n const styles = useStyles();\n\n return (\n <div className={styles.wrapper}>\n <div className={styles.caption}>\n <Typography variant=\"subtitle1\">{i18n.text('Relationships')}</Typography>\n <GraphAddRelationButton />\n </div>\n <RelationshipsFilters />\n <RelationshipTable />\n </div>\n );\n};\n\nexport default RightPanelRelationship;\n","import React, {useCallback, useMemo, useState, memo} from 'react';\nimport {pluck} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {SideButtonsPanel, SidePanel} from '@reltio/components';\nimport InfoOutlinedIcon from '@material-ui/icons/InfoOutlined';\n\nimport {useStyles} from './styles';\nimport RelationshipIcon from './icons/relationship-icon.svg';\nimport RightPanelProfileBand from '../RightPanelProfileBand/RightPanelProfileBand';\nimport RightPanelEntityDetails from '../RightPanelEntityDetails/RightPanelEntityDetails';\nimport RightPanelRelationship from '../RightPanelRelationship/RightPanelRelationship';\n\nconst DEFAULT_PANEL_WIDTH = 480;\nexport enum ActivePanel {\n Relationship,\n EntityDetails\n}\n\nconst GraphRightSidePanel = memo(() => {\n const styles = useStyles();\n\n const [active, setActive] = useState<ActivePanel>(null);\n const toggleActive = useCallback((newId: ActivePanel) => {\n setActive((active) => (active === newId ? null : newId));\n }, []);\n const isOpen = active !== null;\n const elements = useMemo(\n () => [\n {\n buttonProps: {\n id: ActivePanel.Relationship,\n icon: RelationshipIcon,\n tooltipTitle: i18n.text('Relationship')\n },\n content: <RightPanelRelationship />\n },\n {\n buttonProps: {\n id: ActivePanel.EntityDetails,\n icon: InfoOutlinedIcon,\n tooltipTitle: i18n.text('Entity Details')\n },\n content: <RightPanelEntityDetails />\n }\n ],\n []\n );\n\n return (\n <div className={styles.wrapper}>\n <SidePanel open={isOpen} width={DEFAULT_PANEL_WIDTH}>\n <RightPanelProfileBand />\n {elements[active]?.content}\n </SidePanel>\n <SideButtonsPanel\n buttonsProps={pluck('buttonProps', elements)}\n onButtonClick={toggleActive}\n activeIndexId={active}\n />\n </div>\n );\n});\n\nGraphRightSidePanel.displayName = 'GraphRightSidePanel';\n\nexport default GraphRightSidePanel;\n","/*\n * This file part of sigma/rendering/canvas/hover.ts with custom style\n */\nimport {Settings} from 'sigma/settings';\nimport {NodeDisplayData, PartialButFor} from 'sigma/types';\n\nconst PADDING = 2;\n\nexport const drawNodeBackground = (\n context: CanvasRenderingContext2D,\n data: PartialButFor<NodeDisplayData, 'x' | 'y' | 'size' | 'label'>,\n settings: Settings,\n drawNodeArc = true\n): void => {\n context.fillStyle = '#FFF';\n context.shadowOffsetX = 0;\n context.shadowOffsetY = 2;\n context.shadowBlur = 3;\n context.shadowColor = 'rgba(0,0,0,0.2)';\n\n if (typeof data.label === 'string') {\n const size = settings.labelSize + 2;\n const borderRadius = 2;\n\n const textWidth = context.measureText(data.label).width,\n boxWidth = Math.round(textWidth + 16),\n boxHeight = Math.round(size + 2 * PADDING),\n radius = Math.max(data.size, size / 2) + PADDING;\n\n const top = data.y - boxHeight / 2;\n const bottom = data.y + boxHeight / 2;\n const left = data.x + (drawNodeArc ? 0 : radius);\n const right = left + boxWidth + (drawNodeArc ? radius : 0);\n\n context.beginPath();\n context.moveTo(left, bottom - borderRadius);\n context.quadraticCurveTo(left, bottom, left + borderRadius, bottom);\n context.lineTo(right - borderRadius, bottom);\n context.quadraticCurveTo(right, bottom, right, bottom - borderRadius);\n context.lineTo(right, top + borderRadius);\n context.quadraticCurveTo(right, top, right - borderRadius, top);\n context.lineTo(left + borderRadius, top);\n context.quadraticCurveTo(left, top, left, top + borderRadius);\n context.closePath();\n context.fill();\n\n if (drawNodeArc) {\n context.shadowOffsetX = -2;\n context.shadowOffsetY = 0;\n context.beginPath();\n context.arc(data.x, data.y, radius, 0, Math.PI * 2);\n context.closePath();\n context.fill();\n }\n } else if (drawNodeArc) {\n context.beginPath();\n context.arc(data.x, data.y, data.size + PADDING, 0, Math.PI * 2);\n context.closePath();\n context.fill();\n }\n};\n","/*\n * This file copies sigma/rendering/canvas/label.ts with custom style\n */\nimport {Settings} from 'sigma/settings';\nimport {NodeDisplayData, PartialButFor} from 'sigma/types';\nimport {drawNodeBackground} from './nodeBackground';\n\nexport const drawLabel = (\n context: CanvasRenderingContext2D,\n data: PartialButFor<NodeDisplayData, 'x' | 'y' | 'size' | 'label'>,\n settings: Settings,\n drawBackground = true\n): void => {\n if (!data.label) return;\n\n const size = settings.labelSize,\n font = settings.labelFont,\n weight = settings.labelWeight;\n\n if (drawBackground) {\n drawNodeBackground(context, data, settings, false);\n }\n\n context.shadowOffsetX = 0;\n context.shadowOffsetY = 0;\n context.shadowBlur = 0;\n\n context.fillStyle = settings.labelColor?.attribute\n ? data[settings.labelColor.attribute] || settings.labelColor.color || '#000'\n : settings.labelColor.color;\n context.font = `${weight} ${size}px ${font}`;\n context.fillText(data.label, data.x + data.size + 11, data.y + size / 3);\n};\n","import {Settings} from 'sigma/settings';\nimport {NodeDisplayData, PartialButFor} from 'sigma/types';\nimport {drawLabel} from './label';\nimport {drawNodeBackground} from './nodeBackground';\n\nexport const drawHover = (\n context: CanvasRenderingContext2D,\n data: PartialButFor<NodeDisplayData, 'x' | 'y' | 'size' | 'label'>,\n settings: Settings\n): void => {\n drawNodeBackground(context, data, settings, true);\n drawLabel(context, data, settings, false);\n};\n","/*\n * This class copies sigma/examples/custom-rendering/programs/node.border, but with a some\n * difference: The fragment shader (\"./node.border.frag.glsl\") draws a transparent\n * disc with a colored border. Size of border depends on inPath and highlighted props\n */\n\nimport {floatColor} from 'sigma/utils';\nimport {AbstractNodeProgram} from 'sigma/rendering/webgl/programs/common/node';\nimport {RenderParams} from 'sigma/rendering/webgl/programs/common/program';\n\nimport {vertexShaderSource} from './shaders/node.border.vert.glsl';\nimport {fragmentShaderSource} from './shaders/node.border.frag.glsl';\nimport {NodeAttributes} from '../../types/graphDataTypes';\n\nconst POINTS = 1; // number of vertices for a node\nconst ATTRIBUTES = 5; // number of attributes for one vertex\n\nexport default class NodeProgramBorder extends AbstractNodeProgram {\n borderSize: GLint; // GL variable for border size\n constructor(gl: WebGLRenderingContext) {\n super(gl, vertexShaderSource, fragmentShaderSource, POINTS, ATTRIBUTES);\n\n // Attribute Location\n this.borderSize = gl.getAttribLocation(this.program, 'a_borderSize');\n\n this.bind();\n }\n\n bind(): void {\n super.bind();\n\n const gl = this.gl;\n\n gl.enableVertexAttribArray(this.borderSize);\n gl.vertexAttribPointer(\n this.borderSize,\n 1,\n gl.FLOAT,\n false,\n this.attributes * Float32Array.BYTES_PER_ELEMENT,\n 16\n );\n }\n\n process(data: NodeAttributes, hidden: boolean, offset: number): void {\n const array = this.array;\n let i = offset * POINTS * ATTRIBUTES;\n\n if (hidden || !data.inPath) {\n // draw border only for nodes with inPath or not hidden\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n return;\n }\n\n array[i++] = data.x; // position of center\n array[i++] = data.y;\n array[i++] = data.size; // size\n array[i++] = floatColor(data.color); // color\n array[i] = data.highlighted ? 4 : 2; // size of border in pixels\n }\n\n render(params: RenderParams): void {\n const gl = this.gl;\n\n const program = this.program;\n gl.useProgram(program);\n\n gl.uniform1f(this.ratioLocation, 1 / Math.sqrt(params.ratio));\n gl.uniform1f(this.scaleLocation, params.scalingRatio);\n gl.uniformMatrix3fv(this.matrixLocation, false, params.matrix);\n\n gl.drawArrays(gl.POINTS, 0, this.array.length / ATTRIBUTES);\n }\n}\n","/*\n * This file copies sigma/examples/custom-rendering/programs/node.border.vert.glsl, but with a some\n * difference: added calculation of v_borderRadius using a_borderSize variable\n */\n\nexport const vertexShaderSource = `\nattribute vec2 a_position;\nattribute float a_size;\nattribute vec4 a_color;\nattribute float a_borderSize;\n\nuniform float u_ratio;\nuniform float u_scale;\nuniform mat3 u_matrix;\n\nvarying vec4 v_color;\nvarying float v_border;\nvarying float v_borderRadius;\n\nconst float bias = 255.0 / 254.0;\nconst float radius = 0.5;\n\nvoid main() {\n gl_Position = vec4((u_matrix * vec3(a_position, 1)).xy, 0, 1);\n\n // Multiply the point size twice:\n // - x SCALING_RATIO to correct the canvas scaling\n // - x 2 to correct the formulae\n gl_PointSize = a_size * u_ratio * u_scale * 2.0;\n \n v_border = (1.0 / u_ratio) * (0.5 / a_size);\n v_borderRadius = radius - (radius * a_borderSize / a_size); // border radius in node's size (full size is 1)\n\n // Extract the color:\n v_color = a_color;\n v_color.a *= bias;\n}`;\n","/*\n * This file copies sigma/examples/custom-rendering/programs/node.border.frag.glsl, but with a some\n * difference: white color was changed to transparent and used border radius from v_borderRadius variable\n */\n\nexport const fragmentShaderSource = `\nprecision mediump float;\n\nvarying vec4 v_color; // base color of node\nvarying float v_border;\nvarying float v_borderRadius; // inner border radius\n\nconst vec4 transparent = vec4(0.0, 0.0, 0.0, 0.0); // transparent color\nconst float radius = 0.5;\n\nvoid main(void) {\n float distToCenter = length(gl_PointCoord - vec2(0.5, 0.5)); // distance from current point to center of node\n\n if (distToCenter < v_borderRadius - v_border) // distance to inner border radius\n gl_FragColor = transparent;\n else if (distToCenter < v_borderRadius)\n gl_FragColor = mix(v_color, transparent, (v_borderRadius - distToCenter) / v_border);\n else if (distToCenter < radius - v_border) // distance to outer border radius\n gl_FragColor = v_color;\n else if (distToCenter < radius)\n gl_FragColor = mix(transparent, v_color, (radius - distToCenter) / v_border);\n else // points outside the button\n gl_FragColor = transparent;\n}\n`;\n","import {clearCrossOriginForCORSIfNotSameOrigin, ImageType} from './helpers/imageHelper';\n\n/*\n * ImageLoader is a part of sigma/rendering/webgl/programs/node.image\n * It loads images in one texture, which used for all nodes.\n */\n\nconst MAX_TEXTURE_SIZE = 128;\n\nexport class ImageLoader {\n rebindTextureFns: (() => void)[] = [];\n images: Record<string, ImageType> = {};\n textureImage: ImageData;\n hasReceivedImages = false;\n pendingImagesFrameID: number | undefined = undefined;\n constructor() {}\n\n /**\n * Helper to load an image:\n */\n loadImage = (id: string, imageSource: string): void => {\n if (this.images[id]) return;\n\n const image = new Image();\n image.addEventListener('load', () => {\n this.images[id] = {\n status: 'pending',\n image\n };\n\n if (typeof this.pendingImagesFrameID !== 'number') {\n this.pendingImagesFrameID = requestAnimationFrame(() => this.finalizePendingImages());\n }\n });\n image.addEventListener('error', () => {\n this.images[id] = {status: 'error'};\n });\n this.images[id] = {status: 'loading'};\n\n // Load image:\n clearCrossOriginForCORSIfNotSameOrigin(image, imageSource);\n image.src = imageSource;\n };\n\n /**\n * Helper that takes all pending images and adds them into the texture:\n */\n finalizePendingImages = (): void => {\n this.pendingImagesFrameID = undefined;\n\n const pendingImages: {image: HTMLImageElement; id: string; size: number}[] = [];\n\n // List all pending images:\n for (const id in this.images) {\n const state = this.images[id];\n if (state.status === 'pending') {\n pendingImages.push({\n id,\n image: state.image,\n size: Math.min(state.image.width, state.image.height) || 1\n });\n }\n }\n\n // Add images to texture:\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n canvas.width = pendingImages.reduce(\n (iter, {size}) => iter + size,\n this.hasReceivedImages ? this.textureImage.width : 0\n );\n canvas.height = Math.max(\n this.hasReceivedImages ? this.textureImage.height : 0,\n ...pendingImages.map(({size}) => size)\n );\n\n let xOffset = 0;\n if (this.hasReceivedImages) {\n ctx.putImageData(this.textureImage, 0, 0);\n xOffset = this.textureImage.width;\n }\n pendingImages.forEach(({id, image, size}) => {\n const imageSizeInTexture = Math.min(MAX_TEXTURE_SIZE, size);\n\n // Crop image, to only keep the biggest square, centered:\n let dx = 0,\n dy = 0;\n if ((image.width || 0) > (image.height || 0)) {\n dx = (image.width - image.height) / 2;\n } else {\n dy = (image.height - image.width) / 2;\n }\n ctx.drawImage(image, dx, dy, size, size, xOffset, 0, imageSizeInTexture, imageSizeInTexture);\n\n // Update image state:\n this.images[id] = {\n status: 'ready',\n x: xOffset,\n y: 0,\n width: imageSizeInTexture,\n height: imageSizeInTexture\n };\n\n xOffset += imageSizeInTexture;\n });\n\n this.textureImage = ctx.getImageData(0, 0, canvas.width, canvas.height);\n this.hasReceivedImages = true;\n this.rebindTextureFns.forEach((fn) => fn());\n };\n}\n","import {Coordinates, Dimensions} from 'sigma/types';\n\ntype ImageLoading = {status: 'loading'};\ntype ImageError = {status: 'error'};\ntype ImagePending = {status: 'pending'; image: HTMLImageElement};\ntype ImageReady = {status: 'ready'} & Coordinates & Dimensions;\nexport type ImageType = ImageLoading | ImageError | ImagePending | ImageReady;\n\nexport const clearCrossOriginForCORSIfNotSameOrigin = (img: HTMLImageElement, url: string): void => {\n if (new URL(url, window.location.href).origin !== window.location.origin) {\n img.crossOrigin = '';\n }\n};\n","/*\n * This class copies sigma/rendering/webgl/programs/node.image, but with a some\n * difference: it can change color of picture for inactive state\n * Program rendering nodes using GL_POINTS, but that draws an image on top of\n * the classic colored disc.\n */\nimport {vertexShaderSource} from './shaders/node.image.vert.glsl';\nimport {fragmentShaderSource} from './shaders/node.image.frag.glsl';\n\nimport {AbstractNodeProgram} from 'sigma/rendering/webgl/programs/common/node';\nimport {RenderParams} from 'sigma/rendering/webgl/programs/common/program';\nimport Sigma from 'sigma/sigma';\nimport {floatColor} from 'sigma/utils';\nimport {svg2Url} from '@reltio/mdm-sdk';\nimport {DEFAULT_PROFILE_IMAGE} from '../icons/no_photo.inline.svg';\nimport {ImageLoader} from './image';\nimport {NodeAttributes} from '../../types/graphDataTypes';\n\nconst POINTS = 1;\nconst ATTRIBUTES = 9;\n\nconst defaultImage = {id: 'defaultImage', path: svg2Url(DEFAULT_PROFILE_IMAGE)};\n\n/*\n * To share the texture between the program instances of the graph and the\n * hovered nodes (to prevent some flickering, mostly), this program must be\n * \"built\" for each sigma instance:\n */\nexport default class NodeImageProgram extends AbstractNodeProgram {\n imageLoader: ImageLoader;\n texture: WebGLTexture;\n textureLocation: GLint;\n atlasLocation: WebGLUniformLocation;\n latestRenderParams?: RenderParams;\n inactive: GLint;\n\n constructor(gl: WebGLRenderingContext, renderer: Sigma) {\n super(gl, vertexShaderSource, fragmentShaderSource, POINTS, ATTRIBUTES);\n\n this.imageLoader = new ImageLoader();\n\n this.imageLoader.rebindTextureFns.push(() => {\n if (this && this.rebindTexture) this.rebindTexture();\n if (renderer && renderer.refresh) renderer.refresh();\n });\n\n this.imageLoader.textureImage = new ImageData(1, 1);\n\n // Attribute Location\n this.textureLocation = gl.getAttribLocation(this.program, 'a_texture');\n this.inactive = gl.getAttribLocation(this.program, 'a_inactive');\n\n // Uniform Location\n const atlasLocation = gl.getUniformLocation(this.program, 'u_atlas');\n if (atlasLocation === null) throw new Error('NodeProgramImage: error while getting atlasLocation');\n this.atlasLocation = atlasLocation;\n\n // Initialize WebGL texture:\n this.texture = gl.createTexture() as WebGLTexture;\n gl.bindTexture(gl.TEXTURE_2D, this.texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([0, 0, 0, 0]));\n\n this.imageLoader.loadImage(defaultImage.id, defaultImage.path);\n\n this.bind();\n }\n\n bind(): void {\n super.bind();\n\n const gl = this.gl;\n\n gl.enableVertexAttribArray(this.textureLocation);\n gl.enableVertexAttribArray(this.inactive);\n\n gl.vertexAttribPointer(this.inactive, 1, gl.FLOAT, false, this.attributes * Float32Array.BYTES_PER_ELEMENT, 16);\n\n gl.vertexAttribPointer(\n this.textureLocation,\n 4,\n gl.FLOAT,\n false,\n this.attributes * Float32Array.BYTES_PER_ELEMENT,\n 20\n );\n }\n\n process(data: NodeAttributes, hidden: boolean, offset: number): void {\n const array = this.array;\n let i = offset * POINTS * ATTRIBUTES;\n\n const imageSource = data.image;\n let imageState = imageSource && this.imageLoader.images[imageSource];\n if (typeof imageSource === 'string' && !imageState) {\n this.imageLoader.loadImage(imageSource, imageSource);\n }\n\n if (hidden) {\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n // Texture:\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n return;\n }\n\n array[i++] = data.x; // position of center\n array[i++] = data.y;\n array[i++] = data.size; // size\n array[i++] = floatColor(data.color); // color\n array[i++] = data.inactive ? 1 : 0; // inactive property\n\n // Reference texture:\n if (!imageState || imageState.status !== 'ready') {\n imageState = this.imageLoader.images[defaultImage.id];\n }\n\n if (imageState && imageState.status === 'ready') {\n const {width, height} = this.imageLoader.textureImage;\n array[i++] = imageState.x / width;\n array[i++] = imageState.y / height;\n array[i++] = imageState.width / width;\n array[i++] = imageState.height / height;\n } else {\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n }\n }\n\n render(params: RenderParams): void {\n if (this.hasNothingToRender()) return;\n\n this.latestRenderParams = params;\n\n const gl = this.gl;\n\n const program = this.program;\n gl.useProgram(program);\n\n gl.uniform1f(this.ratioLocation, 1 / Math.sqrt(params.ratio));\n gl.uniform1f(this.scaleLocation, params.scalingRatio);\n gl.uniformMatrix3fv(this.matrixLocation, false, params.matrix);\n gl.uniform1i(this.atlasLocation, 0);\n\n gl.drawArrays(gl.POINTS, 0, this.array.length / ATTRIBUTES);\n }\n\n rebindTexture() {\n const gl = this.gl;\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this.texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this.imageLoader.textureImage);\n gl.generateMipmap(gl.TEXTURE_2D);\n\n if (this.latestRenderParams) {\n this.bind();\n this.bufferData();\n this.render(this.latestRenderParams);\n }\n }\n}\n","export const DEFAULT_PROFILE_IMAGE = `\n<svg width=\"400px\" height=\"400px\" viewBox=\"0 0 400 400\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>Group</title>\n <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"Group\" fill-rule=\"nonzero\">\n <rect id=\"Rectangle\" fill=\"#DFE5E9\" x=\"0\" y=\"0\" width=\"400\" height=\"400\"></rect>\n <path d=\"M0,387.023257 L0,399.918908 L400,399.918908 L400,386.023594 C366.631,377.336524 321.866,364.269931 315.979,359.161654 C308.985,353.083704 270.481,310.508063 270.481,310.508063 L270.481,286.186267 C270.481,286.186267 284.478,266.204006 284.478,261.854473 C284.478,257.515936 285.353,246.219746 291.481,241.011503 C297.61,235.792263 311.607,211.471466 312.481,206.253226 C313.355,201.043983 319.484,188.009379 312.481,185.400259 C305.478,182.801135 307.236,173.244359 308.984,168.026119 C310.733,162.817875 319.484,139.355788 322.981,133.277838 C326.488,127.199888 312.481,108.956041 312.481,108.956041 C312.481,108.956041 294.978,80.2857109 245.975,53.3547939 C196.971,26.4138803 168.967,42.9283105 168.967,42.9283105 L161.964,60.3024507 C161.964,60.3024507 138.341,64.6409874 123.46,77.6765909 C108.589,90.7121943 99.837,106.346921 98.963,115.903698 C98.088,125.460475 103.334,159.339048 105.966,164.557289 C108.589,169.765532 112.96,185.400259 112.96,185.400259 C112.96,185.400259 108.589,183.670842 105.966,188.879085 C103.334,194.097325 112.085,218.419122 112.96,220.159535 C113.834,221.897949 114.718,238.403382 119.963,237.532676 C125.218,236.663969 130.463,251.42799 130.463,251.42799 C130.463,251.42799 143.596,271.41125 144.47,275.759783 C145.344,280.09832 147.967,307.039233 147.967,307.039233 L126.967,331.36103 L102.46,355.682827 C102.459,355.682827 34.042,375.886013 0,387.023257 Z\" id=\"Path\" fill=\"#B3BCC4\"></path>\n <path d=\"M0,387.023257 L0,399.918908 L400,399.918908 L400,386.023594 C366.631,377.336524 321.866,364.269931 315.979,359.161654 C308.985,353.083704 270.481,310.508063 270.481,310.508063 L270.481,286.186267 C270.481,286.186267 284.478,266.204006 284.478,261.854473 C284.478,257.515936 285.353,246.219746 291.481,241.011503 C297.61,235.792263 311.607,211.471466 312.481,206.253226 C313.355,201.043983 319.484,188.009379 312.481,185.400259 C305.478,182.801135 307.236,173.244359 308.984,168.026119 C310.733,162.817875 319.484,139.355788 322.981,133.277838 C326.488,127.199888 312.481,108.956041 312.481,108.956041 C312.481,108.956041 294.978,80.2857109 245.975,53.3547939 C196.971,26.4138803 168.967,42.9283105 168.967,42.9283105 L161.964,60.3024507 C161.964,60.3024507 138.341,64.6409874 123.46,77.6765909 C108.589,90.7121943 99.837,106.346921 98.963,115.903698 C98.088,125.460475 103.334,159.339048 105.966,164.557289 C108.589,169.765532 112.96,185.400259 112.96,185.400259 C112.96,185.400259 108.589,183.670842 105.966,188.879085 C103.334,194.097325 112.085,218.419122 112.96,220.159535 C113.834,221.897949 114.718,238.403382 119.963,237.532676 C125.218,236.663969 130.463,251.42799 130.463,251.42799 C130.463,251.42799 143.596,271.41125 144.47,275.759783 C145.344,280.09832 147.967,307.039233 147.967,307.039233 L126.967,331.36103 L102.46,355.682827 C102.459,355.682827 34.042,375.886013 0,387.023257 Z\" id=\"Path\" fill=\"#B3BCC4\"></path>\n <path d=\"M5.68434189e-14,387.023257 L5.68434189e-14,399.918908 L400,399.918908 L400,386.023594 C366.631,377.336524 321.866,364.269931 315.979,359.161654 C308.985,353.083704 270.481,310.508063 270.481,310.508063 L270.481,286.186267 C270.481,286.186267 284.478,266.204006 284.478,261.854473 C284.478,257.515936 285.353,246.219746 291.481,241.011503 C297.61,235.792263 311.607,211.471466 312.481,206.253226 C313.355,201.043983 319.484,188.009379 312.481,185.400259 C305.478,182.801135 307.236,173.244359 308.984,168.026119 C310.733,162.817875 319.484,139.355788 322.981,133.277838 C326.488,127.199888 312.481,108.956041 312.481,108.956041 C312.481,108.956041 294.978,80.2857109 245.975,53.3547939 C196.971,26.4138803 168.967,42.9283105 168.967,42.9283105 L161.964,60.3024507 C161.964,60.3024507 138.341,64.6409874 123.46,77.6765909 C108.589,90.7121943 99.837,106.346921 98.963,115.903698 C98.088,125.460475 103.334,159.339048 105.966,164.557289 C108.589,169.765532 112.96,185.400259 112.96,185.400259 C112.96,185.400259 108.589,183.670842 105.966,188.879085 C103.334,194.097325 112.085,218.419122 112.96,220.159535 C113.834,221.897949 114.718,238.403382 119.963,237.532676 C125.218,236.663969 130.463,251.42799 130.463,251.42799 C130.463,251.42799 143.596,271.41125 144.47,275.759783 C145.344,280.09832 147.967,307.039233 147.967,307.039233 L126.967,331.36103 L102.46,355.682827 C102.459,355.682827 34.042,375.886013 5.68434189e-14,387.023257 Z\" id=\"Path\" fill=\"#B3BCC4\"></path>\n </g>\n </g>\n</svg>\n`;\n","/*\n * This file copies sigma/examples/custom-rendering/programs/node.image.vert.glsl, but with a some\n * difference: white color was changed to transparent and used border radius from v_borderRadius variable\n */\nexport const vertexShaderSource = `\nattribute vec2 a_position;\nattribute float a_size;\nattribute vec4 a_color;\nattribute vec4 a_texture;\nattribute float a_inactive;\n\nuniform float u_ratio;\nuniform float u_scale;\nuniform mat3 u_matrix;\n\nvarying float v_border;\nvarying float v_inactive;\nvarying vec4 v_color;\nvarying vec4 v_texture;\n\nconst float bias = 255.0 / 254.0;\n\nvoid main() {\n gl_Position = vec4((u_matrix * vec3(a_position, 1)).xy, 0, 1);\n\n // Multiply the point size twice:\n // - x SCALING_RATIO to correct the canvas scaling\n // - x 2 to correct the formulae\n gl_PointSize = a_size * u_ratio * u_scale * 2.0;\n\n v_border = (1.0 / u_ratio) * (0.5 / a_size);\n\n // Extract the color:\n v_color = a_color;\n v_color.a *= bias;\n\n // Pass the texture coordinates:\n v_texture = a_texture;\n\n // Pass inactive property\n v_inactive = a_inactive;\n}`;\n","export const fragmentShaderSource = `\nprecision mediump float;\n\nvarying float v_border;\nvarying float v_inactive;\nvarying vec4 v_color;\nvarying vec4 v_texture;\n\nuniform sampler2D u_atlas;\n\nconst vec4 transparent = vec4(0.0, 0.0, 0.0, 0.0);\nconst float radius = 0.5;\n\n// convert color to gray\nvec4 toGrayscale(in vec4 color)\n{\n float average = (color.r + color.g + color.b) / 3.0;\n return vec4(average, average, average, 1.0);\n}\n\nvoid main(void) {\n vec4 color;\n\n // set texel as color of point\n if (v_texture.w > 0.0) {\n vec4 texel = texture2D(u_atlas, v_texture.xy + gl_PointCoord * v_texture.zw, -1.0);\n color = vec4(mix(v_color, texel, texel.a).rgb, max(texel.a, v_color.a));\n } else {\n color = v_color;\n }\n\n // convert color to gray\n if (v_inactive > 0.0) {\n color = toGrayscale(color);\n }\n\n // distance from point to center of node\n float dist = length(gl_PointCoord - vec2(0.5, 0.5));\n\n if (dist < radius - v_border) // points inside node\n gl_FragColor = color;\n else if (dist < radius) // border of node\n gl_FragColor = mix(transparent, color, (radius - dist) / v_border);\n else // points outside node\n gl_FragColor = transparent;\n}`;\n","export const vertexShaderSource = `\nattribute vec2 a_position;\nattribute float a_size;\nattribute vec4 a_color;\nattribute float a_buttonSize;\nattribute vec2 a_normals;\nattribute vec4 a_texture;\n\nuniform float u_ratio;\nuniform float u_scale;\nuniform mat3 u_matrix;\nuniform float u_sqrtZoomRatio;\nuniform float u_correctionRatio;\n\nvarying float v_border;\nvarying vec4 v_texture;\nvarying vec4 v_color;\n\nconst float bias = 255.0 / 254.0;\n\nvoid main() {\n float normalLength = length(a_normals);\n vec2 unitNormal = (a_normals) / normalLength;\n\n float pixelsThickness = max(normalLength, 1.0 * u_sqrtZoomRatio);\n float webGLThickness = pixelsThickness * u_correctionRatio;\n float adaptedWebGLThickness = webGLThickness * u_sqrtZoomRatio;\n\n // Move the point\n float adaptedWebGLNodeRadius = a_size * 2.0 * u_correctionRatio * u_sqrtZoomRatio;\n vec2 compensationVector = vec2(-unitNormal.y, unitNormal.x) * (adaptedWebGLNodeRadius);\n\n // Set position\n gl_Position = vec4((u_matrix * vec3(a_position + compensationVector, 1)).xy, 0, 1);\n\n // Multiply the point size twice:\n // - x SCALING_RATIO to correct the canvas scaling\n // - x 2 to correct the formulae\n gl_PointSize = a_buttonSize * u_ratio * u_scale * 2.0;\n\n v_border = (1.0 / u_ratio) * (0.5 / a_size);\n\n // Extract the color:\n v_color = a_color;\n v_color.a *= bias;\n\n // Pass the texture coordinates:\n v_texture = a_texture;\n}`;\n","import {vertexShaderSource} from './shaders/node.buttons.vert.glsl';\nimport {fragmentShaderSource} from './shaders/node.buttons.frag.glsl';\n\nimport Sigma from 'sigma/sigma';\nimport {AbstractNodeProgram} from 'sigma/rendering/webgl/programs/common/node';\nimport {RenderParams} from 'sigma/rendering/webgl/programs/common/program';\nimport {floatColor} from 'sigma/utils';\nimport {svg2Url} from '@reltio/mdm-sdk';\nimport {EXPAND_ICON} from '../icons/expandIcon.inline.svg';\nimport {COLLAPSE_ICON} from '../icons/collapseIcon.inline.svg';\nimport {ImageLoader} from './image';\nimport {NodeAttributes} from '../../types/graphDataTypes';\n\nconst POINTS = 2; // number of button for 1 node\nconst ATTRIBUTES = 11; // number of attributes for one button\n\n// images for buttons\nconst defaultImages = [\n {id: 'expandIcon', path: svg2Url(EXPAND_ICON)},\n {id: 'collapseIcon', path: svg2Url(COLLAPSE_ICON)}\n];\n\nexport default class NodeButtonsProgram extends AbstractNodeProgram {\n imageLoader: ImageLoader;\n texture: WebGLTexture;\n textureLocation: GLint;\n buttonSize: GLint; // buttons size\n normals: GLint; // normals to calculate positions of buttons\n correctionRatioLocation: WebGLUniformLocation;\n sqrtZoomRatioLocation: WebGLUniformLocation;\n atlasLocation: WebGLUniformLocation;\n latestRenderParams?: RenderParams;\n\n constructor(gl: WebGLRenderingContext, renderer: Sigma) {\n super(gl, vertexShaderSource, fragmentShaderSource, POINTS, ATTRIBUTES);\n\n this.imageLoader = new ImageLoader();\n\n this.imageLoader.rebindTextureFns.push(() => {\n if (this && this.rebindTexture) this.rebindTexture();\n if (renderer && renderer.refresh) renderer.refresh();\n });\n\n this.imageLoader.textureImage = new ImageData(1, 1);\n\n // Attribute Location\n this.textureLocation = gl.getAttribLocation(this.program, 'a_texture');\n this.buttonSize = gl.getAttribLocation(this.program, 'a_buttonSize');\n this.normals = gl.getAttribLocation(this.program, 'a_normals');\n\n // Uniform Location\n const correctionRatioLocation = gl.getUniformLocation(this.program, 'u_correctionRatio');\n if (correctionRatioLocation === null)\n throw new Error('NodeButtonsProgram: error while getting correctionRatioLocation');\n this.correctionRatioLocation = correctionRatioLocation;\n\n const sqrtZoomRatioLocation = gl.getUniformLocation(this.program, 'u_sqrtZoomRatio');\n if (sqrtZoomRatioLocation === null)\n throw new Error('NodeButtonsProgram: error while getting sqrtZoomRatioLocation');\n this.sqrtZoomRatioLocation = sqrtZoomRatioLocation;\n\n const atlasLocation = gl.getUniformLocation(this.program, 'u_atlas');\n if (atlasLocation === null) throw new Error('NodeButtonsProgram: error while getting atlasLocation');\n this.atlasLocation = atlasLocation;\n\n // Initialize WebGL texture:\n this.texture = gl.createTexture() as WebGLTexture;\n gl.bindTexture(gl.TEXTURE_2D, this.texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([0, 0, 0, 0]));\n\n defaultImages.map((image) => this.imageLoader.loadImage(image.id, image.path));\n\n this.bind();\n }\n\n bind(): void {\n super.bind();\n\n const gl = this.gl;\n\n gl.enableVertexAttribArray(this.buttonSize);\n gl.enableVertexAttribArray(this.normals);\n gl.enableVertexAttribArray(this.textureLocation);\n\n gl.vertexAttribPointer(\n this.buttonSize,\n 1,\n gl.FLOAT,\n false,\n this.attributes * Float32Array.BYTES_PER_ELEMENT,\n 16\n );\n gl.vertexAttribPointer(this.normals, 2, gl.FLOAT, false, this.attributes * Float32Array.BYTES_PER_ELEMENT, 20);\n gl.vertexAttribPointer(\n this.textureLocation,\n 4,\n gl.FLOAT,\n false,\n this.attributes * Float32Array.BYTES_PER_ELEMENT,\n 28\n );\n }\n\n process(data: NodeAttributes, hidden: boolean, offset: number): void {\n const array = this.array;\n let i = offset * POINTS * ATTRIBUTES;\n const hideButtons = hidden || (data.inactive && !data.highlighted);\n\n // Computing normals\n const [dx, dy] = data.buttonOffset || [0, 0];\n\n let len = dx * dx + dy * dy,\n n1 = 0,\n n2 = 0;\n\n if (len) {\n len = 1 / Math.sqrt(len);\n\n n1 = dy * len;\n n2 = dx * len;\n }\n\n // Expand button\n\n if (hideButtons || !data.showExpand) {\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n // Texture:\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n } else {\n const expandImageState = this.imageLoader.images['expandIcon'];\n\n array[i++] = data.x; // position of center\n array[i++] = data.y;\n array[i++] = data.size; // size\n array[i++] = floatColor(data.color); // color\n array[i++] = data.buttonSize || 0; // button radius\n array[i++] = n1; // normals\n array[i++] = -n2;\n\n // Reference texture:\n if (expandImageState && expandImageState.status === 'ready') {\n const {width, height} = this.imageLoader.textureImage;\n array[i++] = expandImageState.x / width;\n array[i++] = expandImageState.y / height;\n array[i++] = expandImageState.width / width;\n array[i++] = expandImageState.height / height;\n } else {\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n }\n }\n\n // Collapse button\n\n // don't show button\n if (hideButtons || !data.showCollapse) {\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n // Texture:\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n } else {\n const collapseImageState = this.imageLoader.images['collapseIcon'];\n\n array[i++] = data.x; // position of center\n array[i++] = data.y;\n array[i++] = data.size; // size\n array[i++] = floatColor(data.color); // color\n array[i++] = data.buttonSize || 0; // button radius\n array[i++] = -n1; // normals\n array[i++] = -n2;\n\n // Reference texture:\n if (collapseImageState && collapseImageState.status === 'ready') {\n const {width, height} = this.imageLoader.textureImage;\n array[i++] = collapseImageState.x / width;\n array[i++] = collapseImageState.y / height;\n array[i++] = collapseImageState.width / width;\n array[i++] = collapseImageState.height / height;\n } else {\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n }\n }\n }\n\n render(params: RenderParams): void {\n if (this.hasNothingToRender()) return;\n\n this.latestRenderParams = params;\n\n const gl = this.gl;\n\n const program = this.program;\n gl.useProgram(program);\n\n gl.uniform1f(this.ratioLocation, 1 / Math.sqrt(params.ratio));\n gl.uniform1f(this.scaleLocation, params.scalingRatio);\n gl.uniformMatrix3fv(this.matrixLocation, false, params.matrix);\n gl.uniform1f(this.sqrtZoomRatioLocation, Math.sqrt(params.ratio));\n gl.uniform1f(this.correctionRatioLocation, params.correctionRatio);\n gl.uniform1i(this.atlasLocation, 1);\n\n gl.drawArrays(gl.POINTS, 0, this.array.length / ATTRIBUTES);\n }\n\n rebindTexture() {\n const gl = this.gl;\n\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, this.texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this.imageLoader.textureImage);\n gl.generateMipmap(gl.TEXTURE_2D);\n\n if (this.latestRenderParams) {\n this.bind();\n this.bufferData();\n this.render(this.latestRenderParams);\n }\n }\n}\n","export const EXPAND_ICON = `<svg width=\"32\" height=\"32\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"white\"/>\n<circle cx=\"8\" cy=\"8\" r=\"7.5\" stroke=\"black\" stroke-opacity=\"0.541176\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.80013 7.20003V4H7.20013L7.20013 7.20003H4V8.80003H7.20013L7.20013 12H8.80013V8.80003H12V7.20003H8.80013Z\" fill=\"black\" fill-opacity=\"0.541176\"/>\n</svg>`;\n","export const COLLAPSE_ICON = `<svg width=\"32\" height=\"32\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"white\"/>\n<circle cx=\"8\" cy=\"8\" r=\"7.5\" stroke=\"black\" stroke-opacity=\"0.541176\"/>\n<path d=\"M4 7.20004H12V8.80004H4V7.20004Z\" fill=\"black\" fill-opacity=\"0.541176\"/>\n</svg>\n`;\n","export const fragmentShaderSource = `\nprecision mediump float;\n\nvarying float v_border;\nvarying vec4 v_texture;\n\nuniform sampler2D u_atlas;\n\nconst vec4 transparent = vec4(0.0, 0.0, 0.0, 0.0);\nconst vec4 black = vec4(0.0, 0.0, 0.0, 1.0);\nconst float bias = 255.0 / 254.0;\nconst float radius = 0.5;\n\nvoid main(void) {\n vec4 color;\n float distToCenter = length(gl_PointCoord - vec2(0.5, 0.5));\n\n // set texel as color of point\n if (v_texture.w > 0.0) {\n vec4 texel = texture2D(u_atlas, v_texture.xy + gl_PointCoord * v_texture.zw, -1.0);\n color = vec4(mix(black, texel, texel.a).rgb, max(texel.a, bias));\n } else {\n color = black;\n }\n\n if (distToCenter < radius - v_border) // points inside button\n gl_FragColor = color;\n else if (distToCenter < radius) // border of button\n gl_FragColor = mix(transparent, color, (0.5 - distToCenter) / v_border);\n else // points outside button\n gl_FragColor = transparent;\n}`;\n","/**\n * This class extends src/rendering/webgl/programs/edge.arrowHead.ts for arrowSizeRatio support\n */\nimport SigmaEdgeArrowHeadProgram from 'sigma/rendering/webgl/programs/edge.arrowHead';\nimport {floatColor} from 'sigma/utils';\nimport {EdgeAttributes, NodeAttributes} from '../../types/graphDataTypes';\n\nconst POINTS = 3,\n ATTRIBUTES = 9,\n STRIDE = POINTS * ATTRIBUTES;\n\nexport default class EdgeArrowHeadProgram extends SigmaEdgeArrowHeadProgram {\n process(\n sourceData: NodeAttributes,\n targetData: NodeAttributes,\n data: EdgeAttributes,\n hidden: boolean,\n offset: number\n ): void {\n if (hidden) {\n for (let i = offset * STRIDE, l = i + STRIDE; i < l; i++) this.array[i] = 0;\n\n return;\n }\n // Our changes - added arrowSizeRatio support\n const arrowSizeRatio = data.arrowSizeRatio || 1;\n const thickness = data.size * arrowSizeRatio || 1,\n radius = targetData.size || 1,\n x1 = sourceData.x,\n y1 = sourceData.y,\n x2 = targetData.x,\n y2 = targetData.y,\n color = floatColor(data.color);\n\n // Computing normals\n const dx = x2 - x1,\n dy = y2 - y1;\n\n let len = dx * dx + dy * dy,\n n1 = 0,\n n2 = 0;\n\n if (len) {\n len = 1 / Math.sqrt(len);\n\n n1 = -dy * len * thickness;\n n2 = dx * len * thickness;\n }\n\n let i = POINTS * ATTRIBUTES * offset;\n\n const array = this.array;\n\n // First point\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = radius;\n array[i++] = color;\n array[i++] = 1;\n array[i++] = 0;\n array[i++] = 0;\n\n // Second point\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = radius;\n array[i++] = color;\n array[i++] = 0;\n array[i++] = 1;\n array[i++] = 0;\n\n // Third point\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = radius;\n array[i++] = color;\n array[i++] = 0;\n array[i++] = 0;\n array[i] = 1;\n }\n}\n","import {EdgeAttributes, NodeAttributes} from '../../types/graphDataTypes';\nimport EdgeArrowHeadProgram from './edge.arrowHead';\n\nexport default class EdgeReversedArrowHeadProgram extends EdgeArrowHeadProgram {\n process(\n sourceData: NodeAttributes,\n targetData: NodeAttributes,\n data: EdgeAttributes,\n hidden: boolean,\n offset: number\n ): void {\n super.process(targetData, sourceData, data, hidden, offset);\n }\n}\n","/**\n * This class copies src/rendering/webgl/programs/edge.clamped.ts, but with a some difference:\n * implemented arrowSizeRatio edge attribute, forwarded it to shaders as a_arrowSizeRatio\n * implemented 'doubleArrow' edge type support\n */\n\nimport {floatColor, canUse32BitsIndices} from 'sigma/utils';\nimport {AbstractEdgeProgram} from 'sigma/rendering/webgl/programs/common/edge';\nimport fragmentShaderSource from 'sigma/rendering/webgl/shaders/edge.frag.glsl';\nimport {RenderParams} from 'sigma/rendering/webgl/programs/common/program';\n\nimport {vertexShaderSource} from './shaders/edge.clamped.vert.glsl';\nimport {EdgeAttributes, NodeAttributes} from '../../types/graphDataTypes';\n\nconst POINTS = 4,\n ATTRIBUTES = 7,\n STRIDE = POINTS * ATTRIBUTES;\n\nexport default class EdgeClampedProgram extends AbstractEdgeProgram {\n IndicesArray: Uint32ArrayConstructor | Uint16ArrayConstructor;\n indicesArray: Uint32Array | Uint16Array;\n indicesBuffer: WebGLBuffer;\n indicesType: GLenum;\n positionLocation: GLint;\n colorLocation: GLint;\n normalLocation: GLint;\n radiusLocation: GLint;\n arrowSizeRatioLocation: GLint; // our change\n matrixLocation: WebGLUniformLocation;\n sqrtZoomRatioLocation: WebGLUniformLocation;\n correctionRatioLocation: WebGLUniformLocation;\n canUse32BitsIndices: boolean;\n\n constructor(gl: WebGLRenderingContext) {\n super(gl, vertexShaderSource, fragmentShaderSource, POINTS, ATTRIBUTES);\n\n // Initializing indices buffer\n const indicesBuffer = gl.createBuffer();\n if (indicesBuffer === null) throw new Error('EdgeClampedProgram: error while getting resolutionLocation');\n this.indicesBuffer = indicesBuffer;\n\n // Locations:\n this.positionLocation = gl.getAttribLocation(this.program, 'a_position');\n this.colorLocation = gl.getAttribLocation(this.program, 'a_color');\n this.normalLocation = gl.getAttribLocation(this.program, 'a_normal');\n this.radiusLocation = gl.getAttribLocation(this.program, 'a_radius');\n this.arrowSizeRatioLocation = gl.getAttribLocation(this.program, 'a_arrowSizeRatio'); // our change\n\n // Uniform locations\n const matrixLocation = gl.getUniformLocation(this.program, 'u_matrix');\n if (matrixLocation === null) throw new Error('EdgeClampedProgram: error while getting matrixLocation');\n this.matrixLocation = matrixLocation;\n\n const sqrtZoomRatioLocation = gl.getUniformLocation(this.program, 'u_sqrtZoomRatio');\n if (sqrtZoomRatioLocation === null)\n throw new Error('EdgeClampedProgram: error while getting cameraRatioLocation');\n this.sqrtZoomRatioLocation = sqrtZoomRatioLocation;\n\n const correctionRatioLocation = gl.getUniformLocation(this.program, 'u_correctionRatio');\n if (correctionRatioLocation === null)\n throw new Error('EdgeClampedProgram: error while getting viewportRatioLocation');\n this.correctionRatioLocation = correctionRatioLocation;\n\n // Enabling the OES_element_index_uint extension\n // NOTE: on older GPUs, this means that really large graphs won't\n // have all their edges rendered. But it seems that the\n // `OES_element_index_uint` is quite everywhere so we'll handle\n // the potential issue if it really arises.\n // NOTE: when using webgl2, the extension is enabled by default\n this.canUse32BitsIndices = canUse32BitsIndices(gl);\n this.IndicesArray = this.canUse32BitsIndices ? Uint32Array : Uint16Array;\n this.indicesArray = new this.IndicesArray();\n this.indicesType = this.canUse32BitsIndices ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT;\n\n this.bind();\n }\n\n bind(): void {\n const gl = this.gl;\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer);\n\n // Bindings\n gl.enableVertexAttribArray(this.positionLocation);\n gl.enableVertexAttribArray(this.normalLocation);\n gl.enableVertexAttribArray(this.colorLocation);\n gl.enableVertexAttribArray(this.radiusLocation);\n gl.enableVertexAttribArray(this.arrowSizeRatioLocation); // our change\n\n gl.vertexAttribPointer(\n this.positionLocation,\n 2,\n gl.FLOAT,\n false,\n ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT,\n 0\n );\n gl.vertexAttribPointer(this.normalLocation, 2, gl.FLOAT, false, ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT, 8);\n gl.vertexAttribPointer(\n this.colorLocation,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT,\n 16\n );\n gl.vertexAttribPointer(\n this.radiusLocation,\n 1,\n gl.FLOAT,\n false,\n ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT,\n 20\n );\n // our change\n gl.vertexAttribPointer(\n this.arrowSizeRatioLocation,\n 1,\n gl.FLOAT,\n false,\n ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT,\n 24\n );\n }\n\n process(\n sourceData: NodeAttributes,\n targetData: NodeAttributes,\n data: EdgeAttributes,\n hidden: boolean,\n offset: number\n ): void {\n if (hidden) {\n for (let i = offset * STRIDE, l = i + STRIDE; i < l; i++) this.array[i] = 0;\n return;\n }\n const arrowSizeRatio = data.arrowSizeRatio || 1; // our change\n\n const thickness = data.size || 1,\n x1 = sourceData.x,\n y1 = sourceData.y,\n x2 = targetData.x,\n y2 = targetData.y,\n //our change - added sourceRadius\n sourceRadius = data.type === 'doubleArrow' ? sourceData.size || 1 : 0,\n targetRadius = targetData.size || 1,\n color = floatColor(data.color);\n\n // Computing normals\n const dx = x2 - x1,\n dy = y2 - y1;\n\n let len = dx * dx + dy * dy,\n n1 = 0,\n n2 = 0;\n\n if (len) {\n len = 1 / Math.sqrt(len);\n\n n1 = -dy * len * thickness;\n n2 = dx * len * thickness;\n }\n\n let i = POINTS * ATTRIBUTES * offset;\n\n const array = this.array;\n\n // First point\n array[i++] = x1;\n array[i++] = y1;\n array[i++] = n1;\n array[i++] = n2;\n array[i++] = color;\n array[i++] = -sourceRadius;\n array[i++] = arrowSizeRatio;\n\n // First point flipped\n array[i++] = x1;\n array[i++] = y1;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = color;\n array[i++] = sourceRadius;\n array[i++] = arrowSizeRatio;\n\n // Second point\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = n1;\n array[i++] = n2;\n array[i++] = color;\n array[i++] = targetRadius;\n array[i++] = arrowSizeRatio;\n\n // Second point flipped\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = color;\n array[i++] = -targetRadius;\n array[i] = arrowSizeRatio;\n }\n\n computeIndices(): void {\n const l = this.array.length / ATTRIBUTES;\n const size = l + l / 2;\n const indices = new this.IndicesArray(size);\n\n for (let i = 0, c = 0; i < l; i += 4) {\n indices[c++] = i;\n indices[c++] = i + 1;\n indices[c++] = i + 2;\n indices[c++] = i + 2;\n indices[c++] = i + 1;\n indices[c++] = i + 3;\n }\n\n this.indicesArray = indices;\n }\n\n bufferData(): void {\n super.bufferData();\n\n // Indices data\n const gl = this.gl;\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indicesArray, gl.STATIC_DRAW);\n }\n\n render(params: RenderParams): void {\n if (this.hasNothingToRender()) return;\n\n const gl = this.gl;\n\n const program = this.program;\n gl.useProgram(program);\n\n // Binding uniforms\n gl.uniformMatrix3fv(this.matrixLocation, false, params.matrix);\n gl.uniform1f(this.sqrtZoomRatioLocation, Math.sqrt(params.ratio));\n gl.uniform1f(this.correctionRatioLocation, params.correctionRatio);\n\n // Drawing:\n gl.drawElements(gl.TRIANGLES, this.indicesArray.length, this.indicesType, 0);\n }\n}\n","/*\n * This file copies sigma/src/rendering/webgl/shaders/edge.clamped.vert.glsl, but with a some\n * difference: added calculation of arrowSizeCoefficient using a_arrowSizeRatio attribute\n */\n\nexport const vertexShaderSource = `\nattribute vec4 a_color;\nattribute vec2 a_normal;\nattribute vec2 a_position;\nattribute float a_radius;\nattribute float a_arrowSizeRatio;\n\nuniform mat3 u_matrix;\nuniform float u_sqrtZoomRatio;\nuniform float u_correctionRatio;\n\nvarying vec4 v_color;\nvarying vec2 v_normal;\nvarying float v_thickness;\n\nconst float minThickness = 1.7;\nconst float bias = 255.0 / 254.0;\nconst float arrowHeadLengthThicknessRatio = 2.5;\n\nvoid main() {\n float normalLength = length(a_normal);\n vec2 unitNormal = a_normal / normalLength;\n\n // These first computations are taken from edge.vert.glsl. Please read it to\n // get better comments on what's happening:\n float pixelsThickness = max(normalLength, minThickness * u_sqrtZoomRatio);\n float webGLThickness = pixelsThickness * u_correctionRatio;\n float adaptedWebGLThickness = webGLThickness * u_sqrtZoomRatio;\n\n // our change - apply a_arrowSizeRatio depending on current zoom and minThickness\n float arrowSizeCoefficient = min(a_arrowSizeRatio, a_arrowSizeRatio / (u_sqrtZoomRatio * minThickness));\n\n // Here, we move the point to leave space for the arrow head:\n float direction = sign(a_radius);\n float adaptedWebGLNodeRadius = direction * a_radius * 2.0 * u_correctionRatio * u_sqrtZoomRatio;\n\n float adaptedWebGLArrowHeadLength = adaptedWebGLThickness * 2.0 * arrowHeadLengthThicknessRatio * arrowSizeCoefficient;\n\n\n vec2 compensationVector = vec2(-direction * unitNormal.y, direction * unitNormal.x) * (adaptedWebGLNodeRadius + adaptedWebGLArrowHeadLength);\n\n // Here is the proper position of the vertex\n gl_Position = vec4((u_matrix * vec3(a_position + unitNormal * adaptedWebGLThickness + compensationVector, 1)).xy, 0, 1);\n\n v_thickness = webGLThickness / u_sqrtZoomRatio;\n\n v_normal = unitNormal;\n v_color = a_color;\n v_color.a *= bias;\n}`;\n","import React, {useMemo} from 'react';\nimport {MultiGraph} from 'graphology';\nimport {SigmaContainer} from '@react-sigma/core';\nimport '@react-sigma/core/lib/react-sigma.min.css';\nimport {createNodeCompoundProgram} from 'sigma/rendering/webgl/programs/common/node';\nimport {createEdgeCompoundProgram} from 'sigma/rendering/webgl/programs/common/edge';\nimport LineEdgeProgram from 'sigma/rendering/webgl/programs/edge';\nimport {drawHover} from '../../rendering/canvas/hover';\nimport {drawLabel} from '../../rendering/canvas/label';\nimport NodeProgramBorder from '../../rendering/webgl/node.border';\nimport NodeImageProgram from '../../rendering/webgl/node.image';\nimport NodeButtonsProgram from '../../rendering/webgl/node.buttons';\nimport EdgeArrowHeadProgram from '../../rendering/webgl/edge.arrowHead';\nimport EdgeReversedArrowHeadProgram from '../../rendering/webgl/edge.reversedArrowHead';\nimport EdgeClampedProgram from '../../rendering/webgl/edge.clamped';\n\ntype Props = {\n children: React.ReactElement;\n};\n\nexport const SigmaGraphContainer = ({children}: Props) => {\n const initialSettings = useMemo(\n () => ({\n allowInvalidContainer: true,\n defaultNodeType: 'image',\n hoverRenderer: drawHover,\n labelRenderer: drawLabel,\n nodeProgramClasses: {\n image: createNodeCompoundProgram([NodeImageProgram, NodeProgramBorder, NodeButtonsProgram])\n },\n edgeProgramClasses: {\n line: LineEdgeProgram,\n arrow: createEdgeCompoundProgram([EdgeClampedProgram, EdgeArrowHeadProgram]),\n doubleArrow: createEdgeCompoundProgram([\n EdgeClampedProgram,\n EdgeArrowHeadProgram,\n EdgeReversedArrowHeadProgram\n ])\n },\n labelFont: 'Roboto',\n labelSize: 13,\n labelColor: {\n color: 'rgba(0, 0, 0, 0.87)'\n }\n }),\n []\n );\n\n return (\n <SigmaContainer graph={MultiGraph} style={{background: 'transparent'}} initialSettings={initialSettings}>\n {children}\n </SigmaContainer>\n );\n};\n","import drawEdgeLabel from 'sigma/rendering/canvas/edge-label';\nimport {NodeDisplayData, PartialButFor} from 'sigma/types';\nimport {Settings} from 'sigma/settings';\nimport {EdgeAttributes} from '../../types/graphDataTypes';\n\nconst getSelfLoopControlPoints = (x: number, y: number, size: number, a = 0) => {\n return {\n x1: x - (size + a) * 7,\n y1: y,\n x2: x,\n y2: y + (size + a) * 7\n };\n};\n\nconst getArrowPoints = (x: number, y: number, d: number, sX: number, sY: number, size: number, aSize: number) => {\n const aX = x + ((sX - x) * (d - aSize - size)) / d;\n const aY = y + ((sY - y) * (d - aSize - size)) / d;\n const vX = ((sX - x) * aSize) / d;\n const vY = ((sY - y) * aSize) / d;\n return {aX, aY, vX, vY};\n};\n\nconst getFirstArrowPoints = (\n cp: ReturnType<typeof getSelfLoopControlPoints>,\n sX: number,\n sY: number,\n size: number,\n aSize: number\n) => {\n const d = Math.sqrt(Math.pow(sX - cp.x1, 2) + Math.pow(sY - cp.y1, 2));\n return getArrowPoints(cp.x2, cp.y2, d, sX, sY, size, aSize);\n};\n\nconst getSecondArrowPoints = (\n cp: ReturnType<typeof getSelfLoopControlPoints>,\n sX: number,\n sY: number,\n size: number,\n aSize: number\n) => {\n const d = Math.sqrt(Math.pow(sX - cp.x1, 2) + Math.pow(sY - cp.y1, 2));\n return getArrowPoints(cp.x1, cp.y1, d, sX, sY, size, aSize);\n};\n\nconst drawArrow = (context, aX, aY, vX, vY) => {\n context.beginPath();\n context.moveTo(aX + vX, aY + vY);\n context.lineTo(aX + vY * ARROW_SCALE, aY - vX * ARROW_SCALE);\n context.lineTo(aX - vY * ARROW_SCALE, aY + vX * ARROW_SCALE);\n context.lineTo(aX + vX, aY + vY);\n context.closePath();\n context.fill();\n};\n\nconst ARROW_SCALE = 0.4;\nconst LOOP_SCALE = 0.6;\nconst ARROW_SIZE_RATIO_SCALE = 2.2;\n\nconst edgeLabelRenderer = (\n context: CanvasRenderingContext2D,\n edgeData: EdgeAttributes,\n sourceData: PartialButFor<NodeDisplayData, 'x' | 'y' | 'size'>,\n targetData: PartialButFor<NodeDisplayData, 'x' | 'y' | 'size'>,\n settings: Settings\n): void => {\n if (edgeData.loop) {\n const {size, color, arrowSizeRatio = 1} = edgeData;\n const sX = sourceData.x;\n const sY = sourceData.y;\n const sSize = sourceData.size;\n const scale = sSize * LOOP_SCALE;\n const cp = getSelfLoopControlPoints(sX, sY, scale);\n\n context.strokeStyle = color;\n context.lineWidth = size;\n\n if (edgeData.type === 'arrow' || edgeData.type === 'doubleArrow') {\n context.fillStyle = color;\n if (edgeData.type === 'doubleArrow') {\n const {aX, aY, vX, vY} = getFirstArrowPoints(\n cp,\n sX,\n sY,\n sSize,\n size * arrowSizeRatio * ARROW_SIZE_RATIO_SCALE\n );\n drawArrow(context, aX, aY, vX, vY);\n context.beginPath();\n context.moveTo(aX, aY);\n } else {\n context.beginPath();\n context.moveTo(sX, sY);\n }\n const {aX, aY, vX, vY} = getSecondArrowPoints(\n cp,\n sX,\n sY,\n sSize,\n size * arrowSizeRatio * ARROW_SIZE_RATIO_SCALE\n );\n context.bezierCurveTo(cp.x2, cp.y2, cp.x1, cp.y1, aX, aY);\n context.stroke();\n drawArrow(context, aX, aY, vX, vY);\n } else {\n context.beginPath();\n context.moveTo(sX, sY);\n context.bezierCurveTo(cp.x1, cp.y1, cp.x2, cp.y2, sX, sY);\n context.stroke();\n }\n }\n drawEdgeLabel(context, edgeData, sourceData, targetData, settings);\n};\n\nexport {edgeLabelRenderer};\n","import {useCallback, useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {memoizeWith} from 'ramda';\nimport {useLoadGraph, useRegisterEvents, useSetSettings, useSigma} from '@react-sigma/core';\nimport Graph from 'graphology';\nimport {animateNodes} from 'sigma/utils/animate';\nimport {bidirectional} from 'graphology-shortest-path';\nimport {toUndirected} from 'graphology-operators';\nimport {Entity, getEntityImage, HopsResponse, RelationTypeDirection} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {\n EdgeAttributes,\n Filters,\n GraphologyLayout,\n GraphologyWorkerLayoutConstructor,\n GraphPathType,\n NodeAttributes\n} from '../types/graphDataTypes';\nimport {edgeLabelRenderer} from '../rendering/canvas/edgeLabelRenderer';\n\nconst edgePathFromNodePath = (graph: Graph, nodes: string[], isDirected = false): string[] => {\n const edges = [];\n const searchFn = isDirected ? 'findOutEdge' : 'findEdge';\n if (nodes) {\n nodes.reduce((startNode, secondNode) => {\n edges.push(graph[searchFn](startNode, secondNode, (x) => !!x));\n return secondNode;\n });\n }\n return edges;\n};\n\nconst mouseIsOnNode = (mouseX: number, mouseY: number, nodeX: number, nodeY: number, size: number): boolean => {\n return (\n mouseX > nodeX - size &&\n mouseX < nodeX + size &&\n mouseY > nodeY - size &&\n mouseY < nodeY + size &&\n Math.sqrt(Math.pow(mouseX - nodeX, 2) + Math.pow(mouseY - nodeY, 2)) < size\n );\n};\n\nconst memoizedGetEntityImage = memoizeWith((metadata, storagePath, entity) => entity.type, getEntityImage);\n\nconst SELECTED_NODE: Partial<NodeAttributes> = {\n size: 24,\n buttonSize: 8,\n buttonOffset: [19, 19]\n};\n\nconst DEFAULT_NODE: Partial<NodeAttributes> = {\n size: 12,\n buttonSize: 6,\n buttonOffset: [8, 13]\n};\n\ntype Props = {\n data: HopsResponse;\n graph: Graph;\n syncLayout?: GraphologyLayout<Record<string, unknown>>;\n workerLayout?: GraphologyWorkerLayoutConstructor<Record<string, unknown>>;\n layoutSettings?: Record<string, unknown>;\n isDirected?: boolean;\n selectedNode: string;\n onNodeClick: (node: string) => void;\n onNodeCollapse: (node: string, path: GraphPathType) => void;\n onNodeExpand: (node: string) => void;\n filters?: Filters;\n};\n\nconst WORKER_LAYOUT_ANIMATION_DURATION = 5000;\nconst SYNC_LAYOUT_ANIMATION_DURATION = 1000;\n\nconst directionTypeToEdgeType = (directionType: RelationTypeDirection) =>\n ({\n [RelationTypeDirection.bidirectional]: 'doubleArrow',\n [RelationTypeDirection.directed]: 'arrow',\n [RelationTypeDirection.undirected]: 'line'\n }[directionType] || 'line');\n\nexport const useGraphLayout = ({\n data,\n graph,\n syncLayout,\n workerLayout,\n layoutSettings,\n selectedNode,\n isDirected = false,\n onNodeClick,\n onNodeCollapse,\n onNodeExpand,\n filters\n}: Props): void => {\n const sigma = useSigma();\n const loadGraph = useLoadGraph();\n const registerEvents = useRegisterEvents();\n const setSettings = useSetSettings();\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const absoluteImagePath = useSelector(mdm.selectors.getAbsoluteImagePath) || '';\n const [hoveredNode, setHoveredNode] = useState<string>(undefined);\n const [undirectedGraph, setUndirectedGraph] = useState<Graph>(null);\n const [selectedPath, setSelectedPath] = useState<GraphPathType>({});\n\n useEffect(() => {\n sigma.getCamera().setState({ratio: 1.2});\n }, [graph, sigma]);\n\n useEffect(() => {\n setUndirectedGraph(toUndirected(graph));\n loadGraph(graph);\n if (syncLayout) {\n const positions = syncLayout(sigma.getGraph(), layoutSettings);\n animateNodes(sigma.getGraph(), positions, {duration: SYNC_LAYOUT_ANIMATION_DURATION});\n }\n if (workerLayout) {\n const worker = new workerLayout(sigma.getGraph(), layoutSettings);\n worker.start();\n const timer = setTimeout(() => {\n worker.stop();\n }, WORKER_LAYOUT_ANIMATION_DURATION);\n return () => {\n clearTimeout(timer);\n worker.kill();\n };\n }\n }, [data, graph, syncLayout, workerLayout, sigma, layoutSettings, loadGraph, isDirected]);\n\n const getPathToNode = useCallback(\n (selectedNode: string): GraphPathType => {\n const graph = sigma.getGraph();\n const rootNode = entity?.uri;\n if (graph && undirectedGraph && rootNode && selectedNode && rootNode !== selectedNode) {\n try {\n const nodes = bidirectional(undirectedGraph, rootNode, selectedNode);\n const edges = edgePathFromNodePath(graph, nodes);\n return nodes\n ? {\n edges,\n nodes\n }\n : {};\n } catch (e) {\n //if there is no node, we return empty object\n }\n }\n return {};\n },\n [sigma, entity?.uri, undirectedGraph]\n );\n\n useEffect(() => {\n setSelectedPath(getPathToNode(selectedNode));\n }, [selectedNode, getPathToNode]);\n\n useEffect(() => {\n registerEvents({\n enterNode: ({node}) => {\n setHoveredNode(node);\n },\n leaveNode: () => {\n setHoveredNode(undefined);\n },\n clickNode: ({node}) => {\n onNodeClick(node);\n },\n click: (event) => {\n const findClosestNode = ({x, y}) => {\n const coordForGraph = sigma.viewportToGraph({x, y});\n const graph = sigma.getGraph();\n const closestNodes = graph\n .nodes()\n .map((nodeId) => {\n const attrs = graph.getNodeAttributes(nodeId);\n const distance =\n Math.pow(coordForGraph.x - attrs.x, 2) + Math.pow(coordForGraph.y - attrs.y, 2);\n return {nodeId, distance, hidden: attrs.hidden};\n })\n .sort((a, b) => a.distance - b.distance)\n .filter(({hidden}) => !hidden);\n\n return closestNodes.length > 0 ? closestNodes[0].nodeId : null;\n };\n\n const nodeId = findClosestNode(event);\n\n if (nodeId) {\n const closestNode = sigma.getNodeDisplayData(nodeId) as NodeAttributes;\n\n const center = sigma.framedGraphToViewport({\n x: closestNode.x,\n y: closestNode.y\n });\n\n const dx = sigma.scaleSize(closestNode.buttonOffset[0]);\n const dy = sigma.scaleSize(closestNode.buttonOffset[1]);\n const buttonSize = sigma.scaleSize(closestNode.buttonSize);\n\n const isExpandClicked = mouseIsOnNode(event.x, event.y, center.x + dx, center.y - dy, buttonSize);\n const isCollapseClicked = mouseIsOnNode(event.x, event.y, center.x + dx, center.y + dy, buttonSize);\n\n if (closestNode.showExpand && isExpandClicked) {\n onNodeExpand(nodeId);\n onNodeClick(nodeId);\n }\n\n if (closestNode.showCollapse && isCollapseClicked) {\n onNodeCollapse(nodeId, getPathToNode(nodeId));\n onNodeClick(nodeId);\n }\n }\n }\n });\n }, [sigma, registerEvents, onNodeClick, onNodeCollapse, onNodeExpand, getPathToNode]);\n\n useEffect(() => {\n const graph = sigma.getGraph();\n let selectedNodeNeighbours;\n try {\n selectedNodeNeighbours = graph.neighbors(selectedNode);\n } catch (e) {\n //do nothing\n }\n setSettings({\n nodeReducer: (node: string, data: NodeAttributes) => {\n const {entityTypesUris = []} = filters || {};\n const pathToIcon = memoizedGetEntityImage(metadata, absoluteImagePath, {type: data.entityTypeUri});\n const nodeProps = node === selectedNode ? SELECTED_NODE : DEFAULT_NODE;\n const neighbors = graph.neighbors(node);\n const hiddenNeighborsCount = neighbors\n .map((nodeId) => graph.getNodeAttribute(nodeId, 'hidden'))\n .filter((x) => !!x).length;\n\n const newData: NodeAttributes = {\n ...data,\n ...nodeProps,\n color: '#0072CE',\n image: pathToIcon,\n showExpand: data.untraversedRelationsCount > 0 || hiddenNeighborsCount > 0,\n showCollapse: data.traversedRelationsCount > 1 && neighbors.length - hiddenNeighborsCount > 1\n };\n const isNodeInPath = (selectedPath.nodes || []).includes(node);\n const isHoveredNode = hoveredNode === node;\n if (isNodeInPath || node === selectedNode || node === entity?.uri) {\n newData.inPath = true;\n if (node === entity?.uri) {\n newData.color = '#00FFFF';\n }\n } else if (\n // inactive node\n selectedNodeNeighbours &&\n !selectedNodeNeighbours.includes(node) &&\n selectedNode !== node &&\n selectedNode !== entity?.uri &&\n !isNodeInPath\n ) {\n if (!isHoveredNode) {\n newData.label = '';\n }\n newData.inactive = true;\n }\n\n if (isHoveredNode) {\n newData.highlighted = true;\n }\n if (\n ![selectedNode, entity?.uri].includes(node) &&\n entityTypesUris.length > 0 &&\n !entityTypesUris.includes(data.entityTypeUri)\n ) {\n newData.hidden = true;\n }\n return newData;\n },\n edgeReducer: (edge: string, data: EdgeAttributes) => {\n const {relationTypesUris = []} = filters || {};\n const newData: EdgeAttributes = {...data, hidden: false};\n const isEdgeInPath = (selectedPath.edges || []).includes(edge);\n if (\n (selectedNode &&\n selectedNode !== entity?.uri &&\n !graph.hasExtremity(edge, selectedNode) &&\n !isEdgeInPath) ||\n (relationTypesUris.length > 0 && !relationTypesUris.includes(data.relationTypeUri))\n ) {\n newData.hidden = true;\n }\n if (isDirected) {\n newData.arrowSizeRatio = 4;\n }\n if (isEdgeInPath) {\n newData.color = '#0072CE';\n newData.size = 4;\n if (isDirected) {\n newData.arrowSizeRatio = 1.4;\n }\n }\n newData.type = directionTypeToEdgeType(isDirected ? data.direction : RelationTypeDirection.undirected);\n return newData;\n },\n renderEdgeLabels: true,\n edgeLabelRenderer\n });\n }, [\n sigma,\n setSettings,\n hoveredNode,\n selectedNode,\n selectedPath,\n entity?.uri,\n metadata,\n absoluteImagePath,\n isDirected,\n filters\n ]);\n};\n","import Graph from 'graphology';\nimport {NodeDisplayData, EdgeDisplayData} from 'sigma/types';\nimport {\n Entity,\n HopsResponse,\n HopEntity,\n HopRelation,\n TRelationType,\n TEntityType,\n Relation,\n RecordAttributesType,\n RelationTypeDirection\n} from '@reltio/mdm-sdk';\n\nexport type AddRelation = {\n startEntityUri: string;\n endEntityUri: string;\n relationType: string;\n attributes?: RecordAttributesType;\n startDate?: number;\n endDate?: number;\n};\n\nexport type Filters = {entityTypesUris: string[]; relationTypesUris: string[]};\n\nexport type GraphState = {\n graphLoading: boolean;\n data: HopsResponse;\n graphologyGraph: Graph;\n selectedEntityLoading: boolean;\n selectedEntity: Entity;\n onDeleteRelation?: (uri: string) => void;\n onEntitySelect: (uri: string) => void;\n onCollapseEntity: (uri: string, path: GraphPathType) => void;\n onExpandEntity: (uri: string) => void;\n graphTypeUri?: string;\n setGraphTypeUri?: (graphType: string) => void;\n relationshipTable: RelationshipTableState;\n onAddRelation?: (params: AddRelation) => Promise<void>;\n};\n\nexport type RelationshipTableState = {\n rowsData?: RelationshipRow[];\n onSort?: (sorting: {field: string; order: string}) => void;\n sorting?: {\n field: string;\n order: string;\n };\n editingRelations?: Array<{initialRelation: Relation; relation: Relation}>;\n onStartRelationEditing?: (uri: string) => void;\n onCancelRelationEditing?: (uri: string) => void;\n onUpdateEditingRelation?: (relation: Relation) => void;\n onSaveEditingRelation?: (oldRelation: Relation, newRelation: Relation) => void;\n total?: number;\n page?: number;\n rowsPerPage?: number;\n onPageChange?: (page: number) => void;\n onRowsPerPageChange?: (page: number) => void;\n searchText?: string;\n onChangeSearchText?: (value: string) => void;\n filters?: Filters;\n onFilter?: (filters: Filters) => void;\n relationTypesOptions?: TRelationType[];\n entityTypesOptions?: TEntityType[];\n loading?: boolean;\n};\n\nexport type Edge = {\n from: string;\n to: string;\n key: string;\n relationTypeUri: string;\n direction: RelationTypeDirection;\n};\n\nexport type Node = {\n id: string;\n name: string;\n entityTypeUri: string;\n traversedRelationsCount: number;\n untraversedRelationsCount: number;\n};\n\nexport type GraphologyGraphData = {\n nodes: Node[];\n edges: Edge[];\n};\n\nexport type EdgeAttributes = EdgeDisplayData & {\n loop: boolean;\n relationTypeUri?: string;\n direction?: RelationTypeDirection;\n hidden?: boolean;\n arrowSizeRatio?: number;\n};\n\nexport type NodeAttributes = NodeDisplayData & {\n buttonSize: number;\n buttonOffset: [number, number];\n image: string;\n entityTypeUri: string;\n traversedRelationsCount?: number;\n untraversedRelationsCount?: number;\n inPath?: boolean;\n inactive?: boolean;\n showExpand?: boolean;\n showCollapse?: boolean;\n};\n\nexport type NodesHierarchy = Array<string[]>;\n\nexport enum Layouts {\n SIMPLE_NETWORK = 'Simple network',\n VERTICAL_TB = 'Vertical hierarchy',\n HORIZONTAL_LR = 'Horizontal hierarchy',\n DIRECTED_NETWORK = 'Directed Network'\n}\nexport type GraphPathType = {\n edges?: string[];\n nodes?: string[];\n};\n\nexport type RelationshipRow = {\n entity: HopEntity;\n relation: HopRelation;\n entityLabel: string;\n entityTypeLabel: string;\n relationTypeLabel: string;\n};\n\nexport interface GraphologyLayout<T> {\n (graph: Graph, options: T): {[node: string]: {[dimension: string]: number}};\n assign?(graph: Graph, options: T): void;\n}\n\ninterface GraphologyWorkerLayout {\n stop: () => void;\n start: () => void;\n kill: () => void;\n}\n\nexport interface GraphologyWorkerLayoutConstructor<T> {\n new (graph: Graph, settings: T): GraphologyWorkerLayout;\n}\n","import {useMemo} from 'react';\nimport circular from 'graphology-layout/circular';\nimport forceAtlas2 from 'graphology-layout-forceatlas2';\nimport FA2Layout from 'graphology-layout-forceatlas2/worker';\nimport Graph from 'graphology';\nimport {difference, prop} from 'ramda';\nimport {HopsResponse} from '@reltio/mdm-sdk';\nimport {useDidUpdateEffect, usePrevious} from '@reltio/components';\n\nimport {useGraphLayout} from '../../hooks/useGraphLayout';\nimport {Layouts, GraphPathType, Filters} from '../../types/graphDataTypes';\n\ntype CircleLayoutProps = {\n data: HopsResponse;\n graph: Graph;\n selectedNode: string;\n onNodeClick: (node: string) => void;\n onNodeCollapse: (node: string, path: GraphPathType) => void;\n onNodeExpand: (node: string) => void;\n layout: Layouts;\n filters?: Filters;\n};\n\nexport const CircleLayout = ({\n data,\n graph,\n selectedNode,\n layout,\n onNodeClick,\n onNodeCollapse,\n onNodeExpand,\n filters\n}: CircleLayoutProps) => {\n const prevData: HopsResponse = usePrevious(data);\n\n useDidUpdateEffect(() => {\n if (prevData) {\n const newNodesIds = difference(data.entities.map(prop('uri')), prevData.entities.map(prop('uri')));\n if (newNodesIds.length) {\n const tempGraph = graph.copy();\n circular.assign(tempGraph);\n newNodesIds.forEach((id) => {\n graph.setNodeAttribute(id, 'x', tempGraph.getNodeAttribute(id, 'x'));\n graph.setNodeAttribute(id, 'y', tempGraph.getNodeAttribute(id, 'y'));\n });\n }\n }\n }, [data]);\n\n const layoutSettings = useMemo(() => {\n circular.assign(graph);\n return {\n settings: {\n ...forceAtlas2.inferSettings(graph),\n gravity: 1\n }\n };\n }, [graph]);\n\n useGraphLayout({\n workerLayout: FA2Layout,\n layoutSettings,\n data,\n graph,\n selectedNode,\n onNodeClick,\n isDirected: layout === Layouts.DIRECTED_NETWORK,\n onNodeCollapse,\n onNodeExpand,\n filters\n });\n\n return null;\n};\n\nexport default CircleLayout;\n","import Graph from 'graphology';\nimport {GraphologyGraphData, Node, Edge, NodesHierarchy} from '../../types/graphDataTypes';\n\nconst getFirstLvlNodes = (edgesWithoutLoops: Edge[], nodes: Node[], selectedNode: string): Set<string> => {\n const firstLvlNodesIds = new Set<string>();\n nodes.forEach((node) => {\n if (!edgesWithoutLoops.some((edge) => edge.to === node.id)) {\n firstLvlNodesIds.add(node.id);\n }\n });\n if (!firstLvlNodesIds.size) {\n firstLvlNodesIds.add(selectedNode);\n }\n return firstLvlNodesIds;\n};\n\nconst canFindChildNodes = (nodesIds: Set<string>, edgesWithoutLoops: Edge[], processedNodes) => {\n const children = new Set<string>();\n nodesIds.forEach((nodeId) => {\n edgesWithoutLoops.forEach((edge) => {\n if (edge.from === nodeId && !processedNodes.has(edge.to)) {\n children.add(edge.to);\n }\n });\n });\n return !!children.size;\n};\n\nconst findChildNodeIds = (\n parentNodes: Set<string>,\n nodesArr: NodesHierarchy,\n processedNodes: Set<string>,\n edgesWithoutLoops: Edge[]\n): NodesHierarchy => {\n const currentLvlNodeIds = new Set<string>();\n if (!nodesArr.length) {\n nodesArr.push(Array.from(parentNodes));\n }\n parentNodes.forEach((nodeId) => {\n processedNodes.add(nodeId);\n edgesWithoutLoops.forEach((edge) => {\n if (edge.from === nodeId && !parentNodes.has(edge.to) && !processedNodes.has(edge.to)) {\n currentLvlNodeIds.add(edge.to);\n }\n });\n });\n if (currentLvlNodeIds.size) {\n nodesArr.push(Array.from(currentLvlNodeIds));\n }\n\n if (canFindChildNodes(currentLvlNodeIds, edgesWithoutLoops, processedNodes)) {\n return findChildNodeIds(currentLvlNodeIds, nodesArr, processedNodes, edgesWithoutLoops);\n } else return nodesArr;\n};\n\nconst splitLongLevels = (\n nodes: string[],\n finalHierarchyNodesArr: NodesHierarchy,\n nodesHierarchy: NodesHierarchy,\n level: number,\n maxQuantityNodesOnOneLvl: number\n): NodesHierarchy => {\n if (nodes.length <= maxQuantityNodesOnOneLvl) {\n finalHierarchyNodesArr[level] = [...nodes];\n }\n if (nodes.length > maxQuantityNodesOnOneLvl) {\n const extraNodes = nodes.slice(maxQuantityNodesOnOneLvl);\n const remainingNodes = nodes.slice(0, maxQuantityNodesOnOneLvl);\n\n finalHierarchyNodesArr[level] = remainingNodes;\n finalHierarchyNodesArr[level + 1] = nodesHierarchy[level + 1]\n ? [...nodesHierarchy[level + 1], ...extraNodes]\n : extraNodes;\n }\n if (finalHierarchyNodesArr[level + 1] || nodesHierarchy[level + 1]) {\n level++;\n const nodes = finalHierarchyNodesArr[level] || nodesHierarchy[level];\n return splitLongLevels(nodes, finalHierarchyNodesArr, nodesHierarchy, level, maxQuantityNodesOnOneLvl);\n } else {\n return finalHierarchyNodesArr;\n }\n};\n\nexport const buildHierarchyNodes = (\n graphData: GraphologyGraphData,\n selectedNode: string,\n maxQuantityNodesOnOneLvl = 10\n): NodesHierarchy => {\n const nodes = graphData.nodes;\n const edgesWithoutLoops = graphData.edges.filter((edge) => edge.from !== edge.to);\n const firstLvlNodeIds = getFirstLvlNodes(edgesWithoutLoops, nodes, selectedNode);\n\n const nodesHierarchy = findChildNodeIds(firstLvlNodeIds, [], new Set<string>(), edgesWithoutLoops);\n const finalHierarchyNodesArr = splitLongLevels(nodesHierarchy[0], [], nodesHierarchy, 0, maxQuantityNodesOnOneLvl);\n\n return finalHierarchyNodesArr;\n};\n\nexport const extractDataFromGraph = (graph: Graph): GraphologyGraphData => {\n const nodes = graph.nodes().map((id) => ({id, name: ''} as Node));\n const edges = graph.mapEdges((edge, attributes, source, target) => ({\n from: source,\n to: target,\n key: edge,\n relationTypeUri: attributes.relationTypeUri,\n direction: attributes.direction\n }));\n return {nodes, edges};\n};\n","import {Layouts, NodesHierarchy} from '../../types/graphDataTypes';\n\nconst X_MARGIN = 10;\nconst Y_MARGIN = 10;\n\ntype CalculateYPosProps = {\n quantityAtLvl: number;\n rowNumber: number;\n isEvenItem: boolean;\n layout: Layouts;\n shouldUseCheckboardPattern: boolean;\n};\n\nexport const calculateYPos = ({\n quantityAtLvl,\n rowNumber,\n isEvenItem,\n layout,\n shouldUseCheckboardPattern\n}: CalculateYPosProps) => {\n const isVerticalHierarchy = layout === Layouts.VERTICAL_TB;\n const hasSingleNodeAtLvl = quantityAtLvl === 1;\n return shouldUseCheckboardPattern && isVerticalHierarchy && isEvenItem && !hasSingleNodeAtLvl\n ? rowNumber * Y_MARGIN + Y_MARGIN / 2\n : rowNumber * Y_MARGIN;\n};\n\ntype CalculateXPosProps = {\n quantityAtLvl: number;\n posAtLvl: number;\n max: number;\n isEvenRow: boolean;\n layout: Layouts;\n shouldUseCheckboardPattern: boolean;\n};\n\nexport const calculateXPos = ({\n quantityAtLvl,\n posAtLvl,\n max,\n isEvenRow,\n layout,\n shouldUseCheckboardPattern\n}: CalculateXPosProps) => {\n const isHorizontalHierarchy = layout === Layouts.HORIZONTAL_LR;\n const hasSingleNodeAtLvl = quantityAtLvl === 1;\n const hasMaxNodesAtLvl = quantityAtLvl === max;\n\n if (hasMaxNodesAtLvl) {\n return shouldUseCheckboardPattern && isEvenRow && isHorizontalHierarchy\n ? posAtLvl * X_MARGIN + X_MARGIN / 2\n : posAtLvl * X_MARGIN;\n }\n\n if (hasSingleNodeAtLvl) {\n return ((max - 1) * X_MARGIN) / 2;\n }\n\n return (((max - 1) * X_MARGIN) / (quantityAtLvl + 1)) * (posAtLvl + 1);\n};\n\nexport const getAngleOfRotation = (layout: Layouts) => {\n switch (layout) {\n case Layouts.VERTICAL_TB:\n return 180;\n case Layouts.HORIZONTAL_LR:\n return 270;\n }\n};\n\nexport const getMaxLvlSize = (hierarchyNodes: NodesHierarchy) => {\n const sizes = hierarchyNodes.map((nodes) => nodes.length);\n return Math.max(...sizes);\n};\n\nexport const isSimpleGraph = (nodesLength: number) => nodesLength < 100;\n\nexport const getMaxQuantityNodesOnOneLvl = (nodesLength: number, layout: Layouts) => {\n if (isSimpleGraph(nodesLength)) {\n return 10;\n }\n\n const multiplier = layout === Layouts.VERTICAL_TB ? 1.5 : 0.7;\n return Math.round(Math.sqrt(nodesLength) * multiplier);\n};\n","import {useCallback} from 'react';\nimport Graph from 'graphology';\nimport {rotation} from 'graphology-layout';\nimport {HopsResponse} from '@reltio/mdm-sdk';\nimport {Filters, GraphPathType, Layouts} from '../../types/graphDataTypes';\nimport {buildHierarchyNodes, extractDataFromGraph} from './buildHierarchy';\nimport {useGraphLayout} from '../../hooks/useGraphLayout';\nimport {\n calculateXPos,\n calculateYPos,\n getAngleOfRotation,\n getMaxLvlSize,\n getMaxQuantityNodesOnOneLvl,\n isSimpleGraph\n} from './calculations';\n\ntype HierarchyLayoutProps = {\n data: HopsResponse;\n graph: Graph;\n selectedNode: string;\n layout: Layouts;\n onNodeClick: (node: string) => void;\n onNodeCollapse: (node: string, path: GraphPathType) => void;\n onNodeExpand: (node: string) => void;\n filters?: Filters;\n};\n\nexport const HierarchyLayout = ({\n data,\n graph,\n selectedNode,\n layout,\n onNodeClick,\n onNodeCollapse,\n onNodeExpand,\n filters\n}: HierarchyLayoutProps) => {\n const hierarchicalLayout = useCallback(\n (graph: Graph) => {\n const tempGraph = graph.copy();\n const angleOfRotation = getAngleOfRotation(layout);\n const graphData = extractDataFromGraph(tempGraph);\n const nodesLength = graphData.nodes.length;\n const shouldUseCheckboardPattern = !isSimpleGraph(nodesLength);\n const maxQuantityNodesOnOneLvl = getMaxQuantityNodesOnOneLvl(nodesLength, layout);\n const nodesHierarchy = buildHierarchyNodes(graphData, selectedNode, maxQuantityNodesOnOneLvl);\n const maxLvlSize = getMaxLvlSize(nodesHierarchy);\n for (let i = 0; i < nodesHierarchy.length; ++i) {\n const isEvenRow = i % 2 === 0;\n const quantityAtLvl = nodesHierarchy[i].length;\n\n for (let j = 0; j < quantityAtLvl; ++j) {\n const isEvenItem = j % 2 === 0;\n\n const xPos = calculateXPos({\n quantityAtLvl,\n posAtLvl: j,\n max: maxLvlSize,\n isEvenRow,\n layout,\n shouldUseCheckboardPattern\n });\n\n const yPos = calculateYPos({\n quantityAtLvl,\n rowNumber: i,\n isEvenItem,\n layout,\n shouldUseCheckboardPattern\n });\n\n tempGraph.setNodeAttribute(nodesHierarchy[i][j], 'x', xPos);\n tempGraph.setNodeAttribute(nodesHierarchy[i][j], 'y', yPos);\n }\n }\n rotation.assign(tempGraph, angleOfRotation, {degrees: true});\n return tempGraph.reduceNodes(\n (result, id, {x, y}) => ({\n ...result,\n [id]: {x, y}\n }),\n {}\n );\n },\n [layout, selectedNode]\n );\n\n useGraphLayout({\n syncLayout: hierarchicalLayout,\n data,\n graph,\n selectedNode,\n onNodeClick,\n onNodeCollapse,\n onNodeExpand,\n filters\n });\n\n return null;\n};\n\nexport default HierarchyLayout;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n graphTypeSelector: {\n minWidth: '200px',\n backgroundColor: '#FAFAFA',\n opacity: 1,\n height: '40px'\n },\n filledInputRoot: {\n borderRadius: '4px'\n },\n valueContainer: {\n width: 'auto',\n marginLeft: '16px'\n }\n});\n","import {DropDownSelector, withContext} from '@reltio/components';\nimport i18n from 'ui-i18n';\nimport React, {useMemo} from 'react';\nimport {useStyles} from './styles';\nimport {GraphStateContext} from '../../contexts/GraphStateContext';\nimport {GraphState} from '../../types/graphDataTypes';\nimport {Entity, getGraphTypesForEntityType} from '@reltio/mdm-sdk';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\n\ntype Props = Partial<Pick<GraphState, 'graphTypeUri' | 'setGraphTypeUri'>>;\n\nconst GraphTypeSelector = ({graphTypeUri, setGraphTypeUri}: Props) => {\n const styles = useStyles();\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entity: Entity = useSelector(mdmModule.selectors.getEntity);\n const graphTypeOptions = useMemo(\n () => [\n {label: i18n.text('All'), value: null},\n ...getGraphTypesForEntityType(metadata, entity.type).map(({uri, label}) => ({value: uri, label}))\n ],\n [entity, metadata]\n );\n const value = useMemo(() => graphTypeOptions.find((opt) => opt.value === graphTypeUri), [\n graphTypeOptions,\n graphTypeUri\n ]);\n return (\n <DropDownSelector\n classes={{valueContainer: styles.valueContainer}}\n className={styles.graphTypeSelector}\n height={42}\n label={i18n.text('Graph type')}\n value={value}\n options={graphTypeOptions}\n onChange={(opt) => setGraphTypeUri(opt.value)}\n TextFieldProps={{\n InputProps: {\n disableUnderline: true,\n classes: {\n root: styles.filledInputRoot\n }\n }\n }}\n />\n );\n};\n\nexport default withContext(\n GraphStateContext,\n ({graphTypeUri, setGraphTypeUri}) => ({\n setGraphTypeUri,\n graphTypeUri\n }),\n GraphTypeSelector\n);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n graphLayoutSelector: {\n minWidth: '202px',\n backgroundColor: '#FAFAFA',\n opacity: 1,\n marginLeft: '10px'\n },\n\n filledInputRoot: {\n borderRadius: '4px',\n height: '42px'\n }\n});\n","import React, {memo} from 'react';\nimport i18n from 'ui-i18n';\nimport {propEq} from 'ramda';\nimport {DropDownSelector} from '@reltio/components';\nimport {Layouts} from '../../types/graphDataTypes';\nimport {useStyles} from './styles';\n\ntype Props = {\n value: Layouts;\n onChangeHandler: (value: Layouts) => void;\n};\n\nconst GraphLayoutSelector = ({value, onChangeHandler}: Props) => {\n const styles = useStyles();\n const layouts = [\n {label: i18n.text('Simple network'), value: Layouts.SIMPLE_NETWORK},\n {label: i18n.text('Vertical hierarchy'), value: Layouts.VERTICAL_TB},\n {label: i18n.text('Horizontal hierarchy'), value: Layouts.HORIZONTAL_LR},\n {label: i18n.text('Directed network'), value: Layouts.DIRECTED_NETWORK}\n ];\n\n return (\n <DropDownSelector\n className={styles.graphLayoutSelector}\n label={i18n.text('Graph layout')}\n value={layouts.find(propEq('value', value))}\n options={layouts}\n onChange={(value) => onChangeHandler(value.value)}\n TextFieldProps={{\n InputProps: {\n disableUnderline: true,\n classes: {\n root: styles.filledInputRoot\n }\n }\n }}\n />\n );\n};\n\nexport default memo(GraphLayoutSelector);\n","import React, {useCallback} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {useSigma} from '@react-sigma/core';\n\nconst SigmaGraphResizer = () => {\n const sigma = useSigma();\n const onResize = useCallback(() => {\n sigma.refresh();\n }, [sigma]);\n return <ReactResizeDetector handleWidth onResize={onResize} />;\n};\n\nexport default SigmaGraphResizer;\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst boxShadow = '0 1px 1px rgba(0,0,0,0.14), 0 2px 1px rgba(0,0,0,0.12), 0 1px 3px rgba(0,0,0,0.2)';\n\nconst buttonStyle = {\n background: '#FFFFFF',\n boxShadow,\n width: '28px',\n height: '28px'\n};\n\nexport const useStyles = makeStyles({\n container: {\n display: 'flex',\n alignItems: 'center'\n },\n maxButton: {\n ...buttonStyle,\n borderRadius: '2px 4px 4px 2px'\n },\n minButton: {\n ...buttonStyle,\n borderRadius: '4px 2px 2px 4px'\n },\n thumb: {\n position: 'absolute',\n boxShadow,\n borderRadius: '2px',\n width: '8px',\n height: '28px',\n marginTop: '-13px',\n marginLeft: '1px',\n color: 'rgba(0,0,0,0.54)',\n backgroundColor: '#FFFFFF',\n boxSizing: 'border-box',\n outline: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n thumbIcon: {\n transform: 'rotate(90deg)'\n },\n icon: {\n width: '18px',\n height: '18px'\n },\n rail: {\n opacity: 1,\n height: '4px',\n paddingRight: '10px'\n },\n sliderRoot: {\n color: '#EDEDED',\n marginRight: '10px'\n }\n});\n","import React, {useEffect, useMemo, useState} from 'react';\nimport classnames from 'classnames';\nimport {clamp, omit} from 'ramda';\nimport {useCamera, useRegisterEvents, useSigma, useSetSettings} from '@react-sigma/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport RemoveIcon from '@material-ui/icons/Remove';\nimport {Slider as Slider} from '@material-ui/core';\nimport {IconButton as IconButton} from '@material-ui/core';\n\nimport {useStyles} from './styles';\n\nconst percentsToRatio = (percent: number): number => Math.pow(100 / percent, 2);\nconst ratioToPercents = (ratio: number): number => 100 / Math.sqrt(ratio);\n\nconst SliderThumb = (props) => {\n const styles = useStyles();\n const thumbProps = omit(['className'], props);\n\n return (\n <div className={styles.thumb} {...thumbProps}>\n <RemoveIcon className={classnames(styles.icon, styles.thumbIcon)} />\n </div>\n );\n};\n\ntype Props = {\n className?: string;\n max: number;\n min: number;\n};\n\nconst ZoomSlider = ({className, max, min}: Props) => {\n const styles = useStyles();\n\n const setSettings = useSetSettings();\n const registerEvents = useRegisterEvents();\n const camera = useSigma().getCamera();\n const {zoomIn, zoomOut} = useCamera({factor: 1.2});\n const [value, setValue] = useState(clamp(min, max, ratioToPercents(camera.getState().ratio)));\n\n const maxCameraRatio = useMemo(() => (min > 0 ? percentsToRatio(min) : null), [min]);\n const minCameraRatio = useMemo(() => (max > 0 ? percentsToRatio(max) : null), [max]);\n\n useEffect(() => {\n setSettings({\n maxCameraRatio,\n minCameraRatio\n });\n\n return () => {\n setSettings({\n maxCameraRatio: null,\n minCameraRatio: null\n });\n };\n }, [setSettings, minCameraRatio, maxCameraRatio]);\n\n useEffect(() => {\n registerEvents({\n cameraUpdated: (event) => setValue(ratioToPercents(event.ratio))\n });\n }, [registerEvents]);\n\n const handleChange = (event, newValue) =>\n camera.setState({ratio: camera.getBoundedRatio(percentsToRatio(newValue))});\n\n return (\n <div className={classnames(styles.container, className)}>\n <IconButton className={styles.minButton} onClick={() => zoomOut()}>\n <RemoveIcon className={styles.icon} />\n </IconButton>\n <Slider\n ThumbComponent={SliderThumb}\n classes={{root: styles.sliderRoot, rail: styles.rail}}\n track={false}\n value={value}\n min={min}\n max={max}\n onChange={handleChange}\n />\n <IconButton className={styles.maxButton} onClick={() => zoomIn()}>\n <AddIcon className={styles.icon} />\n </IconButton>\n </div>\n );\n};\n\nexport default ZoomSlider;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n button: {\n background: '#FFFFFF',\n boxShadow: '0 1px 1px rgba(0,0,0,0.14), 0 2px 1px rgba(0,0,0,0.12), 0 1px 3px rgba(0,0,0,0.2)',\n width: '28px',\n height: '28px',\n borderRadius: '4px'\n },\n icon: {\n width: '18px',\n height: '18px'\n }\n});\n","import React from 'react';\nimport {useCamera} from '@react-sigma/core';\nimport MyLocationIcon from '@material-ui/icons/MyLocation';\nimport {IconButton as IconButton} from '@material-ui/core';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n node: string;\n};\n\nconst GotoButton = ({node}: Props) => {\n const styles = useStyles();\n const {gotoNode} = useCamera();\n\n return (\n <IconButton className={styles.button} onClick={() => gotoNode(node)}>\n <MyLocationIcon className={styles.icon} />\n </IconButton>\n );\n};\n\nexport default GotoButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n height: '100%',\n position: 'relative'\n },\n selectors: {\n display: 'flex',\n position: 'absolute',\n top: '12px',\n right: '16px',\n zIndex: 2\n },\n graph: {\n height: 'calc(100% - 5px)'\n },\n rightBottomControls: {\n position: 'absolute',\n zIndex: 100,\n right: '18px',\n bottom: '16px',\n display: 'flex',\n width: '200px'\n },\n zoomSlider: {\n flexGrow: 1,\n marginRight: '8px'\n }\n});\n","import React, {useState} from 'react';\nimport Graph from 'graphology';\nimport {withContext} from '@reltio/components';\nimport {HopsResponse} from '@reltio/mdm-sdk';\nimport {SigmaGraphContainer} from '../SigmaGraphContainer/SigmaGraphContainer';\nimport CircleLayout from '../CircleLayout/CircleLayout';\nimport HierarchyLayout from '../HierarchyLayout/HierarchyLayout';\nimport {GraphStateContext} from '../../contexts/GraphStateContext';\nimport {Filters, GraphPathType, Layouts} from '../../types/graphDataTypes';\nimport GraphTypeSelector from '../GraphTypeSelector/GraphTypeSelector';\nimport GraphLayoutSelector from '../GraphLayoutSelector/GraphLayoutSelector';\nimport SigmaGraphResizer from '../SigmaGraphResizer/SigmaGraphResizer';\nimport ZoomSlider from '../ZoomSlider/ZoomSlider';\nimport GotoButton from '../GotoButton/GotoButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n data?: HopsResponse;\n graph?: Graph;\n selectedNode?: string;\n onNodeSelect?: (uri: string) => void;\n onNodeCollapse?: (uri: string, path: GraphPathType) => void;\n onNodeExpand?: (uri: string) => void;\n filters?: Filters;\n};\n\nconst GraphArea = ({data, graph, selectedNode, onNodeSelect, onNodeCollapse, onNodeExpand, filters}: Props) => {\n const styles = useStyles();\n\n const [layout, setLayout] = useState(Layouts.SIMPLE_NETWORK);\n\n const commonProps = {\n data,\n graph,\n selectedNode,\n layout,\n onNodeClick: onNodeSelect,\n onNodeCollapse,\n onNodeExpand,\n filters\n };\n return (\n <div className={styles.wrapper}>\n <div className={styles.selectors}>\n <GraphTypeSelector />\n <GraphLayoutSelector value={layout} onChangeHandler={setLayout} />\n </div>\n <div className={styles.graph}>\n {graph && (\n <SigmaGraphContainer>\n <>\n <SigmaGraphResizer />\n {layout === Layouts.SIMPLE_NETWORK || layout === Layouts.DIRECTED_NETWORK ? (\n <CircleLayout {...commonProps} />\n ) : (\n <HierarchyLayout {...commonProps} />\n )}\n <div className={styles.rightBottomControls}>\n <ZoomSlider className={styles.zoomSlider} min={30} max={300} />\n <GotoButton node={selectedNode} />\n </div>\n </>\n </SigmaGraphContainer>\n )}\n </div>\n </div>\n );\n};\n\nexport default withContext(\n GraphStateContext,\n ({\n data,\n graphologyGraph,\n selectedEntity,\n onEntitySelect,\n onCollapseEntity,\n onExpandEntity,\n relationshipTable: {filters}\n }) => ({\n data,\n graph: graphologyGraph,\n selectedNode: selectedEntity?.uri,\n onNodeSelect: onEntitySelect,\n onNodeCollapse: onCollapseEntity,\n onNodeExpand: onExpandEntity,\n filters\n }),\n GraphArea\n);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n perspectiveView: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\n overflowX: 'hidden',\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.palette.background.default\n },\n graphWrapper: {\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n flexGrow: 1\n },\n graphContainer: {\n display: 'flex',\n overflow: 'hidden',\n flexGrow: 1\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}));\n","import React, {memo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {Entity} from '@reltio/mdm-sdk';\nimport {LinearLoadIndicator} from '@reltio/components';\n\nimport {useGraphState} from '../../hooks/useGraphState';\nimport {GraphStateContext} from '../../contexts/GraphStateContext';\nimport GraphProfileBand from '../GraphProfileBand/GraphProfileBand';\nimport GraphRightSidePanel from '../GraphRightSidePanel/GraphRightSidePanel';\nimport GraphArea from '../GraphArea/GraphArea';\n\nimport {useStyles} from './styles';\n\nconst GraphPerspectiveView = memo(() => {\n const styles = useStyles();\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n const graphState = useGraphState(entity);\n const {graphLoading} = graphState;\n return (\n <GraphStateContext.Provider value={graphState}>\n <div className={styles.perspectiveView}>\n {graphLoading && <LinearLoadIndicator />}\n {entity?.uri && (\n <div className={styles.graphContainer}>\n <div className={styles.graphWrapper}>\n <GraphProfileBand />\n <GraphArea />\n </div>\n <GraphRightSidePanel />\n </div>\n )}\n </div>\n </GraphStateContext.Provider>\n );\n});\n\nGraphPerspectiveView.displayName = 'GraphPerspectiveView';\n\nexport default GraphPerspectiveView;\n","import {Entity} from '@reltio/mdm-sdk';\n\nimport {GraphState} from '../types/graphDataTypes';\nimport {useGraphLoader} from './useGraphLoader';\nimport {useSelectedEntity} from './useSelectedEntity';\nimport {useRelationshipTable} from './useRelationshipTable';\n\nexport const useGraphState = (entity: Entity): GraphState => {\n const {\n graphLoading,\n data,\n graphologyGraph,\n graphTypeUri,\n setGraphTypeUri,\n onAddRelation,\n onDeleteRelation,\n onCollapseEntity,\n onExpandEntity\n } = useGraphLoader(entity);\n const {selectedEntity, onEntitySelect, selectedEntityLoading} = useSelectedEntity(entity, data);\n const relationshipTable = useRelationshipTable({\n data,\n selectedEntityUri: selectedEntity?.uri,\n mainEntityUri: entity?.uri,\n graphTypeUri\n });\n\n return {\n graphLoading,\n data,\n graphologyGraph,\n selectedEntity,\n selectedEntityLoading,\n graphTypeUri,\n relationshipTable,\n onAddRelation,\n onDeleteRelation,\n onCollapseEntity,\n onExpandEntity,\n onEntitySelect,\n setGraphTypeUri\n };\n};\n","import React from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport {ErrorPopup} from '@reltio/components';\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport MomentUtils from '@date-io/moment';\nimport GraphPerspectiveView from './components/GraphPerspectiveView/GraphPerspectiveView';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'graph',\n disableGlobal: true\n});\n\ntype Props = {\n store: Store<unknown>;\n};\n\nconst GraphPerspective = ({store}: Props) => {\n return (\n <Provider store={store}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <GraphPerspectiveView />\n <ErrorPopup showErrorFromStore={true} />\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </Provider>\n );\n};\n\nexport default GraphPerspective;\n","import {GraphView} from '@reltio/graph';\n\nexport default GraphView;\n"],"names":["useStyles","makeStyles","theme","button","padding","fill","palette","primary","main","fillOpacity","iconButton","startIcon","marginLeft","marginRight","width","height","alignItems","label","whiteSpace","fontSize","lineHeight","letterSpacing","overflowStyle","overflow","textOverflow","menuIcon","menuItem","minHeight","menuText","color","text","ActionButtonMode","ActionButton","forwardRef","ref","className","mode","disabled","icon","Icon","onClick","noop","onMenuClose","otherProps","styles","SmallIconButton","classnames","size","tooltipTitle","Button","classes","ExpandedValueTooltip","value","handleClick","MenuItem","root","Typography","getButtonView","displayName","item","memo","defaultItemSize","data","children","itemKey","showNotMeasuredItems","listRef","listRefProp","rowHeightsCache","useRef","rowHeights","setRowHeights","useState","applyRowHeights","useCallback","debounce","current","getItemKeyFromData","index","localListRef","resetAfterIndex","Row","useMemo","style","key","undefined","visibility","handleHeight","onResize","_","cacheRowHeight","itemCount","length","itemData","itemSize","getItemKey","pagination","display","justifyContent","borderTop","boxShadow","caption","selectRoot","select","textAlign","actions","BasicTablePagination","count","rowsPerPageOptions","page","onChangePage","rowsPerPage","onChangeRowsPerPage","basicTableRef","labelRowsPerPage","resetScrollbarPosition","pathOr","identity","handleChangePage","handleChangeRowsPerPage","TablePagination","component","i18n","labelDisplayedRows","from","to","fromRow","toRow","countRows","pipe","nthArg","getValue","propTypes","PropTypes","React","flexDirection","basicView","BasicView","Paper","paper","title","fontWeight","content","contentText","marginBottom","actionButtons","paddingTop","discardButton","open","onCancel","cancelCaption","onDiscard","discardCaption","onSave","saveCaption","disabledSave","Dialog","onClose","paperScrollPaper","DialogTitle","DialogContent","DialogContentText","DialogActions","disableSpacing","autoFocus","dense","ConnectionEditor","connection","relatedEntity","inRelationTypes","outRelationTypes","showEmptyEditors","entityErrorMessage","onChangeAttribute","onRemoveAttribute","onAddAttributes","onChangeRelationType","onChangeEntity","relation","entity","attributes","uri","relationUri","type","relationTypeUri","direction","isRelationTypeSelected","Boolean","metadata","useSelector","mdmModule","attributeListEntity","getActivenessAttributes","relationAttrTypes","getRelationAttributesList","availableEntityTypeUris","getSuitableEntityTypeUrisForRelationTypes","Directions","getRelationType","uniq","concat","globalSearchRequestOptions","state","selectorCompatibleRelation","relationType","selectorCompatibleEntity","entityUri","entityType","entityLabel","getLabel","availableInRelationTypes","filter","isAvailableRelationBetweenEntities","availableOutRelationTypes","useEffect","getDefaultRelationTypeObject","useDidUpdateEffect","handleChangeRelationType","ConnectionRelationTypeSelector","onChange","ErrorWrapper","errorMessage","EntitySelector","entityTypesUris","max","ModeTypes","onCreate","attributeTypesSelectionStrategy","AttributesList","attrTypes","parentUri","onDeleteAttribute","applyFirstByDefault","reversedContextLabels","getRelationTypesOptions","fromEditorValue","toEditorValue","useRelationTypeSelector","relationsTypesOptions","handleChange","hasValue","options","ConnectionRelationType","RelationTypeType","borderRadius","entityTypeUri","getEntityType","entityTypeColor","getPropWithInheritance","entityTypeLabel","getEntityTypeLabel","placement","backgroundColor","utils","EntityTypesSelector","entityTypes","selectedEntityTypes","single","placeholder","enableEmptyValueUnderline","ListLabelProps","items","isAvailableEntityType","selectedItemsUris","dataReltioId","selectionPopupTitle","container","paddingBottom","BasicViewHeader","listLabelContainer","position","listLabel","visibleItemsLabel","flex","flexBasis","hiddenCount","findFirstOverflowItemIndex","list","labelEl","childNodes","clientLeft","clientWidth","textNode","Array","range","document","createRange","setStart","setEnd","endOffset","rangeWidth","getBoundingClientRect","getListLabel","join","getListLabelWidth","maxWidth","isNil","ListLabel","labelRef","hiddenItemsCount","setHiddenItemsCount","itemsCount","overflowItemsCount","firstOverflowItemIndex","countOverflowItems","Math","countHiddenItems","hasHiddenItems","slice","Tooltip","getItemSize","always","SelectMetadataTypesList","selectedItems","onItemClick","focusIndex","VirtualGroupedList","renderItem","isSelected","find","isFocused","AttributeListItem","checked","Highlighter","highlight","filterText","labelInText","hideIcon","LogoIcon","fixedTitle","disableHorizontalScrollbar","margin","inputLabel","top","inputText","flexGrow","input","cursor","emptyInput","disabledInput","disabledPointer","disabledUnderline","inputRoot","paddingRight","borderBottomStyle","transform","transition","MetadataTypesSelector","isPopupOpen","setIsPopupOpen","openPopup","closePopup","setFilterText","clearFilterText","handleClose","filteredItems","map","selectedLabels","propEq","prop","handleListItemClick","handleSearchOnEnter","includes","handleKeyDown","useKeyboardNavigation","onSelectFocusedItem","rootRef","rootWidth","containerWidth","noTypesSelected","TextField","InputProps","startAdornment","underline","endAdornment","ArrowDropDown","iconClassName","readOnly","disableUnderline","inputProps","tabIndex","InputLabelProps","variant","SelectionPopup","anchorEl","onSearch","containerHeight","searchInputOnKeyDown","transformOrigin","horizontal","vertical","anchorOrigin","PaperProps","profileBandWrapper","flexShrink","profileBand","inactive","background","inactiveBackground","profileIcon","imageProfileIcon","profileInfo","badge","wordBreak","marginTop","secondaryLabel","businessCard","secondary","specialInfo","flexWrap","entityId","textDecoration","showEntityId","handleCopyEntityIdToClipboard","navigator","clipboard","writeText","getEntityId","businessCardText","getBusinessCardAttributesText","isActive","isActiveObject","EntityAvatar","avatarClassName","imageClassName","EntityTypeBadge","isTempUri","link","LinkWithTooltip","withTooltip","Link","ProfileBandNavigationWidget","total","onPrev","onNext","onSearchResultsClick","isPrevDisabled","isNextDisabled","formatNumberAsMetric","KeyboardArrowLeft","showForDisabled","KeyboardArrowRight","MainSearchProvider","constructor","query","sortField","sortOrder","tenant","searchTenant","apiPath","dtssPath","isDT","this","getQueryFilter","rawFilter","getEntities","filters","requestFilters","requestOptions","sort","order","scoreEnabled","getFilteredEntitiesFromDataTenant","customerTenant","dataTenant","getFilteredEntities","checkEntity","fieldName","values","offset","then","entities","requestEntities","requestTotal","getTotalFromDataTenant","getTotals","json","GraphSearchProvider","searchBody","allFilters","getGraphSearchEntities","buildFilterQueryString","getGraphSearchCount","getNewUris","cache","reject","ProfileBandNavigation","safeCheckEntityPromise","useSafePromise","safeRequestTotalPromise","safeRequestEntitiesPromise","viewId","useContext","ViewIdContext","dispatch","useDispatch","loading","setLoading","searchProvider","getSearchProvider","updateNavigationData","mdmModuleSearch","openEntity","preparedUri","getEntityUriForLink","mdmModuleUi","source","perspectiveId","requestNextPage","newIndex","newUris","finally","requestPrevPage","min","stepForwardWithCheck","cacheIndex","isExists","clearedCache","splice","stepBackWithCheck","indexOf","useSearchNavigation","isViewMode","useSearchNavigationVisibility","RelationTypesSelector","relationTypes","selectedRelationTypes","isAvailableRelationType","active","fade","left","buttonWrapper","SideButtonsPanel","buttonsProps","activeIndexId","onButtonClick","iconButtonClasses","id","buttonProps","contentWrapper","transitions","create","duration","enteringScreen","SidePanel","attributesContainer","header","noCaption","noData","connect","excludeUris","includeUris","attributesCount","pivotingAttributes","mdm","filteredAttrTypes","getFilteredAttrTypes","isShowAttributeList","getAttributesListForReadMode","isEmptyValue","PivotingAttributeContext","FacetViewHeader","Box","drawLines","pinnedAttributes","userRoles","pinnedAttributeUris","getPinnedAttributesForUser","modifiedEntity","params","profile","param","PinnedAttributesContext","crosswalks","ownProps","Mode","restProps","EntityContext","useOptionStyles","textItem","primaryTextItem","secondaryTextItem","icons","bottom","iconTop","zIndex","iconBottom","RelationOption","innerRef","innerProps","selectOption","startObject","endObject","objectType","EntityTypeIcon","RelationTypeSelector","TextFieldProps","textFieldProps","defaultTo","DropDownSelector","components","Option","ValueType","useEditableConnection","onConnectionChange","onRelationChange","handleAddAttributes","addEntityAttributes","handleChangeAttribute","changeEntityAttribute","handleRemoveAttribute","removeEntityAttribute","newConnection","inRelations","outRelations","labelsMap","getDirectionalLabel","getDirectionalLabelFromObject","tap","propOr","byLabel","ascend","prepareRelation","curry","dirObject","directionalLabel","typeLabel","evolve","split","findSubgraphRelations","nodeId","foundRelations","relations","either","getStartObjectUri","equals","getEndObjectUri","push","relatedNodes","getAllRelatedEntitiesUris","without","forEach","relatedNodeId","chain","fillGraphWithHopsResponse","graph","graphologyData","nodesSet","Set","relationsSet","add","has","objectURI","nodes","name","traversedRelationsCount","traversedRelations","untraversedRelationsCount","untraversedRelations","edges","relationKey","processResponseToGraph","node","hasNode","addNode","x","y","edge","isSelfRelation","hasEdge","addEdgeWithKey","forceLabel","loop","findSubgraphNodes","foundNodes","neighbors","neighborNodeId","useGraphLoader","graphTypeUri","setGraphTypeUri","graphologyGraph","setGraphologyGraph","setData","isDTEntity","isDataTenantEntity","safePromise","loadHopsForEntity","deep","getHops","limitCreditsConsumption","graphTypes","getLastUriPart","activenessDate","MultiGraph","catch","error","console","ui","getRequestErrorMessage","onAddRelation","startEntityUri","endEntityUri","startDate","endDate","createRelation","response","successful","respondedRelation","object","newData","nodeUris","entitiesUris","extraEntityUri","extraEntity","extraEntityFormatted","pick","addRelationToHopsData","extremities","getNodeAttribute","setNodeAttribute","onDeleteRelation","removeRelation","dropEdge","updatedData","removedEntitiesUris","startNodeId","endNodeId","undirectedGraph","toUndirected","isolatedNodeId","cond","bidirectional","T","dataWithoutRelation","isolatedRelations","isolatedEntitiesUris","append","removeIsolatedSubgraph","removeRelationFromHopsData","nodesIdsToRemove","dropNode","removeNodesFromGraph","onCollapseEntity","path","difference","mainNode","firstNode","secondNode","filterEdges","forEachNeighbor","neighborNode","isolatedNodes","secondaryNode","getIsolatedNodeId","reduce","isolatedNode","getIsolatedNodes","onExpandEntity","mergedData","hopsEntityUri","hopsEntities","hopsRelations","some","findIndex","mergeHopsData","loadedEntity","graphLoading","addToEntitiesMap","entitiesMap","newEntitiesMap","keys","Object","ROWS_PER_PAGE_OPTIONS","getRelationTypeLabel","getRelationTypeLabelFromMetadata","useRelationshipTable","selectedEntityUri","mainEntityUri","sorting","setSorting","field","setPage","setRowsPerPage","editingRelations","setEditingRelations","zipObj","allRowsData","uniqBy","firstEntityUri","getSecondEntityUri","relationTypeLabel","searchText","onChangeSearchText","onFilter","relationTypesOptions","entityTypesOptions","setSearchText","setFilters","relationTypesUris","__","useRelationshipTableFilters","filteredRowsData","ifElse","a","b","pagedRowsData","onStartRelationEditing","getRelation","prev","initialRelation","onUpdateEditingRelation","rel","onCancelRelationEditing","onSaveEditingRelation","oldRelation","newRelation","updateRelation","rowsData","onSort","onPageChange","onRowsPerPageChange","GraphStateContext","selectedEntityLoading","selectedEntity","onEntitySelect","relationshipTable","comments","GraphProfileBand","ProfileBand","COMMENTS_CONTAINER_VISIBILITY_AREA","mr","CommentsContainer","relatedObjectUris","createRelatedObjectUris","CollaborationObjectTypes","wrapper","_extends","assign","target","i","arguments","prototype","hasOwnProperty","call","apply","props","viewBox","xmlns","fillRule","clipRule","d","withContext","noShadowBlock","LinearLoadIndicator","AttributesView","border","table","tableBody","tableBodyWrapper","tableRowWrapper","borderBottom","tableRow","editingRow","headRow","columnsData","columnData","sortable","headCellRenderer","columnClassName","HeadCellRenderer","sortingProps","sortHandler","toggleSortOrder","headCellData","CollapsibleTable","getRowKey","ExpandedRowRenderer","defaultRowHeight","dimensions","setDimensions","renderRow","expanded","rowCellValueRenderer","Renderer","rowValue","onTableBodyResize","useImperativeHandle","scrollTo","handleWidth","AutoSizeList","hoverBackground","tableWithPagination","tableContainer","profileColumn","relationshipTypeColumn","entityTypeColumn","row","right","pointerEvents","hoverRule","textOverflowWithHover","headCell","headLabel","defaultCell","clickable","profileCell","controlsCell","editingMode","hidden","editButton","entityAvatar","expandedRow","DefaultHeadCellRenderer","tooltip","cellValue","editingRelationObject","editingRelation","hasChanges","onUpdateConnection","handleCancelRelationEditing","errors","validateConnectionRelation","validate","ConfirmationDialog","DeleteRelationButton","setOpen","onOpen","DeleteIcon","onEdit","isEditing","canEdit","checkMetadataForUpdate","canDelete","checkMetadataForDelete","EditIcon","ProfileCellRenderer","DefaultCellRenderer","ControlsCellRenderer","tableRef","rowsDataWithExpandedInfo","tableClasses","inactiveSearchIcon","activeSearchIcon","opacity","SearchInput","fullWidth","autofocus","dialogPaper","entityTypesSelector","relationTypesSelector","footer","clearAllButton","cancelButton","localSelectedEntityTypes","setLocalSelectedEntityTypes","localSelectedRelationTypes","setLocalSelectedRelationTypes","handleCancel","paddingLeft","activeFiltersIcon","inactiveFiltersIcon","hasAppliedFilters","IconButton","FilterList","useCreatableInOutRelationTypes","getInOutRelationTypesForEntityTypeUri","checkMetadataForCreate","dialogTitle","titleText","attributeList","setConnection","generateNewRelationUri","disableTypography","e","canAddSomeRelation","openDialog","setOpenDialog","AddIcon","ActivePanel","GraphRightSidePanel","setActive","toggleActive","newId","isOpen","elements","Relationship","RelationshipIcon","EntityDetails","InfoOutlinedIcon","pluck","drawNodeBackground","context","settings","drawNodeArc","fillStyle","shadowOffsetX","shadowOffsetY","shadowBlur","shadowColor","labelSize","textWidth","measureText","boxWidth","round","boxHeight","radius","beginPath","moveTo","quadraticCurveTo","lineTo","closePath","arc","PI","drawLabel","drawBackground","font","labelFont","weight","labelWeight","labelColor","attribute","fillText","drawHover","NodeProgramBorder","AbstractNodeProgram","gl","super","borderSize","getAttribLocation","program","bind","enableVertexAttribArray","vertexAttribPointer","FLOAT","Float32Array","BYTES_PER_ELEMENT","process","array","inPath","floatColor","highlighted","render","useProgram","uniform1f","ratioLocation","sqrt","ratio","scaleLocation","scalingRatio","uniformMatrix3fv","matrixLocation","matrix","drawArrays","POINTS","ImageLoader","rebindTextureFns","images","textureImage","hasReceivedImages","pendingImagesFrameID","loadImage","imageSource","image","Image","img","addEventListener","status","requestAnimationFrame","finalizePendingImages","URL","window","location","href","origin","crossOrigin","src","pendingImages","canvas","createElement","ctx","getContext","iter","xOffset","putImageData","imageSizeInTexture","dx","dy","drawImage","getImageData","fn","defaultImage","svg2Url","NodeImageProgram","renderer","imageLoader","texture","textureLocation","atlasLocation","latestRenderParams","rebindTexture","refresh","ImageData","getUniformLocation","Error","createTexture","bindTexture","TEXTURE_2D","texImage2D","RGBA","UNSIGNED_BYTE","Uint8Array","imageState","hasNothingToRender","uniform1i","activeTexture","TEXTURE0","generateMipmap","bufferData","defaultImages","NodeButtonsProgram","buttonSize","normals","correctionRatioLocation","sqrtZoomRatioLocation","hideButtons","buttonOffset","len","n1","n2","showExpand","expandImageState","showCollapse","collapseImageState","correctionRatio","TEXTURE1","EdgeArrowHeadProgram","SigmaEdgeArrowHeadProgram","sourceData","targetData","l","arrowSizeRatio","thickness","x1","y1","x2","y2","EdgeReversedArrowHeadProgram","EdgeClampedProgram","AbstractEdgeProgram","fragmentShaderSource","IndicesArray","indicesArray","indicesBuffer","indicesType","positionLocation","colorLocation","normalLocation","radiusLocation","arrowSizeRatioLocation","canUse32BitsIndices","createBuffer","Uint32Array","Uint16Array","UNSIGNED_INT","UNSIGNED_SHORT","bindBuffer","ELEMENT_ARRAY_BUFFER","sourceRadius","targetRadius","computeIndices","indices","c","STATIC_DRAW","drawElements","TRIANGLES","SigmaGraphContainer","initialSettings","allowInvalidContainer","defaultNodeType","hoverRenderer","labelRenderer","nodeProgramClasses","createNodeCompoundProgram","edgeProgramClasses","line","LineEdgeProgram","arrow","createEdgeCompoundProgram","doubleArrow","getArrowPoints","sX","sY","aSize","aX","aY","vX","vY","drawArrow","ARROW_SCALE","edgeLabelRenderer","edgeData","sSize","cp","getSelfLoopControlPoints","strokeStyle","lineWidth","pow","getFirstArrowPoints","getSecondArrowPoints","bezierCurveTo","stroke","drawEdgeLabel","mouseIsOnNode","mouseX","mouseY","nodeX","nodeY","memoizedGetEntityImage","memoizeWith","storagePath","getEntityImage","SELECTED_NODE","DEFAULT_NODE","useGraphLayout","syncLayout","workerLayout","layoutSettings","selectedNode","isDirected","onNodeClick","onNodeCollapse","onNodeExpand","sigma","useSigma","loadGraph","useLoadGraph","registerEvents","useRegisterEvents","setSettings","useSetSettings","absoluteImagePath","hoveredNode","setHoveredNode","setUndirectedGraph","selectedPath","setSelectedPath","getCamera","setState","positions","getGraph","animateNodes","worker","start","timer","setTimeout","stop","clearTimeout","kill","getPathToNode","rootNode","searchFn","startNode","edgePathFromNodePath","enterNode","leaveNode","clickNode","click","event","coordForGraph","viewportToGraph","closestNodes","attrs","getNodeAttributes","distance","findClosestNode","closestNode","getNodeDisplayData","center","framedGraphToViewport","scaleSize","isExpandClicked","isCollapseClicked","selectedNodeNeighbours","nodeReducer","pathToIcon","nodeProps","hiddenNeighborsCount","isNodeInPath","isHoveredNode","edgeReducer","isEdgeInPath","directionType","hasExtremity","RelationTypeDirection","renderEdgeLabels","Layouts","layout","prevData","usePrevious","newNodesIds","tempGraph","copy","circular","forceAtlas2","gravity","FA2Layout","DIRECTED_NETWORK","getFirstLvlNodes","edgesWithoutLoops","firstLvlNodesIds","findChildNodeIds","parentNodes","nodesArr","processedNodes","currentLvlNodeIds","nodesIds","canFindChildNodes","splitLongLevels","finalHierarchyNodesArr","nodesHierarchy","level","maxQuantityNodesOnOneLvl","extraNodes","remainingNodes","calculateYPos","quantityAtLvl","rowNumber","isEvenItem","shouldUseCheckboardPattern","isVerticalHierarchy","VERTICAL_TB","Y_MARGIN","calculateXPos","posAtLvl","isEvenRow","isHorizontalHierarchy","HORIZONTAL_LR","X_MARGIN","isSimpleGraph","nodesLength","hierarchicalLayout","angleOfRotation","getAngleOfRotation","graphData","mapEdges","extractDataFromGraph","multiplier","getMaxQuantityNodesOnOneLvl","firstLvlNodeIds","buildHierarchyNodes","maxLvlSize","hierarchyNodes","sizes","getMaxLvlSize","j","xPos","yPos","rotation","degrees","reduceNodes","result","graphTypeSelector","minWidth","filledInputRoot","valueContainer","graphTypeOptions","getGraphTypesForEntityType","opt","graphLayoutSelector","onChangeHandler","layouts","SIMPLE_NETWORK","buttonStyle","maxButton","minButton","thumb","boxSizing","outline","thumbIcon","rail","sliderRoot","percentsToRatio","percent","ratioToPercents","SliderThumb","thumbProps","omit","Remove","camera","zoomIn","zoomOut","useCamera","factor","setValue","clamp","getState","maxCameraRatio","minCameraRatio","cameraUpdated","Slider","ThumbComponent","track","newValue","getBoundedRatio","Add","gotoNode","MyLocation","selectors","rightBottomControls","zoomSlider","onNodeSelect","setLayout","commonProps","perspectiveView","fontFamily","overflowX","overflowY","default","graphWrapper","graphContainer","GraphPerspectiveView","graphState","setSelectedEntity","getCachedEntity","cachedEntity","Promise","resolve","getEntity","briefEntityInfo","isActualSelectedEntity","useSelectedEntity","useGraphState","Provider","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","store","StylesProvider","MuiPickersUtilsProvider","MomentUtils","ErrorPopup","showErrorFromStore"],"sourceRoot":""}