@reltio/remotes 1.4.1506 → 1.4.1507
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/1268.js +1 -1
- package/4571.js +1 -1
- package/5285.js +2 -0
- package/{2758.js.map → 5285.js.map} +1 -1
- package/8684.js +1 -1
- package/package.json +1 -1
- package/remoteEntry.js +1 -1
- package/remoteEntry.js.map +1 -1
- package/2758.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"2758.js","mappings":"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","sources":["webpack://@reltio/remotes/../profile/src/components/ProfileAttributesView/ProfileAttributesView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/contexts/SingleAttributeContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/FilterButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/FilterButton/FilterButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeHeader/SingleAttributeHeader.tsx","webpack://@reltio/remotes/../profile/src/components/hooks/helpers/index.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeEditableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeEditableContent/SingleAttributeEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeReadableContent/SingleAttributeReadableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeView/SingleAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/hooks/useSingleAttributeLoader.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/contexts/RelationsViewStateContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/FilterButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/FilterButton/FilterButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/contexts/ImportDTContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/hooks/useImportFromDTLoader.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/MultipleImportIcon.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/ImportFromDT.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/RelationsHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationTooltip/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationTooltip/RelationTooltip.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useRelationInfo.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SuggestedButtons/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SuggestedButtons/SuggestedButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/EditableRelationItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/EditableRelationItem/EditableRelationItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/permissions.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/relation.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationArrowButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationArrowButton/RelationArrowButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SecondLevelWrapper/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SecondLevelWrapper/SecondLevelWrapper.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useSecondLevelConnections.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsEditableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsEditableContent/RelationsEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationAttributes/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationAttributes/RelationAttributes.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/ShowDetailsButton/ShowDetailsButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationItem/RelationItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/ratings.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/Ratings/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/Ratings/Ratings.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RatingsButtons/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RatingsButtons/RatingsButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationCompexItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationCompexItem/RelationComplexItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationsList.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useSuggestedRelations.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsContent/RelationsContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsView/RelationsView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/filters.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useRelationsState.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/contexts/TableAttributeContext.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/reducer.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/HeadCellRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/BlobRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/DefaultCellValueRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/helpers/tableAttributeHelpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTableHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTableHeader/AttributeTableHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/RowCellRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/EditButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/AttributeTable.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeContent/hooks/useEditableAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeEditing/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeEditing/AttributeEditing.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeEditableContent/hooks/useExpandAttributes.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeEditableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeEditableContent/TableAttributeEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeContent/TableAttributeContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/TableAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/hooks/useLoadPaths.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/ConfigContext.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/Node.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/helpers.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/node-content-renderer.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/index.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/tree-node-data-renderer.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/icons/ShowGraph.svg","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/HierarchyPathsHeader.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/hooks/useDynamicNodesHeights.ts","webpack://@reltio/remotes/../profile/src/components/Sandbox/styles.ts","webpack://@reltio/remotes/../profile/src/components/Sandbox/CustomView.tsx","webpack://@reltio/remotes/../profile/src/components/views/HOCs/styles.ts","webpack://@reltio/remotes/../profile/src/components/views/HOCs/withDragHandle.tsx","webpack://@reltio/remotes/../profile/src/components/views/HOCs/withErrorBoundary.tsx","webpack://@reltio/remotes/../profile/src/components/views/styles.ts","webpack://@reltio/remotes/../profile/src/components/EntityMapView/useMarkers.ts","webpack://@reltio/remotes/../profile/src/components/EntityMapView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageLineCaption/styles.ts","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageLineCaption/ImageLineCaption.tsx","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageAttributeViewEditableContent/ImageAttributeViewEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/ActionButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/MatchCard.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/ProfilePotentialMatchesView.tsx","webpack://@reltio/remotes/../profile/src/components/views/ViewsFactory.tsx","webpack://@reltio/remotes/../profile/src/components/views/StubView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/ProfileSingleAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/hooks/useSingleAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/ProfileTableAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/useTableAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/helpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/ProfileRelationsView.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/HierarchyPathsView.tsx","webpack://@reltio/remotes/../profile/src/components/EntityMapView/EntityMapView.tsx","webpack://@reltio/remotes/../profile/src/components/views/ViewComponent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItem/ProfileLayoutItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileLayout/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileLayout/ProfileLayout.tsx","webpack://@reltio/remotes/../profile/src/components/Notifications/styles.ts","webpack://@reltio/remotes/../profile/src/components/Notifications/Notification.tsx","webpack://@reltio/remotes/../profile/src/components/Notifications/Notifications.tsx","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/suggest.svg","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/copy.svg","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/styles.ts","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/hooks/useCloneAction.ts","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/PerspectiveProfileBand.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowButton/WorkflowButton.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationList/CollaborationList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowList/WorkflowList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/icons/CollaborationIcon.svg","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationButton/CollaborationButton.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowPanelEmptyState/WorkflowPanelEmptyState.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationPanelEmptyState/CollaborationPanelEmptyState.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/icons/ConnectorsIcon.svg","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/DBConnectorsList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/DBConnectorsList/DBConnectorsList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/RightSidePanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/components/ErrorsPanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/icons/hyperlink.svg","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/helpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/components/Error.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/useCachedErrors.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/ProfileErrorsPanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/hooks/useProfileLayout.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/hooks/useWorkflowTasks.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/ProfilePerspectiveView.tsx","webpack://@reltio/remotes/../profile/src/components/hooks/useProfileValidation.ts","webpack://@reltio/remotes/../profile/src/perspectives/ProfilePerspective.tsx","webpack://@reltio/remotes/../profile/src/perspectives/helpers.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagListHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagListHeader/TagListHeader.tsx","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagProfileBand/styles.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagProfileBand/TagProfileBand.tsx","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/hooks/useTagsProvider.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/styles.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/TagPerspectiveView.tsx","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/hooks/useTag.ts","webpack://@reltio/remotes/../profile/src/perspectives/TagPerspective.tsx","webpack://@reltio/remotes/../profile/src/components/DCRReviewPerspectiveView/components/DCRProfileBand/styles.ts","webpack://@reltio/remotes/../profile/src/components/DCRReviewPerspectiveView/components/DCRProfileBand/DCRProfileBand.tsx","webpack://@reltio/remotes/../profile/src/components/DCRReviewPerspectiveView/styles.ts","webpack://@reltio/remotes/../profile/src/components/DCRReviewPerspectiveView/hooks/useWorkflowTasks.ts","webpack://@reltio/remotes/../profile/src/components/DCRReviewPerspectiveView/DCRReviewPerspectiveView.tsx","webpack://@reltio/remotes/../profile/src/perspectives/DCRReviewPerspective.tsx","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/AddRelationButton/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/AddRelationButton/AddRelationButton.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/RowCellRenderer.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/EntityProfileRenderer.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/HeadCellRenderer.js","webpack://@reltio/remotes/../relations-table/src/core/relations.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/helpers/dataHelpers.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/EditButtons.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/RelationsTable.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/helpers/buttonsHelper.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/MoreButton/styles.ts","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/MoreButton/MoreButton.tsx","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/RelationsTableHeader.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/stateReducer.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/helpers/tableHelpers.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/helpers/relationsHelpers.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableView.tsx","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/index.js","webpack://@reltio/remotes/../relations-table/src/index.tsx"],"sourcesContent":["import React from 'react';\nimport {AttributesView} from '@reltio/components';\nimport {AttributeViewConfig} from '@reltio/mdm-sdk';\n\ntype ProfileAttributesViewProps = {\n config: AttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileAttributesView = ({className, config}: ProfileAttributesViewProps) => {\n return (\n <AttributesView\n className={className}\n caption={config.caption}\n excludeUris={config.excludeUris}\n includeUris={config.includeUris}\n attributesCount={config.attributesCount}\n pinnedAttributes={config.pinnedAttributes}\n />\n );\n};\n","import React from 'react';\nimport {AttributeValue, AttributeType} from '@reltio/mdm-sdk';\n\nexport const SingleAttributeContext = React.createContext<{\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n values: AttributeValue[];\n page: number;\n setPage: (page: number) => void;\n isLoading: boolean;\n showInactive?: boolean;\n toggleShowInactive?: (checked: boolean) => void;\n hasPaging: boolean;\n totalVisibleValues: number;\n attributeType: AttributeType;\n totalNonVisibleValues: number;\n nonVisibleValues: AttributeValue[];\n }>(null);\n\nSingleAttributeContext.displayName = 'SingleAttributeContext';\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n triggerButton: {\n minWidth: 0,\n color: 'rgba(0,0,0,0.54)',\n width: '36px'\n },\n popupContent: {\n paddingTop: '19px',\n paddingBottom: '23px',\n paddingLeft: '23px',\n paddingRight: '23px',\n maxWidth: '180px',\n width: '40%'\n },\n checkboxControlRoot: {\n marginTop: '6px',\n marginLeft: '-12px'\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n }\n}));\n","import React, {useContext, useRef, useState} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {Popover as Popover} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport FilterIcon from '@material-ui/icons/FilterList';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\n\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst FilterButton = ({className}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const [isOpen, setIsOpen] = useState(false);\n const {showInactive, toggleShowInactive} = useContext(SingleAttributeContext);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n return (\n <>\n <Button ref={buttonRef} classes={{root: classnames(styles.triggerButton, className)}} onClick={togglePopup}>\n <FilterIcon />\n </Button>\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n root: styles.checkboxControlRoot,\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive}\n onChange={(e) => toggleShowInactive(e.target.checked)}\n />\n }\n label={i18n.text('Show inactive values')}\n />\n </Popover>\n </>\n );\n};\n\nexport default FilterButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n padding: '0 4px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n },\n ovIcon: {\n marginTop: '2px',\n marginLeft: '5px'\n }\n}));\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {\n FacetViewHeader,\n HideOnShrink,\n ExpandableSearchInput,\n VerticalDivider,\n OvIcon,\n DescriptionIcon,\n RequiredMark\n} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport FilterButton from '../FilterButton/FilterButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n caption: string;\n totalVisibleValues: number;\n showInactiveValuesMenu: boolean;\n isEditableMode: boolean;\n};\n\nexport const SingleAttributeHeader = ({caption, totalVisibleValues, showInactiveValuesMenu, isEditableMode}: Props) => {\n const styles = useStyles();\n\n const {searchQuery, setSearchQuery, setPage, totalNonVisibleValues, nonVisibleValues, attributeType} =\n useContext(SingleAttributeContext);\n\n const handleChangeSearchQuery = (query: string) => {\n setSearchQuery(query);\n setPage(0);\n };\n const showRequiredMark = isEditableMode && attributeType?.required;\n return (\n <FacetViewHeader title={caption} className={styles.root}>\n {showRequiredMark && <RequiredMark />}\n <DescriptionIcon description={attributeType?.description} />\n <HideOnShrink widthToHide={500}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {i18n.number(totalVisibleValues)}{' '}\n {totalVisibleValues === 1 ? i18n.text('item') : i18n.text('items')}\n </Typography>\n </HideOnShrink>\n {\n <OvIcon\n nonOvTotal={totalNonVisibleValues}\n className={styles.ovIcon}\n nonOvValues={nonVisibleValues}\n attributeType={attributeType}\n />\n }\n <ExpandableSearchInput query={searchQuery} onChange={handleChangeSearchQuery} />\n {showInactiveValuesMenu && <FilterButton />}\n </FacetViewHeader>\n );\n};\n","import {equals, filter, identity, is, lensPath, omit, over, pipe, unless} from 'ramda';\nimport {\n AttributeValue,\n cleanAttributesWith,\n Entity,\n findAttributeValuesByTypeUri,\n getAttributeSource,\n getLastUriPart,\n isOv,\n Metadata,\n utils\n} from '@reltio/mdm-sdk';\n\nexport const getAttributeNameFromAttributeUri = getLastUriPart;\n\nexport const search = (value: AttributeValue['value'], searchQuery: string) => {\n switch (typeof value) {\n case 'object':\n return Object.values(value).some((value: AttributeValue[]) => {\n return value.some(({value}) => {\n return search(value, searchQuery);\n });\n });\n default:\n return utils.strings.search(String(value), searchQuery);\n }\n};\n\ntype Config = {\n metadata: Metadata;\n entity: Entity;\n attributeTypeUri: string;\n defaultMaxValues?: number;\n offset?: number;\n searchQuery?: string;\n};\n\nexport const getPagedLocalEntity = async ({\n metadata,\n entity,\n attributeTypeUri,\n defaultMaxValues = Infinity,\n offset = 0,\n searchQuery = ''\n}: Config) => {\n const values = pipe(\n findAttributeValuesByTypeUri,\n filter(({value}) => search(value, searchQuery))\n )(metadata, entity, attributeTypeUri);\n const ovValues = filter(isOv, values);\n\n return {\n [getAttributeSource(attributeTypeUri)]: {\n [getAttributeNameFromAttributeUri(attributeTypeUri)]: ovValues.slice(offset, offset + defaultMaxValues),\n paging: {\n [attributeTypeUri]: {\n totalOvValues: ovValues.length,\n totalValues: values.length\n }\n }\n }\n };\n};\n\nexport const areValuesEqual = (value1: AttributeValue, value2: AttributeValue): boolean => {\n const cleanser =\n is(Object, value1.value) || is(Object, value2.value)\n ? over(\n lensPath(['value']),\n cleanAttributesWith({\n valueTransformer: unless(isOv, omit(['value'])),\n deleteEmptyComplex: true\n })\n )\n : identity;\n return equals(cleanser(value1), cleanser(value2));\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {inactive: Record<string, number>}) => ({\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n divider: {\n margin: '0 -16px 8px',\n backgroundColor: 'rgba(0,0,0,0.12)'\n },\n ovFalse: theme.inactive,\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px 8px 0'\n }\n}));\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport {always, cond, isEmpty, map, pathOr, pipe, prop, propEq} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport classnames from 'classnames';\nimport {\n CardinalityMessage,\n EditableAttribute,\n ErrorMessage,\n ScrollToErrorContext,\n useScrollToAttributeError,\n ViewIdContext,\n withContext\n} from '@reltio/components';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n AttributeType,\n AttributeValue,\n checkCanCreateAttribute,\n createNewAttribute,\n Entity,\n getAttributeOwnError,\n getAttributePagerActiveTypeErrorMessage,\n getAttributeSource,\n isComplexAttribute,\n isEmptyValue,\n isOv,\n isTempUri,\n AttributeItem,\n isAttributeTypeError\n} from '@reltio/mdm-sdk';\nimport {areValuesEqual} from '../../../hooks/helpers';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n values: AttributeValue[];\n attributeType: AttributeType;\n parentUri: string;\n showInactive: boolean;\n noDataText: string;\n highlightedError?: React.ContextType<typeof ScrollToErrorContext>;\n};\n\nconst emptyArray = [];\n\nconst SingleAttributeEditableContent = ({\n values,\n attributeType,\n parentUri,\n showInactive,\n noDataText,\n highlightedError\n}: Props) => {\n const styles = useStyles();\n\n const {uri: attributeTypeUri, required: isRequired, cardinality, name} = attributeType;\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const entity = useSelector(mdmModule.selectors.getEntity);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entity.uri) || ({} as Entity)\n );\n const errors = useSelector((state) =>\n mdmModule.selectors.getActiveErrorsForAttributesPager(state, parentUri, attributeType)\n );\n const errorMessage = useSelector((state) =>\n getAttributePagerActiveTypeErrorMessage(parentUri, attributeType, mdmModule.selectors.getProfileErrors(state))\n );\n const mode = useSelector(mdmModule.selectors.getMode);\n const attributeSource = getAttributeSource(attributeType);\n const entityValuesUris: string[] = pipe(pathOr(emptyArray, [attributeSource, name]), map(prop('uri')))(entity);\n const modifiedEntityValues: AttributeValue[] = pathOr(emptyArray, [attributeSource, name], modifiedEntity);\n const modifiedEntityValuesUris: string[] = modifiedEntityValues.map(prop('uri'));\n const showEmptyEditors = isTempUri(entity.uri);\n\n const emptyEditorValue: AttributeValue = useMemo(\n () =>\n createNewAttribute({\n parentUri,\n attributeType\n }),\n [parentUri, attributeType]\n );\n\n const {ref, errorClassName} = useScrollToAttributeError({highlightedError, isSimple: true});\n\n const isModifiedEntityValuesEmpty = isEmptyValue(modifiedEntityValues);\n const showEmpty = isRequired && isModifiedEntityValuesEmpty;\n\n const newValues = showEmpty ? [emptyEditorValue] : modifiedEntityValues.filter(pipe(prop('uri'), isTempUri));\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 const onDeactivateError = useCallback(pipe(profile.errors.actions.errorDeactivated, dispatch), [dispatch]);\n\n const onAdd = useCallback(() => {\n const attribute: AttributeItem = {\n parentUri,\n attributeType\n };\n\n return onAddAttributes(\n showEmpty && !isComplexAttribute(attributeType.type) ? [attribute, attribute] : [attribute]\n );\n }, [onAddAttributes, parentUri, attributeType, showEmpty]);\n\n const canCreate = checkCanCreateAttribute({attributeType, mode});\n\n const commonProps = {\n attributeType: attributeType,\n errors,\n crosswalks: modifiedEntity.crosswalks,\n mode,\n onAddAttributes,\n onChangeAttribute,\n onDeactivateError,\n showNonOv: showInactive\n };\n const isEmptyAttributeList = newValues.length === 0 && values.length === 0;\n return (\n !isEmpty(modifiedEntity) && (\n <div ref={ref} className={errorClassName}>\n <CardinalityMessage cardinality={cardinality} />\n <ErrorMessage message={errorMessage} />\n {canCreate && (\n <Button color=\"primary\" onClick={onAdd} className={styles.moreButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {newValues.map((value, idx) => (\n <EditableAttribute\n key={value.uri}\n {...commonProps}\n attributeValue={value}\n lazy={showEmpty && !isRequired}\n showEmptyEditors={showEmptyEditors}\n ownError={getAttributeOwnError(value, idx, attributeTypeUri, errors)}\n onDeleteAttribute={onDeleteAttribute}\n />\n ))}\n {newValues.length > 0 && values.length > 0 && <Divider className={styles.divider} />}\n {values.map((originalValue) => {\n const modifiedEntityValue = modifiedEntityValues.find(propEq('uri', originalValue.uri));\n const value = modifiedEntityValue || originalValue;\n const deleted =\n entityValuesUris.includes(value.uri) && !modifiedEntityValuesUris.includes(value.uri);\n const edited =\n !deleted && modifiedEntityValue && !areValuesEqual(modifiedEntityValue, originalValue);\n const state = cond([\n [always(deleted), always('deleted')],\n [always(edited), always('edited')]\n ])();\n return (\n <div key={value.uri} className={classnames({[styles.ovFalse]: !isOv(value)})}>\n <EditableAttribute\n {...commonProps}\n attributeValue={value}\n ownError={getAttributeOwnError(value, null, attributeTypeUri, errors)}\n onDeleteAttribute={onDeleteAttribute}\n state={state}\n />\n </div>\n );\n })}\n {isEmptyAttributeList && <Typography className={styles.noData}>{noDataText}</Typography>}\n </div>\n )\n );\n};\n\nexport default withContext(\n ScrollToErrorContext,\n (contextValue, {parentUri, attributeType}) => {\n const {error} = contextValue || {};\n const isHighlighted = isAttributeTypeError(error, parentUri, attributeType.uri);\n return {highlightedError: isHighlighted ? contextValue : null};\n },\n SingleAttributeEditableContent\n);\n","import React from 'react';\nimport {ReadOnlyAttribute} from '@reltio/components';\nimport {AttributeType, AttributeValue} from '@reltio/mdm-sdk';\n\ntype Props = {\n values: AttributeValue[];\n attributeType: AttributeType;\n showInactive: boolean;\n};\n\nexport const SingleAttributeReadableContent = ({values, attributeType, showInactive}: Props) => {\n return (\n <>\n {values.map((value) => {\n return (\n <ReadOnlyAttribute\n key={value.uri}\n attributeValue={value}\n attributeType={attributeType}\n showNonOv={showInactive}\n />\n );\n })}\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n padding: '4px 16px 9px',\n overflow: 'hidden',\n flexGrow: 1\n },\n noData: {\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)'\n },\n pagination: {\n flexGrow: 0,\n flexShrink: 0\n }\n}));\n","import React, {useContext} from 'react';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {PivotingAttribute, SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {BasicView, BasicTablePagination, LinearLoadIndicator, PivotingAttributeContext} from '@reltio/components';\nimport mdm from '@reltio/mdm-module';\nimport {Box as Box} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SingleAttributeHeader} from '../SingleAttributeHeader/SingleAttributeHeader';\nimport SingleAttributeEditableContent from '../SingleAttributeEditableContent/SingleAttributeEditableContent';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport {SingleAttributeReadableContent} from '../SingleAttributeReadableContent/SingleAttributeReadableContent';\nimport {useStyles} from './styles';\n\nconst DEFAULT_ROWS_PER_PAGE = 15;\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const SingleAttributeView = ({config, className}: Props) => {\n const {caption, max = DEFAULT_ROWS_PER_PAGE, showInactiveValuesMenu} = config;\n\n const styles = useStyles();\n\n const {values, totalVisibleValues, page, setPage, isLoading, hasPaging, attributeType, showInactive} =\n useContext(SingleAttributeContext);\n\n const entityUri = useSelector(mdm.selectors.getEntityUri);\n const isViewMode = useSelector(mdm.selectors.getIsViewMode);\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode);\n const pivotingAttributes: PivotingAttribute[] = useSelector(mdm.selectors.getPivotingAttributes);\n\n const hasValues = values.length !== 0;\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n const renderContent = () => {\n if (isLoading) {\n return <LinearLoadIndicator />;\n }\n\n if (attributeType) {\n if (isViewMode && hasValues) {\n const props = {\n values,\n attributeType,\n showInactive\n };\n return <SingleAttributeReadableContent {...props} />;\n } else if (isEditableMode) {\n const props = {\n values,\n attributeType,\n parentUri: entityUri,\n showInactive,\n noDataText\n };\n return <SingleAttributeEditableContent {...props} />;\n }\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n };\n\n return (\n <PivotingAttributeContext.Provider value={pivotingAttributes}>\n <BasicView className={classnames(styles.root, className)}>\n <SingleAttributeHeader\n totalVisibleValues={totalVisibleValues}\n caption={caption}\n showInactiveValuesMenu={showInactiveValuesMenu}\n isEditableMode={isEditableMode}\n />\n <Box className={styles.content}>{renderContent()}</Box>\n {hasPaging && (\n <BasicTablePagination\n count={totalVisibleValues}\n page={page}\n rowsPerPage={max}\n rowsPerPageOptions={[]}\n onChangePage={setPage}\n classes={{root: styles.pagination}}\n />\n )}\n </BasicView>\n </PivotingAttributeContext.Provider>\n );\n};\n","import {useCallback, useState, useEffect, useMemo, useRef} from 'react';\nimport {ifElse, prop, always, has, pathOr, path, partition, propEq} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n isDataTenantEntity,\n getPagedEntity,\n getAttributeSource,\n AttributeValue,\n SearchFilter,\n findAttributeTypeByUri,\n isReadableAttribute,\n isTempUri,\n isOv,\n findAttributeValues,\n isFirstLevelAttributeUri,\n SingleAttributeViewConfig,\n getRequestErrorMessage,\n Paging\n} from '@reltio/mdm-sdk';\nimport mdm, {profile, ui} from '@reltio/mdm-module';\nimport {useSafePromise, useDidUpdateEffect} from '@reltio/components';\nimport {getPagedLocalEntity, getAttributeNameFromAttributeUri} from './helpers';\nimport i18n from 'ui-i18n';\n\ntype Params = {\n filters?: SearchFilter[];\n searchQuery?: string;\n sorting?: {\n field: string;\n order: string;\n };\n page: number;\n showInactive: boolean;\n};\n\nexport const useSingleAttributeLoader = <GenericAttributeValue extends AttributeValue>(\n config: SingleAttributeViewConfig,\n params: Params\n) => {\n const {attributeUri, max = 15} = config;\n const metadata = useSelector(mdm.selectors.getMetadata);\n const [values, setValues] = useState<GenericAttributeValue[]>([]);\n const [paging, setPaging] = useState<Paging>(null);\n const [isLoading, setIsLoading] = useState(false);\n const safePromise = useSafePromise();\n const attributeValuesRef = useRef<GenericAttributeValue[]>(null);\n\n const dispatch = useDispatch();\n const apiPath = useSelector(mdm.selectors.getApiPath);\n const tenant = useSelector(mdm.selectors.getTenant);\n const entity = useSelector(mdm.selectors.getEntityWithDiff);\n\n const isViewMode = useSelector(mdm.selectors.getIsViewMode);\n const isHistoryModeEnabled = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const diff = useSelector(mdm.selectors.getHistoryDiff);\n\n const parentUri = entity.uri;\n const attributeTypeName = getAttributeNameFromAttributeUri(attributeUri);\n const attributeTypeSource = getAttributeSource(attributeUri);\n attributeValuesRef.current = findAttributeValues(entity, parentUri, attributeTypeName);\n const attributeType = useMemo(() => findAttributeTypeByUri(metadata, attributeUri), [metadata, attributeUri]);\n const {globalFilter} = useSelector(mdm.selectors.getGlobalSearchRequestOptions);\n const {showInactive} = params;\n const loadAttributes = useCallback(() => {\n if (\n attributeType &&\n isReadableAttribute(attributeType) &&\n !isTempUri(parentUri) &&\n isFirstLevelAttributeUri(attributeUri)\n ) {\n setIsLoading(true);\n const {page, showInactive, ...rest} = params;\n const request = isDataTenantEntity(entity) || isHistoryModeEnabled ? getPagedLocalEntity : getPagedEntity;\n safePromise(\n request({\n metadata,\n entity,\n apiPath,\n tenant,\n parentUri,\n defaultMaxValues: max,\n attributeTypeUri: attributeUri,\n offset: max * page,\n globalFilter,\n options: showInactive ? '' : undefined,\n ...rest\n })\n )\n .then((response) => {\n const attributes = path([attributeTypeSource], response);\n const values: GenericAttributeValue[] = pathOr([], [attributeTypeName], attributes);\n if (!isHistoryModeEnabled) {\n dispatch(\n profile.actions.processNextPageOfAttributeValues({\n parentUri,\n attributeTypeUri: attributeUri,\n attributeTypeName,\n values\n })\n );\n }\n setValues(\n values.map((loadedValue) => {\n const valueFromEntity = attributeValuesRef.current?.find(propEq('uri', loadedValue.uri));\n return valueFromEntity || loadedValue;\n })\n );\n setPaging(path(['paging', attributeUri], attributes));\n })\n .catch((error) => {\n console.error(error);\n setValues([]);\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n })\n .finally(() => {\n setIsLoading(false);\n });\n } else {\n setValues([]);\n setPaging(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n apiPath,\n parentUri,\n tenant,\n attributeUri,\n max,\n metadata,\n params,\n globalFilter,\n attributeType,\n isHistoryModeEnabled,\n diff\n ]);\n\n useEffect(() => {\n loadAttributes();\n }, [loadAttributes]);\n\n useDidUpdateEffect(() => {\n if (isViewMode) {\n loadAttributes();\n }\n }, [isViewMode]);\n const partitionByOv = partition(isOv);\n const [, nonOvValues] = partitionByOv(attributeValuesRef.current || []);\n const nonVisibleValues: GenericAttributeValue[] = showInactive ? [] : nonOvValues;\n const totalProp = showInactive ? 'totalValues' : 'totalOvValues';\n const totalVisibleValues: number = ifElse(has(totalProp), prop(totalProp), always(values.length))(paging);\n const hasPaging = max < totalVisibleValues;\n const totalNonVisibleValues = paging?.totalValues\n ? paging.totalValues - totalVisibleValues\n : nonVisibleValues.length;\n return {\n values,\n isLoading,\n hasPaging,\n totalVisibleValues,\n attributeType,\n totalNonVisibleValues,\n nonVisibleValues\n };\n};\n","import React from 'react';\nimport {RelationsViewState} from '../hooks/useRelationsState';\n\nexport const RelationsViewStateContext = React.createContext<RelationsViewState>(null);\n\nRelationsViewStateContext.displayName = 'RelationsViewStateContext';\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nconst popupHorizontalPadding = '23px';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n button: {\n color: theme.palette.text.secondary,\n width: '36px',\n minWidth: '36px'\n },\n popupContent: {\n padding: `19px ${popupHorizontalPadding}`\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n },\n divider: {\n backgroundColor: 'rgba(0,0,0,0.1)',\n margin: `19px -${popupHorizontalPadding}`\n },\n title: {\n marginBottom: '30px'\n },\n sortControls: {\n display: 'flex',\n alignItems: 'center'\n },\n sortSelectorRoot: {\n flex: 1,\n padding: '13px 16px',\n fontSize: '0.85rem'\n },\n sortSelectorMenuItem: {\n fontSize: '0.85rem'\n },\n sortOrderButton: {\n flexShrink: 0,\n margin: '0 8px 0 7px'\n }\n}));\n","import React, {useContext, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {isEmptyValue} from '@reltio/mdm-sdk';\nimport {DropDownEditor, SmallIconButtonWithTooltip} from '@reltio/components';\nimport {Popover as Popover} from '@material-ui/core';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport FilterIcon from '@material-ui/icons/FilterList';\nimport {Button as Button} from '@material-ui/core';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';\nimport ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';\nimport {RelationsViewStateContext} from '../../../contexts/RelationsViewStateContext';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst FilterButton = ({className}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const {\n showInactive,\n toggleShowInactive,\n sortOrder,\n toggleSortOrder,\n sortOption,\n changeSortOption,\n sortOptions\n } = useContext(RelationsViewStateContext);\n const [isOpen, setIsOpen] = useState(false);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n const hasSortOptions = !isEmptyValue(sortOptions);\n\n const isAsc = sortOrder === 'asc';\n\n return (\n <>\n <Button\n ref={buttonRef}\n classes={{\n root: classnames(styles.button, className)\n }}\n onClick={togglePopup}\n >\n <FilterIcon />\n </Button>\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive || false}\n onChange={toggleShowInactive}\n />\n }\n label={i18n.text('Show inactive Relationships')}\n />\n {hasSortOptions && (\n <>\n <Divider className={styles.divider} />\n <Typography className={styles.title} variant=\"h6\">\n {i18n.text('Sort by')}\n </Typography>\n <div className={styles.sortControls}>\n <DropDownEditor\n entries={sortOptions}\n TextFieldProps={{variant: 'filled'}}\n classes={{\n root: styles.sortSelectorRoot,\n menuItem: styles.sortSelectorMenuItem\n }}\n fullWidth\n disableUnderline\n value={sortOption}\n onChange={changeSortOption}\n MenuProps={{\n getContentAnchorEl: null,\n anchorOrigin: {vertical: 'bottom', horizontal: 'left'}\n }}\n />\n <SmallIconButtonWithTooltip\n tooltipTitle={isAsc ? i18n.text('Ascending') : i18n.text('Descending')}\n icon={isAsc ? ArrowUpwardIcon : ArrowDownwardIcon}\n onClick={toggleSortOrder}\n className={styles.sortOrderButton}\n size=\"L\"\n />\n </div>\n </>\n )}\n </Popover>\n </>\n );\n};\n\nFilterButton.displayName = 'FilterButton';\n\nexport default FilterButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n header: {\n padding: '0 6px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px',\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n }\n});\n","import React from 'react';\nimport {RelationsViewConfig} from '@reltio/mdm-sdk';\n\nexport const ImportDTContext = React.createContext<{\n reloadRelations: () => void;\n config: Pick<RelationsViewConfig, 'content' | 'importFromDT' | 'maxDtssImport'>;\n }>(null);\n","import {useSelector, useDispatch} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {useCallback, useContext, useEffect, useState} from 'react';\nimport {getRequestErrorMessage, hasNonImportedRelations, importDTConnections, isTempUri} from '@reltio/mdm-sdk';\nimport {ui} from '@reltio/mdm-module';\nimport {ImportDTContext} from '../../../../contexts/ImportDTContext';\nimport i18n from 'ui-i18n';\n\nconst MAX = Math.pow(2, 31) - 1;\ntype Tenant = {id: string; label: string};\n\nexport const useImportFromDTLoader = () => {\n const dataTenants: Array<Tenant> = useSelector(mdmModule.selectors.getDataTenants);\n const dispatch = useDispatch();\n const {config, reloadRelations} = useContext(ImportDTContext);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const [tenants, setTenants] = useState<Array<Tenant>>([]);\n const [selectedTenant, setSelectedTenant] = useState<Tenant>(null);\n const dtssPath = useSelector(mdmModule.selectors.getDtssPath);\n const customerTenant = useSelector(mdmModule.selectors.getTenant);\n const content = [{...config.content, offset: 0, max: config.maxDtssImport ?? MAX}];\n\n const checkHasNonImportedConnections = useCallback(() => {\n setTenants([]);\n if (config.importFromDT && !isTempUri(entityUri)) {\n Promise.all(\n (dataTenants || []).map((tenant) =>\n hasNonImportedRelations({\n entityUri,\n content,\n dtssPath,\n customerTenant,\n dataTenant: tenant.id\n }).then(({hasNonImportedConnections}) => ({\n ...tenant,\n hasNonImportedConnections\n }))\n )\n )\n .then((modifiedTenants) => modifiedTenants.filter((tenant) => tenant.hasNonImportedConnections))\n .then(setTenants);\n }\n }, [entityUri, dtssPath, customerTenant, config, dataTenants]);\n\n const onConfirmImport = useCallback(() => {\n importDTConnections({\n entityUri,\n content,\n dtssPath,\n customerTenant,\n dataTenant: selectedTenant.id\n })\n .then(() => {\n reloadRelations();\n checkHasNonImportedConnections();\n })\n .catch((error) =>\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))))\n );\n setSelectedTenant(null);\n }, [\n entityUri,\n dtssPath,\n customerTenant,\n config,\n checkHasNonImportedConnections,\n reloadRelations,\n selectedTenant,\n setSelectedTenant\n ]);\n\n useEffect(() => {\n checkHasNonImportedConnections();\n }, [checkHasNonImportedConnections]);\n const onCancelConfirmation = useCallback(() => setSelectedTenant(null), []);\n const onImportClick = useCallback((tenant: Tenant) => setSelectedTenant(tenant), []);\n return {\n tenants,\n selectedTenant,\n onConfirmImport,\n onCancelConfirmation,\n onImportClick\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n tenant: {\n backgroundColor: '#0000EE',\n cursor: 'pointer',\n position: 'absolute',\n top: '8px',\n left: '22px',\n width: '10px',\n height: '10px',\n color: 'white',\n fontSize: '10px',\n fontWeight: 'bold',\n userSelect: 'text',\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n button: {\n position: 'relative'\n },\n badge: {\n fontSize: '10px',\n height: '14px',\n minWidth: '14px',\n width: '14px',\n fontWeight: 'bold',\n backgroundColor: '#FF4081',\n color: '#FFF'\n },\n badgePosition: {\n right: '5px',\n top: '4px'\n }\n}));\n","import React from 'react';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport {Badge as Badge} from '@material-ui/core';\nimport {useStyles} from './styles';\n\ninterface Props {\n label: number | string;\n}\n\nexport const MultipleImportIcon = ({label}: Props) => {\n const styles = useStyles();\n return (\n <Badge\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n badgeContent={label}\n >\n <CloudDownloadIcon />\n </Badge>\n );\n};\n","import React from 'react';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport {DropDownMenuButton, SmallIconButtonWithTooltip} from '@reltio/components';\nimport {useImportFromDTLoader} from './hooks/useImportFromDTLoader';\nimport {useStyles} from './styles';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {ConfirmationDialog} from '@reltio/components';\nimport {MultipleImportIcon} from './MultipleImportIcon';\n\nexport const ImportFromDT = () => {\n const {tenants, selectedTenant, onConfirmImport, onCancelConfirmation, onImportClick} = useImportFromDTLoader();\n const styles = useStyles();\n const oneTenant = tenants.length === 1;\n const labelOnButton = oneTenant\n ? tenants[0].label.indexOf('DT:') === 0\n ? tenants[0].label[3]\n : tenants[0].label[0]\n : tenants.length;\n return (\n <>\n {!!tenants.length && (\n <>\n {oneTenant ? (\n <div className={styles.button}>\n <SmallIconButtonWithTooltip\n size={'L'}\n icon={CloudDownloadIcon}\n tooltipTitle={i18n.text('Import connections from ${label}', {label: tenants[0].label})}\n onClick={() => onImportClick(tenants[0])}\n />\n <div className={classnames(styles.tenant)}>{labelOnButton}</div>\n </div>\n ) : (\n <DropDownMenuButton\n menuId={'importDT-table-actions'}\n buttonComponent={SmallIconButtonWithTooltip}\n buttonProps={{\n tooltipTitle: i18n.text('Import connections'),\n size: 'L',\n // eslint-disable-next-line react/display-name\n icon: () => <MultipleImportIcon label={labelOnButton} />\n }}\n menuItems={tenants.map((tenant) => ({\n onClick: () => {\n onImportClick(tenant);\n },\n text: tenant.label\n }))}\n />\n )}\n <ConfirmationDialog\n open={!!selectedTenant}\n title={i18n.text('Confirmation')}\n content={i18n.text('Import connections from ${label}?', {label: selectedTenant?.label})}\n discardCaption={i18n.text('Cancel')}\n saveCaption={i18n.text('Import')}\n onDiscard={onCancelConfirmation}\n onSave={onConfirmImport}\n />\n </>\n )}\n </>\n );\n};\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {ExpandableSearchInput, FacetViewHeader, HideOnShrink, VerticalDivider} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport FilterButton from './FilterButton/FilterButton';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {useStyles} from './styles';\nimport {ImportFromDT} from './ImportFromDT/ImportFromDT';\n\ntype Props = {\n title?: string;\n total?: number;\n};\n\nconst RelationsHeader = ({title, total}: Props) => {\n const styles = useStyles();\n\n const {searchQuery, changeSearchQuery} = useContext(RelationsViewStateContext);\n\n return (\n <FacetViewHeader title={title || ''} className={styles.header}>\n {total > 0 && (\n <HideOnShrink widthToHide={400}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {total > 1\n ? i18n.text('${count} items', {count: total})\n : i18n.text('${count} item', {count: total})}\n </Typography>\n </HideOnShrink>\n )}\n <ExpandableSearchInput query={searchQuery} onChange={changeSearchQuery} />\n <ImportFromDT />\n <FilterButton />\n </FacetViewHeader>\n );\n};\n\nexport default RelationsHeader;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {tooltip: Record<string, string | number>}) => ({\n tooltip: theme.tooltip,\n tooltipContent: {\n minWidth: '165px',\n padding: '4px 2px 2px'\n },\n label: {\n fontSize: '11px',\n lineHeight: '13px',\n fontWeight: 500,\n margin: 0,\n color: 'white'\n },\n secondaryLabel: {\n color: 'rgba(255, 255, 255, 0.7)',\n fontSize: '10px',\n marginTop: '4px',\n fontWeight: 500,\n lineHeight: '11px'\n },\n progress: {\n marginTop: '4px',\n color: '#FFFFFF'\n }\n}));\n","import React, {useCallback, useEffect, useState} from 'react';\nimport {isNil, ifElse} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n ConnectionEntity,\n getDataTenantEntitySecondaryLabel,\n getEntitySecondaryLabel,\n isDataTenantEntity,\n isTempUri\n} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {useSafePromise} from '@reltio/components';\nimport {CircularProgress as CircularProgress} from '@material-ui/core';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {useStyles} from './styles';\n\nconst PROGRESS_ICON_SIZE = 16;\n\ntype Props = {\n label: string;\n entity?: ConnectionEntity;\n children: React.ReactElement;\n};\n\nconst RelationTooltip = ({label, entity, children, ...tooltipProps}: Props) => {\n const styles = useStyles();\n const safePromise = useSafePromise();\n const tenant = useSelector(mdm.selectors.getTenant);\n const dtssPath = useSelector(mdm.selectors.getDtssPath) as string;\n const [isLoading, setIsLoading] = useState(false);\n const [secondaryLabel, setSecondaryLabel] = useState<string>(null);\n\n useEffect(() => {\n setSecondaryLabel(null);\n }, [entity]);\n\n const onOpen = useCallback(() => {\n if (entity?.entityUri && !isTempUri(entity?.entityUri) && isNil(secondaryLabel)) {\n const request = ifElse(\n isDataTenantEntity,\n (entity: ConnectionEntity) =>\n getDataTenantEntitySecondaryLabel({\n entityUri: entity.entityUri,\n dataTenant: entity.dataTenant,\n customerTenant: tenant,\n dtssPath\n }),\n (entity: ConnectionEntity) => getEntitySecondaryLabel(entity.entityUri)\n );\n\n setIsLoading(true);\n safePromise(request(entity))\n .then(({secondaryLabel}) => {\n setSecondaryLabel(secondaryLabel);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }\n }, [dtssPath, entity, tenant, safePromise, secondaryLabel]);\n\n const tooltipContent = (\n <div className={styles.tooltipContent}>\n <div className={styles.label}>{label}</div>\n {isLoading && <CircularProgress size={PROGRESS_ICON_SIZE} classes={{colorPrimary: styles.progress}} />}\n {secondaryLabel && <div className={styles.secondaryLabel}>{secondaryLabel}</div>}\n </div>\n );\n\n return (\n <Tooltip\n onOpen={onOpen}\n title={tooltipContent}\n disableFocusListener\n classes={{tooltip: styles.tooltip}}\n {...tooltipProps}\n >\n {children}\n </Tooltip>\n );\n};\n\nexport default RelationTooltip;\n","import {\n Connection,\n Metadata,\n getEntityType,\n getLabel,\n getEntityUriForLink,\n getRelationTypeLabelFromMetadata,\n TEntityType\n} from '@reltio/mdm-sdk';\n\nexport const useRelationInfo = (connection: Connection, metadata: Metadata) => {\n const {entity, relation} = connection;\n const entityType = getEntityType(metadata, entity?.entityType) as TEntityType;\n const entityLabel = getLabel(entity?.entityLabel) as string;\n const preparedUri = getEntityUriForLink({uri: entity?.entityUri, dataTenant: entity?.dataTenant}) as string;\n const relationLabel =\n relation?.relationLabel || (getRelationTypeLabelFromMetadata(metadata, relation?.relationType) as string);\n\n return {\n entityType,\n entityLabel,\n preparedUri,\n relationLabel\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n container: {\n display: 'flex'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport Button, {ButtonProps} from '@material-ui/core/Button';\nimport {useStyles} from './styles';\n\ntype Props = {\n acceptRelation: () => void;\n ignoreRelation: () => void;\n};\n\nexport const SuggestedButtons = ({acceptRelation, ignoreRelation, ...props}: Props & ButtonProps) => {\n const styles = useStyles();\n return (\n <div className={styles.container}>\n <Button onClick={acceptRelation} variant=\"text\" color=\"primary\" {...props} style={{alignSelf: 'center'}}>\n {i18n.text('Accept')}\n </Button>\n <Button onClick={ignoreRelation} variant=\"text\" color=\"primary\" {...props} style={{alignSelf: 'center'}}>\n {i18n.text('Ignore')}\n </Button>\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {inactiveBackground: string}) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n\n marginBottom: '2px'\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row',\n minHeight: '24px',\n padding: '0 16px'\n },\n rowInactive: {\n background: theme.inactiveBackground\n },\n entityAvatar: {\n height: '12px',\n width: '12px',\n fontSize: '11px',\n marginRight: '8px'\n },\n entityLabelContainer: {\n textDecoration: 'none',\n cursor: 'pointer',\n paddingRight: '8px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n editButtonsContent: {\n marginLeft: 'auto',\n flex: '0 0 40px'\n },\n editButtons: {\n padding: 0\n },\n removed: {\n color: theme.palette.text.secondary,\n textDecoration: 'line-through'\n },\n editedLabel: {\n fontStyle: 'italic',\n color: theme.palette.text.secondary,\n margin: '0 5px'\n }\n}));\n","import React, {memo, useCallback} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport mdm from '@reltio/mdm-module';\nimport {Typography as Typography} from '@material-ui/core';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport {Connection, Metadata, isActiveObject, checkRemoved, checkEdited, checkIgnored} from '@reltio/mdm-sdk';\nimport {EntityTypeIcon, EntityUriLink, SmallIconButtonWithTooltip} from '@reltio/components';\nimport RelationTooltip from '../RelationTooltip/RelationTooltip';\nimport {useRelationInfo} from '../../hooks/useRelationInfo';\nimport {checkRelationPermission} from '../../helpers/permissions';\nimport {SuggestedButtons} from '../SuggestedButtons/SuggestedButtons';\nimport {useStyles} from './styles';\n\ntype Props = {\n connection: Connection;\n onRemoveRelation: (relationUri: string) => void;\n onEditRelation: (connection: Connection) => void;\n onAcceptRelation?: (connection: Connection) => void;\n onIgnoreRelation?: (connection: Connection) => void;\n metadata: Metadata;\n showControls: boolean;\n renderRelationArrowButton?: () => React.ReactNode;\n};\n\nconst EditableRelationItem = memo(\n ({\n connection,\n metadata,\n showControls,\n onRemoveRelation,\n onEditRelation,\n onAcceptRelation,\n onIgnoreRelation,\n renderRelationArrowButton\n }: Props) => {\n const styles = useStyles();\n\n const {entity, relation} = connection;\n const removed = checkRemoved(connection);\n const edited = checkEdited(connection);\n const ignored = checkIgnored(connection);\n const {entityType, entityLabel, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const isActive = isActiveObject(relation) && isActiveObject(entity);\n const mode = useSelector(mdm.selectors.getMode);\n const {canRemove, canUpdate} = checkRelationPermission({\n mode,\n onRemoveRelation,\n onEditRelation,\n metadata,\n connection\n });\n\n const handleRemoveRelation = useCallback(\n () => onRemoveRelation(connection.relation.relationUri),\n [onRemoveRelation, connection]\n );\n\n const handleEditRelation = useCallback(() => onEditRelation(connection), [onEditRelation, connection]);\n\n const handleAcceptRelation = useCallback(() => {\n onAcceptRelation(connection);\n }, [onAcceptRelation, connection]);\n\n const handleIgnoreRelation = useCallback(() => onIgnoreRelation(connection), [onIgnoreRelation, connection]);\n\n const editButtonsContent =\n (canRemove || canUpdate) && showControls && !connection.suggested ? (\n <>\n {canUpdate && (\n <SmallIconButtonWithTooltip\n icon={EditIcon}\n size=\"XS\"\n onClick={handleEditRelation}\n tooltipTitle={i18n.text('Edit')}\n />\n )}\n {canRemove && (\n <SmallIconButtonWithTooltip\n icon={DeleteIcon}\n size=\"XS\"\n onClick={handleRemoveRelation}\n tooltipTitle={i18n.text('Remove')}\n />\n )}\n </>\n ) : undefined;\n\n const suggustedButtonsContent = connection.suggested ? (\n <SuggestedButtons\n acceptRelation={handleAcceptRelation}\n ignoreRelation={handleIgnoreRelation}\n size=\"small\"\n disabled={ignored}\n />\n ) : undefined;\n const captionText = ignored ? i18n.text('ignored') : i18n.text('edited');\n return (\n <div\n className={classnames(\n styles.container,\n {[styles.rowInactive]: !isActive},\n {[styles.removed]: removed || ignored}\n )}\n >\n <div className={styles.row}>\n {renderRelationArrowButton && renderRelationArrowButton()}\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n {(edited || ignored) && (\n <Typography variant=\"caption\" className={styles.editedLabel}>\n ({captionText})\n </Typography>\n )}\n {relationLabel && <span className={styles.relationLabel}>{`, ${relationLabel}`}</span>}\n </EntityUriLink>\n\n <div className={styles.editButtonsContent}>{editButtonsContent}</div>\n {suggustedButtonsContent}\n </div>\n </div>\n );\n }\n);\n\nEditableRelationItem.displayName = 'EditableRelationItem';\n\nexport default EditableRelationItem;\n","import {checkMetadataForDelete, checkMetadataForUpdate, checkRemoved, getRelationType, Mode} from '@reltio/mdm-sdk';\n\nexport const checkRelationPermission = ({metadata, mode, connection, onRemoveRelation, onEditRelation}) => {\n const isEditableMode = mode === Mode.Editing || mode === Mode.Suggesting;\n if (isEditableMode && connection) {\n const {\n relation: {relationType}\n } = connection;\n const isRemoved = checkRemoved(connection);\n const relationTypeMetadata = getRelationType(metadata, relationType);\n const canRemove = onRemoveRelation && !isRemoved && checkMetadataForDelete(mode, relationTypeMetadata);\n const canUpdate = onEditRelation && !isRemoved && checkMetadataForUpdate(mode, relationTypeMetadata);\n return {canRemove, canUpdate};\n } else {\n return {canRemove: false, canUpdate: false};\n }\n};\n","import {prop, when} from 'ramda';\nimport {Directions, wrapInArrayIfNeeded, InOutRelation, isObject} from '@reltio/mdm-sdk';\n\nconst getUri = when(isObject, prop('uri'));\n\nexport const getFirstRelationTypeObject = (inRelations: InOutRelation, outRelations: InOutRelation) => {\n const prepareRelation = (direction: string, relations: InOutRelation) => {\n const relationsArr = relations ? wrapInArrayIfNeeded(relations) : [];\n return relationsArr.map((relation) => ({\n type: getUri(relation),\n direction: direction === Directions.IN ? Directions.IN : Directions.OUT\n }));\n };\n return prepareRelation(Directions.IN, inRelations).concat(prepareRelation(Directions.OUT, outRelations))[0];\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n arrowIcon: {\n fontSize: '16px',\n marginRight: '6px'\n }\n});\n","import React from 'react';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport {checkNew, Connection, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n onClick: () => void;\n connection: Connection;\n config: RelationsViewConfig;\n showSecondLevel: boolean;\n};\n\nexport const RelationArrowButton = ({onClick, connection, config, showSecondLevel}: Props) => {\n const styles = useStyles();\n const {parentEntityUri} = connection;\n const {contentSecondLevel} = config;\n\n const props = {\n onClick,\n className: styles.arrowIcon\n };\n\n if (parentEntityUri || !contentSecondLevel || checkNew(connection)) {\n return null;\n }\n\n return showSecondLevel ? <ArrowDropDownIcon {...props} /> : <ArrowRightIcon {...props} />;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n row: {\n display: 'flex',\n alignItems: 'center',\n width: '100%'\n },\n secondLevelContent: {\n paddingLeft: '24px'\n }\n});\n","import React, {useContext, useMemo} from 'react';\nimport {Connection, ActivityFilter, getEntitiesMapForConnections, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {useSecondLevelConnections} from '../../hooks/useSecondLevelConnections';\nimport {RelationArrowButton} from '../RelationArrowButton/RelationArrowButton';\nimport {RelationsContent} from '../RelationsContent/RelationsContent';\nimport {useStyles} from './styles';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {EntitiesMapContext} from '@reltio/components';\n\ntype Props = {\n config: RelationsViewConfig;\n connection: Connection;\n children: (render: () => React.ReactNode) => React.ReactNode;\n};\n\nexport const SecondLevelWrapper = ({config, connection, children}: Props) => {\n const styles = useStyles();\n\n const {showInactive} = useContext(RelationsViewStateContext);\n\n const {\n connections,\n showSecondLevel,\n toggleShowSecondLevel,\n loadRelations,\n loading,\n total\n } = useSecondLevelConnections({\n config,\n connection,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY\n });\n\n const entitiesMap = useMemo(() => getEntitiesMapForConnections(connections), [connections]);\n\n const renderRelationArrowButton = () => {\n return (\n <RelationArrowButton\n onClick={toggleShowSecondLevel}\n connection={connection}\n config={config}\n showSecondLevel={showSecondLevel}\n />\n );\n };\n\n return (\n <>\n {children(renderRelationArrowButton)}\n {showSecondLevel && (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <div className={styles.secondLevelContent}>\n <RelationsContent\n isLoading={loading}\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n total={total}\n parentEntityUri={connection.entity.entityUri}\n />\n </div>\n </EntitiesMapContext.Provider>\n )}\n </>\n );\n};\n","import {useState, useCallback} from 'react';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {\n Connection,\n getRelationsForEntity,\n ActivityFilter,\n GlobalSearchRequestOptions,\n RelationsViewConfig\n} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} from '@reltio/mdm-module';\n\ntype Params = {\n config: RelationsViewConfig;\n connection: Connection;\n relationActivityFilter: ActivityFilter;\n};\n\nexport const useSecondLevelConnections = ({config, connection, relationActivityFilter}: Params) => {\n const dispatch = useDispatch();\n\n const [showSecondLevel, setShowSecondLevel] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const {contentSecondLevel} = config;\n const {entity} = connection;\n\n const connections =\n (useSelector((state) =>\n mdmModule.selectors.getConnectionsWithDraftsByViewId(state, config.id, entity.entityUri)\n ) as Connection[]) || [];\n\n const total = useSelector((state) => mdmModule.selectors.getTotalByViewId(state, config.id, entity.entityUri));\n const {activityFilter}: GlobalSearchRequestOptions =\n useSelector(mdmModule.selectors.getGlobalSearchRequestOptions) || {};\n\n const loadRelations = useCallback(() => {\n const requestConfig = {\n ...contentSecondLevel,\n returnObjects: true,\n returnDates: true,\n activeness: {\n relation: relationActivityFilter || ActivityFilter.ALL,\n entity: activityFilter\n }\n };\n\n setLoading(true);\n\n getRelationsForEntity(entity.entityUri, [requestConfig]).then((response) => {\n const {connections, total} = response[0];\n\n if (connections) {\n dispatch(\n profile.relations.actions.secondLevelRelationsLoaded({\n connections,\n parentEntityUri: entity.entityUri,\n id: config.id,\n total\n })\n );\n }\n\n setLoading(false);\n });\n }, [config.id, contentSecondLevel, dispatch, entity.entityUri, activityFilter, relationActivityFilter]);\n\n const toggleShowSecondLevel = useCallback(() => {\n if (!showSecondLevel && !connection.connections) {\n loadRelations();\n }\n\n setShowSecondLevel((show) => !show);\n }, [loadRelations, connection.connections, showSecondLevel]);\n\n return {connections, showSecondLevel, toggleShowSecondLevel, loadRelations, loading, total};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px',\n marginLeft: '16px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n divider: {\n margin: '0 0 8px',\n backgroundColor: 'rgba(0,0,0,0.12)'\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px'\n }\n}));\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pipe, partition, evolve, always, omit} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {\n Connection,\n isTempUri,\n Mode,\n createNewConnectionWithDefaultRelationType,\n checkNew,\n RelationsViewConfig\n} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {RelationEditor} from '@reltio/components';\nimport EditableRelationItem from '../EditableRelationItem/EditableRelationItem';\nimport {getFirstRelationTypeObject} from '../../helpers/relation';\nimport {SecondLevelWrapper} from '../SecondLevelWrapper/SecondLevelWrapper';\nimport {useStyles} from './styles';\n\nexport type Props = {\n className?: string;\n noDataText: string;\n connections: Array<Connection>;\n config: RelationsViewConfig;\n mode: Mode;\n parentEntityUri?: string;\n};\n\nconst RelationsEditableContent = ({className, connections = [], config, mode, noDataText, parentEntityUri}: Props) => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const relationToAdd = useSelector((state) => mdmModule.selectors.getRelationToAddByViewId(state, config.id));\n const relationsToEdit = useSelector((state) => mdmModule.selectors.getRelationsToEditByViewId(state, config.id));\n const entity = useSelector(mdmModule.selectors.getEntity);\n const checkIfCanAddRelations = useSelector((state) =>\n mdmModule.selectors.getCheckIfCanAddRelations(state, config.content)\n );\n\n const dispatch = useDispatch();\n const styles = useStyles();\n\n const onAddRelation = useCallback(() => {\n const newConnection = createNewConnectionWithDefaultRelationType({config, mode, metadata, parentEntityUri});\n pipe(profile.relations.actions.openRelationEditor(config.id), dispatch)(newConnection);\n }, [config, mode, metadata, dispatch, parentEntityUri]);\n\n const onRemoveRelation = useCallback(\n (relationUri) => {\n dispatch(profile.relations.actions.closeRelationEditor(config.id, relationUri));\n dispatch(profile.relations.actions.removeRelation(config.id, relationUri));\n const connectionToRemove = connections.find(\n (connection) => profile.relations.selectors.getRelationUriFromConnection(connection) === relationUri\n );\n const entityUri = profile.relations.selectors.getEntityUriFromConnection(connectionToRemove);\n if (isTempUri(entityUri)) {\n dispatch(profile.modifiedEntities.actions.entityDeleted(entityUri));\n }\n },\n [config, connections, dispatch]\n );\n const content = config.content;\n const defaultRelationTypeObject = getFirstRelationTypeObject(content.inRelations, content.outRelations);\n const onAcceptRelation = useCallback(\n (connection) => {\n const connectionWithDefaultRelationType = pipe(\n omit(['suggested']),\n evolve({\n relation: {\n relationType: always(defaultRelationTypeObject.type),\n object: evolve({type: always(defaultRelationTypeObject.type), attributes: always(null)})\n }\n })\n )(connection);\n dispatch(profile.relations.actions.addRelation(config.id, connectionWithDefaultRelationType));\n },\n [dispatch, config, defaultRelationTypeObject]\n );\n\n const onIgnoreRelation = useCallback(\n (connection) => {\n dispatch(\n profile.relations.actions.ignoreRelation(config.id, {\n relationType: defaultRelationTypeObject.type,\n relationDirection: defaultRelationTypeObject.direction,\n entityUri: connection.entity.entityUri,\n relationUri: connection.relation.relationUri\n })\n );\n },\n [dispatch, config, defaultRelationTypeObject]\n );\n\n const [newConnections, currentConnections] = partition(checkNew, connections);\n const canAddRelations = entity && checkIfCanAddRelations;\n\n const isEmptyRelationList = newConnections.length === 0 && currentConnections.length === 0;\n\n const getRelationEditableContent = (connection: Connection) => {\n const openedRelation = relationsToEdit.find(\n (openedRelation) => openedRelation?.relation?.relationUri === connection?.relation?.relationUri\n );\n const showControls = !config.allowOnlyCreateNew || checkNew(connection);\n const itemKey = `${connection?.relation?.relationUri}-${connection?.relation?.direction}`;\n return (\n <SecondLevelWrapper config={config} connection={connection} key={itemKey}>\n {(renderRelationArrowButton) => {\n return openedRelation ? (\n <RelationEditor connection={openedRelation} config={config} mode={mode} metadata={metadata} />\n ) : (\n <EditableRelationItem\n renderRelationArrowButton={renderRelationArrowButton}\n connection={connection}\n metadata={metadata}\n showControls={showControls}\n onRemoveRelation={onRemoveRelation}\n onEditRelation={pipe(profile.relations.actions.openRelationEditor(config.id), dispatch)}\n onAcceptRelation={onAcceptRelation}\n onIgnoreRelation={onIgnoreRelation}\n />\n );\n }}\n </SecondLevelWrapper>\n );\n };\n\n const shouldShowAddRelationButton =\n canAddRelations && (!relationToAdd || (relationToAdd && relationToAdd.parentEntityUri === parentEntityUri));\n\n const shouldShowRelationEditorToAdd = relationToAdd && relationToAdd.parentEntityUri === parentEntityUri;\n\n return (\n <div className={className}>\n {shouldShowAddRelationButton && (\n <Button color=\"primary\" onClick={onAddRelation} className={styles.moreButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {shouldShowRelationEditorToAdd && (\n <RelationEditor connection={relationToAdd} config={config} mode={mode} metadata={metadata} />\n )}\n {newConnections.map(getRelationEditableContent)}\n {newConnections.length > 0 && currentConnections.length > 0 && <Divider className={styles.divider} />}\n {currentConnections.map(getRelationEditableContent)}\n {isEmptyRelationList && <Typography className={styles.noData}>{noDataText}</Typography>}\n </div>\n );\n};\n\nexport default RelationsEditableContent;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n attributesList: {\n paddingLeft: '46px',\n paddingRight: '16px',\n marginBottom: '10px',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0\n }\n}));\n","import React, {useContext, useEffect, useMemo} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n AttributeType,\n CollaborationObjectTypes,\n Connection,\n createRelatedObjectUris,\n Entity,\n getActivenessAttributes,\n getAttributesListForReadMode,\n getAttributeValuesUris,\n getRelationAttributesList,\n isEmptyValue,\n Metadata\n} from '@reltio/mdm-sdk';\nimport {CollaborationContext, ReadOnlyAttributesList, RelatedObjectUrisContext} from '@reltio/components';\nimport {useStyles} from './styles';\nimport {isEmpty} from 'ramda';\n\ntype Props = {\n connection: Connection;\n className?: string;\n};\n\nexport const RelationAttributes = ({connection, className}: Props) => {\n const styles = useStyles();\n\n const {relation} = connection;\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n\n const firstLevelRelationAttrTypes = useMemo(\n () => getRelationAttributesList(metadata, relation?.relationType) as AttributeType[],\n [relation?.relationType, metadata]\n );\n\n const attributeListEntity = useMemo(\n () => ({\n attributes: {\n ...profile.relations.selectors.getRelationAttributesFromConnection(connection)\n },\n ...getActivenessAttributes(connection?.relation || {})\n }),\n [connection]\n );\n\n const attributesList = useMemo(\n () => getAttributesListForReadMode(firstLevelRelationAttrTypes, attributeListEntity as Entity),\n [firstLevelRelationAttrTypes, attributeListEntity]\n );\n\n const showAttributesList = attributesList.filter(({values}) => !isEmptyValue(values)).length > 0;\n\n const objectIds = useMemo(() => getAttributeValuesUris(attributeListEntity.attributes), [attributeListEntity]);\n\n const {getCommentsCount} = useContext(CollaborationContext);\n useEffect(() => {\n !isEmpty(objectIds) && getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n const additionalRelatedObjectUris = useMemo(\n () => createRelatedObjectUris(CollaborationObjectTypes.RELATION, {entityUri: currentEntityUri, connection}),\n [connection, currentEntityUri]\n );\n\n return showAttributesList ? (\n <RelatedObjectUrisContext.Provider value={additionalRelatedObjectUris}>\n <ReadOnlyAttributesList\n className={classnames(styles.attributesList, className)}\n entity={attributeListEntity}\n attrTypes={firstLevelRelationAttrTypes}\n />\n </RelatedObjectUrisContext.Provider>\n ) : (\n <div className={classnames(styles.attributesList, className)}>{i18n.text('No attributes')}</div>\n );\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\nimport InfoIconSelected from '@material-ui/icons/InfoRounded';\nimport InfoIcon from '@material-ui/icons/InfoOutlined';\n\ntype Props = {\n show: boolean;\n onToggle: () => void;\n className?: string;\n};\n\nexport const ShowDetailsButton = ({show, onToggle, className}: Props) => {\n return (\n <SmallIconButtonWithTooltip\n className={className}\n tooltipTitle={\n show\n ? i18n.text('Hide attributes of the relationship')\n : i18n.text('Show attributes of the relationship')\n }\n tooltipPlacement=\"bottom-end\"\n size=\"XXS\"\n icon={show ? InfoIconSelected : InfoIcon}\n onClick={onToggle}\n />\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {inactiveBackground: string; suggested: string}) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n paddingBottom: '2px'\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row',\n minHeight: '16px',\n padding: '3px 11px 3px 16px'\n },\n rowInactive: {\n background: theme.inactiveBackground\n },\n entityAvatar: {\n height: '12px',\n width: '12px',\n fontSize: '11px',\n marginRight: '8px'\n },\n entityLabelContainer: {\n textDecoration: 'none',\n cursor: 'pointer',\n wordBreak: 'break-all',\n paddingRight: '8px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n showDetails: {\n marginLeft: 'auto',\n paddingRight: '5px'\n },\n attributesList: {\n paddingLeft: '46px',\n marginBottom: '10px',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0\n },\n suggestedWrapper: {\n backgroundColor: theme.suggested\n },\n commentsContainer: {\n marginLeft: 'auto',\n alignItems: 'center',\n '& + $showDetails': {\n marginLeft: '4px'\n }\n },\n additionalButtonsWrapper: {\n marginLeft: 'auto',\n display: 'flex'\n },\n labelWrapper: {\n display: 'flex',\n alignItems: 'center'\n }\n}));\n","import React, {memo, useState} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {\n Connection,\n Metadata,\n isActiveObject,\n createRelatedObjectUris,\n CollaborationObjectTypes,\n getConnectionRelationUriForLink\n} from '@reltio/mdm-sdk';\nimport {isEmpty} from 'ramda';\nimport {COMMENTS_CONTAINER_VISIBILITY_AREA, CommentsContainer, EntityTypeIcon, EntityUriLink} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport RelationTooltip from '../../RelationTooltip/RelationTooltip';\nimport {RelationAttributes} from '../RelationAttributes/RelationAttributes';\nimport {ShowDetailsButton} from '../ShowDetailsButton/ShowDetailsButton';\nimport {useRelationInfo} from '../../../hooks/useRelationInfo';\nimport {useStyles} from './styles';\nimport {SuggestedButtons} from '../../SuggestedButtons/SuggestedButtons';\n\ntype Props = {\n connection: Connection;\n acceptRelation?: (connection: Connection) => () => void;\n ignoreRelation?: (connection: Connection) => () => void;\n renderRelationArrowButton: () => React.ReactNode;\n};\n\nconst RelationItem = memo(({connection, renderRelationArrowButton, acceptRelation, ignoreRelation}: Props) => {\n const styles = useStyles();\n const isSuggested = connection.suggested;\n const {entity, relation} = connection;\n const [showDetails, setShowDetails] = useState(false);\n\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n const {entityType, entityLabel, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const isActive = isActiveObject(relation) && isActiveObject(entity);\n\n const toggleShowDetails = () => {\n setShowDetails((show) => !show);\n };\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n const relatedObjectUris =\n (entity &&\n relation &&\n createRelatedObjectUris(CollaborationObjectTypes.RELATION, {\n entityUri: currentEntityUri,\n connection\n })) ||\n [];\n return (\n <div\n className={classnames(\n styles.container,\n {[styles.rowInactive]: !isActive},\n {[styles.suggestedWrapper]: isSuggested}\n )}\n >\n <div className={classnames(styles.row, COMMENTS_CONTAINER_VISIBILITY_AREA)}>\n {renderRelationArrowButton && renderRelationArrowButton()}\n <div className={styles.labelWrapper}>\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n {relationLabel && <span className={styles.relationLabel}>{`, ${relationLabel}`}</span>}\n </EntityUriLink>\n </div>\n <div className={styles.additionalButtonsWrapper}>\n {!isEmpty(relatedObjectUris) && (\n <CommentsContainer\n className={styles.commentsContainer}\n uri={getConnectionRelationUriForLink(relation)}\n relatedObjectUris={relatedObjectUris}\n objectType={CollaborationObjectTypes.RELATION}\n allowOnlyOneComment\n />\n )}\n {isSuggested && (\n <SuggestedButtons\n size=\"small\"\n acceptRelation={acceptRelation(connection)}\n ignoreRelation={ignoreRelation(connection)}\n />\n )}\n {!isSuggested && (\n <ShowDetailsButton\n show={showDetails}\n onToggle={toggleShowDetails}\n className={styles.showDetails}\n />\n )}\n </div>\n </div>\n {showDetails && <RelationAttributes connection={connection} />}\n </div>\n );\n});\n\nRelationItem.displayName = 'RelationItem';\n\nexport default RelationItem;\n","import {pluck, mean, pipe, defaultTo} from 'ramda';\nimport {Rating} from '@reltio/mdm-sdk';\n\nexport const calcAverageRating = (ratings: Rating[]) => {\n return pipe(pluck('value'), mean, defaultTo(0))(ratings);\n};\n\nexport const getCountOfLikes = (ratings: Rating[]) => {\n return ratings.filter((rating) => rating.value === 5).length;\n};\n\nexport const getCountOfDislikes = (ratings: Rating[]) => {\n return ratings.filter((rating) => rating.value === 1).length;\n};\n\nexport const calcWidthOfLikesScale = (ratings: Rating[]) => {\n if (ratings.length === 0) {\n return '0%';\n }\n\n return (getCountOfLikes(ratings) / ratings.length) * 100 + '%';\n};\n\nexport const calcWidthOfDislikesScale = (ratings: Rating[]) => {\n if (ratings.length === 0) {\n return '0%';\n }\n\n return (getCountOfDislikes(ratings) / ratings.length) * 100 + '%';\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end'\n },\n averageRating: {\n marginBottom: '7px',\n fontSize: '16px',\n letterSpacing: '0.15px',\n lineHeight: '19px',\n color: theme.palette.text.primary\n },\n scale: {\n display: 'flex',\n marginBottom: '6px',\n width: '128px',\n height: '4px'\n },\n likesScale: {\n height: '100%',\n backgroundColor: '#8CC152'\n },\n dislikesScale: {\n height: '100%',\n backgroundColor: 'rgb(255, 112, 112)'\n },\n counts: {\n display: 'flex'\n },\n likesCount: {\n marginRight: '32px'\n },\n count: {\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n icon: {\n marginRight: '4px',\n width: '14px',\n height: '14px',\n color: 'rgba(0,0,0,0.38)'\n }\n}));\n","import React from 'react';\nimport classnames from 'classnames';\nimport {Rating} from '@reltio/mdm-sdk';\nimport {Typography as Typography} from '@material-ui/core';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport ThumbDownIcon from '@material-ui/icons/ThumbDown';\nimport {\n calcAverageRating,\n calcWidthOfDislikesScale,\n calcWidthOfLikesScale,\n getCountOfDislikes,\n getCountOfLikes\n} from '../../../helpers/ratings';\nimport {useStyles} from './styles';\n\ntype Props = {\n ratings: Rating[];\n className?: string;\n};\n\nexport const Ratings = ({ratings, className}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.wrapper, className)}>\n <Typography className={styles.averageRating}>{calcAverageRating(ratings).toFixed(1)}</Typography>\n <div className={styles.scale}>\n <div className={styles.likesScale} style={{width: calcWidthOfLikesScale(ratings)}} />\n <div className={styles.dislikesScale} style={{width: calcWidthOfDislikesScale(ratings)}} />\n </div>\n <div className={styles.counts}>\n <div className={classnames(styles.likesCount, styles.count)}>\n <ThumbUpIcon className={styles.icon} />\n {getCountOfLikes(ratings)}\n </div>\n <div className={styles.count}>\n <ThumbDownIcon className={styles.icon} />\n {getCountOfDislikes(ratings)}\n </div>\n </div>\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex'\n },\n button: {\n fontSize: '14px',\n textTransform: 'none',\n color: theme.palette.text.secondary\n },\n likeButton: {\n marginLeft: '-12px',\n marginRight: '8px'\n },\n isActive: {\n color: theme.palette.text.primary\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Rating} from '@reltio/mdm-sdk';\nimport {DropDownMenuButton} from '@reltio/components';\nimport {Button as Button} from '@material-ui/core';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport {useStyles} from './styles';\n\ntype Props = {\n ratings: Rating[];\n onAgree: () => void;\n onDisagree: (comment: string) => void;\n};\n\nexport const RatingsButtons = ({ratings, onAgree, onDisagree}: Props) => {\n const styles = useStyles();\n\n const username = useSelector(mdmModule.selectors.getUserName) as string;\n const ratingOfCurrentUser = ratings.find(({user}) => user === username);\n\n const menuItems = [\n {\n text: i18n.text('Has left the practice'),\n onClick: () => onDisagree(i18n.text('Has left the practice'))\n },\n {\n text: i18n.text('Has moved away'),\n onClick: () => onDisagree(i18n.text('Has moved away'))\n },\n {\n text: i18n.text('Has passed away'),\n onClick: () => onDisagree(i18n.text('Has passed away'))\n },\n {\n text: i18n.text('Has retired'),\n onClick: () => onDisagree(i18n.text('Has retired'))\n },\n {\n text: i18n.text('Other'),\n onClick: () => onDisagree(i18n.text('Other'))\n }\n ];\n\n return (\n <div className={styles.wrapper}>\n <Button\n onClick={onAgree}\n variant=\"text\"\n size=\"small\"\n className={classnames(styles.button, styles.likeButton, {\n [styles.isActive]: ratingOfCurrentUser?.value === 5\n })}\n >\n Agree\n </Button>\n <DropDownMenuButton\n buttonProps={{\n endIcon: <ArrowDropDownIcon />,\n variant: 'text',\n size: 'small',\n className: classnames(styles.button, {\n [styles.isActive]: ratingOfCurrentUser?.value === 1\n })\n }}\n buttonContent={ratingOfCurrentUser?.value === 1 ? ratingOfCurrentUser.comment : 'Disagree'}\n menuItems={menuItems}\n menuId=\"disagree-dropdown-menu-button\"\n />\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {suggested: string}) => ({\n wrapper: {\n padding: '6px 16px 6px'\n },\n entityTypeIcon: {\n marginRight: '16px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '14px',\n letterSpacing: 0,\n lineHeight: '16px'\n },\n entityLabelContainer: {\n wordBreak: 'break-all',\n textDecoration: 'none'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n ratings: {\n marginLeft: 'auto'\n },\n showDetailsButton: {\n marginLeft: '16px',\n marginTop: '18px'\n },\n relationAttributes: {\n paddingLeft: '60px'\n },\n suggestedWrapper: {\n padding: '6px 8px 6px 16px',\n backgroundColor: theme.suggested\n },\n commentsContainer: {\n alignSelf: 'center',\n '& + $ratings': {\n marginLeft: '16px'\n }\n },\n additionalButtonsWrapper: {\n marginLeft: 'auto',\n display: 'flex'\n }\n}));\n","import React, {useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport {isEmpty} from 'ramda';\nimport {COMMENTS_CONTAINER_VISIBILITY_AREA, CommentsContainer, EntityTypeIcon, EntityUriLink} from '@reltio/components';\nimport {\n Metadata,\n Connection,\n rateRelation,\n createRelatedObjectUris,\n CollaborationObjectTypes,\n getConnectionRelationUriForLink\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {Box as Box} from '@material-ui/core';\nimport RelationTooltip from '../../RelationTooltip/RelationTooltip';\nimport {RelationAttributes} from '../RelationAttributes/RelationAttributes';\nimport {ShowDetailsButton} from '../ShowDetailsButton/ShowDetailsButton';\nimport {Ratings} from '../Ratings/Ratings';\nimport {useRelationInfo} from '../../../hooks/useRelationInfo';\nimport {RatingsButtons} from '../RatingsButtons/RatingsButtons';\nimport {SuggestedButtons} from '../../SuggestedButtons/SuggestedButtons';\nimport {useStyles} from './styles';\n\ntype Props = {\n connection: Connection;\n loadRelations: () => void;\n acceptRelation?: (connection: Connection) => () => void;\n ignoreRelation?: (connection: Connection) => () => void;\n renderRelationArrowButton: () => React.ReactNode;\n};\n\nexport const RelationComplexItem = ({\n connection,\n loadRelations,\n renderRelationArrowButton,\n acceptRelation,\n ignoreRelation\n}: Props) => {\n const styles = useStyles();\n const isSuggested = connection.suggested;\n\n const [showDetails, setShowDetails] = useState(false);\n\n const {entity, relation} = connection;\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n const {entityLabel, entityType, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const ratings = relation?.ratings || [];\n\n const toggleShowDetails = () => {\n setShowDetails((show) => !show);\n };\n\n const handleAgree = () => {\n rateRelation(relation?.relationUri, {\n comment: '',\n value: 5\n }).then(loadRelations);\n };\n\n const handleDisagree = (comment: string) => {\n rateRelation(relation?.relationUri, {\n comment,\n value: 1\n }).then(loadRelations);\n };\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n const relatedObjectUris =\n (entity &&\n relation &&\n createRelatedObjectUris(CollaborationObjectTypes.RELATION, {\n entityUri: currentEntityUri,\n connection\n })) ||\n [];\n\n return (\n <div className={classnames(styles.wrapper, {[styles.suggestedWrapper]: isSuggested})}>\n <Box display=\"flex\" minHeight=\"44px\" className={COMMENTS_CONTAINER_VISIBILITY_AREA}>\n <Box display=\"flex\" alignItems=\"center\">\n <Box display=\"flex\" alignItems=\"center\">\n {renderRelationArrowButton && renderRelationArrowButton()}\n <EntityTypeIcon entityType={entityType} className={styles.entityTypeIcon} />\n </Box>\n <Box display=\"flex\" flexDirection=\"column\">\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n </EntityUriLink>\n {relationLabel && <span className={styles.relationLabel}>{relationLabel}</span>}\n {!isSuggested && (\n <RatingsButtons ratings={ratings} onAgree={handleAgree} onDisagree={handleDisagree} />\n )}\n </Box>\n </Box>\n <div className={styles.additionalButtonsWrapper}>\n {!isEmpty(relatedObjectUris) && (\n <CommentsContainer\n className={styles.commentsContainer}\n uri={getConnectionRelationUriForLink(relation)}\n relatedObjectUris={relatedObjectUris}\n objectType={CollaborationObjectTypes.RELATION}\n allowOnlyOneComment\n />\n )}\n {isSuggested && (\n <SuggestedButtons\n acceptRelation={acceptRelation(connection)}\n ignoreRelation={ignoreRelation(connection)}\n />\n )}\n {!isSuggested && (\n <>\n <Ratings ratings={ratings} className={styles.ratings} />\n <ShowDetailsButton\n show={showDetails}\n onToggle={toggleShowDetails}\n className={styles.showDetailsButton}\n />\n </>\n )}\n </div>\n </Box>\n {showDetails && <RelationAttributes connection={connection} className={styles.relationAttributes} />}\n </div>\n );\n};\n","import React, {useMemo, useContext, useEffect} from 'react';\nimport {Connection, getRelationshipsObjectIdsForCollaboration, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {CollaborationContext} from '@reltio/components';\nimport RelationItem from './RelationItem/RelationItem';\nimport {RelationComplexItem} from './RelationCompexItem/RelationComplexItem';\nimport {useSuggestedRelations} from '../../hooks/useSuggestedRelations';\nimport {SecondLevelWrapper} from '../SecondLevelWrapper/SecondLevelWrapper';\n\ntype Props = {\n className?: string;\n connections: Array<Connection>;\n loadRelations: () => void;\n config?: RelationsViewConfig;\n mainEnityUri?: string;\n};\n\nconst RelationsList = ({className, connections = [], loadRelations, config, mainEnityUri}: Props) => {\n const {isComplex, content} = config;\n const {ignoreRelation, acceptRelation} = useSuggestedRelations(content, loadRelations, mainEnityUri);\n\n const objectIds = useMemo(() => {\n return getRelationshipsObjectIdsForCollaboration(connections);\n }, [connections]);\n\n const {getCommentsCount} = useContext(CollaborationContext);\n\n useEffect(() => {\n getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n return (\n <div className={className}>\n {connections.map((connection) => {\n const itemKey = `${connection?.relation?.relationUri}-${connection?.relation?.direction}`;\n\n return (\n <SecondLevelWrapper config={config} connection={connection} key={itemKey}>\n {(renderRelationArrowButton) => {\n if (isComplex) {\n return (\n <RelationComplexItem\n loadRelations={loadRelations}\n connection={connection}\n acceptRelation={acceptRelation}\n ignoreRelation={ignoreRelation}\n renderRelationArrowButton={renderRelationArrowButton}\n />\n );\n }\n\n return (\n <RelationItem\n acceptRelation={acceptRelation}\n ignoreRelation={ignoreRelation}\n connection={connection}\n renderRelationArrowButton={renderRelationArrowButton}\n />\n );\n }}\n </SecondLevelWrapper>\n );\n })}\n </div>\n );\n};\n\nRelationsList.displayName = 'RelationsList';\n\nexport default RelationsList;\n","import {useDispatch} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {\n Connection,\n ignoreSuggestedRelation,\n createRelation,\n getRequestErrorMessage,\n Directions,\n RelationsContent\n} from '@reltio/mdm-sdk';\nimport {ui} from '@reltio/mdm-module';\nimport {getFirstRelationTypeObject} from '../helpers/relation';\n\nexport const useSuggestedRelations = (content: RelationsContent, loadRelations: () => void, mainEnityUri: string) => {\n const relationTypeObject = getFirstRelationTypeObject(content.inRelations, content.outRelations);\n const dispatch = useDispatch();\n const ignoreRelation = (connection: Connection) => () => {\n const {entity} = connection;\n ignoreSuggestedRelation(mainEnityUri, {\n relatedEntityUri: entity.entityUri,\n relationType: relationTypeObject.type,\n relationDirection: relationTypeObject.direction\n })\n .then(loadRelations)\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n });\n };\n\n const acceptRelation = (connection: Connection) => () => {\n const {entity, relation} = connection;\n const {startDate, endDate} = relation;\n const isInDirection = relationTypeObject.direction === Directions.IN;\n const startEntityUri = isInDirection ? entity.entityUri : mainEnityUri;\n const endEntityUri = isInDirection ? mainEnityUri : entity.entityUri;\n createRelation({\n startEntityUri,\n endEntityUri,\n relationType: relationTypeObject.type,\n attributes: null,\n startDate,\n endDate\n })\n .then(loadRelations)\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n });\n };\n\n return {\n ignoreRelation,\n acceptRelation\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n list: {\n paddingTop: '8px',\n paddingBottom: '10px',\n overflow: 'auto',\n flexGrow: 1\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {isEditableMode, Connection, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {LinearLoadIndicator} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport RelationsEditableContent from '../RelationsEditableContent/RelationsEditableContent';\nimport RelationsList from '../RelationsList/RelationsList';\nimport {useStyles} from './styles';\n\ntype Props = {\n isLoading: boolean;\n config: RelationsViewConfig;\n loadRelations: () => void;\n connections: Connection[];\n total: number;\n parentEntityUri?: string;\n};\n\nexport const RelationsContent = ({isLoading, config, loadRelations, connections, total, parentEntityUri}: Props) => {\n const styles = useStyles();\n\n const {selectors} = mdmModule;\n const entity = useSelector(selectors.getEntity);\n const mode = useSelector(selectors.getMode);\n\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n if (isLoading) {\n return <LinearLoadIndicator />;\n }\n\n if (isEditableMode(mode)) {\n return (\n <RelationsEditableContent\n connections={connections}\n className={styles.list}\n key={entity?.uri}\n config={config}\n mode={mode}\n noDataText={noDataText}\n parentEntityUri={parentEntityUri}\n />\n );\n }\n\n if (total > 0) {\n return (\n <RelationsList\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n className={styles.list}\n key={entity?.uri}\n mainEnityUri={entity.uri}\n />\n );\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n container: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0\n },\n content: {\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n flexDirection: 'column',\n minHeight: 0\n },\n pagination: {\n height: '52px',\n flexGrow: 0,\n flexShrink: 0\n }\n});\n","import React, {useContext, useEffect, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {ActivityFilter, Connection, getEntitiesMapForConnections, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {\n BasicTablePagination,\n BasicView,\n EntitiesMapContext,\n useRelationsLoader,\n EntityContext\n} from '@reltio/components';\nimport RelationsHeader from '../RelationsHeader/RelationsHeader';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {ImportDTContext} from '../../contexts/ImportDTContext';\nimport {buildRelationsFilter} from '../../helpers/filters';\nimport {RelationsContent} from '../RelationsContent/RelationsContent';\nimport {pick} from 'ramda';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: RelationsViewConfig;\n className?: string;\n};\n\nconst RelationsView = ({config, className}: Props) => {\n const styles = useStyles();\n\n const {page, setPage, rowsPerPage, sortOrder, sortOption, showInactive, searchQuery, changeSearchQuery} =\n useContext(RelationsViewStateContext);\n const {selectors} = mdmModule;\n const connections = useSelector((state) =>\n selectors.getConnectionsWithDraftsByViewId(state, config.id)\n ) as Connection[];\n const entity = useSelector(selectors.getEntity);\n const total = useSelector((state) => selectors.getTotalByViewId(state, config.id));\n const mode = useSelector(selectors.getMode);\n const sorting = useMemo(\n () => ({\n order: sortOrder,\n field: sortOption\n }),\n [sortOrder, sortOption]\n );\n\n useEffect(() => {\n changeSearchQuery('');\n }, [entity?.uri]); //eslint-disable-line react-hooks/exhaustive-deps\n\n const filter = useMemo(() => buildRelationsFilter(searchQuery), [searchQuery]);\n\n const {isLoading, reload: loadRelations} = useRelationsLoader({\n sorting,\n filter,\n page,\n rowsPerPage,\n config,\n entity,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY,\n mode\n });\n\n const entitiesMap = useMemo(() => getEntitiesMapForConnections(connections), [connections]);\n\n const importDTContextValue = useMemo(\n () => ({\n reloadRelations: loadRelations,\n config: pick(['content', 'importFromDT', 'maxDtssImport'], config)\n }),\n [loadRelations, config]\n );\n\n return (\n <EntityContext.Provider value={entity}>\n <EntitiesMapContext.Provider value={entitiesMap}>\n <BasicView className={className}>\n <div className={styles.container}>\n <ImportDTContext.Provider value={importDTContextValue}>\n <RelationsHeader title={config.caption} total={total} />\n </ImportDTContext.Provider>\n <div className={styles.content}>\n <RelationsContent\n isLoading={isLoading}\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n total={total}\n />\n {total > rowsPerPage && (\n <BasicTablePagination\n classes={{root: styles.pagination}}\n count={total}\n rowsPerPageOptions={[]}\n rowsPerPage={rowsPerPage}\n page={page}\n onChangePage={setPage}\n />\n )}\n </div>\n </div>\n </BasicView>\n </EntitiesMapContext.Provider>\n </EntityContext.Provider>\n );\n};\n\nRelationsView.displayName = 'RelationsView';\n\nexport {RelationsView};\n","import {FilterBuilder, Maybe, filterValueToQueryStringWithQuotes} from '@reltio/mdm-sdk';\n\nconst buildRelationsFilter = (searchQuery) => {\n const queryClause = Maybe.fromFalsy<string>(searchQuery)\n .map(filterValueToQueryStringWithQuotes)\n .map(\n (queryString) =>\n `containsWordStartingWith(entity.label,${queryString})` +\n ' or ' +\n `containsWordStartingWith(relation.label,${queryString})`\n )\n .orSome('');\n\n return new FilterBuilder().addClause(queryClause).build();\n};\n\nexport {buildRelationsFilter};\n","import {useCallback, useMemo, useState} from 'react';\nimport {pipe, map, unless, append, propEq} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {RelationsViewConfig, SortOrder, isEmptyValue} from '@reltio/mdm-sdk';\n\nconst DEFAULT_ROWS_PER_PAGE = 15;\nconst DEFAULT_SORT_ORDER = 'asc';\nconst DEFAULT_SHOW_INACTIVE = false;\n\ntype Option = {\n value: string;\n label: string;\n};\n\nexport type RelationsViewState = {\n searchQuery: string;\n changeSearchQuery: (value: string) => void;\n sortOrder: SortOrder;\n toggleSortOrder: () => void;\n sortOption?: string;\n changeSortOption: (option: string) => void;\n sortOptions: Option[];\n page: number;\n setPage: (page: number) => void;\n rowsPerPage: number;\n showInactive: boolean;\n toggleShowInactive: () => void;\n};\n\nconst useRelationsState = (config: RelationsViewConfig): RelationsViewState => {\n const sortOptions = useMemo(\n () =>\n pipe(\n Object.entries,\n map(([key, value]) => ({\n value: key,\n label: value\n })),\n unless(\n (options) => isEmptyValue(options) || options.some(propEq('value', 'name')),\n append({label: i18n.text('Name'), value: 'name'})\n )\n )(config.sortOptions || {}),\n [config.sortOptions]\n );\n\n const rowsPerPage = Number(config.max) || DEFAULT_ROWS_PER_PAGE;\n const [page, setPage] = useState(0);\n const [sortOrder, setSortOrder] = useState(config.sortOrder || DEFAULT_SORT_ORDER);\n const [sortOption, setSortOption] = useState(sortOptions[0]?.value);\n const [searchQuery, setSearchQuery] = useState('');\n const [showInactive, setShowInactive] = useState(DEFAULT_SHOW_INACTIVE);\n\n const toggleShowInactive = useCallback(() => {\n setPage(0);\n setShowInactive((showInactive) => !showInactive);\n }, []);\n\n const toggleSortOrder = useCallback(() => {\n setPage(0);\n setSortOrder((order) => {\n return order === 'asc' ? 'desc' : 'asc';\n });\n }, []);\n\n const changeSortOption = useCallback((option: string) => {\n setPage(0);\n setSortOption(option);\n }, []);\n\n const changeSearchQuery = useCallback((value: string) => {\n setPage(0);\n setSearchQuery(value);\n }, []);\n\n return {\n searchQuery,\n changeSearchQuery,\n sortOrder,\n toggleSortOrder,\n sortOption,\n changeSortOption,\n sortOptions,\n page,\n setPage,\n rowsPerPage,\n showInactive,\n toggleShowInactive\n };\n};\n\nexport default useRelationsState;\n","import React from 'react';\nimport {AttributeType, ComplexAttributeValue} from '@reltio/mdm-sdk';\nimport {ColumnsDataType} from '../components/types';\n\nexport const TableAttributeContext = React.createContext<{\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n values: ComplexAttributeValue[];\n page: number;\n setPage: (page: number) => void;\n isLoading: boolean;\n visibleColumns: string[];\n onChangeColumns: (cols: string[]) => void;\n onToggleFilters: () => void;\n onSort: (payload) => void;\n onFilter: (payload) => void;\n hasPaging: boolean;\n totalVisibleValues: number;\n showTable: boolean;\n filters: {\n [key: string]: {\n filter: string;\n values: [string];\n };\n };\n sorting: {\n order: 'desc' | 'asc';\n field: string;\n };\n attributeType: AttributeType;\n allColumnsData: ColumnsDataType;\n }>(null);\n\nTableAttributeContext.displayName = 'TableAttributeContext';\n","import {basicTableViewState, createStandardAction} from '@reltio/components';\n\nconst CHANGE_SEARCH_QUERY = 'CHANGE_SEARCH_QUERY';\n\nconst actions = {\n ...basicTableViewState.actions,\n changeSearchQuery: createStandardAction(CHANGE_SEARCH_QUERY)\n};\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case CHANGE_SEARCH_QUERY:\n return {...state, searchQuery: action.payload, page: 0};\n default:\n return basicTableViewState.reducer(state, action);\n }\n};\n\nexport {reducer as default, actions};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {HistoryOperations, historyPalettes} from '@reltio/mdm-sdk';\n\nconst BLOB_HEIGHT = 100;\n\nconst removedStyle = {\n textDecoration: 'line-through',\n color: 'rgba(0,0,0,.54)'\n};\n\nexport const useStyles = makeStyles(() => ({\n headCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n fontSize: '12px'\n },\n rowCell: {\n fontSize: '13px',\n overflow: 'hidden'\n },\n blobWrapper: {\n position: 'relative',\n overflowY: 'auto',\n overflowX: 'hidden',\n whiteSpace: 'pre',\n maxHeight: `${BLOB_HEIGHT}px`,\n boxSizing: 'border-box',\n padding: '15px 25px 0 25px'\n },\n defaultWrapper: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n padding: '15px 25px 0 25px'\n },\n updateAttribute: {\n padding: '0 4px',\n marginLeft: '-4px',\n ...historyPalettes[HistoryOperations.updateAttribute]\n },\n insertAttribute: {\n ...historyPalettes[HistoryOperations.insertAttribute]\n },\n deleteAttribute: {\n padding: '0 4px',\n marginLeft: '-4px',\n textDecoration: 'line-through',\n ...historyPalettes[HistoryOperations.deleteAttribute]\n },\n description: {\n marginLeft: '-22px'\n },\n 'row-cell--sorted': {\n color: 'rgba(0,0,0,0.87)'\n },\n 'row-cell--removed': {\n pointerEvents: 'none',\n '& > div': removedStyle\n }\n}));\n","import React from 'react';\n\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {withFilterAtBottom, DescriptionIcon} from '@reltio/components';\nimport {useStyles} from './styles';\n\nconst HeadCellRenderer = (props) => {\n const styles = useStyles();\n const {description} = props?.headCellData || {};\n\n return (\n <div className={styles.headCell}>\n <DefaultHeadCellRenderer {...props} />\n <DescriptionIcon description={description} className={styles.description} />\n </div>\n );\n};\n\nexport default withFilterAtBottom(HeadCellRenderer);\n","import React from 'react';\nimport {stopPropagation} from '@reltio/components';\nimport {PrimitiveValue} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n value: PrimitiveValue;\n historyClassName?: string;\n};\n\nconst BlobRenderer = ({value, historyClassName}: Props) => {\n const styles = useStyles();\n return (\n <div className={styles.blobWrapper} onScroll={stopPropagation}>\n <span className={styles[historyClassName]}>{value}</span>\n </div>\n );\n};\n\nexport default BlobRenderer;\n","import React, {useContext} from 'react';\nimport {pipe} from 'ramda';\nimport {DataTypes, getHistoryAppearanceByUri, getHistoryAttributeClassName, PrimitiveValue} from '@reltio/mdm-sdk';\nimport {DataTypeValue, ExpandedValueTooltip, HistoryDiffContext} from '@reltio/components';\nimport BlobRenderer from './BlobRenderer';\nimport {useStyles} from './styles';\n\ntype Props = {\n value: {\n value: PrimitiveValue;\n uri: string;\n };\n columnData: {\n dataTypeDefinition: {\n type: DataTypes;\n };\n };\n};\n\nconst DefaultCellValueRenderer = ({value, columnData: {dataTypeDefinition}}: Props) => {\n const styles = useStyles();\n\n const {value: simpleValue, uri} = value;\n const {appearance} = useContext(HistoryDiffContext);\n const historyClassName = pipe(getHistoryAppearanceByUri, getHistoryAttributeClassName)(uri, appearance);\n\n switch (dataTypeDefinition.type) {\n case DataTypes.TYPE_BLOB:\n return <BlobRenderer value={simpleValue} historyClassName={historyClassName} />;\n default: {\n const dataTypeValue = <DataTypeValue value={simpleValue} dataTypeDefinition={dataTypeDefinition} />;\n return (\n <ExpandedValueTooltip value={dataTypeValue}>\n <div className={styles.defaultWrapper}>\n <span className={styles[historyClassName]}>{dataTypeValue}</span>\n </div>\n </ExpandedValueTooltip>\n );\n }\n }\n};\n\nexport default DefaultCellValueRenderer;\n","import {assoc, chain, isNil, map, path, pipe, prop, reduce, reject, slice, split, uniqBy} from 'ramda';\nimport {\n AttributeNode,\n AttributeType,\n attributeUriToSearchUri,\n flatAttributeTreeNode,\n getAttrDataTypeDefinition,\n getAttributeTypesTree,\n getOvAttributeValuesByPathWithUri,\n isAttributeSearchUri,\n Metadata,\n SearchParent\n} from '@reltio/mdm-sdk';\nimport HeadCellRenderer from '../components/AttributeTable/cell-renderers/HeadCellRenderer';\nimport DefaultCellValueRenderer from '../components/AttributeTable/cell-renderers/DefaultCellValueRenderer';\n\nexport const getColumnsDataFromAttributeNode = (attrNode: AttributeNode, parents: SearchParent[]) => {\n const {uri, label, children, name, description} = attrNode;\n return reject(isNil, {\n id: attributeUriToSearchUri(uri, parents),\n label,\n description,\n dataTypeDefinition: getAttrDataTypeDefinition(attrNode),\n children: children?.map((childNode) => getColumnsDataFromAttributeNode(childNode, parents.concat({name})))\n });\n};\n\nexport const getColumnsData = (metadata: Metadata, attributeType: AttributeType) =>\n pipe(\n (metadata: Metadata, attributeType: AttributeType) => getAttributeTypesTree(metadata, attributeType),\n map((attrNode: AttributeNode) => getColumnsDataFromAttributeNode(attrNode, [attributeType])),\n chain(flatAttributeTreeNode),\n uniqBy(prop('id'))\n )(metadata, attributeType);\n\nconst getAttrPathFromColumnId = pipe(split('.'), slice(2, Infinity));\n\nconst getAttributeValues = (attrPath, value) =>\n pipe(path(['value']), getOvAttributeValuesByPathWithUri(attrPath))(value);\n\nconst getRowValueByColumnId = (columnId, value) => {\n const attrPath = getAttrPathFromColumnId(columnId);\n return getAttributeValues(attrPath, value);\n};\n\nexport const getBasicTableRowsData = (values, columnsData) =>\n values.map((value) =>\n pipe(\n reduce((acc, {id}) => assoc(id, getRowValueByColumnId(id, value), acc), {}),\n assoc('value', value)\n )(columnsData)\n );\n\nconst getNestedPathByColumnId = (columnId) => {\n if (isAttributeSearchUri(columnId)) {\n const attrPath = getAttrPathFromColumnId(columnId);\n return attrPath.length > 1 ? attrPath.slice(0, -1) : null;\n } else {\n return null;\n }\n};\n\nconst getColumnDataByColumnId = (columnData) => ({\n ...columnData,\n sortable: true,\n resizable: true,\n nestedPath: getNestedPathByColumnId(columnData.id),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: DefaultCellValueRenderer\n});\n\nexport const getBasicTableColumnsData = map(getColumnDataByColumnId);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n header: {\n padding: '0 4px 0 16px'\n }\n}));\n","import React, {useContext} from 'react';\nimport {useSelector} from 'react-redux';\nimport {\n FacetViewHeader,\n ColumnsSettings,\n FilterButton,\n VerticalDivider,\n ExpandableSearchInput,\n DescriptionIcon,\n RequiredMark\n} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {useStyles} from './styles';\n\ntype Props = {\n title: string;\n};\n\nconst AttributeTableHeader = ({title}: Props) => {\n const styles = useStyles();\n const isEditableMode = useSelector(mdmModule.selectors.getIsEditableMode);\n\n const {\n attributeType,\n searchQuery,\n setSearchQuery,\n filters,\n onToggleFilters,\n allColumnsData,\n visibleColumns,\n onChangeColumns\n } = useContext(TableAttributeContext);\n\n const showRequiredMark = isEditableMode && attributeType?.required;\n\n return (\n <FacetViewHeader title={title} className={styles.header}>\n {showRequiredMark && <RequiredMark />}\n <DescriptionIcon description={attributeType?.description} />\n <ExpandableSearchInput query={searchQuery} onChange={setSearchQuery} />\n <FilterButton enabled={!!filters} onClick={onToggleFilters} />\n <VerticalDivider height={24} margin={4} />\n <ColumnsSettings\n columnsData={allColumnsData}\n selectedColumns={visibleColumns}\n onChangeColumns={onChangeColumns}\n />\n </FacetViewHeader>\n );\n};\n\nexport default AttributeTableHeader;\n","import React from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\nimport {withTableContext} from '@reltio/components';\n\ntype Props = {\n cell: {values: string[]};\n isSorted: boolean;\n CellValueRenderer: React.ElementType;\n isRemoved: boolean;\n};\nconst RowCellRenderer = ({cell, CellValueRenderer, isRemoved, isSorted, ...otherProps}: Props) => {\n const styles = useStyles();\n return (\n <div\n className={classnames(\n {\n [styles['row-cell--sorted']]: isSorted,\n [styles['row-cell--removed']]: isRemoved\n },\n styles.rowCell\n )}\n >\n {cell.values.map((value, index) => (\n <CellValueRenderer key={index} value={value} {...otherProps} />\n ))}\n </div>\n );\n};\n\nexport default withTableContext(({deletedUris}, {rowValue: {value}}) => ({\n isRemoved: Boolean(deletedUris.find((uri) => value.uri === uri))\n}))(RowCellRenderer);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n tableContainer: {\n display: 'flex',\n fontFamily: 'Roboto',\n color: 'rgba(0,0,0,0.54)',\n marginBottom: '15px'\n },\n 'row-cell__buttons-container': {\n position: 'absolute'\n },\n 'row-cell__buttons-wrapper': {\n display: 'flex',\n paddingLeft: '10px',\n '& > button': {\n marginLeft: '-10px',\n transform: 'scale(0.9)'\n }\n }\n}));\n","import React from 'react';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport i18n from 'ui-i18n';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\n\ntype Props = {\n onEdit?: () => void;\n onRemove?: () => void;\n};\n\nexport const EditButtons = ({onEdit, onRemove}: Props) => (\n <>\n {onEdit && (\n <SmallIconButtonWithTooltip tooltipTitle={i18n.text('Edit')} icon={EditIcon} size=\"L\" onClick={onEdit} />\n )}\n {onRemove && (\n <SmallIconButtonWithTooltip\n tooltipTitle={i18n.text('Remove')}\n icon={DeleteIcon}\n size=\"L\"\n onClick={onRemove}\n />\n )}\n </>\n);\n\nexport default EditButtons;\n","import React, {useCallback, useContext, useMemo, useState} from 'react';\nimport RowCellRenderer from './cell-renderers/RowCellRenderer';\nimport {BasicTable, useConfigPermissions} from '@reltio/components';\nimport {getBasicTableColumnsData, getBasicTableRowsData} from '../../helpers/tableAttributeHelpers';\nimport {useStyles} from './styles';\nimport {\n checkCanEditAttribute,\n checkCanDeleteAttribute,\n SearchFilter,\n isReltioCrosswalk,\n Entity,\n isEditableMode as checkIsEditableMode,\n AttributeItem,\n TableAttributeViewConfig,\n ComplexAttributeValue\n} from '@reltio/mdm-sdk';\nimport {ColumnsDataType} from '../types';\nimport EditButtons from './EditButtons';\nimport {useSelector} from 'react-redux';\nimport {path, prop, pipe} from 'ramda';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport mdmModule from '@reltio/mdm-module';\n\nconst MAX_HEIGHT = 477;\n\ntype Props = {\n columnsData: ColumnsDataType;\n values: ComplexAttributeValue[];\n filters?: {\n [key: string]: SearchFilter;\n };\n onFilter?: (payload) => void;\n sorting?:\n | {\n field: string;\n order: string;\n }\n | undefined;\n onSort?: (payload) => void;\n config: TableAttributeViewConfig;\n onEdit: React.Dispatch<ComplexAttributeValue>;\n onDeleteAttribute: (attribute: AttributeItem) => void;\n deletedUris: string[];\n};\n\nconst AttributeTable = ({\n columnsData,\n values,\n sorting,\n onSort,\n filters,\n onFilter,\n config,\n onEdit,\n onDeleteAttribute,\n deletedUris\n}: Props) => {\n const tableRowsData = useMemo(() => getBasicTableRowsData(values, columnsData), [values, columnsData]);\n const tableColumnsData = useMemo(() => getBasicTableColumnsData(columnsData), [columnsData]);\n\n const styles = useStyles();\n const mode = useSelector(mdmModule.selectors.getMode);\n const isEditableMode = checkIsEditableMode(mode);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n const {attributeType} = useContext(TableAttributeContext);\n\n const renderRowCell = useCallback(\n (props) => (\n <RowCellRenderer\n {...props}\n isSorted={!!sorting && sorting.field === props.columnData.id} /* eslint-disable-line react/prop-types */\n />\n ),\n [sorting]\n );\n\n const [hoverRowIndex, setHoverRowIndex] = useState(null);\n\n const {canUpdate, canDelete} = useConfigPermissions();\n\n const checkCanEdit = (attributeValue: ComplexAttributeValue) =>\n canUpdate(config) &&\n checkCanEditAttribute({\n attributeType,\n mode,\n attributeValue,\n isReltioCrosswalk: isReltioCrosswalk(modifiedEntity.crosswalks, attributeValue)\n });\n const checkCanRemove = (attributeValue: ComplexAttributeValue) =>\n canDelete(config) &&\n checkCanDeleteAttribute({\n attributeType,\n mode,\n attributeValue,\n metadata,\n isReltioCrosswalk: isReltioCrosswalk(modifiedEntity.crosswalks, attributeValue)\n });\n\n const hideRightContent = useMemo(\n () =>\n typeof hoverRowIndex === 'number' && isEditableMode\n ? deletedUris.includes(pipe(path([hoverRowIndex]), prop('uri'))(values))\n : true,\n [hoverRowIndex, deletedUris, values, isEditableMode]\n );\n const canRemove = typeof hoverRowIndex === 'number' && checkCanRemove(path([hoverRowIndex], values));\n const canEdit = typeof hoverRowIndex === 'number' && checkCanEdit(path([hoverRowIndex], values));\n\n const handleEditAttribute = useCallback(() => {\n const attributeValue = path([hoverRowIndex], values);\n if (!canEdit) return;\n onEdit(attributeValue);\n }, [onEdit, hoverRowIndex, values, canEdit]);\n\n const handleRemoveAttribute = useCallback(() => {\n const attributeValue = path([hoverRowIndex], values);\n if (!canRemove) return;\n const attribute: AttributeItem = {\n parentUri: entityUri,\n attributeType,\n uri: attributeValue.uri,\n value: attributeValue\n };\n onDeleteAttribute(attribute);\n setHoverRowIndex(null);\n }, [hoverRowIndex, values, onDeleteAttribute, canRemove, attributeType, entityUri]);\n\n const hoveredRowRightContent =\n !hideRightContent && (canRemove || canEdit) ? (\n <EditButtons\n onEdit={canEdit ? handleEditAttribute : undefined}\n onRemove={canRemove ? handleRemoveAttribute : undefined}\n />\n ) : undefined;\n const context = useMemo(() => ({deletedUris}), [deletedUris]);\n return (\n <div className={styles.tableContainer}>\n <BasicTable\n autosizing\n maxHeight={MAX_HEIGHT}\n columnsData={tableColumnsData}\n rowsData={tableRowsData}\n sorting={sorting}\n onSort={onSort}\n filters={filters}\n onFilter={onFilter}\n hoverStateEnabled={true}\n defaultColumnWidth={250}\n defaultColumnMinWidth={200}\n headRowHeight={56}\n resizeDebounceDelay={150}\n renderRowCell={renderRowCell}\n onRowHover={setHoverRowIndex}\n hoverRowIndex={hoverRowIndex}\n hoveredRowRightContent={hoveredRowRightContent}\n context={context}\n classes={{\n hoveredRowRightContentWrapper: styles['row-cell__buttons-wrapper'],\n hoveredRowRightContentContainer: styles['row-cell__buttons-container']\n }}\n />\n </div>\n );\n};\n\nexport default AttributeTable;\n","import {useCallback, useContext, useState, useMemo} from 'react';\nimport {\n createNewAttribute,\n Entity,\n getAttributeSource,\n isEditableMode as checkIsEditableMode,\n NestedAttributeValue,\n AttributeItem,\n isEmptyValue,\n validateComplexAttribute,\n ComplexAttributeValue,\n EntitiesMap,\n evaluateErrorPath,\n getSingleAttributeEntity\n} from '@reltio/mdm-sdk';\nimport {ViewIdContext} from '@reltio/components';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {propEq, pathOr, pipe, map, prop, equals, both, not, without, filter} from 'ramda';\nimport {TableAttributeContext} from '../../../contexts/TableAttributeContext';\nimport {isTempUri, createDefaultValues} from '@reltio/mdm-sdk';\n\nconst emptyArray = [];\n\nexport const useEditableAttribute = () => {\n const [newAttributeUri, setNewAttributeUri] = useState<string>();\n const [originalValues, setOriginalValues] = useState<ComplexAttributeValue[]>([]);\n\n const dispatch = useDispatch();\n const mode = useSelector(mdmModule.selectors.getMode);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n\n const viewId = useContext(ViewIdContext);\n const {attributeType, values} = useContext(TableAttributeContext);\n\n const isEditableMode = checkIsEditableMode(mode);\n const attributeSource = getAttributeSource(attributeType);\n const modifiedEntityValues: NestedAttributeValue[] = pathOr(\n emptyArray,\n [attributeSource, attributeType?.name],\n modifiedEntity\n );\n\n const emptyEditorValue: ComplexAttributeValue = useMemo(\n () =>\n createNewAttribute({\n parentUri: entityUri,\n attributeType\n }),\n [entityUri, attributeType]\n );\n\n const isModifiedEntityValuesEmpty = isEmptyValue(modifiedEntityValues);\n const showEmpty = attributeType.required && isModifiedEntityValuesEmpty;\n const actualValues = useMemo(\n () => (showEmpty ? [emptyEditorValue] : modifiedEntityValues),\n [emptyEditorValue, modifiedEntityValues, showEmpty]\n );\n\n const modifiedValues = useMemo(() => {\n const newValues = actualValues.filter(pipe(prop('uri'), both(isTempUri, pipe(equals(newAttributeUri), not))));\n\n const oldValues = map((originalValue) => actualValues.find(propEq('uri', originalValue.uri)) || originalValue)(\n values\n );\n\n return [...newValues, ...oldValues].map((value) => originalValues.find(propEq('uri', value.uri)) ?? value);\n }, [actualValues, originalValues, newAttributeUri, values]);\n\n const deletedUris = useMemo(\n () =>\n pipe(\n map(prop('uri')),\n filter((uri) => !actualValues.find(propEq('uri', uri)))\n )(isEditableMode ? values : []),\n [actualValues, values, isEditableMode]\n );\n\n const editingValues = actualValues.filter(\n ({uri}) => uri === newAttributeUri || originalValues.find(propEq('uri', uri))\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 const onAdd = useCallback(() => {\n const newAttribute = createNewAttribute({\n parentUri: entityUri,\n attributeType\n });\n setNewAttributeUri(newAttribute.uri);\n onChangeAttribute({\n ...newAttribute,\n value: createDefaultValues({\n attributeTypes: attributeType.attributes,\n parentUri: newAttribute.uri,\n mode,\n metadata\n }),\n attributeType\n });\n }, [entityUri, attributeType, metadata, mode, onChangeAttribute]);\n\n const onStartEditing = useCallback(\n (attributeValue: ComplexAttributeValue) => {\n setOriginalValues((prev) => {\n if (!prev.find(propEq('uri', attributeValue.uri))) {\n return [...prev, attributeValue];\n }\n return prev;\n });\n },\n [setOriginalValues]\n );\n\n const onCancel = useCallback(\n (attributeValue: ComplexAttributeValue) => {\n const editingValueOriginal = originalValues.find(propEq('uri', attributeValue.uri));\n if (editingValueOriginal) {\n const attributeItem = {attributeType, value: editingValueOriginal, uri: attributeValue.uri};\n setOriginalValues((prev) => without([editingValueOriginal], prev));\n if (!isModifiedEntityValuesEmpty) onChangeAttribute(attributeItem);\n } else {\n const attributeItem = {value: attributeValue, attributeType, uri: attributeValue.uri};\n setNewAttributeUri(null);\n onDeleteAttribute(attributeItem);\n }\n dispatch(profile.errors.actions.errorsSet([]));\n },\n [\n onDeleteAttribute,\n onChangeAttribute,\n setOriginalValues,\n isModifiedEntityValuesEmpty,\n originalValues,\n attributeType,\n dispatch\n ]\n );\n\n const validate = useCallback(\n (attributeValue: ComplexAttributeValue, tempEntitiesMap: EntitiesMap) => {\n const errors = validateComplexAttribute(metadata, attributeType, attributeValue, tempEntitiesMap).map(\n (error) => ({\n ...error,\n path: evaluateErrorPath(\n {\n entityUri,\n metadata,\n entitiesMap: tempEntitiesMap || {\n [entityUri]: getSingleAttributeEntity(attributeType, attributeValue)\n }\n },\n error.uri || error.parentUri\n )\n })\n );\n dispatch(profile.errors.actions.errorsSet(errors));\n return errors.length === 0;\n },\n [dispatch, entityUri, attributeType, metadata]\n );\n\n const onApply = useCallback(\n (attributeValue: ComplexAttributeValue, tempEntitiesMap?: EntitiesMap) => {\n if (validate(attributeValue, tempEntitiesMap)) {\n setNewAttributeUri(null);\n setOriginalValues((prev) => {\n const original = prev.find(propEq('uri', attributeValue.uri));\n return original ? without([original], prev) : prev;\n });\n }\n },\n [setOriginalValues, setNewAttributeUri, validate]\n );\n\n const onReset = useCallback(() => {\n setOriginalValues([]);\n setNewAttributeUri(null);\n }, []);\n\n const checkHasChanges = (value: ComplexAttributeValue) => originalValues.find(propEq('uri', value.uri)) !== value;\n\n return {\n checkHasChanges,\n onChangeAttribute,\n onDeleteAttribute,\n onAdd,\n onCancel,\n onApply,\n onStartEditing,\n onReset,\n modifiedValues,\n editingValues,\n deletedUris\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\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}));\n","import React, {useCallback, useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {EditableAttribute, ViewIdContext} from '@reltio/components';\nimport {\n Entity,\n isReference,\n isTempUri,\n getAttributeOwnError,\n getReferencedEntityUriFromAttrValue,\n AttributeItem,\n ComplexAttributeValue,\n EntitiesMap\n} from '@reltio/mdm-sdk';\nimport {Button as Button} from '@material-ui/core';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {useStyles} from './styles';\n\ntype Props = {\n hasChanges: boolean;\n onChangeAttribute: (attribute: AttributeItem) => void;\n onDeleteAttribute: (attribute: AttributeItem) => void;\n onCancel: (attributeValue: ComplexAttributeValue) => void;\n onApply: (attributeValue: ComplexAttributeValue, tempEntitiesMap?: EntitiesMap) => void;\n attributeValue: ComplexAttributeValue;\n};\n\nexport const AttributeEditing = ({\n onChangeAttribute,\n onCancel,\n onApply,\n onDeleteAttribute,\n hasChanges,\n attributeValue\n}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const viewId = useContext(ViewIdContext);\n const {attributeType} = useContext(TableAttributeContext);\n\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const mode = useSelector(mdmModule.selectors.getMode);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n const shouldConnectAllModifiedEntities =\n isReference(attributeType) && isTempUri(getReferencedEntityUriFromAttrValue(attributeValue));\n const allModifiedEntities = useSelector((state) =>\n shouldConnectAllModifiedEntities ? mdmModule.selectors.getModifiedEntities(state) : undefined\n );\n const errors = useSelector((state) =>\n mdmModule.selectors.getActiveErrorsForAttributesPager(state, entityUri, attributeType)\n );\n\n const showEmptyEditors = isTempUri(entityUri);\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 onDeactivateError = useCallback(pipe(profile.errors.actions.errorDeactivated, dispatch), [dispatch]);\n\n return (\n <>\n <EditableAttribute\n expanded\n attributeValue={attributeValue}\n showEmptyEditors={showEmptyEditors}\n onDeleteAttribute={onDeleteAttribute}\n onDeactivateError={onDeactivateError}\n onChangeAttribute={onChangeAttribute}\n onAddAttributes={onAddAttributes}\n mode={mode}\n crosswalks={modifiedEntity.crosswalks}\n errors={errors}\n attributeType={attributeType}\n ownError={getAttributeOwnError(attributeValue, null, attributeType.uri, errors)}\n />\n <div className={styles.actionButtons}>\n <Button onClick={() => onCancel(attributeValue)}>{i18n.text('Cancel')}</Button>\n <Button\n color=\"primary\"\n disabled={!hasChanges}\n onClick={() => onApply(attributeValue, allModifiedEntities)}\n >\n {i18n.text('Apply')}\n </Button>\n </div>\n </>\n );\n};\n","import {useEffect, useContext, useMemo, useRef} from 'react';\nimport {pipe, prop, curry, both, map, reject, isNil, forEach, either, equals} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n areOneHierarchyUris,\n AttributeError,\n ComplexAttributeValue,\n ErrorType,\n isAttributeTypeError\n} from '@reltio/mdm-sdk';\nimport {useActionsHook} from '@reltio/components';\nimport {TableAttributeContext} from '../../../contexts/TableAttributeContext';\n\ntype Props = {\n onStartEditing: (value: ComplexAttributeValue) => void;\n modifiedValues: ComplexAttributeValue[];\n highlightedError: AttributeError;\n highlightedAttributeError: AttributeError;\n};\n\nconst isMissedTypeError = (error: AttributeError) => error?.type === ErrorType.missed;\n\nconst findAttributeValueByError = curry((values: ComplexAttributeValue[], error: AttributeError) =>\n values.find(pipe(prop('uri'), either(areOneHierarchyUris(error.parentUri), equals(error.uri))))\n);\n\nexport const useExpandAttributes = ({\n onStartEditing,\n modifiedValues,\n highlightedError,\n highlightedAttributeError\n}: Props) => {\n const {attributeType} = useContext(TableAttributeContext);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const errors = useSelector((state) =>\n mdmModule.selectors.getActiveErrorsForAttributesPager(state, entityUri, attributeType)\n );\n\n const shouldOpenInvalidEditors = useRef(true);\n const listenToActions = useActionsHook();\n\n const missedAttributeError = useMemo(\n () =>\n errors.find(both(isMissedTypeError, (error) => isAttributeTypeError(error, entityUri, attributeType.uri))),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [errors, entityUri, attributeType.uri]\n );\n\n useEffect(() => {\n if (missedAttributeError && modifiedValues.length === 1) {\n onStartEditing(modifiedValues[0]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [missedAttributeError]);\n\n useEffect(() => {\n if (shouldOpenInvalidEditors.current && errors.length) {\n pipe(map(findAttributeValueByError(modifiedValues)), reject(isNil), forEach(onStartEditing))(errors);\n shouldOpenInvalidEditors.current = false;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [errors]);\n\n useEffect(() => {\n if (isMissedTypeError(highlightedError) && modifiedValues.length === 1) {\n onStartEditing(modifiedValues[0]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [highlightedError]);\n\n useEffect(() => {\n if (highlightedAttributeError) {\n const attributeValue = findAttributeValueByError(modifiedValues, highlightedAttributeError);\n if (attributeValue) onStartEditing(attributeValue);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [highlightedAttributeError]);\n\n useEffect(() => {\n const stopListeningActions = listenToActions((action) => {\n if (action.type === profile.constants.ProfileActions.SAVE_PROFILE) {\n shouldOpenInvalidEditors.current = true;\n }\n });\n return () => stopListeningActions();\n }, [listenToActions]);\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n addButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n editor: {\n padding: '4px 16px'\n }\n}));\n","import React, {useContext, useEffect} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {\n AttributeError,\n AttributeItem,\n checkCanCreateAttribute,\n ComplexAttributeValue,\n EntitiesMap,\n TableAttributeViewConfig\n} from '@reltio/mdm-sdk';\nimport {useConfigPermissions} from '@reltio/components';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {AttributeEditing} from '../AttributeEditing/AttributeEditing';\nimport {useExpandAttributes} from './hooks/useExpandAttributes';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: TableAttributeViewConfig;\n editingValues: ComplexAttributeValue[];\n modifiedValues: ComplexAttributeValue[];\n onChangeAttribute: (item: AttributeItem) => void;\n onDeleteAttribute: (item: AttributeItem) => void;\n onAdd: () => void;\n onCancel: (value: ComplexAttributeValue) => void;\n onApply: (value: ComplexAttributeValue, tempEntitiesMap?: EntitiesMap) => void;\n onReset: () => void;\n onStartEditing: (value: ComplexAttributeValue) => void;\n checkHasChanges: (value: ComplexAttributeValue) => boolean;\n highlightedError: AttributeError;\n highlightedAttributeError: AttributeError;\n};\n\nexport const TableAttributeEditableContent = ({\n config,\n editingValues,\n modifiedValues,\n onChangeAttribute,\n onDeleteAttribute,\n onAdd,\n onCancel,\n onApply,\n onStartEditing,\n onReset,\n checkHasChanges,\n highlightedError,\n highlightedAttributeError\n}: Props) => {\n const styles = useStyles();\n\n const {attributeType} = useContext(TableAttributeContext);\n const mode = useSelector(mdmModule.selectors.getMode);\n\n const {canCreate: hasConfigToCreate} = useConfigPermissions();\n useExpandAttributes({onStartEditing, modifiedValues, highlightedError, highlightedAttributeError});\n\n const canCreate =\n hasConfigToCreate(config) &&\n attributeType &&\n checkCanCreateAttribute({attributeType, mode}) &&\n !editingValues.length;\n\n useEffect(() => {\n return () => onReset();\n }, [onReset]);\n\n return (\n <div className={styles.editor}>\n {canCreate && (\n <Button color=\"primary\" onClick={onAdd} className={styles.addButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {editingValues.map((value) => (\n <AttributeEditing\n key={value.uri}\n attributeValue={value}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onDeleteAttribute}\n onCancel={onCancel}\n onApply={onApply}\n hasChanges={checkHasChanges(value)}\n />\n ))}\n </div>\n );\n};\n","import React, {useContext, useMemo} from 'react';\nimport {propEq} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n AttributeType,\n isAttributeTypeError as checkIsAttributeTypeError,\n isPartOfErrorAttributeTypeUri,\n isPartOfErrorParentUri,\n TableAttributeViewConfig\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {ScrollToErrorContext, useScrollToAttributeError, withContext} from '@reltio/components';\nimport AttributeTable from '../AttributeTable/AttributeTable';\nimport {useEditableAttribute} from './hooks/useEditableAttribute';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {TableAttributeEditableContent} from '../TableAttributeEditableContent/TableAttributeEditableContent';\n\ntype HighlightedError = React.ContextType<typeof ScrollToErrorContext>;\n\ntype Props = {\n config: TableAttributeViewConfig;\n entityUri: string;\n attributeType: AttributeType;\n highlightedError?: HighlightedError;\n highlightedAttributeError?: HighlightedError;\n};\n\nexport const TableAttributeContent = ({config, highlightedError, highlightedAttributeError}: Props) => {\n const isEditableMode = useSelector(mdmModule.selectors.getIsEditableMode);\n\n const {values, visibleColumns, onFilter, onSort, filters, sorting, allColumnsData} =\n useContext(TableAttributeContext);\n\n const {\n onDeleteAttribute,\n onStartEditing,\n onChangeAttribute,\n onAdd,\n onCancel,\n onApply,\n onReset,\n checkHasChanges,\n modifiedValues,\n editingValues,\n deletedUris\n } = useEditableAttribute();\n const {ref, errorClassName} = useScrollToAttributeError({highlightedError, isSimple: true});\n\n const preparedValues = isEditableMode ? modifiedValues : values;\n\n const visibleColumnsData = useMemo(\n () => visibleColumns.map((id) => allColumnsData.find(propEq('id', id))),\n [visibleColumns, allColumnsData]\n );\n\n return (\n <div ref={ref} className={errorClassName}>\n {isEditableMode && (\n <TableAttributeEditableContent\n config={config}\n editingValues={editingValues}\n modifiedValues={modifiedValues}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onDeleteAttribute}\n onAdd={onAdd}\n onReset={onReset}\n onCancel={onCancel}\n onApply={onApply}\n onStartEditing={onStartEditing}\n checkHasChanges={checkHasChanges}\n highlightedError={highlightedError?.error}\n highlightedAttributeError={highlightedAttributeError?.error}\n />\n )}\n {visibleColumnsData.length > 0 && (\n <AttributeTable\n columnsData={visibleColumnsData}\n config={config}\n values={preparedValues}\n filters={filters}\n onFilter={onFilter}\n sorting={sorting}\n onSort={onSort}\n onEdit={onStartEditing}\n onDeleteAttribute={onDeleteAttribute}\n deletedUris={deletedUris}\n />\n )}\n </div>\n );\n};\n\nexport default withContext(\n ScrollToErrorContext,\n (contextValue, {entityUri, attributeType}) => {\n const {error} = contextValue || {};\n\n const isAttributeTypeError = checkIsAttributeTypeError(error, entityUri, attributeType.uri);\n const isAttributeError =\n error &&\n !isAttributeTypeError &&\n isPartOfErrorAttributeTypeUri(attributeType, error) &&\n isPartOfErrorParentUri(entityUri, error);\n\n const highlightedError = isAttributeTypeError ? contextValue : null;\n const highlightedAttributeError = isAttributeError ? contextValue : null;\n return {highlightedError, highlightedAttributeError};\n },\n TableAttributeContent\n);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n overflow: 'hidden'\n },\n noData: {\n fontSize: '13px',\n paddingLeft: '20px',\n color: 'rgba(0,0,0,0.54)'\n },\n header: {\n padding: '0 4px 0 16px'\n }\n}));\n","import React, {useContext} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport {\n BasicView,\n FacetViewHeader,\n DescriptionIcon,\n LinearLoadIndicator,\n BasicTablePagination\n} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {TableAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {Typography as Typography} from '@material-ui/core';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport AttributeTableHeader from '../AttributeTableHeader/AttributeTableHeader';\nimport TableAttributeContent from '../TableAttributeContent/TableAttributeContent';\nimport {useStyles} from './styles';\n\nconst DEFAULT_ROWS_PER_PAGE = 15;\n\ntype Props = {\n config: TableAttributeViewConfig;\n className?: string;\n};\n\nexport const TableAttributeView = ({config, className}: Props) => {\n const {caption, max = DEFAULT_ROWS_PER_PAGE} = config;\n\n const styles = useStyles();\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const {totalVisibleValues, attributeType, showTable, hasPaging, isLoading, page, setPage} =\n useContext(TableAttributeContext);\n\n return (\n <BasicView className={classnames(styles.root, className)}>\n {showTable ? (\n <>\n <AttributeTableHeader title={caption} />\n <div className={styles.content}>\n <TableAttributeContent config={config} attributeType={attributeType} entityUri={entityUri} />\n {hasPaging && (\n <BasicTablePagination\n count={totalVisibleValues}\n rowsPerPageOptions={[]}\n rowsPerPage={max}\n page={page}\n onChangePage={setPage}\n />\n )}\n {isLoading && <LinearLoadIndicator />}\n </div>\n </>\n ) : (\n <>\n <FacetViewHeader title={caption} className={styles.header}>\n <DescriptionIcon description={attributeType?.description} />\n </FacetViewHeader>\n <Typography className={styles.noData}>{i18n.text('No data')}</Typography>\n </>\n )}\n </BasicView>\n );\n};\n","import {useEffect, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {pick, prop} from 'ramda';\nimport {Entity, getPathsTree, getRequestErrorMessage, isTempUri, updateTreesWithNewEntity} from '@reltio/mdm-sdk';\nimport {useDidUpdateEffect, useSafePromise} from '@reltio/components';\nimport {Response, Node} from '../types';\n\nlet nodeCounter = 0;\nexport const generateId = () => nodeCounter++;\n\nconst processResponse = (response: Response) => {\n const fakeRoot = {\n children: [] as Node[],\n nodeId: generateId()\n };\n if (response.parentPaths) {\n for (let i = 0; i < response.parentPaths.length; i++) {\n const path = response.parentPaths[i];\n let nextRoot = fakeRoot;\n for (let j = path.length - 1; j >= 0; j--) {\n const nextParent = path[j];\n const entity = response.entities[nextParent.entityUri];\n const isRoot = j === path.length - 1;\n const node: Node = {\n entity,\n children: [],\n nodeId: generateId(),\n expanded: true,\n rootIndex: isRoot ? i + 1 : undefined\n };\n if (isRoot) {\n node.root = isRoot;\n }\n nextRoot.children.push(node);\n nextRoot = node;\n }\n }\n }\n return fakeRoot.children;\n};\nexport const useLoadPaths = (entityUri: string, graphUri: string) => {\n const safePromise = useSafePromise();\n const [treeData, setTreeData] = useState<Node[]>([]);\n const [errorMessage, setErrorMessage] = useState<string>(null);\n const entity: Entity = useSelector(mdmModule.selectors.getEntity);\n useDidUpdateEffect(() => {\n const forest = treeData\n .map((tree, index) => ({tree, index}))\n .reduce((acc, tree) => ({...acc, [tree.index]: {root: tree.tree}}), {});\n const newTrees = updateTreesWithNewEntity(pick(['uri', 'label', 'secondaryLabel', 'type'], entity), forest);\n setTreeData(newTrees.map(prop('root')));\n }, [entity?.updatedTime]);\n useEffect(() => {\n if (!isTempUri(entityUri)) {\n setErrorMessage(null);\n safePromise(getPathsTree({uri: entityUri, graphUri}))\n .then(processResponse)\n .then(setTreeData)\n .catch((e) => {\n console.warn(e);\n setErrorMessage(getRequestErrorMessage(e, i18n.text('Something went wrong')));\n });\n }\n return () => {\n setTreeData([]);\n };\n }, [entityUri, graphUri, safePromise]);\n return {treeData, setTreeData, errorMessage};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n fontSize: '13px',\n display: 'flex',\n paddingTop: '6px',\n position: 'relative'\n },\n title: {\n flexGrow: 1,\n minHeight: '15px',\n color: theme.palette.primary.main,\n lineHeight: '15px'\n },\n wrapper: {\n width: '100%'\n },\n avatar: {\n height: '16px',\n width: '16px',\n marginRight: '8px',\n marginLeft: '8px'\n },\n header: {\n padding: '0 4px 0 16px'\n },\n treeContainer: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n minHeight: '372px',\n maxHeight: '507px',\n overflow: 'auto'\n },\n tree: {\n flexGrow: 1,\n height: 0\n },\n buttonsContainer: {\n flexShrink: 0,\n marginLeft: 'auto',\n '& > * + *': {\n marginLeft: '-4px'\n }\n },\n button: {\n padding: '8px'\n },\n errorMessage: {\n fontSize: '13px',\n margin: '0 16px 0',\n lineHeight: '1.4',\n color: theme.palette.text.secondary\n }\n}));\n","import React from 'react';\nimport {HierarchyPathsViewConfig} from '@reltio/mdm-sdk';\n\nexport const ConfigContext = React.createContext<HierarchyPathsViewConfig>(null);\n","import React, {memo, useContext, useState} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {HierarchyNodeTitle} from '@reltio/components';\nimport {getAbsoluteImageUrl, getEntityType, getPropWithInheritance} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {Avatar as Avatar} from '@material-ui/core';\nimport {useStyles} from './styles';\nimport DEFAULT_ICON from './defaultTypeIcon.png';\nimport {ConfigContext} from './ConfigContext';\nimport {Node as NodeType} from './types';\n\nconst onImageLoadFail = (e) => {\n e.target.src = DEFAULT_ICON;\n};\n\ntype Props = {\n node?: NodeType;\n};\n\nexport const Node = ({node}: Props) => {\n const {\n entity: {label: title, uri},\n nodeId\n } = node;\n\n const styles = useStyles();\n const absoluteImagePath = useSelector(mdm.selectors.getAbsoluteImagePath);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const {uri: currentEntityUri} = useSelector(mdm.selectors.getEntity);\n\n const [popperAnchor, setPopperAnchor] = useState<HTMLElement>();\n const config = useContext(ConfigContext);\n\n const isSelected = uri === currentEntityUri;\n const entityType = getEntityType(metadata, node.entity.type) || {};\n const entityTypeGraphIcon = getPropWithInheritance(metadata, entityType, 'typeGraphIcon');\n const icon = entityTypeGraphIcon && getAbsoluteImageUrl(absoluteImagePath, entityTypeGraphIcon);\n\n return (\n <div className={styles.wrapper} data-node-id={nodeId}>\n <div ref={setPopperAnchor} className={styles.container}>\n <Avatar\n alt=\"Node icon\"\n className={classnames(styles.avatar)}\n src={icon || DEFAULT_ICON}\n onError={onImageLoadFail}\n />\n <HierarchyNodeTitle\n isSelected={isSelected}\n title={title}\n entityUri={uri}\n viewId={config.id}\n anchorEl={popperAnchor}\n />\n </div>\n </div>\n );\n};\n\nexport default memo(Node);\n","import {Node} from './types';\n\nexport const getNodeKey = ({node}: {node: Node}) => node.nodeId;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {theme as treeTheme} from '../theme';\n\nexport const useStyles = makeStyles(() => ({\n lineBlock: {\n height: '100%',\n position: 'relative',\n display: 'inline-block'\n },\n lineChildren: {\n height: '100%',\n position: 'absolute',\n display: 'inline-block',\n '&:after': {\n content: \"''\",\n position: 'absolute',\n backgroundColor: 'rgba(0,122,193,0.3)',\n width: '1px',\n left: '50%',\n bottom: '0',\n height: `calc(100% - ${treeTheme.rowHeight}px)`\n }\n },\n rootIndex: {\n display: 'flex',\n alignItems: 'center',\n color: 'rgba(0,0,0,0.54)',\n height: '100%'\n },\n verticalLine: {\n width: '1px',\n left: 'calc(50% - 1px)',\n top: 0,\n height: `${treeTheme.rowHeight / 2}px`,\n position: 'absolute',\n backgroundColor: 'rgba(0,122,193,0.3)'\n },\n horizontalLineRight: {\n height: '1px',\n top: `${treeTheme.rowHeight / 2}px`,\n left: 'calc(50% - 1px)',\n width: '24%',\n position: 'absolute',\n backgroundColor: 'rgba(0,122,193,0.3)'\n },\n node: {\n minWidth: '100%',\n position: 'relative',\n textAlign: 'left',\n padding: '0 24px 0 18px',\n boxSizing: 'border-box',\n whiteSpace: 'normal',\n '&:hover': {\n backgroundColor: 'rgba(0,0,0,0.06)'\n }\n },\n nodeContent: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n paddingLeft: '18px',\n boxSizing: 'border-box'\n },\n row: {\n display: 'flex'\n },\n rowContents: {\n position: 'relative',\n borderLeft: 'none',\n paddingLeft: '4px',\n flex: '1 1 auto',\n width: 0,\n display: 'flex',\n verticalAlign: 'middle',\n boxSizing: 'border-box'\n },\n buttonWrapper: {\n display: 'flex',\n paddingTop: '13px',\n width: '12px',\n cursor: 'pointer'\n },\n collapsedButton: {\n transform: 'rotate(-90deg)'\n },\n expandedButton: {\n transform: 'rotate(0deg)'\n },\n button: {\n transition: 'transform .15s ease',\n width: 0,\n height: 0,\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n borderTop: '4px solid rgba(0, 0, 0, 0.54)'\n },\n rowTitle: {\n flex: '1 1 auto',\n width: 0,\n paddingRight: '11px'\n }\n}));\n","import React from 'react';\nimport {useStyles} from './styles';\nimport classnames from 'classnames';\nimport {omit} from 'ramda';\nimport {Node} from '../types';\n\ntype Props = {\n treeIndex: number;\n scaffoldBlockPxWidth: number;\n node: Node;\n path: Array<string | number>;\n style?: Record<string, unknown>;\n title: React.ReactElement;\n toggleChildrenVisibility: (props) => void;\n};\n\nconst NodeRendererDefault = (props: Props) => {\n const {scaffoldBlockPxWidth, toggleChildrenVisibility, node, title, path, treeIndex, style, ...otherProps} = omit(\n [\n 'connectDragPreview',\n 'connectDragSource',\n 'isDragging',\n 'canDrop',\n 'canDrag',\n 'draggedNode',\n 'isSearchMatch',\n 'isSearchFocus',\n 'buttons',\n 'didDrop',\n 'children',\n 'treeId',\n 'isOver',\n 'parentNode',\n 'rowDirection'\n ],\n props\n );\n const nodeTitle = title;\n\n const showToggleChildrenButton =\n toggleChildrenVisibility && !node.root && node.children && node.children.length > 0;\n\n const onToggle = () => {\n toggleChildrenVisibility({\n node,\n path,\n treeIndex\n });\n };\n const styles = useStyles();\n return (\n <div style={{height: '100%'}} {...otherProps} key={node.nodeId}>\n {showToggleChildrenButton && node.expanded && (\n <div style={{width: scaffoldBlockPxWidth - 2}} className={styles.lineChildren} />\n )}\n <div className={styles.row} style={style}>\n <div className={styles.rowContents}>\n {showToggleChildrenButton && (\n <div className={styles.buttonWrapper} onClick={onToggle}>\n <div\n aria-label={node.expanded ? 'Collapse' : 'Expand'}\n className={classnames(\n styles.button,\n node.expanded ? styles.expandedButton : styles.collapsedButton\n )}\n />\n </div>\n )}\n <div className={styles.rowTitle}>\n {typeof nodeTitle === 'function'\n ? nodeTitle({\n node,\n path,\n treeIndex\n })\n : nodeTitle}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default NodeRendererDefault;\n","import treeNodeRenderer from './tree-node-data-renderer';\nimport nodeContentRenderer from './node-content-renderer';\n\nconst scaffoldBlockPxWidth = 16;\nconst rowHeight = 28;\nconst slideRegionSize = 50;\n\nexport const theme = {nodeContentRenderer, treeNodeRenderer, scaffoldBlockPxWidth, rowHeight, slideRegionSize};\n","import React from 'react';\nimport {useStyles} from './styles';\nimport {omit} from 'ramda';\nimport {Node} from '../types';\n\nconst MIN_NODE_CONTENT_WIDTH = 250;\n\ntype Props = {\n scaffoldBlockPxWidth: number;\n lowerSiblingCounts: number[];\n\n node: Node;\n children: React.ReactElement;\n style?: Record<string, unknown>;\n};\n\nconst TreeNode = (props: Props) => {\n const {children, scaffoldBlockPxWidth, lowerSiblingCounts, node, ...otherProps} = omit(\n [\n 'listIndex',\n 'swapFrom',\n 'swapLength',\n 'swapDepth',\n 'draggedNode',\n 'getPrevRow',\n 'connectDropTarget',\n 'isOver',\n 'canDrop',\n 'treeIndex',\n 'treeId',\n 'path',\n 'rowDirection'\n ],\n props\n );\n const styles = useStyles();\n // Construct the scaffold representing the structure of the tree\n const scaffoldBlockCount = lowerSiblingCounts.length;\n const scaffold = [];\n lowerSiblingCounts.forEach((lowerSiblingCount, i) => {\n scaffold.push(\n <div key={`pre_${1 + i}`} style={{width: scaffoldBlockPxWidth}} className={styles.lineBlock}>\n {node.root && <div className={styles.rootIndex}>{node.rootIndex}.</div>}\n {i === scaffoldBlockCount - 1 && i !== 0 && (\n <>\n <div className={styles.verticalLine} />\n <div className={styles.horizontalLineRight} />\n </>\n )}\n </div>\n );\n });\n\n const shift = node.root ? scaffoldBlockPxWidth - 4 : 0; //4px - shifting for rootIndex\n const scaffoldWidth = scaffoldBlockPxWidth * scaffoldBlockCount - shift;\n const style = {left: scaffoldWidth, width: `calc(100% - ${scaffoldWidth}px`};\n const width = `${scaffoldWidth + MIN_NODE_CONTENT_WIDTH}px`;\n const nodeStyle = {...otherProps.style, width};\n return (\n <div {...otherProps} className={styles.node} style={nodeStyle}>\n {scaffold}\n\n <div className={styles.nodeContent} style={style}>\n {children}\n </div>\n </div>\n );\n};\n\nexport default TreeNode;\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: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\",\n fillOpacity: \".54\"\n}, React.createElement(\"path\", {\n d: \"M14.5 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm4 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm-17 1a1.5 1.5 0 110-3 1.5 1.5 0 010 3zM4 4a2 2 0 110-4 2 2 0 010 4zm1 16a2 2 0 110-4 2 2 0 010 4zm4.5-6a4.5 4.5 0 110-9 4.5 4.5 0 010 9zm0-2a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm6 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3z\",\n fill: \"#000\"\n}))));","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {FacetViewHeader, FeaturesContext, SmallIconButtonWithTooltip} from '@reltio/components';\nimport ShowGraphIcon from './icons/ShowGraph.svg';\nimport {useStyles} from './styles';\n\ntype Props = {\n title?: string;\n onGraphOpen: () => void;\n};\n\nconst HierarchyPathsHeader = ({title, onGraphOpen}: Props) => {\n const styles = useStyles();\n const {showNavigateToGraph} = useContext(FeaturesContext);\n return (\n <FacetViewHeader title={title} className={styles.header}>\n {showNavigateToGraph && (\n <div className={styles.buttonsContainer}>\n <SmallIconButtonWithTooltip\n className={styles.button}\n tooltipTitle={i18n.text('Show Graph')}\n icon={ShowGraphIcon}\n onClick={onGraphOpen}\n size=\"L\"\n />\n </div>\n )}\n </FacetViewHeader>\n );\n};\n\nexport default HierarchyPathsHeader;\n","import {useCallback, useState} from 'react';\nimport {assoc} from 'ramda';\n\nimport {theme} from '../theme';\nimport {Node} from '../types';\nimport {getNodeKey} from '../helpers';\n\ntype HeightsCache = {[nodeId: Node['nodeId']]: number};\n\nconst getCacheKey = (node: Node) => getNodeKey({node});\n\nexport const useDynamicNodesHeights = () => {\n const [heightsCache, setHeightsCache] = useState<HeightsCache>({});\n const clearHeightsCache = useCallback(() => {\n setHeightsCache({});\n }, []);\n const onResize = useCallback(\n (node: Node) => (_, height) => {\n setHeightsCache((prevCache) =>\n prevCache[getCacheKey(node)] !== height ? assoc(getCacheKey(node), height, prevCache) : prevCache\n );\n },\n []\n );\n const getRowHeight = useCallback(\n ({node}: {node: Node}): number =>\n heightsCache[getCacheKey(node)]\n ? Math.max(heightsCache[getCacheKey(node)], theme.rowHeight)\n : theme.rowHeight,\n [heightsCache]\n );\n return {onResize, getRowHeight, clearHeightsCache};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n position: 'relative'\n },\n bodyWrapper: {\n paddingTop: '21px'\n }\n}));\n","import React, {useRef, useEffect, useState} from 'react';\nimport {useAPI} from '@reltio/components';\nimport {CustomActionViewConfig} from '@reltio/mdm-sdk';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {Dialog as Dialog} from '@material-ui/core';\nimport {isNil, reject} from 'ramda';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: CustomActionViewConfig;\n className?: string;\n};\n\nexport const CustomView = ({config, className}: Props) => {\n const basicViewRef = useRef<HTMLDivElement>();\n const dialogRef = useRef<HTMLDivElement>();\n const [showModal, setShowModal] = useState<boolean>(false);\n const {height, width, tooltip: defaultTooltip} = config;\n const {html, visible, tooltip: updatedTooltip, customStyles, popup} = useAPI(config);\n const styles = useStyles();\n const tooltip = updatedTooltip || defaultTooltip;\n useEffect(() => {\n if (basicViewRef.current && html) {\n basicViewRef.current.innerHTML = '';\n Array.from(html.childNodes).forEach((child) => {\n basicViewRef.current.appendChild(child);\n });\n }\n }, [html]);\n useEffect(() => {\n setShowModal(!!popup);\n }, [popup]);\n\n useEffect(() => {\n if (showModal && dialogRef.current) {\n dialogRef.current.innerHTML = '';\n if (popup) {\n Array.from(popup.childNodes).forEach((child) => {\n dialogRef.current.appendChild(child);\n });\n }\n }\n }, [showModal, popup]);\n\n const style: {width?: number; height?: number} = reject(isNil, {width, height});\n return visible ? (\n <div className={styles.bodyWrapper}>\n <Dialog ref={dialogRef} open={!!popup} />\n <Tooltip title={tooltip || ''}>\n <div\n ref={basicViewRef}\n style={{...style, ...customStyles}}\n className={classnames(styles.root, className)}\n />\n </Tooltip>\n </div>\n ) : null;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n dragHandleContainer: {\n position: 'relative',\n width: '100%',\n height: 'inherit'\n },\n dragHandleVisibilityArea: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '24px',\n zIndex: 11,\n '&:hover $dragHandle': {\n visibility: 'visible'\n },\n '.react-grid-item.static &:hover $dragHandle': {\n visibility: 'hidden'\n }\n },\n dragHandle: {\n position: 'absolute',\n width: '100%',\n display: 'flex',\n justifyContent: 'center',\n top: '-3px',\n zIndex: 11,\n cursor: 'move',\n visibility: 'hidden'\n },\n dragIcon: {\n transform: 'translateX(-50%) rotate(90deg)',\n color: 'rgba(0, 0, 0, 0.3)'\n }\n});\n","import React, {ComponentType} from 'react';\nimport classnames from 'classnames';\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\n\nimport {useStyles} from './styles';\n\nconst withDragHandle = <P extends Record<string, unknown>>(Component: ComponentType<P>) => {\n const WithDragHandle = (props: P) => {\n const styles = useStyles();\n return (\n <div className={styles.dragHandleContainer}>\n <div className={styles.dragHandleVisibilityArea}>\n <div className={classnames('viewDraggableHandle', styles.dragHandle)}>\n <DragIndicatorIcon className={styles.dragIcon} />\n </div>\n </div>\n <Component {...props} />\n </div>\n );\n };\n\n WithDragHandle.displayName = 'WithDragHandle';\n return WithDragHandle;\n};\n\nexport default withDragHandle;\n","import React, {ComponentType} from 'react';\nimport i18n from 'ui-i18n';\nimport {EMPTY_STATE_ICONS, EMPTY_STATE_VARIANTS, EmptyState, ErrorBoundary} from '@reltio/components';\n\nconst withErrorBoundary = <P extends Record<string, unknown>>(Component: ComponentType<P>) => {\n const WithErrorBoundary = (props: P) => {\n return (\n <ErrorBoundary\n error={\n <EmptyState\n LogoRenderer={EMPTY_STATE_ICONS.ERROR}\n text=\"\"\n secondaryText={i18n.text('Something went wrong')}\n variant={EMPTY_STATE_VARIANTS.small}\n />\n }\n >\n <Component {...props} />\n </ErrorBoundary>\n );\n };\n\n WithErrorBoundary.displayName = 'WithErrorBoundary';\n return WithErrorBoundary;\n};\n\nexport default withErrorBoundary;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n stubView: {\n padding: '20px'\n },\n fullHeight: {\n height: '100%'\n },\n component: {\n boxSizing: 'border-box',\n overflow: 'auto',\n boxShadow: 'none',\n borderRadius: 'unset'\n }\n});\n","import {useEffect, useState} from 'react';\nimport {both, gt, lt, path, pipe} from 'ramda';\nimport {Entity, GeoPoint, Metadata, resolve} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '@reltio/components';\n\nconst filterWrongLat = pipe(path(['point', 'lat']), both(gt(90), lt(-90)));\n\nexport const useMarkers = (entity: Entity, metadata: Metadata, mapKey: string) => {\n const [markers, setMarkers] = useState<GeoPoint[]>([]);\n const [loading, setLoading] = useState(true);\n const safePromise = useSafePromise();\n useEffect(() => {\n setLoading(true);\n safePromise(resolve(metadata, [entity], mapKey))\n .then((markers) => {\n setMarkers(markers.filter(filterWrongLat));\n })\n .catch(() => {\n setMarkers([]);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [entity, metadata, mapKey, safePromise]);\n\n return {markers, loading};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles(() => ({\n root: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column'\n },\n fullHeight: {\n height: '100%'\n },\n fullscreenBtn: {\n position: 'absolute',\n right: '5px',\n top: '5px',\n zIndex: 100\n }\n}));\n\nexport default useStyles;\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n caption: {\n color: theme.palette.text.secondary,\n fontSize: '13px'\n }\n}));\n\nexport default useStyles;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport useStyles from './styles';\n\ntype ImageLineCaptionProps = {\n totalImages: number;\n};\n\nexport const ImageLineCaption = ({totalImages}: ImageLineCaptionProps) => {\n const styles = useStyles();\n const photoWord = totalImages > 1 ? i18n.text('photos') : i18n.text('photo');\n return (\n <Typography variant=\"caption\" className={styles.caption}>\n {`${totalImages} ${photoWord}`}\n </Typography>\n );\n};\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pipe, pathOr} from 'ramda';\nimport {EditableImageAttributesLine} from '@reltio/components';\nimport {AttributeType, Entity, Paging, AttributeItem, ImageAttributeViewConfig} from '@reltio/mdm-sdk';\nimport mdmModule, {profile, RequestNextPageOfAttributeValuesPayload} from '@reltio/mdm-module';\nimport {IMAGE_SIZE} from '../ImageAttributeView';\nimport {ImageLineCaption} from '../ImageLineCaption/ImageLineCaption';\n\ntype ImageAttributeViewEditableContentProps = {\n config: ImageAttributeViewConfig;\n attributeType: AttributeType;\n paging?: Paging;\n requestNextPageOfAttributeValues?: (payload: RequestNextPageOfAttributeValuesPayload) => void;\n};\n\nexport const ImageAttributeViewEditableContent = ({\n config,\n attributeType,\n paging,\n requestNextPageOfAttributeValues\n}: ImageAttributeViewEditableContentProps) => {\n const dispatch = useDispatch();\n const entity = useSelector(mdmModule.selectors.getEntity);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entity.uri) || ({} as Entity)\n );\n const modifiedEntityValues = pathOr([], ['attributes', attributeType.name], modifiedEntity);\n const viewId = config.id;\n\n const onChangeAttribute = (params: AttributeItem) =>\n pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId});\n\n const onDeleteAttribute = (params: AttributeItem) =>\n pipe(profile.actions.removeAttribute, dispatch)({...params, viewId});\n\n return (\n <>\n <EditableImageAttributesLine\n attributeValues={modifiedEntityValues}\n attributeType={attributeType}\n onDeleteAttribute={onDeleteAttribute}\n parentUri={modifiedEntity.uri}\n onChangeAttribute={onChangeAttribute}\n imageSize={IMAGE_SIZE}\n paging={paging}\n requestNextPageOfAttributeValues={requestNextPageOfAttributeValues}\n />\n <ImageLineCaption totalImages={modifiedEntityValues.length} />\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n padding: '8px 16px'\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary\n }\n}));\n\nexport default useStyles;\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pathOr, path} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport {BasicView, DescriptionIcon, FacetViewHeader, ImageAttributesLine} from '@reltio/components';\nimport {findAttributeTypeByUri, isEditableMode, ImageAttributeViewConfig} from '@reltio/mdm-sdk';\nimport mdmModule, {profile, RequestNextPageOfAttributeValuesPayload} from '@reltio/mdm-module';\nimport {ImageAttributeViewEditableContent} from './ImageAttributeViewEditableContent/ImageAttributeViewEditableContent';\nimport {ImageLineCaption} from './ImageLineCaption/ImageLineCaption';\nimport useStyles from './styles';\n\ntype ImageAttributeViewProps = {\n config: ImageAttributeViewConfig;\n className?: string;\n};\n\nexport const IMAGE_SIZE = {\n imageMargin: 4,\n imageWidth: 162,\n imageHeight: 162\n};\n\nexport const ImageAttributeView = ({config, className}: ImageAttributeViewProps) => {\n const {attributeUri} = config;\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const mode = useSelector(mdmModule.selectors.getMode);\n const entity = useSelector(mdmModule.selectors.getEntityWithDiff);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n\n const attributeType = findAttributeTypeByUri(metadata, attributeUri);\n const entityValues = pathOr([], ['attributes', attributeType?.name], entity);\n const paging = path(['attributes', 'paging', attributeUri], entity);\n const totalValues = entityValues.length;\n\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n const requestNextPageOfAttributeValues = useCallback(\n (payload: RequestNextPageOfAttributeValuesPayload) =>\n dispatch(profile.actions.requestNextPageOfAttributeValues(payload)),\n [dispatch]\n );\n\n const renderContent = () => {\n if (attributeType) {\n if (isEditableMode(mode)) {\n const props = {\n attributeType,\n config,\n paging,\n requestNextPageOfAttributeValues\n };\n return <ImageAttributeViewEditableContent {...props} />;\n }\n if (totalValues > 0) {\n const props = {\n attributeValues: entityValues,\n attributeType,\n imageSize: IMAGE_SIZE,\n paging,\n parentUri: entity.uri,\n requestNextPageOfAttributeValues\n };\n return (\n <>\n <ImageAttributesLine {...props} />\n <ImageLineCaption totalImages={totalValues} />\n </>\n );\n }\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n };\n return (\n <BasicView className={className}>\n <FacetViewHeader title={config.caption}>\n <DescriptionIcon description={attributeType?.description} />\n </FacetViewHeader>\n <div className={styles.container}>{renderContent()}</div>\n </BasicView>\n );\n};\n","import {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {getActionPermissionForMatch, Match, ProfilePotentialMatchesViewConfig} from '@reltio/mdm-sdk';\nimport React, {useCallback, useContext, useMemo} from 'react';\nimport {ActionButtonMode, MergeButton, NotMatchButton, ViewIdContext} from '@reltio/components';\n\ntype Props = {\n config: ProfilePotentialMatchesViewConfig;\n match: Match;\n onStartRequest: () => void;\n onFinishRequest: () => void;\n};\nexport const ActionButtons = ({config, match, onStartRequest, onFinishRequest}: Props) => {\n const dispatch = useDispatch();\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entity = useSelector(mdmModule.selectors.getEntity);\n const {canMerge, canMark} = getActionPermissionForMatch(metadata, config, match.object, entity, match.matchRules);\n const entities = useMemo(() => {\n return [match.object];\n }, [match.object]);\n\n const actionButtonProps = {\n entity,\n entities,\n mode: ActionButtonMode.iconButton,\n onStartRequest\n };\n const viewId = useContext(ViewIdContext);\n const onMergeFinish = useCallback(() => {\n onFinishRequest();\n dispatch(profile.entity.actions.loadEntity({viewId, uri: entity.uri}));\n }, [dispatch, entity.uri, onFinishRequest, viewId]);\n return (\n <>\n {canMerge && <MergeButton {...actionButtonProps} onFinishRequest={onMergeFinish} />}\n {canMark && <NotMatchButton {...actionButtonProps} onFinishRequest={onFinishRequest} />}\n </>\n );\n};\n","import {\n COMMENTS_CONTAINER_VISIBILITY_AREA,\n CommentsContainer,\n ProfileMatchCard,\n useMatchesLoader\n} from '@reltio/components';\nimport {\n CollaborationObjectTypes,\n createObjectIdForPM,\n createRelatedObjectUris,\n Match,\n ProfilePotentialMatchesViewConfig\n} from '@reltio/mdm-sdk';\nimport {ActionButtons} from './ActionButtons';\nimport React from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\n\ntype Props = Pick<ReturnType<typeof useMatchesLoader>, 'entitiesMap'> & {\n config: ProfilePotentialMatchesViewConfig;\n match: Match;\n onFinishRequest: () => void;\n onStartRequest: () => void;\n};\n\nexport const MatchCard = ({config, entitiesMap, match, onFinishRequest, onStartRequest}: Props) => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entity = useSelector(mdmModule.selectors.getEntity);\n return (\n <ProfileMatchCard\n match={match}\n entity={entity}\n entitiesMap={entitiesMap}\n metadata={metadata}\n className={COMMENTS_CONTAINER_VISIBILITY_AREA}\n >\n <CommentsContainer\n uri={createObjectIdForPM(entity.uri, match.object.uri)}\n relatedObjectUris={createRelatedObjectUris(CollaborationObjectTypes.POTENTIAL_MATCH, {\n entityUri: entity.uri,\n matchEntityUri: match.object.uri\n })}\n objectType={CollaborationObjectTypes.POTENTIAL_MATCH}\n />\n <ActionButtons\n match={match}\n config={config}\n onStartRequest={onStartRequest}\n onFinishRequest={onFinishRequest}\n />\n </ProfileMatchCard>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n minHeight: '52px'\n },\n matchesContainer: {\n position: 'relative'\n },\n footer: {\n display: 'flex',\n alignItems: 'end',\n flexGrow: 1,\n justifyContent: 'flex-start',\n borderTop: '1px solid rgba(0,0,0, 0.12)',\n padding: '8px 16px',\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: '0',\n lineHeight: '15px'\n },\n noData: {\n paddingLeft: '16px',\n paddingBottom: '16px',\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)'\n }\n}));\n","import React, {useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {isEmpty, map} from 'ramda';\nimport {Link as Link} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {\n BasicView,\n CollaborationContext,\n EntitiesMapContext,\n FacetViewHeader,\n LinearLoadIndicator,\n useMatchesLoader,\n ViewIdContext\n} from '@reltio/components';\nimport mdmModule, {ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {\n getEntityUriForLink,\n getEntityUriFromMatchObject,\n getPotentialMatchesObjectIdsForCollaboration,\n Order,\n ProfilePotentialMatchesViewConfig\n} from '@reltio/mdm-sdk';\nimport {MatchCard} from './MatchCard';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: ProfilePotentialMatchesViewConfig;\n className?: string;\n};\n\nexport const DEFAULT_MATCHES_LIMIT = 3;\nexport const DEFAULT_OPTIONS = {\n showTransitiveMatches: true,\n showInactiveEntities: false\n};\nexport const DEFAULT_SORTING = {order: Order.asc, field: 'score'};\nenum ComponentStates {\n Loading,\n NoData,\n Loaded\n}\nexport const ProfilePotentialMatchesView = ({config, className}: Props) => {\n const styles = useStyles();\n const entity = useSelector(mdmModule.selectors.getEntity);\n const entityUri = getEntityUriForLink(entity);\n\n const [isLoading, setIsLoading] = useState(false);\n const turnOnDisableSpinner = useCallback(() => {\n setIsLoading(true);\n }, []);\n const turnOffDisableSpinner = useCallback(() => {\n setIsLoading(false);\n }, []);\n\n const {matches, entitiesMap, loadMatches} = useMatchesLoader({\n enabled: !!entityUri,\n entity,\n options: DEFAULT_OPTIONS,\n filter: '',\n page: 0,\n sorting: DEFAULT_SORTING,\n rowsPerPage: DEFAULT_MATCHES_LIMIT,\n onStartLoading: turnOnDisableSpinner,\n onFinishLoading: turnOffDisableSpinner\n });\n const onFinishMatchAction = useCallback(() => {\n loadMatches();\n }, [loadMatches]);\n\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const openPotentialMatchPerspective = useCallback(() => {\n dispatch(mdmModuleUi.actions.openPerspective({perspectiveId: 'potentialMatches', viewId}));\n }, [dispatch, viewId]);\n\n const objectIds = useMemo(\n () => getPotentialMatchesObjectIdsForCollaboration(entityUri, map(getEntityUriFromMatchObject, matches)),\n [entityUri, matches]\n );\n\n const {getCommentsCount} = useContext(CollaborationContext);\n useEffect(() => {\n getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n const showSeeAll = !isEmpty(matches);\n const getComponentState = () => {\n if (isLoading) {\n return ComponentStates.Loading;\n }\n if (isEmpty(matches)) {\n return ComponentStates.NoData;\n }\n return ComponentStates.Loaded;\n };\n const state = getComponentState();\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <BasicView className={classnames(styles.root, className)}>\n <FacetViewHeader title={config.caption} />\n <div className={styles.matchesContainer}>\n {state === ComponentStates.Loading && <LinearLoadIndicator />}\n {state === ComponentStates.NoData && (\n <Typography className={styles.noData}>{i18n.text('No matches found')}</Typography>\n )}\n {state === ComponentStates.Loaded &&\n matches.map((match) => (\n <MatchCard\n config={config}\n entitiesMap={entitiesMap}\n match={match}\n onFinishRequest={onFinishMatchAction}\n onStartRequest={turnOnDisableSpinner}\n key={match.object.uri}\n />\n ))}\n </div>\n {showSeeAll && (\n <>\n <div className={styles.footer}>\n <Link\n component=\"button\"\n variant=\"caption\"\n onClick={openPotentialMatchPerspective}\n underline=\"none\"\n >\n {i18n.text('See all')}\n </Link>\n </div>\n </>\n )}\n </BasicView>\n </EntitiesMapContext.Provider>\n );\n};\n","import React, {lazy} from 'react';\nimport {Store} from 'redux';\nimport {\n ProfileViewConfig,\n ProfileViewTypes,\n AttributeViewConfig,\n EntityMapViewConfig,\n ProfilePotentialMatchesViewConfig,\n RelationsViewConfig,\n ImageAttributeViewConfig,\n SingleAttributeViewConfig,\n HierarchyPathsViewConfig,\n HierarchyTreeViewConfig,\n CustomActionViewConfig\n} from '@reltio/mdm-sdk';\nimport {pipe} from 'ramda';\nimport {ProfileAttributesView} from '../ProfileAttributesView/ProfileAttributesView';\nimport {ProfileSingleAttributeView} from '../ProfileSingleAttributeView/ProfileSingleAttributeView';\nimport {ProfileRelationsView} from '../ProfileRelationsView/ProfileRelationsView';\nimport {ProfileTableAttributeView} from '../ProfileTableAttributeView/ProfileTableAttributeView';\nimport {HierarchyPathsView} from '../HierarchyPathsView';\nimport {CustomView} from '../Sandbox/CustomView';\nimport withDragHandle from './HOCs/withDragHandle';\nimport withErrorBoundary from './HOCs/withErrorBoundary';\nimport {StubView} from './StubView';\nimport EntityMapView from '../EntityMapView/EntityMapView';\nimport {ImageAttributeView} from '../ImageAttributeView/ImageAttributeView';\nimport {ProfilePotentialMatchesView} from '../ProfilePotentialMatchesView/ProfilePotentialMatchesView';\n\nconst wrapView = <P extends unknown>(component: P): P => pipe(withErrorBoundary, withDragHandle)(component);\n\nconst WrappedStubView = wrapView(StubView);\nexport const WrappedProfileAttributesView = wrapView(ProfileAttributesView);\nexport const WrappedProfileSingleAttributeView = wrapView(ProfileSingleAttributeView);\nexport const WrappedProfileTableAttributeView = wrapView(ProfileTableAttributeView);\nexport const WrappedProfileRelationsView = wrapView(ProfileRelationsView);\nexport const WrappedCustomView = wrapView(CustomView);\nexport const WrappedHierarchyPathView = wrapView(HierarchyPathsView);\nexport const WrappedProfilePotentialMatchesView = wrapView(ProfilePotentialMatchesView);\n\nexport const WrappedHierarchyTreeView = lazy(() =>\n import(/* webpackMode: \"eager\" */ '@reltio/hierarchy-tree').then((importedModule) => ({\n default: wrapView(importedModule.HierarchyTreeView)\n }))\n);\n\nexport const WrappedRelationshipsTableView = lazy(() =>\n import(/* webpackMode: \"eager\" */ '@reltio/relations-table').then((importedModule) => ({\n default: wrapView(importedModule.RelationshipsTableView)\n }))\n);\nexport const WrappedEntityMapView = wrapView(EntityMapView);\nexport const WrappedImageAttributeView = wrapView(ImageAttributeView);\n\nexport type ViewComponentProps = {\n store: Store<unknown>;\n config:\n | ProfileViewConfig\n | AttributeViewConfig\n | SingleAttributeViewConfig\n | RelationsViewConfig\n | EntityMapViewConfig\n | ImageAttributeViewConfig;\n className?: string;\n isFullscreen: boolean;\n isAutosize?: boolean;\n onToggleFullscreen: (id: string) => void;\n};\n\nclass ViewsFactory {\n static ViewTypes = ProfileViewTypes;\n static getComponentBy = (\n propName: string,\n {store, config, className, isFullscreen, onToggleFullscreen}: ViewComponentProps\n ) => {\n switch (config[propName]) {\n case ViewsFactory.ViewTypes.HierarchyTree:\n return (\n <WrappedHierarchyTreeView\n config={config as HierarchyTreeViewConfig}\n store={store}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.HierarchyPaths:\n return <WrappedHierarchyPathView config={config as HierarchyPathsViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.RelationsTable:\n return (\n <WrappedRelationshipsTableView\n config={config as RelationsViewConfig}\n store={store}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.Relations:\n return <WrappedProfileRelationsView config={config as RelationsViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.Attributes:\n return <WrappedProfileAttributesView className={className} config={config as AttributeViewConfig} />;\n case ViewsFactory.ViewTypes.SingleAttribute:\n return (\n <WrappedProfileSingleAttributeView\n config={config as SingleAttributeViewConfig}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.AttributeTable:\n return (\n <WrappedProfileTableAttributeView\n config={config as SingleAttributeViewConfig}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.Map:\n return (\n <WrappedEntityMapView\n config={config as EntityMapViewConfig}\n isFullscreen={isFullscreen}\n onToggleFullscreen={onToggleFullscreen}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.Custom:\n return <WrappedCustomView config={config as CustomActionViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.ImageAttribute:\n return <WrappedImageAttributeView config={config as ImageAttributeViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.PotentialMatches:\n return (\n <WrappedProfilePotentialMatchesView\n config={config as ProfilePotentialMatchesViewConfig}\n className={className}\n />\n );\n }\n };\n static getComponent = (props: ViewComponentProps) => {\n return (\n ViewsFactory.getComponentBy('class', props) ||\n ViewsFactory.getComponentBy('react-class', props) || <WrappedStubView className={props.className} />\n );\n };\n}\n\nexport default ViewsFactory;\n","import React from 'react';\nimport classnames from 'classnames';\nimport {BasicView} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst StubView = ({className}: Props) => {\n const styles = useStyles();\n return (\n <BasicView className={classnames(styles.stubView, 'viewDraggableHandle', className)}>NOT IMPLEMENTED</BasicView>\n );\n};\n\nexport {StubView};\n","import React from 'react';\nimport {SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {SingleAttributeContext} from './contexts/SingleAttributeContext';\nimport {SingleAttributeView} from './components/SingleAttributeView/SingleAttributeView';\nimport {useSingleAttribute} from './hooks/useSingleAttribute';\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileSingleAttributeView = ({className, config}: Props) => {\n const singleAttribute = useSingleAttribute(config);\n\n return (\n <SingleAttributeContext.Provider value={singleAttribute}>\n <SingleAttributeView config={config} className={className} />\n </SingleAttributeContext.Provider>\n );\n};\n","import {useState, useMemo, useCallback} from 'react';\nimport {SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {useSingleAttributeLoader} from '../../hooks/useSingleAttributeLoader';\n\nexport const useSingleAttribute = (config: SingleAttributeViewConfig) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [page, setPage] = useState(0);\n const [showInactive, setShowInactive] = useState(false);\n const params = useMemo(() => ({page, searchQuery, showInactive}), [page, searchQuery, showInactive]);\n const attribute = useSingleAttributeLoader(config, params);\n const toggleShowInactive = useCallback(() => {\n setPage(0);\n setShowInactive((showInactive) => !showInactive);\n }, []);\n\n return {\n setSearchQuery,\n searchQuery,\n setPage,\n page,\n toggleShowInactive,\n showInactive,\n ...attribute\n };\n};\n","import React from 'react';\nimport {TableAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {TableAttributeContext} from './contexts/TableAttributeContext';\nimport {useTableAttribute} from './hooks/useTableAttribute';\nimport {TableAttributeView} from './components/TableAttributeView/TableAttributeView';\n\ntype Props = {\n config: TableAttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileTableAttributeView = ({config, className}: Props) => {\n const tableAttribute = useTableAttribute(config);\n\n return (\n <TableAttributeContext.Provider value={tableAttribute}>\n {config && <TableAttributeView config={config} className={className} />}\n </TableAttributeContext.Provider>\n );\n};\n","import {useMemo, useReducer} from 'react';\nimport {reject, isNil, pipe, not, prop} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n ComplexAttributeValue,\n findAttributeTypeByUri,\n isComplexAttribute,\n SingleAttributeViewConfig\n} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {useActions} from '@reltio/components';\nimport reducer, {actions} from './reducer';\nimport {getColumnsData} from '../helpers/tableAttributeHelpers';\nimport {useSingleAttributeLoader} from '../../hooks/useSingleAttributeLoader';\nimport {buildMDMFilters} from './helpers';\n\nconst DEFAULT_COUNT_COLUMN = 5;\n\nexport const useTableAttribute = (config: SingleAttributeViewConfig) => {\n const {attributeUri} = config;\n const metadata = useSelector(mdm.selectors.getMetadata);\n const attributeType = useMemo(() => findAttributeTypeByUri(metadata, attributeUri), [metadata, attributeUri]);\n const allColumnsData = useMemo(\n () => (attributeType ? getColumnsData(metadata, attributeType) : []),\n [metadata, attributeType]\n );\n const initialState = useMemo(\n () => ({\n searchQuery: '',\n filters: null,\n sorting: undefined,\n visibleColumns: allColumnsData\n .filter(pipe(prop('dataTypeDefinition'), isComplexAttribute, not))\n .map(({id}) => id)\n .slice(0, DEFAULT_COUNT_COLUMN),\n page: 0\n }),\n [allColumnsData]\n );\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n const {searchQuery, filters, sorting, page} = state;\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode);\n\n const requestFilters = useMemo(() => {\n const mdmFilters = buildMDMFilters(allColumnsData, filters);\n return mdmFilters.length ? mdmFilters : null;\n }, [filters, allColumnsData]);\n\n const params = useMemo(\n () => reject(isNil, {filters: requestFilters, page, sorting, searchQuery}),\n [requestFilters, page, sorting, searchQuery]\n );\n const {changeSearchQuery, changePage, toggleSort, changeFilter, toggleFilters, changeColumns} = useActions({\n actions,\n dispatch\n });\n const attribute = useSingleAttributeLoader<ComplexAttributeValue>(config, params);\n const showTable = Boolean(\n (attribute?.values?.length || requestFilters || searchQuery || isEditableMode) &&\n attributeType &&\n !attributeType.hidden\n );\n return {\n ...state,\n setSearchQuery: changeSearchQuery,\n setPage: changePage,\n onSort: toggleSort,\n onFilter: changeFilter,\n onToggleFilters: toggleFilters,\n onChangeColumns: changeColumns,\n showTable,\n allColumnsData,\n ...attribute\n };\n};\n","import {propEq} from 'ramda';\nimport {Maybe} from '@reltio/mdm-sdk';\nimport {ColumnData, ColumnFilter, columnFilterToMdmFilter} from '@reltio/components';\n\nexport const buildMDMFilters = (columnsData: ColumnData[], filters: Record<string, ColumnFilter>) =>\n Maybe.fromNull<Record<string, ColumnFilter>>(filters)\n .map<ReturnType<typeof columnFilterToMdmFilter>[]>((filters) =>\n Object.entries(filters).map(([columnId, columnFilter]) => {\n const columnData = columnsData.find(propEq('id', columnId));\n return columnFilterToMdmFilter(columnData, columnFilter);\n })\n )\n .orSome([]);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {RelationsViewConfig, parseRelationsConfig, Metadata} from '@reltio/mdm-sdk';\nimport RelationsView from './components/RelationsView';\nimport {RelationsViewStateContext} from './contexts/RelationsViewStateContext';\nimport useRelationsState from './hooks/useRelationsState';\n\ntype Props = {\n config: RelationsViewConfig;\n onResize?: (width: number, height: number) => void;\n className?: string;\n};\n\nexport const ProfileRelationsView = ({config, className}: Props) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const parsedConfig = parseRelationsConfig(metadata, config);\n const relationsState = useRelationsState(parsedConfig);\n return (\n <RelationsViewStateContext.Provider value={relationsState}>\n <RelationsView config={parsedConfig} className={className} />\n </RelationsViewStateContext.Provider>\n );\n};\n","import React, {useCallback, useEffect} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {BasicView, ReactSortableTree} from '@reltio/components';\nimport mdmModule, {ui} from '@reltio/mdm-module';\nimport {Typography as Typography} from '@material-ui/core';\nimport {useLoadPaths} from './hooks/useLoadPaths';\nimport {Node} from './Node';\nimport {useStyles} from './styles';\nimport {ConfigContext} from './ConfigContext';\nimport {HierarchyPathsViewConfig} from '@reltio/mdm-sdk';\nimport {getNodeKey} from './helpers';\nimport {theme} from './theme';\nimport HierarchyPathsHeader from './HierarchyPathsHeader';\nimport {useDynamicNodesHeights} from './hooks/useDynamicNodesHeights';\n\ntype Props = {\n className?: string;\n config: HierarchyPathsViewConfig;\n};\n\nexport const HierarchyPathsView = ({config, className}: Props) => {\n const {id, caption, graph} = config;\n const graphType = graph?.type;\n\n const styles = useStyles();\n const dispatch = useDispatch();\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n\n const {treeData, setTreeData, errorMessage} = useLoadPaths(entityUri, graphType);\n const {onResize, getRowHeight, clearHeightsCache} = useDynamicNodesHeights();\n\n const openGraph = useCallback(() => {\n dispatch(ui.actions.openGraph({viewId: id, graphType, entityUri}));\n }, [dispatch, id, graphType, entityUri]);\n\n const generateNodeProps = useCallback(\n (rowInfo) => ({\n title: (\n <ReactResizeDetector\n handleHeight\n refreshMode=\"debounce\"\n refreshRate={100}\n onResize={onResize(rowInfo.node)}\n >\n <Node node={rowInfo.node} />\n </ReactResizeDetector>\n )\n }),\n [onResize]\n );\n\n useEffect(() => {\n clearHeightsCache();\n }, [clearHeightsCache, entityUri]);\n\n return (\n <BasicView className={className}>\n <HierarchyPathsHeader onGraphOpen={openGraph} title={caption} />\n <ConfigContext.Provider value={config}>\n <div className={styles.treeContainer}>\n <div className={styles.tree}>\n {!errorMessage ? (\n <ReactSortableTree\n isVirtualized={false}\n treeData={treeData}\n canDrag={false}\n theme={theme}\n generateNodeProps={generateNodeProps}\n onChange={setTreeData}\n getNodeKey={getNodeKey}\n rowHeight={getRowHeight}\n />\n ) : (\n <Typography className={styles.errorMessage}>{errorMessage}</Typography>\n )}\n </div>\n </div>\n </ConfigContext.Provider>\n </BasicView>\n );\n};\n","import React, {useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport mdm from '@reltio/mdm-module';\nimport FullscreenIcon from '@material-ui/icons/Fullscreen';\nimport FullscreenExitIcon from '@material-ui/icons/FullscreenExit';\nimport {BasicView, LinearLoadIndicator, ReltioMap} from '@reltio/components';\nimport {SmallIconButton} from '@reltio/components';\n\nimport {AttributeViewConfig} from '@reltio/mdm-sdk';\nimport {useMarkers} from './useMarkers';\nimport useStyles from './styles';\n\ntype EntityMapViewProps = {\n config: AttributeViewConfig;\n className?: string;\n isFullscreen: boolean;\n onToggleFullscreen: (id: string) => void;\n};\n\nexport const EntityMapView = ({config, isFullscreen, onToggleFullscreen, className}: EntityMapViewProps) => {\n const styles = useStyles();\n const metadata = useSelector(mdm.selectors.getMetadata);\n const entity = useSelector(mdm.selectors.getEntity);\n const mapKey = useSelector(mdm.selectors.getGoogleMapKey);\n const {markers, loading} = useMarkers(entity, metadata, mapKey);\n const loadingElement = useMemo(\n () => (\n <div className={styles.fullHeight}>\n <LinearLoadIndicator />\n </div>\n ),\n [styles]\n );\n\n const defaultCenter = useMemo(() => ({lat: 0, lng: 0}), []);\n const mapOptions = useMemo(() => ({mapTypeControl: true}), []);\n\n return (\n mapKey && (\n <BasicView className={classnames(styles.root, className)}>\n {loading && <LinearLoadIndicator />}\n <SmallIconButton\n size=\"S\"\n icon={isFullscreen ? FullscreenExitIcon : FullscreenIcon}\n onClick={() => onToggleFullscreen(config.id)}\n className={styles.fullscreenBtn}\n />\n\n <ReltioMap\n loadingElement={loadingElement}\n defaultZoom={1}\n defaultCenter={defaultCenter}\n markers={markers}\n mapContainerClassName={styles.fullHeight}\n mapKey={mapKey}\n mapOptions={mapOptions}\n />\n </BasicView>\n )\n );\n};\n\nexport default EntityMapView;\n","import React, {memo, Suspense} from 'react';\nimport classnames from 'classnames';\nimport ViewsFactory, {ViewComponentProps} from './ViewsFactory';\nimport {useStyles} from './styles';\n\nconst Fallback = () => null;\n\nconst ViewComponent = memo(({config, store, isFullscreen, isAutosize, onToggleFullscreen}: ViewComponentProps) => {\n const styles = useStyles();\n return (\n <Suspense fallback={<Fallback />}>\n {ViewsFactory.getComponent({\n config,\n store,\n className: classnames(styles.component, {[styles.fullHeight]: !isAutosize}),\n isFullscreen,\n onToggleFullscreen\n })}\n </Suspense>\n );\n});\n\nViewComponent.displayName = 'ViewComponent';\n\nexport {ViewComponent};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {basicView: Record<string, string | number>}) => ({\n item: theme.basicView,\n fixedSizeContainer: {\n height: '100%'\n }\n}));\n","import React, {ReactChildren, ReactNode, useContext} from 'react';\nimport {omit} from 'ramda';\nimport {ReactReduxContext, useSelector} from 'react-redux';\nimport {ReactGridLayoutItem} from '@reltio/components';\nimport {CustomScript, CustomScriptPlatform, ProfileViewConfig, ProfileViewTypes} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {ViewComponent} from '../views/ViewComponent';\nimport ViewsFactory from '../views/ViewsFactory';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n layoutItemConfig: ReactGridLayoutItem;\n views: ProfileViewConfig[];\n className?: string;\n children?: ReactChildren;\n style?: Record<string, unknown>;\n isFullscreen: boolean;\n onToggleFullscreen: (id: string) => void;\n AutosizeComponent?: ReactNode;\n};\n\nconst omittingProps = ['onConfigChanged', 'onRemove'];\n\nconst getViewTypeByClass = (className: string) =>\n Object.entries(ProfileViewTypes).find(([_, value]) => className === value)?.[0];\n\nconst ProfileLayoutItem = ({\n layoutItemConfig,\n views,\n className,\n children: ResizeComponent,\n style,\n isFullscreen,\n onToggleFullscreen,\n AutosizeComponent,\n ...props\n}: Props) => {\n const config = views.find(({id}) => layoutItemConfig.i === id);\n const styles = useStyles();\n const mapKey = useSelector(mdm.selectors.getGoogleMapKey);\n\n const {store} = useContext(ReactReduxContext);\n if (!config) {\n return null;\n }\n const isCustomView = config.class === ViewsFactory.ViewTypes.Custom;\n if (isCustomView && (config?.action as CustomScript)?.platform === CustomScriptPlatform.CLASSIC) {\n return null;\n }\n\n const isMapView = config.class === ViewsFactory.ViewTypes.Map;\n if (isMapView && !mapKey) {\n return null;\n }\n\n const reltioClass = getViewTypeByClass(config.class);\n return (\n <div\n {...omit(omittingProps, props)}\n data-reltio-id={config.id}\n data-reltio-class={reltioClass || ''}\n style={style}\n className={classnames(className, {[styles.item]: !isCustomView})}\n >\n <div className={classnames({[styles.fixedSizeContainer]: !AutosizeComponent})}>\n {AutosizeComponent}\n <ViewComponent\n store={store}\n config={config}\n isFullscreen={isFullscreen}\n onToggleFullscreen={onToggleFullscreen}\n isAutosize={Boolean(AutosizeComponent)}\n />\n </div>\n {ResizeComponent}\n </div>\n );\n};\n\nexport {ProfileLayoutItem};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst DEFAULT_MIN_WIDTH = 1024;\n\ntype Props = {\n maxWidth?: number;\n scrollbarWidth?: number;\n};\n\nexport const useStyles = makeStyles({\n scrollWrapper: {\n flexGrow: 1,\n overflow: 'auto'\n },\n scrollableContent: ({maxWidth, scrollbarWidth}: Props) => ({\n minWidth: maxWidth && maxWidth < DEFAULT_MIN_WIDTH ? maxWidth - scrollbarWidth : DEFAULT_MIN_WIDTH\n })\n});\n","import React, {useEffect, useMemo, useRef} from 'react';\nimport {PopupBoundariesContext, ReltioGridLayout} from '@reltio/components';\nimport {ProfileViewConfig} from '@reltio/mdm-sdk';\nimport {ProfileLayoutItem} from '../ProfileLayoutItem';\nimport {Layout} from '../../types';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n views: ProfileViewConfig[];\n layout?: Layout;\n entityUri?: string;\n maxWidth?: number;\n onLayoutChanged: (layout: Layout) => void;\n};\n\nconst calcScrollbarWidth = (element: HTMLDivElement) => (element ? element.offsetWidth - element.clientWidth : 0);\n\nconst ProfileLayout = ({views, layout, entityUri, maxWidth, onLayoutChanged}: Props) => {\n const scrollWrapperRef = useRef<HTMLDivElement>();\n const scrollbarWidth = calcScrollbarWidth(scrollWrapperRef.current);\n const boundariesElement = scrollWrapperRef.current;\n\n const styles = useStyles({maxWidth, scrollbarWidth});\n\n const popupBoundariesValue = useMemo(\n () => ({element: boundariesElement, priority: ['left', 'right', 'top', 'bottom']}),\n [boundariesElement]\n );\n\n useEffect(() => {\n if (scrollWrapperRef.current) {\n scrollWrapperRef.current.scrollTop = 0;\n }\n }, [entityUri]);\n\n return (\n <div ref={scrollWrapperRef} className={styles.scrollWrapper}>\n <div className={styles.scrollableContent}>\n <PopupBoundariesContext.Provider value={popupBoundariesValue}>\n <ReltioGridLayout\n LayoutItem={ProfileLayoutItem}\n views={views}\n layout={layout}\n onLayoutChanged={onLayoutChanged}\n draggableHandle=\".viewDraggableHandle\"\n />\n </PopupBoundariesContext.Provider>\n </div>\n </div>\n );\n};\n\nexport {ProfileLayout};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n closeIcon: {\n paddingRight: '12px',\n boxSizing: 'content-box',\n '& path': {\n fill: '#fff'\n }\n },\n snackbar: {\n '& > div': {\n flexWrap: 'nowrap',\n alignItems: 'baseline'\n }\n }\n}));\n","import {Snackbar as Snackbar} from '@material-ui/core';\nimport {Portal as Portal} from '@material-ui/core';\nimport React, {useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport {ConfirmationDialog, SmallIconButton} from '@reltio/components';\nimport {NotificationItem, Action} from './types';\nimport {useStyles} from './styles';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {ui as mdmModuleUi} from '@reltio/mdm-module';\n\ntype Props = {\n notification: NotificationItem;\n};\n\nconst AUTO_HIDE_DURATION = 5000;\n\nexport const Notification = ({notification}: Props) => {\n const styles = useStyles({});\n const dispatch = useDispatch();\n const autoCloseInterval: number = useSelector(mdmModule.selectors.getAutoCloseInterval);\n const autoHideDuration =\n notification.autoHideDuration || (autoCloseInterval && autoCloseInterval * 1000) || AUTO_HIDE_DURATION;\n const [action, setAction] = useState<Action>();\n const [show, setShow] = useState(true);\n const closeSnackbar = useCallback(\n (_e?: unknown, reason?: string) => {\n if (reason !== 'clickaway') {\n dispatch(mdmModuleUi.actions.closeNotification(notification.id));\n setShow(false);\n }\n },\n [notification]\n );\n const onDiscard = useCallback(() => {\n action.cancelAction && dispatch(action.cancelAction);\n setAction(undefined);\n }, [action]);\n const onConfirm = useCallback(() => {\n dispatch(action.applyAction);\n setAction(undefined);\n dispatch(mdmModuleUi.actions.closeNotification(notification.id));\n }, [action, notification]);\n\n const actions = (\n <>\n {notification.actions.map((action) => (\n <Button\n key={action.label}\n color=\"primary\"\n size=\"small\"\n onClick={() => {\n if (action.needConfirmation) {\n setAction(action);\n } else {\n dispatch(action.applyAction);\n }\n setShow(false);\n }}\n >\n {action.label}\n </Button>\n ))}\n </>\n );\n const message = (\n <>\n <SmallIconButton className={styles.closeIcon} size=\"S\" icon={CloseIcon} onClick={closeSnackbar} />\n {notification.text}\n </>\n );\n\n return (\n <>\n <Portal container={document.body}>\n <Snackbar\n autoHideDuration={autoHideDuration}\n open={show}\n classes={{root: styles.snackbar}}\n action={actions}\n onClose={closeSnackbar}\n anchorOrigin={{vertical: 'bottom', horizontal: 'center'}}\n message={message}\n />\n </Portal>\n <ConfirmationDialog\n open={!!action}\n title={action?.confirmationText}\n content={action?.confirmationDescription}\n onSave={onConfirm}\n onDiscard={onDiscard}\n saveCaption={i18n.text('Proceed')}\n discardCaption={i18n.text('Cancel')}\n />\n </>\n );\n};\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {NotificationItem} from './types';\nimport {Notification} from './Notification';\n\nexport const Notifications = () => {\n const notifications: NotificationItem[] = useSelector(mdm.selectors.getNotifications);\n if (!notifications) return null;\n return (\n <>\n {notifications.slice(-1).map((n) => (\n <Notification key={n.id} notification={n} />\n ))}\n </>\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: \"19\",\n height: \"17\",\n viewBox: \"0 0 19 17\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M14 17v2H4v-2h10zm6-4v2H4v-2l12.884.001H17l.116-.002L20 13zm-8.457-2H4V9h5.82a8.465 8.465 0 001.723 2zM9.139 6.178l-.289.733.035.088L4 7V5l5.713-.002c-.22.375-.412.768-.574 1.18zM17 2.82a6.451 6.451 0 00-6 4.09 6.451 6.451 0 006 4.092 6.451 6.451 0 006-4.091 6.451 6.451 0 00-6-4.091zm0 6.815a2.728 2.728 0 010-5.455 2.728 2.728 0 010 5.455zm0-4.365c-.905 0-1.636.73-1.636 1.636 0 .906.73 1.637 1.636 1.637.905 0 1.636-.731 1.636-1.637 0-.905-.73-1.636-1.636-1.636z\",\n id: \"svg1467685497a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"g\", {\n transform: \"translate(-4 -2.5)\"\n}, React.createElement(\"mask\", {\n id: \"svg1467685497b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg1467685497a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg1467685497b)\",\n d: \"M0 0h24v24H0z\"\n})))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M20.222 6C21.21 6 22 6.8 22 7.778v12.444C22 21.2 21.209 22 20.222 22H7.778C6.79 22 6 21.2 6 20.222V7.778C6 6.8 6.791 6 7.778 6h12.444zM20 8H8v12h12V8zM4 18H2V4c0-1.1.9-2 2-2h14v2H4v14z\",\n id: \"svg2383396984a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg2383396984b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2383396984a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2383396984b)\",\n d: \"M0 0h24v24H0z\"\n}))));","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n editingButtons: {\n display: 'flex',\n '& button + button': {\n minWidth: '88px',\n marginLeft: '8px'\n }\n },\n searchResults: {\n width: '150px',\n height: '25px',\n backgroundColor: '#ccc'\n },\n comments: {\n display: 'flex',\n justifyContent: 'flex-end',\n marginTop: '10px'\n }\n});\n","import {useCallback, useMemo} from 'react';\nimport {\n includes,\n pipe,\n isNil,\n propOr,\n filter,\n map,\n prop,\n cond,\n identity,\n omit,\n find,\n complement,\n when,\n either,\n pick,\n always,\n T\n} from 'ramda';\nimport {\n BaseCloneAction,\n CloneAction,\n Entity,\n getEntityType,\n isReference,\n isRelationWithEntityType,\n getRelationTypeUriFromAttrType\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\n\ntype Props = {\n cloneAction?: CloneAction[];\n onCloneDiscard: () => void;\n};\n\nexport const useCloneAction = ({cloneAction: cloneActionProp, onCloneDiscard}: Props) => {\n const entity: Entity = useSelector(mdm.selectors.getEntityWithoutDiff);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const dispatch = useDispatch();\n const entityTypeUri = entity?.type;\n const relationTypes = metadata.relationTypes;\n const isRelationSuitableForEntityType = useCallback(isRelationWithEntityType(metadata, entityTypeUri), [\n metadata,\n entityTypeUri\n ]);\n const entityType = getEntityType(metadata, entityTypeUri);\n const cloneAction = useMemo<BaseCloneAction>(\n () =>\n when(\n complement(isNil),\n pipe(\n find(pipe(propOr([], 'entityTypeUris'), either(includes(entityTypeUri), includes('*')))),\n when(complement(isNil), omit(['entityTypeUris']))\n )\n )(cloneActionProp),\n [cloneActionProp, entityTypeUri]\n );\n const onClone = useCallback(() => {\n if (cloneAction) {\n const modifiedRelationTypes: string[] = pipe(\n prop('relationshipTypesToCopy'),\n cond([\n [\n isNil,\n pipe(\n always(entityType),\n propOr([], 'attributes'),\n filter(isReference),\n map(getRelationTypeUriFromAttrType)\n )\n ],\n [\n includes('*'),\n pipe(always(relationTypes || []), map(prop('uri')), filter(isRelationSuitableForEntityType))\n ],\n [T, identity]\n ])\n )(cloneAction);\n dispatch(\n profile.entity.actions.entityCloneRequested({\n data: {\n ...pick(['attributeReplacementMapping'], cloneAction),\n relationshipTypesToCopy: modifiedRelationTypes\n },\n entityUri: entity.uri\n })\n );\n }\n onCloneDiscard();\n }, [cloneAction, onCloneDiscard, entityType, relationTypes, entity.uri, isRelationSuitableForEntityType]);\n return cloneAction ? onClone : undefined;\n};\n","import React, {useCallback, useMemo, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {Box as Box} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport {SvgIcon as SvgIcon} from '@material-ui/core';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CreateIcon from '@material-ui/icons/Create';\n\nimport {\n getEntityType,\n Entity,\n checkMetadataPermission,\n isDataTenantEntity,\n isTempUri,\n MetadataPermissions,\n ModeTypes,\n Mode,\n isSuggestMode,\n isEditableMode,\n CollaborationObjectTypes,\n createRelatedObjectUris,\n Operation,\n ProfileBandConfig\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {\n ProfileBand,\n ModeSwitcherSelect,\n CommentsContainer,\n COMMENTS_CONTAINER_VISIBILITY_AREA,\n ProfileBandNavigation,\n ProfileBandHistory,\n ConfirmationDialog\n} from '@reltio/components';\n\nimport SuggestSvg from './suggest.svg';\nimport CopySvg from './copy.svg';\n\nimport {useStyles} from './styles';\nimport {useCloneAction} from './hooks/useCloneAction';\n\ntype Props = {\n className?: string;\n profileBandConfig?: ProfileBandConfig;\n};\n\nconst SuggestIcon = (props) => (\n <SvgIcon {...props}>\n <SuggestSvg />\n </SvgIcon>\n);\n\nconst CopyIcon = (props) => (\n <SvgIcon {...props}>\n <CopySvg />\n </SvgIcon>\n);\n\ntype Group = {\n label: string;\n value: string;\n description: string;\n icon: React.ElementType;\n permission: string;\n onClick?: (value: string) => void;\n};\n\nconst filterGroupByPermissions = <T extends Group>(\n group: T[],\n entityType,\n isTempEntity: boolean,\n isWorkflowEnabled?: boolean,\n canStartProcessInstanceSearchQuery?: boolean\n): T[] =>\n group.filter(({value, permission}) => {\n if (isTempEntity && !isEditableMode(value)) return false;\n if ((!isWorkflowEnabled || !canStartProcessInstanceSearchQuery) && isSuggestMode(value)) return false;\n return checkMetadataPermission(permission, entityType);\n });\n\nconst hasOnlyReadPermission = (entityType) => {\n return (\n checkMetadataPermission(MetadataPermissions.READ, entityType) &&\n !checkMetadataPermission(MetadataPermissions.UPDATE, entityType) &&\n !checkMetadataPermission(MetadataPermissions.DELETE, entityType) &&\n !checkMetadataPermission(MetadataPermissions.INITIATE_CHANGE_REQUEST, entityType)\n );\n};\n\nexport const PerspectiveProfileBand = ({className, profileBandConfig}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n const canStartProcessInstanceSearchQuery = useSelector(mdm.selectors.getCanUserStartProcessFromQuery);\n const entity = useSelector(mdm.selectors.getEntityWithoutDiff) as Entity;\n const modifiedEntity = useSelector((state) => mdm.selectors.getModifiedEntity(state, entity.uri));\n const metadata = useSelector(mdm.selectors.getMetadata);\n const isWorkflowEnabled = useSelector(mdm.selectors.isWorkflowEnabled) as boolean;\n const mode = useSelector(mdm.selectors.getMode) as Mode;\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode) as boolean;\n const isViewMode = useSelector(mdm.selectors.getIsViewMode) as boolean;\n const isHistoryModeEnabled = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const profileOperation = useSelector(mdm.selectors.getProfileOperation);\n const entityTypeUri = entity?.type;\n const entityType = useMemo(() => getEntityType(metadata, entityTypeUri), [entityTypeUri, metadata]);\n const isOperationSaving = profileOperation === Operation.Saving;\n const isOperationCloning = profileOperation === Operation.Cloning;\n const isDisabledButtons = isOperationCloning || isOperationSaving;\n const [openCloneConfirmationDialog, setOpenCloneConfirmationDialog] = useState(false);\n const onCloneDiscard = useCallback(() => {\n setOpenCloneConfirmationDialog(false);\n }, []);\n const onClone = useCloneAction({cloneAction: profileBandConfig?.cloneAction, onCloneDiscard});\n const OPTIONS_GROUP = useMemo(\n () => [\n {\n label: i18n.text('Editing'),\n value: ModeTypes.EDITING,\n description: i18n.text('Edit profile directly'),\n icon: CreateIcon,\n permission: 'UPDATE'\n },\n {\n label: i18n.text('Suggesting'),\n value: ModeTypes.SUGGESTING,\n description: i18n.text('Suggest changes and initiate a workflow review'),\n icon: SuggestIcon,\n permission: 'INITIATE_CHANGE_REQUEST'\n },\n {\n label: i18n.text('Viewing'),\n value: ModeTypes.VIEWING,\n description: i18n.text('Read or print profile'),\n icon: VisibilityIcon,\n permission: 'READ'\n }\n ],\n []\n );\n\n const BUTTONS_GROUP = useMemo(\n () => [\n ...(onClone\n ? [\n {\n label: i18n.text('Clone'),\n value: 'Clone',\n description: i18n.text('Create a copy of the profile'),\n icon: CopyIcon,\n onClick: () => setOpenCloneConfirmationDialog(true),\n permission: 'CREATE'\n }\n ]\n : []),\n {\n label: i18n.text('Delete'),\n value: 'Delete',\n description: i18n.text('Permanently delete profile'),\n icon: DeleteIcon,\n onClick: () => {\n const conf = window.confirm(i18n.text('Are you sure you want to delete this?'));\n if (conf) {\n dispatch(profile.entity.actions.entityRemoveRequested({entityUri: entity.uri}));\n }\n },\n permission: 'DELETE'\n }\n ],\n [dispatch, entity.uri, onClone]\n );\n\n const shouldShowSelect = !isHistoryModeEnabled && !isDataTenantEntity(entity) && !hasOnlyReadPermission(entityType);\n\n const isTempEntity = isTempUri(entity?.uri);\n\n const accessibleOptionsGroup = useMemo(() => {\n return filterGroupByPermissions(\n OPTIONS_GROUP,\n entityType,\n isTempEntity,\n isWorkflowEnabled,\n canStartProcessInstanceSearchQuery\n );\n }, [OPTIONS_GROUP, entityType, isWorkflowEnabled, canStartProcessInstanceSearchQuery, isTempEntity]);\n const accessibleButtonsGroup = useMemo(() => {\n return filterGroupByPermissions(\n BUTTONS_GROUP,\n entityType,\n isTempEntity,\n isWorkflowEnabled,\n canStartProcessInstanceSearchQuery\n );\n }, [BUTTONS_GROUP, entityType, isWorkflowEnabled, canStartProcessInstanceSearchQuery, isTempEntity]);\n\n const handleChange = useCallback(\n (value: Mode) => {\n dispatch(profile.mode.actions.modeUpdated(value));\n },\n [dispatch]\n );\n\n const onCancel = useCallback(() => {\n dispatch(profile.mode.actions.modeCancelEditing());\n }, [dispatch]);\n\n const handleSave = useCallback(() => {\n dispatch(profile.actions.saveProfile());\n }, [dispatch]);\n\n return (\n <>\n <ProfileBand\n className={classnames(className, COMMENTS_CONTAINER_VISIBILITY_AREA)}\n entity={isEditableMode && modifiedEntity ? modifiedEntity : entity}\n >\n <Box display=\"flex\" alignItems=\"center\">\n <Box mr={3}>\n {isEditableMode && (\n <Box className={styles.editingButtons}>\n <Button\n variant=\"outlined\"\n onClick={onCancel}\n data-reltio-id=\"reltio-profile-cancel-editing\"\n disabled={isDisabledButtons}\n >\n {i18n.text('Cancel')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n data-reltio-id=\"reltio-profile-save-profile\"\n onClick={handleSave}\n disabled={isDisabledButtons}\n >\n {isSuggestMode(mode) ? i18n.text('Suggest') : i18n.text('Save')}\n </Button>\n </Box>\n )}\n {isHistoryModeEnabled && isViewMode ? (\n <ProfileBandHistory />\n ) : (\n isViewMode && <ProfileBandNavigation />\n )}\n </Box>\n {shouldShowSelect && (\n <ModeSwitcherSelect\n optionsGroup={accessibleOptionsGroup}\n buttonsGroup={accessibleButtonsGroup}\n value={mode}\n onChange={handleChange}\n disabled={isDisabledButtons}\n />\n )}\n </Box>\n <Box className={styles.comments}>\n <CommentsContainer\n uri={entity.uri}\n relatedObjectUris={createRelatedObjectUris(CollaborationObjectTypes.ENTITY, {\n entityUri: entity.uri\n })}\n objectType={CollaborationObjectTypes.ENTITY}\n />\n </Box>\n </ProfileBand>\n {!!onClone && (\n <ConfirmationDialog\n open={openCloneConfirmationDialog}\n title={i18n.text('Do you want to create a clone of the profile?')}\n content={i18n.text(\n 'Cloning will create a copy of the current profile. You can modify the cloned profile in the next step. Are you sure you want to proceed?'\n )}\n onSave={onClone}\n onDiscard={onCloneDiscard}\n saveCaption={i18n.text('Proceed')}\n discardCaption={i18n.text('Cancel')}\n />\n )}\n </>\n );\n};\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 badge: {\n fontSize: '12px',\n height: '18px',\n minWidth: '18px',\n backgroundColor: '#FF4081',\n color: '#FFF'\n },\n badgePosition: {\n right: '5px'\n }\n});\n","import React, {useContext, VFC} from 'react';\nimport {Badge as Badge} from '@material-ui/core';\nimport {WorkflowTasksContext} from '@reltio/components';\nimport InboxIcon from '@material-ui/icons/Inbox';\nimport {useStyles} from '../../styles';\n\nexport const WorkflowButton: VFC = () => {\n const {total} = useContext(WorkflowTasksContext);\n const styles = useStyles();\n return (\n <Badge\n badgeContent={total}\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <InboxIcon />\n </Badge>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n overflow: 'auto',\n paddingRight: '12px'\n },\n showMoreLink: {\n display: 'flex',\n margin: '16px'\n },\n showMoreIcon: {\n fontSize: '1rem'\n }\n});\n","import React, {useContext, useEffect} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {CollaborationContext, CollaborationItem, EntitiesMapContext, useCommentsEntitiesMap} from '@reltio/components';\nimport {Box as Box} from '@material-ui/core';\nimport {Link as Link} from '@material-ui/core';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport {useStyles} from './styles';\n\nexport const CollaborationList = () => {\n const styles = useStyles();\n const {getComments, comments, pageToken} = useContext(CollaborationContext);\n const entityUri = useSelector(mdm.selectors.getEntityUriWithDataTenant);\n\n useEffect(() => {\n getComments(entityUri);\n }, [getComments, entityUri]);\n\n const handleShowMoreComments = () => {\n getComments(entityUri, pageToken);\n };\n\n const entitiesMap = useCommentsEntitiesMap(comments);\n\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <Box className={styles.wrapper}>\n {comments.map((comment) => {\n const {objectId, relatedObjectUris, objectType, commentId} = comment;\n return (\n <CollaborationItem\n key={commentId}\n uri={objectId}\n relatedObjectUris={relatedObjectUris}\n objectType={objectType}\n comment={comment}\n />\n );\n })}\n {pageToken && (\n <Link\n component=\"button\"\n variant=\"caption\"\n className={styles.showMoreLink}\n onClick={handleShowMoreComments}\n underline=\"none\"\n >\n <KeyboardArrowDownIcon className={styles.showMoreIcon} />\n {i18n.text('Show more')}\n </Link>\n )}\n </Box>\n </EntitiesMapContext.Provider>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n overflow: 'auto',\n position: 'relative',\n height: '100%'\n }\n});\n","import React, {useContext} from 'react';\nimport {LinearLoadIndicator, WorkflowTaskCard, WorkflowTasksContext} from '@reltio/components';\nimport {useStyles} from './styles';\n\nexport const WorkflowList = () => {\n const styles = useStyles();\n const {tasks, loading} = useContext(WorkflowTasksContext);\n\n return (\n <div className={styles.wrapper}>\n {loading && <LinearLoadIndicator />}\n {tasks &&\n tasks.map((task) => {\n return <WorkflowTaskCard key={task.taskId} task={task} />;\n })}\n </div>\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: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M4 17.17L5.17 16H20V4H4v13.17zM20 2c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H6l-4 4V4c0-1.1.9-2 2-2h16zm-3 9H7v2h10v-2zm0-4H7v2h10V7z\",\n id: \"svg2697213709a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"g\", null, React.createElement(\"g\", {\n transform: \"translate(-2 -2)\"\n}, React.createElement(\"mask\", {\n id: \"svg2697213709b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2697213709a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2697213709b)\",\n d: \"M0 0h24v24H0z\"\n}))))));","import React, {useContext, VFC} from 'react';\nimport {Badge as Badge} from '@material-ui/core';\nimport CollaborationIcon from '../../icons/CollaborationIcon.svg';\nimport {CollaborationContext} from '@reltio/components';\nimport {calcTotalCommentItems} from '@reltio/mdm-sdk';\nimport {useStyles} from '../../styles';\n\nexport const CollaborationButton: VFC = () => {\n const {commentsMap} = useContext(CollaborationContext);\n const styles = useStyles();\n return (\n <Badge\n badgeContent={calcTotalCommentItems(commentsMap)}\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <CollaborationIcon />\n </Badge>\n );\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SidePanelEmptyState} from '@reltio/components';\n\nconst WorkflowPanelEmptyState = () => (\n <SidePanelEmptyState\n text={i18n.text('Ready to go with the flow?')}\n secondaryText={i18n.text(\n 'Suggest a change or submit a match review, and we’ll kick off a workflow task to get things going.'\n )}\n />\n);\n\nexport default WorkflowPanelEmptyState;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SidePanelEmptyState} from '@reltio/components';\n\nconst CollaborationPanelEmptyState = () => (\n <SidePanelEmptyState\n text={i18n.text('Care to join the conversation?')}\n secondaryText={i18n.text(\n 'Leave comments for team members anywhere in the Profile page, and we’ll record it here.'\n )}\n />\n);\n\nexport default CollaborationPanelEmptyState;\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 d: \"M14.101 16A5.003 5.003 0 0016 18.987V20H2v-4h12.101zM22 18.987V20v-1.013zM4 17v2h2v-2H4zM16 4v1.013A5.004 5.004 0 0014.101 8H2V4h14zm6 0v1.013V4zM6 7V5H4v2h2zm8 3v4H2v-4h12zM4 11v2h2v-2H4zm12 4v-2h6v2c0 1.3-.84 2.4-2 2.82V22h-2v-4.18c-1.16-.42-2-1.52-2-2.82zm0-6c0-1.3.84-2.4 2-2.82V2h2v4.18c1.16.42 2 1.52 2 2.82v2h-6V9z\",\n fill: \"#000\",\n fillOpacity: \".54\"\n})));","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n display: 'flex',\n flexDirection: 'column'\n },\n itemWrapper: {\n paddingLeft: '19px',\n paddingRight: '19px'\n }\n});\n","import React from 'react';\nimport {CustomActionViewConfig} from '@reltio/mdm-sdk';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {CustomView} from '../../../Sandbox/CustomView';\nimport {useStyles} from './styles';\n\nexport const DBConnectorsList = () => {\n const styles = useStyles();\n const dBConnectorSideViews = useSelector(mdm.selectors.getDBConnectorSideViews) as CustomActionViewConfig[];\n\n return (\n <div className={styles.wrapper}>\n {dBConnectorSideViews.map((sideView) => (\n <CustomView key={sideView.id} config={sideView} className={styles.itemWrapper} />\n ))}\n </div>\n );\n};\n","import React, {useCallback, useContext, useEffect, useState} from 'react';\nimport {pipe, propEq, reject, pluck} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport {\n CollaborationContext,\n SideButtonsPanel,\n SidePanelContentHeader,\n SidePanel,\n WorkflowTasksContext,\n AddWorkflowButton,\n HistoryView,\n HistoryHeader,\n HistoryPanelEmptyState,\n useHistory,\n useHistoryEnabled\n} from '@reltio/components';\nimport {calcTotalCommentItems, Entity, getEntityType, isTempUri, Metadata} from '@reltio/mdm-sdk';\nimport mdm, {HistoryEvent} from '@reltio/mdm-module';\nimport HistoryIcon from '@material-ui/icons/History';\nimport {WorkflowButton} from './components/WorkflowButton/WorkflowButton';\nimport {CollaborationList} from './components/CollaborationList/CollaborationList';\nimport {WorkflowList} from './components/WorkflowList/WorkflowList';\nimport {CollaborationButton} from './components/CollaborationButton/CollaborationButton';\nimport WorkflowPanelEmptyState from './components/WorkflowPanelEmptyState/WorkflowPanelEmptyState';\nimport CollaborationPanelEmptyState from './components/CollaborationPanelEmptyState/CollaborationPanelEmptyState';\nimport ConnectorsIcon from './icons/ConnectorsIcon.svg';\nimport {DBConnectorsList} from './components/DBConnectorsList/DBConnectorsList';\n\nimport {useStyles} from './styles';\n\nconst DEFAULT_PANEL_WIDTH = 480;\nexport enum ActivePanel {\n Workflow,\n Collaboration,\n History,\n DBConnector\n}\nconst getSecondTitle = (total: number): string => {\n if (total) {\n return total === 1 ? i18n.text('${total} item', {total}) : i18n.text('${total} items', {total});\n }\n};\n\ntype Props = {\n commentId?: string;\n};\n\nexport const RightSidePanel = ({commentId}: Props) => {\n const styles = useStyles();\n const isWorkflowSideViewEnabled = useSelector(mdm.selectors.isWorkflowSideViewEnabled) as boolean;\n const isWorkflowEnabled = useSelector(mdm.selectors.isWorkflowEnabled) as boolean;\n const isCollaborationSideViewEnabled = useSelector(mdm.selectors.isCollaborationSideViewEnabled) as boolean;\n const isDBConnectorSideViewEnabled = useSelector(mdm.selectors.isDBConnectorSideViewEnabled) as boolean;\n const isCollaborationEnabled = useSelector(mdm.selectors.isCollaborationEnabled) as boolean;\n const historyEvent: HistoryEvent = useSelector(mdm.selectors.getHistoryEvent);\n const metadata: Metadata = useSelector(mdm.selectors.getMetadata);\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n\n const workflowTasksContext = useContext(WorkflowTasksContext);\n const collaborationContext = useContext(CollaborationContext);\n\n const [active, setActive] = useState<ActivePanel>(commentId ? ActivePanel.Collaboration : null);\n const toggleActive = useCallback((newId: ActivePanel): void => {\n setActive((active) => (active === newId ? null : newId));\n }, []);\n const resetActive = useCallback((): void => {\n setActive(null);\n }, []);\n const isOpen = active !== null;\n const isHistoryTabActive = active === ActivePanel.History;\n const {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({isHistoryTabActive, entity});\n\n const {historyFilter, onApplyFilter, isLoading, historicUris, historyWithTotal, canLoadMore, onLoadMore} =\n useHistory({entity, enabled: isHistoryEnabled});\n\n const enabledWorkflowButton = isWorkflowSideViewEnabled && isWorkflowEnabled && !isTempUri(entity?.uri);\n const enabledCollaborationButton = isCollaborationSideViewEnabled && isCollaborationEnabled;\n const collaborationTotal = calcTotalCommentItems(collaborationContext?.commentsMap);\n\n const elements = [\n {\n buttonProps: {\n id: ActivePanel.Workflow,\n icon: WorkflowButton,\n tooltipTitle: i18n.text('Workflow')\n },\n content: workflowTasksContext?.total ? <WorkflowList /> : <WorkflowPanelEmptyState />,\n headerProps: {\n mainTitle: i18n.text('Workflow'),\n secondTitle: getSecondTitle(workflowTasksContext?.total),\n rightContent: <AddWorkflowButton />\n },\n hidden: !enabledWorkflowButton\n },\n {\n buttonProps: {\n id: ActivePanel.Collaboration,\n icon: CollaborationButton,\n tooltipTitle: i18n.text('Collaboration')\n },\n content: collaborationTotal ? <CollaborationList /> : <CollaborationPanelEmptyState />,\n headerProps: {\n mainTitle: i18n.text('Collaboration'),\n secondTitle: getSecondTitle(collaborationTotal)\n },\n hidden: !enabledCollaborationButton\n },\n {\n buttonProps: {\n id: ActivePanel.History,\n icon: HistoryIcon,\n tooltipTitle: i18n.text('History')\n },\n content: isProfilePersisted ? (\n <HistoryView\n isLoading={isLoading}\n historyWithTotal={historyWithTotal}\n contributorsUris={historicUris}\n entityUri={entity?.uri}\n historyEvent={historyEvent}\n onLoadMore={onLoadMore}\n canLoadMore={canLoadMore}\n />\n ) : (\n <HistoryPanelEmptyState />\n ),\n headerProps: {\n content: (\n <HistoryHeader\n total={isProfilePersisted ? (historicUris?.length || 0) + 1 : undefined}\n entityType={getEntityType(metadata, entity?.type)}\n filter={historyFilter}\n onApplyFilter={onApplyFilter}\n />\n )\n }\n },\n {\n buttonProps: {\n id: ActivePanel.DBConnector,\n icon: ConnectorsIcon,\n tooltipTitle: i18n.text('D&B Connector')\n },\n content: <DBConnectorsList />,\n headerProps: {\n mainTitle: i18n.text('D&B Connector')\n },\n hidden: !isDBConnectorSideViewEnabled\n }\n ];\n\n const visibleElements = reject(propEq('hidden', true))(elements);\n\n useEffect(() => {\n if (elements[active]?.hidden) {\n resetActive();\n }\n }, [active, elements, resetActive, visibleElements]);\n\n return (\n <div className={styles.wrapper}>\n <SidePanel open={isOpen} width={DEFAULT_PANEL_WIDTH}>\n {!elements[active]?.hidden && (\n <>\n <SidePanelContentHeader {...elements[active]?.headerProps} onClose={resetActive} />\n {elements[active]?.content}\n </>\n )}\n </SidePanel>\n <SideButtonsPanel\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(elements)}\n onButtonClick={toggleActive}\n activeIndexId={active}\n />\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst accordionSummaryHeight = '48px';\nconst defaultBorderStyle = '1px solid rgba(0, 0, 0, .125)';\n\nconst useStyles = makeStyles((theme) => ({\n accordion: {\n borderTop: defaultBorderStyle,\n borderBottom: defaultBorderStyle,\n fontSize: '13px',\n boxShadow: 'none',\n '&:not(:first-child)': {\n borderTop: 0\n },\n '&:before': {\n display: 'none'\n },\n '&$accordionExpanded': {\n margin: 'auto'\n }\n },\n accordionExpanded: {},\n accordionSummary: {\n display: 'flex',\n alignItems: 'center',\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight,\n '&$accordionSummaryExpanded': {\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight\n }\n },\n accordionSummaryHeading: {\n flex: 1,\n fontSize: theme.typography.pxToRem(13),\n fontWeight: theme.typography.fontWeightRegular\n },\n accordionSummaryExpanded: {},\n accordionSummaryContent: {\n display: 'flex',\n alignItems: 'center'\n },\n accordionDetails: {\n maxHeight: '21vh',\n overflow: 'auto',\n paddingTop: 0,\n paddingBottom: 0,\n '& ul': {\n paddingLeft: '23px',\n marginTop: '3px'\n },\n '& li': {\n paddingLeft: '9px',\n paddingBottom: '8px'\n }\n },\n parents: {\n color: theme.palette.text.primary\n },\n errorWrapper: {\n lineHeight: '18px',\n display: 'flex',\n flexDirection: 'column'\n },\n errorTitle: {\n display: 'flex',\n alignItems: 'center'\n },\n attributeTypesPath: {\n color: theme.palette.text.secondary\n },\n goToIcon: {\n marginLeft: '4px'\n },\n errorsAccordion: {\n backgroundColor: '#FFF4F6',\n borderColor: '#FFB8B3'\n },\n errorsAccordionDetails: {\n color: '#DD2C00'\n },\n warningsAccordion: {\n backgroundColor: '#FFF9ED',\n borderColor: '#FFDD91'\n },\n warningsAccordionDetails: {\n color: '#CC7500'\n },\n icon: {\n marginRight: '8px'\n },\n errorIcon: {\n fill: '#FF1744'\n },\n warningIcon: {\n fill: '#F9A825'\n }\n}));\n\nexport default useStyles;\n","import React, {memo, ReactNode, ElementType} from 'react';\nimport classnames from 'classnames';\nimport {Accordion as Accordion} from '@material-ui/core';\nimport {AccordionSummary as AccordionSummary} from '@material-ui/core';\nimport {AccordionDetails as AccordionDetails} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport useStyles from '../styles';\n\nimport {AttributeError} from '@reltio/mdm-sdk';\n\ntype Props = {\n panels: {\n id: string;\n title: string;\n icon: ReactNode;\n items: AttributeError[];\n accordionClassName: string;\n accordionDetailsClassName: string;\n }[];\n expandedPanelId: string;\n onToggle: (id: string) => (e, isExpanded: boolean) => void;\n ErrorComponent: ElementType;\n};\n\nexport const ErrorsPanel = memo(({panels, expandedPanelId, onToggle, ErrorComponent}: Props) => {\n const styles = useStyles();\n\n return panels.length > 0 ? (\n <div>\n {panels.map(({id, icon, title, items, accordionClassName, accordionDetailsClassName}) => (\n <Accordion\n key={id}\n square\n expanded={expandedPanelId === id}\n onChange={onToggle(id)}\n className={accordionClassName}\n classes={{root: styles.accordion, expanded: styles.accordionExpanded}}\n >\n <AccordionSummary\n classes={{\n root: styles.accordionSummary,\n expanded: styles.accordionSummaryExpanded,\n content: styles.accordionSummaryContent\n }}\n expandIcon={<ExpandMoreIcon />}\n >\n {icon}\n <Typography className={styles.accordionSummaryHeading}>{title}</Typography>\n </AccordionSummary>\n <AccordionDetails className={classnames(styles.accordionDetails, accordionDetailsClassName)}>\n <ul>\n {items.map((error, i) => (\n <ErrorComponent key={i} error={error} />\n ))}\n </ul>\n </AccordionDetails>\n </Accordion>\n ))}\n </div>\n ) : null;\n});\n\nErrorsPanel.displayName = 'ErrorsPanel';\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: \"18\",\n height: \"18\",\n viewBox: \"0 0 18 18\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M14.245 12.75c0 .825-.467 1.5-1.045 1.5H4.8c-.583 0-1.05-.675-1.05-1.5v-7.5c0-.832.467-1.5 1.05-1.5h8.4c.578 0 1.05.668 1.05 1.5l-.005 7.5zM9.75 9.96v1.642l3-2.805L9.75 6v1.598c-2.918.404-4.08 2.4-4.5 4.402 1.043-1.402 2.415-2.04 4.5-2.04z\",\n fill: \"#000\",\n fillOpacity: \".54\"\n})));","import {either, equals, identity, omit, path} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {\n AttributeError,\n AttributeType,\n AttributeValuePathItemType,\n ErrorSource,\n ErrorType,\n findAttributeTypeByUri,\n Metadata\n} from '@reltio/mdm-sdk';\n\nconst clearError = omit(['deactivated', 'path']);\nexport const areErrorsEqual = (errors1: AttributeError[] = [], errors2: AttributeError[] = []) =>\n errors1.length === errors2.length && equals(errors1.map(clearError), errors2.map(clearError));\n\nexport const getDisplayedErrorMessage = (\n metadata: Metadata,\n {type, source, message, attributeTypeUri = '', attributeType}: AttributeError\n) => {\n if (type === ErrorType.missed && source === ErrorSource.local) {\n const attrType: AttributeType = attributeType || findAttributeTypeByUri(metadata, attributeTypeUri);\n return attrType ? i18n.text('${attribute} is required', {attribute: attrType.label}) : message;\n }\n return message;\n};\n\nexport const getDisplayedErrorPath = ({path: errorPath, uri}: AttributeError) => {\n return errorPath\n ?.slice(0, uri ? errorPath.length - 1 : errorPath.length)\n .filter(({type}) =>\n [AttributeValuePathItemType.attributeValue, AttributeValuePathItemType.relationConnection].includes(type)\n )\n .map(({label}) => label)\n .filter(identity)\n .join(' / ');\n};\n\nexport const getDisplayedAttributeTypesPath = ({path: errorPath}: AttributeError) => {\n return errorPath\n ?.filter(({type}) => type === AttributeValuePathItemType.attributeValue)\n .map(either(path(['valueType', 'label']), path(['valueType', 'name'])))\n .filter(identity)\n .join(' > ');\n};\n","import React, {memo, useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {AttributeError, Metadata} from '@reltio/mdm-sdk';\nimport HyperlinkIcon from '../icons/hyperlink.svg';\nimport {SmallIconButtonWithTooltip, ScrollToErrorContext} from '@reltio/components';\nimport {getDisplayedAttributeTypesPath, getDisplayedErrorMessage, getDisplayedErrorPath} from '../helpers';\n\nimport useStyles from '../styles';\n\ntype Props = {\n error: AttributeError;\n};\n\nexport const Error = memo(({error}: Props) => {\n const styles = useStyles();\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const isEditableMode: boolean = useSelector(mdmModule.selectors.getIsEditableMode);\n const displayedMessage = getDisplayedErrorMessage(metadata, error);\n const displayedErrorPath = getDisplayedErrorPath(error);\n const displayedAttributeTypesPath = getDisplayedAttributeTypesPath(error);\n const {highlightError} = useContext(ScrollToErrorContext);\n const showLink = error.uri || (error.parentUri && error.attributeTypeUri);\n\n return (\n <li>\n <div className={styles.errorWrapper}>\n {displayedAttributeTypesPath && (\n <span className={styles.attributeTypesPath}>{displayedAttributeTypesPath}</span>\n )}\n <span className={styles.errorTitle}>\n {displayedMessage}\n {showLink && isEditableMode && (\n <SmallIconButtonWithTooltip\n icon={HyperlinkIcon}\n size=\"XXS\"\n onClick={() => highlightError(error)}\n tooltipTitle={i18n.text('Go to error')}\n className={styles.goToIcon}\n />\n )}\n </span>\n {displayedErrorPath && <span className={styles.parents}>{displayedErrorPath}</span>}\n </div>\n </li>\n );\n});\n\nError.displayName = 'Error';\n","import {useRef} from 'react';\nimport {areErrorsEqual} from './helpers';\n\nexport const useCachedErrors = (allErrors) => {\n const cacheForAllErrors = useRef(allErrors);\n const areEqualErrors = areErrorsEqual(allErrors, cacheForAllErrors.current);\n if (!areEqualErrors) {\n cacheForAllErrors.current = allErrors;\n }\n return cacheForAllErrors.current;\n};\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {partition} from 'ramda';\nimport ErrorIcon from '@material-ui/icons/Warning';\nimport WarningIcon from '@material-ui/icons/Error';\nimport mdmModule from '@reltio/mdm-module';\nimport {AttributeError, isCriticalError} from '@reltio/mdm-sdk';\n\nimport useStyles from './styles';\n\nimport {ErrorsPanel} from './components/ErrorsPanel';\nimport {Error} from './components/Error';\nimport {useCachedErrors} from './useCachedErrors';\n\nexport const ProfileErrorsPanel = () => {\n const styles = useStyles();\n const allErrors = useSelector(mdmModule.selectors.getProfileErrors);\n const cachedAllErrors = useCachedErrors(allErrors);\n\n const [errors, warnings]: [AttributeError[], AttributeError[]] = useMemo(\n () => partition(isCriticalError, cachedAllErrors),\n [cachedAllErrors]\n );\n const [expandedPanelId, setExpandedPanelId] = useState(null);\n const panels = useMemo(\n () =>\n [\n {\n id: 'errors',\n title: i18n.text('${number} ${errors}', {\n number: errors.length,\n errors: errors.length === 1 ? i18n.text('error') : i18n.text('errors')\n }),\n icon: <ErrorIcon className={classnames(styles.icon, styles.errorIcon)} />,\n items: errors,\n accordionClassName: styles.errorsAccordion,\n accordionDetailsClassName: styles.errorsAccordionDetails\n },\n {\n id: 'warnings',\n title: i18n.text('${number} ${warnings}', {\n number: warnings.length,\n warnings: warnings.length === 1 ? i18n.text('warning') : i18n.text('warnings')\n }),\n icon: <WarningIcon className={classnames(styles.icon, styles.warningIcon)} />,\n items: warnings,\n accordionClassName: styles.warningsAccordion,\n accordionDetailsClassName: styles.warningsAccordionDetails\n }\n ].filter(({items}) => items.length > 0),\n [errors, warnings, styles]\n );\n\n useEffect(() => {\n setExpandedPanelId('errors');\n }, [errors]);\n\n const handleChange = useCallback(\n (panelId: string) => (event, isExpanded: boolean) => {\n setExpandedPanelId(isExpanded ? panelId : null);\n },\n []\n );\n\n return panels.length > 0 ? (\n <ErrorsPanel panels={panels} expandedPanelId={expandedPanelId} onToggle={handleChange} ErrorComponent={Error} />\n ) : null;\n};\n","import {useCallback, useEffect, useMemo, useState} from 'react';\nimport hash from 'object-hash';\nimport {useSavedStateForEntityType, useConfigPermissions} from '@reltio/components';\nimport {\n debounce,\n fixNonUniqViewsIds,\n ProfilePerspectiveConfig,\n ProfileViewConfig,\n ReltioGridLayoutItem,\n removeUnsupportedLayoutItems\n} from '@reltio/mdm-sdk';\nimport {ProfileSavedState, Layout} from '../../../types';\n\ntype Props = {\n config: ProfilePerspectiveConfig;\n entityTypeUri?: string;\n saveState: (state: Record<string, ProfileSavedState>) => void;\n getSavedState: () => Promise<Record<string, ProfileSavedState>>;\n};\n\nconst SAVE_STATE_DEBOUNCE_DELAY = 1000;\nconst emptyState = {} as ProfileSavedState;\nexport const useProfileLayout = ({config: profileConfig, entityTypeUri, saveState, getSavedState}: Props) => {\n const [layout, setLayout] = useState<Layout>([]);\n const [views, setViews] = useState<ProfilePerspectiveConfig['views']>([]);\n\n const {canRead} = useConfigPermissions();\n const config: ProfilePerspectiveConfig = useMemo(() => {\n const validatedViews = profileConfig.views.filter(canRead);\n const validatedLayout = removeUnsupportedLayoutItems(profileConfig.layout, validatedViews);\n return {...profileConfig, views: validatedViews, layout: validatedLayout};\n }, [profileConfig, canRead]);\n\n const configHash = useMemo(() => hash(config), [config]);\n const nestedRoute = config?.nestedRoute ? `/${config.nestedRoute}` : '';\n const savedStateKey = entityTypeUri && config ? entityTypeUri + nestedRoute : null;\n\n const getSavedStateAndFix = useCallback(() => {\n return getSavedState().then((state) => (state.layout ? {} : state));\n }, [getSavedState]);\n const debouncedSaveState = useCallback(debounce(saveState, SAVE_STATE_DEBOUNCE_DELAY), [saveState]) as (\n state: Record<string, ProfileSavedState>\n ) => void;\n const {\n isLoaded,\n savedState = emptyState,\n updateSavedState\n } = useSavedStateForEntityType<ProfileSavedState>({\n getSavedState: getSavedStateAndFix,\n saveState: debouncedSaveState,\n entityTypeUri: savedStateKey\n });\n\n const handleLayoutChange = useCallback(\n (layout: Layout) => {\n updateSavedState({layout, views, configHash});\n setLayout(layout);\n },\n [updateSavedState, configHash, views]\n );\n\n useEffect(() => {\n if (isLoaded) {\n const isConfigChanged = configHash !== savedState.configHash;\n const {views: fixedViews, layout: fixedLayout} = fixNonUniqViewsIds<\n ProfileViewConfig,\n ReltioGridLayoutItem\n >({\n views: isConfigChanged || !savedState.views ? config.views : savedState.views,\n layout: isConfigChanged ? config.layout : savedState.layout\n });\n setViews(fixedViews);\n setLayout(fixedLayout);\n }\n }, [isLoaded, savedState, savedStateKey]); // eslint-disable-line\n\n return {views, layout, isLoaded, handleLayoutChange};\n};\n","import {useWorkflowDefaultActionSuccessHandler, useWorkflowTasks as useCommonWorkflowTasks} from '@reltio/components';\nimport {useMemo} from 'react';\n\nexport const useWorkflowTasks = (workflowConfig: Parameters<typeof useCommonWorkflowTasks>[0]) => {\n const commonWorkflowTasks = useCommonWorkflowTasks(workflowConfig);\n const defaultActionSuccessHandler = useWorkflowDefaultActionSuccessHandler();\n\n return useMemo(\n () => ({\n ...commonWorkflowTasks,\n onActionSuccess: defaultActionSuccessHandler\n }),\n [commonWorkflowTasks, defaultActionSuccessHandler]\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\ntype Props = {\n maxWidth?: number;\n};\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 emptyState: {\n backgroundColor: '#FAFAFA',\n height: '100%'\n },\n profileWrapper: ({maxWidth}: Props) => ({\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n flexGrow: 1,\n maxWidth: maxWidth ? `${maxWidth}px` : '100%'\n }),\n profileContainer: {\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, useContext, useMemo, useEffect} from 'react';\nimport i18n from 'ui-i18n';\nimport {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Entity, getProfileObjectIdsForCollaboration, Mode, ProfilePerspectiveConfig, isTempUri} from '@reltio/mdm-sdk';\nimport mdm, {HistoryEvent} from '@reltio/mdm-module';\nimport {\n CollaborationContext,\n WorkflowTasksContext,\n EMPTY_STATE_ICONS,\n EMPTY_STATE_VARIANTS,\n EmptyState,\n LinearLoadIndicator,\n ProfilePerspectiveViewContext,\n SearchValueContext,\n useCollaboration,\n HistoryDiffContext,\n useHistoryDiff,\n useHistorySlice,\n ScrollToErrorProvider,\n CollaborationContextProvider\n} from '@reltio/components';\nimport {ProfileSavedState} from '../../types';\n\nimport {ProfileLayout} from '../ProfileLayout';\nimport {Notifications} from '../Notifications';\nimport {PerspectiveProfileBand} from '../PerspectiveProfileBand';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\nimport {ProfileErrorsPanel} from '../ProfileErrorsPanel';\nimport {useProfileValidation} from '../hooks/useProfileValidation';\nimport {useProfileLayout} from './hooks/useProfileLayout';\nimport {useWorkflowTasks} from './hooks/useWorkflowTasks';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: ProfilePerspectiveConfig;\n saveState: (state: Record<string, ProfileSavedState>) => void;\n getSavedState: () => Promise<Record<string, ProfileSavedState>>;\n commentId?: string;\n};\n\nconst ProfilePerspectiveView = memo(({config, saveState, getSavedState, commentId}: Props) => {\n const {maxWidth, profileBand, workflow} = config || {};\n const styles = useStyles({maxWidth});\n\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n const historyEvent: HistoryEvent = useSelector(mdm.selectors.getHistoryEvent);\n const isHistoryActive = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const keywordValue = useSelector(mdm.selectors.getSearchKeyword)?.value || '';\n const mode = useSelector(mdm.selectors.getMode);\n\n const dispatch = useDispatch();\n const historyDiff = useHistoryDiff();\n const workflowTasks = useWorkflowTasks(workflow);\n\n const {type: entityTypeUri, uri: entityUri} = entity || {};\n const objectIds = useMemo(() => getProfileObjectIdsForCollaboration(entity), [entity]);\n const emptyCollaboration = useContext(CollaborationContext);\n const collaboration = useCollaboration({objectIds});\n\n const {views, layout, isLoaded, handleLayoutChange} = useProfileLayout({\n config,\n entityTypeUri,\n saveState,\n getSavedState\n });\n useHistorySlice({entity, historyEvent});\n useProfileValidation();\n\n useEffect(() => {\n dispatch(profile.views.actions.profileViewsSet(views));\n }, [dispatch, views]);\n\n useEffect(() => {\n if (config.sidePanelViews) {\n dispatch(profile.sidePanelViews.actions.sidePanelViewsLoaded(config.sidePanelViews));\n }\n }, [config]); // eslint-disable-line\n\n // possible for a short time during createProfile saga execution\n const hideLayout = mode === Mode.Viewing && isTempUri(entityUri);\n\n return (\n <ProfilePerspectiveViewContext.Provider value={true}>\n <CollaborationContextProvider collaboration={isHistoryActive ? emptyCollaboration : collaboration}>\n <WorkflowTasksContext.Provider value={workflowTasks}>\n <HistoryDiffContext.Provider value={historyDiff}>\n <SearchValueContext.Provider value={keywordValue}>\n <ScrollToErrorProvider>\n <div className={styles.perspectiveView}>\n {(!isLoaded || !entityUri) && <LinearLoadIndicator />}\n {isLoaded && entityUri ? (\n <div className={styles.profileContainer}>\n <div className={styles.profileWrapper}>\n <PerspectiveProfileBand profileBandConfig={profileBand} />\n {!isHistoryActive && <ProfileErrorsPanel />}\n {!hideLayout && (\n <ProfileLayout\n maxWidth={maxWidth}\n views={views}\n layout={layout}\n entityUri={entityUri}\n onLayoutChanged={handleLayoutChange}\n />\n )}\n </div>\n <RightSidePanel commentId={commentId} />\n </div>\n ) : (\n <div className={styles.emptyState}>\n <EmptyState\n LogoRenderer={EMPTY_STATE_ICONS.NO_DATA}\n text={i18n.text('No data to display.')}\n variant={EMPTY_STATE_VARIANTS.embedded}\n />\n </div>\n )}\n <Notifications />\n </div>\n </ScrollToErrorProvider>\n </SearchValueContext.Provider>\n </HistoryDiffContext.Provider>\n </WorkflowTasksContext.Provider>\n </CollaborationContextProvider>\n </ProfilePerspectiveViewContext.Provider>\n );\n});\n\nProfilePerspectiveView.displayName = 'ProfilePerspectiveView';\n\nexport {ProfilePerspectiveView};\n","import {useCallback, useEffect} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {debounce, Entity, isDataTenantEntity, isTempUri, Mode} from '@reltio/mdm-sdk';\n\nexport const useProfileValidation = () => {\n const dispatch = useDispatch();\n const isValidateReadMode: boolean = useSelector(mdmModule.selectors.getValidateReadMode);\n const entity: Entity = useSelector(mdmModule.selectors.getEntity) || ({} as Entity);\n const {uri, updatedTime} = entity;\n const isDTEntity = isDataTenantEntity(entity);\n const mode: Mode = useSelector(mdmModule.selectors.getMode);\n const profileViews = useSelector(mdmModule.selectors.getProfileViews);\n const hasProfileViews = profileViews && profileViews.length > 0;\n\n const validate = useCallback(\n debounce((needDispatch: boolean) => {\n if (needDispatch) {\n dispatch(profile.actions.validateProfile());\n }\n }, 500),\n [dispatch]\n );\n\n useEffect(() => {\n const needDispatch =\n isValidateReadMode && !isDTEntity && uri && !isTempUri(uri) && mode === Mode.Viewing && hasProfileViews;\n validate(needDispatch);\n }, [validate, isDTEntity, isValidateReadMode, updatedTime, uri, mode, hasProfileViews]);\n};\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport MomentUtils from '@date-io/moment';\nimport {identity} from 'ramda';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport {\n ErrorPopup,\n FeaturesContext,\n SandboxAPIContext,\n SnackbarContext,\n useSnackbar,\n ViewIdContext\n} from '@reltio/components';\nimport {\n convertOldProfileConfig,\n ProfilePerspectiveConfig,\n promisifyCallback,\n QxSandboxApi,\n userPreferencesComparator\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {ProfileSavedState} from '../types';\nimport ProfilePerspectiveView from '../components/ProfilePerspectiveView';\nimport {equalsState} from './helpers';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'profilePerspective',\n disableGlobal: true\n});\n\nuserPreferencesComparator.register('profile', equalsState);\n\ntype Props = {\n config: ProfilePerspectiveConfig;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n saveState: (state: Record<string, ProfileSavedState>) => void;\n getSavedState: (clb: (state: Record<string, ProfileSavedState>) => void) => void;\n qxSandboxApi?: QxSandboxApi;\n commentId?: string;\n};\n\nconst ProfilePerspective = ({\n config,\n store,\n onResize = identity,\n saveState,\n getSavedState,\n qxSandboxApi,\n commentId\n}: Props) => {\n const getSavedStatePromisified: () => Promise<Record<string, ProfileSavedState>> = useCallback(\n promisifyCallback(getSavedState),\n [getSavedState]\n );\n const {SnackbarRenderer, showSnackbarMessage} = useSnackbar();\n\n const processedConfig = useMemo(() => config && convertOldProfileConfig(config), [config]);\n const featuresContext = useContext(FeaturesContext);\n const showDescription = mdmModule.selectors.getShowAttributeDescription(store.getState());\n const features = useMemo(() => ({...featuresContext, showDescription}), [featuresContext, showDescription]);\n\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={processedConfig?.id}>\n <SnackbarContext.Provider value={showSnackbarMessage}>\n <SandboxAPIContext.Provider value={qxSandboxApi}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <FeaturesContext.Provider value={features}>\n <>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) =>\n onResize(Math.floor(width), Math.floor(height))\n }\n />\n {processedConfig && (\n <ProfilePerspectiveView\n config={processedConfig}\n saveState={saveState}\n getSavedState={getSavedStatePromisified}\n commentId={commentId}\n />\n )}\n <ErrorPopup showErrorFromStore={true} />\n <SnackbarRenderer />\n </>\n </FeaturesContext.Provider>\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </SandboxAPIContext.Provider>\n </SnackbarContext.Provider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default ProfilePerspective;\n","import {evolve, ifElse, map, omit, pipe, propEq, sort} from 'ramda';\nimport {looseEquals} from '@reltio/mdm-sdk';\nimport {Layout, ProfileSavedState} from '../types';\n\nexport const equalsState = (\n newState: Record<string, ProfileSavedState>,\n savedState: Record<string, ProfileSavedState> | null\n) => {\n const sortLayoutItems = (layout: Layout) =>\n sort((a, b) => (a.x > b.x || (a.x === b.x && a.y > b.y) ? 1 : -1), layout);\n const prepareState = map((item: ProfileSavedState) =>\n evolve(\n {\n layout: pipe(\n sortLayoutItems,\n map(\n ifElse(\n propEq('autosizing', true),\n omit(['y', 'height', 'minHeight', 'maxHeight']),\n omit(['y', 'minHeight', 'maxHeight'])\n )\n )\n )\n },\n item\n )\n );\n return looseEquals(prepareState(newState), prepareState(savedState));\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n titleContainer: {\n overflow: 'hidden',\n fontSize: '16px',\n fontWeight: 'normal',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n alignItems: 'center',\n display: 'flex',\n minHeight: '48px',\n color: theme.palette.text.secondary\n },\n link: {\n fontSize: '16px',\n fontWeight: 'normal'\n },\n icon: {\n height: '18px',\n color: theme.palette.text.secondary\n },\n totalCaption: {\n lineHeight: 'inherit',\n fontSize: '14px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px'\n },\n totalNumber: {\n fontSize: '16px',\n color: 'rgba(0,0,0,0.87)',\n marginRight: '5px',\n fontWeight: 500\n }\n}));\n","import React, {useCallback, useContext} from 'react';\nimport {useDispatch} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {FacetViewHeader, Spacer, ViewIdContext} from '@reltio/components';\nimport {Link as Link} from '@material-ui/core';\nimport ArrowForwardIosRoundedIcon from '@material-ui/icons/ArrowForwardIosRounded';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n total?: number;\n};\n\nexport const TagListHeader = ({total = 0}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const viewId = useContext(ViewIdContext);\n\n const switchToProfile = useCallback(() => {\n dispatch(mdmModuleUi.actions.openPerspective({perspectiveId: 'profile', viewId}));\n }, [dispatch, viewId]);\n\n return (\n <FacetViewHeader title=\"\">\n <div className={styles.titleContainer}>\n <Link\n component=\"button\"\n variant=\"caption\"\n className={styles.link}\n onClick={switchToProfile}\n underline=\"none\"\n >\n {i18n.text('Profile')}\n </Link>\n <ArrowForwardIosRoundedIcon className={styles.icon} />\n {i18n.text('Tags')}\n </div>\n <Spacer />\n <Typography className={styles.totalCaption} variant=\"caption\">\n <span className={styles.totalNumber}>{i18n.number(total, '0,0')}</span>\n {i18n.text('total profiles')}\n </Typography>\n </FacetViewHeader>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n toolbar: {\n display: 'flex',\n flexShrink: 0,\n background: 'white',\n borderBottom: '1px solid rgba(0,0,0,0.1)',\n boxSizing: 'border-box',\n paddingLeft: '16px'\n },\n avatar: {\n color: 'rgba(0, 0, 0, 0.38)',\n marginRight: '12px'\n },\n label: {\n fontSize: '20px',\n letterSpacing: '0.25px',\n lineHeight: '1.2',\n fontWeight: 500,\n color: theme.palette.text.primary,\n wordBreak: 'break-word'\n }\n}));\n","import React from 'react';\nimport TagIcon from '@material-ui/icons/LocalOffer';\nimport {Toolbar as Toolbar} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {useStyles} from './styles';\n\ntype Props = {\n label: string;\n};\n\nexport const TagProfileBand = ({label}: Props) => {\n const styles = useStyles();\n return (\n <Toolbar className={styles.toolbar}>\n <TagIcon className={styles.avatar} />\n <Typography variant=\"h6\" className={styles.label}>\n {label}\n </Typography>\n </Toolbar>\n );\n};\n","import {useCallback, useMemo} from 'react';\nimport {map} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n Entity,\n getFilteredEntities,\n getFilteredEntitiesFromDataTenant,\n getTotals,\n getTotalFromDataTenant,\n TotalResponse,\n SearchFilter,\n GlobalSearchRequestOptions,\n getDataTenantFromEntityUri,\n enrichEntityWithDataTenant\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\n\ntype Props = {\n entityUri: string;\n tag: string;\n};\n\nexport const useTagsProvider = ({entityUri, tag}: Props) => {\n const globalSearchRequestOptions: GlobalSearchRequestOptions = useSelector(\n mdmModule.selectors.getGlobalSearchRequestOptions\n );\n const tenant: string = useSelector(mdmModule.selectors.getTenant);\n const dtssPath: string = useSelector(mdmModule.selectors.getDtssPath);\n const dataTenant = useMemo(() => getDataTenantFromEntityUri(entityUri), [entityUri]);\n const filters: SearchFilter[] = useMemo(() => {\n return [\n {\n filter: 'equals',\n fieldName: 'tags',\n values: [tag]\n }\n ];\n }, [tag]);\n\n const isDT = !!dataTenant;\n\n const getEntities = useCallback(\n (filters: SearchFilter[] = [], options = {}): Promise<Entity[]> => {\n const requestOptions = {\n select: 'uri,label,type,secondaryLabel,defaultProfilePicValue,startDate,endDate',\n ...options\n };\n return isDT\n ? getFilteredEntitiesFromDataTenant({\n filters,\n options: requestOptions,\n customerTenant: tenant,\n dataTenant,\n dtssPath\n }).then(map(enrichEntityWithDataTenant(dataTenant)))\n : getFilteredEntities(filters, requestOptions);\n },\n [isDT, dataTenant, tenant, dtssPath]\n );\n\n const requestEntities = useCallback(\n (max, offset): Promise<Entity[]> => {\n return getEntities(filters, {offset, max, ...globalSearchRequestOptions});\n },\n [filters, globalSearchRequestOptions, getEntities]\n );\n\n const requestTotal = useCallback((): Promise<number> => {\n const options = globalSearchRequestOptions;\n return (isDT\n ? getTotalFromDataTenant({\n filters,\n options,\n customerTenant: tenant,\n dataTenant,\n dtssPath\n })\n : getTotals(filters, options)\n ).then((json) => (json as TotalResponse).total);\n }, [filters, globalSearchRequestOptions, isDT, dataTenant, tenant, dtssPath]);\n\n return {requestEntities, requestTotal};\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 overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.palette.background.default\n },\n tagsContainer: {\n display: 'flex'\n },\n fullHeight: {\n flexGrow: 1,\n height: 0\n },\n tagsView: {\n margin: '16px',\n width: '100%',\n paddingTop: '4px'\n },\n listContainer: {\n flex: 1,\n display: 'flex',\n overflow: 'hidden',\n position: 'relative',\n flexDirection: 'column',\n minHeight: '4px'\n },\n entitiesList: {\n overflowY: 'auto',\n flexGrow: 1\n },\n pagination: {\n flexGrow: 0\n }\n}));\n","import React, {memo, useEffect, useRef, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport mdmModule from '@reltio/mdm-module';\nimport {GlobalSearchRequestOptions} from '@reltio/mdm-sdk';\nimport {BasicTablePagination, BasicView, LinearLoadIndicator, ProfilesList} from '@reltio/components';\nimport {TagListHeader} from './components/TagListHeader';\nimport {TagProfileBand} from './components/TagProfileBand';\nimport {useTag} from './hooks/useTag';\n\nimport {useStyles} from './styles';\n\nconst ROWS_PER_PAGE_OPTIONS = [25, 50, 100];\n\ntype Props = {\n tag?: string;\n entityUri?: string;\n};\n\nconst TagPerspectiveView = memo(({tag, entityUri}: Props) => {\n const styles = useStyles();\n\n const [rowsPerPage, setRowsPerPage] = useState(ROWS_PER_PAGE_OPTIONS[0]);\n const [page, setPage] = useState(0);\n\n const globalSearchRequestOptions: GlobalSearchRequestOptions = useSelector(\n mdmModule.selectors.getGlobalSearchRequestOptions\n );\n\n useEffect(() => {\n setPage(0);\n }, [tag, entityUri, globalSearchRequestOptions]);\n\n const {isLoading, total, entities} = useTag({tag, entityUri, page, rowsPerPage});\n const refScrollBlock = useRef(null);\n\n useEffect(() => {\n if (refScrollBlock.current) {\n refScrollBlock.current.scrollTop = 0;\n }\n }, [entities]);\n\n const hasPagination = total > ROWS_PER_PAGE_OPTIONS[0];\n\n return (\n <div className={styles.perspectiveView}>\n <TagProfileBand label={tag} />\n <div className={classnames(styles.tagsContainer, {[styles.fullHeight]: hasPagination})}>\n <BasicView className={styles.tagsView}>\n <TagListHeader total={total} />\n <div className={styles.listContainer}>\n {isLoading && <LinearLoadIndicator />}\n {total > 0 && (\n <div className={styles.entitiesList} ref={refScrollBlock}>\n <ProfilesList entities={entities} />\n </div>\n )}\n {hasPagination && (\n <div className={styles.pagination}>\n <BasicTablePagination\n count={total}\n rowsPerPageOptions={ROWS_PER_PAGE_OPTIONS}\n rowsPerPage={rowsPerPage}\n page={page}\n onChangePage={setPage}\n onChangeRowsPerPage={setRowsPerPage}\n />\n </div>\n )}\n </div>\n </BasicView>\n </div>\n </div>\n );\n});\n\nTagPerspectiveView.displayName = 'TagPerspectiveView';\n\nexport {TagPerspectiveView};\n","import {useCallback, useEffect, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {useDispatch} from 'react-redux';\nimport {useSafePromise} from '@reltio/components';\nimport {ui} from '@reltio/mdm-module';\nimport {Entity, getRequestErrorMessage} from '@reltio/mdm-sdk';\nimport {useTagsProvider} from './useTagsProvider';\n\ntype Props = {\n tag: string;\n entityUri: string;\n page: number;\n rowsPerPage: number;\n};\n\nexport const useTag = ({tag, entityUri, page = 0, rowsPerPage = 50}: Props) => {\n const dispatch = useDispatch();\n\n const safeRequestTotalPromise = useSafePromise();\n const safeRequestEntitiesPromise = useSafePromise();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [total, setTotal] = useState<number>(0);\n const [entities, setEntities] = useState<Entity[]>([]);\n\n const {requestEntities, requestTotal} = useTagsProvider({entityUri, tag});\n\n const onError = useCallback(\n (e) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(e, i18n.text('Something went wrong'))));\n setTotal(0);\n },\n [dispatch]\n );\n\n useEffect(() => {\n safeRequestTotalPromise(requestTotal()).then(setTotal).catch(onError);\n }, [requestTotal, safeRequestTotalPromise, onError]);\n\n useEffect(() => {\n setIsLoading(true);\n safeRequestEntitiesPromise(requestEntities(rowsPerPage, page * rowsPerPage))\n .then(setEntities)\n .catch(onError)\n .finally(() => setIsLoading(false));\n }, [page, rowsPerPage, requestEntities, safeRequestEntitiesPromise, onError]);\n\n return {isLoading, total, entities};\n};\n","import React from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport {identity} from 'ramda';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {TagPerspectiveConfig} from '@reltio/mdm-sdk';\nimport TagPerspectiveView from '../components/TagPerspectiveView';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'tagPerspective',\n disableGlobal: true\n});\n\ntype Props = {\n config: TagPerspectiveConfig;\n tag?: string;\n entityUri?: string;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n};\n\nconst TagPerspective = ({config, tag, entityUri, store, onResize = identity}: Props) => {\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n {config && <TagPerspectiveView tag={tag} entityUri={entityUri} />}\n <ErrorPopup showErrorFromStore={true} />\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default TagPerspective;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n actionsWrapper: {\n display: 'flex',\n '& button + button': {\n width: '88px',\n marginLeft: '8px'\n }\n }\n}));\n","import React, {useContext, useMemo} from 'react';\nimport {ProfileBand, TaskActionButtons, WorkflowTasksContext} from '@reltio/components';\nimport {useSelector} from 'react-redux';\nimport {Entity, getEntityUriFromDCRUri} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {useStyles} from './styles';\n\nexport const DCRProfileBand = () => {\n const styles = useStyles();\n\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n const {tasks} = useContext(WorkflowTasksContext);\n const entityTask = useMemo(() => {\n return tasks?.find((task) => task.objectURIs.includes(getEntityUriFromDCRUri(entity.uri)));\n }, [entity.uri, tasks]);\n\n return (\n <ProfileBand entity={entity}>\n <div className={styles.actionsWrapper}>{entityTask && <TaskActionButtons task={entityTask} />}</div>\n </ProfileBand>\n );\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 overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.palette.background.default\n },\n perspectiveContainer: {\n display: 'flex',\n flexGrow: 1,\n overflow: 'hidden'\n },\n attributesWrapper: {\n margin: '15px',\n flexGrow: 1,\n overflowY: 'auto',\n backgroundColor: '#FAFAFA'\n },\n contentWrapper: {\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n flexGrow: 1\n }\n}));\n","import {useWorkflowTasks as useCommonWorkflowTasks} from '@reltio/components';\nimport mdmModule, {ui} from '@reltio/mdm-module';\nimport {getEntityUriFromDCRUri} from '@reltio/mdm-sdk';\nimport {useCallback, useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nexport const useWorkflowTasks = (workflowConfig: Parameters<typeof useCommonWorkflowTasks>[0]) => {\n const dispatch = useDispatch();\n const entityUri: string = useSelector(mdmModule.selectors.getEntityUri);\n const commonWorkflowTasks = useCommonWorkflowTasks(workflowConfig);\n\n const actionSuccessHandler = useCallback(\n (action: string) => {\n if (action === 'Reject') {\n dispatch(ui.actions.openPerspective({perspectiveId: null, viewId: null}));\n }\n if (action === 'Approve') {\n dispatch(ui.actions.openEntity({uri: getEntityUriFromDCRUri(entityUri), viewId: null}));\n }\n },\n [dispatch, entityUri]\n );\n\n return useMemo(\n () => ({\n ...commonWorkflowTasks,\n onActionSuccess: actionSuccessHandler\n }),\n [commonWorkflowTasks, actionSuccessHandler]\n );\n};\n","import React, {memo, useEffect} from 'react';\nimport {Entity} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport i18n from 'ui-i18n';\nimport {DCRProfileBand} from './components/DCRProfileBand/DCRProfileBand';\nimport {\n AttributesView,\n EMPTY_STATE_ICONS,\n EMPTY_STATE_VARIANTS,\n EmptyState,\n LinearLoadIndicator,\n WorkflowTasksContext\n} from '@reltio/components';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\n\nimport {useStyles} from './styles';\nimport {useWorkflowTasks} from './hooks/useWorkflowTasks';\n\nconst workflowConfig = {processTypes: ['dataChangeRequestReview']};\n\nexport const DCRReviewPerspectiveView = memo(() => {\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const workflowTasks = useWorkflowTasks(workflowConfig);\n\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n\n useEffect(() => {\n dispatch(\n profile.sidePanelViews.actions.sidePanelViewsLoaded([\n {\n id: 'common',\n views: [\n {\n point: 'com.reltio.plugins.ui.view',\n id: 'com.reltio.plugins.entity.side.WorkflowsView',\n class: 'com.reltio.plugins.entity.side.WorkflowsView'\n }\n ]\n }\n ])\n );\n }, [dispatch]);\n\n const isLoaded = !workflowTasks.loading && !!entity.uri;\n\n return (\n <WorkflowTasksContext.Provider value={workflowTasks}>\n <div className={styles.perspectiveView}>\n {!isLoaded && <LinearLoadIndicator />}\n <div className={styles.perspectiveContainer}>\n {isLoaded ? (\n <>\n <div className={styles.contentWrapper}>\n <DCRProfileBand />\n <div className={styles.attributesWrapper}>\n <AttributesView />\n </div>\n </div>\n <RightSidePanel />\n </>\n ) : (\n <EmptyState\n LogoRenderer={EMPTY_STATE_ICONS.NO_DATA}\n text={i18n.text('No data to display.')}\n variant={EMPTY_STATE_VARIANTS.embedded}\n />\n )}\n </div>\n </div>\n </WorkflowTasksContext.Provider>\n );\n});\n\nDCRReviewPerspectiveView.displayName = 'DCRReviewPerspectiveView';\n","import React, {useContext, useMemo} from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport {identity} from 'ramda';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {ErrorPopup, FeaturesContext, ViewIdContext} from '@reltio/components';\nimport {DCRReviewPerspectiveConfig} from '@reltio/mdm-sdk';\nimport MomentUtils from '@date-io/moment';\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport DCRReviewPerspectiveView from '../components/DCRReviewPerspectiveView';\nimport mdmModule from '@reltio/mdm-module';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'dcrReviewPerspective',\n disableGlobal: true\n});\n\ntype Props = {\n config: DCRReviewPerspectiveConfig;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n};\n\nconst DCRReviewPerspective = ({config, store, onResize = identity}: Props) => {\n const featuresContext = useContext(FeaturesContext);\n const showDescription = mdmModule.selectors.getShowAttributeDescription(store.getState());\n const features = useMemo(() => ({...featuresContext, showDescription}), [featuresContext, showDescription]);\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <FeaturesContext.Provider value={features}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n <DCRReviewPerspectiveView />\n <ErrorPopup showErrorFromStore={true} />\n </FeaturesContext.Provider>\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default DCRReviewPerspective;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n addButton: {\n marginLeft: '12px',\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)'\n },\n label: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n }\n});\n","import AddIcon from '@material-ui/icons/Add';\nimport {Button as Button} from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport i18n from 'ui-i18n';\nimport {useStyles} from './styles';\n\nconst AddRelationButton = ({onClick}) => {\n const styles = useStyles();\n return (\n <Button color=\"primary\" className={styles.addButton} onClick={onClick}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.label}>{i18n.text('Add')}</div>\n </Button>\n );\n};\n\nAddRelationButton.propTypes = {\n onClick: PropTypes.func\n};\n\nexport default AddRelationButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst removedStyle = {\n textDecoration: 'line-through',\n color: 'rgba(0,0,0,.54)'\n};\n\nconst inactiveStyle = {\n color: 'rgba(0,0,0,.54)'\n};\n\nexport const useStyles = makeStyles((theme) => ({\n headCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n fontSize: '12px'\n },\n entityCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%'\n },\n entityLabel: {\n fontSize: '15px',\n color: theme.palette.primary.main,\n cursor: 'pointer',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n '$row-cell--removed &': removedStyle,\n '$row-cell--inactive &': inactiveStyle\n },\n entityAvatar: {\n transform: 'scale(0.7)',\n margin: '0 10px'\n },\n rowCell: {\n fontSize: '13px',\n overflow: 'hidden'\n },\n description: {\n marginLeft: '-22px'\n },\n 'row-cell--sorted': {\n color: 'rgba(0,0,0,0.87)'\n },\n 'row-cell--removed': {\n pointerEvents: 'none',\n '& > :not($entityCell)': removedStyle\n },\n 'row-cell--inactive': inactiveStyle\n}));\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport classnames from 'classnames';\nimport {checkRemoved, isActiveObject} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\nconst RowCellRenderer = ({cell, CellValueRenderer, rowValue: {connection}, isSorted, ...otherProps}) => {\n const styles = useStyles();\n const isRemoved = checkRemoved(connection);\n const isActive = isActiveObject(connection.relation) && isActiveObject(connection.entity);\n\n return (\n <div\n className={classnames(\n {\n [styles['row-cell--sorted']]: isSorted,\n [styles['row-cell--removed']]: isRemoved,\n [styles['row-cell--inactive']]: !isActive\n },\n styles.rowCell\n )}\n >\n {cell.values.map((value, index) => (\n <CellValueRenderer key={index} value={value} {...otherProps} />\n ))}\n </div>\n );\n};\n\nRowCellRenderer.propTypes = {\n rowValue: PropTypes.object,\n cell: PropTypes.object,\n CellValueRenderer: PropTypes.elementType,\n isSorted: PropTypes.bool\n};\n\nexport default RowCellRenderer;\n","import PropTypes from 'prop-types';\nimport React, {useContext} from 'react';\nimport {ui} from '@reltio/mdm-module';\nimport {always, pipe} from 'ramda';\nimport {useDispatch} from 'react-redux';\nimport {useStyles} from './styles';\nimport {EntityTypeType, getEntityUriForLink, getLabel} from '@reltio/mdm-sdk';\nimport {EntityTypeIcon, ExpandedValueTooltip, ViewIdContext} from '@reltio/components';\n\nconst EntityProfileRenderer = ({value: {entityType, entity}}) => {\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const styles = useStyles();\n const entityLabel = getLabel(entity.entityLabel);\n const preparedUri = getEntityUriForLink({uri: entity.entityUri, dataTenant: entity.dataTenant});\n return (\n <div className={styles.entityCell}>\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <ExpandedValueTooltip value={entityLabel}>\n <span\n className={styles.entityLabel}\n onClick={pipe(always({uri: preparedUri, viewId}), ui.actions.openEntity, dispatch)}\n >\n {entityLabel}\n </span>\n </ExpandedValueTooltip>\n </div>\n );\n};\n\nEntityProfileRenderer.propTypes = {\n value: PropTypes.shape({\n entity: PropTypes.shape({\n entityUri: PropTypes.string,\n entityLabel: PropTypes.string\n }),\n entityType: EntityTypeType\n })\n};\n\nexport default EntityProfileRenderer;\n","import React from 'react';\n\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {withFilterAtBottom, DescriptionIcon} from '@reltio/components';\nimport {useStyles} from './styles';\n\nconst HeadCellRenderer = (props) => {\n const styles = useStyles();\n const {description} = props?.headCellData || {};\n\n return (\n <div className={styles.headCell}>\n <DefaultHeadCellRenderer {...props} />\n <DescriptionIcon description={description} className={styles.description} />\n </div>\n );\n};\n\nexport default withFilterAtBottom(HeadCellRenderer);\n","import {getOvAttributeValuesByPath, getReadableAttributesList} from '@reltio/mdm-sdk';\nimport {chain, find, map, path, pipe, propEq, uniq} from 'ramda';\n\nconst getRelationTypes = pipe(\n map((rel) => rel.uri || rel),\n uniq\n);\n\nconst getRelationsAttributesFromMetadata = ({content: {inRelations = [], outRelations = []}}, {relationTypes}) =>\n pipe(\n getRelationTypes,\n chain((relationType) => pipe(find(propEq('uri', relationType)), getReadableAttributesList)(relationTypes))\n )([...inRelations, ...outRelations]);\n\nconst getRelationAttributeValues = (attrPath, relation) =>\n pipe(path(['object', 'attributes']), getOvAttributeValuesByPath(attrPath))(relation);\n\nexport {getRelationsAttributesFromMetadata, getRelationAttributeValues};\n","import EntityProfileRenderer from '../cell-renderers/EntityProfileRenderer';\nimport HeadCellRenderer from '../cell-renderers/HeadCellRenderer';\nimport {DefaultCellValueRenderer} from '@reltio/components';\nimport {assoc, map, pipe, reduce, slice, split} from 'ramda';\nimport {getEntityType, getRelationTypeLabelFromMetadata} from '@reltio/mdm-sdk';\nimport {getRelationAttributeValues} from '../../../core/relations';\n\nconst getAttrPathFromColumnId = pipe(split('.'), slice(2, Infinity));\n\nconst getRowValueByColumnId = (columnId, {entity, relation}, metadata) => {\n switch (columnId) {\n case 'entity.label':\n return {entity, entityType: getEntityType(metadata, entity.entityType)};\n case 'relation.label':\n return relation.relationLabel || getRelationTypeLabelFromMetadata(metadata, relation.relationType);\n case 'relation.activeness.startDate':\n return relation.startDate;\n case 'relation.activeness.endDate':\n return relation.endDate;\n default: {\n const attrPath = getAttrPathFromColumnId(columnId);\n return getRelationAttributeValues(attrPath, relation);\n }\n }\n};\n\nconst getBasicTableRowsData = (connections, columnsData, metadata) =>\n connections.map((connection) =>\n pipe(\n reduce((acc, {id}) => assoc(id, getRowValueByColumnId(id, connection, metadata), acc), {}),\n assoc('connection', connection)\n )(columnsData)\n );\n\nconst getNestedPathByColumnId = (columnId) => {\n if (columnId.startsWith('relation.attributes')) {\n const attrPath = getAttrPathFromColumnId(columnId);\n return attrPath.length > 1 ? attrPath.slice(0, -1) : null;\n } else {\n return null;\n }\n};\n\nconst getCellValueRenderer = (columnId) => {\n switch (columnId) {\n case 'entity.label':\n return EntityProfileRenderer;\n default:\n return DefaultCellValueRenderer;\n }\n};\n\nconst getColumnDataByColumnId = (columnData) => ({\n ...columnData,\n sortable: true,\n resizable: true,\n nestedPath: getNestedPathByColumnId(columnData.id),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: getCellValueRenderer(columnData.id)\n});\n\nconst getBasicTableColumnsData = map(getColumnDataByColumnId);\n\nexport {getBasicTableRowsData, getBasicTableColumnsData};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n tableContainer: {\n display: 'flex',\n fontFamily: 'Roboto',\n color: 'rgba(0,0,0,0.54)'\n },\n\n emptyData: {\n marginBottom: '30px'\n },\n\n '@global div[role=tooltip]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n\n '@global div[role=presentation]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n 'row-cell__buttons-container': {\n position: 'absolute'\n },\n 'row-cell__buttons-wrapper': {\n display: 'flex',\n paddingLeft: '10px',\n '& > button': {\n marginLeft: '-10px',\n transform: 'scale(0.9)'\n }\n }\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {IconButton as IconButton} from '@material-ui/core';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport i18n from 'ui-i18n';\n\nexport const EditButtons = ({canUpdate, canRemove, handleEditRelation, handleRemoveRelation}) => (\n <>\n {canUpdate && (\n <Tooltip title={i18n.text('Edit')}>\n <IconButton onClick={handleEditRelation}>\n <EditIcon />\n </IconButton>\n </Tooltip>\n )}\n {canRemove && (\n <Tooltip title={i18n.text('Remove')}>\n <IconButton onClick={handleRemoveRelation}>\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n )}\n </>\n);\nEditButtons.propTypes = {\n canUpdate: PropTypes.bool,\n canRemove: PropTypes.bool,\n handleEditRelation: PropTypes.func,\n handleRemoveRelation: PropTypes.func\n};\n\nexport default EditButtons;\n","import PropTypes from 'prop-types';\nimport React, {useCallback, useMemo, useState} from 'react';\nimport RowCellRenderer from './cell-renderers/RowCellRenderer';\nimport {BasicTable, ColumnFilterType, ColumnsDataType, SortingType} from '@reltio/components';\nimport {getBasicTableColumnsData, getBasicTableRowsData} from './helpers/dataHelpers';\nimport {useStyles} from './styles';\nimport {ConnectionType, MetadataType} from '@reltio/mdm-sdk';\nimport {path} from 'ramda';\nimport {checkRelationPermission} from './helpers/buttonsHelper';\nimport EditButtons from './EditButtons';\n\nconst MAX_HEIGHT = 477;\n\nconst RelationsTable = ({\n mode,\n columnsData,\n connections,\n metadata,\n sorting,\n onSort,\n filters,\n onFilter,\n onEditRelation,\n onRemoveRelation,\n basicTableRef,\n allowOnlyCreateNew\n}) => {\n const tableRowsData = useMemo(() => getBasicTableRowsData(connections, columnsData, metadata), [\n connections,\n columnsData,\n metadata\n ]);\n const tableColumnsData = useMemo(() => getBasicTableColumnsData(columnsData), [columnsData]);\n\n const styles = useStyles();\n\n const renderRowCell = useCallback(\n (props) => (\n <RowCellRenderer\n {...props}\n isSorted={!!sorting && sorting.field === props.columnData.id} /* eslint-disable-line react/prop-types */\n />\n ),\n [sorting]\n );\n\n const [hoverRowIndex, setHoverRowIndex] = useState(null);\n const {canRemove, canUpdate} = checkRelationPermission({\n mode,\n onRemoveRelation,\n onEditRelation,\n metadata,\n allowOnlyCreateNew,\n connection: path([hoverRowIndex, 'connection'], tableRowsData)\n });\n\n const handleOnRowHover = useCallback((rowIndex) => setHoverRowIndex(rowIndex), []);\n const handleEditRelation = useCallback(() => onEditRelation(path([hoverRowIndex, 'connection'], tableRowsData)), [\n hoverRowIndex,\n onEditRelation,\n tableRowsData\n ]);\n const handleRemoveRelation = useCallback(\n () => onRemoveRelation(path([hoverRowIndex, 'connection', 'relation', 'relationUri'], tableRowsData)),\n [hoverRowIndex, onRemoveRelation, tableRowsData]\n );\n\n const hoveredRowRightContent =\n canRemove || canUpdate ? (\n <EditButtons\n handleEditRelation={handleEditRelation}\n handleRemoveRelation={handleRemoveRelation}\n canRemove={canRemove}\n canUpdate={canUpdate}\n />\n ) : undefined;\n return (\n <div className={styles.tableContainer}>\n <BasicTable\n autosizing\n maxHeight={MAX_HEIGHT}\n columnsData={tableColumnsData}\n rowsData={tableRowsData}\n sorting={sorting}\n onSort={onSort}\n filters={filters}\n onFilter={onFilter}\n hoverStateEnabled={true}\n defaultColumnWidth={250}\n defaultColumnMinWidth={200}\n headRowHeight={56}\n renderRowCell={renderRowCell}\n onRowHover={handleOnRowHover}\n hoverRowIndex={hoverRowIndex}\n hoveredRowRightContent={hoveredRowRightContent}\n classes={{\n hoveredRowRightContentWrapper: styles['row-cell__buttons-wrapper'],\n hoveredRowRightContentContainer: styles['row-cell__buttons-container']\n }}\n ref={basicTableRef}\n resizeDebounceDelay={150}\n />\n </div>\n );\n};\n\nRelationsTable.propTypes = {\n mode: PropTypes.string,\n columnsData: ColumnsDataType,\n connections: PropTypes.arrayOf(ConnectionType),\n metadata: MetadataType,\n filters: PropTypes.objectOf(ColumnFilterType),\n onFilter: PropTypes.func,\n sorting: SortingType,\n onSort: PropTypes.func,\n onEditRelation: PropTypes.func,\n onRemoveRelation: PropTypes.func,\n basicTableRef: PropTypes.shape({current: PropTypes.object}),\n allowOnlyCreateNew: PropTypes.bool\n};\n\nexport default RelationsTable;\n","import {profile} from '@reltio/mdm-module';\nimport {checkMetadataForDelete, checkMetadataForUpdate, checkNew, checkRemoved, getRelationType} from '@reltio/mdm-sdk';\n\nconst checkRelationPermission = ({\n metadata,\n mode,\n connection,\n onRemoveRelation,\n onEditRelation,\n allowOnlyCreateNew\n}) => {\n const isNew = checkNew(connection);\n const isEditableMode = profile.mode.selectors.getIsEditableMode(mode);\n if (isEditableMode && connection && (!allowOnlyCreateNew || isNew)) {\n const {\n relation: {relationType}\n } = connection;\n const isRemoved = checkRemoved(connection);\n const relationTypeMetadata = getRelationType(metadata, relationType);\n const canRemove = onRemoveRelation && !isRemoved && checkMetadataForDelete(mode, relationTypeMetadata);\n const canUpdate = onEditRelation && !isRemoved && checkMetadataForUpdate(mode, relationTypeMetadata);\n return {canRemove, canUpdate};\n } else {\n return {canRemove: false, canUpdate: false};\n }\n};\n\nexport {checkRelationPermission};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n popupContent: {\n padding: '19px 23px'\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n }\n}));\n","import React, {useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Popover as Popover} from '@material-ui/core';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n showInactive: boolean;\n onShowInactiveChange: (value: boolean) => void;\n};\n\nconst MoreButton = ({className, showInactive, onShowInactiveChange}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const [isOpen, setIsOpen] = useState(false);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n return (\n <>\n <SmallIconButtonWithTooltip\n className={className}\n ref={buttonRef}\n tooltipTitle={i18n.text('More')}\n icon={MoreVertIcon}\n onClick={togglePopup}\n size=\"L\"\n />\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive || false}\n onChange={(e) => onShowInactiveChange(e.target.checked)}\n />\n }\n label={i18n.text('Show inactive Relationships')}\n />\n </Popover>\n </>\n );\n};\n\nexport default MoreButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n header: {\n padding: '0 4px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px',\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n },\n moreButton: {\n marginLeft: '-6px'\n }\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport {\n FacetViewHeader,\n ColumnsDataType,\n ColumnsSettings,\n FilterButton,\n HideOnShrink,\n VerticalDivider,\n ExpandableSearchInput\n} from '@reltio/components';\nimport MoreButton from './MoreButton/MoreButton';\nimport {useStyles} from './styles';\n\nconst RelationsTableHeader = ({\n title,\n total,\n searchQuery,\n onChangeSearchQuery,\n filtersEnabled,\n onToggleFilters,\n columnsData,\n selectedColumns,\n onChangeColumns,\n showInactive,\n onChangeShowInactive\n}) => {\n const styles = useStyles();\n return (\n <FacetViewHeader title={title} className={styles.header}>\n <HideOnShrink widthToHide={500}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {total > 1\n ? i18n.text('${count} entities', {count: total})\n : i18n.text('${count} entity', {count: total})}\n </Typography>\n </HideOnShrink>\n <ExpandableSearchInput query={searchQuery} onChange={onChangeSearchQuery} />\n <FilterButton enabled={filtersEnabled} onClick={onToggleFilters} />\n <VerticalDivider height={24} margin={4} />\n <ColumnsSettings\n columnsData={columnsData}\n selectedColumns={selectedColumns}\n onChangeColumns={onChangeColumns}\n />\n <MoreButton\n className={styles.moreButton}\n showInactive={showInactive}\n onShowInactiveChange={onChangeShowInactive}\n />\n </FacetViewHeader>\n );\n};\n\nRelationsTableHeader.propTypes = {\n title: PropTypes.string,\n total: PropTypes.number,\n columnsData: ColumnsDataType,\n selectedColumns: PropTypes.arrayOf(PropTypes.string),\n onChangeColumns: PropTypes.func,\n searchQuery: PropTypes.string,\n onChangeSearchQuery: PropTypes.func,\n filtersEnabled: PropTypes.bool,\n onToggleFilters: PropTypes.func,\n showInactive: PropTypes.bool,\n onChangeShowInactive: PropTypes.func\n};\n\nexport default RelationsTableHeader;\n","import {basicTableViewState, createStandardAction} from '@reltio/components';\n\nconst CHANGE_SEARCH_QUERY = 'CHANGE_SEARCH_QUERY';\nconst CHANGE_SHOW_INACTIVE = 'CHANGE_SHOW_INACTIVE';\n\nconst actions = {\n ...basicTableViewState.actions,\n changeSearchQuery: createStandardAction(CHANGE_SEARCH_QUERY),\n changeShowInactive: createStandardAction(CHANGE_SHOW_INACTIVE)\n};\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case CHANGE_SEARCH_QUERY:\n return {...state, searchQuery: action.payload, page: 0};\n case CHANGE_SHOW_INACTIVE:\n return {...state, showInactive: action.payload};\n default:\n return basicTableViewState.reducer(state, action);\n }\n};\n\nexport {reducer as default, actions};\n","import {ActivenessAttrTypes, attributeUriToSearchUri, DataTypes, getAttrDataTypeDefinition} from '@reltio/mdm-sdk';\nimport {concat, map, pipe, prop, subtract, uniqBy} from 'ramda';\nimport {getRelationsAttributesFromMetadata} from '../../core/relations';\nimport i18n from 'ui-i18n';\n\nconst ROWS_PER_PAGE_OPTIONS = [10, 25, 50, 100];\nconst getRowsPerPageOptions = (defaultRowsPerPage) =>\n ROWS_PER_PAGE_OPTIONS.filter((option) => option !== defaultRowsPerPage)\n .concat(defaultRowsPerPage)\n .sort(subtract);\n\nconst DEFAULT_COLUMNS_DATA = [\n {\n id: 'entity.label',\n get label() {\n return i18n.text('Entity label');\n },\n dataTypeDefinition: {\n type: DataTypes.TYPE_STRING\n },\n hideable: false\n },\n {\n id: 'relation.label',\n get label() {\n return i18n.text('Directional label');\n },\n dataTypeDefinition: {\n type: DataTypes.TYPE_STRING\n }\n },\n {\n id: 'relation.activeness.startDate',\n get label() {\n return i18n.text('Start date');\n },\n dataTypeDefinition: ActivenessAttrTypes.startDate\n },\n {\n id: 'relation.activeness.endDate',\n get label() {\n return i18n.text('End date');\n },\n dataTypeDefinition: ActivenessAttrTypes.endDate\n }\n];\n\nconst getColumnIdFromAttrUri = pipe(attributeUriToSearchUri, concat('relation.'));\n\nconst getColumnsDataFromRelationAttributes = pipe(\n map((attr) => ({\n id: getColumnIdFromAttrUri(attr.uri),\n label: attr.label,\n description: attr.description,\n dataTypeDefinition: getAttrDataTypeDefinition(attr)\n })),\n uniqBy(prop('id'))\n);\n\nconst getColumnsData = pipe(\n getRelationsAttributesFromMetadata,\n getColumnsDataFromRelationAttributes,\n concat(DEFAULT_COLUMNS_DATA)\n);\n\nexport {getRowsPerPageOptions, DEFAULT_COLUMNS_DATA, getColumnsData};\n","import {buildColumnsFilter} from '@reltio/components';\nimport {FilterBuilder, filterValueToQueryStringWithQuotes, Maybe} from '@reltio/mdm-sdk';\n\nexport const buildRelationsFilter = (searchQuery, filters, columnsData) => {\n const queryClause = Maybe.fromFalsy(searchQuery)\n .map(filterValueToQueryStringWithQuotes)\n .map(\n (queryString) =>\n `containsWordStartingWith(entity.label,${queryString})` +\n ' or ' +\n `containsWordStartingWith(relation.label,${queryString})`\n )\n .orSome('');\n\n const filtersClause = buildColumnsFilter(columnsData, filters);\n\n return new FilterBuilder().addClause(queryClause).addClause(filtersClause).build();\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n addArea: {\n display: 'flex',\n alignItems: 'center',\n height: '48px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.12)'\n },\n noData: {\n fontSize: '13px',\n paddingLeft: '20px',\n marginBottom: '20px',\n marginTop: '10px',\n color: 'rgba(0,0,0,0.54)'\n }\n});\n","import React, {useCallback, useContext, useEffect, useMemo, useReducer, useRef} from 'react';\nimport AddRelationButton from './AddRelationButton/AddRelationButton';\nimport RelationsTable from './RelationsTable/RelationsTable';\nimport RelationsTableHeader from './RelationsTableHeader/RelationsTableHeader';\nimport reducer, {actions} from './stateReducer';\nimport {\n BasicTablePagination,\n BasicView,\n LinearLoadIndicator,\n ProfilePerspectiveViewContext,\n useConfigPermissions,\n useRelationsLoader,\n RelationEditor,\n FeaturesContext\n} from '@reltio/components';\nimport {DEFAULT_COLUMNS_DATA, getColumnsData, getRowsPerPageOptions} from './helpers/tableHelpers';\nimport {pipe, pluck, propEq} from 'ramda';\nimport {buildRelationsFilter} from './helpers/relationsHelpers';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n isTempUri,\n ModeTypes,\n createNewConnectionWithDefaultRelationType,\n RelationsViewConfig,\n Entity,\n Metadata,\n Connection,\n Mode,\n ActivityFilter\n} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\nimport {Typography as Typography} from '@material-ui/core';\nimport i18n from 'ui-i18n';\nimport {Dispatch} from 'redux';\nimport {useSelector} from 'react-redux';\n\nconst DEFAULT_ROWS_PER_PAGE = 15;\nconst DEFAULT_SORT_ORDER = 'asc';\nconst DEFAULT_COLUMNS_TO_SHOW = pluck('id', DEFAULT_COLUMNS_DATA);\nconst [DEFAULT_SORT_FIELD] = DEFAULT_COLUMNS_TO_SHOW;\nconst DEFAULT_SHOW_INACTIVE = false;\n\ntype Props = {\n config: RelationsViewConfig;\n entity: Entity;\n metadata: Metadata;\n connections: Connection[];\n total: number;\n mode: Mode;\n className?: string;\n relationToAdd: Connection;\n relationsToEdit: Connection[];\n checkIfCanAddRelations: boolean;\n dispatch: Dispatch;\n readOnlyMode?: boolean;\n};\nconst RelationsTableView = ({\n className,\n config,\n entity,\n metadata,\n connections = [],\n total = 0,\n mode: modeProp,\n relationToAdd,\n relationsToEdit = [],\n checkIfCanAddRelations,\n dispatch: reduxDispatch,\n readOnlyMode\n}: Props) => {\n const initialState = {\n searchQuery: '',\n filters: null,\n visibleColumns: DEFAULT_COLUMNS_TO_SHOW,\n sorting: {\n order: config.sortOrder || DEFAULT_SORT_ORDER,\n field: config.sortColumn || DEFAULT_SORT_FIELD\n },\n page: 0,\n rowsPerPage: config.max || DEFAULT_ROWS_PER_PAGE,\n showInactive: DEFAULT_SHOW_INACTIVE\n };\n\n const styles = useStyles();\n const isProfilePerspectiveView = useContext(ProfilePerspectiveViewContext);\n const mode = isProfilePerspectiveView ? modeProp : ModeTypes.VIEWING;\n\n const [state, dispatch] = useReducer(reducer, initialState);\n const changeSearchQuery = pipe(actions.changeSearchQuery, dispatch);\n const changeShowInactive = pipe(actions.changeShowInactive, dispatch);\n const clearSearchQuery = () => {\n changeSearchQuery('');\n };\n const featuresContext = useContext(FeaturesContext);\n const showDescription = useSelector(mdmModule.selectors.getShowAttributeDescription);\n const features = useMemo(() => ({...featuresContext, showDescription}), [featuresContext, showDescription]);\n useEffect(clearSearchQuery, [entity?.uri]); //eslint-disable-line react-hooks/exhaustive-deps\n\n const {visibleColumns, searchQuery, filters, sorting, page, rowsPerPage, showInactive} = state;\n\n const allColumnsData = useMemo(() => getColumnsData(config, metadata), [config, metadata]);\n\n const visibleColumnsData = useMemo(\n () => visibleColumns.map((id) => allColumnsData.find(propEq('id', id))),\n [visibleColumns, allColumnsData]\n );\n\n const filter = useMemo(\n () => buildRelationsFilter(searchQuery, filters, visibleColumnsData),\n [filters, searchQuery] // eslint-disable-line\n );\n\n const {isLoading} = useRelationsLoader({\n sorting,\n filter,\n page,\n rowsPerPage,\n config,\n entity,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY,\n mode: modeProp\n });\n\n const rowsPerPageOptions = useMemo(() => getRowsPerPageOptions(initialState.rowsPerPage), []); // eslint-disable-line\n const {handleRowsPerPageChange, handlePageChange} = useMemo(\n () => ({\n handleRowsPerPageChange: pipe(actions.changeRowsPerPage, dispatch),\n handlePageChange: pipe(actions.changePage, dispatch)\n }),\n []\n );\n\n const onAddRelation = useCallback(() => {\n const newConnection = createNewConnectionWithDefaultRelationType({\n config,\n mode,\n metadata,\n parentEntityUri: undefined\n });\n pipe(profile.relations.actions.openRelationEditor(config.id), reduxDispatch)(newConnection);\n }, [config, mode, metadata, reduxDispatch]);\n\n const onRemoveRelation = useCallback(\n (relationUri) => {\n reduxDispatch(profile.relations.actions.closeRelationEditor(config.id, relationUri));\n reduxDispatch(profile.relations.actions.removeRelation(config.id, relationUri));\n const connectionToRemove = connections.find(\n (connection) => profile.relations.selectors.getRelationUriFromConnection(connection) === relationUri\n );\n const entityUri = profile.relations.selectors.getEntityUriFromConnection(connectionToRemove);\n if (isTempUri(entityUri)) {\n reduxDispatch(profile.modifiedEntities.actions.entityDeleted(entityUri));\n }\n },\n [config, connections, reduxDispatch]\n );\n\n const canAddRelations = entity && checkIfCanAddRelations && !readOnlyMode;\n const openedRelations = relationToAdd ? [relationToAdd, ...relationsToEdit] : relationsToEdit;\n const {canUpdate, canDelete} = useConfigPermissions();\n const canEditRelations = canUpdate(config) && !readOnlyMode;\n const canRemoveRelations = canDelete(config) && !readOnlyMode;\n const basicTableRef = useRef(null);\n\n return (\n <FeaturesContext.Provider value={features}>\n <BasicView className={className}>\n <RelationsTableHeader\n title={config.caption}\n total={total}\n columnsData={allColumnsData}\n selectedColumns={visibleColumns}\n onChangeColumns={pipe(actions.changeColumns, dispatch)}\n searchQuery={searchQuery}\n onChangeSearchQuery={changeSearchQuery}\n filtersEnabled={!!filters}\n onToggleFilters={pipe(actions.toggleFilters, dispatch)}\n showInactive={showInactive}\n onChangeShowInactive={changeShowInactive}\n />\n {canAddRelations && (\n <div className={styles.addArea}>\n <AddRelationButton onClick={onAddRelation} />\n </div>\n )}\n {openedRelations.map((relation) => (\n <RelationEditor\n key={profile.relations.selectors.getRelationUriFromConnection(relation)}\n connection={relation}\n config={config}\n mode={mode}\n metadata={metadata}\n />\n ))}\n <div style={{position: 'relative'}}>\n <RelationsTable\n mode={mode}\n columnsData={visibleColumnsData}\n connections={connections}\n metadata={metadata}\n filters={filters}\n onFilter={pipe(actions.changeFilter, dispatch)}\n sorting={sorting}\n onSort={pipe(actions.toggleSort, dispatch)}\n onEditRelation={\n canEditRelations\n ? pipe(profile.relations.actions.openRelationEditor(config.id), reduxDispatch)\n : null\n }\n onRemoveRelation={canRemoveRelations ? onRemoveRelation : null}\n basicTableRef={basicTableRef}\n allowOnlyCreateNew={config.allowOnlyCreateNew}\n />\n {connections.length ? (\n <BasicTablePagination\n count={total}\n rowsPerPageOptions={rowsPerPageOptions}\n rowsPerPage={rowsPerPage}\n onChangeRowsPerPage={handleRowsPerPageChange}\n page={page}\n onChangePage={handlePageChange}\n basicTableRef={basicTableRef}\n />\n ) : (\n <Typography className={styles.noData}>{i18n.text('No data found')}</Typography>\n )}\n {isLoading && <LinearLoadIndicator />}\n </div>\n </BasicView>\n </FeaturesContext.Provider>\n );\n};\n\nexport default RelationsTableView;\n","import {memoizeWith} from 'ramda';\nimport {connect} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {parseRelationsConfig} from '@reltio/mdm-sdk';\nimport RelationsTableView from './RelationsTableView';\n\nconst mapStateToProps = (state, ownProps) => {\n const {config} = ownProps;\n\n return {\n connections: mdm.selectors.getConnectionsWithDraftsByViewId(state, config.id),\n total: mdm.selectors.getTotalByViewId(state, config.id),\n entity: mdm.selectors.getEntity(state),\n metadata: mdm.selectors.getMetadata(state),\n mode: mdm.selectors.getMode(state),\n relationToAdd: mdm.selectors.getRelationToAddByViewId(state, config.id),\n relationsToEdit: mdm.selectors.getRelationsToEditByViewId(state, config.id),\n checkIfCanAddRelations: mdm.selectors.getCheckIfCanAddRelations(state, config.content)\n };\n};\n\nconst memoizedParseRelationsConfig = memoizeWith((metadata, config) => config.id, parseRelationsConfig);\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => ({\n ...stateProps,\n ...dispatchProps,\n ...ownProps,\n config: memoizedParseRelationsConfig(stateProps.metadata, ownProps.config)\n});\n\nexport default connect(mapStateToProps, undefined, mergeProps)(RelationsTableView);\n","import MomentUtils from '@date-io/moment';\nimport React from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport RelationsTableView from './RelationsTableView';\nimport {StylesProvider, createGenerateClassName} from '@material-ui/core/styles';\n\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport {Provider} from 'react-redux';\nimport {RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {identity} from 'ramda';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {Store} from 'redux';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'relTable',\n disableGlobal: true\n});\n\ntype Props = {\n config: RelationsViewConfig;\n store: Store;\n onResize?: (width: number, height: number) => void;\n className?: string;\n readOnlyMode?: boolean;\n};\n\nconst StandaloneRelationsTableView = ({config, store, onResize = identity, className, readOnlyMode}: Props) => (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n {config && <RelationsTableView config={config} className={className} readOnlyMode={readOnlyMode} />}\n <ErrorPopup />\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n);\n\nexport default StandaloneRelationsTableView;\n"],"names":["SingleAttributeContext","React","displayName","useStyles","makeStyles","triggerButton","minWidth","color","width","popupContent","paddingTop","paddingBottom","paddingLeft","paddingRight","maxWidth","checkboxControlRoot","marginTop","marginLeft","checkboxControlLabel","fontSize","checkboxControlCheckbox","marginRight","className","styles","buttonRef","useRef","isOpen","setIsOpen","useState","showInactive","toggleShowInactive","useContext","togglePopup","open","Button","ref","classes","root","classnames","onClick","Popover","paper","anchorEl","current","onClose","anchorOrigin","vertical","horizontal","transformOrigin","FormControlLabel","label","control","Checkbox","checked","onChange","e","target","i18n","padding","totalCaption","lineHeight","letterSpacing","flexShrink","justifyContent","ovIcon","SingleAttributeHeader","caption","totalVisibleValues","showInactiveValuesMenu","isEditableMode","searchQuery","setSearchQuery","setPage","totalNonVisibleValues","nonVisibleValues","attributeType","showRequiredMark","required","FacetViewHeader","title","RequiredMark","DescriptionIcon","description","HideOnShrink","widthToHide","VerticalDivider","height","margin","Typography","variant","OvIcon","nonOvTotal","nonOvValues","ExpandableSearchInput","query","getAttributeNameFromAttributeUri","getLastUriPart","search","value","Object","values","some","utils","String","getPagedLocalEntity","async","metadata","entity","attributeTypeUri","defaultMaxValues","Infinity","offset","pipe","findAttributeValuesByTypeUri","filter","ovValues","isOv","getAttributeSource","slice","paging","totalOvValues","length","totalValues","theme","moreButton","backgroundColor","marginBottom","buttonLabel","fontWeight","icon","divider","ovFalse","inactive","noData","palette","text","secondary","emptyArray","withContext","ScrollToErrorContext","contextValue","parentUri","error","highlightedError","isAttributeTypeError","uri","noDataText","isRequired","cardinality","name","dispatch","useDispatch","viewId","ViewIdContext","useSelector","mdmModule","modifiedEntity","state","errors","errorMessage","getAttributePagerActiveTypeErrorMessage","mode","attributeSource","entityValuesUris","pathOr","map","prop","modifiedEntityValues","modifiedEntityValuesUris","showEmptyEditors","isTempUri","emptyEditorValue","useMemo","createNewAttribute","errorClassName","useScrollToAttributeError","isSimple","isModifiedEntityValuesEmpty","isEmptyValue","showEmpty","newValues","onAddAttributes","useCallback","params","profile","param","onChangeAttribute","onDeleteAttribute","onDeactivateError","onAdd","attribute","isComplexAttribute","type","canCreate","checkCanCreateAttribute","commonProps","crosswalks","showNonOv","isEmptyAttributeList","isEmpty","CardinalityMessage","ErrorMessage","message","Add","idx","key","attributeValue","lazy","ownError","getAttributeOwnError","Divider","originalValue","modifiedEntityValue","find","propEq","deleted","includes","edited","value1","value2","cleanser","is","over","lensPath","cleanAttributesWith","valueTransformer","unless","omit","deleteEmptyComplex","identity","equals","areValuesEqual","cond","always","SingleAttributeReadableContent","display","flexDirection","content","position","overflow","flexGrow","pagination","DEFAULT_ROWS_PER_PAGE","SingleAttributeView","config","max","page","isLoading","hasPaging","entityUri","mdm","isViewMode","pivotingAttributes","hasValues","PivotingAttributeContext","BasicView","Box","LinearLoadIndicator","props","renderContent","BasicTablePagination","count","rowsPerPage","rowsPerPageOptions","onChangePage","useSingleAttributeLoader","attributeUri","setValues","setPaging","setIsLoading","safePromise","useSafePromise","attributeValuesRef","apiPath","tenant","isHistoryModeEnabled","diff","attributeTypeName","attributeTypeSource","findAttributeValues","findAttributeTypeByUri","globalFilter","loadAttributes","isReadableAttribute","isFirstLevelAttributeUri","rest","request","isDataTenantEntity","getPagedEntity","options","undefined","then","response","attributes","path","loadedValue","catch","console","ui","getRequestErrorMessage","finally","useEffect","useDidUpdateEffect","partitionByOv","partition","totalProp","ifElse","has","RelationsViewStateContext","button","sortControls","alignItems","sortSelectorRoot","flex","sortSelectorMenuItem","sortOrderButton","FilterButton","sortOrder","toggleSortOrder","sortOption","changeSortOption","sortOptions","hasSortOptions","isAsc","DropDownEditor","entries","TextFieldProps","menuItem","fullWidth","disableUnderline","MenuProps","getContentAnchorEl","SmallIconButton","tooltipTitle","ArrowUpwardIcon","ArrowDownwardIcon","size","header","ImportDTContext","MAX","Math","pow","cursor","top","left","userSelect","zIndex","badge","badgePosition","right","MultipleImportIcon","Badge","anchorOriginTopRightRectangle","badgeContent","CloudDownload","ImportFromDT","tenants","selectedTenant","onConfirmImport","onCancelConfirmation","onImportClick","dataTenants","reloadRelations","setTenants","setSelectedTenant","dtssPath","customerTenant","maxDtssImport","checkHasNonImportedConnections","importFromDT","Promise","all","hasNonImportedRelations","dataTenant","id","hasNonImportedConnections","modifiedTenants","importDTConnections","useImportFromDTLoader","oneTenant","labelOnButton","indexOf","CloudDownloadIcon","DropDownMenuButton","menuId","buttonComponent","SmallIconButtonWithTooltip","buttonProps","menuItems","ConfirmationDialog","discardCaption","saveCaption","onDiscard","onSave","total","changeSearchQuery","tooltip","tooltipContent","secondaryLabel","progress","children","tooltipProps","setSecondaryLabel","onOpen","isNil","getDataTenantEntitySecondaryLabel","getEntitySecondaryLabel","CircularProgress","colorPrimary","Tooltip","disableFocusListener","useRelationInfo","connection","relation","entityType","getEntityType","entityLabel","getLabel","preparedUri","getEntityUriForLink","relationLabel","getRelationTypeLabelFromMetadata","relationType","container","SuggestedButtons","acceptRelation","ignoreRelation","style","alignSelf","row","minHeight","rowInactive","background","inactiveBackground","entityAvatar","entityLabelContainer","textDecoration","primary","main","editButtonsContent","editButtons","removed","editedLabel","fontStyle","EditableRelationItem","memo","showControls","onRemoveRelation","onEditRelation","onAcceptRelation","onIgnoreRelation","renderRelationArrowButton","checkRemoved","checkEdited","ignored","checkIgnored","isActive","isActiveObject","canRemove","canUpdate","Mode","isRemoved","relationTypeMetadata","getRelationType","checkMetadataForDelete","checkMetadataForUpdate","checkRelationPermission","handleRemoveRelation","relationUri","handleEditRelation","handleAcceptRelation","handleIgnoreRelation","suggested","EditIcon","DeleteIcon","suggustedButtonsContent","disabled","captionText","EntityTypeIcon","EntityUriLink","getUri","when","isObject","getFirstRelationTypeObject","inRelations","outRelations","prepareRelation","direction","relations","wrapInArrayIfNeeded","Directions","concat","arrowIcon","RelationArrowButton","showSecondLevel","parentEntityUri","contentSecondLevel","checkNew","ArrowDropDown","ArrowRight","secondLevelContent","SecondLevelWrapper","connections","toggleShowSecondLevel","loadRelations","loading","relationActivityFilter","setShowSecondLevel","setLoading","activityFilter","requestConfig","returnObjects","returnDates","activeness","ActivityFilter","getRelationsForEntity","show","useSecondLevelConnections","entitiesMap","getEntitiesMapForConnections","EntitiesMapContext","RelationsContent","relationToAdd","relationsToEdit","checkIfCanAddRelations","onAddRelation","newConnection","createNewConnectionWithDefaultRelationType","connectionToRemove","defaultRelationTypeObject","connectionWithDefaultRelationType","evolve","object","relationDirection","newConnections","currentConnections","canAddRelations","isEmptyRelationList","getRelationEditableContent","openedRelation","allowOnlyCreateNew","itemKey","RelationEditor","shouldShowAddRelationButton","shouldShowRelationEditorToAdd","attributesList","RelationAttributes","currentEntityUri","firstLevelRelationAttrTypes","getRelationAttributesList","attributeListEntity","getActivenessAttributes","showAttributesList","getAttributesListForReadMode","objectIds","getAttributeValuesUris","getCommentsCount","CollaborationContext","additionalRelatedObjectUris","createRelatedObjectUris","CollaborationObjectTypes","RelatedObjectUrisContext","attrTypes","ShowDetailsButton","onToggle","tooltipPlacement","InfoIconSelected","InfoIcon","wordBreak","showDetails","suggestedWrapper","commentsContainer","additionalButtonsWrapper","labelWrapper","RelationItem","isSuggested","setShowDetails","relatedObjectUris","COMMENTS_CONTAINER_VISIBILITY_AREA","CommentsContainer","getConnectionRelationUriForLink","objectType","allowOnlyOneComment","getCountOfLikes","ratings","rating","getCountOfDislikes","calcWidthOfLikesScale","calcWidthOfDislikesScale","wrapper","averageRating","scale","likesScale","dislikesScale","counts","likesCount","Ratings","pluck","mean","defaultTo","calcAverageRating","toFixed","ThumbUp","ThumbDown","textTransform","likeButton","RatingsButtons","onAgree","onDisagree","username","ratingOfCurrentUser","user","endIcon","buttonContent","comment","entityTypeIcon","showDetailsButton","relationAttributes","RelationComplexItem","rateRelation","RelationsList","mainEnityUri","isComplex","relationTypeObject","ignoreSuggestedRelation","relatedEntityUri","startDate","endDate","isInDirection","startEntityUri","endEntityUri","createRelation","useSuggestedRelations","getRelationshipsObjectIdsForCollaboration","list","selectors","getEntity","getMode","RelationsView","getConnectionsWithDraftsByViewId","getTotalByViewId","sorting","order","field","queryClause","Maybe","filterValueToQueryStringWithQuotes","queryString","orSome","FilterBuilder","addClause","build","buildRelationsFilter","reload","useRelationsLoader","importDTContextValue","pick","EntityContext","Provider","TableAttributeContext","CHANGE_SEARCH_QUERY","actions","basicTableViewState","createStandardAction","reducer","action","payload","removedStyle","headCell","rowCell","blobWrapper","overflowY","overflowX","whiteSpace","maxHeight","boxSizing","defaultWrapper","textOverflow","updateAttribute","historyPalettes","HistoryOperations","insertAttribute","deleteAttribute","pointerEvents","withFilterAtBottom","headCellData","DefaultHeadCellRenderer","historyClassName","onScroll","stopPropagation","columnData","dataTypeDefinition","simpleValue","appearance","HistoryDiffContext","getHistoryAppearanceByUri","getHistoryAttributeClassName","DataTypes","dataTypeValue","DataTypeValue","ExpandedValueTooltip","getColumnsDataFromAttributeNode","attrNode","parents","reject","attributeUriToSearchUri","getAttrDataTypeDefinition","childNode","getAttrPathFromColumnId","split","getNestedPathByColumnId","columnId","isAttributeSearchUri","attrPath","getBasicTableColumnsData","sortable","resizable","nestedPath","headCellRenderer","HeadCellRenderer","rowCellValueRenderer","DefaultCellValueRenderer","filters","onToggleFilters","allColumnsData","visibleColumns","onChangeColumns","enabled","ColumnsSettings","columnsData","selectedColumns","withTableContext","deletedUris","rowValue","Boolean","cell","CellValueRenderer","isSorted","otherProps","index","tableContainer","fontFamily","transform","onEdit","onRemove","onSort","onFilter","tableRowsData","reduce","acc","assoc","getOvAttributeValuesByPathWithUri","getAttributeValues","getRowValueByColumnId","getBasicTableRowsData","tableColumnsData","checkIsEditableMode","renderRowCell","hoverRowIndex","setHoverRowIndex","canDelete","useConfigPermissions","hideRightContent","checkCanDeleteAttribute","isReltioCrosswalk","canEdit","checkCanEditAttribute","checkCanEdit","handleEditAttribute","handleRemoveAttribute","hoveredRowRightContent","context","BasicTable","autosizing","rowsData","hoverStateEnabled","defaultColumnWidth","defaultColumnMinWidth","headRowHeight","resizeDebounceDelay","onRowHover","hoveredRowRightContentWrapper","hoveredRowRightContentContainer","actionButtons","AttributeEditing","onCancel","onApply","hasChanges","shouldConnectAllModifiedEntities","isReference","getReferencedEntityUriFromAttrValue","allModifiedEntities","expanded","isMissedTypeError","ErrorType","findAttributeValueByError","curry","either","areOneHierarchyUris","addButton","editor","TableAttributeEditableContent","editingValues","modifiedValues","onStartEditing","onReset","checkHasChanges","highlightedAttributeError","hasConfigToCreate","shouldOpenInvalidEditors","listenToActions","useActionsHook","missedAttributeError","both","forEach","stopListeningActions","useExpandAttributes","checkIsAttributeTypeError","isPartOfErrorAttributeTypeUri","isPartOfErrorParentUri","newAttributeUri","setNewAttributeUri","originalValues","setOriginalValues","actualValues","not","newAttribute","createDefaultValues","attributeTypes","prev","editingValueOriginal","attributeItem","without","validate","tempEntitiesMap","validateComplexAttribute","evaluateErrorPath","getSingleAttributeEntity","original","useEditableAttribute","preparedValues","visibleColumnsData","TableAttributeView","showTable","nodeCounter","generateId","processResponse","fakeRoot","nodeId","parentPaths","i","nextRoot","j","nextParent","entities","isRoot","node","rootIndex","push","avatar","treeContainer","tree","buttonsContainer","ConfigContext","onImageLoadFail","src","DEFAULT_ICON","Node","absoluteImagePath","popperAnchor","setPopperAnchor","isSelected","entityTypeGraphIcon","getPropWithInheritance","getAbsoluteImageUrl","Avatar","alt","onError","HierarchyNodeTitle","getNodeKey","lineBlock","lineChildren","bottom","treeTheme","verticalLine","horizontalLineRight","textAlign","nodeContent","rowContents","borderLeft","verticalAlign","buttonWrapper","collapsedButton","expandedButton","transition","borderRight","borderTop","rowTitle","nodeContentRenderer","scaffoldBlockPxWidth","toggleChildrenVisibility","treeIndex","nodeTitle","showToggleChildrenButton","treeNodeRenderer","lowerSiblingCounts","scaffoldBlockCount","scaffold","lowerSiblingCount","shift","scaffoldWidth","nodeStyle","rowHeight","slideRegionSize","_extends","assign","arguments","source","prototype","hasOwnProperty","call","apply","this","viewBox","version","xmlns","stroke","strokeWidth","fill","fillRule","fillOpacity","d","onGraphOpen","showNavigateToGraph","FeaturesContext","ShowGraphIcon","getCacheKey","bodyWrapper","CustomView","basicViewRef","dialogRef","showModal","setShowModal","defaultTooltip","html","visible","updatedTooltip","customStyles","popup","useAPI","innerHTML","Array","from","childNodes","child","appendChild","Dialog","dragHandleContainer","dragHandleVisibilityArea","visibility","dragHandle","dragIcon","Component","WithDragHandle","DragIndicator","WithErrorBoundary","ErrorBoundary","EmptyState","LogoRenderer","EMPTY_STATE_ICONS","secondaryText","EMPTY_STATE_VARIANTS","stubView","fullHeight","component","boxShadow","borderRadius","filterWrongLat","gt","lt","fullscreenBtn","ImageLineCaption","totalImages","photoWord","ImageAttributeViewEditableContent","requestNextPageOfAttributeValues","attributeValues","imageSize","IMAGE_SIZE","imageMargin","imageWidth","imageHeight","ActionButtons","match","onStartRequest","onFinishRequest","canMerge","canMark","getActionPermissionForMatch","matchRules","actionButtonProps","ActionButtonMode","onMergeFinish","MergeButton","NotMatchButton","MatchCard","ProfileMatchCard","createObjectIdForPM","matchEntityUri","matchesContainer","footer","DEFAULT_OPTIONS","showTransitiveMatches","showInactiveEntities","DEFAULT_SORTING","Order","ComponentStates","wrapView","withErrorBoundary","withDragHandle","WrappedStubView","WrappedProfileAttributesView","AttributesView","excludeUris","includeUris","attributesCount","pinnedAttributes","WrappedProfileSingleAttributeView","singleAttribute","setShowInactive","useSingleAttribute","WrappedProfileTableAttributeView","tableAttribute","getAttributeTypesTree","chain","flatAttributeTreeNode","uniqBy","getColumnsData","initialState","useReducer","requestFilters","mdmFilters","columnFilter","columnFilterToMdmFilter","buildMDMFilters","changePage","toggleSort","changeFilter","toggleFilters","changeColumns","useActions","hidden","useTableAttribute","WrappedProfileRelationsView","parsedConfig","parseRelationsConfig","relationsState","append","Number","setSortOrder","setSortOption","option","useRelationsState","WrappedCustomView","WrappedHierarchyPathView","graph","graphType","treeData","setTreeData","graphUri","setErrorMessage","forest","newTrees","updateTreesWithNewEntity","updatedTime","getPathsTree","warn","useLoadPaths","onResize","getRowHeight","clearHeightsCache","heightsCache","setHeightsCache","_","prevCache","useDynamicNodesHeights","openGraph","generateNodeProps","rowInfo","handleHeight","refreshMode","refreshRate","ReactSortableTree","isVirtualized","canDrag","WrappedProfilePotentialMatchesView","turnOnDisableSpinner","turnOffDisableSpinner","matches","loadMatches","useMatchesLoader","onStartLoading","onFinishLoading","onFinishMatchAction","openPotentialMatchPerspective","mdmModuleUi","perspectiveId","getPotentialMatchesObjectIdsForCollaboration","getEntityUriFromMatchObject","showSeeAll","Loading","NoData","Loaded","Link","underline","WrappedHierarchyTreeView","importedModule","default","HierarchyTreeView","WrappedRelationshipsTableView","RelationshipsTableView","WrappedEntityMapView","isFullscreen","onToggleFullscreen","mapKey","markers","setMarkers","resolve","useMarkers","loadingElement","defaultCenter","lat","lng","mapOptions","mapTypeControl","FullscreenExitIcon","FullscreenIcon","ReltioMap","defaultZoom","mapContainerClassName","WrappedImageAttributeView","entityValues","ImageAttributesLine","ViewsFactory","ViewTypes","ProfileViewTypes","getComponentBy","propName","store","HierarchyTree","HierarchyPaths","RelationsTable","Relations","Attributes","SingleAttribute","AttributeTable","Map","Custom","ImageAttribute","PotentialMatches","getComponent","Fallback","ViewComponent","isAutosize","Suspense","fallback","item","basicView","fixedSizeContainer","omittingProps","ProfileLayoutItem","layoutItemConfig","views","ResizeComponent","AutosizeComponent","ReactReduxContext","isCustomView","class","platform","CustomScriptPlatform","reltioClass","getViewTypeByClass","scrollWrapper","scrollableContent","scrollbarWidth","ProfileLayout","layout","onLayoutChanged","scrollWrapperRef","element","offsetWidth","clientWidth","boundariesElement","popupBoundariesValue","priority","scrollTop","PopupBoundariesContext","ReltioGridLayout","LayoutItem","draggableHandle","closeIcon","snackbar","flexWrap","Notification","notification","autoCloseInterval","autoHideDuration","setAction","setShow","closeSnackbar","_e","reason","cancelAction","onConfirm","applyAction","needConfirmation","CloseIcon","Portal","document","body","Snackbar","confirmationText","confirmationDescription","Notifications","notifications","n","xmlnsXlink","xlinkHref","mask","editingButtons","searchResults","comments","SuggestIcon","SvgIcon","CopyIcon","filterGroupByPermissions","group","isTempEntity","isWorkflowEnabled","canStartProcessInstanceSearchQuery","permission","isSuggestMode","checkMetadataPermission","PerspectiveProfileBand","profileBandConfig","profileOperation","entityTypeUri","isOperationSaving","Operation","isDisabledButtons","openCloneConfirmationDialog","setOpenCloneConfirmationDialog","onCloneDiscard","onClone","cloneAction","cloneActionProp","relationTypes","isRelationSuitableForEntityType","isRelationWithEntityType","complement","propOr","modifiedRelationTypes","getRelationTypeUriFromAttrType","T","data","relationshipTypesToCopy","useCloneAction","OPTIONS_GROUP","ModeTypes","CreateIcon","VisibilityIcon","BUTTONS_GROUP","window","confirm","shouldShowSelect","MetadataPermissions","hasOnlyReadPermission","accessibleOptionsGroup","accessibleButtonsGroup","handleChange","handleSave","ProfileBand","mr","ProfileBandHistory","ProfileBandNavigation","ModeSwitcherSelect","optionsGroup","buttonsGroup","WorkflowButton","WorkflowTasksContext","Inbox","showMoreLink","showMoreIcon","CollaborationList","getComments","pageToken","useCommentsEntitiesMap","objectId","commentId","CollaborationItem","KeyboardArrowDown","WorkflowList","tasks","task","WorkflowTaskCard","taskId","CollaborationButton","commentsMap","calcTotalCommentItems","CollaborationIcon","SidePanelEmptyState","itemWrapper","DBConnectorsList","dBConnectorSideViews","sideView","ActivePanel","getSecondTitle","RightSidePanel","isWorkflowSideViewEnabled","isCollaborationSideViewEnabled","isDBConnectorSideViewEnabled","isCollaborationEnabled","historyEvent","workflowTasksContext","collaborationContext","active","setActive","Collaboration","toggleActive","newId","resetActive","isHistoryTabActive","History","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","historyFilter","onApplyFilter","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","enabledWorkflowButton","enabledCollaborationButton","collaborationTotal","elements","Workflow","headerProps","mainTitle","secondTitle","rightContent","AddWorkflowButton","HistoryIcon","HistoryView","contributorsUris","HistoryPanelEmptyState","HistoryHeader","DBConnector","ConnectorsIcon","visibleElements","SidePanel","SidePanelContentHeader","SideButtonsPanel","buttonsProps","onButtonClick","activeIndexId","accordionSummaryHeight","defaultBorderStyle","accordion","borderBottom","accordionExpanded","accordionSummary","accordionSummaryHeading","typography","pxToRem","fontWeightRegular","accordionSummaryExpanded","accordionSummaryContent","accordionDetails","errorWrapper","errorTitle","attributeTypesPath","goToIcon","errorsAccordion","borderColor","errorsAccordionDetails","warningsAccordion","warningsAccordionDetails","errorIcon","warningIcon","ErrorsPanel","panels","expandedPanelId","ErrorComponent","items","accordionClassName","accordionDetailsClassName","Accordion","square","AccordionSummary","expandIcon","ExpandMore","AccordionDetails","clipRule","clearError","Error","displayedMessage","ErrorSource","attrType","getDisplayedErrorMessage","displayedErrorPath","errorPath","AttributeValuePathItemType","join","getDisplayedErrorPath","displayedAttributeTypesPath","getDisplayedAttributeTypesPath","highlightError","showLink","HyperlinkIcon","ProfileErrorsPanel","cachedAllErrors","allErrors","cacheForAllErrors","errors1","errors2","areErrorsEqual","useCachedErrors","warnings","isCriticalError","setExpandedPanelId","number","panelId","event","isExpanded","emptyState","perspectiveView","profileWrapper","profileContainer","ProfilePerspectiveView","saveState","getSavedState","profileBand","workflow","isHistoryActive","keywordValue","historyDiff","useHistoryDiff","workflowTasks","workflowConfig","commonWorkflowTasks","useCommonWorkflowTasks","defaultActionSuccessHandler","useWorkflowDefaultActionSuccessHandler","onActionSuccess","useWorkflowTasks","getProfileObjectIdsForCollaboration","emptyCollaboration","collaboration","useCollaboration","isLoaded","handleLayoutChange","profileConfig","setLayout","setViews","canRead","validatedViews","validatedLayout","removeUnsupportedLayoutItems","configHash","hash","nestedRoute","savedStateKey","getSavedStateAndFix","debouncedSaveState","debounce","savedState","updateSavedState","useSavedStateForEntityType","isConfigChanged","fixedViews","fixedLayout","fixNonUniqViewsIds","useProfileLayout","useHistorySlice","isValidateReadMode","isDTEntity","profileViews","hasProfileViews","needDispatch","useProfileValidation","sidePanelViews","hideLayout","ProfilePerspectiveViewContext","SearchValueContext","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","userPreferencesComparator","newState","sortLayoutItems","sort","a","b","x","y","prepareState","looseEquals","qxSandboxApi","getSavedStatePromisified","promisifyCallback","SnackbarRenderer","showSnackbarMessage","useSnackbar","processedConfig","convertOldProfileConfig","featuresContext","showDescription","getState","features","SnackbarContext","S","SandboxAPIContext","StylesProvider","MuiPickersUtilsProvider","MomentUtils","floor","ErrorPopup","showErrorFromStore","titleContainer","link","totalNumber","TagListHeader","switchToProfile","ArrowForwardIosRounded","Spacer","toolbar","TagProfileBand","Toolbar","tagsContainer","tagsView","listContainer","entitiesList","ROWS_PER_PAGE_OPTIONS","TagPerspectiveView","tag","setRowsPerPage","globalSearchRequestOptions","safeRequestTotalPromise","safeRequestEntitiesPromise","setTotal","setEntities","requestEntities","requestTotal","getDataTenantFromEntityUri","fieldName","isDT","getEntities","requestOptions","select","getFilteredEntitiesFromDataTenant","enrichEntityWithDataTenant","getFilteredEntities","getTotalFromDataTenant","getTotals","json","useTagsProvider","useTag","refScrollBlock","hasPagination","ProfilesList","onChangeRowsPerPage","actionsWrapper","DCRProfileBand","entityTask","objectURIs","getEntityUriFromDCRUri","TaskActionButtons","perspectiveContainer","attributesWrapper","contentWrapper","processTypes","DCRReviewPerspectiveView","actionSuccessHandler","point","AddRelationButton","propTypes","PropTypes","inactiveStyle","entityCell","RowCellRenderer","EntityProfileRenderer","EntityTypeType","getRelationTypes","rel","uniq","startsWith","emptyData","EditButtons","IconButton","Edit","Delete","basicTableRef","getOvAttributeValuesByPath","getRelationAttributeValues","isNew","handleOnRowHover","rowIndex","ColumnsDataType","ConnectionType","MetadataType","ColumnFilterType","SortingType","onShowInactiveChange","MoreVertIcon","RelationsTableHeader","onChangeSearchQuery","filtersEnabled","onChangeShowInactive","CHANGE_SHOW_INACTIVE","changeShowInactive","DEFAULT_COLUMNS_DATA","hideable","ActivenessAttrTypes","getColumnIdFromAttrUri","getColumnsDataFromRelationAttributes","attr","getReadableAttributesList","addArea","DEFAULT_COLUMNS_TO_SHOW","DEFAULT_SORT_FIELD","memoizedParseRelationsConfig","memoizeWith","connect","ownProps","stateProps","dispatchProps","modeProp","reduxDispatch","readOnlyMode","sortColumn","filtersClause","buildColumnsFilter","getRowsPerPageOptions","defaultRowsPerPage","subtract","handleRowsPerPageChange","handlePageChange","changeRowsPerPage","openedRelations","canEditRelations","canRemoveRelations"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"5285.js","mappings":"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","sources":["webpack://@reltio/remotes/../profile/src/components/ProfileAttributesView/ProfileAttributesView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/contexts/SingleAttributeContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/FilterButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/FilterButton/FilterButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeHeader/SingleAttributeHeader.tsx","webpack://@reltio/remotes/../profile/src/components/hooks/helpers/index.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeEditableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeEditableContent/SingleAttributeEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeReadableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeReadableContent/SingleAttributeReadableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeView/SingleAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/hooks/useSingleAttributeLoader.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/contexts/RelationsViewStateContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/FilterButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/FilterButton/FilterButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/contexts/ImportDTContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/hooks/useImportFromDTLoader.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/MultipleImportIcon.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/ImportFromDT.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/RelationsHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationTooltip/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationTooltip/RelationTooltip.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useRelationInfo.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SuggestedButtons/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SuggestedButtons/SuggestedButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/EditableRelationItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/EditableRelationItem/EditableRelationItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/permissions.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/relation.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationArrowButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationArrowButton/RelationArrowButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SecondLevelWrapper/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SecondLevelWrapper/SecondLevelWrapper.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useSecondLevelConnections.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsEditableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsEditableContent/RelationsEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationAttributes/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationAttributes/RelationAttributes.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/ShowDetailsButton/ShowDetailsButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationItem/RelationItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/ratings.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/Ratings/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/Ratings/Ratings.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RatingsButtons/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RatingsButtons/RatingsButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationCompexItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationCompexItem/RelationComplexItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationsList.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useSuggestedRelations.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsContent/RelationsContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsView/RelationsView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/filters.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useRelationsState.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/contexts/TableAttributeContext.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/reducer.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/HeadCellRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/BlobRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/DefaultCellValueRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/helpers/tableAttributeHelpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTableHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTableHeader/AttributeTableHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/RowCellRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/EditButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/AttributeTable.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeContent/hooks/useEditableAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeEditing/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeEditing/AttributeEditing.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeEditableContent/hooks/useExpandAttributes.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeEditableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeEditableContent/TableAttributeEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeContent/TableAttributeContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/TableAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/hooks/useLoadPaths.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/ConfigContext.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/Node.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/helpers.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/node-content-renderer.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/index.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/tree-node-data-renderer.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/icons/ShowGraph.svg","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/HierarchyPathsHeader.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/hooks/useDynamicNodesHeights.ts","webpack://@reltio/remotes/../profile/src/components/Sandbox/styles.ts","webpack://@reltio/remotes/../profile/src/components/Sandbox/CustomView.tsx","webpack://@reltio/remotes/../profile/src/components/views/HOCs/styles.ts","webpack://@reltio/remotes/../profile/src/components/views/HOCs/withDragHandle.tsx","webpack://@reltio/remotes/../profile/src/components/views/HOCs/withErrorBoundary.tsx","webpack://@reltio/remotes/../profile/src/components/views/styles.ts","webpack://@reltio/remotes/../profile/src/components/EntityMapView/useMarkers.ts","webpack://@reltio/remotes/../profile/src/components/EntityMapView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageLineCaption/styles.ts","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageLineCaption/ImageLineCaption.tsx","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageAttributeViewEditableContent/ImageAttributeViewEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/ActionButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/MatchCard.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/ProfilePotentialMatchesView.tsx","webpack://@reltio/remotes/../profile/src/components/views/ViewsFactory.tsx","webpack://@reltio/remotes/../profile/src/components/views/StubView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/ProfileSingleAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/hooks/useSingleAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/ProfileTableAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/useTableAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/helpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/ProfileRelationsView.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/HierarchyPathsView.tsx","webpack://@reltio/remotes/../profile/src/components/EntityMapView/EntityMapView.tsx","webpack://@reltio/remotes/../profile/src/components/views/ViewComponent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItem/ProfileLayoutItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileLayout/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileLayout/ProfileLayout.tsx","webpack://@reltio/remotes/../profile/src/components/Notifications/styles.ts","webpack://@reltio/remotes/../profile/src/components/Notifications/Notification.tsx","webpack://@reltio/remotes/../profile/src/components/Notifications/Notifications.tsx","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/suggest.svg","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/copy.svg","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/styles.ts","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/hooks/useCloneAction.ts","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/PerspectiveProfileBand.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowButton/WorkflowButton.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationList/CollaborationList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowList/WorkflowList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/icons/CollaborationIcon.svg","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationButton/CollaborationButton.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowPanelEmptyState/WorkflowPanelEmptyState.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationPanelEmptyState/CollaborationPanelEmptyState.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/icons/ConnectorsIcon.svg","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/DBConnectorsList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/DBConnectorsList/DBConnectorsList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/RightSidePanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/components/ErrorsPanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/icons/hyperlink.svg","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/helpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/components/Error.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/useCachedErrors.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/ProfileErrorsPanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/hooks/useProfileLayout.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/hooks/useWorkflowTasks.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/ProfilePerspectiveView.tsx","webpack://@reltio/remotes/../profile/src/components/hooks/useProfileValidation.ts","webpack://@reltio/remotes/../profile/src/perspectives/ProfilePerspective.tsx","webpack://@reltio/remotes/../profile/src/perspectives/helpers.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagListHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagListHeader/TagListHeader.tsx","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagProfileBand/styles.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagProfileBand/TagProfileBand.tsx","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/hooks/useTagsProvider.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/styles.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/TagPerspectiveView.tsx","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/hooks/useTag.ts","webpack://@reltio/remotes/../profile/src/perspectives/TagPerspective.tsx","webpack://@reltio/remotes/../profile/src/components/DCRReviewPerspectiveView/components/DCRProfileBand/styles.ts","webpack://@reltio/remotes/../profile/src/components/DCRReviewPerspectiveView/components/DCRProfileBand/DCRProfileBand.tsx","webpack://@reltio/remotes/../profile/src/components/DCRReviewPerspectiveView/styles.ts","webpack://@reltio/remotes/../profile/src/components/DCRReviewPerspectiveView/hooks/useWorkflowTasks.ts","webpack://@reltio/remotes/../profile/src/components/DCRReviewPerspectiveView/DCRReviewPerspectiveView.tsx","webpack://@reltio/remotes/../profile/src/perspectives/DCRReviewPerspective.tsx","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/AddRelationButton/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/AddRelationButton/AddRelationButton.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/RowCellRenderer.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/EntityProfileRenderer.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/HeadCellRenderer.js","webpack://@reltio/remotes/../relations-table/src/core/relations.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/helpers/dataHelpers.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/EditButtons.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/RelationsTable.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/helpers/buttonsHelper.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/MoreButton/styles.ts","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/MoreButton/MoreButton.tsx","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/RelationsTableHeader.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/stateReducer.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/helpers/tableHelpers.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/helpers/relationsHelpers.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableView.tsx","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/index.js","webpack://@reltio/remotes/../relations-table/src/index.tsx"],"sourcesContent":["import React from 'react';\nimport {AttributesView} from '@reltio/components';\nimport {AttributeViewConfig} from '@reltio/mdm-sdk';\n\ntype ProfileAttributesViewProps = {\n config: AttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileAttributesView = ({className, config}: ProfileAttributesViewProps) => {\n return (\n <AttributesView\n className={className}\n caption={config.caption}\n excludeUris={config.excludeUris}\n includeUris={config.includeUris}\n attributesCount={config.attributesCount}\n pinnedAttributes={config.pinnedAttributes}\n />\n );\n};\n","import React from 'react';\nimport {AttributeValue, AttributeType} from '@reltio/mdm-sdk';\n\nexport const SingleAttributeContext = React.createContext<{\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n values: AttributeValue[];\n page: number;\n setPage: (page: number) => void;\n isLoading: boolean;\n showInactive?: boolean;\n toggleShowInactive?: (checked: boolean) => void;\n hasPaging: boolean;\n totalVisibleValues: number;\n attributeType: AttributeType;\n totalNonVisibleValues: number;\n nonVisibleValues: AttributeValue[];\n }>(null);\n\nSingleAttributeContext.displayName = 'SingleAttributeContext';\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n triggerButton: {\n minWidth: 0,\n color: 'rgba(0,0,0,0.54)',\n width: '36px'\n },\n popupContent: {\n paddingTop: '19px',\n paddingBottom: '23px',\n paddingLeft: '23px',\n paddingRight: '23px',\n maxWidth: '180px',\n width: '40%'\n },\n checkboxControlRoot: {\n marginTop: '6px',\n marginLeft: '-12px'\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n }\n}));\n","import React, {useContext, useRef, useState} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {Popover as Popover} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport FilterIcon from '@material-ui/icons/FilterList';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\n\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst FilterButton = ({className}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const [isOpen, setIsOpen] = useState(false);\n const {showInactive, toggleShowInactive} = useContext(SingleAttributeContext);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n return (\n <>\n <Button ref={buttonRef} classes={{root: classnames(styles.triggerButton, className)}} onClick={togglePopup}>\n <FilterIcon />\n </Button>\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n root: styles.checkboxControlRoot,\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive}\n onChange={(e) => toggleShowInactive(e.target.checked)}\n />\n }\n label={i18n.text('Show inactive values')}\n />\n </Popover>\n </>\n );\n};\n\nexport default FilterButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n padding: '0 4px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n },\n ovIcon: {\n marginTop: '2px',\n marginLeft: '5px'\n }\n}));\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {\n FacetViewHeader,\n HideOnShrink,\n ExpandableSearchInput,\n VerticalDivider,\n OvIcon,\n DescriptionIcon,\n RequiredMark\n} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport FilterButton from '../FilterButton/FilterButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n caption: string;\n totalVisibleValues: number;\n showInactiveValuesMenu: boolean;\n isEditableMode: boolean;\n};\n\nexport const SingleAttributeHeader = ({caption, totalVisibleValues, showInactiveValuesMenu, isEditableMode}: Props) => {\n const styles = useStyles();\n\n const {searchQuery, setSearchQuery, setPage, totalNonVisibleValues, nonVisibleValues, attributeType} =\n useContext(SingleAttributeContext);\n\n const handleChangeSearchQuery = (query: string) => {\n setSearchQuery(query);\n setPage(0);\n };\n const showRequiredMark = isEditableMode && attributeType?.required;\n return (\n <FacetViewHeader title={caption} className={styles.root}>\n {showRequiredMark && <RequiredMark />}\n <DescriptionIcon description={attributeType?.description} />\n <HideOnShrink widthToHide={500}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {i18n.number(totalVisibleValues)}{' '}\n {totalVisibleValues === 1 ? i18n.text('item') : i18n.text('items')}\n </Typography>\n </HideOnShrink>\n {\n <OvIcon\n nonOvTotal={totalNonVisibleValues}\n className={styles.ovIcon}\n nonOvValues={nonVisibleValues}\n attributeType={attributeType}\n />\n }\n <ExpandableSearchInput query={searchQuery} onChange={handleChangeSearchQuery} />\n {showInactiveValuesMenu && <FilterButton />}\n </FacetViewHeader>\n );\n};\n","import {equals, filter, identity, is, lensPath, omit, over, pipe, unless} from 'ramda';\nimport {\n AttributeValue,\n cleanAttributesWith,\n Entity,\n findAttributeValuesByTypeUri,\n getAttributeSource,\n getLastUriPart,\n isOv,\n Metadata,\n utils\n} from '@reltio/mdm-sdk';\n\nexport const getAttributeNameFromAttributeUri = getLastUriPart;\n\nexport const search = (value: AttributeValue['value'], searchQuery: string) => {\n switch (typeof value) {\n case 'object':\n return Object.values(value).some((value: AttributeValue[]) => {\n return value.some(({value}) => {\n return search(value, searchQuery);\n });\n });\n default:\n return utils.strings.search(String(value), searchQuery);\n }\n};\n\ntype Config = {\n metadata: Metadata;\n entity: Entity;\n attributeTypeUri: string;\n defaultMaxValues?: number;\n offset?: number;\n searchQuery?: string;\n};\n\nexport const getPagedLocalEntity = async ({\n metadata,\n entity,\n attributeTypeUri,\n defaultMaxValues = Infinity,\n offset = 0,\n searchQuery = ''\n}: Config) => {\n const values = pipe(\n findAttributeValuesByTypeUri,\n filter(({value}) => search(value, searchQuery))\n )(metadata, entity, attributeTypeUri);\n const ovValues = filter(isOv, values);\n\n return {\n [getAttributeSource(attributeTypeUri)]: {\n [getAttributeNameFromAttributeUri(attributeTypeUri)]: ovValues.slice(offset, offset + defaultMaxValues),\n paging: {\n [attributeTypeUri]: {\n totalOvValues: ovValues.length,\n totalValues: values.length\n }\n }\n }\n };\n};\n\nexport const areValuesEqual = (value1: AttributeValue, value2: AttributeValue): boolean => {\n const cleanser =\n is(Object, value1.value) || is(Object, value2.value)\n ? over(\n lensPath(['value']),\n cleanAttributesWith({\n valueTransformer: unless(isOv, omit(['value'])),\n deleteEmptyComplex: true\n })\n )\n : identity;\n return equals(cleanser(value1), cleanser(value2));\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {inactive: Record<string, number>}) => ({\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n divider: {\n margin: '0 -16px 8px',\n backgroundColor: 'rgba(0,0,0,0.12)'\n },\n ovFalse: theme.inactive,\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px 8px 0'\n }\n}));\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport {always, cond, isEmpty, map, pathOr, pipe, prop, propEq} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport classnames from 'classnames';\nimport {\n CardinalityMessage,\n EditableAttribute,\n ErrorMessage,\n ScrollToErrorContext,\n useScrollToAttributeError,\n ViewIdContext,\n withContext\n} from '@reltio/components';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n AttributeType,\n AttributeValue,\n checkCanCreateAttribute,\n createNewAttribute,\n Entity,\n getAttributeOwnError,\n getAttributePagerActiveTypeErrorMessage,\n getAttributeSource,\n isComplexAttribute,\n isEmptyValue,\n isOv,\n isTempUri,\n AttributeItem,\n isAttributeTypeError\n} from '@reltio/mdm-sdk';\nimport {areValuesEqual} from '../../../hooks/helpers';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n values: AttributeValue[];\n attributeType: AttributeType;\n parentUri: string;\n showInactive: boolean;\n noDataText: string;\n highlightedError?: React.ContextType<typeof ScrollToErrorContext>;\n};\n\nconst emptyArray = [];\n\nconst SingleAttributeEditableContent = ({\n values,\n attributeType,\n parentUri,\n showInactive,\n noDataText,\n highlightedError\n}: Props) => {\n const styles = useStyles();\n\n const {uri: attributeTypeUri, required: isRequired, cardinality, name} = attributeType;\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const entity = useSelector(mdmModule.selectors.getEntity);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entity.uri) || ({} as Entity)\n );\n const errors = useSelector((state) =>\n mdmModule.selectors.getActiveErrorsForAttributesPager(state, parentUri, attributeType)\n );\n const errorMessage = useSelector((state) =>\n getAttributePagerActiveTypeErrorMessage(parentUri, attributeType, mdmModule.selectors.getProfileErrors(state))\n );\n const mode = useSelector(mdmModule.selectors.getMode);\n const attributeSource = getAttributeSource(attributeType);\n const entityValuesUris: string[] = pipe(pathOr(emptyArray, [attributeSource, name]), map(prop('uri')))(entity);\n const modifiedEntityValues: AttributeValue[] = pathOr(emptyArray, [attributeSource, name], modifiedEntity);\n const modifiedEntityValuesUris: string[] = modifiedEntityValues.map(prop('uri'));\n const showEmptyEditors = isTempUri(entity.uri);\n\n const emptyEditorValue: AttributeValue = useMemo(\n () =>\n createNewAttribute({\n parentUri,\n attributeType\n }),\n [parentUri, attributeType]\n );\n\n const {ref, errorClassName} = useScrollToAttributeError({highlightedError, isSimple: true});\n\n const isModifiedEntityValuesEmpty = isEmptyValue(modifiedEntityValues);\n const showEmpty = isRequired && isModifiedEntityValuesEmpty;\n\n const newValues = showEmpty ? [emptyEditorValue] : modifiedEntityValues.filter(pipe(prop('uri'), isTempUri));\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 const onDeactivateError = useCallback(pipe(profile.errors.actions.errorDeactivated, dispatch), [dispatch]);\n\n const onAdd = useCallback(() => {\n const attribute: AttributeItem = {\n parentUri,\n attributeType\n };\n\n return onAddAttributes(\n showEmpty && !isComplexAttribute(attributeType.type) ? [attribute, attribute] : [attribute]\n );\n }, [onAddAttributes, parentUri, attributeType, showEmpty]);\n\n const canCreate = checkCanCreateAttribute({attributeType, mode});\n\n const commonProps = {\n attributeType: attributeType,\n errors,\n crosswalks: modifiedEntity.crosswalks,\n mode,\n onAddAttributes,\n onChangeAttribute,\n onDeactivateError,\n showNonOv: showInactive\n };\n const isEmptyAttributeList = newValues.length === 0 && values.length === 0;\n return (\n !isEmpty(modifiedEntity) && (\n <div ref={ref} className={errorClassName}>\n <CardinalityMessage cardinality={cardinality} />\n <ErrorMessage message={errorMessage} />\n {canCreate && (\n <Button color=\"primary\" onClick={onAdd} className={styles.moreButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {newValues.map((value, idx) => (\n <EditableAttribute\n key={value.uri}\n {...commonProps}\n attributeValue={value}\n lazy={showEmpty && !isRequired}\n showEmptyEditors={showEmptyEditors}\n ownError={getAttributeOwnError(value, idx, attributeTypeUri, errors)}\n onDeleteAttribute={onDeleteAttribute}\n />\n ))}\n {newValues.length > 0 && values.length > 0 && <Divider className={styles.divider} />}\n {values.map((originalValue) => {\n const modifiedEntityValue = modifiedEntityValues.find(propEq('uri', originalValue.uri));\n const value = modifiedEntityValue || originalValue;\n const deleted =\n entityValuesUris.includes(value.uri) && !modifiedEntityValuesUris.includes(value.uri);\n const edited =\n !deleted && modifiedEntityValue && !areValuesEqual(modifiedEntityValue, originalValue);\n const state = cond([\n [always(deleted), always('deleted')],\n [always(edited), always('edited')]\n ])();\n return (\n <div key={value.uri} className={classnames({[styles.ovFalse]: !isOv(value)})}>\n <EditableAttribute\n {...commonProps}\n attributeValue={value}\n ownError={getAttributeOwnError(value, null, attributeTypeUri, errors)}\n onDeleteAttribute={onDeleteAttribute}\n state={state}\n />\n </div>\n );\n })}\n {isEmptyAttributeList && <Typography className={styles.noData}>{noDataText}</Typography>}\n </div>\n )\n );\n};\n\nexport default withContext(\n ScrollToErrorContext,\n (contextValue, {parentUri, attributeType}) => {\n const {error} = contextValue || {};\n const isHighlighted = isAttributeTypeError(error, parentUri, attributeType.uri);\n return {highlightedError: isHighlighted ? contextValue : null};\n },\n SingleAttributeEditableContent\n);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n simpleAttribute: {\n fontSize: '13px',\n lineHeight: '15px',\n marginBottom: '4px'\n }\n}));\n","import React from 'react';\nimport {ReadOnlyAttribute} from '@reltio/components';\nimport {AttributeType, AttributeValue, isComplexAttribute} from '@reltio/mdm-sdk';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n values: AttributeValue[];\n attributeType: AttributeType;\n showInactive: boolean;\n};\n\nexport const SingleAttributeReadableContent = ({values, attributeType, showInactive}: Props) => {\n const style = useStyles();\n const isSimple = !isComplexAttribute(attributeType);\n return (\n <>\n {values.map((value) => {\n return (\n <ReadOnlyAttribute\n key={value.uri}\n attributeValue={value}\n attributeType={attributeType}\n showNonOv={showInactive}\n className={classnames({[style.simpleAttribute]: isSimple})}\n />\n );\n })}\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n padding: '4px 16px 9px',\n overflow: 'hidden',\n flexGrow: 1\n },\n noData: {\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)'\n },\n pagination: {\n flexGrow: 0,\n flexShrink: 0\n }\n}));\n","import React, {useContext} from 'react';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {PivotingAttribute, SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {BasicView, BasicTablePagination, LinearLoadIndicator, PivotingAttributeContext} from '@reltio/components';\nimport mdm from '@reltio/mdm-module';\nimport {Box as Box} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SingleAttributeHeader} from '../SingleAttributeHeader/SingleAttributeHeader';\nimport SingleAttributeEditableContent from '../SingleAttributeEditableContent/SingleAttributeEditableContent';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport {SingleAttributeReadableContent} from '../SingleAttributeReadableContent/SingleAttributeReadableContent';\nimport {useStyles} from './styles';\n\nconst DEFAULT_ROWS_PER_PAGE = 15;\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const SingleAttributeView = ({config, className}: Props) => {\n const {caption, max = DEFAULT_ROWS_PER_PAGE, showInactiveValuesMenu} = config;\n\n const styles = useStyles();\n\n const {values, totalVisibleValues, page, setPage, isLoading, hasPaging, attributeType, showInactive} =\n useContext(SingleAttributeContext);\n\n const entityUri = useSelector(mdm.selectors.getEntityUri);\n const isViewMode = useSelector(mdm.selectors.getIsViewMode);\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode);\n const pivotingAttributes: PivotingAttribute[] = useSelector(mdm.selectors.getPivotingAttributes);\n\n const hasValues = values.length !== 0;\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n const renderContent = () => {\n if (isLoading) {\n return <LinearLoadIndicator />;\n }\n\n if (attributeType) {\n if (isViewMode && hasValues) {\n const props = {\n values,\n attributeType,\n showInactive\n };\n return <SingleAttributeReadableContent {...props} />;\n } else if (isEditableMode) {\n const props = {\n values,\n attributeType,\n parentUri: entityUri,\n showInactive,\n noDataText\n };\n return <SingleAttributeEditableContent {...props} />;\n }\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n };\n\n return (\n <PivotingAttributeContext.Provider value={pivotingAttributes}>\n <BasicView className={classnames(styles.root, className)}>\n <SingleAttributeHeader\n totalVisibleValues={totalVisibleValues}\n caption={caption}\n showInactiveValuesMenu={showInactiveValuesMenu}\n isEditableMode={isEditableMode}\n />\n <Box className={styles.content}>{renderContent()}</Box>\n {hasPaging && (\n <BasicTablePagination\n count={totalVisibleValues}\n page={page}\n rowsPerPage={max}\n rowsPerPageOptions={[]}\n onChangePage={setPage}\n classes={{root: styles.pagination}}\n />\n )}\n </BasicView>\n </PivotingAttributeContext.Provider>\n );\n};\n","import {useCallback, useState, useEffect, useMemo, useRef} from 'react';\nimport {ifElse, prop, always, has, pathOr, path, partition, propEq} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n isDataTenantEntity,\n getPagedEntity,\n getAttributeSource,\n AttributeValue,\n SearchFilter,\n findAttributeTypeByUri,\n isReadableAttribute,\n isTempUri,\n isOv,\n findAttributeValues,\n isFirstLevelAttributeUri,\n SingleAttributeViewConfig,\n getRequestErrorMessage,\n Paging\n} from '@reltio/mdm-sdk';\nimport mdm, {profile, ui} from '@reltio/mdm-module';\nimport {useSafePromise, useDidUpdateEffect} from '@reltio/components';\nimport {getPagedLocalEntity, getAttributeNameFromAttributeUri} from './helpers';\nimport i18n from 'ui-i18n';\n\ntype Params = {\n filters?: SearchFilter[];\n searchQuery?: string;\n sorting?: {\n field: string;\n order: string;\n };\n page: number;\n showInactive: boolean;\n};\n\nexport const useSingleAttributeLoader = <GenericAttributeValue extends AttributeValue>(\n config: SingleAttributeViewConfig,\n params: Params\n) => {\n const {attributeUri, max = 15} = config;\n const metadata = useSelector(mdm.selectors.getMetadata);\n const [values, setValues] = useState<GenericAttributeValue[]>([]);\n const [paging, setPaging] = useState<Paging>(null);\n const [isLoading, setIsLoading] = useState(false);\n const safePromise = useSafePromise();\n const attributeValuesRef = useRef<GenericAttributeValue[]>(null);\n\n const dispatch = useDispatch();\n const apiPath = useSelector(mdm.selectors.getApiPath);\n const tenant = useSelector(mdm.selectors.getTenant);\n const entity = useSelector(mdm.selectors.getEntityWithDiff);\n\n const isViewMode = useSelector(mdm.selectors.getIsViewMode);\n const isHistoryModeEnabled = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const diff = useSelector(mdm.selectors.getHistoryDiff);\n\n const parentUri = entity.uri;\n const attributeTypeName = getAttributeNameFromAttributeUri(attributeUri);\n const attributeTypeSource = getAttributeSource(attributeUri);\n attributeValuesRef.current = findAttributeValues(entity, parentUri, attributeTypeName);\n const attributeType = useMemo(() => findAttributeTypeByUri(metadata, attributeUri), [metadata, attributeUri]);\n const {globalFilter} = useSelector(mdm.selectors.getGlobalSearchRequestOptions);\n const {showInactive} = params;\n const loadAttributes = useCallback(() => {\n if (\n attributeType &&\n isReadableAttribute(attributeType) &&\n !isTempUri(parentUri) &&\n isFirstLevelAttributeUri(attributeUri)\n ) {\n setIsLoading(true);\n const {page, showInactive, ...rest} = params;\n const request = isDataTenantEntity(entity) || isHistoryModeEnabled ? getPagedLocalEntity : getPagedEntity;\n safePromise(\n request({\n metadata,\n entity,\n apiPath,\n tenant,\n parentUri,\n defaultMaxValues: max,\n attributeTypeUri: attributeUri,\n offset: max * page,\n globalFilter,\n options: showInactive ? '' : undefined,\n ...rest\n })\n )\n .then((response) => {\n const attributes = path([attributeTypeSource], response);\n const values: GenericAttributeValue[] = pathOr([], [attributeTypeName], attributes);\n if (!isHistoryModeEnabled) {\n dispatch(\n profile.actions.processNextPageOfAttributeValues({\n parentUri,\n attributeTypeUri: attributeUri,\n attributeTypeName,\n values\n })\n );\n }\n setValues(\n values.map((loadedValue) => {\n const valueFromEntity = attributeValuesRef.current?.find(propEq('uri', loadedValue.uri));\n return valueFromEntity || loadedValue;\n })\n );\n setPaging(path(['paging', attributeUri], attributes));\n })\n .catch((error) => {\n console.error(error);\n setValues([]);\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n })\n .finally(() => {\n setIsLoading(false);\n });\n } else {\n setValues([]);\n setPaging(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n apiPath,\n parentUri,\n tenant,\n attributeUri,\n max,\n metadata,\n params,\n globalFilter,\n attributeType,\n isHistoryModeEnabled,\n diff\n ]);\n\n useEffect(() => {\n loadAttributes();\n }, [loadAttributes]);\n\n useDidUpdateEffect(() => {\n if (isViewMode) {\n loadAttributes();\n }\n }, [isViewMode]);\n const partitionByOv = partition(isOv);\n const [, nonOvValues] = partitionByOv(attributeValuesRef.current || []);\n const nonVisibleValues: GenericAttributeValue[] = showInactive ? [] : nonOvValues;\n const totalProp = showInactive ? 'totalValues' : 'totalOvValues';\n const totalVisibleValues: number = ifElse(has(totalProp), prop(totalProp), always(values.length))(paging);\n const hasPaging = max < totalVisibleValues;\n const totalNonVisibleValues = paging?.totalValues\n ? paging.totalValues - totalVisibleValues\n : nonVisibleValues.length;\n return {\n values,\n isLoading,\n hasPaging,\n totalVisibleValues,\n attributeType,\n totalNonVisibleValues,\n nonVisibleValues\n };\n};\n","import React from 'react';\nimport {RelationsViewState} from '../hooks/useRelationsState';\n\nexport const RelationsViewStateContext = React.createContext<RelationsViewState>(null);\n\nRelationsViewStateContext.displayName = 'RelationsViewStateContext';\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nconst popupHorizontalPadding = '23px';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n button: {\n color: theme.palette.text.secondary,\n width: '36px',\n minWidth: '36px'\n },\n popupContent: {\n padding: `19px ${popupHorizontalPadding}`\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n },\n divider: {\n backgroundColor: 'rgba(0,0,0,0.1)',\n margin: `19px -${popupHorizontalPadding}`\n },\n title: {\n marginBottom: '30px'\n },\n sortControls: {\n display: 'flex',\n alignItems: 'center'\n },\n sortSelectorRoot: {\n flex: 1,\n padding: '13px 16px',\n fontSize: '0.85rem'\n },\n sortSelectorMenuItem: {\n fontSize: '0.85rem'\n },\n sortOrderButton: {\n flexShrink: 0,\n margin: '0 8px 0 7px'\n }\n}));\n","import React, {useContext, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {isEmptyValue} from '@reltio/mdm-sdk';\nimport {DropDownEditor, SmallIconButtonWithTooltip} from '@reltio/components';\nimport {Popover as Popover} from '@material-ui/core';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport FilterIcon from '@material-ui/icons/FilterList';\nimport {Button as Button} from '@material-ui/core';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';\nimport ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';\nimport {RelationsViewStateContext} from '../../../contexts/RelationsViewStateContext';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst FilterButton = ({className}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const {\n showInactive,\n toggleShowInactive,\n sortOrder,\n toggleSortOrder,\n sortOption,\n changeSortOption,\n sortOptions\n } = useContext(RelationsViewStateContext);\n const [isOpen, setIsOpen] = useState(false);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n const hasSortOptions = !isEmptyValue(sortOptions);\n\n const isAsc = sortOrder === 'asc';\n\n return (\n <>\n <Button\n ref={buttonRef}\n classes={{\n root: classnames(styles.button, className)\n }}\n onClick={togglePopup}\n >\n <FilterIcon />\n </Button>\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive || false}\n onChange={toggleShowInactive}\n />\n }\n label={i18n.text('Show inactive Relationships')}\n />\n {hasSortOptions && (\n <>\n <Divider className={styles.divider} />\n <Typography className={styles.title} variant=\"h6\">\n {i18n.text('Sort by')}\n </Typography>\n <div className={styles.sortControls}>\n <DropDownEditor\n entries={sortOptions}\n TextFieldProps={{variant: 'filled'}}\n classes={{\n root: styles.sortSelectorRoot,\n menuItem: styles.sortSelectorMenuItem\n }}\n fullWidth\n disableUnderline\n value={sortOption}\n onChange={changeSortOption}\n MenuProps={{\n getContentAnchorEl: null,\n anchorOrigin: {vertical: 'bottom', horizontal: 'left'}\n }}\n />\n <SmallIconButtonWithTooltip\n tooltipTitle={isAsc ? i18n.text('Ascending') : i18n.text('Descending')}\n icon={isAsc ? ArrowUpwardIcon : ArrowDownwardIcon}\n onClick={toggleSortOrder}\n className={styles.sortOrderButton}\n size=\"L\"\n />\n </div>\n </>\n )}\n </Popover>\n </>\n );\n};\n\nFilterButton.displayName = 'FilterButton';\n\nexport default FilterButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n header: {\n padding: '0 6px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px',\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n }\n});\n","import React from 'react';\nimport {RelationsViewConfig} from '@reltio/mdm-sdk';\n\nexport const ImportDTContext = React.createContext<{\n reloadRelations: () => void;\n config: Pick<RelationsViewConfig, 'content' | 'importFromDT' | 'maxDtssImport'>;\n }>(null);\n","import {useSelector, useDispatch} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {useCallback, useContext, useEffect, useState} from 'react';\nimport {getRequestErrorMessage, hasNonImportedRelations, importDTConnections, isTempUri} from '@reltio/mdm-sdk';\nimport {ui} from '@reltio/mdm-module';\nimport {ImportDTContext} from '../../../../contexts/ImportDTContext';\nimport i18n from 'ui-i18n';\n\nconst MAX = Math.pow(2, 31) - 1;\ntype Tenant = {id: string; label: string};\n\nexport const useImportFromDTLoader = () => {\n const dataTenants: Array<Tenant> = useSelector(mdmModule.selectors.getDataTenants);\n const dispatch = useDispatch();\n const {config, reloadRelations} = useContext(ImportDTContext);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const [tenants, setTenants] = useState<Array<Tenant>>([]);\n const [selectedTenant, setSelectedTenant] = useState<Tenant>(null);\n const dtssPath = useSelector(mdmModule.selectors.getDtssPath);\n const customerTenant = useSelector(mdmModule.selectors.getTenant);\n const content = [{...config.content, offset: 0, max: config.maxDtssImport ?? MAX}];\n\n const checkHasNonImportedConnections = useCallback(() => {\n setTenants([]);\n if (config.importFromDT && !isTempUri(entityUri)) {\n Promise.all(\n (dataTenants || []).map((tenant) =>\n hasNonImportedRelations({\n entityUri,\n content,\n dtssPath,\n customerTenant,\n dataTenant: tenant.id\n }).then(({hasNonImportedConnections}) => ({\n ...tenant,\n hasNonImportedConnections\n }))\n )\n )\n .then((modifiedTenants) => modifiedTenants.filter((tenant) => tenant.hasNonImportedConnections))\n .then(setTenants);\n }\n }, [entityUri, dtssPath, customerTenant, config, dataTenants]);\n\n const onConfirmImport = useCallback(() => {\n importDTConnections({\n entityUri,\n content,\n dtssPath,\n customerTenant,\n dataTenant: selectedTenant.id\n })\n .then(() => {\n reloadRelations();\n checkHasNonImportedConnections();\n })\n .catch((error) =>\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))))\n );\n setSelectedTenant(null);\n }, [\n entityUri,\n dtssPath,\n customerTenant,\n config,\n checkHasNonImportedConnections,\n reloadRelations,\n selectedTenant,\n setSelectedTenant\n ]);\n\n useEffect(() => {\n checkHasNonImportedConnections();\n }, [checkHasNonImportedConnections]);\n const onCancelConfirmation = useCallback(() => setSelectedTenant(null), []);\n const onImportClick = useCallback((tenant: Tenant) => setSelectedTenant(tenant), []);\n return {\n tenants,\n selectedTenant,\n onConfirmImport,\n onCancelConfirmation,\n onImportClick\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n tenant: {\n backgroundColor: '#0000EE',\n cursor: 'pointer',\n position: 'absolute',\n top: '8px',\n left: '22px',\n width: '10px',\n height: '10px',\n color: 'white',\n fontSize: '10px',\n fontWeight: 'bold',\n userSelect: 'text',\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n button: {\n position: 'relative'\n },\n badge: {\n fontSize: '10px',\n height: '14px',\n minWidth: '14px',\n width: '14px',\n fontWeight: 'bold',\n backgroundColor: '#FF4081',\n color: '#FFF'\n },\n badgePosition: {\n right: '5px',\n top: '4px'\n }\n}));\n","import React from 'react';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport {Badge as Badge} from '@material-ui/core';\nimport {useStyles} from './styles';\n\ninterface Props {\n label: number | string;\n}\n\nexport const MultipleImportIcon = ({label}: Props) => {\n const styles = useStyles();\n return (\n <Badge\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n badgeContent={label}\n >\n <CloudDownloadIcon />\n </Badge>\n );\n};\n","import React from 'react';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport {DropDownMenuButton, SmallIconButtonWithTooltip} from '@reltio/components';\nimport {useImportFromDTLoader} from './hooks/useImportFromDTLoader';\nimport {useStyles} from './styles';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {ConfirmationDialog} from '@reltio/components';\nimport {MultipleImportIcon} from './MultipleImportIcon';\n\nexport const ImportFromDT = () => {\n const {tenants, selectedTenant, onConfirmImport, onCancelConfirmation, onImportClick} = useImportFromDTLoader();\n const styles = useStyles();\n const oneTenant = tenants.length === 1;\n const labelOnButton = oneTenant\n ? tenants[0].label.indexOf('DT:') === 0\n ? tenants[0].label[3]\n : tenants[0].label[0]\n : tenants.length;\n return (\n <>\n {!!tenants.length && (\n <>\n {oneTenant ? (\n <div className={styles.button}>\n <SmallIconButtonWithTooltip\n size={'L'}\n icon={CloudDownloadIcon}\n tooltipTitle={i18n.text('Import connections from ${label}', {label: tenants[0].label})}\n onClick={() => onImportClick(tenants[0])}\n />\n <div className={classnames(styles.tenant)}>{labelOnButton}</div>\n </div>\n ) : (\n <DropDownMenuButton\n menuId={'importDT-table-actions'}\n buttonComponent={SmallIconButtonWithTooltip}\n buttonProps={{\n tooltipTitle: i18n.text('Import connections'),\n size: 'L',\n // eslint-disable-next-line react/display-name\n icon: () => <MultipleImportIcon label={labelOnButton} />\n }}\n menuItems={tenants.map((tenant) => ({\n onClick: () => {\n onImportClick(tenant);\n },\n text: tenant.label\n }))}\n />\n )}\n <ConfirmationDialog\n open={!!selectedTenant}\n title={i18n.text('Confirmation')}\n content={i18n.text('Import connections from ${label}?', {label: selectedTenant?.label})}\n discardCaption={i18n.text('Cancel')}\n saveCaption={i18n.text('Import')}\n onDiscard={onCancelConfirmation}\n onSave={onConfirmImport}\n />\n </>\n )}\n </>\n );\n};\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {ExpandableSearchInput, FacetViewHeader, HideOnShrink, VerticalDivider} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport FilterButton from './FilterButton/FilterButton';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {useStyles} from './styles';\nimport {ImportFromDT} from './ImportFromDT/ImportFromDT';\n\ntype Props = {\n title?: string;\n total?: number;\n};\n\nconst RelationsHeader = ({title, total}: Props) => {\n const styles = useStyles();\n\n const {searchQuery, changeSearchQuery} = useContext(RelationsViewStateContext);\n\n return (\n <FacetViewHeader title={title || ''} className={styles.header}>\n {total > 0 && (\n <HideOnShrink widthToHide={400}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {total > 1\n ? i18n.text('${count} items', {count: total})\n : i18n.text('${count} item', {count: total})}\n </Typography>\n </HideOnShrink>\n )}\n <ExpandableSearchInput query={searchQuery} onChange={changeSearchQuery} />\n <ImportFromDT />\n <FilterButton />\n </FacetViewHeader>\n );\n};\n\nexport default RelationsHeader;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {tooltip: Record<string, string | number>}) => ({\n tooltip: theme.tooltip,\n tooltipContent: {\n minWidth: '165px',\n padding: '4px 2px 2px'\n },\n label: {\n fontSize: '11px',\n lineHeight: '13px',\n fontWeight: 500,\n margin: 0,\n color: 'white'\n },\n secondaryLabel: {\n color: 'rgba(255, 255, 255, 0.7)',\n fontSize: '10px',\n marginTop: '4px',\n fontWeight: 500,\n lineHeight: '11px'\n },\n progress: {\n marginTop: '4px',\n color: '#FFFFFF'\n }\n}));\n","import React, {useCallback, useEffect, useState} from 'react';\nimport {isNil, ifElse} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n ConnectionEntity,\n getDataTenantEntitySecondaryLabel,\n getEntitySecondaryLabel,\n isDataTenantEntity,\n isTempUri\n} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {useSafePromise} from '@reltio/components';\nimport {CircularProgress as CircularProgress} from '@material-ui/core';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {useStyles} from './styles';\n\nconst PROGRESS_ICON_SIZE = 16;\n\ntype Props = {\n label: string;\n entity?: ConnectionEntity;\n children: React.ReactElement;\n};\n\nconst RelationTooltip = ({label, entity, children, ...tooltipProps}: Props) => {\n const styles = useStyles();\n const safePromise = useSafePromise();\n const tenant = useSelector(mdm.selectors.getTenant);\n const dtssPath = useSelector(mdm.selectors.getDtssPath) as string;\n const [isLoading, setIsLoading] = useState(false);\n const [secondaryLabel, setSecondaryLabel] = useState<string>(null);\n\n useEffect(() => {\n setSecondaryLabel(null);\n }, [entity]);\n\n const onOpen = useCallback(() => {\n if (entity?.entityUri && !isTempUri(entity?.entityUri) && isNil(secondaryLabel)) {\n const request = ifElse(\n isDataTenantEntity,\n (entity: ConnectionEntity) =>\n getDataTenantEntitySecondaryLabel({\n entityUri: entity.entityUri,\n dataTenant: entity.dataTenant,\n customerTenant: tenant,\n dtssPath\n }),\n (entity: ConnectionEntity) => getEntitySecondaryLabel(entity.entityUri)\n );\n\n setIsLoading(true);\n safePromise(request(entity))\n .then(({secondaryLabel}) => {\n setSecondaryLabel(secondaryLabel);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }\n }, [dtssPath, entity, tenant, safePromise, secondaryLabel]);\n\n const tooltipContent = (\n <div className={styles.tooltipContent}>\n <div className={styles.label}>{label}</div>\n {isLoading && <CircularProgress size={PROGRESS_ICON_SIZE} classes={{colorPrimary: styles.progress}} />}\n {secondaryLabel && <div className={styles.secondaryLabel}>{secondaryLabel}</div>}\n </div>\n );\n\n return (\n <Tooltip\n onOpen={onOpen}\n title={tooltipContent}\n disableFocusListener\n classes={{tooltip: styles.tooltip}}\n {...tooltipProps}\n >\n {children}\n </Tooltip>\n );\n};\n\nexport default RelationTooltip;\n","import {\n Connection,\n Metadata,\n getEntityType,\n getLabel,\n getEntityUriForLink,\n getRelationTypeLabelFromMetadata,\n TEntityType\n} from '@reltio/mdm-sdk';\n\nexport const useRelationInfo = (connection: Connection, metadata: Metadata) => {\n const {entity, relation} = connection;\n const entityType = getEntityType(metadata, entity?.entityType) as TEntityType;\n const entityLabel = getLabel(entity?.entityLabel) as string;\n const preparedUri = getEntityUriForLink({uri: entity?.entityUri, dataTenant: entity?.dataTenant}) as string;\n const relationLabel =\n relation?.relationLabel || (getRelationTypeLabelFromMetadata(metadata, relation?.relationType) as string);\n\n return {\n entityType,\n entityLabel,\n preparedUri,\n relationLabel\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n container: {\n display: 'flex'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport Button, {ButtonProps} from '@material-ui/core/Button';\nimport {useStyles} from './styles';\n\ntype Props = {\n acceptRelation: () => void;\n ignoreRelation: () => void;\n};\n\nexport const SuggestedButtons = ({acceptRelation, ignoreRelation, ...props}: Props & ButtonProps) => {\n const styles = useStyles();\n return (\n <div className={styles.container}>\n <Button onClick={acceptRelation} variant=\"text\" color=\"primary\" {...props} style={{alignSelf: 'center'}}>\n {i18n.text('Accept')}\n </Button>\n <Button onClick={ignoreRelation} variant=\"text\" color=\"primary\" {...props} style={{alignSelf: 'center'}}>\n {i18n.text('Ignore')}\n </Button>\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {inactiveBackground: string}) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n\n marginBottom: '2px'\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row',\n minHeight: '24px',\n padding: '0 16px'\n },\n rowInactive: {\n background: theme.inactiveBackground\n },\n entityAvatar: {\n height: '12px',\n width: '12px',\n fontSize: '11px',\n marginRight: '8px'\n },\n entityLabelContainer: {\n textDecoration: 'none',\n cursor: 'pointer',\n paddingRight: '8px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n editButtonsContent: {\n marginLeft: 'auto',\n flex: '0 0 40px'\n },\n editButtons: {\n padding: 0\n },\n removed: {\n color: theme.palette.text.secondary,\n textDecoration: 'line-through'\n },\n editedLabel: {\n fontStyle: 'italic',\n color: theme.palette.text.secondary,\n margin: '0 5px'\n }\n}));\n","import React, {memo, useCallback} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport mdm from '@reltio/mdm-module';\nimport {Typography as Typography} from '@material-ui/core';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport {Connection, Metadata, isActiveObject, checkRemoved, checkEdited, checkIgnored} from '@reltio/mdm-sdk';\nimport {EntityTypeIcon, EntityUriLink, SmallIconButtonWithTooltip} from '@reltio/components';\nimport RelationTooltip from '../RelationTooltip/RelationTooltip';\nimport {useRelationInfo} from '../../hooks/useRelationInfo';\nimport {checkRelationPermission} from '../../helpers/permissions';\nimport {SuggestedButtons} from '../SuggestedButtons/SuggestedButtons';\nimport {useStyles} from './styles';\n\ntype Props = {\n connection: Connection;\n onRemoveRelation: (relationUri: string) => void;\n onEditRelation: (connection: Connection) => void;\n onAcceptRelation?: (connection: Connection) => void;\n onIgnoreRelation?: (connection: Connection) => void;\n metadata: Metadata;\n showControls: boolean;\n renderRelationArrowButton?: () => React.ReactNode;\n};\n\nconst EditableRelationItem = memo(\n ({\n connection,\n metadata,\n showControls,\n onRemoveRelation,\n onEditRelation,\n onAcceptRelation,\n onIgnoreRelation,\n renderRelationArrowButton\n }: Props) => {\n const styles = useStyles();\n\n const {entity, relation} = connection;\n const removed = checkRemoved(connection);\n const edited = checkEdited(connection);\n const ignored = checkIgnored(connection);\n const {entityType, entityLabel, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const isActive = isActiveObject(relation) && isActiveObject(entity);\n const mode = useSelector(mdm.selectors.getMode);\n const {canRemove, canUpdate} = checkRelationPermission({\n mode,\n onRemoveRelation,\n onEditRelation,\n metadata,\n connection\n });\n\n const handleRemoveRelation = useCallback(\n () => onRemoveRelation(connection.relation.relationUri),\n [onRemoveRelation, connection]\n );\n\n const handleEditRelation = useCallback(() => onEditRelation(connection), [onEditRelation, connection]);\n\n const handleAcceptRelation = useCallback(() => {\n onAcceptRelation(connection);\n }, [onAcceptRelation, connection]);\n\n const handleIgnoreRelation = useCallback(() => onIgnoreRelation(connection), [onIgnoreRelation, connection]);\n\n const editButtonsContent =\n (canRemove || canUpdate) && showControls && !connection.suggested ? (\n <>\n {canUpdate && (\n <SmallIconButtonWithTooltip\n icon={EditIcon}\n size=\"XS\"\n onClick={handleEditRelation}\n tooltipTitle={i18n.text('Edit')}\n />\n )}\n {canRemove && (\n <SmallIconButtonWithTooltip\n icon={DeleteIcon}\n size=\"XS\"\n onClick={handleRemoveRelation}\n tooltipTitle={i18n.text('Remove')}\n />\n )}\n </>\n ) : undefined;\n\n const suggustedButtonsContent = connection.suggested ? (\n <SuggestedButtons\n acceptRelation={handleAcceptRelation}\n ignoreRelation={handleIgnoreRelation}\n size=\"small\"\n disabled={ignored}\n />\n ) : undefined;\n const captionText = ignored ? i18n.text('ignored') : i18n.text('edited');\n return (\n <div\n className={classnames(\n styles.container,\n {[styles.rowInactive]: !isActive},\n {[styles.removed]: removed || ignored}\n )}\n >\n <div className={styles.row}>\n {renderRelationArrowButton && renderRelationArrowButton()}\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n {(edited || ignored) && (\n <Typography variant=\"caption\" className={styles.editedLabel}>\n ({captionText})\n </Typography>\n )}\n {relationLabel && <span className={styles.relationLabel}>{`, ${relationLabel}`}</span>}\n </EntityUriLink>\n\n <div className={styles.editButtonsContent}>{editButtonsContent}</div>\n {suggustedButtonsContent}\n </div>\n </div>\n );\n }\n);\n\nEditableRelationItem.displayName = 'EditableRelationItem';\n\nexport default EditableRelationItem;\n","import {checkMetadataForDelete, checkMetadataForUpdate, checkRemoved, getRelationType, Mode} from '@reltio/mdm-sdk';\n\nexport const checkRelationPermission = ({metadata, mode, connection, onRemoveRelation, onEditRelation}) => {\n const isEditableMode = mode === Mode.Editing || mode === Mode.Suggesting;\n if (isEditableMode && connection) {\n const {\n relation: {relationType}\n } = connection;\n const isRemoved = checkRemoved(connection);\n const relationTypeMetadata = getRelationType(metadata, relationType);\n const canRemove = onRemoveRelation && !isRemoved && checkMetadataForDelete(mode, relationTypeMetadata);\n const canUpdate = onEditRelation && !isRemoved && checkMetadataForUpdate(mode, relationTypeMetadata);\n return {canRemove, canUpdate};\n } else {\n return {canRemove: false, canUpdate: false};\n }\n};\n","import {prop, when} from 'ramda';\nimport {Directions, wrapInArrayIfNeeded, InOutRelation, isObject} from '@reltio/mdm-sdk';\n\nconst getUri = when(isObject, prop('uri'));\n\nexport const getFirstRelationTypeObject = (inRelations: InOutRelation, outRelations: InOutRelation) => {\n const prepareRelation = (direction: string, relations: InOutRelation) => {\n const relationsArr = relations ? wrapInArrayIfNeeded(relations) : [];\n return relationsArr.map((relation) => ({\n type: getUri(relation),\n direction: direction === Directions.IN ? Directions.IN : Directions.OUT\n }));\n };\n return prepareRelation(Directions.IN, inRelations).concat(prepareRelation(Directions.OUT, outRelations))[0];\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n arrowIcon: {\n fontSize: '16px',\n marginRight: '6px'\n }\n});\n","import React from 'react';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport {checkNew, Connection, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n onClick: () => void;\n connection: Connection;\n config: RelationsViewConfig;\n showSecondLevel: boolean;\n};\n\nexport const RelationArrowButton = ({onClick, connection, config, showSecondLevel}: Props) => {\n const styles = useStyles();\n const {parentEntityUri} = connection;\n const {contentSecondLevel} = config;\n\n const props = {\n onClick,\n className: styles.arrowIcon\n };\n\n if (parentEntityUri || !contentSecondLevel || checkNew(connection)) {\n return null;\n }\n\n return showSecondLevel ? <ArrowDropDownIcon {...props} /> : <ArrowRightIcon {...props} />;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n row: {\n display: 'flex',\n alignItems: 'center',\n width: '100%'\n },\n secondLevelContent: {\n paddingLeft: '24px'\n }\n});\n","import React, {useContext, useMemo} from 'react';\nimport {Connection, ActivityFilter, getEntitiesMapForConnections, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {useSecondLevelConnections} from '../../hooks/useSecondLevelConnections';\nimport {RelationArrowButton} from '../RelationArrowButton/RelationArrowButton';\nimport {RelationsContent} from '../RelationsContent/RelationsContent';\nimport {useStyles} from './styles';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {EntitiesMapContext} from '@reltio/components';\n\ntype Props = {\n config: RelationsViewConfig;\n connection: Connection;\n children: (render: () => React.ReactNode) => React.ReactNode;\n};\n\nexport const SecondLevelWrapper = ({config, connection, children}: Props) => {\n const styles = useStyles();\n\n const {showInactive} = useContext(RelationsViewStateContext);\n\n const {\n connections,\n showSecondLevel,\n toggleShowSecondLevel,\n loadRelations,\n loading,\n total\n } = useSecondLevelConnections({\n config,\n connection,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY\n });\n\n const entitiesMap = useMemo(() => getEntitiesMapForConnections(connections), [connections]);\n\n const renderRelationArrowButton = () => {\n return (\n <RelationArrowButton\n onClick={toggleShowSecondLevel}\n connection={connection}\n config={config}\n showSecondLevel={showSecondLevel}\n />\n );\n };\n\n return (\n <>\n {children(renderRelationArrowButton)}\n {showSecondLevel && (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <div className={styles.secondLevelContent}>\n <RelationsContent\n isLoading={loading}\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n total={total}\n parentEntityUri={connection.entity.entityUri}\n />\n </div>\n </EntitiesMapContext.Provider>\n )}\n </>\n );\n};\n","import {useState, useCallback} from 'react';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {\n Connection,\n getRelationsForEntity,\n ActivityFilter,\n GlobalSearchRequestOptions,\n RelationsViewConfig\n} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} from '@reltio/mdm-module';\n\ntype Params = {\n config: RelationsViewConfig;\n connection: Connection;\n relationActivityFilter: ActivityFilter;\n};\n\nexport const useSecondLevelConnections = ({config, connection, relationActivityFilter}: Params) => {\n const dispatch = useDispatch();\n\n const [showSecondLevel, setShowSecondLevel] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const {contentSecondLevel} = config;\n const {entity} = connection;\n\n const connections =\n (useSelector((state) =>\n mdmModule.selectors.getConnectionsWithDraftsByViewId(state, config.id, entity.entityUri)\n ) as Connection[]) || [];\n\n const total = useSelector((state) => mdmModule.selectors.getTotalByViewId(state, config.id, entity.entityUri));\n const {activityFilter}: GlobalSearchRequestOptions =\n useSelector(mdmModule.selectors.getGlobalSearchRequestOptions) || {};\n\n const loadRelations = useCallback(() => {\n const requestConfig = {\n ...contentSecondLevel,\n returnObjects: true,\n returnDates: true,\n activeness: {\n relation: relationActivityFilter || ActivityFilter.ALL,\n entity: activityFilter\n }\n };\n\n setLoading(true);\n\n getRelationsForEntity(entity.entityUri, [requestConfig]).then((response) => {\n const {connections, total} = response[0];\n\n if (connections) {\n dispatch(\n profile.relations.actions.secondLevelRelationsLoaded({\n connections,\n parentEntityUri: entity.entityUri,\n id: config.id,\n total\n })\n );\n }\n\n setLoading(false);\n });\n }, [config.id, contentSecondLevel, dispatch, entity.entityUri, activityFilter, relationActivityFilter]);\n\n const toggleShowSecondLevel = useCallback(() => {\n if (!showSecondLevel && !connection.connections) {\n loadRelations();\n }\n\n setShowSecondLevel((show) => !show);\n }, [loadRelations, connection.connections, showSecondLevel]);\n\n return {connections, showSecondLevel, toggleShowSecondLevel, loadRelations, loading, total};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px',\n marginLeft: '16px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n divider: {\n margin: '0 0 8px',\n backgroundColor: 'rgba(0,0,0,0.12)'\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px'\n }\n}));\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pipe, partition, evolve, always, omit} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {\n Connection,\n isTempUri,\n Mode,\n createNewConnectionWithDefaultRelationType,\n checkNew,\n RelationsViewConfig\n} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {RelationEditor} from '@reltio/components';\nimport EditableRelationItem from '../EditableRelationItem/EditableRelationItem';\nimport {getFirstRelationTypeObject} from '../../helpers/relation';\nimport {SecondLevelWrapper} from '../SecondLevelWrapper/SecondLevelWrapper';\nimport {useStyles} from './styles';\n\nexport type Props = {\n className?: string;\n noDataText: string;\n connections: Array<Connection>;\n config: RelationsViewConfig;\n mode: Mode;\n parentEntityUri?: string;\n};\n\nconst RelationsEditableContent = ({className, connections = [], config, mode, noDataText, parentEntityUri}: Props) => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const relationToAdd = useSelector((state) => mdmModule.selectors.getRelationToAddByViewId(state, config.id));\n const relationsToEdit = useSelector((state) => mdmModule.selectors.getRelationsToEditByViewId(state, config.id));\n const entity = useSelector(mdmModule.selectors.getEntity);\n const checkIfCanAddRelations = useSelector((state) =>\n mdmModule.selectors.getCheckIfCanAddRelations(state, config.content)\n );\n\n const dispatch = useDispatch();\n const styles = useStyles();\n\n const onAddRelation = useCallback(() => {\n const newConnection = createNewConnectionWithDefaultRelationType({config, mode, metadata, parentEntityUri});\n pipe(profile.relations.actions.openRelationEditor(config.id), dispatch)(newConnection);\n }, [config, mode, metadata, dispatch, parentEntityUri]);\n\n const onRemoveRelation = useCallback(\n (relationUri) => {\n dispatch(profile.relations.actions.closeRelationEditor(config.id, relationUri));\n dispatch(profile.relations.actions.removeRelation(config.id, relationUri));\n const connectionToRemove = connections.find(\n (connection) => profile.relations.selectors.getRelationUriFromConnection(connection) === relationUri\n );\n const entityUri = profile.relations.selectors.getEntityUriFromConnection(connectionToRemove);\n if (isTempUri(entityUri)) {\n dispatch(profile.modifiedEntities.actions.entityDeleted(entityUri));\n }\n },\n [config, connections, dispatch]\n );\n const content = config.content;\n const defaultRelationTypeObject = getFirstRelationTypeObject(content.inRelations, content.outRelations);\n const onAcceptRelation = useCallback(\n (connection) => {\n const connectionWithDefaultRelationType = pipe(\n omit(['suggested']),\n evolve({\n relation: {\n relationType: always(defaultRelationTypeObject.type),\n object: evolve({type: always(defaultRelationTypeObject.type), attributes: always(null)})\n }\n })\n )(connection);\n dispatch(profile.relations.actions.addRelation(config.id, connectionWithDefaultRelationType));\n },\n [dispatch, config, defaultRelationTypeObject]\n );\n\n const onIgnoreRelation = useCallback(\n (connection) => {\n dispatch(\n profile.relations.actions.ignoreRelation(config.id, {\n relationType: defaultRelationTypeObject.type,\n relationDirection: defaultRelationTypeObject.direction,\n entityUri: connection.entity.entityUri,\n relationUri: connection.relation.relationUri\n })\n );\n },\n [dispatch, config, defaultRelationTypeObject]\n );\n\n const [newConnections, currentConnections] = partition(checkNew, connections);\n const canAddRelations = entity && checkIfCanAddRelations;\n\n const isEmptyRelationList = newConnections.length === 0 && currentConnections.length === 0;\n\n const getRelationEditableContent = (connection: Connection) => {\n const openedRelation = relationsToEdit.find(\n (openedRelation) => openedRelation?.relation?.relationUri === connection?.relation?.relationUri\n );\n const showControls = !config.allowOnlyCreateNew || checkNew(connection);\n const itemKey = `${connection?.relation?.relationUri}-${connection?.relation?.direction}`;\n return (\n <SecondLevelWrapper config={config} connection={connection} key={itemKey}>\n {(renderRelationArrowButton) => {\n return openedRelation ? (\n <RelationEditor connection={openedRelation} config={config} mode={mode} metadata={metadata} />\n ) : (\n <EditableRelationItem\n renderRelationArrowButton={renderRelationArrowButton}\n connection={connection}\n metadata={metadata}\n showControls={showControls}\n onRemoveRelation={onRemoveRelation}\n onEditRelation={pipe(profile.relations.actions.openRelationEditor(config.id), dispatch)}\n onAcceptRelation={onAcceptRelation}\n onIgnoreRelation={onIgnoreRelation}\n />\n );\n }}\n </SecondLevelWrapper>\n );\n };\n\n const shouldShowAddRelationButton =\n canAddRelations && (!relationToAdd || (relationToAdd && relationToAdd.parentEntityUri === parentEntityUri));\n\n const shouldShowRelationEditorToAdd = relationToAdd && relationToAdd.parentEntityUri === parentEntityUri;\n\n return (\n <div className={className}>\n {shouldShowAddRelationButton && (\n <Button color=\"primary\" onClick={onAddRelation} className={styles.moreButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {shouldShowRelationEditorToAdd && (\n <RelationEditor connection={relationToAdd} config={config} mode={mode} metadata={metadata} />\n )}\n {newConnections.map(getRelationEditableContent)}\n {newConnections.length > 0 && currentConnections.length > 0 && <Divider className={styles.divider} />}\n {currentConnections.map(getRelationEditableContent)}\n {isEmptyRelationList && <Typography className={styles.noData}>{noDataText}</Typography>}\n </div>\n );\n};\n\nexport default RelationsEditableContent;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n attributesList: {\n paddingLeft: '46px',\n paddingRight: '16px',\n marginBottom: '10px',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0\n }\n}));\n","import React, {useContext, useEffect, useMemo} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n AttributeType,\n CollaborationObjectTypes,\n Connection,\n createRelatedObjectUris,\n Entity,\n getActivenessAttributes,\n getAttributesListForReadMode,\n getAttributeValuesUris,\n getRelationAttributesList,\n isEmptyValue,\n Metadata\n} from '@reltio/mdm-sdk';\nimport {CollaborationContext, ReadOnlyAttributesList, RelatedObjectUrisContext} from '@reltio/components';\nimport {useStyles} from './styles';\nimport {isEmpty} from 'ramda';\n\ntype Props = {\n connection: Connection;\n className?: string;\n};\n\nexport const RelationAttributes = ({connection, className}: Props) => {\n const styles = useStyles();\n\n const {relation} = connection;\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n\n const firstLevelRelationAttrTypes = useMemo(\n () => getRelationAttributesList(metadata, relation?.relationType) as AttributeType[],\n [relation?.relationType, metadata]\n );\n\n const attributeListEntity = useMemo(\n () => ({\n attributes: {\n ...profile.relations.selectors.getRelationAttributesFromConnection(connection)\n },\n ...getActivenessAttributes(connection?.relation || {})\n }),\n [connection]\n );\n\n const attributesList = useMemo(\n () => getAttributesListForReadMode(firstLevelRelationAttrTypes, attributeListEntity as Entity),\n [firstLevelRelationAttrTypes, attributeListEntity]\n );\n\n const showAttributesList = attributesList.filter(({values}) => !isEmptyValue(values)).length > 0;\n\n const objectIds = useMemo(() => getAttributeValuesUris(attributeListEntity.attributes), [attributeListEntity]);\n\n const {getCommentsCount} = useContext(CollaborationContext);\n useEffect(() => {\n !isEmpty(objectIds) && getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n const additionalRelatedObjectUris = useMemo(\n () => createRelatedObjectUris(CollaborationObjectTypes.RELATION, {entityUri: currentEntityUri, connection}),\n [connection, currentEntityUri]\n );\n\n return showAttributesList ? (\n <RelatedObjectUrisContext.Provider value={additionalRelatedObjectUris}>\n <ReadOnlyAttributesList\n className={classnames(styles.attributesList, className)}\n entity={attributeListEntity}\n attrTypes={firstLevelRelationAttrTypes}\n />\n </RelatedObjectUrisContext.Provider>\n ) : (\n <div className={classnames(styles.attributesList, className)}>{i18n.text('No attributes')}</div>\n );\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\nimport InfoIconSelected from '@material-ui/icons/InfoRounded';\nimport InfoIcon from '@material-ui/icons/InfoOutlined';\n\ntype Props = {\n show: boolean;\n onToggle: () => void;\n className?: string;\n};\n\nexport const ShowDetailsButton = ({show, onToggle, className}: Props) => {\n return (\n <SmallIconButtonWithTooltip\n className={className}\n tooltipTitle={\n show\n ? i18n.text('Hide attributes of the relationship')\n : i18n.text('Show attributes of the relationship')\n }\n tooltipPlacement=\"bottom-end\"\n size=\"XXS\"\n icon={show ? InfoIconSelected : InfoIcon}\n onClick={onToggle}\n />\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {inactiveBackground: string; suggested: string}) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n paddingBottom: '2px'\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row',\n minHeight: '16px',\n padding: '3px 11px 3px 16px'\n },\n rowInactive: {\n background: theme.inactiveBackground\n },\n entityAvatar: {\n height: '12px',\n width: '12px',\n fontSize: '11px',\n marginRight: '8px'\n },\n entityLabelContainer: {\n textDecoration: 'none',\n cursor: 'pointer',\n wordBreak: 'break-all',\n paddingRight: '8px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n showDetails: {\n marginLeft: 'auto',\n paddingRight: '5px'\n },\n attributesList: {\n paddingLeft: '46px',\n marginBottom: '10px',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0\n },\n suggestedWrapper: {\n backgroundColor: theme.suggested\n },\n commentsContainer: {\n marginLeft: 'auto',\n alignItems: 'center',\n '& + $showDetails': {\n marginLeft: '4px'\n }\n },\n additionalButtonsWrapper: {\n marginLeft: 'auto',\n display: 'flex'\n },\n labelWrapper: {\n display: 'flex',\n alignItems: 'center'\n }\n}));\n","import React, {memo, useState} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {\n Connection,\n Metadata,\n isActiveObject,\n createRelatedObjectUris,\n CollaborationObjectTypes,\n getConnectionRelationUriForLink\n} from '@reltio/mdm-sdk';\nimport {isEmpty} from 'ramda';\nimport {COMMENTS_CONTAINER_VISIBILITY_AREA, CommentsContainer, EntityTypeIcon, EntityUriLink} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport RelationTooltip from '../../RelationTooltip/RelationTooltip';\nimport {RelationAttributes} from '../RelationAttributes/RelationAttributes';\nimport {ShowDetailsButton} from '../ShowDetailsButton/ShowDetailsButton';\nimport {useRelationInfo} from '../../../hooks/useRelationInfo';\nimport {useStyles} from './styles';\nimport {SuggestedButtons} from '../../SuggestedButtons/SuggestedButtons';\n\ntype Props = {\n connection: Connection;\n acceptRelation?: (connection: Connection) => () => void;\n ignoreRelation?: (connection: Connection) => () => void;\n renderRelationArrowButton: () => React.ReactNode;\n};\n\nconst RelationItem = memo(({connection, renderRelationArrowButton, acceptRelation, ignoreRelation}: Props) => {\n const styles = useStyles();\n const isSuggested = connection.suggested;\n const {entity, relation} = connection;\n const [showDetails, setShowDetails] = useState(false);\n\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n const {entityType, entityLabel, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const isActive = isActiveObject(relation) && isActiveObject(entity);\n\n const toggleShowDetails = () => {\n setShowDetails((show) => !show);\n };\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n const relatedObjectUris =\n (entity &&\n relation &&\n createRelatedObjectUris(CollaborationObjectTypes.RELATION, {\n entityUri: currentEntityUri,\n connection\n })) ||\n [];\n return (\n <div\n className={classnames(\n styles.container,\n {[styles.rowInactive]: !isActive},\n {[styles.suggestedWrapper]: isSuggested}\n )}\n >\n <div className={classnames(styles.row, COMMENTS_CONTAINER_VISIBILITY_AREA)}>\n {renderRelationArrowButton && renderRelationArrowButton()}\n <div className={styles.labelWrapper}>\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n {relationLabel && <span className={styles.relationLabel}>{`, ${relationLabel}`}</span>}\n </EntityUriLink>\n </div>\n <div className={styles.additionalButtonsWrapper}>\n {!isEmpty(relatedObjectUris) && (\n <CommentsContainer\n className={styles.commentsContainer}\n uri={getConnectionRelationUriForLink(relation)}\n relatedObjectUris={relatedObjectUris}\n objectType={CollaborationObjectTypes.RELATION}\n allowOnlyOneComment\n />\n )}\n {isSuggested && (\n <SuggestedButtons\n size=\"small\"\n acceptRelation={acceptRelation(connection)}\n ignoreRelation={ignoreRelation(connection)}\n />\n )}\n {!isSuggested && (\n <ShowDetailsButton\n show={showDetails}\n onToggle={toggleShowDetails}\n className={styles.showDetails}\n />\n )}\n </div>\n </div>\n {showDetails && <RelationAttributes connection={connection} />}\n </div>\n );\n});\n\nRelationItem.displayName = 'RelationItem';\n\nexport default RelationItem;\n","import {pluck, mean, pipe, defaultTo} from 'ramda';\nimport {Rating} from '@reltio/mdm-sdk';\n\nexport const calcAverageRating = (ratings: Rating[]) => {\n return pipe(pluck('value'), mean, defaultTo(0))(ratings);\n};\n\nexport const getCountOfLikes = (ratings: Rating[]) => {\n return ratings.filter((rating) => rating.value === 5).length;\n};\n\nexport const getCountOfDislikes = (ratings: Rating[]) => {\n return ratings.filter((rating) => rating.value === 1).length;\n};\n\nexport const calcWidthOfLikesScale = (ratings: Rating[]) => {\n if (ratings.length === 0) {\n return '0%';\n }\n\n return (getCountOfLikes(ratings) / ratings.length) * 100 + '%';\n};\n\nexport const calcWidthOfDislikesScale = (ratings: Rating[]) => {\n if (ratings.length === 0) {\n return '0%';\n }\n\n return (getCountOfDislikes(ratings) / ratings.length) * 100 + '%';\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end'\n },\n averageRating: {\n marginBottom: '7px',\n fontSize: '16px',\n letterSpacing: '0.15px',\n lineHeight: '19px',\n color: theme.palette.text.primary\n },\n scale: {\n display: 'flex',\n marginBottom: '6px',\n width: '128px',\n height: '4px'\n },\n likesScale: {\n height: '100%',\n backgroundColor: '#8CC152'\n },\n dislikesScale: {\n height: '100%',\n backgroundColor: 'rgb(255, 112, 112)'\n },\n counts: {\n display: 'flex'\n },\n likesCount: {\n marginRight: '32px'\n },\n count: {\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n icon: {\n marginRight: '4px',\n width: '14px',\n height: '14px',\n color: 'rgba(0,0,0,0.38)'\n }\n}));\n","import React from 'react';\nimport classnames from 'classnames';\nimport {Rating} from '@reltio/mdm-sdk';\nimport {Typography as Typography} from '@material-ui/core';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport ThumbDownIcon from '@material-ui/icons/ThumbDown';\nimport {\n calcAverageRating,\n calcWidthOfDislikesScale,\n calcWidthOfLikesScale,\n getCountOfDislikes,\n getCountOfLikes\n} from '../../../helpers/ratings';\nimport {useStyles} from './styles';\n\ntype Props = {\n ratings: Rating[];\n className?: string;\n};\n\nexport const Ratings = ({ratings, className}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.wrapper, className)}>\n <Typography className={styles.averageRating}>{calcAverageRating(ratings).toFixed(1)}</Typography>\n <div className={styles.scale}>\n <div className={styles.likesScale} style={{width: calcWidthOfLikesScale(ratings)}} />\n <div className={styles.dislikesScale} style={{width: calcWidthOfDislikesScale(ratings)}} />\n </div>\n <div className={styles.counts}>\n <div className={classnames(styles.likesCount, styles.count)}>\n <ThumbUpIcon className={styles.icon} />\n {getCountOfLikes(ratings)}\n </div>\n <div className={styles.count}>\n <ThumbDownIcon className={styles.icon} />\n {getCountOfDislikes(ratings)}\n </div>\n </div>\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex'\n },\n button: {\n fontSize: '14px',\n textTransform: 'none',\n color: theme.palette.text.secondary\n },\n likeButton: {\n marginLeft: '-12px',\n marginRight: '8px'\n },\n isActive: {\n color: theme.palette.text.primary\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Rating} from '@reltio/mdm-sdk';\nimport {DropDownMenuButton} from '@reltio/components';\nimport {Button as Button} from '@material-ui/core';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport {useStyles} from './styles';\n\ntype Props = {\n ratings: Rating[];\n onAgree: () => void;\n onDisagree: (comment: string) => void;\n};\n\nexport const RatingsButtons = ({ratings, onAgree, onDisagree}: Props) => {\n const styles = useStyles();\n\n const username = useSelector(mdmModule.selectors.getUserName) as string;\n const ratingOfCurrentUser = ratings.find(({user}) => user === username);\n\n const menuItems = [\n {\n text: i18n.text('Has left the practice'),\n onClick: () => onDisagree(i18n.text('Has left the practice'))\n },\n {\n text: i18n.text('Has moved away'),\n onClick: () => onDisagree(i18n.text('Has moved away'))\n },\n {\n text: i18n.text('Has passed away'),\n onClick: () => onDisagree(i18n.text('Has passed away'))\n },\n {\n text: i18n.text('Has retired'),\n onClick: () => onDisagree(i18n.text('Has retired'))\n },\n {\n text: i18n.text('Other'),\n onClick: () => onDisagree(i18n.text('Other'))\n }\n ];\n\n return (\n <div className={styles.wrapper}>\n <Button\n onClick={onAgree}\n variant=\"text\"\n size=\"small\"\n className={classnames(styles.button, styles.likeButton, {\n [styles.isActive]: ratingOfCurrentUser?.value === 5\n })}\n >\n Agree\n </Button>\n <DropDownMenuButton\n buttonProps={{\n endIcon: <ArrowDropDownIcon />,\n variant: 'text',\n size: 'small',\n className: classnames(styles.button, {\n [styles.isActive]: ratingOfCurrentUser?.value === 1\n })\n }}\n buttonContent={ratingOfCurrentUser?.value === 1 ? ratingOfCurrentUser.comment : 'Disagree'}\n menuItems={menuItems}\n menuId=\"disagree-dropdown-menu-button\"\n />\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {suggested: string}) => ({\n wrapper: {\n padding: '6px 16px 6px'\n },\n entityTypeIcon: {\n marginRight: '16px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '14px',\n letterSpacing: 0,\n lineHeight: '16px'\n },\n entityLabelContainer: {\n wordBreak: 'break-all',\n textDecoration: 'none'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n ratings: {\n marginLeft: 'auto'\n },\n showDetailsButton: {\n marginLeft: '16px',\n marginTop: '18px'\n },\n relationAttributes: {\n paddingLeft: '60px'\n },\n suggestedWrapper: {\n padding: '6px 8px 6px 16px',\n backgroundColor: theme.suggested\n },\n commentsContainer: {\n alignSelf: 'center',\n '& + $ratings': {\n marginLeft: '16px'\n }\n },\n additionalButtonsWrapper: {\n marginLeft: 'auto',\n display: 'flex'\n }\n}));\n","import React, {useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport {isEmpty} from 'ramda';\nimport {COMMENTS_CONTAINER_VISIBILITY_AREA, CommentsContainer, EntityTypeIcon, EntityUriLink} from '@reltio/components';\nimport {\n Metadata,\n Connection,\n rateRelation,\n createRelatedObjectUris,\n CollaborationObjectTypes,\n getConnectionRelationUriForLink\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {Box as Box} from '@material-ui/core';\nimport RelationTooltip from '../../RelationTooltip/RelationTooltip';\nimport {RelationAttributes} from '../RelationAttributes/RelationAttributes';\nimport {ShowDetailsButton} from '../ShowDetailsButton/ShowDetailsButton';\nimport {Ratings} from '../Ratings/Ratings';\nimport {useRelationInfo} from '../../../hooks/useRelationInfo';\nimport {RatingsButtons} from '../RatingsButtons/RatingsButtons';\nimport {SuggestedButtons} from '../../SuggestedButtons/SuggestedButtons';\nimport {useStyles} from './styles';\n\ntype Props = {\n connection: Connection;\n loadRelations: () => void;\n acceptRelation?: (connection: Connection) => () => void;\n ignoreRelation?: (connection: Connection) => () => void;\n renderRelationArrowButton: () => React.ReactNode;\n};\n\nexport const RelationComplexItem = ({\n connection,\n loadRelations,\n renderRelationArrowButton,\n acceptRelation,\n ignoreRelation\n}: Props) => {\n const styles = useStyles();\n const isSuggested = connection.suggested;\n\n const [showDetails, setShowDetails] = useState(false);\n\n const {entity, relation} = connection;\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n const {entityLabel, entityType, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const ratings = relation?.ratings || [];\n\n const toggleShowDetails = () => {\n setShowDetails((show) => !show);\n };\n\n const handleAgree = () => {\n rateRelation(relation?.relationUri, {\n comment: '',\n value: 5\n }).then(loadRelations);\n };\n\n const handleDisagree = (comment: string) => {\n rateRelation(relation?.relationUri, {\n comment,\n value: 1\n }).then(loadRelations);\n };\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n const relatedObjectUris =\n (entity &&\n relation &&\n createRelatedObjectUris(CollaborationObjectTypes.RELATION, {\n entityUri: currentEntityUri,\n connection\n })) ||\n [];\n\n return (\n <div className={classnames(styles.wrapper, {[styles.suggestedWrapper]: isSuggested})}>\n <Box display=\"flex\" minHeight=\"44px\" className={COMMENTS_CONTAINER_VISIBILITY_AREA}>\n <Box display=\"flex\" alignItems=\"center\">\n <Box display=\"flex\" alignItems=\"center\">\n {renderRelationArrowButton && renderRelationArrowButton()}\n <EntityTypeIcon entityType={entityType} className={styles.entityTypeIcon} />\n </Box>\n <Box display=\"flex\" flexDirection=\"column\">\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n </EntityUriLink>\n {relationLabel && <span className={styles.relationLabel}>{relationLabel}</span>}\n {!isSuggested && (\n <RatingsButtons ratings={ratings} onAgree={handleAgree} onDisagree={handleDisagree} />\n )}\n </Box>\n </Box>\n <div className={styles.additionalButtonsWrapper}>\n {!isEmpty(relatedObjectUris) && (\n <CommentsContainer\n className={styles.commentsContainer}\n uri={getConnectionRelationUriForLink(relation)}\n relatedObjectUris={relatedObjectUris}\n objectType={CollaborationObjectTypes.RELATION}\n allowOnlyOneComment\n />\n )}\n {isSuggested && (\n <SuggestedButtons\n acceptRelation={acceptRelation(connection)}\n ignoreRelation={ignoreRelation(connection)}\n />\n )}\n {!isSuggested && (\n <>\n <Ratings ratings={ratings} className={styles.ratings} />\n <ShowDetailsButton\n show={showDetails}\n onToggle={toggleShowDetails}\n className={styles.showDetailsButton}\n />\n </>\n )}\n </div>\n </Box>\n {showDetails && <RelationAttributes connection={connection} className={styles.relationAttributes} />}\n </div>\n );\n};\n","import React, {useMemo, useContext, useEffect} from 'react';\nimport {Connection, getRelationshipsObjectIdsForCollaboration, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {CollaborationContext} from '@reltio/components';\nimport RelationItem from './RelationItem/RelationItem';\nimport {RelationComplexItem} from './RelationCompexItem/RelationComplexItem';\nimport {useSuggestedRelations} from '../../hooks/useSuggestedRelations';\nimport {SecondLevelWrapper} from '../SecondLevelWrapper/SecondLevelWrapper';\n\ntype Props = {\n className?: string;\n connections: Array<Connection>;\n loadRelations: () => void;\n config?: RelationsViewConfig;\n mainEnityUri?: string;\n};\n\nconst RelationsList = ({className, connections = [], loadRelations, config, mainEnityUri}: Props) => {\n const {isComplex, content} = config;\n const {ignoreRelation, acceptRelation} = useSuggestedRelations(content, loadRelations, mainEnityUri);\n\n const objectIds = useMemo(() => {\n return getRelationshipsObjectIdsForCollaboration(connections);\n }, [connections]);\n\n const {getCommentsCount} = useContext(CollaborationContext);\n\n useEffect(() => {\n getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n return (\n <div className={className}>\n {connections.map((connection) => {\n const itemKey = `${connection?.relation?.relationUri}-${connection?.relation?.direction}`;\n\n return (\n <SecondLevelWrapper config={config} connection={connection} key={itemKey}>\n {(renderRelationArrowButton) => {\n if (isComplex) {\n return (\n <RelationComplexItem\n loadRelations={loadRelations}\n connection={connection}\n acceptRelation={acceptRelation}\n ignoreRelation={ignoreRelation}\n renderRelationArrowButton={renderRelationArrowButton}\n />\n );\n }\n\n return (\n <RelationItem\n acceptRelation={acceptRelation}\n ignoreRelation={ignoreRelation}\n connection={connection}\n renderRelationArrowButton={renderRelationArrowButton}\n />\n );\n }}\n </SecondLevelWrapper>\n );\n })}\n </div>\n );\n};\n\nRelationsList.displayName = 'RelationsList';\n\nexport default RelationsList;\n","import {useDispatch} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {\n Connection,\n ignoreSuggestedRelation,\n createRelation,\n getRequestErrorMessage,\n Directions,\n RelationsContent\n} from '@reltio/mdm-sdk';\nimport {ui} from '@reltio/mdm-module';\nimport {getFirstRelationTypeObject} from '../helpers/relation';\n\nexport const useSuggestedRelations = (content: RelationsContent, loadRelations: () => void, mainEnityUri: string) => {\n const relationTypeObject = getFirstRelationTypeObject(content.inRelations, content.outRelations);\n const dispatch = useDispatch();\n const ignoreRelation = (connection: Connection) => () => {\n const {entity} = connection;\n ignoreSuggestedRelation(mainEnityUri, {\n relatedEntityUri: entity.entityUri,\n relationType: relationTypeObject.type,\n relationDirection: relationTypeObject.direction\n })\n .then(loadRelations)\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n });\n };\n\n const acceptRelation = (connection: Connection) => () => {\n const {entity, relation} = connection;\n const {startDate, endDate} = relation;\n const isInDirection = relationTypeObject.direction === Directions.IN;\n const startEntityUri = isInDirection ? entity.entityUri : mainEnityUri;\n const endEntityUri = isInDirection ? mainEnityUri : entity.entityUri;\n createRelation({\n startEntityUri,\n endEntityUri,\n relationType: relationTypeObject.type,\n attributes: null,\n startDate,\n endDate\n })\n .then(loadRelations)\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n });\n };\n\n return {\n ignoreRelation,\n acceptRelation\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n list: {\n paddingTop: '8px',\n paddingBottom: '10px',\n overflow: 'auto',\n flexGrow: 1\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {isEditableMode, Connection, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {LinearLoadIndicator} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport RelationsEditableContent from '../RelationsEditableContent/RelationsEditableContent';\nimport RelationsList from '../RelationsList/RelationsList';\nimport {useStyles} from './styles';\n\ntype Props = {\n isLoading: boolean;\n config: RelationsViewConfig;\n loadRelations: () => void;\n connections: Connection[];\n total: number;\n parentEntityUri?: string;\n};\n\nexport const RelationsContent = ({isLoading, config, loadRelations, connections, total, parentEntityUri}: Props) => {\n const styles = useStyles();\n\n const {selectors} = mdmModule;\n const entity = useSelector(selectors.getEntity);\n const mode = useSelector(selectors.getMode);\n\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n if (isLoading) {\n return <LinearLoadIndicator />;\n }\n\n if (isEditableMode(mode)) {\n return (\n <RelationsEditableContent\n connections={connections}\n className={styles.list}\n key={entity?.uri}\n config={config}\n mode={mode}\n noDataText={noDataText}\n parentEntityUri={parentEntityUri}\n />\n );\n }\n\n if (total > 0) {\n return (\n <RelationsList\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n className={styles.list}\n key={entity?.uri}\n mainEnityUri={entity.uri}\n />\n );\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n container: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0\n },\n content: {\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n flexDirection: 'column',\n minHeight: 0\n },\n pagination: {\n height: '52px',\n flexGrow: 0,\n flexShrink: 0\n }\n});\n","import React, {useContext, useEffect, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {ActivityFilter, Connection, getEntitiesMapForConnections, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {\n BasicTablePagination,\n BasicView,\n EntitiesMapContext,\n useRelationsLoader,\n EntityContext\n} from '@reltio/components';\nimport RelationsHeader from '../RelationsHeader/RelationsHeader';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {ImportDTContext} from '../../contexts/ImportDTContext';\nimport {buildRelationsFilter} from '../../helpers/filters';\nimport {RelationsContent} from '../RelationsContent/RelationsContent';\nimport {pick} from 'ramda';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: RelationsViewConfig;\n className?: string;\n};\n\nconst RelationsView = ({config, className}: Props) => {\n const styles = useStyles();\n\n const {page, setPage, rowsPerPage, sortOrder, sortOption, showInactive, searchQuery, changeSearchQuery} =\n useContext(RelationsViewStateContext);\n const {selectors} = mdmModule;\n const connections = useSelector((state) =>\n selectors.getConnectionsWithDraftsByViewId(state, config.id)\n ) as Connection[];\n const entity = useSelector(selectors.getEntity);\n const total = useSelector((state) => selectors.getTotalByViewId(state, config.id));\n const mode = useSelector(selectors.getMode);\n const sorting = useMemo(\n () => ({\n order: sortOrder,\n field: sortOption\n }),\n [sortOrder, sortOption]\n );\n\n useEffect(() => {\n changeSearchQuery('');\n }, [entity?.uri]); //eslint-disable-line react-hooks/exhaustive-deps\n\n const filter = useMemo(() => buildRelationsFilter(searchQuery), [searchQuery]);\n\n const {isLoading, reload: loadRelations} = useRelationsLoader({\n sorting,\n filter,\n page,\n rowsPerPage,\n config,\n entity,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY,\n mode\n });\n\n const entitiesMap = useMemo(() => getEntitiesMapForConnections(connections), [connections]);\n\n const importDTContextValue = useMemo(\n () => ({\n reloadRelations: loadRelations,\n config: pick(['content', 'importFromDT', 'maxDtssImport'], config)\n }),\n [loadRelations, config]\n );\n\n return (\n <EntityContext.Provider value={entity}>\n <EntitiesMapContext.Provider value={entitiesMap}>\n <BasicView className={className}>\n <div className={styles.container}>\n <ImportDTContext.Provider value={importDTContextValue}>\n <RelationsHeader title={config.caption} total={total} />\n </ImportDTContext.Provider>\n <div className={styles.content}>\n <RelationsContent\n isLoading={isLoading}\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n total={total}\n />\n {total > rowsPerPage && (\n <BasicTablePagination\n classes={{root: styles.pagination}}\n count={total}\n rowsPerPageOptions={[]}\n rowsPerPage={rowsPerPage}\n page={page}\n onChangePage={setPage}\n />\n )}\n </div>\n </div>\n </BasicView>\n </EntitiesMapContext.Provider>\n </EntityContext.Provider>\n );\n};\n\nRelationsView.displayName = 'RelationsView';\n\nexport {RelationsView};\n","import {FilterBuilder, Maybe, filterValueToQueryStringWithQuotes} from '@reltio/mdm-sdk';\n\nconst buildRelationsFilter = (searchQuery) => {\n const queryClause = Maybe.fromFalsy<string>(searchQuery)\n .map(filterValueToQueryStringWithQuotes)\n .map(\n (queryString) =>\n `containsWordStartingWith(entity.label,${queryString})` +\n ' or ' +\n `containsWordStartingWith(relation.label,${queryString})`\n )\n .orSome('');\n\n return new FilterBuilder().addClause(queryClause).build();\n};\n\nexport {buildRelationsFilter};\n","import {useCallback, useMemo, useState} from 'react';\nimport {pipe, map, unless, append, propEq} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {RelationsViewConfig, SortOrder, isEmptyValue} from '@reltio/mdm-sdk';\n\nconst DEFAULT_ROWS_PER_PAGE = 15;\nconst DEFAULT_SORT_ORDER = 'asc';\nconst DEFAULT_SHOW_INACTIVE = false;\n\ntype Option = {\n value: string;\n label: string;\n};\n\nexport type RelationsViewState = {\n searchQuery: string;\n changeSearchQuery: (value: string) => void;\n sortOrder: SortOrder;\n toggleSortOrder: () => void;\n sortOption?: string;\n changeSortOption: (option: string) => void;\n sortOptions: Option[];\n page: number;\n setPage: (page: number) => void;\n rowsPerPage: number;\n showInactive: boolean;\n toggleShowInactive: () => void;\n};\n\nconst useRelationsState = (config: RelationsViewConfig): RelationsViewState => {\n const sortOptions = useMemo(\n () =>\n pipe(\n Object.entries,\n map(([key, value]) => ({\n value: key,\n label: value\n })),\n unless(\n (options) => isEmptyValue(options) || options.some(propEq('value', 'name')),\n append({label: i18n.text('Name'), value: 'name'})\n )\n )(config.sortOptions || {}),\n [config.sortOptions]\n );\n\n const rowsPerPage = Number(config.max) || DEFAULT_ROWS_PER_PAGE;\n const [page, setPage] = useState(0);\n const [sortOrder, setSortOrder] = useState(config.sortOrder || DEFAULT_SORT_ORDER);\n const [sortOption, setSortOption] = useState(sortOptions[0]?.value);\n const [searchQuery, setSearchQuery] = useState('');\n const [showInactive, setShowInactive] = useState(DEFAULT_SHOW_INACTIVE);\n\n const toggleShowInactive = useCallback(() => {\n setPage(0);\n setShowInactive((showInactive) => !showInactive);\n }, []);\n\n const toggleSortOrder = useCallback(() => {\n setPage(0);\n setSortOrder((order) => {\n return order === 'asc' ? 'desc' : 'asc';\n });\n }, []);\n\n const changeSortOption = useCallback((option: string) => {\n setPage(0);\n setSortOption(option);\n }, []);\n\n const changeSearchQuery = useCallback((value: string) => {\n setPage(0);\n setSearchQuery(value);\n }, []);\n\n return {\n searchQuery,\n changeSearchQuery,\n sortOrder,\n toggleSortOrder,\n sortOption,\n changeSortOption,\n sortOptions,\n page,\n setPage,\n rowsPerPage,\n showInactive,\n toggleShowInactive\n };\n};\n\nexport default useRelationsState;\n","import React from 'react';\nimport {AttributeType, ComplexAttributeValue} from '@reltio/mdm-sdk';\nimport {ColumnsDataType} from '../components/types';\n\nexport const TableAttributeContext = React.createContext<{\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n values: ComplexAttributeValue[];\n page: number;\n setPage: (page: number) => void;\n isLoading: boolean;\n visibleColumns: string[];\n onChangeColumns: (cols: string[]) => void;\n onToggleFilters: () => void;\n onSort: (payload) => void;\n onFilter: (payload) => void;\n hasPaging: boolean;\n totalVisibleValues: number;\n showTable: boolean;\n filters: {\n [key: string]: {\n filter: string;\n values: [string];\n };\n };\n sorting: {\n order: 'desc' | 'asc';\n field: string;\n };\n attributeType: AttributeType;\n allColumnsData: ColumnsDataType;\n }>(null);\n\nTableAttributeContext.displayName = 'TableAttributeContext';\n","import {basicTableViewState, createStandardAction} from '@reltio/components';\n\nconst CHANGE_SEARCH_QUERY = 'CHANGE_SEARCH_QUERY';\n\nconst actions = {\n ...basicTableViewState.actions,\n changeSearchQuery: createStandardAction(CHANGE_SEARCH_QUERY)\n};\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case CHANGE_SEARCH_QUERY:\n return {...state, searchQuery: action.payload, page: 0};\n default:\n return basicTableViewState.reducer(state, action);\n }\n};\n\nexport {reducer as default, actions};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {HistoryOperations, historyPalettes} from '@reltio/mdm-sdk';\n\nconst BLOB_HEIGHT = 100;\n\nconst removedStyle = {\n textDecoration: 'line-through',\n color: 'rgba(0,0,0,.54)'\n};\n\nexport const useStyles = makeStyles(() => ({\n headCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n fontSize: '12px'\n },\n rowCell: {\n fontSize: '13px',\n overflow: 'hidden'\n },\n blobWrapper: {\n position: 'relative',\n overflowY: 'auto',\n overflowX: 'hidden',\n whiteSpace: 'pre',\n maxHeight: `${BLOB_HEIGHT}px`,\n boxSizing: 'border-box',\n padding: '15px 25px 0 25px'\n },\n defaultWrapper: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n padding: '15px 25px 0 25px'\n },\n updateAttribute: {\n padding: '0 4px',\n marginLeft: '-4px',\n ...historyPalettes[HistoryOperations.updateAttribute]\n },\n insertAttribute: {\n ...historyPalettes[HistoryOperations.insertAttribute]\n },\n deleteAttribute: {\n padding: '0 4px',\n marginLeft: '-4px',\n textDecoration: 'line-through',\n ...historyPalettes[HistoryOperations.deleteAttribute]\n },\n description: {\n marginLeft: '-22px'\n },\n 'row-cell--sorted': {\n color: 'rgba(0,0,0,0.87)'\n },\n 'row-cell--removed': {\n pointerEvents: 'none',\n '& > div': removedStyle\n }\n}));\n","import React from 'react';\n\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {withFilterAtBottom, DescriptionIcon} from '@reltio/components';\nimport {useStyles} from './styles';\n\nconst HeadCellRenderer = (props) => {\n const styles = useStyles();\n const {description} = props?.headCellData || {};\n\n return (\n <div className={styles.headCell}>\n <DefaultHeadCellRenderer {...props} />\n <DescriptionIcon description={description} className={styles.description} />\n </div>\n );\n};\n\nexport default withFilterAtBottom(HeadCellRenderer);\n","import React from 'react';\nimport {stopPropagation} from '@reltio/components';\nimport {PrimitiveValue} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n value: PrimitiveValue;\n historyClassName?: string;\n};\n\nconst BlobRenderer = ({value, historyClassName}: Props) => {\n const styles = useStyles();\n return (\n <div className={styles.blobWrapper} onScroll={stopPropagation}>\n <span className={styles[historyClassName]}>{value}</span>\n </div>\n );\n};\n\nexport default BlobRenderer;\n","import React, {useContext} from 'react';\nimport {pipe} from 'ramda';\nimport {DataTypes, getHistoryAppearanceByUri, getHistoryAttributeClassName, PrimitiveValue} from '@reltio/mdm-sdk';\nimport {DataTypeValue, ExpandedValueTooltip, HistoryDiffContext} from '@reltio/components';\nimport BlobRenderer from './BlobRenderer';\nimport {useStyles} from './styles';\n\ntype Props = {\n value: {\n value: PrimitiveValue;\n uri: string;\n };\n columnData: {\n dataTypeDefinition: {\n type: DataTypes;\n };\n };\n};\n\nconst DefaultCellValueRenderer = ({value, columnData: {dataTypeDefinition}}: Props) => {\n const styles = useStyles();\n\n const {value: simpleValue, uri} = value;\n const {appearance} = useContext(HistoryDiffContext);\n const historyClassName = pipe(getHistoryAppearanceByUri, getHistoryAttributeClassName)(uri, appearance);\n\n switch (dataTypeDefinition.type) {\n case DataTypes.TYPE_BLOB:\n return <BlobRenderer value={simpleValue} historyClassName={historyClassName} />;\n default: {\n const dataTypeValue = <DataTypeValue value={simpleValue} dataTypeDefinition={dataTypeDefinition} />;\n return (\n <ExpandedValueTooltip value={dataTypeValue}>\n <div className={styles.defaultWrapper}>\n <span className={styles[historyClassName]}>{dataTypeValue}</span>\n </div>\n </ExpandedValueTooltip>\n );\n }\n }\n};\n\nexport default DefaultCellValueRenderer;\n","import {assoc, chain, isNil, map, path, pipe, prop, reduce, reject, slice, split, uniqBy} from 'ramda';\nimport {\n AttributeNode,\n AttributeType,\n attributeUriToSearchUri,\n flatAttributeTreeNode,\n getAttrDataTypeDefinition,\n getAttributeTypesTree,\n getOvAttributeValuesByPathWithUri,\n isAttributeSearchUri,\n Metadata,\n SearchParent\n} from '@reltio/mdm-sdk';\nimport HeadCellRenderer from '../components/AttributeTable/cell-renderers/HeadCellRenderer';\nimport DefaultCellValueRenderer from '../components/AttributeTable/cell-renderers/DefaultCellValueRenderer';\n\nexport const getColumnsDataFromAttributeNode = (attrNode: AttributeNode, parents: SearchParent[]) => {\n const {uri, label, children, name, description} = attrNode;\n return reject(isNil, {\n id: attributeUriToSearchUri(uri, parents),\n label,\n description,\n dataTypeDefinition: getAttrDataTypeDefinition(attrNode),\n children: children?.map((childNode) => getColumnsDataFromAttributeNode(childNode, parents.concat({name})))\n });\n};\n\nexport const getColumnsData = (metadata: Metadata, attributeType: AttributeType) =>\n pipe(\n (metadata: Metadata, attributeType: AttributeType) => getAttributeTypesTree(metadata, attributeType),\n map((attrNode: AttributeNode) => getColumnsDataFromAttributeNode(attrNode, [attributeType])),\n chain(flatAttributeTreeNode),\n uniqBy(prop('id'))\n )(metadata, attributeType);\n\nconst getAttrPathFromColumnId = pipe(split('.'), slice(2, Infinity));\n\nconst getAttributeValues = (attrPath, value) =>\n pipe(path(['value']), getOvAttributeValuesByPathWithUri(attrPath))(value);\n\nconst getRowValueByColumnId = (columnId, value) => {\n const attrPath = getAttrPathFromColumnId(columnId);\n return getAttributeValues(attrPath, value);\n};\n\nexport const getBasicTableRowsData = (values, columnsData) =>\n values.map((value) =>\n pipe(\n reduce((acc, {id}) => assoc(id, getRowValueByColumnId(id, value), acc), {}),\n assoc('value', value)\n )(columnsData)\n );\n\nconst getNestedPathByColumnId = (columnId) => {\n if (isAttributeSearchUri(columnId)) {\n const attrPath = getAttrPathFromColumnId(columnId);\n return attrPath.length > 1 ? attrPath.slice(0, -1) : null;\n } else {\n return null;\n }\n};\n\nconst getColumnDataByColumnId = (columnData) => ({\n ...columnData,\n sortable: true,\n resizable: true,\n nestedPath: getNestedPathByColumnId(columnData.id),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: DefaultCellValueRenderer\n});\n\nexport const getBasicTableColumnsData = map(getColumnDataByColumnId);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n header: {\n padding: '0 4px 0 16px'\n }\n}));\n","import React, {useContext} from 'react';\nimport {useSelector} from 'react-redux';\nimport {\n FacetViewHeader,\n ColumnsSettings,\n FilterButton,\n VerticalDivider,\n ExpandableSearchInput,\n DescriptionIcon,\n RequiredMark\n} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {useStyles} from './styles';\n\ntype Props = {\n title: string;\n};\n\nconst AttributeTableHeader = ({title}: Props) => {\n const styles = useStyles();\n const isEditableMode = useSelector(mdmModule.selectors.getIsEditableMode);\n\n const {\n attributeType,\n searchQuery,\n setSearchQuery,\n filters,\n onToggleFilters,\n allColumnsData,\n visibleColumns,\n onChangeColumns\n } = useContext(TableAttributeContext);\n\n const showRequiredMark = isEditableMode && attributeType?.required;\n\n return (\n <FacetViewHeader title={title} className={styles.header}>\n {showRequiredMark && <RequiredMark />}\n <DescriptionIcon description={attributeType?.description} />\n <ExpandableSearchInput query={searchQuery} onChange={setSearchQuery} />\n <FilterButton enabled={!!filters} onClick={onToggleFilters} />\n <VerticalDivider height={24} margin={4} />\n <ColumnsSettings\n columnsData={allColumnsData}\n selectedColumns={visibleColumns}\n onChangeColumns={onChangeColumns}\n />\n </FacetViewHeader>\n );\n};\n\nexport default AttributeTableHeader;\n","import React from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\nimport {withTableContext} from '@reltio/components';\n\ntype Props = {\n cell: {values: string[]};\n isSorted: boolean;\n CellValueRenderer: React.ElementType;\n isRemoved: boolean;\n};\nconst RowCellRenderer = ({cell, CellValueRenderer, isRemoved, isSorted, ...otherProps}: Props) => {\n const styles = useStyles();\n return (\n <div\n className={classnames(\n {\n [styles['row-cell--sorted']]: isSorted,\n [styles['row-cell--removed']]: isRemoved\n },\n styles.rowCell\n )}\n >\n {cell.values.map((value, index) => (\n <CellValueRenderer key={index} value={value} {...otherProps} />\n ))}\n </div>\n );\n};\n\nexport default withTableContext(({deletedUris}, {rowValue: {value}}) => ({\n isRemoved: Boolean(deletedUris.find((uri) => value.uri === uri))\n}))(RowCellRenderer);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n tableContainer: {\n display: 'flex',\n fontFamily: 'Roboto',\n color: 'rgba(0,0,0,0.54)',\n marginBottom: '15px'\n },\n 'row-cell__buttons-container': {\n position: 'absolute'\n },\n 'row-cell__buttons-wrapper': {\n display: 'flex',\n paddingLeft: '10px',\n '& > button': {\n marginLeft: '-10px',\n transform: 'scale(0.9)'\n }\n }\n}));\n","import React from 'react';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport i18n from 'ui-i18n';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\n\ntype Props = {\n onEdit?: () => void;\n onRemove?: () => void;\n};\n\nexport const EditButtons = ({onEdit, onRemove}: Props) => (\n <>\n {onEdit && (\n <SmallIconButtonWithTooltip tooltipTitle={i18n.text('Edit')} icon={EditIcon} size=\"L\" onClick={onEdit} />\n )}\n {onRemove && (\n <SmallIconButtonWithTooltip\n tooltipTitle={i18n.text('Remove')}\n icon={DeleteIcon}\n size=\"L\"\n onClick={onRemove}\n />\n )}\n </>\n);\n\nexport default EditButtons;\n","import React, {useCallback, useContext, useMemo, useState} from 'react';\nimport RowCellRenderer from './cell-renderers/RowCellRenderer';\nimport {BasicTable, useConfigPermissions} from '@reltio/components';\nimport {getBasicTableColumnsData, getBasicTableRowsData} from '../../helpers/tableAttributeHelpers';\nimport {useStyles} from './styles';\nimport {\n checkCanEditAttribute,\n checkCanDeleteAttribute,\n SearchFilter,\n isReltioCrosswalk,\n Entity,\n isEditableMode as checkIsEditableMode,\n AttributeItem,\n TableAttributeViewConfig,\n ComplexAttributeValue\n} from '@reltio/mdm-sdk';\nimport {ColumnsDataType} from '../types';\nimport EditButtons from './EditButtons';\nimport {useSelector} from 'react-redux';\nimport {path, prop, pipe} from 'ramda';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport mdmModule from '@reltio/mdm-module';\n\nconst MAX_HEIGHT = 477;\n\ntype Props = {\n columnsData: ColumnsDataType;\n values: ComplexAttributeValue[];\n filters?: {\n [key: string]: SearchFilter;\n };\n onFilter?: (payload) => void;\n sorting?:\n | {\n field: string;\n order: string;\n }\n | undefined;\n onSort?: (payload) => void;\n config: TableAttributeViewConfig;\n onEdit: React.Dispatch<ComplexAttributeValue>;\n onDeleteAttribute: (attribute: AttributeItem) => void;\n deletedUris: string[];\n};\n\nconst AttributeTable = ({\n columnsData,\n values,\n sorting,\n onSort,\n filters,\n onFilter,\n config,\n onEdit,\n onDeleteAttribute,\n deletedUris\n}: Props) => {\n const tableRowsData = useMemo(() => getBasicTableRowsData(values, columnsData), [values, columnsData]);\n const tableColumnsData = useMemo(() => getBasicTableColumnsData(columnsData), [columnsData]);\n\n const styles = useStyles();\n const mode = useSelector(mdmModule.selectors.getMode);\n const isEditableMode = checkIsEditableMode(mode);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n const {attributeType} = useContext(TableAttributeContext);\n\n const renderRowCell = useCallback(\n (props) => (\n <RowCellRenderer\n {...props}\n isSorted={!!sorting && sorting.field === props.columnData.id} /* eslint-disable-line react/prop-types */\n />\n ),\n [sorting]\n );\n\n const [hoverRowIndex, setHoverRowIndex] = useState(null);\n\n const {canUpdate, canDelete} = useConfigPermissions();\n\n const checkCanEdit = (attributeValue: ComplexAttributeValue) =>\n canUpdate(config) &&\n checkCanEditAttribute({\n attributeType,\n mode,\n attributeValue,\n isReltioCrosswalk: isReltioCrosswalk(modifiedEntity.crosswalks, attributeValue)\n });\n const checkCanRemove = (attributeValue: ComplexAttributeValue) =>\n canDelete(config) &&\n checkCanDeleteAttribute({\n attributeType,\n mode,\n attributeValue,\n metadata,\n isReltioCrosswalk: isReltioCrosswalk(modifiedEntity.crosswalks, attributeValue)\n });\n\n const hideRightContent = useMemo(\n () =>\n typeof hoverRowIndex === 'number' && isEditableMode\n ? deletedUris.includes(pipe(path([hoverRowIndex]), prop('uri'))(values))\n : true,\n [hoverRowIndex, deletedUris, values, isEditableMode]\n );\n const canRemove = typeof hoverRowIndex === 'number' && checkCanRemove(path([hoverRowIndex], values));\n const canEdit = typeof hoverRowIndex === 'number' && checkCanEdit(path([hoverRowIndex], values));\n\n const handleEditAttribute = useCallback(() => {\n const attributeValue = path([hoverRowIndex], values);\n if (!canEdit) return;\n onEdit(attributeValue);\n }, [onEdit, hoverRowIndex, values, canEdit]);\n\n const handleRemoveAttribute = useCallback(() => {\n const attributeValue = path([hoverRowIndex], values);\n if (!canRemove) return;\n const attribute: AttributeItem = {\n parentUri: entityUri,\n attributeType,\n uri: attributeValue.uri,\n value: attributeValue\n };\n onDeleteAttribute(attribute);\n setHoverRowIndex(null);\n }, [hoverRowIndex, values, onDeleteAttribute, canRemove, attributeType, entityUri]);\n\n const hoveredRowRightContent =\n !hideRightContent && (canRemove || canEdit) ? (\n <EditButtons\n onEdit={canEdit ? handleEditAttribute : undefined}\n onRemove={canRemove ? handleRemoveAttribute : undefined}\n />\n ) : undefined;\n const context = useMemo(() => ({deletedUris}), [deletedUris]);\n return (\n <div className={styles.tableContainer}>\n <BasicTable\n autosizing\n maxHeight={MAX_HEIGHT}\n columnsData={tableColumnsData}\n rowsData={tableRowsData}\n sorting={sorting}\n onSort={onSort}\n filters={filters}\n onFilter={onFilter}\n hoverStateEnabled={true}\n defaultColumnWidth={250}\n defaultColumnMinWidth={200}\n headRowHeight={56}\n resizeDebounceDelay={150}\n renderRowCell={renderRowCell}\n onRowHover={setHoverRowIndex}\n hoverRowIndex={hoverRowIndex}\n hoveredRowRightContent={hoveredRowRightContent}\n context={context}\n classes={{\n hoveredRowRightContentWrapper: styles['row-cell__buttons-wrapper'],\n hoveredRowRightContentContainer: styles['row-cell__buttons-container']\n }}\n />\n </div>\n );\n};\n\nexport default AttributeTable;\n","import {useCallback, useContext, useState, useMemo} from 'react';\nimport {\n createNewAttribute,\n Entity,\n getAttributeSource,\n isEditableMode as checkIsEditableMode,\n NestedAttributeValue,\n AttributeItem,\n isEmptyValue,\n validateComplexAttribute,\n ComplexAttributeValue,\n EntitiesMap,\n evaluateErrorPath,\n getSingleAttributeEntity\n} from '@reltio/mdm-sdk';\nimport {ViewIdContext} from '@reltio/components';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {propEq, pathOr, pipe, map, prop, equals, both, not, without, filter} from 'ramda';\nimport {TableAttributeContext} from '../../../contexts/TableAttributeContext';\nimport {isTempUri, createDefaultValues} from '@reltio/mdm-sdk';\n\nconst emptyArray = [];\n\nexport const useEditableAttribute = () => {\n const [newAttributeUri, setNewAttributeUri] = useState<string>();\n const [originalValues, setOriginalValues] = useState<ComplexAttributeValue[]>([]);\n\n const dispatch = useDispatch();\n const mode = useSelector(mdmModule.selectors.getMode);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n\n const viewId = useContext(ViewIdContext);\n const {attributeType, values} = useContext(TableAttributeContext);\n\n const isEditableMode = checkIsEditableMode(mode);\n const attributeSource = getAttributeSource(attributeType);\n const modifiedEntityValues: NestedAttributeValue[] = pathOr(\n emptyArray,\n [attributeSource, attributeType?.name],\n modifiedEntity\n );\n\n const emptyEditorValue: ComplexAttributeValue = useMemo(\n () =>\n createNewAttribute({\n parentUri: entityUri,\n attributeType\n }),\n [entityUri, attributeType]\n );\n\n const isModifiedEntityValuesEmpty = isEmptyValue(modifiedEntityValues);\n const showEmpty = attributeType.required && isModifiedEntityValuesEmpty;\n const actualValues = useMemo(\n () => (showEmpty ? [emptyEditorValue] : modifiedEntityValues),\n [emptyEditorValue, modifiedEntityValues, showEmpty]\n );\n\n const modifiedValues = useMemo(() => {\n const newValues = actualValues.filter(pipe(prop('uri'), both(isTempUri, pipe(equals(newAttributeUri), not))));\n\n const oldValues = map((originalValue) => actualValues.find(propEq('uri', originalValue.uri)) || originalValue)(\n values\n );\n\n return [...newValues, ...oldValues].map((value) => originalValues.find(propEq('uri', value.uri)) ?? value);\n }, [actualValues, originalValues, newAttributeUri, values]);\n\n const deletedUris = useMemo(\n () =>\n pipe(\n map(prop('uri')),\n filter((uri) => !actualValues.find(propEq('uri', uri)))\n )(isEditableMode ? values : []),\n [actualValues, values, isEditableMode]\n );\n\n const editingValues = actualValues.filter(\n ({uri}) => uri === newAttributeUri || originalValues.find(propEq('uri', uri))\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 const onAdd = useCallback(() => {\n const newAttribute = createNewAttribute({\n parentUri: entityUri,\n attributeType\n });\n setNewAttributeUri(newAttribute.uri);\n onChangeAttribute({\n ...newAttribute,\n value: createDefaultValues({\n attributeTypes: attributeType.attributes,\n parentUri: newAttribute.uri,\n mode,\n metadata\n }),\n attributeType\n });\n }, [entityUri, attributeType, metadata, mode, onChangeAttribute]);\n\n const onStartEditing = useCallback(\n (attributeValue: ComplexAttributeValue) => {\n setOriginalValues((prev) => {\n if (!prev.find(propEq('uri', attributeValue.uri))) {\n return [...prev, attributeValue];\n }\n return prev;\n });\n },\n [setOriginalValues]\n );\n\n const onCancel = useCallback(\n (attributeValue: ComplexAttributeValue) => {\n const editingValueOriginal = originalValues.find(propEq('uri', attributeValue.uri));\n if (editingValueOriginal) {\n const attributeItem = {attributeType, value: editingValueOriginal, uri: attributeValue.uri};\n setOriginalValues((prev) => without([editingValueOriginal], prev));\n if (!isModifiedEntityValuesEmpty) onChangeAttribute(attributeItem);\n } else {\n const attributeItem = {value: attributeValue, attributeType, uri: attributeValue.uri};\n setNewAttributeUri(null);\n onDeleteAttribute(attributeItem);\n }\n dispatch(profile.errors.actions.errorsSet([]));\n },\n [\n onDeleteAttribute,\n onChangeAttribute,\n setOriginalValues,\n isModifiedEntityValuesEmpty,\n originalValues,\n attributeType,\n dispatch\n ]\n );\n\n const validate = useCallback(\n (attributeValue: ComplexAttributeValue, tempEntitiesMap: EntitiesMap) => {\n const errors = validateComplexAttribute(metadata, attributeType, attributeValue, tempEntitiesMap).map(\n (error) => ({\n ...error,\n path: evaluateErrorPath(\n {\n entityUri,\n metadata,\n entitiesMap: tempEntitiesMap || {\n [entityUri]: getSingleAttributeEntity(attributeType, attributeValue)\n }\n },\n error.uri || error.parentUri\n )\n })\n );\n dispatch(profile.errors.actions.errorsSet(errors));\n return errors.length === 0;\n },\n [dispatch, entityUri, attributeType, metadata]\n );\n\n const onApply = useCallback(\n (attributeValue: ComplexAttributeValue, tempEntitiesMap?: EntitiesMap) => {\n if (validate(attributeValue, tempEntitiesMap)) {\n setNewAttributeUri(null);\n setOriginalValues((prev) => {\n const original = prev.find(propEq('uri', attributeValue.uri));\n return original ? without([original], prev) : prev;\n });\n }\n },\n [setOriginalValues, setNewAttributeUri, validate]\n );\n\n const onReset = useCallback(() => {\n setOriginalValues([]);\n setNewAttributeUri(null);\n }, []);\n\n const checkHasChanges = (value: ComplexAttributeValue) => originalValues.find(propEq('uri', value.uri)) !== value;\n\n return {\n checkHasChanges,\n onChangeAttribute,\n onDeleteAttribute,\n onAdd,\n onCancel,\n onApply,\n onStartEditing,\n onReset,\n modifiedValues,\n editingValues,\n deletedUris\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\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}));\n","import React, {useCallback, useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {EditableAttribute, ViewIdContext} from '@reltio/components';\nimport {\n Entity,\n isReference,\n isTempUri,\n getAttributeOwnError,\n getReferencedEntityUriFromAttrValue,\n AttributeItem,\n ComplexAttributeValue,\n EntitiesMap\n} from '@reltio/mdm-sdk';\nimport {Button as Button} from '@material-ui/core';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {useStyles} from './styles';\n\ntype Props = {\n hasChanges: boolean;\n onChangeAttribute: (attribute: AttributeItem) => void;\n onDeleteAttribute: (attribute: AttributeItem) => void;\n onCancel: (attributeValue: ComplexAttributeValue) => void;\n onApply: (attributeValue: ComplexAttributeValue, tempEntitiesMap?: EntitiesMap) => void;\n attributeValue: ComplexAttributeValue;\n};\n\nexport const AttributeEditing = ({\n onChangeAttribute,\n onCancel,\n onApply,\n onDeleteAttribute,\n hasChanges,\n attributeValue\n}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const viewId = useContext(ViewIdContext);\n const {attributeType} = useContext(TableAttributeContext);\n\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const mode = useSelector(mdmModule.selectors.getMode);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n const shouldConnectAllModifiedEntities =\n isReference(attributeType) && isTempUri(getReferencedEntityUriFromAttrValue(attributeValue));\n const allModifiedEntities = useSelector((state) =>\n shouldConnectAllModifiedEntities ? mdmModule.selectors.getModifiedEntities(state) : undefined\n );\n const errors = useSelector((state) =>\n mdmModule.selectors.getActiveErrorsForAttributesPager(state, entityUri, attributeType)\n );\n\n const showEmptyEditors = isTempUri(entityUri);\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 onDeactivateError = useCallback(pipe(profile.errors.actions.errorDeactivated, dispatch), [dispatch]);\n\n return (\n <>\n <EditableAttribute\n expanded\n attributeValue={attributeValue}\n showEmptyEditors={showEmptyEditors}\n onDeleteAttribute={onDeleteAttribute}\n onDeactivateError={onDeactivateError}\n onChangeAttribute={onChangeAttribute}\n onAddAttributes={onAddAttributes}\n mode={mode}\n crosswalks={modifiedEntity.crosswalks}\n errors={errors}\n attributeType={attributeType}\n ownError={getAttributeOwnError(attributeValue, null, attributeType.uri, errors)}\n />\n <div className={styles.actionButtons}>\n <Button onClick={() => onCancel(attributeValue)}>{i18n.text('Cancel')}</Button>\n <Button\n color=\"primary\"\n disabled={!hasChanges}\n onClick={() => onApply(attributeValue, allModifiedEntities)}\n >\n {i18n.text('Apply')}\n </Button>\n </div>\n </>\n );\n};\n","import {useEffect, useContext, useMemo, useRef} from 'react';\nimport {pipe, prop, curry, both, map, reject, isNil, forEach, either, equals} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n areOneHierarchyUris,\n AttributeError,\n ComplexAttributeValue,\n ErrorType,\n isAttributeTypeError\n} from '@reltio/mdm-sdk';\nimport {useActionsHook} from '@reltio/components';\nimport {TableAttributeContext} from '../../../contexts/TableAttributeContext';\n\ntype Props = {\n onStartEditing: (value: ComplexAttributeValue) => void;\n modifiedValues: ComplexAttributeValue[];\n highlightedError: AttributeError;\n highlightedAttributeError: AttributeError;\n};\n\nconst isMissedTypeError = (error: AttributeError) => error?.type === ErrorType.missed;\n\nconst findAttributeValueByError = curry((values: ComplexAttributeValue[], error: AttributeError) =>\n values.find(pipe(prop('uri'), either(areOneHierarchyUris(error.parentUri), equals(error.uri))))\n);\n\nexport const useExpandAttributes = ({\n onStartEditing,\n modifiedValues,\n highlightedError,\n highlightedAttributeError\n}: Props) => {\n const {attributeType} = useContext(TableAttributeContext);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const errors = useSelector((state) =>\n mdmModule.selectors.getActiveErrorsForAttributesPager(state, entityUri, attributeType)\n );\n\n const shouldOpenInvalidEditors = useRef(true);\n const listenToActions = useActionsHook();\n\n const missedAttributeError = useMemo(\n () =>\n errors.find(both(isMissedTypeError, (error) => isAttributeTypeError(error, entityUri, attributeType.uri))),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [errors, entityUri, attributeType.uri]\n );\n\n useEffect(() => {\n if (missedAttributeError && modifiedValues.length === 1) {\n onStartEditing(modifiedValues[0]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [missedAttributeError]);\n\n useEffect(() => {\n if (shouldOpenInvalidEditors.current && errors.length) {\n pipe(map(findAttributeValueByError(modifiedValues)), reject(isNil), forEach(onStartEditing))(errors);\n shouldOpenInvalidEditors.current = false;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [errors]);\n\n useEffect(() => {\n if (isMissedTypeError(highlightedError) && modifiedValues.length === 1) {\n onStartEditing(modifiedValues[0]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [highlightedError]);\n\n useEffect(() => {\n if (highlightedAttributeError) {\n const attributeValue = findAttributeValueByError(modifiedValues, highlightedAttributeError);\n if (attributeValue) onStartEditing(attributeValue);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [highlightedAttributeError]);\n\n useEffect(() => {\n const stopListeningActions = listenToActions((action) => {\n if (action.type === profile.constants.ProfileActions.SAVE_PROFILE) {\n shouldOpenInvalidEditors.current = true;\n }\n });\n return () => stopListeningActions();\n }, [listenToActions]);\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n addButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n editor: {\n padding: '4px 16px'\n }\n}));\n","import React, {useContext, useEffect} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {\n AttributeError,\n AttributeItem,\n checkCanCreateAttribute,\n ComplexAttributeValue,\n EntitiesMap,\n TableAttributeViewConfig\n} from '@reltio/mdm-sdk';\nimport {useConfigPermissions} from '@reltio/components';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {AttributeEditing} from '../AttributeEditing/AttributeEditing';\nimport {useExpandAttributes} from './hooks/useExpandAttributes';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: TableAttributeViewConfig;\n editingValues: ComplexAttributeValue[];\n modifiedValues: ComplexAttributeValue[];\n onChangeAttribute: (item: AttributeItem) => void;\n onDeleteAttribute: (item: AttributeItem) => void;\n onAdd: () => void;\n onCancel: (value: ComplexAttributeValue) => void;\n onApply: (value: ComplexAttributeValue, tempEntitiesMap?: EntitiesMap) => void;\n onReset: () => void;\n onStartEditing: (value: ComplexAttributeValue) => void;\n checkHasChanges: (value: ComplexAttributeValue) => boolean;\n highlightedError: AttributeError;\n highlightedAttributeError: AttributeError;\n};\n\nexport const TableAttributeEditableContent = ({\n config,\n editingValues,\n modifiedValues,\n onChangeAttribute,\n onDeleteAttribute,\n onAdd,\n onCancel,\n onApply,\n onStartEditing,\n onReset,\n checkHasChanges,\n highlightedError,\n highlightedAttributeError\n}: Props) => {\n const styles = useStyles();\n\n const {attributeType} = useContext(TableAttributeContext);\n const mode = useSelector(mdmModule.selectors.getMode);\n\n const {canCreate: hasConfigToCreate} = useConfigPermissions();\n useExpandAttributes({onStartEditing, modifiedValues, highlightedError, highlightedAttributeError});\n\n const canCreate =\n hasConfigToCreate(config) &&\n attributeType &&\n checkCanCreateAttribute({attributeType, mode}) &&\n !editingValues.length;\n\n useEffect(() => {\n return () => onReset();\n }, [onReset]);\n\n return (\n <div className={styles.editor}>\n {canCreate && (\n <Button color=\"primary\" onClick={onAdd} className={styles.addButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {editingValues.map((value) => (\n <AttributeEditing\n key={value.uri}\n attributeValue={value}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onDeleteAttribute}\n onCancel={onCancel}\n onApply={onApply}\n hasChanges={checkHasChanges(value)}\n />\n ))}\n </div>\n );\n};\n","import React, {useContext, useMemo} from 'react';\nimport {propEq} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n AttributeType,\n isAttributeTypeError as checkIsAttributeTypeError,\n isPartOfErrorAttributeTypeUri,\n isPartOfErrorParentUri,\n TableAttributeViewConfig\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {ScrollToErrorContext, useScrollToAttributeError, withContext} from '@reltio/components';\nimport AttributeTable from '../AttributeTable/AttributeTable';\nimport {useEditableAttribute} from './hooks/useEditableAttribute';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {TableAttributeEditableContent} from '../TableAttributeEditableContent/TableAttributeEditableContent';\n\ntype HighlightedError = React.ContextType<typeof ScrollToErrorContext>;\n\ntype Props = {\n config: TableAttributeViewConfig;\n entityUri: string;\n attributeType: AttributeType;\n highlightedError?: HighlightedError;\n highlightedAttributeError?: HighlightedError;\n};\n\nexport const TableAttributeContent = ({config, highlightedError, highlightedAttributeError}: Props) => {\n const isEditableMode = useSelector(mdmModule.selectors.getIsEditableMode);\n\n const {values, visibleColumns, onFilter, onSort, filters, sorting, allColumnsData} =\n useContext(TableAttributeContext);\n\n const {\n onDeleteAttribute,\n onStartEditing,\n onChangeAttribute,\n onAdd,\n onCancel,\n onApply,\n onReset,\n checkHasChanges,\n modifiedValues,\n editingValues,\n deletedUris\n } = useEditableAttribute();\n const {ref, errorClassName} = useScrollToAttributeError({highlightedError, isSimple: true});\n\n const preparedValues = isEditableMode ? modifiedValues : values;\n\n const visibleColumnsData = useMemo(\n () => visibleColumns.map((id) => allColumnsData.find(propEq('id', id))),\n [visibleColumns, allColumnsData]\n );\n\n return (\n <div ref={ref} className={errorClassName}>\n {isEditableMode && (\n <TableAttributeEditableContent\n config={config}\n editingValues={editingValues}\n modifiedValues={modifiedValues}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onDeleteAttribute}\n onAdd={onAdd}\n onReset={onReset}\n onCancel={onCancel}\n onApply={onApply}\n onStartEditing={onStartEditing}\n checkHasChanges={checkHasChanges}\n highlightedError={highlightedError?.error}\n highlightedAttributeError={highlightedAttributeError?.error}\n />\n )}\n {visibleColumnsData.length > 0 && (\n <AttributeTable\n columnsData={visibleColumnsData}\n config={config}\n values={preparedValues}\n filters={filters}\n onFilter={onFilter}\n sorting={sorting}\n onSort={onSort}\n onEdit={onStartEditing}\n onDeleteAttribute={onDeleteAttribute}\n deletedUris={deletedUris}\n />\n )}\n </div>\n );\n};\n\nexport default withContext(\n ScrollToErrorContext,\n (contextValue, {entityUri, attributeType}) => {\n const {error} = contextValue || {};\n\n const isAttributeTypeError = checkIsAttributeTypeError(error, entityUri, attributeType.uri);\n const isAttributeError =\n error &&\n !isAttributeTypeError &&\n isPartOfErrorAttributeTypeUri(attributeType, error) &&\n isPartOfErrorParentUri(entityUri, error);\n\n const highlightedError = isAttributeTypeError ? contextValue : null;\n const highlightedAttributeError = isAttributeError ? contextValue : null;\n return {highlightedError, highlightedAttributeError};\n },\n TableAttributeContent\n);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n overflow: 'hidden'\n },\n noData: {\n fontSize: '13px',\n paddingLeft: '20px',\n color: 'rgba(0,0,0,0.54)'\n },\n header: {\n padding: '0 4px 0 16px'\n }\n}));\n","import React, {useContext} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport {\n BasicView,\n FacetViewHeader,\n DescriptionIcon,\n LinearLoadIndicator,\n BasicTablePagination\n} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {TableAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {Typography as Typography} from '@material-ui/core';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport AttributeTableHeader from '../AttributeTableHeader/AttributeTableHeader';\nimport TableAttributeContent from '../TableAttributeContent/TableAttributeContent';\nimport {useStyles} from './styles';\n\nconst DEFAULT_ROWS_PER_PAGE = 15;\n\ntype Props = {\n config: TableAttributeViewConfig;\n className?: string;\n};\n\nexport const TableAttributeView = ({config, className}: Props) => {\n const {caption, max = DEFAULT_ROWS_PER_PAGE} = config;\n\n const styles = useStyles();\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const {totalVisibleValues, attributeType, showTable, hasPaging, isLoading, page, setPage} =\n useContext(TableAttributeContext);\n\n return (\n <BasicView className={classnames(styles.root, className)}>\n {showTable ? (\n <>\n <AttributeTableHeader title={caption} />\n <div className={styles.content}>\n <TableAttributeContent config={config} attributeType={attributeType} entityUri={entityUri} />\n {hasPaging && (\n <BasicTablePagination\n count={totalVisibleValues}\n rowsPerPageOptions={[]}\n rowsPerPage={max}\n page={page}\n onChangePage={setPage}\n />\n )}\n {isLoading && <LinearLoadIndicator />}\n </div>\n </>\n ) : (\n <>\n <FacetViewHeader title={caption} className={styles.header}>\n <DescriptionIcon description={attributeType?.description} />\n </FacetViewHeader>\n <Typography className={styles.noData}>{i18n.text('No data')}</Typography>\n </>\n )}\n </BasicView>\n );\n};\n","import {useEffect, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {pick, prop} from 'ramda';\nimport {Entity, getPathsTree, getRequestErrorMessage, isTempUri, updateTreesWithNewEntity} from '@reltio/mdm-sdk';\nimport {useDidUpdateEffect, useSafePromise} from '@reltio/components';\nimport {Response, Node} from '../types';\n\nlet nodeCounter = 0;\nexport const generateId = () => nodeCounter++;\n\nconst processResponse = (response: Response) => {\n const fakeRoot = {\n children: [] as Node[],\n nodeId: generateId()\n };\n if (response.parentPaths) {\n for (let i = 0; i < response.parentPaths.length; i++) {\n const path = response.parentPaths[i];\n let nextRoot = fakeRoot;\n for (let j = path.length - 1; j >= 0; j--) {\n const nextParent = path[j];\n const entity = response.entities[nextParent.entityUri];\n const isRoot = j === path.length - 1;\n const node: Node = {\n entity,\n children: [],\n nodeId: generateId(),\n expanded: true,\n rootIndex: isRoot ? i + 1 : undefined\n };\n if (isRoot) {\n node.root = isRoot;\n }\n nextRoot.children.push(node);\n nextRoot = node;\n }\n }\n }\n return fakeRoot.children;\n};\nexport const useLoadPaths = (entityUri: string, graphUri: string) => {\n const safePromise = useSafePromise();\n const [treeData, setTreeData] = useState<Node[]>([]);\n const [errorMessage, setErrorMessage] = useState<string>(null);\n const entity: Entity = useSelector(mdmModule.selectors.getEntity);\n useDidUpdateEffect(() => {\n const forest = treeData\n .map((tree, index) => ({tree, index}))\n .reduce((acc, tree) => ({...acc, [tree.index]: {root: tree.tree}}), {});\n const newTrees = updateTreesWithNewEntity(pick(['uri', 'label', 'secondaryLabel', 'type'], entity), forest);\n setTreeData(newTrees.map(prop('root')));\n }, [entity?.updatedTime]);\n useEffect(() => {\n if (!isTempUri(entityUri)) {\n setErrorMessage(null);\n safePromise(getPathsTree({uri: entityUri, graphUri}))\n .then(processResponse)\n .then(setTreeData)\n .catch((e) => {\n console.warn(e);\n setErrorMessage(getRequestErrorMessage(e, i18n.text('Something went wrong')));\n });\n }\n return () => {\n setTreeData([]);\n };\n }, [entityUri, graphUri, safePromise]);\n return {treeData, setTreeData, errorMessage};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n fontSize: '13px',\n display: 'flex',\n paddingTop: '6px',\n position: 'relative'\n },\n title: {\n flexGrow: 1,\n minHeight: '15px',\n color: theme.palette.primary.main,\n lineHeight: '15px'\n },\n wrapper: {\n width: '100%'\n },\n avatar: {\n height: '16px',\n width: '16px',\n marginRight: '8px',\n marginLeft: '8px'\n },\n header: {\n padding: '0 4px 0 16px'\n },\n treeContainer: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n minHeight: '372px',\n maxHeight: '507px',\n overflow: 'auto'\n },\n tree: {\n flexGrow: 1,\n height: 0\n },\n buttonsContainer: {\n flexShrink: 0,\n marginLeft: 'auto',\n '& > * + *': {\n marginLeft: '-4px'\n }\n },\n button: {\n padding: '8px'\n },\n errorMessage: {\n fontSize: '13px',\n margin: '0 16px 0',\n lineHeight: '1.4',\n color: theme.palette.text.secondary\n }\n}));\n","import React from 'react';\nimport {HierarchyPathsViewConfig} from '@reltio/mdm-sdk';\n\nexport const ConfigContext = React.createContext<HierarchyPathsViewConfig>(null);\n","import React, {memo, useContext, useState} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {HierarchyNodeTitle} from '@reltio/components';\nimport {getAbsoluteImageUrl, getEntityType, getPropWithInheritance} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {Avatar as Avatar} from '@material-ui/core';\nimport {useStyles} from './styles';\nimport DEFAULT_ICON from './defaultTypeIcon.png';\nimport {ConfigContext} from './ConfigContext';\nimport {Node as NodeType} from './types';\n\nconst onImageLoadFail = (e) => {\n e.target.src = DEFAULT_ICON;\n};\n\ntype Props = {\n node?: NodeType;\n};\n\nexport const Node = ({node}: Props) => {\n const {\n entity: {label: title, uri},\n nodeId\n } = node;\n\n const styles = useStyles();\n const absoluteImagePath = useSelector(mdm.selectors.getAbsoluteImagePath);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const {uri: currentEntityUri} = useSelector(mdm.selectors.getEntity);\n\n const [popperAnchor, setPopperAnchor] = useState<HTMLElement>();\n const config = useContext(ConfigContext);\n\n const isSelected = uri === currentEntityUri;\n const entityType = getEntityType(metadata, node.entity.type) || {};\n const entityTypeGraphIcon = getPropWithInheritance(metadata, entityType, 'typeGraphIcon');\n const icon = entityTypeGraphIcon && getAbsoluteImageUrl(absoluteImagePath, entityTypeGraphIcon);\n\n return (\n <div className={styles.wrapper} data-node-id={nodeId}>\n <div ref={setPopperAnchor} className={styles.container}>\n <Avatar\n alt=\"Node icon\"\n className={classnames(styles.avatar)}\n src={icon || DEFAULT_ICON}\n onError={onImageLoadFail}\n />\n <HierarchyNodeTitle\n isSelected={isSelected}\n title={title}\n entityUri={uri}\n viewId={config.id}\n anchorEl={popperAnchor}\n />\n </div>\n </div>\n );\n};\n\nexport default memo(Node);\n","import {Node} from './types';\n\nexport const getNodeKey = ({node}: {node: Node}) => node.nodeId;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {theme as treeTheme} from '../theme';\n\nexport const useStyles = makeStyles(() => ({\n lineBlock: {\n height: '100%',\n position: 'relative',\n display: 'inline-block'\n },\n lineChildren: {\n height: '100%',\n position: 'absolute',\n display: 'inline-block',\n '&:after': {\n content: \"''\",\n position: 'absolute',\n backgroundColor: 'rgba(0,122,193,0.3)',\n width: '1px',\n left: '50%',\n bottom: '0',\n height: `calc(100% - ${treeTheme.rowHeight}px)`\n }\n },\n rootIndex: {\n display: 'flex',\n alignItems: 'center',\n color: 'rgba(0,0,0,0.54)',\n height: '100%'\n },\n verticalLine: {\n width: '1px',\n left: 'calc(50% - 1px)',\n top: 0,\n height: `${treeTheme.rowHeight / 2}px`,\n position: 'absolute',\n backgroundColor: 'rgba(0,122,193,0.3)'\n },\n horizontalLineRight: {\n height: '1px',\n top: `${treeTheme.rowHeight / 2}px`,\n left: 'calc(50% - 1px)',\n width: '24%',\n position: 'absolute',\n backgroundColor: 'rgba(0,122,193,0.3)'\n },\n node: {\n minWidth: '100%',\n position: 'relative',\n textAlign: 'left',\n padding: '0 24px 0 18px',\n boxSizing: 'border-box',\n whiteSpace: 'normal',\n '&:hover': {\n backgroundColor: 'rgba(0,0,0,0.06)'\n }\n },\n nodeContent: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n paddingLeft: '18px',\n boxSizing: 'border-box'\n },\n row: {\n display: 'flex'\n },\n rowContents: {\n position: 'relative',\n borderLeft: 'none',\n paddingLeft: '4px',\n flex: '1 1 auto',\n width: 0,\n display: 'flex',\n verticalAlign: 'middle',\n boxSizing: 'border-box'\n },\n buttonWrapper: {\n display: 'flex',\n paddingTop: '13px',\n width: '12px',\n cursor: 'pointer'\n },\n collapsedButton: {\n transform: 'rotate(-90deg)'\n },\n expandedButton: {\n transform: 'rotate(0deg)'\n },\n button: {\n transition: 'transform .15s ease',\n width: 0,\n height: 0,\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n borderTop: '4px solid rgba(0, 0, 0, 0.54)'\n },\n rowTitle: {\n flex: '1 1 auto',\n width: 0,\n paddingRight: '11px'\n }\n}));\n","import React from 'react';\nimport {useStyles} from './styles';\nimport classnames from 'classnames';\nimport {omit} from 'ramda';\nimport {Node} from '../types';\n\ntype Props = {\n treeIndex: number;\n scaffoldBlockPxWidth: number;\n node: Node;\n path: Array<string | number>;\n style?: Record<string, unknown>;\n title: React.ReactElement;\n toggleChildrenVisibility: (props) => void;\n};\n\nconst NodeRendererDefault = (props: Props) => {\n const {scaffoldBlockPxWidth, toggleChildrenVisibility, node, title, path, treeIndex, style, ...otherProps} = omit(\n [\n 'connectDragPreview',\n 'connectDragSource',\n 'isDragging',\n 'canDrop',\n 'canDrag',\n 'draggedNode',\n 'isSearchMatch',\n 'isSearchFocus',\n 'buttons',\n 'didDrop',\n 'children',\n 'treeId',\n 'isOver',\n 'parentNode',\n 'rowDirection'\n ],\n props\n );\n const nodeTitle = title;\n\n const showToggleChildrenButton =\n toggleChildrenVisibility && !node.root && node.children && node.children.length > 0;\n\n const onToggle = () => {\n toggleChildrenVisibility({\n node,\n path,\n treeIndex\n });\n };\n const styles = useStyles();\n return (\n <div style={{height: '100%'}} {...otherProps} key={node.nodeId}>\n {showToggleChildrenButton && node.expanded && (\n <div style={{width: scaffoldBlockPxWidth - 2}} className={styles.lineChildren} />\n )}\n <div className={styles.row} style={style}>\n <div className={styles.rowContents}>\n {showToggleChildrenButton && (\n <div className={styles.buttonWrapper} onClick={onToggle}>\n <div\n aria-label={node.expanded ? 'Collapse' : 'Expand'}\n className={classnames(\n styles.button,\n node.expanded ? styles.expandedButton : styles.collapsedButton\n )}\n />\n </div>\n )}\n <div className={styles.rowTitle}>\n {typeof nodeTitle === 'function'\n ? nodeTitle({\n node,\n path,\n treeIndex\n })\n : nodeTitle}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default NodeRendererDefault;\n","import treeNodeRenderer from './tree-node-data-renderer';\nimport nodeContentRenderer from './node-content-renderer';\n\nconst scaffoldBlockPxWidth = 16;\nconst rowHeight = 28;\nconst slideRegionSize = 50;\n\nexport const theme = {nodeContentRenderer, treeNodeRenderer, scaffoldBlockPxWidth, rowHeight, slideRegionSize};\n","import React from 'react';\nimport {useStyles} from './styles';\nimport {omit} from 'ramda';\nimport {Node} from '../types';\n\nconst MIN_NODE_CONTENT_WIDTH = 250;\n\ntype Props = {\n scaffoldBlockPxWidth: number;\n lowerSiblingCounts: number[];\n\n node: Node;\n children: React.ReactElement;\n style?: Record<string, unknown>;\n};\n\nconst TreeNode = (props: Props) => {\n const {children, scaffoldBlockPxWidth, lowerSiblingCounts, node, ...otherProps} = omit(\n [\n 'listIndex',\n 'swapFrom',\n 'swapLength',\n 'swapDepth',\n 'draggedNode',\n 'getPrevRow',\n 'connectDropTarget',\n 'isOver',\n 'canDrop',\n 'treeIndex',\n 'treeId',\n 'path',\n 'rowDirection'\n ],\n props\n );\n const styles = useStyles();\n // Construct the scaffold representing the structure of the tree\n const scaffoldBlockCount = lowerSiblingCounts.length;\n const scaffold = [];\n lowerSiblingCounts.forEach((lowerSiblingCount, i) => {\n scaffold.push(\n <div key={`pre_${1 + i}`} style={{width: scaffoldBlockPxWidth}} className={styles.lineBlock}>\n {node.root && <div className={styles.rootIndex}>{node.rootIndex}.</div>}\n {i === scaffoldBlockCount - 1 && i !== 0 && (\n <>\n <div className={styles.verticalLine} />\n <div className={styles.horizontalLineRight} />\n </>\n )}\n </div>\n );\n });\n\n const shift = node.root ? scaffoldBlockPxWidth - 4 : 0; //4px - shifting for rootIndex\n const scaffoldWidth = scaffoldBlockPxWidth * scaffoldBlockCount - shift;\n const style = {left: scaffoldWidth, width: `calc(100% - ${scaffoldWidth}px`};\n const width = `${scaffoldWidth + MIN_NODE_CONTENT_WIDTH}px`;\n const nodeStyle = {...otherProps.style, width};\n return (\n <div {...otherProps} className={styles.node} style={nodeStyle}>\n {scaffold}\n\n <div className={styles.nodeContent} style={style}>\n {children}\n </div>\n </div>\n );\n};\n\nexport default TreeNode;\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: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\",\n fillOpacity: \".54\"\n}, React.createElement(\"path\", {\n d: \"M14.5 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm4 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm-17 1a1.5 1.5 0 110-3 1.5 1.5 0 010 3zM4 4a2 2 0 110-4 2 2 0 010 4zm1 16a2 2 0 110-4 2 2 0 010 4zm4.5-6a4.5 4.5 0 110-9 4.5 4.5 0 010 9zm0-2a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm6 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3z\",\n fill: \"#000\"\n}))));","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {FacetViewHeader, FeaturesContext, SmallIconButtonWithTooltip} from '@reltio/components';\nimport ShowGraphIcon from './icons/ShowGraph.svg';\nimport {useStyles} from './styles';\n\ntype Props = {\n title?: string;\n onGraphOpen: () => void;\n};\n\nconst HierarchyPathsHeader = ({title, onGraphOpen}: Props) => {\n const styles = useStyles();\n const {showNavigateToGraph} = useContext(FeaturesContext);\n return (\n <FacetViewHeader title={title} className={styles.header}>\n {showNavigateToGraph && (\n <div className={styles.buttonsContainer}>\n <SmallIconButtonWithTooltip\n className={styles.button}\n tooltipTitle={i18n.text('Show Graph')}\n icon={ShowGraphIcon}\n onClick={onGraphOpen}\n size=\"L\"\n />\n </div>\n )}\n </FacetViewHeader>\n );\n};\n\nexport default HierarchyPathsHeader;\n","import {useCallback, useState} from 'react';\nimport {assoc} from 'ramda';\n\nimport {theme} from '../theme';\nimport {Node} from '../types';\nimport {getNodeKey} from '../helpers';\n\ntype HeightsCache = {[nodeId: Node['nodeId']]: number};\n\nconst getCacheKey = (node: Node) => getNodeKey({node});\n\nexport const useDynamicNodesHeights = () => {\n const [heightsCache, setHeightsCache] = useState<HeightsCache>({});\n const clearHeightsCache = useCallback(() => {\n setHeightsCache({});\n }, []);\n const onResize = useCallback(\n (node: Node) => (_, height) => {\n setHeightsCache((prevCache) =>\n prevCache[getCacheKey(node)] !== height ? assoc(getCacheKey(node), height, prevCache) : prevCache\n );\n },\n []\n );\n const getRowHeight = useCallback(\n ({node}: {node: Node}): number =>\n heightsCache[getCacheKey(node)]\n ? Math.max(heightsCache[getCacheKey(node)], theme.rowHeight)\n : theme.rowHeight,\n [heightsCache]\n );\n return {onResize, getRowHeight, clearHeightsCache};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n position: 'relative'\n },\n bodyWrapper: {\n paddingTop: '21px'\n }\n}));\n","import React, {useRef, useEffect, useState} from 'react';\nimport {useAPI} from '@reltio/components';\nimport {CustomActionViewConfig} from '@reltio/mdm-sdk';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {Dialog as Dialog} from '@material-ui/core';\nimport {isNil, reject} from 'ramda';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: CustomActionViewConfig;\n className?: string;\n};\n\nexport const CustomView = ({config, className}: Props) => {\n const basicViewRef = useRef<HTMLDivElement>();\n const dialogRef = useRef<HTMLDivElement>();\n const [showModal, setShowModal] = useState<boolean>(false);\n const {height, width, tooltip: defaultTooltip} = config;\n const {html, visible, tooltip: updatedTooltip, customStyles, popup} = useAPI(config);\n const styles = useStyles();\n const tooltip = updatedTooltip || defaultTooltip;\n useEffect(() => {\n if (basicViewRef.current && html) {\n basicViewRef.current.innerHTML = '';\n Array.from(html.childNodes).forEach((child) => {\n basicViewRef.current.appendChild(child);\n });\n }\n }, [html]);\n useEffect(() => {\n setShowModal(!!popup);\n }, [popup]);\n\n useEffect(() => {\n if (showModal && dialogRef.current) {\n dialogRef.current.innerHTML = '';\n if (popup) {\n Array.from(popup.childNodes).forEach((child) => {\n dialogRef.current.appendChild(child);\n });\n }\n }\n }, [showModal, popup]);\n\n const style: {width?: number; height?: number} = reject(isNil, {width, height});\n return visible ? (\n <div className={styles.bodyWrapper}>\n <Dialog ref={dialogRef} open={!!popup} />\n <Tooltip title={tooltip || ''}>\n <div\n ref={basicViewRef}\n style={{...style, ...customStyles}}\n className={classnames(styles.root, className)}\n />\n </Tooltip>\n </div>\n ) : null;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n dragHandleContainer: {\n position: 'relative',\n width: '100%',\n height: 'inherit'\n },\n dragHandleVisibilityArea: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '24px',\n zIndex: 11,\n '&:hover $dragHandle': {\n visibility: 'visible'\n },\n '.react-grid-item.static &:hover $dragHandle': {\n visibility: 'hidden'\n }\n },\n dragHandle: {\n position: 'absolute',\n width: '100%',\n display: 'flex',\n justifyContent: 'center',\n top: '-3px',\n zIndex: 11,\n cursor: 'move',\n visibility: 'hidden'\n },\n dragIcon: {\n transform: 'translateX(-50%) rotate(90deg)',\n color: 'rgba(0, 0, 0, 0.3)'\n }\n});\n","import React, {ComponentType} from 'react';\nimport classnames from 'classnames';\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\n\nimport {useStyles} from './styles';\n\nconst withDragHandle = <P extends Record<string, unknown>>(Component: ComponentType<P>) => {\n const WithDragHandle = (props: P) => {\n const styles = useStyles();\n return (\n <div className={styles.dragHandleContainer}>\n <div className={styles.dragHandleVisibilityArea}>\n <div className={classnames('viewDraggableHandle', styles.dragHandle)}>\n <DragIndicatorIcon className={styles.dragIcon} />\n </div>\n </div>\n <Component {...props} />\n </div>\n );\n };\n\n WithDragHandle.displayName = 'WithDragHandle';\n return WithDragHandle;\n};\n\nexport default withDragHandle;\n","import React, {ComponentType} from 'react';\nimport i18n from 'ui-i18n';\nimport {EMPTY_STATE_ICONS, EMPTY_STATE_VARIANTS, EmptyState, ErrorBoundary} from '@reltio/components';\n\nconst withErrorBoundary = <P extends Record<string, unknown>>(Component: ComponentType<P>) => {\n const WithErrorBoundary = (props: P) => {\n return (\n <ErrorBoundary\n error={\n <EmptyState\n LogoRenderer={EMPTY_STATE_ICONS.ERROR}\n text=\"\"\n secondaryText={i18n.text('Something went wrong')}\n variant={EMPTY_STATE_VARIANTS.small}\n />\n }\n >\n <Component {...props} />\n </ErrorBoundary>\n );\n };\n\n WithErrorBoundary.displayName = 'WithErrorBoundary';\n return WithErrorBoundary;\n};\n\nexport default withErrorBoundary;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n stubView: {\n padding: '20px'\n },\n fullHeight: {\n height: '100%'\n },\n component: {\n boxSizing: 'border-box',\n overflow: 'auto',\n boxShadow: 'none',\n borderRadius: 'unset'\n }\n});\n","import {useEffect, useState} from 'react';\nimport {both, gt, lt, path, pipe} from 'ramda';\nimport {Entity, GeoPoint, Metadata, resolve} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '@reltio/components';\n\nconst filterWrongLat = pipe(path(['point', 'lat']), both(gt(90), lt(-90)));\n\nexport const useMarkers = (entity: Entity, metadata: Metadata, mapKey: string) => {\n const [markers, setMarkers] = useState<GeoPoint[]>([]);\n const [loading, setLoading] = useState(true);\n const safePromise = useSafePromise();\n useEffect(() => {\n setLoading(true);\n safePromise(resolve(metadata, [entity], mapKey))\n .then((markers) => {\n setMarkers(markers.filter(filterWrongLat));\n })\n .catch(() => {\n setMarkers([]);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [entity, metadata, mapKey, safePromise]);\n\n return {markers, loading};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles(() => ({\n root: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column'\n },\n fullHeight: {\n height: '100%'\n },\n fullscreenBtn: {\n position: 'absolute',\n right: '5px',\n top: '5px',\n zIndex: 100\n }\n}));\n\nexport default useStyles;\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n caption: {\n color: theme.palette.text.secondary,\n fontSize: '13px'\n }\n}));\n\nexport default useStyles;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport useStyles from './styles';\n\ntype ImageLineCaptionProps = {\n totalImages: number;\n};\n\nexport const ImageLineCaption = ({totalImages}: ImageLineCaptionProps) => {\n const styles = useStyles();\n const photoWord = totalImages > 1 ? i18n.text('photos') : i18n.text('photo');\n return (\n <Typography variant=\"caption\" className={styles.caption}>\n {`${totalImages} ${photoWord}`}\n </Typography>\n );\n};\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pipe, pathOr} from 'ramda';\nimport {EditableImageAttributesLine} from '@reltio/components';\nimport {AttributeType, Entity, Paging, AttributeItem, ImageAttributeViewConfig} from '@reltio/mdm-sdk';\nimport mdmModule, {profile, RequestNextPageOfAttributeValuesPayload} from '@reltio/mdm-module';\nimport {IMAGE_SIZE} from '../ImageAttributeView';\nimport {ImageLineCaption} from '../ImageLineCaption/ImageLineCaption';\n\ntype ImageAttributeViewEditableContentProps = {\n config: ImageAttributeViewConfig;\n attributeType: AttributeType;\n paging?: Paging;\n requestNextPageOfAttributeValues?: (payload: RequestNextPageOfAttributeValuesPayload) => void;\n};\n\nexport const ImageAttributeViewEditableContent = ({\n config,\n attributeType,\n paging,\n requestNextPageOfAttributeValues\n}: ImageAttributeViewEditableContentProps) => {\n const dispatch = useDispatch();\n const entity = useSelector(mdmModule.selectors.getEntity);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entity.uri) || ({} as Entity)\n );\n const modifiedEntityValues = pathOr([], ['attributes', attributeType.name], modifiedEntity);\n const viewId = config.id;\n\n const onChangeAttribute = (params: AttributeItem) =>\n pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId});\n\n const onDeleteAttribute = (params: AttributeItem) =>\n pipe(profile.actions.removeAttribute, dispatch)({...params, viewId});\n\n return (\n <>\n <EditableImageAttributesLine\n attributeValues={modifiedEntityValues}\n attributeType={attributeType}\n onDeleteAttribute={onDeleteAttribute}\n parentUri={modifiedEntity.uri}\n onChangeAttribute={onChangeAttribute}\n imageSize={IMAGE_SIZE}\n paging={paging}\n requestNextPageOfAttributeValues={requestNextPageOfAttributeValues}\n />\n <ImageLineCaption totalImages={modifiedEntityValues.length} />\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n padding: '8px 16px'\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary\n }\n}));\n\nexport default useStyles;\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pathOr, path} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport {BasicView, DescriptionIcon, FacetViewHeader, ImageAttributesLine} from '@reltio/components';\nimport {findAttributeTypeByUri, isEditableMode, ImageAttributeViewConfig} from '@reltio/mdm-sdk';\nimport mdmModule, {profile, RequestNextPageOfAttributeValuesPayload} from '@reltio/mdm-module';\nimport {ImageAttributeViewEditableContent} from './ImageAttributeViewEditableContent/ImageAttributeViewEditableContent';\nimport {ImageLineCaption} from './ImageLineCaption/ImageLineCaption';\nimport useStyles from './styles';\n\ntype ImageAttributeViewProps = {\n config: ImageAttributeViewConfig;\n className?: string;\n};\n\nexport const IMAGE_SIZE = {\n imageMargin: 4,\n imageWidth: 162,\n imageHeight: 162\n};\n\nexport const ImageAttributeView = ({config, className}: ImageAttributeViewProps) => {\n const {attributeUri} = config;\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const mode = useSelector(mdmModule.selectors.getMode);\n const entity = useSelector(mdmModule.selectors.getEntityWithDiff);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n\n const attributeType = findAttributeTypeByUri(metadata, attributeUri);\n const entityValues = pathOr([], ['attributes', attributeType?.name], entity);\n const paging = path(['attributes', 'paging', attributeUri], entity);\n const totalValues = entityValues.length;\n\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n const requestNextPageOfAttributeValues = useCallback(\n (payload: RequestNextPageOfAttributeValuesPayload) =>\n dispatch(profile.actions.requestNextPageOfAttributeValues(payload)),\n [dispatch]\n );\n\n const renderContent = () => {\n if (attributeType) {\n if (isEditableMode(mode)) {\n const props = {\n attributeType,\n config,\n paging,\n requestNextPageOfAttributeValues\n };\n return <ImageAttributeViewEditableContent {...props} />;\n }\n if (totalValues > 0) {\n const props = {\n attributeValues: entityValues,\n attributeType,\n imageSize: IMAGE_SIZE,\n paging,\n parentUri: entity.uri,\n requestNextPageOfAttributeValues\n };\n return (\n <>\n <ImageAttributesLine {...props} />\n <ImageLineCaption totalImages={totalValues} />\n </>\n );\n }\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n };\n return (\n <BasicView className={className}>\n <FacetViewHeader title={config.caption}>\n <DescriptionIcon description={attributeType?.description} />\n </FacetViewHeader>\n <div className={styles.container}>{renderContent()}</div>\n </BasicView>\n );\n};\n","import {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {getActionPermissionForMatch, Match, ProfilePotentialMatchesViewConfig} from '@reltio/mdm-sdk';\nimport React, {useCallback, useContext, useMemo} from 'react';\nimport {ActionButtonMode, MergeButton, NotMatchButton, ViewIdContext} from '@reltio/components';\n\ntype Props = {\n config: ProfilePotentialMatchesViewConfig;\n match: Match;\n onStartRequest: () => void;\n onFinishRequest: () => void;\n};\nexport const ActionButtons = ({config, match, onStartRequest, onFinishRequest}: Props) => {\n const dispatch = useDispatch();\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entity = useSelector(mdmModule.selectors.getEntity);\n const {canMerge, canMark} = getActionPermissionForMatch(metadata, config, match.object, entity, match.matchRules);\n const entities = useMemo(() => {\n return [match.object];\n }, [match.object]);\n\n const actionButtonProps = {\n entity,\n entities,\n mode: ActionButtonMode.iconButton,\n onStartRequest\n };\n const viewId = useContext(ViewIdContext);\n const onMergeFinish = useCallback(() => {\n onFinishRequest();\n dispatch(profile.entity.actions.loadEntity({viewId, uri: entity.uri}));\n }, [dispatch, entity.uri, onFinishRequest, viewId]);\n return (\n <>\n {canMerge && <MergeButton {...actionButtonProps} onFinishRequest={onMergeFinish} />}\n {canMark && <NotMatchButton {...actionButtonProps} onFinishRequest={onFinishRequest} />}\n </>\n );\n};\n","import {\n COMMENTS_CONTAINER_VISIBILITY_AREA,\n CommentsContainer,\n ProfileMatchCard,\n useMatchesLoader\n} from '@reltio/components';\nimport {\n CollaborationObjectTypes,\n createObjectIdForPM,\n createRelatedObjectUris,\n Match,\n ProfilePotentialMatchesViewConfig\n} from '@reltio/mdm-sdk';\nimport {ActionButtons} from './ActionButtons';\nimport React from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\n\ntype Props = Pick<ReturnType<typeof useMatchesLoader>, 'entitiesMap'> & {\n config: ProfilePotentialMatchesViewConfig;\n match: Match;\n onFinishRequest: () => void;\n onStartRequest: () => void;\n};\n\nexport const MatchCard = ({config, entitiesMap, match, onFinishRequest, onStartRequest}: Props) => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entity = useSelector(mdmModule.selectors.getEntity);\n return (\n <ProfileMatchCard\n match={match}\n entity={entity}\n entitiesMap={entitiesMap}\n metadata={metadata}\n className={COMMENTS_CONTAINER_VISIBILITY_AREA}\n >\n <CommentsContainer\n uri={createObjectIdForPM(entity.uri, match.object.uri)}\n relatedObjectUris={createRelatedObjectUris(CollaborationObjectTypes.POTENTIAL_MATCH, {\n entityUri: entity.uri,\n matchEntityUri: match.object.uri\n })}\n objectType={CollaborationObjectTypes.POTENTIAL_MATCH}\n />\n <ActionButtons\n match={match}\n config={config}\n onStartRequest={onStartRequest}\n onFinishRequest={onFinishRequest}\n />\n </ProfileMatchCard>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n minHeight: '52px'\n },\n matchesContainer: {\n position: 'relative'\n },\n footer: {\n display: 'flex',\n alignItems: 'end',\n flexGrow: 1,\n justifyContent: 'flex-start',\n borderTop: '1px solid rgba(0,0,0, 0.12)',\n padding: '8px 16px',\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: '0',\n lineHeight: '15px'\n },\n noData: {\n paddingLeft: '16px',\n paddingBottom: '16px',\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)'\n }\n}));\n","import React, {useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {isEmpty, map} from 'ramda';\nimport {Link as Link} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {\n BasicView,\n CollaborationContext,\n EntitiesMapContext,\n FacetViewHeader,\n LinearLoadIndicator,\n useMatchesLoader,\n ViewIdContext\n} from '@reltio/components';\nimport mdmModule, {ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {\n getEntityUriForLink,\n getEntityUriFromMatchObject,\n getPotentialMatchesObjectIdsForCollaboration,\n Order,\n ProfilePotentialMatchesViewConfig\n} from '@reltio/mdm-sdk';\nimport {MatchCard} from './MatchCard';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: ProfilePotentialMatchesViewConfig;\n className?: string;\n};\n\nexport const DEFAULT_MATCHES_LIMIT = 3;\nexport const DEFAULT_OPTIONS = {\n showTransitiveMatches: true,\n showInactiveEntities: false\n};\nexport const DEFAULT_SORTING = {order: Order.asc, field: 'score'};\nenum ComponentStates {\n Loading,\n NoData,\n Loaded\n}\nexport const ProfilePotentialMatchesView = ({config, className}: Props) => {\n const styles = useStyles();\n const entity = useSelector(mdmModule.selectors.getEntity);\n const entityUri = getEntityUriForLink(entity);\n\n const [isLoading, setIsLoading] = useState(false);\n const turnOnDisableSpinner = useCallback(() => {\n setIsLoading(true);\n }, []);\n const turnOffDisableSpinner = useCallback(() => {\n setIsLoading(false);\n }, []);\n\n const {matches, entitiesMap, loadMatches} = useMatchesLoader({\n enabled: !!entityUri,\n entity,\n options: DEFAULT_OPTIONS,\n filter: '',\n page: 0,\n sorting: DEFAULT_SORTING,\n rowsPerPage: DEFAULT_MATCHES_LIMIT,\n onStartLoading: turnOnDisableSpinner,\n onFinishLoading: turnOffDisableSpinner\n });\n const onFinishMatchAction = useCallback(() => {\n loadMatches();\n }, [loadMatches]);\n\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const openPotentialMatchPerspective = useCallback(() => {\n dispatch(mdmModuleUi.actions.openPerspective({perspectiveId: 'potentialMatches', viewId}));\n }, [dispatch, viewId]);\n\n const objectIds = useMemo(\n () => getPotentialMatchesObjectIdsForCollaboration(entityUri, map(getEntityUriFromMatchObject, matches)),\n [entityUri, matches]\n );\n\n const {getCommentsCount} = useContext(CollaborationContext);\n useEffect(() => {\n getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n const showSeeAll = !isEmpty(matches);\n const getComponentState = () => {\n if (isLoading) {\n return ComponentStates.Loading;\n }\n if (isEmpty(matches)) {\n return ComponentStates.NoData;\n }\n return ComponentStates.Loaded;\n };\n const state = getComponentState();\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <BasicView className={classnames(styles.root, className)}>\n <FacetViewHeader title={config.caption} />\n <div className={styles.matchesContainer}>\n {state === ComponentStates.Loading && <LinearLoadIndicator />}\n {state === ComponentStates.NoData && (\n <Typography className={styles.noData}>{i18n.text('No matches found')}</Typography>\n )}\n {state === ComponentStates.Loaded &&\n matches.map((match) => (\n <MatchCard\n config={config}\n entitiesMap={entitiesMap}\n match={match}\n onFinishRequest={onFinishMatchAction}\n onStartRequest={turnOnDisableSpinner}\n key={match.object.uri}\n />\n ))}\n </div>\n {showSeeAll && (\n <>\n <div className={styles.footer}>\n <Link\n component=\"button\"\n variant=\"caption\"\n onClick={openPotentialMatchPerspective}\n underline=\"none\"\n >\n {i18n.text('See all')}\n </Link>\n </div>\n </>\n )}\n </BasicView>\n </EntitiesMapContext.Provider>\n );\n};\n","import React, {lazy} from 'react';\nimport {Store} from 'redux';\nimport {\n ProfileViewConfig,\n ProfileViewTypes,\n AttributeViewConfig,\n EntityMapViewConfig,\n ProfilePotentialMatchesViewConfig,\n RelationsViewConfig,\n ImageAttributeViewConfig,\n SingleAttributeViewConfig,\n HierarchyPathsViewConfig,\n HierarchyTreeViewConfig,\n CustomActionViewConfig\n} from '@reltio/mdm-sdk';\nimport {pipe} from 'ramda';\nimport {ProfileAttributesView} from '../ProfileAttributesView/ProfileAttributesView';\nimport {ProfileSingleAttributeView} from '../ProfileSingleAttributeView/ProfileSingleAttributeView';\nimport {ProfileRelationsView} from '../ProfileRelationsView/ProfileRelationsView';\nimport {ProfileTableAttributeView} from '../ProfileTableAttributeView/ProfileTableAttributeView';\nimport {HierarchyPathsView} from '../HierarchyPathsView';\nimport {CustomView} from '../Sandbox/CustomView';\nimport withDragHandle from './HOCs/withDragHandle';\nimport withErrorBoundary from './HOCs/withErrorBoundary';\nimport {StubView} from './StubView';\nimport EntityMapView from '../EntityMapView/EntityMapView';\nimport {ImageAttributeView} from '../ImageAttributeView/ImageAttributeView';\nimport {ProfilePotentialMatchesView} from '../ProfilePotentialMatchesView/ProfilePotentialMatchesView';\n\nconst wrapView = <P extends unknown>(component: P): P => pipe(withErrorBoundary, withDragHandle)(component);\n\nconst WrappedStubView = wrapView(StubView);\nexport const WrappedProfileAttributesView = wrapView(ProfileAttributesView);\nexport const WrappedProfileSingleAttributeView = wrapView(ProfileSingleAttributeView);\nexport const WrappedProfileTableAttributeView = wrapView(ProfileTableAttributeView);\nexport const WrappedProfileRelationsView = wrapView(ProfileRelationsView);\nexport const WrappedCustomView = wrapView(CustomView);\nexport const WrappedHierarchyPathView = wrapView(HierarchyPathsView);\nexport const WrappedProfilePotentialMatchesView = wrapView(ProfilePotentialMatchesView);\n\nexport const WrappedHierarchyTreeView = lazy(() =>\n import(/* webpackMode: \"eager\" */ '@reltio/hierarchy-tree').then((importedModule) => ({\n default: wrapView(importedModule.HierarchyTreeView)\n }))\n);\n\nexport const WrappedRelationshipsTableView = lazy(() =>\n import(/* webpackMode: \"eager\" */ '@reltio/relations-table').then((importedModule) => ({\n default: wrapView(importedModule.RelationshipsTableView)\n }))\n);\nexport const WrappedEntityMapView = wrapView(EntityMapView);\nexport const WrappedImageAttributeView = wrapView(ImageAttributeView);\n\nexport type ViewComponentProps = {\n store: Store<unknown>;\n config:\n | ProfileViewConfig\n | AttributeViewConfig\n | SingleAttributeViewConfig\n | RelationsViewConfig\n | EntityMapViewConfig\n | ImageAttributeViewConfig;\n className?: string;\n isFullscreen: boolean;\n isAutosize?: boolean;\n onToggleFullscreen: (id: string) => void;\n};\n\nclass ViewsFactory {\n static ViewTypes = ProfileViewTypes;\n static getComponentBy = (\n propName: string,\n {store, config, className, isFullscreen, onToggleFullscreen}: ViewComponentProps\n ) => {\n switch (config[propName]) {\n case ViewsFactory.ViewTypes.HierarchyTree:\n return (\n <WrappedHierarchyTreeView\n config={config as HierarchyTreeViewConfig}\n store={store}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.HierarchyPaths:\n return <WrappedHierarchyPathView config={config as HierarchyPathsViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.RelationsTable:\n return (\n <WrappedRelationshipsTableView\n config={config as RelationsViewConfig}\n store={store}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.Relations:\n return <WrappedProfileRelationsView config={config as RelationsViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.Attributes:\n return <WrappedProfileAttributesView className={className} config={config as AttributeViewConfig} />;\n case ViewsFactory.ViewTypes.SingleAttribute:\n return (\n <WrappedProfileSingleAttributeView\n config={config as SingleAttributeViewConfig}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.AttributeTable:\n return (\n <WrappedProfileTableAttributeView\n config={config as SingleAttributeViewConfig}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.Map:\n return (\n <WrappedEntityMapView\n config={config as EntityMapViewConfig}\n isFullscreen={isFullscreen}\n onToggleFullscreen={onToggleFullscreen}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.Custom:\n return <WrappedCustomView config={config as CustomActionViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.ImageAttribute:\n return <WrappedImageAttributeView config={config as ImageAttributeViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.PotentialMatches:\n return (\n <WrappedProfilePotentialMatchesView\n config={config as ProfilePotentialMatchesViewConfig}\n className={className}\n />\n );\n }\n };\n static getComponent = (props: ViewComponentProps) => {\n return (\n ViewsFactory.getComponentBy('class', props) ||\n ViewsFactory.getComponentBy('react-class', props) || <WrappedStubView className={props.className} />\n );\n };\n}\n\nexport default ViewsFactory;\n","import React from 'react';\nimport classnames from 'classnames';\nimport {BasicView} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst StubView = ({className}: Props) => {\n const styles = useStyles();\n return (\n <BasicView className={classnames(styles.stubView, 'viewDraggableHandle', className)}>NOT IMPLEMENTED</BasicView>\n );\n};\n\nexport {StubView};\n","import React from 'react';\nimport {SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {SingleAttributeContext} from './contexts/SingleAttributeContext';\nimport {SingleAttributeView} from './components/SingleAttributeView/SingleAttributeView';\nimport {useSingleAttribute} from './hooks/useSingleAttribute';\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileSingleAttributeView = ({className, config}: Props) => {\n const singleAttribute = useSingleAttribute(config);\n\n return (\n <SingleAttributeContext.Provider value={singleAttribute}>\n <SingleAttributeView config={config} className={className} />\n </SingleAttributeContext.Provider>\n );\n};\n","import {useState, useMemo, useCallback} from 'react';\nimport {SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {useSingleAttributeLoader} from '../../hooks/useSingleAttributeLoader';\n\nexport const useSingleAttribute = (config: SingleAttributeViewConfig) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [page, setPage] = useState(0);\n const [showInactive, setShowInactive] = useState(false);\n const params = useMemo(() => ({page, searchQuery, showInactive}), [page, searchQuery, showInactive]);\n const attribute = useSingleAttributeLoader(config, params);\n const toggleShowInactive = useCallback(() => {\n setPage(0);\n setShowInactive((showInactive) => !showInactive);\n }, []);\n\n return {\n setSearchQuery,\n searchQuery,\n setPage,\n page,\n toggleShowInactive,\n showInactive,\n ...attribute\n };\n};\n","import React from 'react';\nimport {TableAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {TableAttributeContext} from './contexts/TableAttributeContext';\nimport {useTableAttribute} from './hooks/useTableAttribute';\nimport {TableAttributeView} from './components/TableAttributeView/TableAttributeView';\n\ntype Props = {\n config: TableAttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileTableAttributeView = ({config, className}: Props) => {\n const tableAttribute = useTableAttribute(config);\n\n return (\n <TableAttributeContext.Provider value={tableAttribute}>\n {config && <TableAttributeView config={config} className={className} />}\n </TableAttributeContext.Provider>\n );\n};\n","import {useMemo, useReducer} from 'react';\nimport {reject, isNil, pipe, not, prop} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n ComplexAttributeValue,\n findAttributeTypeByUri,\n isComplexAttribute,\n SingleAttributeViewConfig\n} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {useActions} from '@reltio/components';\nimport reducer, {actions} from './reducer';\nimport {getColumnsData} from '../helpers/tableAttributeHelpers';\nimport {useSingleAttributeLoader} from '../../hooks/useSingleAttributeLoader';\nimport {buildMDMFilters} from './helpers';\n\nconst DEFAULT_COUNT_COLUMN = 5;\n\nexport const useTableAttribute = (config: SingleAttributeViewConfig) => {\n const {attributeUri} = config;\n const metadata = useSelector(mdm.selectors.getMetadata);\n const attributeType = useMemo(() => findAttributeTypeByUri(metadata, attributeUri), [metadata, attributeUri]);\n const allColumnsData = useMemo(\n () => (attributeType ? getColumnsData(metadata, attributeType) : []),\n [metadata, attributeType]\n );\n const initialState = useMemo(\n () => ({\n searchQuery: '',\n filters: null,\n sorting: undefined,\n visibleColumns: allColumnsData\n .filter(pipe(prop('dataTypeDefinition'), isComplexAttribute, not))\n .map(({id}) => id)\n .slice(0, DEFAULT_COUNT_COLUMN),\n page: 0\n }),\n [allColumnsData]\n );\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n const {searchQuery, filters, sorting, page} = state;\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode);\n\n const requestFilters = useMemo(() => {\n const mdmFilters = buildMDMFilters(allColumnsData, filters);\n return mdmFilters.length ? mdmFilters : null;\n }, [filters, allColumnsData]);\n\n const params = useMemo(\n () => reject(isNil, {filters: requestFilters, page, sorting, searchQuery}),\n [requestFilters, page, sorting, searchQuery]\n );\n const {changeSearchQuery, changePage, toggleSort, changeFilter, toggleFilters, changeColumns} = useActions({\n actions,\n dispatch\n });\n const attribute = useSingleAttributeLoader<ComplexAttributeValue>(config, params);\n const showTable = Boolean(\n (attribute?.values?.length || requestFilters || searchQuery || isEditableMode) &&\n attributeType &&\n !attributeType.hidden\n );\n return {\n ...state,\n setSearchQuery: changeSearchQuery,\n setPage: changePage,\n onSort: toggleSort,\n onFilter: changeFilter,\n onToggleFilters: toggleFilters,\n onChangeColumns: changeColumns,\n showTable,\n allColumnsData,\n ...attribute\n };\n};\n","import {propEq} from 'ramda';\nimport {Maybe} from '@reltio/mdm-sdk';\nimport {ColumnData, ColumnFilter, columnFilterToMdmFilter} from '@reltio/components';\n\nexport const buildMDMFilters = (columnsData: ColumnData[], filters: Record<string, ColumnFilter>) =>\n Maybe.fromNull<Record<string, ColumnFilter>>(filters)\n .map<ReturnType<typeof columnFilterToMdmFilter>[]>((filters) =>\n Object.entries(filters).map(([columnId, columnFilter]) => {\n const columnData = columnsData.find(propEq('id', columnId));\n return columnFilterToMdmFilter(columnData, columnFilter);\n })\n )\n .orSome([]);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {RelationsViewConfig, parseRelationsConfig, Metadata} from '@reltio/mdm-sdk';\nimport RelationsView from './components/RelationsView';\nimport {RelationsViewStateContext} from './contexts/RelationsViewStateContext';\nimport useRelationsState from './hooks/useRelationsState';\n\ntype Props = {\n config: RelationsViewConfig;\n onResize?: (width: number, height: number) => void;\n className?: string;\n};\n\nexport const ProfileRelationsView = ({config, className}: Props) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const parsedConfig = parseRelationsConfig(metadata, config);\n const relationsState = useRelationsState(parsedConfig);\n return (\n <RelationsViewStateContext.Provider value={relationsState}>\n <RelationsView config={parsedConfig} className={className} />\n </RelationsViewStateContext.Provider>\n );\n};\n","import React, {useCallback, useEffect} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {BasicView, ReactSortableTree} from '@reltio/components';\nimport mdmModule, {ui} from '@reltio/mdm-module';\nimport {Typography as Typography} from '@material-ui/core';\nimport {useLoadPaths} from './hooks/useLoadPaths';\nimport {Node} from './Node';\nimport {useStyles} from './styles';\nimport {ConfigContext} from './ConfigContext';\nimport {HierarchyPathsViewConfig} from '@reltio/mdm-sdk';\nimport {getNodeKey} from './helpers';\nimport {theme} from './theme';\nimport HierarchyPathsHeader from './HierarchyPathsHeader';\nimport {useDynamicNodesHeights} from './hooks/useDynamicNodesHeights';\n\ntype Props = {\n className?: string;\n config: HierarchyPathsViewConfig;\n};\n\nexport const HierarchyPathsView = ({config, className}: Props) => {\n const {id, caption, graph} = config;\n const graphType = graph?.type;\n\n const styles = useStyles();\n const dispatch = useDispatch();\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n\n const {treeData, setTreeData, errorMessage} = useLoadPaths(entityUri, graphType);\n const {onResize, getRowHeight, clearHeightsCache} = useDynamicNodesHeights();\n\n const openGraph = useCallback(() => {\n dispatch(ui.actions.openGraph({viewId: id, graphType, entityUri}));\n }, [dispatch, id, graphType, entityUri]);\n\n const generateNodeProps = useCallback(\n (rowInfo) => ({\n title: (\n <ReactResizeDetector\n handleHeight\n refreshMode=\"debounce\"\n refreshRate={100}\n onResize={onResize(rowInfo.node)}\n >\n <Node node={rowInfo.node} />\n </ReactResizeDetector>\n )\n }),\n [onResize]\n );\n\n useEffect(() => {\n clearHeightsCache();\n }, [clearHeightsCache, entityUri]);\n\n return (\n <BasicView className={className}>\n <HierarchyPathsHeader onGraphOpen={openGraph} title={caption} />\n <ConfigContext.Provider value={config}>\n <div className={styles.treeContainer}>\n <div className={styles.tree}>\n {!errorMessage ? (\n <ReactSortableTree\n isVirtualized={false}\n treeData={treeData}\n canDrag={false}\n theme={theme}\n generateNodeProps={generateNodeProps}\n onChange={setTreeData}\n getNodeKey={getNodeKey}\n rowHeight={getRowHeight}\n />\n ) : (\n <Typography className={styles.errorMessage}>{errorMessage}</Typography>\n )}\n </div>\n </div>\n </ConfigContext.Provider>\n </BasicView>\n );\n};\n","import React, {useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport mdm from '@reltio/mdm-module';\nimport FullscreenIcon from '@material-ui/icons/Fullscreen';\nimport FullscreenExitIcon from '@material-ui/icons/FullscreenExit';\nimport {BasicView, LinearLoadIndicator, ReltioMap} from '@reltio/components';\nimport {SmallIconButton} from '@reltio/components';\n\nimport {AttributeViewConfig} from '@reltio/mdm-sdk';\nimport {useMarkers} from './useMarkers';\nimport useStyles from './styles';\n\ntype EntityMapViewProps = {\n config: AttributeViewConfig;\n className?: string;\n isFullscreen: boolean;\n onToggleFullscreen: (id: string) => void;\n};\n\nexport const EntityMapView = ({config, isFullscreen, onToggleFullscreen, className}: EntityMapViewProps) => {\n const styles = useStyles();\n const metadata = useSelector(mdm.selectors.getMetadata);\n const entity = useSelector(mdm.selectors.getEntity);\n const mapKey = useSelector(mdm.selectors.getGoogleMapKey);\n const {markers, loading} = useMarkers(entity, metadata, mapKey);\n const loadingElement = useMemo(\n () => (\n <div className={styles.fullHeight}>\n <LinearLoadIndicator />\n </div>\n ),\n [styles]\n );\n\n const defaultCenter = useMemo(() => ({lat: 0, lng: 0}), []);\n const mapOptions = useMemo(() => ({mapTypeControl: true}), []);\n\n return (\n mapKey && (\n <BasicView className={classnames(styles.root, className)}>\n {loading && <LinearLoadIndicator />}\n <SmallIconButton\n size=\"S\"\n icon={isFullscreen ? FullscreenExitIcon : FullscreenIcon}\n onClick={() => onToggleFullscreen(config.id)}\n className={styles.fullscreenBtn}\n />\n\n <ReltioMap\n loadingElement={loadingElement}\n defaultZoom={1}\n defaultCenter={defaultCenter}\n markers={markers}\n mapContainerClassName={styles.fullHeight}\n mapKey={mapKey}\n mapOptions={mapOptions}\n />\n </BasicView>\n )\n );\n};\n\nexport default EntityMapView;\n","import React, {memo, Suspense} from 'react';\nimport classnames from 'classnames';\nimport ViewsFactory, {ViewComponentProps} from './ViewsFactory';\nimport {useStyles} from './styles';\n\nconst Fallback = () => null;\n\nconst ViewComponent = memo(({config, store, isFullscreen, isAutosize, onToggleFullscreen}: ViewComponentProps) => {\n const styles = useStyles();\n return (\n <Suspense fallback={<Fallback />}>\n {ViewsFactory.getComponent({\n config,\n store,\n className: classnames(styles.component, {[styles.fullHeight]: !isAutosize}),\n isFullscreen,\n onToggleFullscreen\n })}\n </Suspense>\n );\n});\n\nViewComponent.displayName = 'ViewComponent';\n\nexport {ViewComponent};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {basicView: Record<string, string | number>}) => ({\n item: theme.basicView,\n fixedSizeContainer: {\n height: '100%'\n }\n}));\n","import React, {ReactChildren, ReactNode, useContext} from 'react';\nimport {omit} from 'ramda';\nimport {ReactReduxContext, useSelector} from 'react-redux';\nimport {ReactGridLayoutItem} from '@reltio/components';\nimport {CustomScript, CustomScriptPlatform, ProfileViewConfig, ProfileViewTypes} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {ViewComponent} from '../views/ViewComponent';\nimport ViewsFactory from '../views/ViewsFactory';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n layoutItemConfig: ReactGridLayoutItem;\n views: ProfileViewConfig[];\n className?: string;\n children?: ReactChildren;\n style?: Record<string, unknown>;\n isFullscreen: boolean;\n onToggleFullscreen: (id: string) => void;\n AutosizeComponent?: ReactNode;\n};\n\nconst omittingProps = ['onConfigChanged', 'onRemove'];\n\nconst getViewTypeByClass = (className: string) =>\n Object.entries(ProfileViewTypes).find(([_, value]) => className === value)?.[0];\n\nconst ProfileLayoutItem = ({\n layoutItemConfig,\n views,\n className,\n children: ResizeComponent,\n style,\n isFullscreen,\n onToggleFullscreen,\n AutosizeComponent,\n ...props\n}: Props) => {\n const config = views.find(({id}) => layoutItemConfig.i === id);\n const styles = useStyles();\n const mapKey = useSelector(mdm.selectors.getGoogleMapKey);\n\n const {store} = useContext(ReactReduxContext);\n if (!config) {\n return null;\n }\n const isCustomView = config.class === ViewsFactory.ViewTypes.Custom;\n if (isCustomView && (config?.action as CustomScript)?.platform === CustomScriptPlatform.CLASSIC) {\n return null;\n }\n\n const isMapView = config.class === ViewsFactory.ViewTypes.Map;\n if (isMapView && !mapKey) {\n return null;\n }\n\n const reltioClass = getViewTypeByClass(config.class);\n return (\n <div\n {...omit(omittingProps, props)}\n data-reltio-id={config.id}\n data-reltio-class={reltioClass || ''}\n style={style}\n className={classnames(className, {[styles.item]: !isCustomView})}\n >\n <div className={classnames({[styles.fixedSizeContainer]: !AutosizeComponent})}>\n {AutosizeComponent}\n <ViewComponent\n store={store}\n config={config}\n isFullscreen={isFullscreen}\n onToggleFullscreen={onToggleFullscreen}\n isAutosize={Boolean(AutosizeComponent)}\n />\n </div>\n {ResizeComponent}\n </div>\n );\n};\n\nexport {ProfileLayoutItem};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst DEFAULT_MIN_WIDTH = 1024;\n\ntype Props = {\n maxWidth?: number;\n scrollbarWidth?: number;\n};\n\nexport const useStyles = makeStyles({\n scrollWrapper: {\n flexGrow: 1,\n overflow: 'auto'\n },\n scrollableContent: ({maxWidth, scrollbarWidth}: Props) => ({\n minWidth: maxWidth && maxWidth < DEFAULT_MIN_WIDTH ? maxWidth - scrollbarWidth : DEFAULT_MIN_WIDTH\n })\n});\n","import React, {useEffect, useMemo, useRef} from 'react';\nimport {PopupBoundariesContext, ReltioGridLayout} from '@reltio/components';\nimport {ProfileViewConfig} from '@reltio/mdm-sdk';\nimport {ProfileLayoutItem} from '../ProfileLayoutItem';\nimport {Layout} from '../../types';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n views: ProfileViewConfig[];\n layout?: Layout;\n entityUri?: string;\n maxWidth?: number;\n onLayoutChanged: (layout: Layout) => void;\n};\n\nconst calcScrollbarWidth = (element: HTMLDivElement) => (element ? element.offsetWidth - element.clientWidth : 0);\n\nconst ProfileLayout = ({views, layout, entityUri, maxWidth, onLayoutChanged}: Props) => {\n const scrollWrapperRef = useRef<HTMLDivElement>();\n const scrollbarWidth = calcScrollbarWidth(scrollWrapperRef.current);\n const boundariesElement = scrollWrapperRef.current;\n\n const styles = useStyles({maxWidth, scrollbarWidth});\n\n const popupBoundariesValue = useMemo(\n () => ({element: boundariesElement, priority: ['left', 'right', 'top', 'bottom']}),\n [boundariesElement]\n );\n\n useEffect(() => {\n if (scrollWrapperRef.current) {\n scrollWrapperRef.current.scrollTop = 0;\n }\n }, [entityUri]);\n\n return (\n <div ref={scrollWrapperRef} className={styles.scrollWrapper}>\n <div className={styles.scrollableContent}>\n <PopupBoundariesContext.Provider value={popupBoundariesValue}>\n <ReltioGridLayout\n LayoutItem={ProfileLayoutItem}\n views={views}\n layout={layout}\n onLayoutChanged={onLayoutChanged}\n draggableHandle=\".viewDraggableHandle\"\n />\n </PopupBoundariesContext.Provider>\n </div>\n </div>\n );\n};\n\nexport {ProfileLayout};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n closeIcon: {\n paddingRight: '12px',\n boxSizing: 'content-box',\n '& path': {\n fill: '#fff'\n }\n },\n snackbar: {\n '& > div': {\n flexWrap: 'nowrap',\n alignItems: 'baseline'\n }\n }\n}));\n","import {Snackbar as Snackbar} from '@material-ui/core';\nimport {Portal as Portal} from '@material-ui/core';\nimport React, {useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport {ConfirmationDialog, SmallIconButton} from '@reltio/components';\nimport {NotificationItem, Action} from './types';\nimport {useStyles} from './styles';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {ui as mdmModuleUi} from '@reltio/mdm-module';\n\ntype Props = {\n notification: NotificationItem;\n};\n\nconst AUTO_HIDE_DURATION = 5000;\n\nexport const Notification = ({notification}: Props) => {\n const styles = useStyles({});\n const dispatch = useDispatch();\n const autoCloseInterval: number = useSelector(mdmModule.selectors.getAutoCloseInterval);\n const autoHideDuration =\n notification.autoHideDuration || (autoCloseInterval && autoCloseInterval * 1000) || AUTO_HIDE_DURATION;\n const [action, setAction] = useState<Action>();\n const [show, setShow] = useState(true);\n const closeSnackbar = useCallback(\n (_e?: unknown, reason?: string) => {\n if (reason !== 'clickaway') {\n dispatch(mdmModuleUi.actions.closeNotification(notification.id));\n setShow(false);\n }\n },\n [notification]\n );\n const onDiscard = useCallback(() => {\n action.cancelAction && dispatch(action.cancelAction);\n setAction(undefined);\n }, [action]);\n const onConfirm = useCallback(() => {\n dispatch(action.applyAction);\n setAction(undefined);\n dispatch(mdmModuleUi.actions.closeNotification(notification.id));\n }, [action, notification]);\n\n const actions = (\n <>\n {notification.actions.map((action) => (\n <Button\n key={action.label}\n color=\"primary\"\n size=\"small\"\n onClick={() => {\n if (action.needConfirmation) {\n setAction(action);\n } else {\n dispatch(action.applyAction);\n }\n setShow(false);\n }}\n >\n {action.label}\n </Button>\n ))}\n </>\n );\n const message = (\n <>\n <SmallIconButton className={styles.closeIcon} size=\"S\" icon={CloseIcon} onClick={closeSnackbar} />\n {notification.text}\n </>\n );\n\n return (\n <>\n <Portal container={document.body}>\n <Snackbar\n autoHideDuration={autoHideDuration}\n open={show}\n classes={{root: styles.snackbar}}\n action={actions}\n onClose={closeSnackbar}\n anchorOrigin={{vertical: 'bottom', horizontal: 'center'}}\n message={message}\n />\n </Portal>\n <ConfirmationDialog\n open={!!action}\n title={action?.confirmationText}\n content={action?.confirmationDescription}\n onSave={onConfirm}\n onDiscard={onDiscard}\n saveCaption={i18n.text('Proceed')}\n discardCaption={i18n.text('Cancel')}\n />\n </>\n );\n};\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {NotificationItem} from './types';\nimport {Notification} from './Notification';\n\nexport const Notifications = () => {\n const notifications: NotificationItem[] = useSelector(mdm.selectors.getNotifications);\n if (!notifications) return null;\n return (\n <>\n {notifications.slice(-1).map((n) => (\n <Notification key={n.id} notification={n} />\n ))}\n </>\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: \"19\",\n height: \"17\",\n viewBox: \"0 0 19 17\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M14 17v2H4v-2h10zm6-4v2H4v-2l12.884.001H17l.116-.002L20 13zm-8.457-2H4V9h5.82a8.465 8.465 0 001.723 2zM9.139 6.178l-.289.733.035.088L4 7V5l5.713-.002c-.22.375-.412.768-.574 1.18zM17 2.82a6.451 6.451 0 00-6 4.09 6.451 6.451 0 006 4.092 6.451 6.451 0 006-4.091 6.451 6.451 0 00-6-4.091zm0 6.815a2.728 2.728 0 010-5.455 2.728 2.728 0 010 5.455zm0-4.365c-.905 0-1.636.73-1.636 1.636 0 .906.73 1.637 1.636 1.637.905 0 1.636-.731 1.636-1.637 0-.905-.73-1.636-1.636-1.636z\",\n id: \"svg1467685497a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"g\", {\n transform: \"translate(-4 -2.5)\"\n}, React.createElement(\"mask\", {\n id: \"svg1467685497b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg1467685497a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg1467685497b)\",\n d: \"M0 0h24v24H0z\"\n})))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M20.222 6C21.21 6 22 6.8 22 7.778v12.444C22 21.2 21.209 22 20.222 22H7.778C6.79 22 6 21.2 6 20.222V7.778C6 6.8 6.791 6 7.778 6h12.444zM20 8H8v12h12V8zM4 18H2V4c0-1.1.9-2 2-2h14v2H4v14z\",\n id: \"svg2383396984a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg2383396984b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2383396984a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2383396984b)\",\n d: \"M0 0h24v24H0z\"\n}))));","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n editingButtons: {\n display: 'flex',\n '& button + button': {\n minWidth: '88px',\n marginLeft: '8px'\n }\n },\n searchResults: {\n width: '150px',\n height: '25px',\n backgroundColor: '#ccc'\n },\n comments: {\n display: 'flex',\n justifyContent: 'flex-end',\n marginTop: '10px'\n }\n});\n","import {useCallback, useMemo} from 'react';\nimport {\n includes,\n pipe,\n isNil,\n propOr,\n filter,\n map,\n prop,\n cond,\n identity,\n omit,\n find,\n complement,\n when,\n either,\n pick,\n always,\n T\n} from 'ramda';\nimport {\n BaseCloneAction,\n CloneAction,\n Entity,\n getEntityType,\n isReference,\n isRelationWithEntityType,\n getRelationTypeUriFromAttrType\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\n\ntype Props = {\n cloneAction?: CloneAction[];\n onCloneDiscard: () => void;\n};\n\nexport const useCloneAction = ({cloneAction: cloneActionProp, onCloneDiscard}: Props) => {\n const entity: Entity = useSelector(mdm.selectors.getEntityWithoutDiff);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const dispatch = useDispatch();\n const entityTypeUri = entity?.type;\n const relationTypes = metadata.relationTypes;\n const isRelationSuitableForEntityType = useCallback(isRelationWithEntityType(metadata, entityTypeUri), [\n metadata,\n entityTypeUri\n ]);\n const entityType = getEntityType(metadata, entityTypeUri);\n const cloneAction = useMemo<BaseCloneAction>(\n () =>\n when(\n complement(isNil),\n pipe(\n find(pipe(propOr([], 'entityTypeUris'), either(includes(entityTypeUri), includes('*')))),\n when(complement(isNil), omit(['entityTypeUris']))\n )\n )(cloneActionProp),\n [cloneActionProp, entityTypeUri]\n );\n const onClone = useCallback(() => {\n if (cloneAction) {\n const modifiedRelationTypes: string[] = pipe(\n prop('relationshipTypesToCopy'),\n cond([\n [\n isNil,\n pipe(\n always(entityType),\n propOr([], 'attributes'),\n filter(isReference),\n map(getRelationTypeUriFromAttrType)\n )\n ],\n [\n includes('*'),\n pipe(always(relationTypes || []), map(prop('uri')), filter(isRelationSuitableForEntityType))\n ],\n [T, identity]\n ])\n )(cloneAction);\n dispatch(\n profile.entity.actions.entityCloneRequested({\n data: {\n ...pick(['attributeReplacementMapping'], cloneAction),\n relationshipTypesToCopy: modifiedRelationTypes\n },\n entityUri: entity.uri\n })\n );\n }\n onCloneDiscard();\n }, [cloneAction, onCloneDiscard, entityType, relationTypes, entity.uri, isRelationSuitableForEntityType]);\n return cloneAction ? onClone : undefined;\n};\n","import React, {useCallback, useMemo, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {Box as Box} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport {SvgIcon as SvgIcon} from '@material-ui/core';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CreateIcon from '@material-ui/icons/Create';\n\nimport {\n getEntityType,\n Entity,\n checkMetadataPermission,\n isDataTenantEntity,\n isTempUri,\n MetadataPermissions,\n ModeTypes,\n Mode,\n isSuggestMode,\n isEditableMode,\n CollaborationObjectTypes,\n createRelatedObjectUris,\n Operation,\n ProfileBandConfig\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {\n ProfileBand,\n ModeSwitcherSelect,\n CommentsContainer,\n COMMENTS_CONTAINER_VISIBILITY_AREA,\n ProfileBandNavigation,\n ProfileBandHistory,\n ConfirmationDialog\n} from '@reltio/components';\n\nimport SuggestSvg from './suggest.svg';\nimport CopySvg from './copy.svg';\n\nimport {useStyles} from './styles';\nimport {useCloneAction} from './hooks/useCloneAction';\n\ntype Props = {\n className?: string;\n profileBandConfig?: ProfileBandConfig;\n};\n\nconst SuggestIcon = (props) => (\n <SvgIcon {...props}>\n <SuggestSvg />\n </SvgIcon>\n);\n\nconst CopyIcon = (props) => (\n <SvgIcon {...props}>\n <CopySvg />\n </SvgIcon>\n);\n\ntype Group = {\n label: string;\n value: string;\n description: string;\n icon: React.ElementType;\n permission: string;\n onClick?: (value: string) => void;\n};\n\nconst filterGroupByPermissions = <T extends Group>(\n group: T[],\n entityType,\n isTempEntity: boolean,\n isWorkflowEnabled?: boolean,\n canStartProcessInstanceSearchQuery?: boolean\n): T[] =>\n group.filter(({value, permission}) => {\n if (isTempEntity && !isEditableMode(value)) return false;\n if ((!isWorkflowEnabled || !canStartProcessInstanceSearchQuery) && isSuggestMode(value)) return false;\n return checkMetadataPermission(permission, entityType);\n });\n\nconst hasOnlyReadPermission = (entityType) => {\n return (\n checkMetadataPermission(MetadataPermissions.READ, entityType) &&\n !checkMetadataPermission(MetadataPermissions.UPDATE, entityType) &&\n !checkMetadataPermission(MetadataPermissions.DELETE, entityType) &&\n !checkMetadataPermission(MetadataPermissions.INITIATE_CHANGE_REQUEST, entityType)\n );\n};\n\nexport const PerspectiveProfileBand = ({className, profileBandConfig}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n const canStartProcessInstanceSearchQuery = useSelector(mdm.selectors.getCanUserStartProcessFromQuery);\n const entity = useSelector(mdm.selectors.getEntityWithoutDiff) as Entity;\n const modifiedEntity = useSelector((state) => mdm.selectors.getModifiedEntity(state, entity.uri));\n const metadata = useSelector(mdm.selectors.getMetadata);\n const isWorkflowEnabled = useSelector(mdm.selectors.isWorkflowEnabled) as boolean;\n const mode = useSelector(mdm.selectors.getMode) as Mode;\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode) as boolean;\n const isViewMode = useSelector(mdm.selectors.getIsViewMode) as boolean;\n const isHistoryModeEnabled = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const profileOperation = useSelector(mdm.selectors.getProfileOperation);\n const entityTypeUri = entity?.type;\n const entityType = useMemo(() => getEntityType(metadata, entityTypeUri), [entityTypeUri, metadata]);\n const isOperationSaving = profileOperation === Operation.Saving;\n const isOperationCloning = profileOperation === Operation.Cloning;\n const isDisabledButtons = isOperationCloning || isOperationSaving;\n const [openCloneConfirmationDialog, setOpenCloneConfirmationDialog] = useState(false);\n const onCloneDiscard = useCallback(() => {\n setOpenCloneConfirmationDialog(false);\n }, []);\n const onClone = useCloneAction({cloneAction: profileBandConfig?.cloneAction, onCloneDiscard});\n const OPTIONS_GROUP = useMemo(\n () => [\n {\n label: i18n.text('Editing'),\n value: ModeTypes.EDITING,\n description: i18n.text('Edit profile directly'),\n icon: CreateIcon,\n permission: 'UPDATE'\n },\n {\n label: i18n.text('Suggesting'),\n value: ModeTypes.SUGGESTING,\n description: i18n.text('Suggest changes and initiate a workflow review'),\n icon: SuggestIcon,\n permission: 'INITIATE_CHANGE_REQUEST'\n },\n {\n label: i18n.text('Viewing'),\n value: ModeTypes.VIEWING,\n description: i18n.text('Read or print profile'),\n icon: VisibilityIcon,\n permission: 'READ'\n }\n ],\n []\n );\n\n const BUTTONS_GROUP = useMemo(\n () => [\n ...(onClone\n ? [\n {\n label: i18n.text('Clone'),\n value: 'Clone',\n description: i18n.text('Create a copy of the profile'),\n icon: CopyIcon,\n onClick: () => setOpenCloneConfirmationDialog(true),\n permission: 'CREATE'\n }\n ]\n : []),\n {\n label: i18n.text('Delete'),\n value: 'Delete',\n description: i18n.text('Permanently delete profile'),\n icon: DeleteIcon,\n onClick: () => {\n const conf = window.confirm(i18n.text('Are you sure you want to delete this?'));\n if (conf) {\n dispatch(profile.entity.actions.entityRemoveRequested({entityUri: entity.uri}));\n }\n },\n permission: 'DELETE'\n }\n ],\n [dispatch, entity.uri, onClone]\n );\n\n const shouldShowSelect = !isHistoryModeEnabled && !isDataTenantEntity(entity) && !hasOnlyReadPermission(entityType);\n\n const isTempEntity = isTempUri(entity?.uri);\n\n const accessibleOptionsGroup = useMemo(() => {\n return filterGroupByPermissions(\n OPTIONS_GROUP,\n entityType,\n isTempEntity,\n isWorkflowEnabled,\n canStartProcessInstanceSearchQuery\n );\n }, [OPTIONS_GROUP, entityType, isWorkflowEnabled, canStartProcessInstanceSearchQuery, isTempEntity]);\n const accessibleButtonsGroup = useMemo(() => {\n return filterGroupByPermissions(\n BUTTONS_GROUP,\n entityType,\n isTempEntity,\n isWorkflowEnabled,\n canStartProcessInstanceSearchQuery\n );\n }, [BUTTONS_GROUP, entityType, isWorkflowEnabled, canStartProcessInstanceSearchQuery, isTempEntity]);\n\n const handleChange = useCallback(\n (value: Mode) => {\n dispatch(profile.mode.actions.modeUpdated(value));\n },\n [dispatch]\n );\n\n const onCancel = useCallback(() => {\n dispatch(profile.mode.actions.modeCancelEditing());\n }, [dispatch]);\n\n const handleSave = useCallback(() => {\n dispatch(profile.actions.saveProfile());\n }, [dispatch]);\n\n return (\n <>\n <ProfileBand\n className={classnames(className, COMMENTS_CONTAINER_VISIBILITY_AREA)}\n entity={isEditableMode && modifiedEntity ? modifiedEntity : entity}\n >\n <Box display=\"flex\" alignItems=\"center\">\n <Box mr={3}>\n {isEditableMode && (\n <Box className={styles.editingButtons}>\n <Button\n variant=\"outlined\"\n onClick={onCancel}\n data-reltio-id=\"reltio-profile-cancel-editing\"\n disabled={isDisabledButtons}\n >\n {i18n.text('Cancel')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n data-reltio-id=\"reltio-profile-save-profile\"\n onClick={handleSave}\n disabled={isDisabledButtons}\n >\n {isSuggestMode(mode) ? i18n.text('Suggest') : i18n.text('Save')}\n </Button>\n </Box>\n )}\n {isHistoryModeEnabled && isViewMode ? (\n <ProfileBandHistory />\n ) : (\n isViewMode && <ProfileBandNavigation />\n )}\n </Box>\n {shouldShowSelect && (\n <ModeSwitcherSelect\n optionsGroup={accessibleOptionsGroup}\n buttonsGroup={accessibleButtonsGroup}\n value={mode}\n onChange={handleChange}\n disabled={isDisabledButtons}\n />\n )}\n </Box>\n <Box className={styles.comments}>\n <CommentsContainer\n uri={entity.uri}\n relatedObjectUris={createRelatedObjectUris(CollaborationObjectTypes.ENTITY, {\n entityUri: entity.uri\n })}\n objectType={CollaborationObjectTypes.ENTITY}\n />\n </Box>\n </ProfileBand>\n {!!onClone && (\n <ConfirmationDialog\n open={openCloneConfirmationDialog}\n title={i18n.text('Do you want to create a clone of the profile?')}\n content={i18n.text(\n 'Cloning will create a copy of the current profile. You can modify the cloned profile in the next step. Are you sure you want to proceed?'\n )}\n onSave={onClone}\n onDiscard={onCloneDiscard}\n saveCaption={i18n.text('Proceed')}\n discardCaption={i18n.text('Cancel')}\n />\n )}\n </>\n );\n};\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 badge: {\n fontSize: '12px',\n height: '18px',\n minWidth: '18px',\n backgroundColor: '#FF4081',\n color: '#FFF'\n },\n badgePosition: {\n right: '5px'\n }\n});\n","import React, {useContext, VFC} from 'react';\nimport {Badge as Badge} from '@material-ui/core';\nimport {WorkflowTasksContext} from '@reltio/components';\nimport InboxIcon from '@material-ui/icons/Inbox';\nimport {useStyles} from '../../styles';\n\nexport const WorkflowButton: VFC = () => {\n const {total} = useContext(WorkflowTasksContext);\n const styles = useStyles();\n return (\n <Badge\n badgeContent={total}\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <InboxIcon />\n </Badge>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n overflow: 'auto',\n paddingRight: '12px'\n },\n showMoreLink: {\n display: 'flex',\n margin: '16px'\n },\n showMoreIcon: {\n fontSize: '1rem'\n }\n});\n","import React, {useContext, useEffect} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {CollaborationContext, CollaborationItem, EntitiesMapContext, useCommentsEntitiesMap} from '@reltio/components';\nimport {Box as Box} from '@material-ui/core';\nimport {Link as Link} from '@material-ui/core';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport {useStyles} from './styles';\n\nexport const CollaborationList = () => {\n const styles = useStyles();\n const {getComments, comments, pageToken} = useContext(CollaborationContext);\n const entityUri = useSelector(mdm.selectors.getEntityUriWithDataTenant);\n\n useEffect(() => {\n getComments(entityUri);\n }, [getComments, entityUri]);\n\n const handleShowMoreComments = () => {\n getComments(entityUri, pageToken);\n };\n\n const entitiesMap = useCommentsEntitiesMap(comments);\n\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <Box className={styles.wrapper}>\n {comments.map((comment) => {\n const {objectId, relatedObjectUris, objectType, commentId} = comment;\n return (\n <CollaborationItem\n key={commentId}\n uri={objectId}\n relatedObjectUris={relatedObjectUris}\n objectType={objectType}\n comment={comment}\n />\n );\n })}\n {pageToken && (\n <Link\n component=\"button\"\n variant=\"caption\"\n className={styles.showMoreLink}\n onClick={handleShowMoreComments}\n underline=\"none\"\n >\n <KeyboardArrowDownIcon className={styles.showMoreIcon} />\n {i18n.text('Show more')}\n </Link>\n )}\n </Box>\n </EntitiesMapContext.Provider>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n overflow: 'auto',\n position: 'relative',\n height: '100%'\n }\n});\n","import React, {useContext} from 'react';\nimport {LinearLoadIndicator, WorkflowTaskCard, WorkflowTasksContext} from '@reltio/components';\nimport {useStyles} from './styles';\n\nexport const WorkflowList = () => {\n const styles = useStyles();\n const {tasks, loading} = useContext(WorkflowTasksContext);\n\n return (\n <div className={styles.wrapper}>\n {loading && <LinearLoadIndicator />}\n {tasks &&\n tasks.map((task) => {\n return <WorkflowTaskCard key={task.taskId} task={task} />;\n })}\n </div>\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: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M4 17.17L5.17 16H20V4H4v13.17zM20 2c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H6l-4 4V4c0-1.1.9-2 2-2h16zm-3 9H7v2h10v-2zm0-4H7v2h10V7z\",\n id: \"svg2697213709a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"g\", null, React.createElement(\"g\", {\n transform: \"translate(-2 -2)\"\n}, React.createElement(\"mask\", {\n id: \"svg2697213709b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2697213709a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2697213709b)\",\n d: \"M0 0h24v24H0z\"\n}))))));","import React, {useContext, VFC} from 'react';\nimport {Badge as Badge} from '@material-ui/core';\nimport CollaborationIcon from '../../icons/CollaborationIcon.svg';\nimport {CollaborationContext} from '@reltio/components';\nimport {calcTotalCommentItems} from '@reltio/mdm-sdk';\nimport {useStyles} from '../../styles';\n\nexport const CollaborationButton: VFC = () => {\n const {commentsMap} = useContext(CollaborationContext);\n const styles = useStyles();\n return (\n <Badge\n badgeContent={calcTotalCommentItems(commentsMap)}\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <CollaborationIcon />\n </Badge>\n );\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SidePanelEmptyState} from '@reltio/components';\n\nconst WorkflowPanelEmptyState = () => (\n <SidePanelEmptyState\n text={i18n.text('Ready to go with the flow?')}\n secondaryText={i18n.text(\n 'Suggest a change or submit a match review, and we’ll kick off a workflow task to get things going.'\n )}\n />\n);\n\nexport default WorkflowPanelEmptyState;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SidePanelEmptyState} from '@reltio/components';\n\nconst CollaborationPanelEmptyState = () => (\n <SidePanelEmptyState\n text={i18n.text('Care to join the conversation?')}\n secondaryText={i18n.text(\n 'Leave comments for team members anywhere in the Profile page, and we’ll record it here.'\n )}\n />\n);\n\nexport default CollaborationPanelEmptyState;\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 d: \"M14.101 16A5.003 5.003 0 0016 18.987V20H2v-4h12.101zM22 18.987V20v-1.013zM4 17v2h2v-2H4zM16 4v1.013A5.004 5.004 0 0014.101 8H2V4h14zm6 0v1.013V4zM6 7V5H4v2h2zm8 3v4H2v-4h12zM4 11v2h2v-2H4zm12 4v-2h6v2c0 1.3-.84 2.4-2 2.82V22h-2v-4.18c-1.16-.42-2-1.52-2-2.82zm0-6c0-1.3.84-2.4 2-2.82V2h2v4.18c1.16.42 2 1.52 2 2.82v2h-6V9z\",\n fill: \"#000\",\n fillOpacity: \".54\"\n})));","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n display: 'flex',\n flexDirection: 'column'\n },\n itemWrapper: {\n paddingLeft: '19px',\n paddingRight: '19px'\n }\n});\n","import React from 'react';\nimport {CustomActionViewConfig} from '@reltio/mdm-sdk';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {CustomView} from '../../../Sandbox/CustomView';\nimport {useStyles} from './styles';\n\nexport const DBConnectorsList = () => {\n const styles = useStyles();\n const dBConnectorSideViews = useSelector(mdm.selectors.getDBConnectorSideViews) as CustomActionViewConfig[];\n\n return (\n <div className={styles.wrapper}>\n {dBConnectorSideViews.map((sideView) => (\n <CustomView key={sideView.id} config={sideView} className={styles.itemWrapper} />\n ))}\n </div>\n );\n};\n","import React, {useCallback, useContext, useEffect, useState} from 'react';\nimport {pipe, propEq, reject, pluck} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport {\n CollaborationContext,\n SideButtonsPanel,\n SidePanelContentHeader,\n SidePanel,\n WorkflowTasksContext,\n AddWorkflowButton,\n HistoryView,\n HistoryHeader,\n HistoryPanelEmptyState,\n useHistory,\n useHistoryEnabled\n} from '@reltio/components';\nimport {calcTotalCommentItems, Entity, getEntityType, isTempUri, Metadata} from '@reltio/mdm-sdk';\nimport mdm, {HistoryEvent} from '@reltio/mdm-module';\nimport HistoryIcon from '@material-ui/icons/History';\nimport {WorkflowButton} from './components/WorkflowButton/WorkflowButton';\nimport {CollaborationList} from './components/CollaborationList/CollaborationList';\nimport {WorkflowList} from './components/WorkflowList/WorkflowList';\nimport {CollaborationButton} from './components/CollaborationButton/CollaborationButton';\nimport WorkflowPanelEmptyState from './components/WorkflowPanelEmptyState/WorkflowPanelEmptyState';\nimport CollaborationPanelEmptyState from './components/CollaborationPanelEmptyState/CollaborationPanelEmptyState';\nimport ConnectorsIcon from './icons/ConnectorsIcon.svg';\nimport {DBConnectorsList} from './components/DBConnectorsList/DBConnectorsList';\n\nimport {useStyles} from './styles';\n\nconst DEFAULT_PANEL_WIDTH = 480;\nexport enum ActivePanel {\n Workflow,\n Collaboration,\n History,\n DBConnector\n}\nconst getSecondTitle = (total: number): string => {\n if (total) {\n return total === 1 ? i18n.text('${total} item', {total}) : i18n.text('${total} items', {total});\n }\n};\n\ntype Props = {\n commentId?: string;\n};\n\nexport const RightSidePanel = ({commentId}: Props) => {\n const styles = useStyles();\n const isWorkflowSideViewEnabled = useSelector(mdm.selectors.isWorkflowSideViewEnabled) as boolean;\n const isWorkflowEnabled = useSelector(mdm.selectors.isWorkflowEnabled) as boolean;\n const isCollaborationSideViewEnabled = useSelector(mdm.selectors.isCollaborationSideViewEnabled) as boolean;\n const isDBConnectorSideViewEnabled = useSelector(mdm.selectors.isDBConnectorSideViewEnabled) as boolean;\n const isCollaborationEnabled = useSelector(mdm.selectors.isCollaborationEnabled) as boolean;\n const historyEvent: HistoryEvent = useSelector(mdm.selectors.getHistoryEvent);\n const metadata: Metadata = useSelector(mdm.selectors.getMetadata);\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n\n const workflowTasksContext = useContext(WorkflowTasksContext);\n const collaborationContext = useContext(CollaborationContext);\n\n const [active, setActive] = useState<ActivePanel>(commentId ? ActivePanel.Collaboration : null);\n const toggleActive = useCallback((newId: ActivePanel): void => {\n setActive((active) => (active === newId ? null : newId));\n }, []);\n const resetActive = useCallback((): void => {\n setActive(null);\n }, []);\n const isOpen = active !== null;\n const isHistoryTabActive = active === ActivePanel.History;\n const {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({isHistoryTabActive, entity});\n\n const {historyFilter, onApplyFilter, isLoading, historicUris, historyWithTotal, canLoadMore, onLoadMore} =\n useHistory({entity, enabled: isHistoryEnabled});\n\n const enabledWorkflowButton = isWorkflowSideViewEnabled && isWorkflowEnabled && !isTempUri(entity?.uri);\n const enabledCollaborationButton = isCollaborationSideViewEnabled && isCollaborationEnabled;\n const collaborationTotal = calcTotalCommentItems(collaborationContext?.commentsMap);\n\n const elements = [\n {\n buttonProps: {\n id: ActivePanel.Workflow,\n icon: WorkflowButton,\n tooltipTitle: i18n.text('Workflow')\n },\n content: workflowTasksContext?.total ? <WorkflowList /> : <WorkflowPanelEmptyState />,\n headerProps: {\n mainTitle: i18n.text('Workflow'),\n secondTitle: getSecondTitle(workflowTasksContext?.total),\n rightContent: <AddWorkflowButton />\n },\n hidden: !enabledWorkflowButton\n },\n {\n buttonProps: {\n id: ActivePanel.Collaboration,\n icon: CollaborationButton,\n tooltipTitle: i18n.text('Collaboration')\n },\n content: collaborationTotal ? <CollaborationList /> : <CollaborationPanelEmptyState />,\n headerProps: {\n mainTitle: i18n.text('Collaboration'),\n secondTitle: getSecondTitle(collaborationTotal)\n },\n hidden: !enabledCollaborationButton\n },\n {\n buttonProps: {\n id: ActivePanel.History,\n icon: HistoryIcon,\n tooltipTitle: i18n.text('History')\n },\n content: isProfilePersisted ? (\n <HistoryView\n isLoading={isLoading}\n historyWithTotal={historyWithTotal}\n contributorsUris={historicUris}\n entityUri={entity?.uri}\n historyEvent={historyEvent}\n onLoadMore={onLoadMore}\n canLoadMore={canLoadMore}\n />\n ) : (\n <HistoryPanelEmptyState />\n ),\n headerProps: {\n content: (\n <HistoryHeader\n total={isProfilePersisted ? (historicUris?.length || 0) + 1 : undefined}\n entityType={getEntityType(metadata, entity?.type)}\n filter={historyFilter}\n onApplyFilter={onApplyFilter}\n />\n )\n }\n },\n {\n buttonProps: {\n id: ActivePanel.DBConnector,\n icon: ConnectorsIcon,\n tooltipTitle: i18n.text('D&B Connector')\n },\n content: <DBConnectorsList />,\n headerProps: {\n mainTitle: i18n.text('D&B Connector')\n },\n hidden: !isDBConnectorSideViewEnabled\n }\n ];\n\n const visibleElements = reject(propEq('hidden', true))(elements);\n\n useEffect(() => {\n if (elements[active]?.hidden) {\n resetActive();\n }\n }, [active, elements, resetActive, visibleElements]);\n\n return (\n <div className={styles.wrapper}>\n <SidePanel open={isOpen} width={DEFAULT_PANEL_WIDTH}>\n {!elements[active]?.hidden && (\n <>\n <SidePanelContentHeader {...elements[active]?.headerProps} onClose={resetActive} />\n {elements[active]?.content}\n </>\n )}\n </SidePanel>\n <SideButtonsPanel\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(elements)}\n onButtonClick={toggleActive}\n activeIndexId={active}\n />\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst accordionSummaryHeight = '48px';\nconst defaultBorderStyle = '1px solid rgba(0, 0, 0, .125)';\n\nconst useStyles = makeStyles((theme) => ({\n accordion: {\n borderTop: defaultBorderStyle,\n borderBottom: defaultBorderStyle,\n fontSize: '13px',\n boxShadow: 'none',\n '&:not(:first-child)': {\n borderTop: 0\n },\n '&:before': {\n display: 'none'\n },\n '&$accordionExpanded': {\n margin: 'auto'\n }\n },\n accordionExpanded: {},\n accordionSummary: {\n display: 'flex',\n alignItems: 'center',\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight,\n '&$accordionSummaryExpanded': {\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight\n }\n },\n accordionSummaryHeading: {\n flex: 1,\n fontSize: theme.typography.pxToRem(13),\n fontWeight: theme.typography.fontWeightRegular\n },\n accordionSummaryExpanded: {},\n accordionSummaryContent: {\n display: 'flex',\n alignItems: 'center'\n },\n accordionDetails: {\n maxHeight: '21vh',\n overflow: 'auto',\n paddingTop: 0,\n paddingBottom: 0,\n '& ul': {\n paddingLeft: '23px',\n marginTop: '3px'\n },\n '& li': {\n paddingLeft: '9px',\n paddingBottom: '8px'\n }\n },\n parents: {\n color: theme.palette.text.primary\n },\n errorWrapper: {\n lineHeight: '18px',\n display: 'flex',\n flexDirection: 'column'\n },\n errorTitle: {\n display: 'flex',\n alignItems: 'center'\n },\n attributeTypesPath: {\n color: theme.palette.text.secondary\n },\n goToIcon: {\n marginLeft: '4px'\n },\n errorsAccordion: {\n backgroundColor: '#FFF4F6',\n borderColor: '#FFB8B3'\n },\n errorsAccordionDetails: {\n color: '#DD2C00'\n },\n warningsAccordion: {\n backgroundColor: '#FFF9ED',\n borderColor: '#FFDD91'\n },\n warningsAccordionDetails: {\n color: '#CC7500'\n },\n icon: {\n marginRight: '8px'\n },\n errorIcon: {\n fill: '#FF1744'\n },\n warningIcon: {\n fill: '#F9A825'\n }\n}));\n\nexport default useStyles;\n","import React, {memo, ReactNode, ElementType} from 'react';\nimport classnames from 'classnames';\nimport {Accordion as Accordion} from '@material-ui/core';\nimport {AccordionSummary as AccordionSummary} from '@material-ui/core';\nimport {AccordionDetails as AccordionDetails} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport useStyles from '../styles';\n\nimport {AttributeError} from '@reltio/mdm-sdk';\n\ntype Props = {\n panels: {\n id: string;\n title: string;\n icon: ReactNode;\n items: AttributeError[];\n accordionClassName: string;\n accordionDetailsClassName: string;\n }[];\n expandedPanelId: string;\n onToggle: (id: string) => (e, isExpanded: boolean) => void;\n ErrorComponent: ElementType;\n};\n\nexport const ErrorsPanel = memo(({panels, expandedPanelId, onToggle, ErrorComponent}: Props) => {\n const styles = useStyles();\n\n return panels.length > 0 ? (\n <div>\n {panels.map(({id, icon, title, items, accordionClassName, accordionDetailsClassName}) => (\n <Accordion\n key={id}\n square\n expanded={expandedPanelId === id}\n onChange={onToggle(id)}\n className={accordionClassName}\n classes={{root: styles.accordion, expanded: styles.accordionExpanded}}\n >\n <AccordionSummary\n classes={{\n root: styles.accordionSummary,\n expanded: styles.accordionSummaryExpanded,\n content: styles.accordionSummaryContent\n }}\n expandIcon={<ExpandMoreIcon />}\n >\n {icon}\n <Typography className={styles.accordionSummaryHeading}>{title}</Typography>\n </AccordionSummary>\n <AccordionDetails className={classnames(styles.accordionDetails, accordionDetailsClassName)}>\n <ul>\n {items.map((error, i) => (\n <ErrorComponent key={i} error={error} />\n ))}\n </ul>\n </AccordionDetails>\n </Accordion>\n ))}\n </div>\n ) : null;\n});\n\nErrorsPanel.displayName = 'ErrorsPanel';\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: \"18\",\n height: \"18\",\n viewBox: \"0 0 18 18\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M14.245 12.75c0 .825-.467 1.5-1.045 1.5H4.8c-.583 0-1.05-.675-1.05-1.5v-7.5c0-.832.467-1.5 1.05-1.5h8.4c.578 0 1.05.668 1.05 1.5l-.005 7.5zM9.75 9.96v1.642l3-2.805L9.75 6v1.598c-2.918.404-4.08 2.4-4.5 4.402 1.043-1.402 2.415-2.04 4.5-2.04z\",\n fill: \"#000\",\n fillOpacity: \".54\"\n})));","import {either, equals, identity, omit, path} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {\n AttributeError,\n AttributeType,\n AttributeValuePathItemType,\n ErrorSource,\n ErrorType,\n findAttributeTypeByUri,\n Metadata\n} from '@reltio/mdm-sdk';\n\nconst clearError = omit(['deactivated', 'path']);\nexport const areErrorsEqual = (errors1: AttributeError[] = [], errors2: AttributeError[] = []) =>\n errors1.length === errors2.length && equals(errors1.map(clearError), errors2.map(clearError));\n\nexport const getDisplayedErrorMessage = (\n metadata: Metadata,\n {type, source, message, attributeTypeUri = '', attributeType}: AttributeError\n) => {\n if (type === ErrorType.missed && source === ErrorSource.local) {\n const attrType: AttributeType = attributeType || findAttributeTypeByUri(metadata, attributeTypeUri);\n return attrType ? i18n.text('${attribute} is required', {attribute: attrType.label}) : message;\n }\n return message;\n};\n\nexport const getDisplayedErrorPath = ({path: errorPath, uri}: AttributeError) => {\n return errorPath\n ?.slice(0, uri ? errorPath.length - 1 : errorPath.length)\n .filter(({type}) =>\n [AttributeValuePathItemType.attributeValue, AttributeValuePathItemType.relationConnection].includes(type)\n )\n .map(({label}) => label)\n .filter(identity)\n .join(' / ');\n};\n\nexport const getDisplayedAttributeTypesPath = ({path: errorPath}: AttributeError) => {\n return errorPath\n ?.filter(({type}) => type === AttributeValuePathItemType.attributeValue)\n .map(either(path(['valueType', 'label']), path(['valueType', 'name'])))\n .filter(identity)\n .join(' > ');\n};\n","import React, {memo, useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {AttributeError, Metadata} from '@reltio/mdm-sdk';\nimport HyperlinkIcon from '../icons/hyperlink.svg';\nimport {SmallIconButtonWithTooltip, ScrollToErrorContext} from '@reltio/components';\nimport {getDisplayedAttributeTypesPath, getDisplayedErrorMessage, getDisplayedErrorPath} from '../helpers';\n\nimport useStyles from '../styles';\n\ntype Props = {\n error: AttributeError;\n};\n\nexport const Error = memo(({error}: Props) => {\n const styles = useStyles();\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const isEditableMode: boolean = useSelector(mdmModule.selectors.getIsEditableMode);\n const displayedMessage = getDisplayedErrorMessage(metadata, error);\n const displayedErrorPath = getDisplayedErrorPath(error);\n const displayedAttributeTypesPath = getDisplayedAttributeTypesPath(error);\n const {highlightError} = useContext(ScrollToErrorContext);\n const showLink = error.uri || (error.parentUri && error.attributeTypeUri);\n\n return (\n <li>\n <div className={styles.errorWrapper}>\n {displayedAttributeTypesPath && (\n <span className={styles.attributeTypesPath}>{displayedAttributeTypesPath}</span>\n )}\n <span className={styles.errorTitle}>\n {displayedMessage}\n {showLink && isEditableMode && (\n <SmallIconButtonWithTooltip\n icon={HyperlinkIcon}\n size=\"XXS\"\n onClick={() => highlightError(error)}\n tooltipTitle={i18n.text('Go to error')}\n className={styles.goToIcon}\n />\n )}\n </span>\n {displayedErrorPath && <span className={styles.parents}>{displayedErrorPath}</span>}\n </div>\n </li>\n );\n});\n\nError.displayName = 'Error';\n","import {useRef} from 'react';\nimport {areErrorsEqual} from './helpers';\n\nexport const useCachedErrors = (allErrors) => {\n const cacheForAllErrors = useRef(allErrors);\n const areEqualErrors = areErrorsEqual(allErrors, cacheForAllErrors.current);\n if (!areEqualErrors) {\n cacheForAllErrors.current = allErrors;\n }\n return cacheForAllErrors.current;\n};\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {partition} from 'ramda';\nimport ErrorIcon from '@material-ui/icons/Warning';\nimport WarningIcon from '@material-ui/icons/Error';\nimport mdmModule from '@reltio/mdm-module';\nimport {AttributeError, isCriticalError} from '@reltio/mdm-sdk';\n\nimport useStyles from './styles';\n\nimport {ErrorsPanel} from './components/ErrorsPanel';\nimport {Error} from './components/Error';\nimport {useCachedErrors} from './useCachedErrors';\n\nexport const ProfileErrorsPanel = () => {\n const styles = useStyles();\n const allErrors = useSelector(mdmModule.selectors.getProfileErrors);\n const cachedAllErrors = useCachedErrors(allErrors);\n\n const [errors, warnings]: [AttributeError[], AttributeError[]] = useMemo(\n () => partition(isCriticalError, cachedAllErrors),\n [cachedAllErrors]\n );\n const [expandedPanelId, setExpandedPanelId] = useState(null);\n const panels = useMemo(\n () =>\n [\n {\n id: 'errors',\n title: i18n.text('${number} ${errors}', {\n number: errors.length,\n errors: errors.length === 1 ? i18n.text('error') : i18n.text('errors')\n }),\n icon: <ErrorIcon className={classnames(styles.icon, styles.errorIcon)} />,\n items: errors,\n accordionClassName: styles.errorsAccordion,\n accordionDetailsClassName: styles.errorsAccordionDetails\n },\n {\n id: 'warnings',\n title: i18n.text('${number} ${warnings}', {\n number: warnings.length,\n warnings: warnings.length === 1 ? i18n.text('warning') : i18n.text('warnings')\n }),\n icon: <WarningIcon className={classnames(styles.icon, styles.warningIcon)} />,\n items: warnings,\n accordionClassName: styles.warningsAccordion,\n accordionDetailsClassName: styles.warningsAccordionDetails\n }\n ].filter(({items}) => items.length > 0),\n [errors, warnings, styles]\n );\n\n useEffect(() => {\n setExpandedPanelId('errors');\n }, [errors]);\n\n const handleChange = useCallback(\n (panelId: string) => (event, isExpanded: boolean) => {\n setExpandedPanelId(isExpanded ? panelId : null);\n },\n []\n );\n\n return panels.length > 0 ? (\n <ErrorsPanel panels={panels} expandedPanelId={expandedPanelId} onToggle={handleChange} ErrorComponent={Error} />\n ) : null;\n};\n","import {useCallback, useEffect, useMemo, useState} from 'react';\nimport hash from 'object-hash';\nimport {useSavedStateForEntityType, useConfigPermissions} from '@reltio/components';\nimport {\n debounce,\n fixNonUniqViewsIds,\n ProfilePerspectiveConfig,\n ProfileViewConfig,\n ReltioGridLayoutItem,\n removeUnsupportedLayoutItems\n} from '@reltio/mdm-sdk';\nimport {ProfileSavedState, Layout} from '../../../types';\n\ntype Props = {\n config: ProfilePerspectiveConfig;\n entityTypeUri?: string;\n saveState: (state: Record<string, ProfileSavedState>) => void;\n getSavedState: () => Promise<Record<string, ProfileSavedState>>;\n};\n\nconst SAVE_STATE_DEBOUNCE_DELAY = 1000;\nconst emptyState = {} as ProfileSavedState;\nexport const useProfileLayout = ({config: profileConfig, entityTypeUri, saveState, getSavedState}: Props) => {\n const [layout, setLayout] = useState<Layout>([]);\n const [views, setViews] = useState<ProfilePerspectiveConfig['views']>([]);\n\n const {canRead} = useConfigPermissions();\n const config: ProfilePerspectiveConfig = useMemo(() => {\n const validatedViews = profileConfig.views.filter(canRead);\n const validatedLayout = removeUnsupportedLayoutItems(profileConfig.layout, validatedViews);\n return {...profileConfig, views: validatedViews, layout: validatedLayout};\n }, [profileConfig, canRead]);\n\n const configHash = useMemo(() => hash(config), [config]);\n const nestedRoute = config?.nestedRoute ? `/${config.nestedRoute}` : '';\n const savedStateKey = entityTypeUri && config ? entityTypeUri + nestedRoute : null;\n\n const getSavedStateAndFix = useCallback(() => {\n return getSavedState().then((state) => (state.layout ? {} : state));\n }, [getSavedState]);\n const debouncedSaveState = useCallback(debounce(saveState, SAVE_STATE_DEBOUNCE_DELAY), [saveState]) as (\n state: Record<string, ProfileSavedState>\n ) => void;\n const {\n isLoaded,\n savedState = emptyState,\n updateSavedState\n } = useSavedStateForEntityType<ProfileSavedState>({\n getSavedState: getSavedStateAndFix,\n saveState: debouncedSaveState,\n entityTypeUri: savedStateKey\n });\n\n const handleLayoutChange = useCallback(\n (layout: Layout) => {\n updateSavedState({layout, views, configHash});\n setLayout(layout);\n },\n [updateSavedState, configHash, views]\n );\n\n useEffect(() => {\n if (isLoaded) {\n const isConfigChanged = configHash !== savedState.configHash;\n const {views: fixedViews, layout: fixedLayout} = fixNonUniqViewsIds<\n ProfileViewConfig,\n ReltioGridLayoutItem\n >({\n views: isConfigChanged || !savedState.views ? config.views : savedState.views,\n layout: isConfigChanged ? config.layout : savedState.layout\n });\n setViews(fixedViews);\n setLayout(fixedLayout);\n }\n }, [isLoaded, savedState, savedStateKey]); // eslint-disable-line\n\n return {views, layout, isLoaded, handleLayoutChange};\n};\n","import {useWorkflowDefaultActionSuccessHandler, useWorkflowTasks as useCommonWorkflowTasks} from '@reltio/components';\nimport {useMemo} from 'react';\n\nexport const useWorkflowTasks = (workflowConfig: Parameters<typeof useCommonWorkflowTasks>[0]) => {\n const commonWorkflowTasks = useCommonWorkflowTasks(workflowConfig);\n const defaultActionSuccessHandler = useWorkflowDefaultActionSuccessHandler();\n\n return useMemo(\n () => ({\n ...commonWorkflowTasks,\n onActionSuccess: defaultActionSuccessHandler\n }),\n [commonWorkflowTasks, defaultActionSuccessHandler]\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\ntype Props = {\n maxWidth?: number;\n};\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 emptyState: {\n backgroundColor: '#FAFAFA',\n height: '100%'\n },\n profileWrapper: ({maxWidth}: Props) => ({\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n flexGrow: 1,\n maxWidth: maxWidth ? `${maxWidth}px` : '100%'\n }),\n profileContainer: {\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, useContext, useMemo, useEffect} from 'react';\nimport i18n from 'ui-i18n';\nimport {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Entity, getProfileObjectIdsForCollaboration, Mode, ProfilePerspectiveConfig, isTempUri} from '@reltio/mdm-sdk';\nimport mdm, {HistoryEvent} from '@reltio/mdm-module';\nimport {\n CollaborationContext,\n WorkflowTasksContext,\n EMPTY_STATE_ICONS,\n EMPTY_STATE_VARIANTS,\n EmptyState,\n LinearLoadIndicator,\n ProfilePerspectiveViewContext,\n SearchValueContext,\n useCollaboration,\n HistoryDiffContext,\n useHistoryDiff,\n useHistorySlice,\n ScrollToErrorProvider,\n CollaborationContextProvider\n} from '@reltio/components';\nimport {ProfileSavedState} from '../../types';\n\nimport {ProfileLayout} from '../ProfileLayout';\nimport {Notifications} from '../Notifications';\nimport {PerspectiveProfileBand} from '../PerspectiveProfileBand';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\nimport {ProfileErrorsPanel} from '../ProfileErrorsPanel';\nimport {useProfileValidation} from '../hooks/useProfileValidation';\nimport {useProfileLayout} from './hooks/useProfileLayout';\nimport {useWorkflowTasks} from './hooks/useWorkflowTasks';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: ProfilePerspectiveConfig;\n saveState: (state: Record<string, ProfileSavedState>) => void;\n getSavedState: () => Promise<Record<string, ProfileSavedState>>;\n commentId?: string;\n};\n\nconst ProfilePerspectiveView = memo(({config, saveState, getSavedState, commentId}: Props) => {\n const {maxWidth, profileBand, workflow} = config || {};\n const styles = useStyles({maxWidth});\n\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n const historyEvent: HistoryEvent = useSelector(mdm.selectors.getHistoryEvent);\n const isHistoryActive = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const keywordValue = useSelector(mdm.selectors.getSearchKeyword)?.value || '';\n const mode = useSelector(mdm.selectors.getMode);\n\n const dispatch = useDispatch();\n const historyDiff = useHistoryDiff();\n const workflowTasks = useWorkflowTasks(workflow);\n\n const {type: entityTypeUri, uri: entityUri} = entity || {};\n const objectIds = useMemo(() => getProfileObjectIdsForCollaboration(entity), [entity]);\n const emptyCollaboration = useContext(CollaborationContext);\n const collaboration = useCollaboration({objectIds});\n\n const {views, layout, isLoaded, handleLayoutChange} = useProfileLayout({\n config,\n entityTypeUri,\n saveState,\n getSavedState\n });\n useHistorySlice({entity, historyEvent});\n useProfileValidation();\n\n useEffect(() => {\n dispatch(profile.views.actions.profileViewsSet(views));\n }, [dispatch, views]);\n\n useEffect(() => {\n if (config.sidePanelViews) {\n dispatch(profile.sidePanelViews.actions.sidePanelViewsLoaded(config.sidePanelViews));\n }\n }, [config]); // eslint-disable-line\n\n // possible for a short time during createProfile saga execution\n const hideLayout = mode === Mode.Viewing && isTempUri(entityUri);\n\n return (\n <ProfilePerspectiveViewContext.Provider value={true}>\n <CollaborationContextProvider collaboration={isHistoryActive ? emptyCollaboration : collaboration}>\n <WorkflowTasksContext.Provider value={workflowTasks}>\n <HistoryDiffContext.Provider value={historyDiff}>\n <SearchValueContext.Provider value={keywordValue}>\n <ScrollToErrorProvider>\n <div className={styles.perspectiveView}>\n {(!isLoaded || !entityUri) && <LinearLoadIndicator />}\n {isLoaded && entityUri ? (\n <div className={styles.profileContainer}>\n <div className={styles.profileWrapper}>\n <PerspectiveProfileBand profileBandConfig={profileBand} />\n {!isHistoryActive && <ProfileErrorsPanel />}\n {!hideLayout && (\n <ProfileLayout\n maxWidth={maxWidth}\n views={views}\n layout={layout}\n entityUri={entityUri}\n onLayoutChanged={handleLayoutChange}\n />\n )}\n </div>\n <RightSidePanel commentId={commentId} />\n </div>\n ) : (\n <div className={styles.emptyState}>\n <EmptyState\n LogoRenderer={EMPTY_STATE_ICONS.NO_DATA}\n text={i18n.text('No data to display.')}\n variant={EMPTY_STATE_VARIANTS.embedded}\n />\n </div>\n )}\n <Notifications />\n </div>\n </ScrollToErrorProvider>\n </SearchValueContext.Provider>\n </HistoryDiffContext.Provider>\n </WorkflowTasksContext.Provider>\n </CollaborationContextProvider>\n </ProfilePerspectiveViewContext.Provider>\n );\n});\n\nProfilePerspectiveView.displayName = 'ProfilePerspectiveView';\n\nexport {ProfilePerspectiveView};\n","import {useCallback, useEffect} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {debounce, Entity, isDataTenantEntity, isTempUri, Mode} from '@reltio/mdm-sdk';\n\nexport const useProfileValidation = () => {\n const dispatch = useDispatch();\n const isValidateReadMode: boolean = useSelector(mdmModule.selectors.getValidateReadMode);\n const entity: Entity = useSelector(mdmModule.selectors.getEntity) || ({} as Entity);\n const {uri, updatedTime} = entity;\n const isDTEntity = isDataTenantEntity(entity);\n const mode: Mode = useSelector(mdmModule.selectors.getMode);\n const profileViews = useSelector(mdmModule.selectors.getProfileViews);\n const hasProfileViews = profileViews && profileViews.length > 0;\n\n const validate = useCallback(\n debounce((needDispatch: boolean) => {\n if (needDispatch) {\n dispatch(profile.actions.validateProfile());\n }\n }, 500),\n [dispatch]\n );\n\n useEffect(() => {\n const needDispatch =\n isValidateReadMode && !isDTEntity && uri && !isTempUri(uri) && mode === Mode.Viewing && hasProfileViews;\n validate(needDispatch);\n }, [validate, isDTEntity, isValidateReadMode, updatedTime, uri, mode, hasProfileViews]);\n};\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport MomentUtils from '@date-io/moment';\nimport {identity} from 'ramda';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport {\n ErrorPopup,\n FeaturesContext,\n SandboxAPIContext,\n SnackbarContext,\n useSnackbar,\n ViewIdContext\n} from '@reltio/components';\nimport {\n convertOldProfileConfig,\n ProfilePerspectiveConfig,\n promisifyCallback,\n QxSandboxApi,\n userPreferencesComparator\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {ProfileSavedState} from '../types';\nimport ProfilePerspectiveView from '../components/ProfilePerspectiveView';\nimport {equalsState} from './helpers';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'profilePerspective',\n disableGlobal: true\n});\n\nuserPreferencesComparator.register('profile', equalsState);\n\ntype Props = {\n config: ProfilePerspectiveConfig;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n saveState: (state: Record<string, ProfileSavedState>) => void;\n getSavedState: (clb: (state: Record<string, ProfileSavedState>) => void) => void;\n qxSandboxApi?: QxSandboxApi;\n commentId?: string;\n};\n\nconst ProfilePerspective = ({\n config,\n store,\n onResize = identity,\n saveState,\n getSavedState,\n qxSandboxApi,\n commentId\n}: Props) => {\n const getSavedStatePromisified: () => Promise<Record<string, ProfileSavedState>> = useCallback(\n promisifyCallback(getSavedState),\n [getSavedState]\n );\n const {SnackbarRenderer, showSnackbarMessage} = useSnackbar();\n\n const processedConfig = useMemo(() => config && convertOldProfileConfig(config), [config]);\n const featuresContext = useContext(FeaturesContext);\n const showDescription = mdmModule.selectors.getShowAttributeDescription(store.getState());\n const features = useMemo(() => ({...featuresContext, showDescription}), [featuresContext, showDescription]);\n\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={processedConfig?.id}>\n <SnackbarContext.Provider value={showSnackbarMessage}>\n <SandboxAPIContext.Provider value={qxSandboxApi}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <FeaturesContext.Provider value={features}>\n <>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) =>\n onResize(Math.floor(width), Math.floor(height))\n }\n />\n {processedConfig && (\n <ProfilePerspectiveView\n config={processedConfig}\n saveState={saveState}\n getSavedState={getSavedStatePromisified}\n commentId={commentId}\n />\n )}\n <ErrorPopup showErrorFromStore={true} />\n <SnackbarRenderer />\n </>\n </FeaturesContext.Provider>\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </SandboxAPIContext.Provider>\n </SnackbarContext.Provider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default ProfilePerspective;\n","import {evolve, ifElse, map, omit, pipe, propEq, sort} from 'ramda';\nimport {looseEquals} from '@reltio/mdm-sdk';\nimport {Layout, ProfileSavedState} from '../types';\n\nexport const equalsState = (\n newState: Record<string, ProfileSavedState>,\n savedState: Record<string, ProfileSavedState> | null\n) => {\n const sortLayoutItems = (layout: Layout) =>\n sort((a, b) => (a.x > b.x || (a.x === b.x && a.y > b.y) ? 1 : -1), layout);\n const prepareState = map((item: ProfileSavedState) =>\n evolve(\n {\n layout: pipe(\n sortLayoutItems,\n map(\n ifElse(\n propEq('autosizing', true),\n omit(['y', 'height', 'minHeight', 'maxHeight']),\n omit(['y', 'minHeight', 'maxHeight'])\n )\n )\n )\n },\n item\n )\n );\n return looseEquals(prepareState(newState), prepareState(savedState));\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n titleContainer: {\n overflow: 'hidden',\n fontSize: '16px',\n fontWeight: 'normal',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n alignItems: 'center',\n display: 'flex',\n minHeight: '48px',\n color: theme.palette.text.secondary\n },\n link: {\n fontSize: '16px',\n fontWeight: 'normal'\n },\n icon: {\n height: '18px',\n color: theme.palette.text.secondary\n },\n totalCaption: {\n lineHeight: 'inherit',\n fontSize: '14px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px'\n },\n totalNumber: {\n fontSize: '16px',\n color: 'rgba(0,0,0,0.87)',\n marginRight: '5px',\n fontWeight: 500\n }\n}));\n","import React, {useCallback, useContext} from 'react';\nimport {useDispatch} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {FacetViewHeader, Spacer, ViewIdContext} from '@reltio/components';\nimport {Link as Link} from '@material-ui/core';\nimport ArrowForwardIosRoundedIcon from '@material-ui/icons/ArrowForwardIosRounded';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n total?: number;\n};\n\nexport const TagListHeader = ({total = 0}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const viewId = useContext(ViewIdContext);\n\n const switchToProfile = useCallback(() => {\n dispatch(mdmModuleUi.actions.openPerspective({perspectiveId: 'profile', viewId}));\n }, [dispatch, viewId]);\n\n return (\n <FacetViewHeader title=\"\">\n <div className={styles.titleContainer}>\n <Link\n component=\"button\"\n variant=\"caption\"\n className={styles.link}\n onClick={switchToProfile}\n underline=\"none\"\n >\n {i18n.text('Profile')}\n </Link>\n <ArrowForwardIosRoundedIcon className={styles.icon} />\n {i18n.text('Tags')}\n </div>\n <Spacer />\n <Typography className={styles.totalCaption} variant=\"caption\">\n <span className={styles.totalNumber}>{i18n.number(total, '0,0')}</span>\n {i18n.text('total profiles')}\n </Typography>\n </FacetViewHeader>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n toolbar: {\n display: 'flex',\n flexShrink: 0,\n background: 'white',\n borderBottom: '1px solid rgba(0,0,0,0.1)',\n boxSizing: 'border-box',\n paddingLeft: '16px'\n },\n avatar: {\n color: 'rgba(0, 0, 0, 0.38)',\n marginRight: '12px'\n },\n label: {\n fontSize: '20px',\n letterSpacing: '0.25px',\n lineHeight: '1.2',\n fontWeight: 500,\n color: theme.palette.text.primary,\n wordBreak: 'break-word'\n }\n}));\n","import React from 'react';\nimport TagIcon from '@material-ui/icons/LocalOffer';\nimport {Toolbar as Toolbar} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {useStyles} from './styles';\n\ntype Props = {\n label: string;\n};\n\nexport const TagProfileBand = ({label}: Props) => {\n const styles = useStyles();\n return (\n <Toolbar className={styles.toolbar}>\n <TagIcon className={styles.avatar} />\n <Typography variant=\"h6\" className={styles.label}>\n {label}\n </Typography>\n </Toolbar>\n );\n};\n","import {useCallback, useMemo} from 'react';\nimport {map} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n Entity,\n getFilteredEntities,\n getFilteredEntitiesFromDataTenant,\n getTotals,\n getTotalFromDataTenant,\n TotalResponse,\n SearchFilter,\n GlobalSearchRequestOptions,\n getDataTenantFromEntityUri,\n enrichEntityWithDataTenant\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\n\ntype Props = {\n entityUri: string;\n tag: string;\n};\n\nexport const useTagsProvider = ({entityUri, tag}: Props) => {\n const globalSearchRequestOptions: GlobalSearchRequestOptions = useSelector(\n mdmModule.selectors.getGlobalSearchRequestOptions\n );\n const tenant: string = useSelector(mdmModule.selectors.getTenant);\n const dtssPath: string = useSelector(mdmModule.selectors.getDtssPath);\n const dataTenant = useMemo(() => getDataTenantFromEntityUri(entityUri), [entityUri]);\n const filters: SearchFilter[] = useMemo(() => {\n return [\n {\n filter: 'equals',\n fieldName: 'tags',\n values: [tag]\n }\n ];\n }, [tag]);\n\n const isDT = !!dataTenant;\n\n const getEntities = useCallback(\n (filters: SearchFilter[] = [], options = {}): Promise<Entity[]> => {\n const requestOptions = {\n select: 'uri,label,type,secondaryLabel,defaultProfilePicValue,startDate,endDate',\n ...options\n };\n return isDT\n ? getFilteredEntitiesFromDataTenant({\n filters,\n options: requestOptions,\n customerTenant: tenant,\n dataTenant,\n dtssPath\n }).then(map(enrichEntityWithDataTenant(dataTenant)))\n : getFilteredEntities(filters, requestOptions);\n },\n [isDT, dataTenant, tenant, dtssPath]\n );\n\n const requestEntities = useCallback(\n (max, offset): Promise<Entity[]> => {\n return getEntities(filters, {offset, max, ...globalSearchRequestOptions});\n },\n [filters, globalSearchRequestOptions, getEntities]\n );\n\n const requestTotal = useCallback((): Promise<number> => {\n const options = globalSearchRequestOptions;\n return (isDT\n ? getTotalFromDataTenant({\n filters,\n options,\n customerTenant: tenant,\n dataTenant,\n dtssPath\n })\n : getTotals(filters, options)\n ).then((json) => (json as TotalResponse).total);\n }, [filters, globalSearchRequestOptions, isDT, dataTenant, tenant, dtssPath]);\n\n return {requestEntities, requestTotal};\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 overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.palette.background.default\n },\n tagsContainer: {\n display: 'flex'\n },\n fullHeight: {\n flexGrow: 1,\n height: 0\n },\n tagsView: {\n margin: '16px',\n width: '100%',\n paddingTop: '4px'\n },\n listContainer: {\n flex: 1,\n display: 'flex',\n overflow: 'hidden',\n position: 'relative',\n flexDirection: 'column',\n minHeight: '4px'\n },\n entitiesList: {\n overflowY: 'auto',\n flexGrow: 1\n },\n pagination: {\n flexGrow: 0\n }\n}));\n","import React, {memo, useEffect, useRef, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport mdmModule from '@reltio/mdm-module';\nimport {GlobalSearchRequestOptions} from '@reltio/mdm-sdk';\nimport {BasicTablePagination, BasicView, LinearLoadIndicator, ProfilesList} from '@reltio/components';\nimport {TagListHeader} from './components/TagListHeader';\nimport {TagProfileBand} from './components/TagProfileBand';\nimport {useTag} from './hooks/useTag';\n\nimport {useStyles} from './styles';\n\nconst ROWS_PER_PAGE_OPTIONS = [25, 50, 100];\n\ntype Props = {\n tag?: string;\n entityUri?: string;\n};\n\nconst TagPerspectiveView = memo(({tag, entityUri}: Props) => {\n const styles = useStyles();\n\n const [rowsPerPage, setRowsPerPage] = useState(ROWS_PER_PAGE_OPTIONS[0]);\n const [page, setPage] = useState(0);\n\n const globalSearchRequestOptions: GlobalSearchRequestOptions = useSelector(\n mdmModule.selectors.getGlobalSearchRequestOptions\n );\n\n useEffect(() => {\n setPage(0);\n }, [tag, entityUri, globalSearchRequestOptions]);\n\n const {isLoading, total, entities} = useTag({tag, entityUri, page, rowsPerPage});\n const refScrollBlock = useRef(null);\n\n useEffect(() => {\n if (refScrollBlock.current) {\n refScrollBlock.current.scrollTop = 0;\n }\n }, [entities]);\n\n const hasPagination = total > ROWS_PER_PAGE_OPTIONS[0];\n\n return (\n <div className={styles.perspectiveView}>\n <TagProfileBand label={tag} />\n <div className={classnames(styles.tagsContainer, {[styles.fullHeight]: hasPagination})}>\n <BasicView className={styles.tagsView}>\n <TagListHeader total={total} />\n <div className={styles.listContainer}>\n {isLoading && <LinearLoadIndicator />}\n {total > 0 && (\n <div className={styles.entitiesList} ref={refScrollBlock}>\n <ProfilesList entities={entities} />\n </div>\n )}\n {hasPagination && (\n <div className={styles.pagination}>\n <BasicTablePagination\n count={total}\n rowsPerPageOptions={ROWS_PER_PAGE_OPTIONS}\n rowsPerPage={rowsPerPage}\n page={page}\n onChangePage={setPage}\n onChangeRowsPerPage={setRowsPerPage}\n />\n </div>\n )}\n </div>\n </BasicView>\n </div>\n </div>\n );\n});\n\nTagPerspectiveView.displayName = 'TagPerspectiveView';\n\nexport {TagPerspectiveView};\n","import {useCallback, useEffect, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {useDispatch} from 'react-redux';\nimport {useSafePromise} from '@reltio/components';\nimport {ui} from '@reltio/mdm-module';\nimport {Entity, getRequestErrorMessage} from '@reltio/mdm-sdk';\nimport {useTagsProvider} from './useTagsProvider';\n\ntype Props = {\n tag: string;\n entityUri: string;\n page: number;\n rowsPerPage: number;\n};\n\nexport const useTag = ({tag, entityUri, page = 0, rowsPerPage = 50}: Props) => {\n const dispatch = useDispatch();\n\n const safeRequestTotalPromise = useSafePromise();\n const safeRequestEntitiesPromise = useSafePromise();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [total, setTotal] = useState<number>(0);\n const [entities, setEntities] = useState<Entity[]>([]);\n\n const {requestEntities, requestTotal} = useTagsProvider({entityUri, tag});\n\n const onError = useCallback(\n (e) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(e, i18n.text('Something went wrong'))));\n setTotal(0);\n },\n [dispatch]\n );\n\n useEffect(() => {\n safeRequestTotalPromise(requestTotal()).then(setTotal).catch(onError);\n }, [requestTotal, safeRequestTotalPromise, onError]);\n\n useEffect(() => {\n setIsLoading(true);\n safeRequestEntitiesPromise(requestEntities(rowsPerPage, page * rowsPerPage))\n .then(setEntities)\n .catch(onError)\n .finally(() => setIsLoading(false));\n }, [page, rowsPerPage, requestEntities, safeRequestEntitiesPromise, onError]);\n\n return {isLoading, total, entities};\n};\n","import React from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport {identity} from 'ramda';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {TagPerspectiveConfig} from '@reltio/mdm-sdk';\nimport TagPerspectiveView from '../components/TagPerspectiveView';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'tagPerspective',\n disableGlobal: true\n});\n\ntype Props = {\n config: TagPerspectiveConfig;\n tag?: string;\n entityUri?: string;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n};\n\nconst TagPerspective = ({config, tag, entityUri, store, onResize = identity}: Props) => {\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n {config && <TagPerspectiveView tag={tag} entityUri={entityUri} />}\n <ErrorPopup showErrorFromStore={true} />\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default TagPerspective;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n actionsWrapper: {\n display: 'flex',\n '& button + button': {\n width: '88px',\n marginLeft: '8px'\n }\n }\n}));\n","import React, {useContext, useMemo} from 'react';\nimport {ProfileBand, TaskActionButtons, WorkflowTasksContext} from '@reltio/components';\nimport {useSelector} from 'react-redux';\nimport {Entity, getEntityUriFromDCRUri} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {useStyles} from './styles';\n\nexport const DCRProfileBand = () => {\n const styles = useStyles();\n\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n const {tasks} = useContext(WorkflowTasksContext);\n const entityTask = useMemo(() => {\n return tasks?.find((task) => task.objectURIs.includes(getEntityUriFromDCRUri(entity.uri)));\n }, [entity.uri, tasks]);\n\n return (\n <ProfileBand entity={entity}>\n <div className={styles.actionsWrapper}>{entityTask && <TaskActionButtons task={entityTask} />}</div>\n </ProfileBand>\n );\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 overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.palette.background.default\n },\n perspectiveContainer: {\n display: 'flex',\n flexGrow: 1,\n overflow: 'hidden'\n },\n attributesWrapper: {\n margin: '15px',\n flexGrow: 1,\n overflowY: 'auto',\n backgroundColor: '#FAFAFA'\n },\n contentWrapper: {\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n flexGrow: 1\n }\n}));\n","import {useWorkflowTasks as useCommonWorkflowTasks} from '@reltio/components';\nimport mdmModule, {ui} from '@reltio/mdm-module';\nimport {getEntityUriFromDCRUri} from '@reltio/mdm-sdk';\nimport {useCallback, useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nexport const useWorkflowTasks = (workflowConfig: Parameters<typeof useCommonWorkflowTasks>[0]) => {\n const dispatch = useDispatch();\n const entityUri: string = useSelector(mdmModule.selectors.getEntityUri);\n const commonWorkflowTasks = useCommonWorkflowTasks(workflowConfig);\n\n const actionSuccessHandler = useCallback(\n (action: string) => {\n if (action === 'Reject') {\n dispatch(ui.actions.openPerspective({perspectiveId: null, viewId: null}));\n }\n if (action === 'Approve') {\n dispatch(ui.actions.openEntity({uri: getEntityUriFromDCRUri(entityUri), viewId: null}));\n }\n },\n [dispatch, entityUri]\n );\n\n return useMemo(\n () => ({\n ...commonWorkflowTasks,\n onActionSuccess: actionSuccessHandler\n }),\n [commonWorkflowTasks, actionSuccessHandler]\n );\n};\n","import React, {memo, useEffect} from 'react';\nimport {Entity} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport i18n from 'ui-i18n';\nimport {DCRProfileBand} from './components/DCRProfileBand/DCRProfileBand';\nimport {\n AttributesView,\n EMPTY_STATE_ICONS,\n EMPTY_STATE_VARIANTS,\n EmptyState,\n LinearLoadIndicator,\n WorkflowTasksContext\n} from '@reltio/components';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\n\nimport {useStyles} from './styles';\nimport {useWorkflowTasks} from './hooks/useWorkflowTasks';\n\nconst workflowConfig = {processTypes: ['dataChangeRequestReview']};\n\nexport const DCRReviewPerspectiveView = memo(() => {\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const workflowTasks = useWorkflowTasks(workflowConfig);\n\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n\n useEffect(() => {\n dispatch(\n profile.sidePanelViews.actions.sidePanelViewsLoaded([\n {\n id: 'common',\n views: [\n {\n point: 'com.reltio.plugins.ui.view',\n id: 'com.reltio.plugins.entity.side.WorkflowsView',\n class: 'com.reltio.plugins.entity.side.WorkflowsView'\n }\n ]\n }\n ])\n );\n }, [dispatch]);\n\n const isLoaded = !workflowTasks.loading && !!entity.uri;\n\n return (\n <WorkflowTasksContext.Provider value={workflowTasks}>\n <div className={styles.perspectiveView}>\n {!isLoaded && <LinearLoadIndicator />}\n <div className={styles.perspectiveContainer}>\n {isLoaded ? (\n <>\n <div className={styles.contentWrapper}>\n <DCRProfileBand />\n <div className={styles.attributesWrapper}>\n <AttributesView />\n </div>\n </div>\n <RightSidePanel />\n </>\n ) : (\n <EmptyState\n LogoRenderer={EMPTY_STATE_ICONS.NO_DATA}\n text={i18n.text('No data to display.')}\n variant={EMPTY_STATE_VARIANTS.embedded}\n />\n )}\n </div>\n </div>\n </WorkflowTasksContext.Provider>\n );\n});\n\nDCRReviewPerspectiveView.displayName = 'DCRReviewPerspectiveView';\n","import React, {useContext, useMemo} from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport {identity} from 'ramda';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {ErrorPopup, FeaturesContext, ViewIdContext} from '@reltio/components';\nimport {DCRReviewPerspectiveConfig} from '@reltio/mdm-sdk';\nimport MomentUtils from '@date-io/moment';\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport DCRReviewPerspectiveView from '../components/DCRReviewPerspectiveView';\nimport mdmModule from '@reltio/mdm-module';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'dcrReviewPerspective',\n disableGlobal: true\n});\n\ntype Props = {\n config: DCRReviewPerspectiveConfig;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n};\n\nconst DCRReviewPerspective = ({config, store, onResize = identity}: Props) => {\n const featuresContext = useContext(FeaturesContext);\n const showDescription = mdmModule.selectors.getShowAttributeDescription(store.getState());\n const features = useMemo(() => ({...featuresContext, showDescription}), [featuresContext, showDescription]);\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <FeaturesContext.Provider value={features}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n <DCRReviewPerspectiveView />\n <ErrorPopup showErrorFromStore={true} />\n </FeaturesContext.Provider>\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default DCRReviewPerspective;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n addButton: {\n marginLeft: '12px',\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)'\n },\n label: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n }\n});\n","import AddIcon from '@material-ui/icons/Add';\nimport {Button as Button} from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport i18n from 'ui-i18n';\nimport {useStyles} from './styles';\n\nconst AddRelationButton = ({onClick}) => {\n const styles = useStyles();\n return (\n <Button color=\"primary\" className={styles.addButton} onClick={onClick}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.label}>{i18n.text('Add')}</div>\n </Button>\n );\n};\n\nAddRelationButton.propTypes = {\n onClick: PropTypes.func\n};\n\nexport default AddRelationButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst removedStyle = {\n textDecoration: 'line-through',\n color: 'rgba(0,0,0,.54)'\n};\n\nconst inactiveStyle = {\n color: 'rgba(0,0,0,.54)'\n};\n\nexport const useStyles = makeStyles((theme) => ({\n headCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n fontSize: '12px'\n },\n entityCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%'\n },\n entityLabel: {\n fontSize: '15px',\n color: theme.palette.primary.main,\n cursor: 'pointer',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n '$row-cell--removed &': removedStyle,\n '$row-cell--inactive &': inactiveStyle\n },\n entityAvatar: {\n transform: 'scale(0.7)',\n margin: '0 10px'\n },\n rowCell: {\n fontSize: '13px',\n overflow: 'hidden'\n },\n description: {\n marginLeft: '-22px'\n },\n 'row-cell--sorted': {\n color: 'rgba(0,0,0,0.87)'\n },\n 'row-cell--removed': {\n pointerEvents: 'none',\n '& > :not($entityCell)': removedStyle\n },\n 'row-cell--inactive': inactiveStyle\n}));\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport classnames from 'classnames';\nimport {checkRemoved, isActiveObject} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\nconst RowCellRenderer = ({cell, CellValueRenderer, rowValue: {connection}, isSorted, ...otherProps}) => {\n const styles = useStyles();\n const isRemoved = checkRemoved(connection);\n const isActive = isActiveObject(connection.relation) && isActiveObject(connection.entity);\n\n return (\n <div\n className={classnames(\n {\n [styles['row-cell--sorted']]: isSorted,\n [styles['row-cell--removed']]: isRemoved,\n [styles['row-cell--inactive']]: !isActive\n },\n styles.rowCell\n )}\n >\n {cell.values.map((value, index) => (\n <CellValueRenderer key={index} value={value} {...otherProps} />\n ))}\n </div>\n );\n};\n\nRowCellRenderer.propTypes = {\n rowValue: PropTypes.object,\n cell: PropTypes.object,\n CellValueRenderer: PropTypes.elementType,\n isSorted: PropTypes.bool\n};\n\nexport default RowCellRenderer;\n","import PropTypes from 'prop-types';\nimport React, {useContext} from 'react';\nimport {ui} from '@reltio/mdm-module';\nimport {always, pipe} from 'ramda';\nimport {useDispatch} from 'react-redux';\nimport {useStyles} from './styles';\nimport {EntityTypeType, getEntityUriForLink, getLabel} from '@reltio/mdm-sdk';\nimport {EntityTypeIcon, ExpandedValueTooltip, ViewIdContext} from '@reltio/components';\n\nconst EntityProfileRenderer = ({value: {entityType, entity}}) => {\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const styles = useStyles();\n const entityLabel = getLabel(entity.entityLabel);\n const preparedUri = getEntityUriForLink({uri: entity.entityUri, dataTenant: entity.dataTenant});\n return (\n <div className={styles.entityCell}>\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <ExpandedValueTooltip value={entityLabel}>\n <span\n className={styles.entityLabel}\n onClick={pipe(always({uri: preparedUri, viewId}), ui.actions.openEntity, dispatch)}\n >\n {entityLabel}\n </span>\n </ExpandedValueTooltip>\n </div>\n );\n};\n\nEntityProfileRenderer.propTypes = {\n value: PropTypes.shape({\n entity: PropTypes.shape({\n entityUri: PropTypes.string,\n entityLabel: PropTypes.string\n }),\n entityType: EntityTypeType\n })\n};\n\nexport default EntityProfileRenderer;\n","import React from 'react';\n\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {withFilterAtBottom, DescriptionIcon} from '@reltio/components';\nimport {useStyles} from './styles';\n\nconst HeadCellRenderer = (props) => {\n const styles = useStyles();\n const {description} = props?.headCellData || {};\n\n return (\n <div className={styles.headCell}>\n <DefaultHeadCellRenderer {...props} />\n <DescriptionIcon description={description} className={styles.description} />\n </div>\n );\n};\n\nexport default withFilterAtBottom(HeadCellRenderer);\n","import {getOvAttributeValuesByPath, getReadableAttributesList} from '@reltio/mdm-sdk';\nimport {chain, find, map, path, pipe, propEq, uniq} from 'ramda';\n\nconst getRelationTypes = pipe(\n map((rel) => rel.uri || rel),\n uniq\n);\n\nconst getRelationsAttributesFromMetadata = ({content: {inRelations = [], outRelations = []}}, {relationTypes}) =>\n pipe(\n getRelationTypes,\n chain((relationType) => pipe(find(propEq('uri', relationType)), getReadableAttributesList)(relationTypes))\n )([...inRelations, ...outRelations]);\n\nconst getRelationAttributeValues = (attrPath, relation) =>\n pipe(path(['object', 'attributes']), getOvAttributeValuesByPath(attrPath))(relation);\n\nexport {getRelationsAttributesFromMetadata, getRelationAttributeValues};\n","import EntityProfileRenderer from '../cell-renderers/EntityProfileRenderer';\nimport HeadCellRenderer from '../cell-renderers/HeadCellRenderer';\nimport {DefaultCellValueRenderer} from '@reltio/components';\nimport {assoc, map, pipe, reduce, slice, split} from 'ramda';\nimport {getEntityType, getRelationTypeLabelFromMetadata} from '@reltio/mdm-sdk';\nimport {getRelationAttributeValues} from '../../../core/relations';\n\nconst getAttrPathFromColumnId = pipe(split('.'), slice(2, Infinity));\n\nconst getRowValueByColumnId = (columnId, {entity, relation}, metadata) => {\n switch (columnId) {\n case 'entity.label':\n return {entity, entityType: getEntityType(metadata, entity.entityType)};\n case 'relation.label':\n return relation.relationLabel || getRelationTypeLabelFromMetadata(metadata, relation.relationType);\n case 'relation.activeness.startDate':\n return relation.startDate;\n case 'relation.activeness.endDate':\n return relation.endDate;\n default: {\n const attrPath = getAttrPathFromColumnId(columnId);\n return getRelationAttributeValues(attrPath, relation);\n }\n }\n};\n\nconst getBasicTableRowsData = (connections, columnsData, metadata) =>\n connections.map((connection) =>\n pipe(\n reduce((acc, {id}) => assoc(id, getRowValueByColumnId(id, connection, metadata), acc), {}),\n assoc('connection', connection)\n )(columnsData)\n );\n\nconst getNestedPathByColumnId = (columnId) => {\n if (columnId.startsWith('relation.attributes')) {\n const attrPath = getAttrPathFromColumnId(columnId);\n return attrPath.length > 1 ? attrPath.slice(0, -1) : null;\n } else {\n return null;\n }\n};\n\nconst getCellValueRenderer = (columnId) => {\n switch (columnId) {\n case 'entity.label':\n return EntityProfileRenderer;\n default:\n return DefaultCellValueRenderer;\n }\n};\n\nconst getColumnDataByColumnId = (columnData) => ({\n ...columnData,\n sortable: true,\n resizable: true,\n nestedPath: getNestedPathByColumnId(columnData.id),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: getCellValueRenderer(columnData.id)\n});\n\nconst getBasicTableColumnsData = map(getColumnDataByColumnId);\n\nexport {getBasicTableRowsData, getBasicTableColumnsData};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n tableContainer: {\n display: 'flex',\n fontFamily: 'Roboto',\n color: 'rgba(0,0,0,0.54)'\n },\n\n emptyData: {\n marginBottom: '30px'\n },\n\n '@global div[role=tooltip]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n\n '@global div[role=presentation]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n 'row-cell__buttons-container': {\n position: 'absolute'\n },\n 'row-cell__buttons-wrapper': {\n display: 'flex',\n paddingLeft: '10px',\n '& > button': {\n marginLeft: '-10px',\n transform: 'scale(0.9)'\n }\n }\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {IconButton as IconButton} from '@material-ui/core';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport i18n from 'ui-i18n';\n\nexport const EditButtons = ({canUpdate, canRemove, handleEditRelation, handleRemoveRelation}) => (\n <>\n {canUpdate && (\n <Tooltip title={i18n.text('Edit')}>\n <IconButton onClick={handleEditRelation}>\n <EditIcon />\n </IconButton>\n </Tooltip>\n )}\n {canRemove && (\n <Tooltip title={i18n.text('Remove')}>\n <IconButton onClick={handleRemoveRelation}>\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n )}\n </>\n);\nEditButtons.propTypes = {\n canUpdate: PropTypes.bool,\n canRemove: PropTypes.bool,\n handleEditRelation: PropTypes.func,\n handleRemoveRelation: PropTypes.func\n};\n\nexport default EditButtons;\n","import PropTypes from 'prop-types';\nimport React, {useCallback, useMemo, useState} from 'react';\nimport RowCellRenderer from './cell-renderers/RowCellRenderer';\nimport {BasicTable, ColumnFilterType, ColumnsDataType, SortingType} from '@reltio/components';\nimport {getBasicTableColumnsData, getBasicTableRowsData} from './helpers/dataHelpers';\nimport {useStyles} from './styles';\nimport {ConnectionType, MetadataType} from '@reltio/mdm-sdk';\nimport {path} from 'ramda';\nimport {checkRelationPermission} from './helpers/buttonsHelper';\nimport EditButtons from './EditButtons';\n\nconst MAX_HEIGHT = 477;\n\nconst RelationsTable = ({\n mode,\n columnsData,\n connections,\n metadata,\n sorting,\n onSort,\n filters,\n onFilter,\n onEditRelation,\n onRemoveRelation,\n basicTableRef,\n allowOnlyCreateNew\n}) => {\n const tableRowsData = useMemo(() => getBasicTableRowsData(connections, columnsData, metadata), [\n connections,\n columnsData,\n metadata\n ]);\n const tableColumnsData = useMemo(() => getBasicTableColumnsData(columnsData), [columnsData]);\n\n const styles = useStyles();\n\n const renderRowCell = useCallback(\n (props) => (\n <RowCellRenderer\n {...props}\n isSorted={!!sorting && sorting.field === props.columnData.id} /* eslint-disable-line react/prop-types */\n />\n ),\n [sorting]\n );\n\n const [hoverRowIndex, setHoverRowIndex] = useState(null);\n const {canRemove, canUpdate} = checkRelationPermission({\n mode,\n onRemoveRelation,\n onEditRelation,\n metadata,\n allowOnlyCreateNew,\n connection: path([hoverRowIndex, 'connection'], tableRowsData)\n });\n\n const handleOnRowHover = useCallback((rowIndex) => setHoverRowIndex(rowIndex), []);\n const handleEditRelation = useCallback(() => onEditRelation(path([hoverRowIndex, 'connection'], tableRowsData)), [\n hoverRowIndex,\n onEditRelation,\n tableRowsData\n ]);\n const handleRemoveRelation = useCallback(\n () => onRemoveRelation(path([hoverRowIndex, 'connection', 'relation', 'relationUri'], tableRowsData)),\n [hoverRowIndex, onRemoveRelation, tableRowsData]\n );\n\n const hoveredRowRightContent =\n canRemove || canUpdate ? (\n <EditButtons\n handleEditRelation={handleEditRelation}\n handleRemoveRelation={handleRemoveRelation}\n canRemove={canRemove}\n canUpdate={canUpdate}\n />\n ) : undefined;\n return (\n <div className={styles.tableContainer}>\n <BasicTable\n autosizing\n maxHeight={MAX_HEIGHT}\n columnsData={tableColumnsData}\n rowsData={tableRowsData}\n sorting={sorting}\n onSort={onSort}\n filters={filters}\n onFilter={onFilter}\n hoverStateEnabled={true}\n defaultColumnWidth={250}\n defaultColumnMinWidth={200}\n headRowHeight={56}\n renderRowCell={renderRowCell}\n onRowHover={handleOnRowHover}\n hoverRowIndex={hoverRowIndex}\n hoveredRowRightContent={hoveredRowRightContent}\n classes={{\n hoveredRowRightContentWrapper: styles['row-cell__buttons-wrapper'],\n hoveredRowRightContentContainer: styles['row-cell__buttons-container']\n }}\n ref={basicTableRef}\n resizeDebounceDelay={150}\n />\n </div>\n );\n};\n\nRelationsTable.propTypes = {\n mode: PropTypes.string,\n columnsData: ColumnsDataType,\n connections: PropTypes.arrayOf(ConnectionType),\n metadata: MetadataType,\n filters: PropTypes.objectOf(ColumnFilterType),\n onFilter: PropTypes.func,\n sorting: SortingType,\n onSort: PropTypes.func,\n onEditRelation: PropTypes.func,\n onRemoveRelation: PropTypes.func,\n basicTableRef: PropTypes.shape({current: PropTypes.object}),\n allowOnlyCreateNew: PropTypes.bool\n};\n\nexport default RelationsTable;\n","import {profile} from '@reltio/mdm-module';\nimport {checkMetadataForDelete, checkMetadataForUpdate, checkNew, checkRemoved, getRelationType} from '@reltio/mdm-sdk';\n\nconst checkRelationPermission = ({\n metadata,\n mode,\n connection,\n onRemoveRelation,\n onEditRelation,\n allowOnlyCreateNew\n}) => {\n const isNew = checkNew(connection);\n const isEditableMode = profile.mode.selectors.getIsEditableMode(mode);\n if (isEditableMode && connection && (!allowOnlyCreateNew || isNew)) {\n const {\n relation: {relationType}\n } = connection;\n const isRemoved = checkRemoved(connection);\n const relationTypeMetadata = getRelationType(metadata, relationType);\n const canRemove = onRemoveRelation && !isRemoved && checkMetadataForDelete(mode, relationTypeMetadata);\n const canUpdate = onEditRelation && !isRemoved && checkMetadataForUpdate(mode, relationTypeMetadata);\n return {canRemove, canUpdate};\n } else {\n return {canRemove: false, canUpdate: false};\n }\n};\n\nexport {checkRelationPermission};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n popupContent: {\n padding: '19px 23px'\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n }\n}));\n","import React, {useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Popover as Popover} from '@material-ui/core';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n showInactive: boolean;\n onShowInactiveChange: (value: boolean) => void;\n};\n\nconst MoreButton = ({className, showInactive, onShowInactiveChange}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const [isOpen, setIsOpen] = useState(false);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n return (\n <>\n <SmallIconButtonWithTooltip\n className={className}\n ref={buttonRef}\n tooltipTitle={i18n.text('More')}\n icon={MoreVertIcon}\n onClick={togglePopup}\n size=\"L\"\n />\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive || false}\n onChange={(e) => onShowInactiveChange(e.target.checked)}\n />\n }\n label={i18n.text('Show inactive Relationships')}\n />\n </Popover>\n </>\n );\n};\n\nexport default MoreButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n header: {\n padding: '0 4px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px',\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n },\n moreButton: {\n marginLeft: '-6px'\n }\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport {\n FacetViewHeader,\n ColumnsDataType,\n ColumnsSettings,\n FilterButton,\n HideOnShrink,\n VerticalDivider,\n ExpandableSearchInput\n} from '@reltio/components';\nimport MoreButton from './MoreButton/MoreButton';\nimport {useStyles} from './styles';\n\nconst RelationsTableHeader = ({\n title,\n total,\n searchQuery,\n onChangeSearchQuery,\n filtersEnabled,\n onToggleFilters,\n columnsData,\n selectedColumns,\n onChangeColumns,\n showInactive,\n onChangeShowInactive\n}) => {\n const styles = useStyles();\n return (\n <FacetViewHeader title={title} className={styles.header}>\n <HideOnShrink widthToHide={500}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {total > 1\n ? i18n.text('${count} entities', {count: total})\n : i18n.text('${count} entity', {count: total})}\n </Typography>\n </HideOnShrink>\n <ExpandableSearchInput query={searchQuery} onChange={onChangeSearchQuery} />\n <FilterButton enabled={filtersEnabled} onClick={onToggleFilters} />\n <VerticalDivider height={24} margin={4} />\n <ColumnsSettings\n columnsData={columnsData}\n selectedColumns={selectedColumns}\n onChangeColumns={onChangeColumns}\n />\n <MoreButton\n className={styles.moreButton}\n showInactive={showInactive}\n onShowInactiveChange={onChangeShowInactive}\n />\n </FacetViewHeader>\n );\n};\n\nRelationsTableHeader.propTypes = {\n title: PropTypes.string,\n total: PropTypes.number,\n columnsData: ColumnsDataType,\n selectedColumns: PropTypes.arrayOf(PropTypes.string),\n onChangeColumns: PropTypes.func,\n searchQuery: PropTypes.string,\n onChangeSearchQuery: PropTypes.func,\n filtersEnabled: PropTypes.bool,\n onToggleFilters: PropTypes.func,\n showInactive: PropTypes.bool,\n onChangeShowInactive: PropTypes.func\n};\n\nexport default RelationsTableHeader;\n","import {basicTableViewState, createStandardAction} from '@reltio/components';\n\nconst CHANGE_SEARCH_QUERY = 'CHANGE_SEARCH_QUERY';\nconst CHANGE_SHOW_INACTIVE = 'CHANGE_SHOW_INACTIVE';\n\nconst actions = {\n ...basicTableViewState.actions,\n changeSearchQuery: createStandardAction(CHANGE_SEARCH_QUERY),\n changeShowInactive: createStandardAction(CHANGE_SHOW_INACTIVE)\n};\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case CHANGE_SEARCH_QUERY:\n return {...state, searchQuery: action.payload, page: 0};\n case CHANGE_SHOW_INACTIVE:\n return {...state, showInactive: action.payload};\n default:\n return basicTableViewState.reducer(state, action);\n }\n};\n\nexport {reducer as default, actions};\n","import {ActivenessAttrTypes, attributeUriToSearchUri, DataTypes, getAttrDataTypeDefinition} from '@reltio/mdm-sdk';\nimport {concat, map, pipe, prop, subtract, uniqBy} from 'ramda';\nimport {getRelationsAttributesFromMetadata} from '../../core/relations';\nimport i18n from 'ui-i18n';\n\nconst ROWS_PER_PAGE_OPTIONS = [10, 25, 50, 100];\nconst getRowsPerPageOptions = (defaultRowsPerPage) =>\n ROWS_PER_PAGE_OPTIONS.filter((option) => option !== defaultRowsPerPage)\n .concat(defaultRowsPerPage)\n .sort(subtract);\n\nconst DEFAULT_COLUMNS_DATA = [\n {\n id: 'entity.label',\n get label() {\n return i18n.text('Entity label');\n },\n dataTypeDefinition: {\n type: DataTypes.TYPE_STRING\n },\n hideable: false\n },\n {\n id: 'relation.label',\n get label() {\n return i18n.text('Directional label');\n },\n dataTypeDefinition: {\n type: DataTypes.TYPE_STRING\n }\n },\n {\n id: 'relation.activeness.startDate',\n get label() {\n return i18n.text('Start date');\n },\n dataTypeDefinition: ActivenessAttrTypes.startDate\n },\n {\n id: 'relation.activeness.endDate',\n get label() {\n return i18n.text('End date');\n },\n dataTypeDefinition: ActivenessAttrTypes.endDate\n }\n];\n\nconst getColumnIdFromAttrUri = pipe(attributeUriToSearchUri, concat('relation.'));\n\nconst getColumnsDataFromRelationAttributes = pipe(\n map((attr) => ({\n id: getColumnIdFromAttrUri(attr.uri),\n label: attr.label,\n description: attr.description,\n dataTypeDefinition: getAttrDataTypeDefinition(attr)\n })),\n uniqBy(prop('id'))\n);\n\nconst getColumnsData = pipe(\n getRelationsAttributesFromMetadata,\n getColumnsDataFromRelationAttributes,\n concat(DEFAULT_COLUMNS_DATA)\n);\n\nexport {getRowsPerPageOptions, DEFAULT_COLUMNS_DATA, getColumnsData};\n","import {buildColumnsFilter} from '@reltio/components';\nimport {FilterBuilder, filterValueToQueryStringWithQuotes, Maybe} from '@reltio/mdm-sdk';\n\nexport const buildRelationsFilter = (searchQuery, filters, columnsData) => {\n const queryClause = Maybe.fromFalsy(searchQuery)\n .map(filterValueToQueryStringWithQuotes)\n .map(\n (queryString) =>\n `containsWordStartingWith(entity.label,${queryString})` +\n ' or ' +\n `containsWordStartingWith(relation.label,${queryString})`\n )\n .orSome('');\n\n const filtersClause = buildColumnsFilter(columnsData, filters);\n\n return new FilterBuilder().addClause(queryClause).addClause(filtersClause).build();\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n addArea: {\n display: 'flex',\n alignItems: 'center',\n height: '48px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.12)'\n },\n noData: {\n fontSize: '13px',\n paddingLeft: '20px',\n marginBottom: '20px',\n marginTop: '10px',\n color: 'rgba(0,0,0,0.54)'\n }\n});\n","import React, {useCallback, useContext, useEffect, useMemo, useReducer, useRef} from 'react';\nimport AddRelationButton from './AddRelationButton/AddRelationButton';\nimport RelationsTable from './RelationsTable/RelationsTable';\nimport RelationsTableHeader from './RelationsTableHeader/RelationsTableHeader';\nimport reducer, {actions} from './stateReducer';\nimport {\n BasicTablePagination,\n BasicView,\n LinearLoadIndicator,\n ProfilePerspectiveViewContext,\n useConfigPermissions,\n useRelationsLoader,\n RelationEditor,\n FeaturesContext\n} from '@reltio/components';\nimport {DEFAULT_COLUMNS_DATA, getColumnsData, getRowsPerPageOptions} from './helpers/tableHelpers';\nimport {pipe, pluck, propEq} from 'ramda';\nimport {buildRelationsFilter} from './helpers/relationsHelpers';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n isTempUri,\n ModeTypes,\n createNewConnectionWithDefaultRelationType,\n RelationsViewConfig,\n Entity,\n Metadata,\n Connection,\n Mode,\n ActivityFilter\n} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\nimport {Typography as Typography} from '@material-ui/core';\nimport i18n from 'ui-i18n';\nimport {Dispatch} from 'redux';\nimport {useSelector} from 'react-redux';\n\nconst DEFAULT_ROWS_PER_PAGE = 15;\nconst DEFAULT_SORT_ORDER = 'asc';\nconst DEFAULT_COLUMNS_TO_SHOW = pluck('id', DEFAULT_COLUMNS_DATA);\nconst [DEFAULT_SORT_FIELD] = DEFAULT_COLUMNS_TO_SHOW;\nconst DEFAULT_SHOW_INACTIVE = false;\n\ntype Props = {\n config: RelationsViewConfig;\n entity: Entity;\n metadata: Metadata;\n connections: Connection[];\n total: number;\n mode: Mode;\n className?: string;\n relationToAdd: Connection;\n relationsToEdit: Connection[];\n checkIfCanAddRelations: boolean;\n dispatch: Dispatch;\n readOnlyMode?: boolean;\n};\nconst RelationsTableView = ({\n className,\n config,\n entity,\n metadata,\n connections = [],\n total = 0,\n mode: modeProp,\n relationToAdd,\n relationsToEdit = [],\n checkIfCanAddRelations,\n dispatch: reduxDispatch,\n readOnlyMode\n}: Props) => {\n const initialState = {\n searchQuery: '',\n filters: null,\n visibleColumns: DEFAULT_COLUMNS_TO_SHOW,\n sorting: {\n order: config.sortOrder || DEFAULT_SORT_ORDER,\n field: config.sortColumn || DEFAULT_SORT_FIELD\n },\n page: 0,\n rowsPerPage: config.max || DEFAULT_ROWS_PER_PAGE,\n showInactive: DEFAULT_SHOW_INACTIVE\n };\n\n const styles = useStyles();\n const isProfilePerspectiveView = useContext(ProfilePerspectiveViewContext);\n const mode = isProfilePerspectiveView ? modeProp : ModeTypes.VIEWING;\n\n const [state, dispatch] = useReducer(reducer, initialState);\n const changeSearchQuery = pipe(actions.changeSearchQuery, dispatch);\n const changeShowInactive = pipe(actions.changeShowInactive, dispatch);\n const clearSearchQuery = () => {\n changeSearchQuery('');\n };\n const featuresContext = useContext(FeaturesContext);\n const showDescription = useSelector(mdmModule.selectors.getShowAttributeDescription);\n const features = useMemo(() => ({...featuresContext, showDescription}), [featuresContext, showDescription]);\n useEffect(clearSearchQuery, [entity?.uri]); //eslint-disable-line react-hooks/exhaustive-deps\n\n const {visibleColumns, searchQuery, filters, sorting, page, rowsPerPage, showInactive} = state;\n\n const allColumnsData = useMemo(() => getColumnsData(config, metadata), [config, metadata]);\n\n const visibleColumnsData = useMemo(\n () => visibleColumns.map((id) => allColumnsData.find(propEq('id', id))),\n [visibleColumns, allColumnsData]\n );\n\n const filter = useMemo(\n () => buildRelationsFilter(searchQuery, filters, visibleColumnsData),\n [filters, searchQuery] // eslint-disable-line\n );\n\n const {isLoading} = useRelationsLoader({\n sorting,\n filter,\n page,\n rowsPerPage,\n config,\n entity,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY,\n mode: modeProp\n });\n\n const rowsPerPageOptions = useMemo(() => getRowsPerPageOptions(initialState.rowsPerPage), []); // eslint-disable-line\n const {handleRowsPerPageChange, handlePageChange} = useMemo(\n () => ({\n handleRowsPerPageChange: pipe(actions.changeRowsPerPage, dispatch),\n handlePageChange: pipe(actions.changePage, dispatch)\n }),\n []\n );\n\n const onAddRelation = useCallback(() => {\n const newConnection = createNewConnectionWithDefaultRelationType({\n config,\n mode,\n metadata,\n parentEntityUri: undefined\n });\n pipe(profile.relations.actions.openRelationEditor(config.id), reduxDispatch)(newConnection);\n }, [config, mode, metadata, reduxDispatch]);\n\n const onRemoveRelation = useCallback(\n (relationUri) => {\n reduxDispatch(profile.relations.actions.closeRelationEditor(config.id, relationUri));\n reduxDispatch(profile.relations.actions.removeRelation(config.id, relationUri));\n const connectionToRemove = connections.find(\n (connection) => profile.relations.selectors.getRelationUriFromConnection(connection) === relationUri\n );\n const entityUri = profile.relations.selectors.getEntityUriFromConnection(connectionToRemove);\n if (isTempUri(entityUri)) {\n reduxDispatch(profile.modifiedEntities.actions.entityDeleted(entityUri));\n }\n },\n [config, connections, reduxDispatch]\n );\n\n const canAddRelations = entity && checkIfCanAddRelations && !readOnlyMode;\n const openedRelations = relationToAdd ? [relationToAdd, ...relationsToEdit] : relationsToEdit;\n const {canUpdate, canDelete} = useConfigPermissions();\n const canEditRelations = canUpdate(config) && !readOnlyMode;\n const canRemoveRelations = canDelete(config) && !readOnlyMode;\n const basicTableRef = useRef(null);\n\n return (\n <FeaturesContext.Provider value={features}>\n <BasicView className={className}>\n <RelationsTableHeader\n title={config.caption}\n total={total}\n columnsData={allColumnsData}\n selectedColumns={visibleColumns}\n onChangeColumns={pipe(actions.changeColumns, dispatch)}\n searchQuery={searchQuery}\n onChangeSearchQuery={changeSearchQuery}\n filtersEnabled={!!filters}\n onToggleFilters={pipe(actions.toggleFilters, dispatch)}\n showInactive={showInactive}\n onChangeShowInactive={changeShowInactive}\n />\n {canAddRelations && (\n <div className={styles.addArea}>\n <AddRelationButton onClick={onAddRelation} />\n </div>\n )}\n {openedRelations.map((relation) => (\n <RelationEditor\n key={profile.relations.selectors.getRelationUriFromConnection(relation)}\n connection={relation}\n config={config}\n mode={mode}\n metadata={metadata}\n />\n ))}\n <div style={{position: 'relative'}}>\n <RelationsTable\n mode={mode}\n columnsData={visibleColumnsData}\n connections={connections}\n metadata={metadata}\n filters={filters}\n onFilter={pipe(actions.changeFilter, dispatch)}\n sorting={sorting}\n onSort={pipe(actions.toggleSort, dispatch)}\n onEditRelation={\n canEditRelations\n ? pipe(profile.relations.actions.openRelationEditor(config.id), reduxDispatch)\n : null\n }\n onRemoveRelation={canRemoveRelations ? onRemoveRelation : null}\n basicTableRef={basicTableRef}\n allowOnlyCreateNew={config.allowOnlyCreateNew}\n />\n {connections.length ? (\n <BasicTablePagination\n count={total}\n rowsPerPageOptions={rowsPerPageOptions}\n rowsPerPage={rowsPerPage}\n onChangeRowsPerPage={handleRowsPerPageChange}\n page={page}\n onChangePage={handlePageChange}\n basicTableRef={basicTableRef}\n />\n ) : (\n <Typography className={styles.noData}>{i18n.text('No data found')}</Typography>\n )}\n {isLoading && <LinearLoadIndicator />}\n </div>\n </BasicView>\n </FeaturesContext.Provider>\n );\n};\n\nexport default RelationsTableView;\n","import {memoizeWith} from 'ramda';\nimport {connect} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {parseRelationsConfig} from '@reltio/mdm-sdk';\nimport RelationsTableView from './RelationsTableView';\n\nconst mapStateToProps = (state, ownProps) => {\n const {config} = ownProps;\n\n return {\n connections: mdm.selectors.getConnectionsWithDraftsByViewId(state, config.id),\n total: mdm.selectors.getTotalByViewId(state, config.id),\n entity: mdm.selectors.getEntity(state),\n metadata: mdm.selectors.getMetadata(state),\n mode: mdm.selectors.getMode(state),\n relationToAdd: mdm.selectors.getRelationToAddByViewId(state, config.id),\n relationsToEdit: mdm.selectors.getRelationsToEditByViewId(state, config.id),\n checkIfCanAddRelations: mdm.selectors.getCheckIfCanAddRelations(state, config.content)\n };\n};\n\nconst memoizedParseRelationsConfig = memoizeWith((metadata, config) => config.id, parseRelationsConfig);\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => ({\n ...stateProps,\n ...dispatchProps,\n ...ownProps,\n config: memoizedParseRelationsConfig(stateProps.metadata, ownProps.config)\n});\n\nexport default connect(mapStateToProps, undefined, mergeProps)(RelationsTableView);\n","import MomentUtils from '@date-io/moment';\nimport React from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport RelationsTableView from './RelationsTableView';\nimport {StylesProvider, createGenerateClassName} from '@material-ui/core/styles';\n\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport {Provider} from 'react-redux';\nimport {RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {identity} from 'ramda';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {Store} from 'redux';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'relTable',\n disableGlobal: true\n});\n\ntype Props = {\n config: RelationsViewConfig;\n store: Store;\n onResize?: (width: number, height: number) => void;\n className?: string;\n readOnlyMode?: boolean;\n};\n\nconst StandaloneRelationsTableView = ({config, store, onResize = identity, className, readOnlyMode}: Props) => (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n {config && <RelationsTableView config={config} className={className} readOnlyMode={readOnlyMode} />}\n <ErrorPopup />\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n);\n\nexport default StandaloneRelationsTableView;\n"],"names":["SingleAttributeContext","React","displayName","useStyles","makeStyles","triggerButton","minWidth","color","width","popupContent","paddingTop","paddingBottom","paddingLeft","paddingRight","maxWidth","checkboxControlRoot","marginTop","marginLeft","checkboxControlLabel","fontSize","checkboxControlCheckbox","marginRight","className","styles","buttonRef","useRef","isOpen","setIsOpen","useState","showInactive","toggleShowInactive","useContext","togglePopup","open","Button","ref","classes","root","classnames","onClick","Popover","paper","anchorEl","current","onClose","anchorOrigin","vertical","horizontal","transformOrigin","FormControlLabel","label","control","Checkbox","checked","onChange","e","target","i18n","padding","totalCaption","lineHeight","letterSpacing","flexShrink","justifyContent","ovIcon","SingleAttributeHeader","caption","totalVisibleValues","showInactiveValuesMenu","isEditableMode","searchQuery","setSearchQuery","setPage","totalNonVisibleValues","nonVisibleValues","attributeType","showRequiredMark","required","FacetViewHeader","title","RequiredMark","DescriptionIcon","description","HideOnShrink","widthToHide","VerticalDivider","height","margin","Typography","variant","OvIcon","nonOvTotal","nonOvValues","ExpandableSearchInput","query","getAttributeNameFromAttributeUri","getLastUriPart","search","value","Object","values","some","utils","String","getPagedLocalEntity","async","metadata","entity","attributeTypeUri","defaultMaxValues","Infinity","offset","pipe","findAttributeValuesByTypeUri","filter","ovValues","isOv","getAttributeSource","slice","paging","totalOvValues","length","totalValues","theme","moreButton","backgroundColor","marginBottom","buttonLabel","fontWeight","icon","divider","ovFalse","inactive","noData","palette","text","secondary","emptyArray","withContext","ScrollToErrorContext","contextValue","parentUri","error","highlightedError","isAttributeTypeError","uri","noDataText","isRequired","cardinality","name","dispatch","useDispatch","viewId","ViewIdContext","useSelector","mdmModule","modifiedEntity","state","errors","errorMessage","getAttributePagerActiveTypeErrorMessage","mode","attributeSource","entityValuesUris","pathOr","map","prop","modifiedEntityValues","modifiedEntityValuesUris","showEmptyEditors","isTempUri","emptyEditorValue","useMemo","createNewAttribute","errorClassName","useScrollToAttributeError","isSimple","isModifiedEntityValuesEmpty","isEmptyValue","showEmpty","newValues","onAddAttributes","useCallback","params","profile","param","onChangeAttribute","onDeleteAttribute","onDeactivateError","onAdd","attribute","isComplexAttribute","type","canCreate","checkCanCreateAttribute","commonProps","crosswalks","showNonOv","isEmptyAttributeList","isEmpty","CardinalityMessage","ErrorMessage","message","Add","idx","key","attributeValue","lazy","ownError","getAttributeOwnError","Divider","originalValue","modifiedEntityValue","find","propEq","deleted","includes","edited","value1","value2","cleanser","is","over","lensPath","cleanAttributesWith","valueTransformer","unless","omit","deleteEmptyComplex","identity","equals","areValuesEqual","cond","always","simpleAttribute","SingleAttributeReadableContent","style","display","flexDirection","content","position","overflow","flexGrow","pagination","DEFAULT_ROWS_PER_PAGE","SingleAttributeView","config","max","page","isLoading","hasPaging","entityUri","mdm","isViewMode","pivotingAttributes","hasValues","PivotingAttributeContext","BasicView","Box","LinearLoadIndicator","props","renderContent","BasicTablePagination","count","rowsPerPage","rowsPerPageOptions","onChangePage","useSingleAttributeLoader","attributeUri","setValues","setPaging","setIsLoading","safePromise","useSafePromise","attributeValuesRef","apiPath","tenant","isHistoryModeEnabled","diff","attributeTypeName","attributeTypeSource","findAttributeValues","findAttributeTypeByUri","globalFilter","loadAttributes","isReadableAttribute","isFirstLevelAttributeUri","rest","request","isDataTenantEntity","getPagedEntity","options","undefined","then","response","attributes","path","loadedValue","catch","console","ui","getRequestErrorMessage","finally","useEffect","useDidUpdateEffect","partitionByOv","partition","totalProp","ifElse","has","RelationsViewStateContext","button","sortControls","alignItems","sortSelectorRoot","flex","sortSelectorMenuItem","sortOrderButton","FilterButton","sortOrder","toggleSortOrder","sortOption","changeSortOption","sortOptions","hasSortOptions","isAsc","DropDownEditor","entries","TextFieldProps","menuItem","fullWidth","disableUnderline","MenuProps","getContentAnchorEl","SmallIconButton","tooltipTitle","ArrowUpwardIcon","ArrowDownwardIcon","size","header","ImportDTContext","MAX","Math","pow","cursor","top","left","userSelect","zIndex","badge","badgePosition","right","MultipleImportIcon","Badge","anchorOriginTopRightRectangle","badgeContent","CloudDownload","ImportFromDT","tenants","selectedTenant","onConfirmImport","onCancelConfirmation","onImportClick","dataTenants","reloadRelations","setTenants","setSelectedTenant","dtssPath","customerTenant","maxDtssImport","checkHasNonImportedConnections","importFromDT","Promise","all","hasNonImportedRelations","dataTenant","id","hasNonImportedConnections","modifiedTenants","importDTConnections","useImportFromDTLoader","oneTenant","labelOnButton","indexOf","CloudDownloadIcon","DropDownMenuButton","menuId","buttonComponent","SmallIconButtonWithTooltip","buttonProps","menuItems","ConfirmationDialog","discardCaption","saveCaption","onDiscard","onSave","total","changeSearchQuery","tooltip","tooltipContent","secondaryLabel","progress","children","tooltipProps","setSecondaryLabel","onOpen","isNil","getDataTenantEntitySecondaryLabel","getEntitySecondaryLabel","CircularProgress","colorPrimary","Tooltip","disableFocusListener","useRelationInfo","connection","relation","entityType","getEntityType","entityLabel","getLabel","preparedUri","getEntityUriForLink","relationLabel","getRelationTypeLabelFromMetadata","relationType","container","SuggestedButtons","acceptRelation","ignoreRelation","alignSelf","row","minHeight","rowInactive","background","inactiveBackground","entityAvatar","entityLabelContainer","textDecoration","primary","main","editButtonsContent","editButtons","removed","editedLabel","fontStyle","EditableRelationItem","memo","showControls","onRemoveRelation","onEditRelation","onAcceptRelation","onIgnoreRelation","renderRelationArrowButton","checkRemoved","checkEdited","ignored","checkIgnored","isActive","isActiveObject","canRemove","canUpdate","Mode","isRemoved","relationTypeMetadata","getRelationType","checkMetadataForDelete","checkMetadataForUpdate","checkRelationPermission","handleRemoveRelation","relationUri","handleEditRelation","handleAcceptRelation","handleIgnoreRelation","suggested","EditIcon","DeleteIcon","suggustedButtonsContent","disabled","captionText","EntityTypeIcon","EntityUriLink","getUri","when","isObject","getFirstRelationTypeObject","inRelations","outRelations","prepareRelation","direction","relations","wrapInArrayIfNeeded","Directions","concat","arrowIcon","RelationArrowButton","showSecondLevel","parentEntityUri","contentSecondLevel","checkNew","ArrowDropDown","ArrowRight","secondLevelContent","SecondLevelWrapper","connections","toggleShowSecondLevel","loadRelations","loading","relationActivityFilter","setShowSecondLevel","setLoading","activityFilter","requestConfig","returnObjects","returnDates","activeness","ActivityFilter","getRelationsForEntity","show","useSecondLevelConnections","entitiesMap","getEntitiesMapForConnections","EntitiesMapContext","RelationsContent","relationToAdd","relationsToEdit","checkIfCanAddRelations","onAddRelation","newConnection","createNewConnectionWithDefaultRelationType","connectionToRemove","defaultRelationTypeObject","connectionWithDefaultRelationType","evolve","object","relationDirection","newConnections","currentConnections","canAddRelations","isEmptyRelationList","getRelationEditableContent","openedRelation","allowOnlyCreateNew","itemKey","RelationEditor","shouldShowAddRelationButton","shouldShowRelationEditorToAdd","attributesList","RelationAttributes","currentEntityUri","firstLevelRelationAttrTypes","getRelationAttributesList","attributeListEntity","getActivenessAttributes","showAttributesList","getAttributesListForReadMode","objectIds","getAttributeValuesUris","getCommentsCount","CollaborationContext","additionalRelatedObjectUris","createRelatedObjectUris","CollaborationObjectTypes","RelatedObjectUrisContext","attrTypes","ShowDetailsButton","onToggle","tooltipPlacement","InfoIconSelected","InfoIcon","wordBreak","showDetails","suggestedWrapper","commentsContainer","additionalButtonsWrapper","labelWrapper","RelationItem","isSuggested","setShowDetails","relatedObjectUris","COMMENTS_CONTAINER_VISIBILITY_AREA","CommentsContainer","getConnectionRelationUriForLink","objectType","allowOnlyOneComment","getCountOfLikes","ratings","rating","getCountOfDislikes","calcWidthOfLikesScale","calcWidthOfDislikesScale","wrapper","averageRating","scale","likesScale","dislikesScale","counts","likesCount","Ratings","pluck","mean","defaultTo","calcAverageRating","toFixed","ThumbUp","ThumbDown","textTransform","likeButton","RatingsButtons","onAgree","onDisagree","username","ratingOfCurrentUser","user","endIcon","buttonContent","comment","entityTypeIcon","showDetailsButton","relationAttributes","RelationComplexItem","rateRelation","RelationsList","mainEnityUri","isComplex","relationTypeObject","ignoreSuggestedRelation","relatedEntityUri","startDate","endDate","isInDirection","startEntityUri","endEntityUri","createRelation","useSuggestedRelations","getRelationshipsObjectIdsForCollaboration","list","selectors","getEntity","getMode","RelationsView","getConnectionsWithDraftsByViewId","getTotalByViewId","sorting","order","field","queryClause","Maybe","filterValueToQueryStringWithQuotes","queryString","orSome","FilterBuilder","addClause","build","buildRelationsFilter","reload","useRelationsLoader","importDTContextValue","pick","EntityContext","Provider","TableAttributeContext","CHANGE_SEARCH_QUERY","actions","basicTableViewState","createStandardAction","reducer","action","payload","removedStyle","headCell","rowCell","blobWrapper","overflowY","overflowX","whiteSpace","maxHeight","boxSizing","defaultWrapper","textOverflow","updateAttribute","historyPalettes","HistoryOperations","insertAttribute","deleteAttribute","pointerEvents","withFilterAtBottom","headCellData","DefaultHeadCellRenderer","historyClassName","onScroll","stopPropagation","columnData","dataTypeDefinition","simpleValue","appearance","HistoryDiffContext","getHistoryAppearanceByUri","getHistoryAttributeClassName","DataTypes","dataTypeValue","DataTypeValue","ExpandedValueTooltip","getColumnsDataFromAttributeNode","attrNode","parents","reject","attributeUriToSearchUri","getAttrDataTypeDefinition","childNode","getAttrPathFromColumnId","split","getNestedPathByColumnId","columnId","isAttributeSearchUri","attrPath","getBasicTableColumnsData","sortable","resizable","nestedPath","headCellRenderer","HeadCellRenderer","rowCellValueRenderer","DefaultCellValueRenderer","filters","onToggleFilters","allColumnsData","visibleColumns","onChangeColumns","enabled","ColumnsSettings","columnsData","selectedColumns","withTableContext","deletedUris","rowValue","Boolean","cell","CellValueRenderer","isSorted","otherProps","index","tableContainer","fontFamily","transform","onEdit","onRemove","onSort","onFilter","tableRowsData","reduce","acc","assoc","getOvAttributeValuesByPathWithUri","getAttributeValues","getRowValueByColumnId","getBasicTableRowsData","tableColumnsData","checkIsEditableMode","renderRowCell","hoverRowIndex","setHoverRowIndex","canDelete","useConfigPermissions","hideRightContent","checkCanDeleteAttribute","isReltioCrosswalk","canEdit","checkCanEditAttribute","checkCanEdit","handleEditAttribute","handleRemoveAttribute","hoveredRowRightContent","context","BasicTable","autosizing","rowsData","hoverStateEnabled","defaultColumnWidth","defaultColumnMinWidth","headRowHeight","resizeDebounceDelay","onRowHover","hoveredRowRightContentWrapper","hoveredRowRightContentContainer","actionButtons","AttributeEditing","onCancel","onApply","hasChanges","shouldConnectAllModifiedEntities","isReference","getReferencedEntityUriFromAttrValue","allModifiedEntities","expanded","isMissedTypeError","ErrorType","findAttributeValueByError","curry","either","areOneHierarchyUris","addButton","editor","TableAttributeEditableContent","editingValues","modifiedValues","onStartEditing","onReset","checkHasChanges","highlightedAttributeError","hasConfigToCreate","shouldOpenInvalidEditors","listenToActions","useActionsHook","missedAttributeError","both","forEach","stopListeningActions","useExpandAttributes","checkIsAttributeTypeError","isPartOfErrorAttributeTypeUri","isPartOfErrorParentUri","newAttributeUri","setNewAttributeUri","originalValues","setOriginalValues","actualValues","not","newAttribute","createDefaultValues","attributeTypes","prev","editingValueOriginal","attributeItem","without","validate","tempEntitiesMap","validateComplexAttribute","evaluateErrorPath","getSingleAttributeEntity","original","useEditableAttribute","preparedValues","visibleColumnsData","TableAttributeView","showTable","nodeCounter","generateId","processResponse","fakeRoot","nodeId","parentPaths","i","nextRoot","j","nextParent","entities","isRoot","node","rootIndex","push","avatar","treeContainer","tree","buttonsContainer","ConfigContext","onImageLoadFail","src","DEFAULT_ICON","Node","absoluteImagePath","popperAnchor","setPopperAnchor","isSelected","entityTypeGraphIcon","getPropWithInheritance","getAbsoluteImageUrl","Avatar","alt","onError","HierarchyNodeTitle","getNodeKey","lineBlock","lineChildren","bottom","treeTheme","verticalLine","horizontalLineRight","textAlign","nodeContent","rowContents","borderLeft","verticalAlign","buttonWrapper","collapsedButton","expandedButton","transition","borderRight","borderTop","rowTitle","nodeContentRenderer","scaffoldBlockPxWidth","toggleChildrenVisibility","treeIndex","nodeTitle","showToggleChildrenButton","treeNodeRenderer","lowerSiblingCounts","scaffoldBlockCount","scaffold","lowerSiblingCount","shift","scaffoldWidth","nodeStyle","rowHeight","slideRegionSize","_extends","assign","arguments","source","prototype","hasOwnProperty","call","apply","this","viewBox","version","xmlns","stroke","strokeWidth","fill","fillRule","fillOpacity","d","onGraphOpen","showNavigateToGraph","FeaturesContext","ShowGraphIcon","getCacheKey","bodyWrapper","CustomView","basicViewRef","dialogRef","showModal","setShowModal","defaultTooltip","html","visible","updatedTooltip","customStyles","popup","useAPI","innerHTML","Array","from","childNodes","child","appendChild","Dialog","dragHandleContainer","dragHandleVisibilityArea","visibility","dragHandle","dragIcon","Component","WithDragHandle","DragIndicator","WithErrorBoundary","ErrorBoundary","EmptyState","LogoRenderer","EMPTY_STATE_ICONS","secondaryText","EMPTY_STATE_VARIANTS","stubView","fullHeight","component","boxShadow","borderRadius","filterWrongLat","gt","lt","fullscreenBtn","ImageLineCaption","totalImages","photoWord","ImageAttributeViewEditableContent","requestNextPageOfAttributeValues","attributeValues","imageSize","IMAGE_SIZE","imageMargin","imageWidth","imageHeight","ActionButtons","match","onStartRequest","onFinishRequest","canMerge","canMark","getActionPermissionForMatch","matchRules","actionButtonProps","ActionButtonMode","onMergeFinish","MergeButton","NotMatchButton","MatchCard","ProfileMatchCard","createObjectIdForPM","matchEntityUri","matchesContainer","footer","DEFAULT_OPTIONS","showTransitiveMatches","showInactiveEntities","DEFAULT_SORTING","Order","ComponentStates","wrapView","withErrorBoundary","withDragHandle","WrappedStubView","WrappedProfileAttributesView","AttributesView","excludeUris","includeUris","attributesCount","pinnedAttributes","WrappedProfileSingleAttributeView","singleAttribute","setShowInactive","useSingleAttribute","WrappedProfileTableAttributeView","tableAttribute","getAttributeTypesTree","chain","flatAttributeTreeNode","uniqBy","getColumnsData","initialState","useReducer","requestFilters","mdmFilters","columnFilter","columnFilterToMdmFilter","buildMDMFilters","changePage","toggleSort","changeFilter","toggleFilters","changeColumns","useActions","hidden","useTableAttribute","WrappedProfileRelationsView","parsedConfig","parseRelationsConfig","relationsState","append","Number","setSortOrder","setSortOption","option","useRelationsState","WrappedCustomView","WrappedHierarchyPathView","graph","graphType","treeData","setTreeData","graphUri","setErrorMessage","forest","newTrees","updateTreesWithNewEntity","updatedTime","getPathsTree","warn","useLoadPaths","onResize","getRowHeight","clearHeightsCache","heightsCache","setHeightsCache","_","prevCache","useDynamicNodesHeights","openGraph","generateNodeProps","rowInfo","handleHeight","refreshMode","refreshRate","ReactSortableTree","isVirtualized","canDrag","WrappedProfilePotentialMatchesView","turnOnDisableSpinner","turnOffDisableSpinner","matches","loadMatches","useMatchesLoader","onStartLoading","onFinishLoading","onFinishMatchAction","openPotentialMatchPerspective","mdmModuleUi","perspectiveId","getPotentialMatchesObjectIdsForCollaboration","getEntityUriFromMatchObject","showSeeAll","Loading","NoData","Loaded","Link","underline","WrappedHierarchyTreeView","importedModule","default","HierarchyTreeView","WrappedRelationshipsTableView","RelationshipsTableView","WrappedEntityMapView","isFullscreen","onToggleFullscreen","mapKey","markers","setMarkers","resolve","useMarkers","loadingElement","defaultCenter","lat","lng","mapOptions","mapTypeControl","FullscreenExitIcon","FullscreenIcon","ReltioMap","defaultZoom","mapContainerClassName","WrappedImageAttributeView","entityValues","ImageAttributesLine","ViewsFactory","ViewTypes","ProfileViewTypes","getComponentBy","propName","store","HierarchyTree","HierarchyPaths","RelationsTable","Relations","Attributes","SingleAttribute","AttributeTable","Map","Custom","ImageAttribute","PotentialMatches","getComponent","Fallback","ViewComponent","isAutosize","Suspense","fallback","item","basicView","fixedSizeContainer","omittingProps","ProfileLayoutItem","layoutItemConfig","views","ResizeComponent","AutosizeComponent","ReactReduxContext","isCustomView","class","platform","CustomScriptPlatform","reltioClass","getViewTypeByClass","scrollWrapper","scrollableContent","scrollbarWidth","ProfileLayout","layout","onLayoutChanged","scrollWrapperRef","element","offsetWidth","clientWidth","boundariesElement","popupBoundariesValue","priority","scrollTop","PopupBoundariesContext","ReltioGridLayout","LayoutItem","draggableHandle","closeIcon","snackbar","flexWrap","Notification","notification","autoCloseInterval","autoHideDuration","setAction","setShow","closeSnackbar","_e","reason","cancelAction","onConfirm","applyAction","needConfirmation","CloseIcon","Portal","document","body","Snackbar","confirmationText","confirmationDescription","Notifications","notifications","n","xmlnsXlink","xlinkHref","mask","editingButtons","searchResults","comments","SuggestIcon","SvgIcon","CopyIcon","filterGroupByPermissions","group","isTempEntity","isWorkflowEnabled","canStartProcessInstanceSearchQuery","permission","isSuggestMode","checkMetadataPermission","PerspectiveProfileBand","profileBandConfig","profileOperation","entityTypeUri","isOperationSaving","Operation","isDisabledButtons","openCloneConfirmationDialog","setOpenCloneConfirmationDialog","onCloneDiscard","onClone","cloneAction","cloneActionProp","relationTypes","isRelationSuitableForEntityType","isRelationWithEntityType","complement","propOr","modifiedRelationTypes","getRelationTypeUriFromAttrType","T","data","relationshipTypesToCopy","useCloneAction","OPTIONS_GROUP","ModeTypes","CreateIcon","VisibilityIcon","BUTTONS_GROUP","window","confirm","shouldShowSelect","MetadataPermissions","hasOnlyReadPermission","accessibleOptionsGroup","accessibleButtonsGroup","handleChange","handleSave","ProfileBand","mr","ProfileBandHistory","ProfileBandNavigation","ModeSwitcherSelect","optionsGroup","buttonsGroup","WorkflowButton","WorkflowTasksContext","Inbox","showMoreLink","showMoreIcon","CollaborationList","getComments","pageToken","useCommentsEntitiesMap","objectId","commentId","CollaborationItem","KeyboardArrowDown","WorkflowList","tasks","task","WorkflowTaskCard","taskId","CollaborationButton","commentsMap","calcTotalCommentItems","CollaborationIcon","SidePanelEmptyState","itemWrapper","DBConnectorsList","dBConnectorSideViews","sideView","ActivePanel","getSecondTitle","RightSidePanel","isWorkflowSideViewEnabled","isCollaborationSideViewEnabled","isDBConnectorSideViewEnabled","isCollaborationEnabled","historyEvent","workflowTasksContext","collaborationContext","active","setActive","Collaboration","toggleActive","newId","resetActive","isHistoryTabActive","History","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","historyFilter","onApplyFilter","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","enabledWorkflowButton","enabledCollaborationButton","collaborationTotal","elements","Workflow","headerProps","mainTitle","secondTitle","rightContent","AddWorkflowButton","HistoryIcon","HistoryView","contributorsUris","HistoryPanelEmptyState","HistoryHeader","DBConnector","ConnectorsIcon","visibleElements","SidePanel","SidePanelContentHeader","SideButtonsPanel","buttonsProps","onButtonClick","activeIndexId","accordionSummaryHeight","defaultBorderStyle","accordion","borderBottom","accordionExpanded","accordionSummary","accordionSummaryHeading","typography","pxToRem","fontWeightRegular","accordionSummaryExpanded","accordionSummaryContent","accordionDetails","errorWrapper","errorTitle","attributeTypesPath","goToIcon","errorsAccordion","borderColor","errorsAccordionDetails","warningsAccordion","warningsAccordionDetails","errorIcon","warningIcon","ErrorsPanel","panels","expandedPanelId","ErrorComponent","items","accordionClassName","accordionDetailsClassName","Accordion","square","AccordionSummary","expandIcon","ExpandMore","AccordionDetails","clipRule","clearError","Error","displayedMessage","ErrorSource","attrType","getDisplayedErrorMessage","displayedErrorPath","errorPath","AttributeValuePathItemType","join","getDisplayedErrorPath","displayedAttributeTypesPath","getDisplayedAttributeTypesPath","highlightError","showLink","HyperlinkIcon","ProfileErrorsPanel","cachedAllErrors","allErrors","cacheForAllErrors","errors1","errors2","areErrorsEqual","useCachedErrors","warnings","isCriticalError","setExpandedPanelId","number","panelId","event","isExpanded","emptyState","perspectiveView","profileWrapper","profileContainer","ProfilePerspectiveView","saveState","getSavedState","profileBand","workflow","isHistoryActive","keywordValue","historyDiff","useHistoryDiff","workflowTasks","workflowConfig","commonWorkflowTasks","useCommonWorkflowTasks","defaultActionSuccessHandler","useWorkflowDefaultActionSuccessHandler","onActionSuccess","useWorkflowTasks","getProfileObjectIdsForCollaboration","emptyCollaboration","collaboration","useCollaboration","isLoaded","handleLayoutChange","profileConfig","setLayout","setViews","canRead","validatedViews","validatedLayout","removeUnsupportedLayoutItems","configHash","hash","nestedRoute","savedStateKey","getSavedStateAndFix","debouncedSaveState","debounce","savedState","updateSavedState","useSavedStateForEntityType","isConfigChanged","fixedViews","fixedLayout","fixNonUniqViewsIds","useProfileLayout","useHistorySlice","isValidateReadMode","isDTEntity","profileViews","hasProfileViews","needDispatch","useProfileValidation","sidePanelViews","hideLayout","ProfilePerspectiveViewContext","SearchValueContext","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","userPreferencesComparator","newState","sortLayoutItems","sort","a","b","x","y","prepareState","looseEquals","qxSandboxApi","getSavedStatePromisified","promisifyCallback","SnackbarRenderer","showSnackbarMessage","useSnackbar","processedConfig","convertOldProfileConfig","featuresContext","showDescription","getState","features","SnackbarContext","S","SandboxAPIContext","StylesProvider","MuiPickersUtilsProvider","MomentUtils","floor","ErrorPopup","showErrorFromStore","titleContainer","link","totalNumber","TagListHeader","switchToProfile","ArrowForwardIosRounded","Spacer","toolbar","TagProfileBand","Toolbar","tagsContainer","tagsView","listContainer","entitiesList","ROWS_PER_PAGE_OPTIONS","TagPerspectiveView","tag","setRowsPerPage","globalSearchRequestOptions","safeRequestTotalPromise","safeRequestEntitiesPromise","setTotal","setEntities","requestEntities","requestTotal","getDataTenantFromEntityUri","fieldName","isDT","getEntities","requestOptions","select","getFilteredEntitiesFromDataTenant","enrichEntityWithDataTenant","getFilteredEntities","getTotalFromDataTenant","getTotals","json","useTagsProvider","useTag","refScrollBlock","hasPagination","ProfilesList","onChangeRowsPerPage","actionsWrapper","DCRProfileBand","entityTask","objectURIs","getEntityUriFromDCRUri","TaskActionButtons","perspectiveContainer","attributesWrapper","contentWrapper","processTypes","DCRReviewPerspectiveView","actionSuccessHandler","point","AddRelationButton","propTypes","PropTypes","inactiveStyle","entityCell","RowCellRenderer","EntityProfileRenderer","EntityTypeType","getRelationTypes","rel","uniq","startsWith","emptyData","EditButtons","IconButton","Edit","Delete","basicTableRef","getOvAttributeValuesByPath","getRelationAttributeValues","isNew","handleOnRowHover","rowIndex","ColumnsDataType","ConnectionType","MetadataType","ColumnFilterType","SortingType","onShowInactiveChange","MoreVertIcon","RelationsTableHeader","onChangeSearchQuery","filtersEnabled","onChangeShowInactive","CHANGE_SHOW_INACTIVE","changeShowInactive","DEFAULT_COLUMNS_DATA","hideable","ActivenessAttrTypes","getColumnIdFromAttrUri","getColumnsDataFromRelationAttributes","attr","getReadableAttributesList","addArea","DEFAULT_COLUMNS_TO_SHOW","DEFAULT_SORT_FIELD","memoizedParseRelationsConfig","memoizeWith","connect","ownProps","stateProps","dispatchProps","modeProp","reduxDispatch","readOnlyMode","sortColumn","filtersClause","buildColumnsFilter","getRowsPerPageOptions","defaultRowsPerPage","subtract","handleRowsPerPageChange","handlePageChange","changeRowsPerPage","openedRelations","canEditRelations","canRemoveRelations"],"sourceRoot":""}
|