@reltio/remotes 1.4.1713 → 1.4.1715
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/1088.js +1 -1
- package/1148.js +1 -1
- package/1215.js +1 -1
- package/1334.js +1 -1
- package/1425.js +1 -1
- package/1550.js +1 -1
- package/1550.js.map +1 -1
- package/1664.js +1 -1
- package/1707.js +1 -1
- package/1840.js +1 -1
- package/2066.js +1 -1
- package/2345.js +1 -1
- package/2345.js.map +1 -1
- package/2383.js +1 -1
- package/2400.js +1 -1
- package/2617.js +1 -1
- package/2857.js +1 -1
- package/2966.js +1 -1
- package/3004.js +1 -1
- package/3096.js +1 -1
- package/3144.js +1 -1
- package/3191.js +1 -1
- package/3209.js +1 -1
- package/3348.js +1 -1
- package/3381.js +1 -1
- package/3383.js +1 -1
- package/3463.js +1 -1
- package/3469.js +1 -1
- package/3538.js +1 -1
- package/3639.js +1 -1
- package/3785.js +1 -1
- package/393.js +1 -1
- package/4038.js +1 -1
- package/4143.js +1 -1
- package/4143.js.map +1 -1
- package/415.js +1 -1
- package/4212.js +1 -1
- package/4444.js +1 -1
- package/4481.js +1 -1
- package/4787.js +1 -1
- package/4838.js +1 -1
- package/4969.js +1 -1
- package/50.js +1 -1
- package/5039.js +1 -1
- package/5177.js +1 -1
- package/5201.js +1 -1
- package/5201.js.map +1 -1
- package/5292.js +1 -1
- package/5383.js +1 -1
- package/5738.js +1 -1
- package/5738.js.map +1 -1
- package/5769.js +1 -1
- package/6287.js +1 -1
- package/6422.js +1 -1
- package/6506.js +1 -1
- package/6578.js +1 -1
- package/658.js +1 -1
- package/6799.js +1 -1
- package/6844.js +1 -1
- package/6903.js +1 -1
- package/7074.js +1 -1
- package/7119.js +1 -1
- package/7237.js +1 -1
- package/7340.js +1 -1
- package/735.js +1 -1
- package/7407.js +1 -1
- package/7422.js +1 -1
- package/7468.js +1 -1
- package/7626.js +1 -1
- package/7719.js +1 -1
- package/7744.js +1 -1
- package/7802.js +1 -1
- package/7896.js +1 -1
- package/820.js +1 -1
- package/8207.js +1 -1
- package/8216.js +1 -1
- package/829.js +1 -1
- package/8741.js +1 -1
- package/8786.js +1 -1
- package/9016.js +1 -1
- package/9032.js +1 -1
- package/9050.js +1 -1
- package/9109.js +1 -1
- package/9283.js +1 -1
- package/9328.js +1 -1
- package/9387.js +1 -1
- package/9719.js +1 -1
- package/main.js +1 -1
- package/package.json +1 -1
- package/remoteEntry.js +1 -1
package/5201.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"5201.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/ProfileLayoutItemHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItemHeader/ProfileLayoutItemHeader.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/ProfileLayoutItemNoData/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItemNoData/ProfileLayoutItemNoData.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/SingleAttributeViewSkeleton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeViewSkeleton/SingleAttributeViewSkeleton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItemContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItemContent/ProfileLayoutItemContent.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/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/RatingsPopup/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RatingsPopup/RatingsPopup.tsx","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/RelationsContentSkeleton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsContentSkeleton/RelationsContentSkeleton.tsx","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/ProfileRelationsTableView/components/AddRelationButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/AddRelationButton/AddRelationButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/cell-renderers/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/cell-renderers/RowCellRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/cell-renderers/EntityProfileRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/cell-renderers/HeadCellRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/helpers/relations.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/helpers/dataHelpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/EditButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/contexts/RelationsTableViewStateContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/RelationsTable.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/helpers/buttonsHelper.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTableHeader/MoreButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTableHeader/MoreButton/MoreButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTableHeader/RelationsTableHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTableSkeleton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTableSkeleton/RelationsTableSkeleton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTableView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTableView/RelationsTableView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/hooks/reducer.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/helpers/tableHelpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/hooks/useRelationsTableState.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/hooks/useTableAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTableHeader/AttributeTableHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/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/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/TableAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/TableAttributeView.tsx","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/HierarchyViewSkeleton/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyViewSkeleton/HierarchyViewSkeleton.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyViewHeader/icons/SelectNode.svg","webpack://@reltio/remotes/../profile/src/components/HierarchyViewHeader/icons/ShowGraph.svg","webpack://@reltio/remotes/../profile/src/components/HierarchyViewHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyViewHeader/HierarchyViewHeader.tsx","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/helpers.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/hooks/useDynamicNodesHeights.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/hooks/useLoadPaths.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/HierarchyPathsView.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/HierarchyPanel/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/theme/utils.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/theme/node-content-renderer.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/treeThemeContext.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/theme/tree-node-renderer.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/theme/index.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/constants/prop-types.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/measureHelpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/nodeHelpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/Tree.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/commonStyles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/LoadingNode/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/LoadingNode/LoadingNode.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/RegularNode/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/RegularNode/multiParentOverlap.svg","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/MultiParentBlockItem/parentIcon.svg","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/MultiParentBlockItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/MultiParentBlockItem/MultiParentBlockItem.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/MultiParentBlock/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/MultiParentBlock/MultiParentBlock.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/RelationDetails/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/generateId.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/treeDataProvider.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/treeHelpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/nodeHelpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/RelationDetails/RelationDetails.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/ActionsBlock/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/ActionsBlock/ActionsBlock.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/configHelpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/RegularNode/helpers/nodeMappingHelpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/nodeContext.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/RegularNode/RegularNode.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/NodeRelationTypeSelector/NodeRelationTypeSelector.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/EditorNode/helpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/EditorNode/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/EditorNode/EditorNode.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/NodesFactory.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/Node.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/HierarchyPanel/HierarchyPanel.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/GraphTypeSelector/GraphTypeSelector.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/ActivenessDateControl/ActivenessDateControl.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/FilterSortButton/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/FilterSortButton/FilterSortButton.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Breadcrumbs/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Breadcrumbs/Breadcrumbs.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/saveStateHelpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/HierarchyTreeToolbar/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/HierarchyTreeToolbar/HierarchyTreeToolbar.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/useTreeLoader.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/useNewEntityTree.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/HierarchyTreeView.tsx","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/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/ProfilePotentialMatchesViewSkeleton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/ProfilePotentialMatchesViewSkeleton/ProfilePotentialMatchesViewSkeleton.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/helpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/ProfileRelationsView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useRelationsState.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/ProfileRelationsTableView.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/PerspectiveProfileBand.tsx","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/hooks/useCloneAction.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/RightSidePanel.tsx","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/components/WorkflowButton/WorkflowButton.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/icons/ConnectorsIcon.svg","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/components/WorkflowPanelEmptyState/WorkflowPanelEmptyState.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/CollaborationPanelEmptyState/CollaborationPanelEmptyState.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/hooks/useProfileRightSidePanelElements.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveResizablePanes/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveResizablePanes/ProfilePerspectiveResizablePanes.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/hooks/useProfileLayout.ts","webpack://@reltio/remotes/../profile/src/components/BackgroundProcessIndicator/styles.ts","webpack://@reltio/remotes/../profile/src/components/BackgroundProcessIndicator/BackgroundProcessIndicator.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/hooks/useBackgroundProcessIndicator.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/ProfilePerspectiveView/hooks/useWorkflowTasks.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/hooks/data/backgroundUpdateDalay.ts","webpack://@reltio/remotes/../profile/src/components/hooks/useProfileValidation.ts","webpack://@reltio/remotes/../profile/src/perspectives/helpers.ts","webpack://@reltio/remotes/../profile/src/perspectives/ProfilePerspective.tsx","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/hooks/useWorkflowTasks.ts","webpack://@reltio/remotes/../profile/src/components/DCRReviewPerspectiveView/styles.ts","webpack://@reltio/remotes/../profile/src/components/DCRReviewPerspectiveView/DCRReviewPerspectiveView.tsx","webpack://@reltio/remotes/../profile/src/perspectives/DCRReviewPerspective.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 '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n triggerButton: {\n minWidth: 0,\n color: 'rgba(0,0,0,0.54)'\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 from '@mui/material/Popover';\nimport IconButton from '@mui/material/IconButton';\nimport FilterIcon from '@mui/icons-material/FilterList';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\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 [isOpen, setIsOpen] = useState(false);\n const {showInactive, toggleShowInactive} = useContext(SingleAttributeContext);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n return (\n <>\n <IconButton\n ref={buttonRef}\n data-reltio-id=\"reltio-filter-button\"\n classes={{root: classnames(styles.triggerButton, className)}}\n onClick={togglePopup}\n >\n <FilterIcon />\n </IconButton>\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 '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n padding: '0px 0px 0px 16px'\n },\n rightMenuItems: {\n display: 'flex',\n flex: '1 1 auto',\n justifyContent: 'flex-end',\n alignItems: 'center',\n paddingRight: '8px',\n marginLeft: '8px'\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}));\n","import React from 'react';\nimport Typography from '@mui/material/Typography';\nimport {DescriptionIcon, FacetViewHeader, HideOnShrink, RequiredMark, VerticalDivider} from '@reltio/components';\nimport {useStyles} from './styles';\n\ntype Props = {\n title: string;\n description?: string;\n totalText?: string;\n children?: React.ReactNode;\n extra?: React.ReactNode;\n isRequired?: boolean;\n};\n\nexport const ProfileLayoutItemHeader = ({title, description, extra, children, totalText, isRequired}: Props) => {\n const styles = useStyles();\n return (\n <FacetViewHeader title={title} className={styles.root}>\n {isRequired && <RequiredMark />}\n <DescriptionIcon description={description} />\n {totalText && (\n <HideOnShrink widthToHide={400}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {totalText}\n </Typography>\n </HideOnShrink>\n )}\n {extra}\n <div className={styles.rightMenuItems}>{children}</div>\n </FacetViewHeader>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n ovIcon: {\n marginLeft: '5px'\n }\n}));\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {ExpandableSearchInput, OvIcon} from '@reltio/components';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport FilterButton from '../FilterButton/FilterButton';\nimport {ProfileLayoutItemHeader} from '../../../ProfileLayoutItemHeader/ProfileLayoutItemHeader';\n\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 isRequired = isEditableMode && attributeType?.required;\n const totalText =\n totalVisibleValues === 1\n ? i18n.text('${count} item', {count: totalVisibleValues})\n : i18n.text('${count} items', {count: totalVisibleValues});\n return (\n <ProfileLayoutItemHeader\n title={caption}\n totalText={totalText}\n description={attributeType?.description}\n isRequired={isRequired}\n extra={\n <OvIcon\n nonOvTotal={totalNonVisibleValues}\n className={styles.ovIcon}\n nonOvValues={nonVisibleValues}\n attributeType={attributeType}\n />\n }\n >\n <ExpandableSearchInput query={searchQuery} onChange={handleChangeSearchQuery} />\n {showInactiveValuesMenu && <FilterButton />}\n </ProfileLayoutItemHeader>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n noData: {\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport Typography from '@mui/material/Typography';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n text?: string;\n};\n\nexport const ProfileLayoutItemNoData = ({className, text}: Props) => {\n const styles = useStyles();\n return (\n <Typography className={classnames(styles.noData, className)}>{text || i18n.text('No data found')}</Typography>\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} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n messagesContainer: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start'\n },\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px',\n marginLeft: '-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 borderColor: 'rgba(0,0,0,0.12)'\n },\n ovFalse: theme.inactive,\n noData: {\n padding: '8px 0px'\n }\n}));\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {always, cond, isEmpty, map, pathOr, pipe, prop, propEq, omit} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport Button from '@mui/material/Button';\nimport AddIcon from '@mui/icons-material/Add';\nimport Divider from '@mui/material/Divider';\nimport {\n CardinalityMessage,\n EditableAttribute,\n ErrorMessage,\n isHighlightedErrorType,\n ScrollToElementContext,\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 AttributeError\n} from '@reltio/mdm-sdk';\nimport {ProfileLayoutItemNoData} from '../../../ProfileLayoutItemNoData/ProfileLayoutItemNoData';\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 ScrollToElementContext>;\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: omit(['defaultValue'], 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 createAttribute = (attributeType: AttributeType): AttributeItem => ({parentUri, attributeType});\n\n if (showEmpty && !isComplexAttribute(attributeType.type)) {\n const attributes = [createAttribute(omit(['defaultValue'], attributeType)), createAttribute(attributeType)];\n return onAddAttributes(attributes);\n }\n\n return onAddAttributes([createAttribute(attributeType)]);\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 <div className={styles.messagesContainer}>\n <CardinalityMessage cardinality={cardinality} />\n <ErrorMessage message={errorMessage} />\n </div>\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 isEmptyEditor={showEmpty}\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 && <ProfileLayoutItemNoData className={styles.noData} text={noDataText} />}\n </div>\n )\n );\n};\n\nexport default withContext(\n ScrollToElementContext,\n (contextValue, {parentUri, attributeType}) => {\n const {element, type} = contextValue || {};\n const isHighlighted =\n isHighlightedErrorType(type) &&\n isAttributeTypeError(element as AttributeError, parentUri, attributeType.uri);\n return {highlightedError: isHighlighted ? contextValue : null};\n },\n SingleAttributeEditableContent\n);\n","import {makeStyles} from '@mui/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 '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n content: {\n padding: '8px 16px',\n '& $label': {\n '&:nth-child(1)': {\n width: '60%'\n },\n '&:nth-child(2)': {\n width: '40%'\n }\n }\n },\n label: {\n fontSize: '1rem'\n }\n}));\n","import React from 'react';\nimport Skeleton from '@mui/material/Skeleton';\nimport {useStyles} from './styles';\n\nexport const SingleAttributeViewSkeleton = () => {\n const styles = useStyles();\n return (\n <div className={styles.content}>\n <Skeleton className={styles.label} />\n <Skeleton className={styles.label} />\n </div>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n container: {\n position: 'relative'\n },\n noData: {\n fontSize: '13px',\n padding: '8px 16px',\n color: 'rgba(0,0,0,0.54)'\n }\n}));\n","import React, {useEffect, useState} from 'react';\nimport classnames from 'classnames';\nimport {LinearLoadIndicator} from '@reltio/components';\nimport {ProfileLayoutItemNoData} from '../ProfileLayoutItemNoData/ProfileLayoutItemNoData';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n containerClassName?: string;\n isLoading?: boolean;\n isEmptyData?: boolean;\n noDataText?: string;\n skeleton?: React.ReactNode;\n toolbar?: React.ReactNode;\n pagination?: React.ReactNode;\n children: React.ReactNode;\n};\n\nconst useLoadedOnce = (isLoading: boolean) => {\n const [isStartedLoading, setIsStartedLoading] = useState(false);\n const [isLoadedOnce, setIsLoadedOnce] = useState(false);\n\n useEffect(() => {\n if (isLoading) {\n setIsStartedLoading(true);\n } else if (isStartedLoading) {\n setIsLoadedOnce(true);\n }\n }, [isLoading, isStartedLoading]);\n\n return isLoadedOnce || !isStartedLoading;\n};\n\nexport const ProfileLayoutItemContent = ({\n children,\n className,\n containerClassName,\n skeleton,\n toolbar,\n noDataText,\n isLoading = false,\n isEmptyData = false,\n pagination = null\n}: Props) => {\n const styles = useStyles();\n const isLoadedOnce = useLoadedOnce(isLoading);\n\n const renderContent = () => {\n if (!isLoadedOnce && skeleton && isLoading) {\n return skeleton;\n }\n if (isEmptyData) {\n return <ProfileLayoutItemNoData className={styles.noData} text={noDataText} />;\n }\n return <div className={className}>{children}</div>;\n };\n\n const shouldRenderToolbar = isLoadedOnce || !skeleton;\n const shouldRenderPagination = (isLoadedOnce || !skeleton) && !isEmptyData;\n\n return (\n <>\n <div className={classnames(styles.container, containerClassName)}>\n {isLoading && <LinearLoadIndicator />}\n {shouldRenderToolbar && toolbar}\n {renderContent()}\n </div>\n {shouldRenderPagination && pagination}\n </>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n padding: '8px 16px',\n overflow: 'hidden',\n flexGrow: 1\n },\n pagination: {\n flexGrow: 0,\n flexShrink: 0\n }\n}));\n","import React, {useContext} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport mdm from '@reltio/mdm-module';\nimport {PivotingAttribute, SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {BasicView, BasicTablePagination, PivotingAttributeContext} from '@reltio/components';\nimport {SingleAttributeHeader} from '../SingleAttributeHeader/SingleAttributeHeader';\nimport SingleAttributeEditableContent from '../SingleAttributeEditableContent/SingleAttributeEditableContent';\nimport {SingleAttributeReadableContent} from '../SingleAttributeReadableContent/SingleAttributeReadableContent';\nimport {SingleAttributeViewSkeleton} from '../SingleAttributeViewSkeleton/SingleAttributeViewSkeleton';\nimport {ProfileLayoutItemContent} from '../../../ProfileLayoutItemContent/ProfileLayoutItemContent';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\n\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 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'];\n const isEmptyData = !attributeType || (!isEditableMode && !hasValues);\n const commonProps = {values, showInactive, attributeType};\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 <ProfileLayoutItemContent\n className={styles.content}\n noDataText={noDataText}\n isLoading={isLoading}\n skeleton={<SingleAttributeViewSkeleton />}\n pagination={\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 }\n isEmptyData={isEmptyData}\n >\n {isEditableMode ? (\n <SingleAttributeEditableContent\n {...commonProps}\n parentUri={entityUri}\n noDataText={noDataText}\n />\n ) : (\n <SingleAttributeReadableContent {...commonProps} />\n )}\n </ProfileLayoutItemContent>\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 Order,\n Entity,\n isAnalyticAttribute\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: Order;\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<AttributeValue[]>(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, searchQuery, ...rest} = params;\n\n const getRequest = (): Promise<Pick<Entity, 'attributes' | 'analyticsAttributes'>> => {\n const commonProps = {\n defaultMaxValues: max,\n attributeTypeUri: attributeUri,\n offset: max * page,\n searchQuery\n };\n\n if (isDataTenantEntity(entity) || isHistoryModeEnabled) {\n return getPagedLocalEntity({...commonProps, metadata, entity});\n }\n\n return getPagedEntity({\n ...commonProps,\n ...rest,\n tenant,\n apiPath,\n parentUri,\n options: showInactive ? '' : undefined,\n globalFilter\n });\n };\n\n safePromise(getRequest())\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 as GenericAttributeValue) || loadedValue;\n })\n );\n const paging = path(['paging', attributeUri], attributes);\n if (isAnalyticAttribute(attributeType) && paging && paging.totalValues) {\n paging.totalOvValues = paging.totalValues;\n }\n setPaging(paging);\n })\n .catch((error) => {\n console.warn(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} from '@mui/styles';\n\nconst popupHorizontalPadding = '23px';\n\nexport const useStyles = makeStyles((theme) => ({\n button: {\n color: theme.palette.text.secondary\n },\n popupContent: {\n padding: `19px ${popupHorizontalPadding}`\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n },\n divider: {\n borderColor: '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 from '@mui/material/Popover';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport FilterIcon from '@mui/icons-material/FilterList';\nimport IconButton from '@mui/material/IconButton';\nimport Divider from '@mui/material/Divider';\nimport Typography from '@mui/material/Typography';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport ArrowDownwardIcon from '@mui/icons-material/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 {showInactive, toggleShowInactive, sortOrder, toggleSortOrder, sortOption, changeSortOption, 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 <IconButton\n ref={buttonRef}\n data-reltio-id=\"reltio-filter-button\"\n classes={{\n root: classnames(styles.button, className)\n }}\n onClick={togglePopup}\n >\n <FilterIcon />\n </IconButton>\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 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 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 '@mui/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 '@mui/icons-material/CloudDownload';\nimport Badge from '@mui/material/Badge';\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 anchorOriginTopRightRectangular: 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 '@mui/icons-material/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 data-reltio-id=\"import-from-dt-button\"\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} from '@reltio/components';\nimport FilterButton from './FilterButton/FilterButton';\nimport {ImportFromDT} from './ImportFromDT/ImportFromDT';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {ProfileLayoutItemHeader} from '../../../ProfileLayoutItemHeader/ProfileLayoutItemHeader';\n\ntype Props = {\n title?: string;\n total?: number;\n};\n\nconst RelationsHeader = ({title, total}: Props) => {\n const {searchQuery, changeSearchQuery} = useContext(RelationsViewStateContext);\n\n const totalText =\n total === 1 ? i18n.text('${count} item', {count: total}) : i18n.text('${count} items', {count: total});\n return (\n <ProfileLayoutItemHeader title={title} totalText={totalText}>\n <ExpandableSearchInput query={searchQuery} onChange={changeSearchQuery} />\n <ImportFromDT />\n <FilterButton />\n </ProfileLayoutItemHeader>\n );\n};\n\nexport default RelationsHeader;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\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 from '@mui/material/CircularProgress';\nimport Tooltip from '@mui/material/Tooltip';\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 '@mui/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 '@mui/material/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 '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\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 from '@mui/material/Typography';\nimport EditIcon from '@mui/icons-material/Edit';\nimport DeleteIcon from '@mui/icons-material/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, ComplexInOutRelationItem} from '@reltio/mdm-sdk';\n\nconst getUri: (relation: string | ComplexInOutRelationItem) => string = 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 '@mui/styles';\n\nexport const useStyles = makeStyles({\n arrowIcon: {\n fontSize: '16px',\n marginRight: '6px'\n }\n});\n","import React from 'react';\nimport ArrowRightIcon from '@mui/icons-material/ArrowRight';\nimport ArrowDropDownIcon from '@mui/icons-material/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 '@mui/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 '@mui/styles';\n\nexport const useStyles = makeStyles({\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px',\n marginLeft: '12px'\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 borderColor: 'rgba(0,0,0,0.12)'\n },\n noData: {\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 from '@mui/material/Button';\nimport AddIcon from '@mui/icons-material/Add';\nimport Divider from '@mui/material/Divider';\nimport {\n Connection,\n isTempUri,\n Mode,\n createNewConnectionWithDefaultRelationType,\n checkNew,\n RelationsViewConfig,\n getRelationUriFromConnection,\n getEntityUriFromConnection\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 {ProfileLayoutItemNoData} from '../../../ProfileLayoutItemNoData/ProfileLayoutItemNoData';\n\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) => getRelationUriFromConnection(connection) === relationUri\n );\n const entityUri = 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 && <ProfileLayoutItemNoData className={styles.noData} text={noDataText} />}\n </div>\n );\n};\n\nexport default RelationsEditableContent;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((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 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 getRelationAttributesFromConnection\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 ...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 '@mui/icons-material/InfoRounded';\nimport InfoIcon from '@mui/icons-material/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 '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\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 alignItems: 'center'\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 sortRatingsByTime = (ratings: Rating[]) => {\n return [...ratings].sort((a, b) => {\n const timestampA = new Date(a.timestamp).getTime();\n const timestampB = new Date(b.timestamp).getTime();\n return timestampB - timestampA;\n });\n};\n\nexport const calcAverageRating = (ratings: Rating[]) => {\n const averageRating: number = pipe(pluck('value'), mean, defaultTo(0))(ratings);\n return averageRating.toFixed(1);\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 calcRatingsScale = (ratings: Rating[]) => {\n if (ratings.length === 0) {\n return {percentOfLikes: 0, percentOfDislikes: 0};\n }\n\n const percentOfLikes = (getCountOfLikes(ratings) / ratings.length) * 100;\n const formattedPercentOfLikes = parseFloat(Number(percentOfLikes).toFixed(1));\n const formattedPercentOfDislikes = parseFloat(Number(100 - formattedPercentOfLikes).toFixed(1));\n\n return {percentOfLikes: formattedPercentOfLikes, percentOfDislikes: formattedPercentOfDislikes};\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex',\n flexDirection: 'column',\n padding: 12,\n width: 355,\n gap: 12\n },\n info: {\n background: 'rgba(0, 0, 0, 0.05)',\n display: 'flex',\n padding: '6px 12px',\n fontSize: 13,\n gap: 16\n },\n axis: {\n position: 'relative',\n display: 'flex',\n justifyContent: 'space-between',\n fontSize: 12,\n color: theme.palette.text.secondary,\n paddingTop: 4,\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n background: theme.palette.divider,\n width: '1px',\n height: '4px'\n },\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n right: 0,\n background: theme.palette.divider,\n width: '1px',\n height: '4px'\n }\n },\n scaleHistory: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n title: {\n fontSize: 13,\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.text.secondary,\n gap: 8,\n '& .value': {\n color: theme.palette.text.primary\n },\n '& .boldValue': {\n color: theme.palette.text.primary,\n fontWeight: 700\n }\n },\n greenBadge: {\n width: 12,\n height: 12,\n background: 'rgb(151, 192, 97)'\n },\n redBadge: {\n width: 12,\n height: 12,\n background: 'rgb(255, 112, 112)'\n },\n scale: {\n width: '100%',\n height: 16,\n background: 'rgba(255, 112, 112)',\n '&.empty': {\n background: '#F9F9F9'\n }\n },\n scaleBar: {\n background: 'rgba(151,192,97)'\n },\n icon: {\n width: '14px',\n height: '14px',\n color: 'rgba(0,0,0,0.54)'\n },\n ratingsList: {\n borderTop: '1px solid #ccc',\n borderBottom: '1px solid #ccc',\n padding: '12px 0',\n maxHeight: 140,\n boxSizing: 'border-box',\n overflow: 'auto'\n },\n rating: {\n display: 'flex',\n padding: '4px 0px',\n alignItems: 'center'\n },\n avatar: {\n width: 24,\n height: 24,\n marginRight: 12,\n '& .icon': {\n fontSize: 18\n }\n },\n userInfo: {\n overflow: 'hidden'\n },\n user: {\n fontSize: 13,\n color: theme.palette.text.primary,\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n ratingDateWrapper: {\n display: 'flex',\n alignSelf: 'start',\n marginLeft: 'auto'\n },\n ratingDate: {\n fontSize: 10,\n color: theme.palette.text.secondary,\n marginRight: 4\n },\n sourcesWrapper: {\n display: 'flex',\n alignItems: 'center',\n gap: 4\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {Crosswalk, Rating} from '@reltio/mdm-sdk';\nimport {ColoredSourceIcon, PopupWithArrow} from '@reltio/components';\nimport PersonIcon from '@mui/icons-material/Person';\nimport ThumbUpIcon from '@mui/icons-material/ThumbUp';\nimport ThumbDownIcon from '@mui/icons-material/ThumbDown';\nimport Avatar from '@mui/material/Avatar';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport {\n calcAverageRating,\n calcRatingsScale,\n getCountOfDislikes,\n getCountOfLikes,\n sortRatingsByTime\n} from '../../../helpers/ratings';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n open: boolean;\n ratings: Rating[];\n crosswalks: Crosswalk[];\n className?: string;\n anchorEl: HTMLElement | null;\n onClose: () => void;\n};\n\nexport const RatingsPopup = ({ratings, crosswalks, open, anchorEl, onClose}: Props) => {\n const styles = useStyles();\n\n const sortedRatings = sortRatingsByTime(ratings);\n const {percentOfLikes, percentOfDislikes} = calcRatingsScale(ratings);\n const agreeCount = `${getCountOfLikes(ratings)} (${percentOfLikes}%)`;\n const disagreeCount = `${getCountOfDislikes(ratings)} (${percentOfDislikes}%)`;\n\n return (\n <PopupWithArrow open={open} anchorEl={anchorEl} onClose={onClose} placement=\"top-start\" transition>\n <div className={styles.wrapper}>\n <div className={styles.info}>\n <span className={styles.title}>\n {i18n.text('Score:')}\n <span className=\"boldValue\">{calcAverageRating(ratings)}</span>\n </span>\n <span className={styles.title}>\n {i18n.text('No. of responses:')}\n <span className=\"value\">{ratings.length}</span>\n </span>\n </div>\n <div>\n <LinearProgress\n variant=\"determinate\"\n value={percentOfLikes}\n classes={{bar: styles.scaleBar}}\n className={classnames(styles.scale, {empty: !ratings.length})}\n />\n <div className={styles.axis}>\n <span>0</span>\n <span>100%</span>\n </div>\n </div>\n <div className={styles.scaleHistory}>\n <span className={styles.title}>\n <div className={styles.greenBadge} />\n <ThumbUpIcon className={styles.icon} />\n {i18n.text('Agree:')}\n <span className=\"value\">{agreeCount}</span>\n </span>\n <span className={styles.title}>\n <div className={styles.redBadge} />\n <ThumbDownIcon className={styles.icon} />\n {i18n.text('Disagree:')}\n <span className=\"value\">{disagreeCount}</span>\n </span>\n </div>\n {!!sortedRatings.length && (\n <div className={styles.ratingsList} data-reltio-id=\"reltio-ratings-list\">\n {sortedRatings.map(({user, comment, timestamp, value}, i) => (\n <div key={i} className={styles.rating} data-reltio-id=\"reltio-rating-item\">\n <Avatar className={styles.avatar}>\n <PersonIcon className=\"icon\" />\n </Avatar>\n <div className={styles.userInfo}>\n <div className={styles.user}>{user}</div>\n <div className={styles.title}>{comment || i18n.text('No comment')}</div>\n </div>\n <div className={styles.ratingDateWrapper}>\n <span className={styles.ratingDate}>{i18n.date(timestamp, 'L LT')}</span>\n {value === 1 ? (\n <ThumbDownIcon className={styles.icon} data-reltio-id=\"reltio-dislike-icon\" />\n ) : (\n <ThumbUpIcon className={styles.icon} data-reltio-id=\"reltio-like-icon\" />\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n <div className={styles.sourcesWrapper}>\n <span className={styles.title}>{i18n.text('Sources:')}</span>\n {crosswalks.map((crosswalk, i) => (\n <ColoredSourceIcon key={i} crosswalk={crosswalk} />\n ))}\n </div>\n </div>\n </PopupWithArrow>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n width: 128,\n cursor: 'pointer'\n },\n averageRating: {\n marginBottom: 4,\n fontSize: '16px',\n letterSpacing: '0.15px',\n lineHeight: '24px',\n color: theme.palette.text.primary\n },\n counts: {\n display: 'flex',\n marginTop: 4,\n gap: 32\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: theme.palette.text.secondary\n },\n scale: {\n height: 3,\n width: '100%',\n background: 'rgba(255, 112, 112)',\n '&.empty': {\n background: '#F9F9F9'\n }\n },\n scaleBar: {\n background: 'rgba(151,192,97)'\n }\n}));\n","import React, {useRef, useState} from 'react';\nimport classnames from 'classnames';\nimport {Crosswalk, Rating} from '@reltio/mdm-sdk';\nimport Typography from '@mui/material/Typography';\nimport ThumbUpIcon from '@mui/icons-material/ThumbUp';\nimport ThumbDownIcon from '@mui/icons-material/ThumbDown';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport {RatingsPopup} from '../RatingsPopup/RatingsPopup';\nimport {calcAverageRating, calcRatingsScale, getCountOfDislikes, getCountOfLikes} from '../../../helpers/ratings';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n ratings: Rating[];\n crosswalks: Crosswalk[];\n className?: string;\n};\n\nexport const Ratings = ({ratings, crosswalks, className}: Props) => {\n const styles = useStyles();\n const ratingsRef = useRef();\n const [open, setOpen] = useState(false);\n const {percentOfLikes} = calcRatingsScale(ratings);\n\n return (\n <>\n <div\n data-reltio-id=\"reltio-ratings\"\n className={classnames(styles.wrapper, className)}\n ref={ratingsRef}\n onClick={() => setOpen(true)}\n >\n <Typography className={styles.averageRating}>{calcAverageRating(ratings)}</Typography>\n <LinearProgress\n variant=\"determinate\"\n value={percentOfLikes}\n classes={{bar: styles.scaleBar}}\n className={classnames(styles.scale, {empty: !ratings.length})}\n />\n <div className={styles.counts}>\n <div className={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 <RatingsPopup\n ratings={ratings}\n open={open}\n crosswalks={crosswalks}\n anchorEl={ratingsRef.current}\n onClose={() => setOpen(false)}\n />\n </>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex',\n marginLeft: -8,\n gap: 8\n },\n button: {\n minWidth: 0,\n padding: 8,\n fontSize: '14px',\n lineHeight: '16px',\n textTransform: 'none',\n color: theme.palette.text.secondary\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 from '@mui/material/Button';\nimport ArrowDropDownIcon from '@mui/icons-material/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, {\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 '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n padding: '3px 16px'\n },\n entityTypeIcon: {\n marginRight: '16px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '14px',\n lineHeight: '16px'\n },\n entityLabelContainer: {\n display: 'flex',\n wordBreak: 'break-all',\n textDecoration: 'none'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '14px',\n lineHeight: '16px'\n },\n ratings: {\n marginLeft: 'auto'\n },\n showDetailsButton: {\n marginLeft: '16px',\n marginTop: '8px'\n },\n relationAttributes: {\n paddingLeft: '60px'\n },\n suggestedWrapper: {\n padding: '6px 8px 6px 16px',\n backgroundColor: theme.suggested,\n minWidth: 'fit-content'\n },\n commentsContainer: {\n alignSelf: 'center',\n marginTop: '11px',\n '& + $ratings': {\n marginLeft: '16px'\n }\n },\n additionalButtonsWrapper: {\n marginLeft: 'auto',\n display: 'flex',\n alignItems: 'center'\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 from '@mui/material/Box';\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 showRating?: boolean;\n};\n\nexport const RelationComplexItem = ({\n connection,\n loadRelations,\n renderRelationArrowButton,\n acceptRelation,\n ignoreRelation,\n showRating\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 const crosswalks = relation?.object?.crosswalks || [];\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 && showRating && (\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 {showRating && (\n <Ratings ratings={ratings} crosswalks={crosswalks} className={styles.ratings} />\n )}\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, type} = 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 showRating={type === 'rating'}\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 '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n padding: '12px 16px',\n display: 'flex',\n flexDirection: 'column',\n '& $label': {\n '&:nth-child(1)': {\n width: '60%'\n },\n '&:nth-child(2)': {\n width: '40%'\n }\n }\n },\n icon: {\n flexShrink: 0,\n marginRight: '8px',\n width: 16,\n height: 16\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n '&:nth-child(2)': {\n marginTop: '4px'\n }\n },\n label: {\n fontSize: '1rem'\n }\n});\n","import React from 'react';\nimport Skeleton from '@mui/material/Skeleton';\nimport {useStyles} from './styles';\n\nexport const RelationsContentSkeleton = () => {\n const styles = useStyles();\n return (\n <div className={styles.container}>\n <div className={styles.row}>\n <Skeleton variant=\"circular\" className={styles.icon} />\n <Skeleton className={styles.label} />\n </div>\n <div className={styles.row}>\n <Skeleton variant=\"circular\" className={styles.icon} />\n <Skeleton className={styles.label} />\n </div>\n </div>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n list: {\n paddingTop: '8px',\n paddingBottom: '10px',\n overflow: 'auto',\n flexGrow: 1\n },\n content: {\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} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {BasicTablePagination} from '@reltio/components';\nimport {isEditableMode, Connection, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport RelationsEditableContent from '../RelationsEditableContent/RelationsEditableContent';\nimport RelationsList from '../RelationsList/RelationsList';\nimport {RelationsContentSkeleton} from '../RelationsContentSkeleton/RelationsContentSkeleton';\nimport {ProfileLayoutItemContent} from '../../../ProfileLayoutItemContent/ProfileLayoutItemContent';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\n\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 {page, setPage, rowsPerPage} = useContext(RelationsViewStateContext);\n\n const noDataText = config['text-empty'];\n const isEmptyData = !config.content || (!isEditableMode(mode) && total === 0);\n\n return (\n <ProfileLayoutItemContent\n className={styles.content}\n noDataText={noDataText}\n isEmptyData={isEmptyData}\n isLoading={isLoading}\n skeleton={<RelationsContentSkeleton />}\n pagination={\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 }\n >\n {isEditableMode(mode) ? (\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 <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 </ProfileLayoutItemContent>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0\n }\n});\n","import React, {useContext, useEffect, useMemo} from 'react';\nimport {pick} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {ActivityFilter, Connection, getEntitiesMapForConnections, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {\n BasicView,\n EntitiesMapContext,\n useRelationsLoader,\n EntityContext,\n useExpandInvalidRelations\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';\n\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, 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 useExpandInvalidRelations(config.id);\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 <RelationsContent\n isLoading={isLoading}\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n total={total}\n />\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 {makeStyles} from '@mui/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 marginBottom: '4px'\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 React from 'react';\nimport i18n from 'ui-i18n';\nimport AddIcon from '@mui/icons-material/Add';\nimport Button from '@mui/material/Button';\nimport {useStyles} from './styles';\n\ntype Props = {\n onClick: () => void;\n};\n\nconst AddRelationButton = ({onClick}: Props) => {\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\nexport default AddRelationButton;\n","import {makeStyles} from '@mui/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 width: '100%',\n fontSize: '12px',\n '&>div>span': {\n maxWidth: 'calc(100% + 22px)'\n }\n },\n entityCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%'\n },\n label: {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n headLabelWrapper: {\n display: 'flex',\n alignItems: 'center',\n minWidth: 0\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 '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 React from 'react';\nimport classnames from 'classnames';\nimport {checkRemoved, isActiveObject} from '@reltio/mdm-sdk';\nimport {RowCellRenderProps} from '../../../types/TableData';\nimport {useStyles} from './styles';\n\ntype Props = RowCellRenderProps & {isSorted: boolean};\n\nconst RowCellRenderer = ({cell, CellValueRenderer, rowValue: {connection}, isSorted, ...otherProps}: Props) => {\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\nexport default RowCellRenderer;\n","import React, {useContext} from 'react';\nimport {ui} from '@reltio/mdm-module';\nimport {useDispatch} from 'react-redux';\nimport {ConnectionEntity, TEntityType, getEntityUriForLink, getLabel} from '@reltio/mdm-sdk';\nimport {EntityTypeIcon, ExpandedValueTooltip, ViewIdContext} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n value: {\n entity: ConnectionEntity;\n entityType: TEntityType;\n };\n};\n\nconst EntityProfileRenderer = ({value: {entityType, entity}}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n\n const entityLabel = getLabel(entity.entityLabel);\n const preparedUri = getEntityUriForLink({uri: entity.entityUri, dataTenant: entity.dataTenant});\n\n const handleClick = () => {\n dispatch(ui.actions.openEntity({uri: preparedUri, viewId}));\n };\n\n return (\n <div className={styles.entityCell}>\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <ExpandedValueTooltip value={entityLabel}>\n <span className={styles.entityLabel} onClick={handleClick}>\n {entityLabel}\n </span>\n </ExpandedValueTooltip>\n </div>\n );\n};\n\nexport default EntityProfileRenderer;\n","import React from 'react';\nimport {withFilterAtBottom, DescriptionIcon, ExpandedValueTooltip} from '@reltio/components';\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {useStyles} from './styles';\n\nconst HeadCellRenderer = (props) => {\n const styles = useStyles();\n const {description, label} = props?.headCellData || {};\n const cellLabel = (\n <div className={styles.headLabelWrapper}>\n <ExpandedValueTooltip value={label}>\n <div className={styles.label}>{label}</div>\n </ExpandedValueTooltip>\n <DescriptionIcon description={description} />\n </div>\n );\n\n return (\n <div className={styles.headCell}>\n <DefaultHeadCellRenderer {...props} headCellData={{...props?.headCellData, label: cellLabel}} />\n </div>\n );\n};\n\nexport default withFilterAtBottom(HeadCellRenderer);\n","import {buildColumnsFilter} from '@reltio/components';\nimport {\n FilterBuilder,\n filterValueToQueryStringWithQuotes,\n Maybe,\n getReadableAttributesList,\n getOvAttributeValuesByPath\n} 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\nexport const getRelationsAttributesFromMetadata = ({content: {inRelations = [], outRelations = []}}, {relationTypes}) =>\n pipe(\n getRelationTypes,\n chain((relationType) => pipe(find(propEq('uri', relationType)), getReadableAttributesList)(relationTypes))\n )([...inRelations, ...outRelations]);\n\nexport const getRelationAttributeValues = (attrPath, relation) =>\n pipe(path(['object', 'attributes']), getOvAttributeValuesByPath(attrPath))(relation);\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 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 '../../../helpers/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\nexport const 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\nexport const getBasicTableColumnsData = map(getColumnDataByColumnId);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Tooltip from '@mui/material/Tooltip';\nimport IconButton from '@mui/material/IconButton';\nimport EditIcon from '@mui/icons-material/Edit';\nimport DeleteIcon from '@mui/icons-material/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} size=\"large\">\n <EditIcon />\n </IconButton>\n </Tooltip>\n )}\n {canRemove && (\n <Tooltip title={i18n.text('Remove')}>\n <IconButton onClick={handleRemoveRelation} size=\"large\">\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 React from 'react';\nimport {RelationsTableViewState} from '../hooks/useRelationsTableState';\n\nexport const RelationsTableViewStateContext = React.createContext<RelationsTableViewState>(null);\n\nRelationsTableViewStateContext.displayName = 'RelationsViewStateContext';\n","import {makeStyles} from '@mui/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 '@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, {useCallback, useContext, useMemo, useState} from 'react';\nimport {path} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Connection} from '@reltio/mdm-sdk';\nimport {BasicTable, ColumnData} from '@reltio/components';\nimport RowCellRenderer from './cell-renderers/RowCellRenderer';\nimport {getBasicTableColumnsData, getBasicTableRowsData} from './helpers/dataHelpers';\nimport {checkRelationPermission} from './helpers/buttonsHelper';\nimport {RowCellRenderProps} from '../../types/TableData';\nimport EditButtons from './EditButtons';\nimport {RelationsTableViewStateContext} from '../../contexts/RelationsTableViewStateContext';\n\nimport {useStyles} from './styles';\n\nconst MAX_HEIGHT = 477;\n\ntype Props = {\n columnsData: ColumnData[];\n connections: Connection[];\n onEditRelation: (connection: Connection) => void;\n onRemoveRelation: (relationUri: string) => void;\n basicTableRef: React.RefObject<unknown>;\n allowOnlyCreateNew?: boolean;\n};\n\nconst RelationsTable = ({\n columnsData,\n connections,\n onEditRelation,\n onRemoveRelation,\n basicTableRef,\n allowOnlyCreateNew\n}: Props) => {\n const styles = useStyles();\n\n const [hoverRowIndex, setHoverRowIndex] = useState<number>(null);\n\n const {onFilter, onSort, filters, sorting} = useContext(RelationsTableViewStateContext);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const mode = useSelector(mdmModule.selectors.getMode);\n\n const tableRowsData = useMemo(\n () => getBasicTableRowsData(connections, columnsData, metadata),\n [connections, columnsData, metadata]\n );\n const tableColumnsData = useMemo(() => getBasicTableColumnsData(columnsData), [columnsData]);\n\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 renderRowCell = useCallback(\n (props: RowCellRenderProps) => <RowCellRenderer {...props} isSorted={sorting?.field === props.columnData.id} />,\n [sorting]\n );\n const handleOnRowHover = useCallback((rowIndex) => setHoverRowIndex(rowIndex), []);\n const handleEditRelation = useCallback(\n () => onEditRelation(path([hoverRowIndex, 'connection'], tableRowsData)),\n [hoverRowIndex, onEditRelation, 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 data-reltio-id=\"reltio-relations-table\" 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={100}\n headRowHeight={48}\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\nexport default RelationsTable;\n","import {profile} from '@reltio/mdm-module';\nimport {checkMetadataForDelete, checkMetadataForUpdate, checkNew, checkRemoved, getRelationType} from '@reltio/mdm-sdk';\n\nexport const 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","import {makeStyles} from '@mui/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 {SmallIconButtonWithTooltip} from '@reltio/components';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\nimport Popover from '@mui/material/Popover';\nimport Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\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 React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {ColumnsSettings, FilterButton, VerticalDivider, ExpandableSearchInput} from '@reltio/components';\nimport {RelationsTableViewStateContext} from '../../contexts/RelationsTableViewStateContext';\nimport {ProfileLayoutItemHeader} from '../../../ProfileLayoutItemHeader/ProfileLayoutItemHeader';\nimport MoreButton from './MoreButton/MoreButton';\n\ntype Props = {\n title: string;\n total: number;\n};\n\nconst RelationsTableHeader = ({title, total}: Props) => {\n const {\n searchQuery,\n setSearchQuery,\n filters,\n onToggleFilters,\n allColumnsData,\n visibleColumns,\n onChangeColumns,\n onChangeShowInactive,\n showInactive\n } = useContext(RelationsTableViewStateContext);\n const totalText =\n total === 1 ? i18n.text('${count} entity', {count: total}) : i18n.text('${count} entities', {count: total});\n return (\n <ProfileLayoutItemHeader title={title} totalText={totalText}>\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 <MoreButton showInactive={showInactive} onShowInactiveChange={onChangeShowInactive} />\n </ProfileLayoutItemHeader>\n );\n};\n\nexport default RelationsTableHeader;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n display: 'flex',\n height: '30px',\n alignItems: 'center',\n paddingTop: '8px'\n },\n oneLine: {\n margin: '15px 25px',\n width: '40%'\n },\n relationAvatar: {\n flexShrink: 0,\n marginLeft: '16px',\n width: '30px',\n height: '30px'\n },\n relationLabel: {\n marginLeft: '16px',\n width: '30%'\n }\n});\n","import React from 'react';\nimport {ColumnData, RenderRowCellProps, TableSkeleton} from '@reltio/components';\nimport Skeleton from '@mui/material/Skeleton';\nimport {useStyles} from './styles';\n\ntype Props = {\n tableColumnsData: ColumnData[];\n};\n\nconst SkeletonCellRenderer = ({columnIndex}: RenderRowCellProps) => {\n const styles = useStyles();\n\n const isFirstColumn = columnIndex === 0;\n return (\n <>\n <div className={styles.container}>\n {isFirstColumn && <Skeleton variant=\"circular\" className={styles.relationAvatar} />}\n <Skeleton className={isFirstColumn ? styles.relationLabel : styles.oneLine} />\n </div>\n </>\n );\n};\n\nexport const RelationsTableSkeleton = ({tableColumnsData}: Props) => {\n return (\n <TableSkeleton\n tableColumnsData={tableColumnsData}\n RowCellRenderer={SkeletonCellRenderer}\n defaultColumnWidth={250}\n defaultColumnMinWidth={100}\n />\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0\n },\n content: {\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 addArea: {\n paddingTop: '8px'\n },\n skeletonContainer: {\n display: 'flex',\n height: '30px',\n alignItems: 'center',\n paddingTop: '8px'\n },\n oneLineSkeleton: {\n margin: '15px 25px',\n width: '40%'\n },\n relationAvatarSkeleton: {\n flexShrink: 0,\n marginLeft: '16px',\n width: '30px',\n height: '30px'\n },\n relationLabelSkeleton: {\n marginLeft: '16px',\n width: '30%'\n }\n});\n","import React, {useCallback, useContext, useEffect, useMemo, useRef} from 'react';\nimport {pipe, propEq} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n BasicTablePagination,\n BasicView,\n useConfigPermissions,\n useRelationsLoader,\n RelationEditor,\n FeaturesContext,\n useExpandInvalidRelations\n} from '@reltio/components';\nimport {\n isTempUri,\n createNewConnectionWithDefaultRelationType,\n RelationsViewConfig,\n Connection,\n ActivityFilter,\n getRelationUriFromConnection,\n getEntityUriFromConnection\n} from '@reltio/mdm-sdk';\nimport AddRelationButton from '../AddRelationButton/AddRelationButton';\nimport RelationsTable from '../RelationsTable/RelationsTable';\nimport RelationsTableHeader from '../RelationsTableHeader/RelationsTableHeader';\nimport {getBasicTableColumnsData} from '../RelationsTable/helpers/dataHelpers';\nimport {RelationsTableViewStateContext} from '../../contexts/RelationsTableViewStateContext';\nimport {ProfileLayoutItemContent} from '../../../ProfileLayoutItemContent/ProfileLayoutItemContent';\nimport {RelationsTableSkeleton} from '../RelationsTableSkeleton/RelationsTableSkeleton';\nimport {buildRelationsFilter} from '../../helpers/relations';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: RelationsViewConfig;\n className?: string;\n};\n\nexport const RelationsTableView = ({className, config}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const connections = useSelector((state) =>\n mdmModule.selectors.getConnectionsWithDraftsByViewId(state, config.id)\n ) as Connection[];\n const entity = useSelector(mdmModule.selectors.getEntity);\n const total = useSelector((state) => mdmModule.selectors.getTotalByViewId(state, config.id));\n const mode = useSelector(mdmModule.selectors.getMode);\n const relationToAdd = useSelector((state) => mdmModule.selectors.getRelationToAddByViewId(state, config.id));\n const relationsToEdit = useSelector((state) => mdmModule.selectors.getRelationsToEditByViewId(state, config.id));\n const checkIfCanAddRelations = useSelector((state) =>\n mdmModule.selectors.getCheckIfCanAddRelations(state, config.content)\n );\n\n const {\n page,\n rowsPerPage,\n sorting,\n filters,\n searchQuery,\n visibleColumns,\n allColumnsData,\n showInactive,\n rowsPerPageOptions,\n setPage,\n setRowsPerPage,\n setSearchQuery\n } = useContext(RelationsTableViewStateContext);\n\n const featuresContext = useContext(FeaturesContext);\n const showDescription = useSelector(mdmModule.selectors.getShowAttributeDescription);\n const features = useMemo(() => ({...featuresContext, showDescription}), [featuresContext, showDescription]);\n\n useEffect(() => {\n setSearchQuery('');\n }, [entity?.uri]); //eslint-disable-line react-hooks/exhaustive-deps\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\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), dispatch)(newConnection);\n }, [config, mode, metadata, dispatch]);\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) => getRelationUriFromConnection(connection) === relationUri\n );\n const entityUri = getEntityUriFromConnection(connectionToRemove);\n if (isTempUri(entityUri)) {\n dispatch(profile.modifiedEntities.actions.entityDeleted(entityUri));\n }\n },\n [config, connections, dispatch]\n );\n\n const canAddRelations = entity && checkIfCanAddRelations;\n const openedRelations = relationToAdd ? [relationToAdd, ...relationsToEdit] : relationsToEdit;\n const {canUpdate, canDelete} = useConfigPermissions();\n const canEditRelations = canUpdate(config);\n const canRemoveRelations = canDelete(config);\n const basicTableRef = useRef(null);\n useExpandInvalidRelations(config.id);\n\n const tableColumnsData = useMemo(() => getBasicTableColumnsData(visibleColumnsData), [visibleColumnsData]);\n\n return (\n <FeaturesContext.Provider value={features}>\n <BasicView className={className}>\n <RelationsTableHeader title={config.caption} total={total} />\n {canAddRelations && (\n <div className={styles.addArea}>\n <AddRelationButton onClick={onAddRelation} />\n </div>\n )}\n {openedRelations.map((relation) => (\n <RelationEditor\n key={getRelationUriFromConnection(relation)}\n connection={relation}\n config={config}\n mode={mode}\n metadata={metadata}\n />\n ))}\n <ProfileLayoutItemContent\n isLoading={isLoading}\n isEmptyData={!filters && !connections.length}\n skeleton={<RelationsTableSkeleton tableColumnsData={tableColumnsData} />}\n pagination={\n <BasicTablePagination\n count={total}\n rowsPerPageOptions={rowsPerPageOptions}\n rowsPerPage={rowsPerPage}\n onChangeRowsPerPage={setRowsPerPage}\n page={page}\n onChangePage={setPage}\n basicTableRef={basicTableRef}\n />\n }\n >\n <RelationsTable\n columnsData={visibleColumnsData}\n connections={connections}\n onEditRelation={\n canEditRelations\n ? pipe(profile.relations.actions.openRelationEditor(config.id), dispatch)\n : null\n }\n onRemoveRelation={canRemoveRelations ? onRemoveRelation : null}\n basicTableRef={basicTableRef}\n allowOnlyCreateNew={config.allowOnlyCreateNew}\n />\n </ProfileLayoutItemContent>\n </BasicView>\n </FeaturesContext.Provider>\n );\n};\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 './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 {useMemo, useReducer} from 'react';\nimport {useSelector} from 'react-redux';\nimport {pluck} from 'ramda';\nimport reducer, {actions} from './reducer';\nimport mdmModule from '@reltio/mdm-module';\nimport {RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {ColumnData, ColumnFilter, Sorting, useActions} from '@reltio/components';\nimport {DEFAULT_COLUMNS_DATA, getColumnsData, getRowsPerPageOptions} from '../helpers/tableHelpers';\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\nexport type RelationsTableViewState = {\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n page: number;\n setPage: (page: number) => void;\n visibleColumns: string[];\n onChangeColumns: (cols: string[]) => void;\n onToggleFilters: () => void;\n setRowsPerPage: (rowsPerPage: number) => void;\n onChangeShowInactive: (showInactive: boolean) => void;\n onSort: (field: string) => void;\n onFilter: (event: {columnId: string; filter: ColumnFilter}) => void;\n filters?: Record<string, ColumnFilter>;\n sorting: Sorting;\n showInactive: boolean;\n rowsPerPage: number;\n rowsPerPageOptions: number[];\n allColumnsData: ColumnData[];\n};\n\nconst useRelationsTableState = (config: RelationsViewConfig): RelationsTableViewState => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n\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 allColumnsData = useMemo(() => getColumnsData(config, metadata), [config, metadata]);\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n const {\n changeSearchQuery,\n changePage,\n toggleSort,\n changeFilter,\n toggleFilters,\n changeColumns,\n changeRowsPerPage,\n changeShowInactive\n } = useActions({\n actions,\n dispatch\n });\n\n const rowsPerPageOptions = useMemo(() => getRowsPerPageOptions(DEFAULT_ROWS_PER_PAGE), []);\n\n return {\n ...state,\n rowsPerPageOptions,\n onChangeShowInactive: changeShowInactive,\n setSearchQuery: changeSearchQuery,\n setPage: changePage,\n setRowsPerPage: changeRowsPerPage,\n onSort: toggleSort,\n onFilter: changeFilter,\n onToggleFilters: toggleFilters,\n onChangeColumns: changeColumns,\n allColumnsData\n };\n};\n\nexport default useRelationsTableState;\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 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 '@mui/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 width: '100%',\n '&>div>span': {\n maxWidth: 'calc(100% + 22px)'\n }\n },\n headLabel: {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n headLabelWrapper: {\n display: 'flex',\n alignItems: 'center',\n minWidth: 0\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 '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';\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {withFilterAtBottom, DescriptionIcon, ExpandedValueTooltip} from '@reltio/components';\nimport {useStyles} from './styles';\n\nconst HeadCellRenderer = (props) => {\n const styles = useStyles();\n const {description, label} = props?.headCellData || {};\n const cellLabel = (\n <div className={styles.headLabelWrapper}>\n <ExpandedValueTooltip value={label}>\n <div className={styles.headLabel}>{label}</div>\n </ExpandedValueTooltip>\n <DescriptionIcon description={description} />\n </div>\n );\n\n return (\n <div className={styles.headCell}>\n <DefaultHeadCellRenderer {...props} headCellData={{...props?.headCellData, label: cellLabel}} />\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 {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\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\n return {\n ...state,\n setSearchQuery: changeSearchQuery,\n setPage: changePage,\n onSort: toggleSort,\n onFilter: changeFilter,\n onToggleFilters: toggleFilters,\n onChangeColumns: changeColumns,\n allColumnsData,\n ...attribute\n };\n};\n","import React, {useContext} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {ColumnsSettings, FilterButton, VerticalDivider, ExpandableSearchInput} from '@reltio/components';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {ProfileLayoutItemHeader} from '../../../ProfileLayoutItemHeader/ProfileLayoutItemHeader';\n\ntype Props = {\n title: string;\n};\n\nconst AttributeTableHeader = ({title}: Props) => {\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 isRequired = isEditableMode && attributeType?.required;\n\n return (\n <ProfileLayoutItemHeader title={title} description={attributeType?.description} isRequired={isRequired}>\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 </ProfileLayoutItemHeader>\n );\n};\n\nexport default AttributeTableHeader;\n","import {useCallback, useContext, useState, useMemo} from 'react';\nimport {\n createNewAttribute,\n Entity,\n getAttributeSource,\n isEditableMode as checkIsEditableMode,\n isEmptyEntity,\n NestedAttributeValue,\n AttributeItem,\n isEmptyValue,\n validateComplexAttribute,\n ComplexAttributeValue,\n EntitiesMap,\n evaluateErrorPath,\n getSingleAttributeEntity,\n getEditableAttributeTypeSubAttributes,\n ReferenceAttributeValue\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 isAttributeValueEmpty = useCallback((attributeValue: ComplexAttributeValue) => {\n const hasRefEntity = (attributeValue as ReferenceAttributeValue).refEntity;\n return !hasRefEntity && isEmptyEntity({attributes: attributeValue.value});\n }, []);\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 value: {\n ...newAttribute,\n value: createDefaultValues({\n attributeTypes: getEditableAttributeTypeSubAttributes(metadata, attributeType),\n parentUri: newAttribute.uri,\n mode,\n metadata\n })\n },\n uri: newAttribute.uri,\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) =>\n originalValues.find(propEq('uri', value.uri)) !== value && !isAttributeValueEmpty(value);\n\n return {\n checkHasChanges,\n isAttributeValueEmpty,\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 '@mui/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 from '@mui/material/Button';\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 data-reltio-id=\"table-attribute-view-apply-button\"\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 isTempUri\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 (attributeType?.required && modifiedValues.length === 1 && isTempUri(modifiedValues[0].uri)) {\n return onStartEditing(modifiedValues[0]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [attributeType]);\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 '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n addButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginLeft: '-4px',\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 classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {\n AttributeError,\n AttributeItem,\n AttributeType,\n checkCanCreateAttribute,\n ComplexAttributeValue,\n EntitiesMap,\n isAttributeTypeError as checkIsAttributeTypeError,\n isPartOfErrorAttributeTypeUri,\n isPartOfErrorParentUri,\n TableAttributeViewConfig\n} from '@reltio/mdm-sdk';\nimport {\n ScrollToElementContext,\n isHighlightedErrorType,\n useConfigPermissions,\n useScrollToAttributeError,\n withContext\n} from '@reltio/components';\nimport Button from '@mui/material/Button';\nimport AddIcon from '@mui/icons-material/Add';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {AttributeEditing} from '../AttributeEditing/AttributeEditing';\nimport {useExpandAttributes} from './hooks/useExpandAttributes';\nimport {useStyles} from './styles';\n\ntype HighlightedElement = React.ContextType<typeof ScrollToElementContext>;\n\ntype Props = {\n config: TableAttributeViewConfig;\n entityUri: string;\n attributeType: AttributeType;\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?: HighlightedElement;\n highlightedAttributeError?: HighlightedElement;\n};\n\nconst 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 const {ref, errorClassName} = useScrollToAttributeError({highlightedError, isSimple: true});\n useExpandAttributes({\n onStartEditing,\n modifiedValues,\n highlightedError: highlightedError?.element as AttributeError,\n highlightedAttributeError: highlightedAttributeError?.element as AttributeError\n });\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 ref={ref} className={classnames(styles.editor, errorClassName)}>\n {canCreate && (\n <Button\n color=\"primary\"\n onClick={onAdd}\n className={styles.addButton}\n data-reltio-id=\"table-attribute-view-add-button\"\n >\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\nexport default withContext(\n ScrollToElementContext,\n (contextValue, {entityUri, attributeType}) => {\n const {element, type} = contextValue || {};\n const isError = isHighlightedErrorType(type);\n\n const isAttributeTypeError =\n isError && checkIsAttributeTypeError(element as AttributeError, entityUri, attributeType.uri);\n const isAttributeError =\n element &&\n isError &&\n !isAttributeTypeError &&\n isPartOfErrorAttributeTypeUri(attributeType, element) &&\n isPartOfErrorParentUri(entityUri, element);\n\n const highlightedError = isAttributeTypeError ? contextValue : null;\n const highlightedAttributeError = isAttributeError ? contextValue : null;\n return {highlightedError, highlightedAttributeError};\n },\n TableAttributeEditableContent\n);\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 '@mui/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 '@mui/icons-material/Edit';\nimport DeleteIcon from '@mui/icons-material/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={48}\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 {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n overflow: 'hidden',\n minHeight: 4\n },\n noData: {\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)',\n padding: '8px 16px'\n },\n header: {\n padding: '0 8px 0 16px'\n }\n}));\n","import React, {useMemo, useContext} from 'react';\nimport {propEq, isEmpty} from 'ramda';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport {BasicView, BasicTablePagination, TableSkeleton} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {Entity, TableAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport AttributeTableHeader from '../AttributeTableHeader/AttributeTableHeader';\nimport {getBasicTableColumnsData} from '../../helpers/tableAttributeHelpers';\nimport {useEditableAttribute} from './hooks/useEditableAttribute';\nimport TableAttributeEditableContent from '../TableAttributeEditableContent/TableAttributeEditableContent';\nimport {ProfileLayoutItemContent} from '../../../ProfileLayoutItemContent/ProfileLayoutItemContent';\nimport AttributeTable from '../AttributeTable/AttributeTable';\n\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 styles = useStyles();\n const {caption, max = DEFAULT_ROWS_PER_PAGE} = config;\n\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const isEditableMode = useSelector(mdmModule.selectors.getIsEditableMode);\n const modifiedEntity =\n useSelector((state) => mdmModule.selectors.getModifiedEntity(state, entityUri)) || ({} as Entity);\n\n const {\n onDeleteAttribute,\n onStartEditing,\n onChangeAttribute,\n onAdd,\n onCancel,\n onApply,\n onReset,\n checkHasChanges,\n isAttributeValueEmpty,\n modifiedValues,\n editingValues,\n deletedUris\n } = useEditableAttribute();\n\n const {\n totalVisibleValues,\n attributeType,\n hasPaging,\n isLoading,\n page,\n setPage,\n allColumnsData,\n visibleColumns,\n values,\n filters,\n onFilter,\n onSort,\n sorting\n } = useContext(TableAttributeContext);\n\n const preparedValues = isEditableMode ? modifiedValues.filter((item) => !isAttributeValueEmpty(item)) : values;\n\n const visibleColumnsData = useMemo(\n () => visibleColumns.map((id) => allColumnsData.find(propEq('id', id))),\n [visibleColumns, allColumnsData]\n );\n const tableColumnsData = useMemo(() => getBasicTableColumnsData(visibleColumnsData), [visibleColumnsData]);\n\n const showTable = Boolean((preparedValues.length !== 0 || filters) && attributeType && !attributeType.hidden);\n const showToolbar = attributeType && isEditableMode && !isEmpty(modifiedEntity);\n\n const noDataText = visibleColumnsData.length === 0 ? i18n.text('All columns are hidden') : '';\n const isEmptyData = !showTable || visibleColumnsData.length === 0;\n\n return (\n <BasicView className={classnames(styles.root, className)}>\n <AttributeTableHeader title={caption} />\n <ProfileLayoutItemContent\n className={styles.content}\n isLoading={isLoading}\n skeleton={<TableSkeleton tableColumnsData={tableColumnsData} />}\n toolbar={\n showToolbar && (\n <TableAttributeEditableContent\n config={config}\n entityUri={entityUri}\n attributeType={attributeType}\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 />\n )\n }\n pagination={\n hasPaging && (\n <BasicTablePagination\n count={totalVisibleValues}\n rowsPerPageOptions={[]}\n rowsPerPage={max}\n page={page}\n onChangePage={setPage}\n />\n )\n }\n noDataText={noDataText}\n isEmptyData={isEmptyData}\n >\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 </ProfileLayoutItemContent>\n </BasicView>\n );\n};\n","import {makeStyles} from '@mui/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 hidePageSelectorWhenSmall: {\n '@media (min-width: 450px)': {\n '& .MuiInputBase-root': {\n display: 'none'\n },\n '& .MuiTablePagination-selectLabel': {\n display: 'none'\n }\n }\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 linearIndicator: {\n top: '42px'\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, getLabel} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport Avatar from '@mui/material/Avatar';\nimport {useStyles} from './styles';\nimport DEFAULT_ICON from './icons/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: {uri},\n nodeId\n } = node;\n const title = getLabel(node.entity.label);\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 = entityType ? getPropWithInheritance(metadata, entityType, 'typeGraphIcon') : null;\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 {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n padding: '16px',\n display: 'flex',\n flexDirection: 'column'\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n '&:nth-child(n + 2)': {\n marginTop: '4px',\n marginLeft: '32px'\n },\n '&:nth-child(1) $label': {\n width: '60%'\n },\n '&:nth-child(2) $label': {\n width: '40%'\n },\n '&:nth-child(3) $label': {\n width: '50%'\n }\n },\n icon: {\n width: '16px',\n height: '16px',\n flexShrink: 0,\n marginRight: '8px'\n },\n label: {\n fontSize: '1rem'\n }\n});\n","import React from 'react';\nimport Skeleton from '@mui/material/Skeleton';\nimport {useStyles} from './styles';\n\nexport const HierarchyViewSkeleton = () => {\n const styles = useStyles();\n return (\n <div data-reltio-id=\"hierarchy-view-skeleton\" className={styles.container}>\n <div className={styles.row}>\n <Skeleton variant=\"circular\" className={styles.icon} />\n <Skeleton className={styles.label} />\n </div>\n <div className={styles.row}>\n <Skeleton variant=\"circular\" className={styles.icon} />\n <Skeleton className={styles.label} />\n </div>\n <div className={styles.row}>\n <Skeleton variant=\"circular\" className={styles.icon} />\n <Skeleton className={styles.label} />\n </div>\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: \"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: \"M12 7c2.762 0 5 2.238 5 5s-2.238 5-5 5-5-2.238-5-5 2.238-5 5-5zm0 2a3 3 0 100 6 3 3 0 100-6zm8.94 2A8.994 8.994 0 0013 3.06V1h-2v2.06A8.994 8.994 0 003.06 11H1v2h2.06A8.994 8.994 0 0011 20.94V23h2v-2.06A8.994 8.994 0 0020.94 13H23v-2h-2.06zM12 19c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z\",\n id: \"svg244080201a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg244080201b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg244080201a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg244080201b)\",\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 id: \"svg4492718a\",\n d: \"M7 18a2 2 0 110 4 2 2 0 010-4zm10.5-2a1.5 1.5 0 110 3 1.5 1.5 0 010-3zm-6-9a4.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-5zm-8 1a1.5 1.5 0 110 3 1.5 1.5 0 010-3zm17-1a1.5 1.5 0 110 3 1.5 1.5 0 010-3zm-4-5a1.5 1.5 0 110 3 1.5 1.5 0 010-3zM6 2a2 2 0 110 4 2 2 0 010-4z\"\n})), React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg4492718b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg4492718a\"\n})), React.createElement(\"path\", {\n fill: \"#000\",\n fillOpacity: \".54\",\n d: \"M0 0h24v24H0z\",\n mask: \"url(#svg4492718b)\"\n}))));","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n button: {\n padding: '8px'\n },\n disabled: {\n opacity: 0.54,\n fillOpacity: 1\n }\n});\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {FeaturesContext, SmallIconButtonWithTooltip} from '@reltio/components';\nimport SelectNodeIcon from './icons/SelectNode.svg';\nimport ShowGraphIcon from './icons/ShowGraph.svg';\nimport {ProfileLayoutItemHeader} from '../ProfileLayoutItemHeader/ProfileLayoutItemHeader';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n title: string;\n entityLabel?: string;\n onScrollToCurrentEntity?: () => void;\n onGraphOpen: () => void;\n disabled?: boolean;\n isGraphView?: boolean;\n};\n\nexport const HierarchyViewHeader = ({\n title,\n entityLabel = '',\n onScrollToCurrentEntity,\n onGraphOpen,\n disabled = false,\n isGraphView = false\n}: Props) => {\n const styles = useStyles();\n const {showNavigateToGraph} = useContext(FeaturesContext);\n return (\n <ProfileLayoutItemHeader title={title}>\n {!isGraphView && showNavigateToGraph && (\n <SmallIconButtonWithTooltip\n data-reltio-id=\"show-graph-button\"\n className={styles.button}\n classes={{disabled: styles.disabled}}\n tooltipTitle={i18n.text('Show Graph')}\n showForDisabled\n disabled={disabled}\n icon={ShowGraphIcon}\n onClick={onGraphOpen}\n size=\"L\"\n />\n )}\n {!!onScrollToCurrentEntity && (\n <SmallIconButtonWithTooltip\n data-reltio-id=\"scroll-to-node-button\"\n className={styles.button}\n tooltipTitle={i18n.text('Scroll to ${node}', {node: entityLabel})}\n classes={{disabled: styles.disabled}}\n icon={SelectNodeIcon}\n showForDisabled\n disabled={disabled}\n onClick={onScrollToCurrentEntity}\n size=\"L\"\n />\n )}\n </ProfileLayoutItemHeader>\n );\n};\n","import {makeStyles} from '@mui/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 rootNode: {\n padding: '0 24px 0 13px'\n },\n\n longRootNode: {\n padding: '0 24px 0 5px'\n },\n\n nodeContent: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n paddingLeft: '18px',\n boxSizing: 'border-box'\n },\n nodeRootLongContent: {\n paddingLeft: '20px'\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 classnames from 'classnames';\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 const longRootNode = node?.rootIndex > 99 && node.root;\n return (\n <div\n {...otherProps}\n className={classnames(styles.node, {\n [styles.longRootNode]: longRootNode,\n [styles.rootNode]: node.root && !longRootNode\n })}\n style={nodeStyle}\n >\n {scaffold}\n\n <div className={classnames(styles.nodeContent, {[styles.nodeRootLongContent]: longRootNode})} style={style}>\n {children}\n </div>\n </div>\n );\n};\n\nexport default TreeNode;\n","import {Node} from './types';\n\nexport const getNodeKey = ({node}: {node: Node}) => node.nodeId;\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 {useEffect, useState, useCallback} 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 [isLoading, setIsLoading] = useState(false);\n const [treeData, setTreeData] = useState<Node[]>([]);\n const [errorMessage, setErrorMessage] = useState<string>(null);\n const [rowsPerPage, setRowsPerPage] = useState(25);\n const [pagedData, setPagedData] = useState<Node[]>([]);\n const [page, setPage] = useState(0);\n useEffect(() => {\n setPagedData(treeData.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage));\n }, [page, rowsPerPage, treeData]);\n\n useEffect(() => {\n setPage(0);\n setRowsPerPage(25);\n }, [treeData]);\n const onChangeRowsPerPage = useCallback(\n (rowsPerPage) => {\n setRowsPerPage(rowsPerPage);\n setPage(0);\n },\n [setRowsPerPage]\n );\n\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 setIsLoading(true);\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 .finally(() => {\n setIsLoading(false);\n });\n }\n return () => {\n setTreeData([]);\n };\n }, [entityUri, graphUri, safePromise]);\n\n return {\n isLoading,\n treeData: pagedData,\n setTreeData,\n errorMessage,\n rowsPerPage,\n count: treeData.length,\n onChangePage: setPage,\n onChangeRowsPerPage,\n page\n };\n};\n","import React, {useCallback, useContext, useEffect, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport mdmModule, {ui} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {BasicTablePagination, BasicView, FeaturesContext, ReactSortableTree} from '@reltio/components';\nimport {HierarchyPathsViewConfig} from '@reltio/mdm-sdk';\nimport {Node} from './Node';\nimport {ConfigContext} from './ConfigContext';\nimport {HierarchyViewSkeleton} from '../HierarchyViewSkeleton/HierarchyViewSkeleton';\nimport {HierarchyViewHeader} from '../HierarchyViewHeader/HierarchyViewHeader';\nimport {ProfileLayoutItemContent} from '../ProfileLayoutItemContent/ProfileLayoutItemContent';\nimport {useDynamicNodesHeights} from './hooks/useDynamicNodesHeights';\nimport {useLoadPaths} from './hooks/useLoadPaths';\nimport {getNodeKey} from './helpers';\nimport {theme} from './theme';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n config: HierarchyPathsViewConfig;\n};\nconst ROOTS_PER_PAGE_OPTIONS = [10, 25];\n\nexport const HierarchyPathsView = ({config, className}: Props) => {\n const {id, caption, graph, _showNavigateToGraph} = 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 {\n treeData,\n setTreeData,\n errorMessage,\n isLoading,\n rowsPerPage,\n count,\n onChangePage,\n onChangeRowsPerPage,\n page\n } = useLoadPaths(entityUri, graphType);\n const {onResize, getRowHeight, clearHeightsCache} = useDynamicNodesHeights();\n\n const featuresContext = useContext(FeaturesContext);\n const showNavigateToGraph =\n _showNavigateToGraph !== undefined ? _showNavigateToGraph : featuresContext.showNavigateToGraph;\n const features = useMemo(() => ({...featuresContext, showNavigateToGraph}), [showNavigateToGraph, featuresContext]);\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 <FeaturesContext.Provider value={features}>\n <ConfigContext.Provider value={config}>\n <BasicView className={className}>\n <HierarchyViewHeader onGraphOpen={openGraph} title={caption} />\n <ProfileLayoutItemContent\n className={styles.treeContainer}\n isLoading={isLoading}\n noDataText={errorMessage}\n isEmptyData={!!errorMessage}\n skeleton={<HierarchyViewSkeleton />}\n pagination={\n count > ROOTS_PER_PAGE_OPTIONS[1] && (\n <BasicTablePagination\n classes={{root: styles.hidePageSelectorWhenSmall}}\n count={count}\n onChangePage={onChangePage}\n page={page}\n rowsPerPage={rowsPerPage}\n onChangeRowsPerPage={onChangeRowsPerPage}\n rowsPerPageOptions={ROOTS_PER_PAGE_OPTIONS}\n labelRowsPerPage={i18n.text('Roots per page:')}\n />\n )\n }\n >\n <div className={styles.tree}>\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 </div>\n </ProfileLayoutItemContent>\n </BasicView>\n </ConfigContext.Provider>\n </FeaturesContext.Provider>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n textField: {\n marginLeft: theme.spacing(),\n marginRight: theme.spacing(),\n width: 200\n },\n panel: ({isGraphView}) => ({\n display: 'flex',\n flexGrow: 1,\n flexDirection: 'column',\n minHeight: isGraphView ? undefined : '372px',\n maxHeight: isGraphView ? undefined : '507px',\n height: isGraphView ? '100%' : undefined\n }),\n treeWrapper: {\n flexGrow: 1,\n height: 0,\n marginTop: 7\n },\n checkedNode: {\n backgroundColor: 'rgba(0,114,206, 0.12)'\n },\n editorNode: {\n overflow: 'hidden',\n '&:hover': {\n backgroundColor: 'transparent !important'\n },\n '&:hover div.rst__moveHandle': {\n visibility: 'hidden'\n },\n '& div.rst__rowLabel': {\n paddingRight: 0\n }\n }\n}));\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%'\n },\n root: {\n minHeight: '28px',\n display: 'flex',\n padding: '0 18px',\n '&:hover': {\n backgroundColor: 'rgba(0,0,0,0.06)'\n },\n wordBreak: 'break-all'\n },\n tree: {\n flexGrow: 1,\n height: 0\n }\n}));\n","export function classnames(...classes) {\n // Use Boolean constructor as a filter callback\n // Allows for loose type truthy/falsey checks\n // Boolean(\"\") === false;\n // Boolean(false) === false;\n // Boolean(undefined) === false;\n // Boolean(null) === false;\n // Boolean(0) === false;\n // Boolean(\"classname\") === true;\n return classes.filter(Boolean).join(' ');\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\n\nimport DragIndicatorIcon from '@mui/icons-material/DragIndicator';\nimport Tooltip from '@mui/material/Tooltip';\nimport i18n from 'ui-i18n';\nimport './node-content.css';\nimport {classnames} from './utils';\nimport {ReactSortableTreeUtils} from '@reltio/components';\n\nclass NodeRendererDefault extends Component {\n render() {\n const {\n scaffoldBlockPxWidth,\n toggleChildrenVisibility,\n connectDragPreview,\n connectDragSource,\n isDragging,\n canDrop,\n canDrag,\n node,\n title,\n subtitle,\n draggedNode,\n path,\n treeIndex,\n isSearchMatch,\n isSearchFocus,\n buttons,\n className,\n style,\n didDrop,\n //eslint-disable-next-line no-unused-vars\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n treeId,\n //eslint-disable-next-line no-unused-vars\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isOver, // Not needed, but preserved for other renderers\n //eslint-disable-next-line no-unused-vars\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parentNode, // Needed for dndManager\n rowDirection,\n ...otherProps\n } = this.props;\n const nodeTitle = title || node.title;\n const nodeSubtitle = subtitle || node.subtitle;\n const rowDirectionClass = rowDirection === 'rtl' ? 'rst__rtl' : null;\n let handle;\n if (canDrag) {\n if (typeof node.children === 'function' && node.expanded) {\n // Show a loading symbol on the handle when the children are expanded\n // and yet still defined by a function (a callback to fetch the children)\n handle = (\n <div className=\"rst__loadingHandle\">\n <div className=\"rst__loadingCircle\">\n {[...new Array(12)].map((_, index) => (\n <div\n // eslint-disable-next-line react/no-array-index-key\n key={index}\n className={classnames('rst__loadingCirclePoint', rowDirectionClass)}\n />\n ))}\n </div>\n </div>\n );\n } else {\n // Show the handle used to initiate a drag-and-drop\n handle = connectDragSource(\n <div className=\"rst__moveHandle\">\n <Tooltip title={i18n.text('Drag node')}>\n <DragIndicatorIcon />\n </Tooltip>\n </div>,\n {\n dropEffect: 'copy'\n }\n );\n }\n }\n\n const isDraggedDescendant = draggedNode && ReactSortableTreeUtils.isDescendant(draggedNode, node);\n const isLandingPadActive = !didDrop && isDragging;\n\n const showToggleChildrenButton =\n toggleChildrenVisibility &&\n !node.root &&\n !node.cycled &&\n ((node.children && node.children.length > 0) || node.pending);\n\n const onToggle = () => {\n toggleChildrenVisibility({\n node,\n path,\n treeIndex\n });\n };\n\n return (\n <div style={{height: '100%'}} {...otherProps} key={node.nodeId}>\n {showToggleChildrenButton && node.expanded && !isDragging && (\n <div\n style={{width: scaffoldBlockPxWidth - 2}}\n className={classnames('rst__lineChildren', rowDirectionClass)}\n />\n )}\n\n <div className={classnames('rst__rowWrapper', rowDirectionClass)}>\n {/* Set the row preview to be used during drag and drop */}\n {connectDragPreview(\n <div\n className={classnames(\n 'rst__row',\n isLandingPadActive && 'rst__rowLandingPad',\n isLandingPadActive && !canDrop && 'rst__rowCancelPad',\n isSearchMatch && 'rst__rowSearchMatch',\n isSearchFocus && 'rst__rowSearchFocus',\n rowDirectionClass,\n className\n )}\n style={{\n opacity: isDraggedDescendant ? 0.5 : 1,\n ...style\n }}\n >\n {handle}\n\n <div\n className={classnames(\n 'rst__rowContents',\n !canDrag && 'rst__rowContentsDragDisabled',\n rowDirectionClass\n )}\n >\n {showToggleChildrenButton ? (\n <div className=\"rst__buttonWrapper\" onClick={onToggle}>\n <div\n aria-label={node.expanded ? 'Collapse' : 'Expand'}\n className={classnames(\n node.expanded ? 'rst__collapseButton' : 'rst__expandButton',\n rowDirectionClass\n )}\n />\n </div>\n ) : (\n <div className={classnames('rst__buttonWrapper', 'rst__noButton')} />\n )}\n <div className={classnames('rst__rowLabel', rowDirectionClass)}>\n <div\n className={classnames(\n 'rst__rowTitle',\n node.subtitle && 'rst__rowTitleWithSubtitle'\n )}\n >\n {typeof nodeTitle === 'function'\n ? nodeTitle({\n node,\n path,\n treeIndex\n })\n : nodeTitle}\n </div>\n\n {nodeSubtitle && (\n <span className=\"rst__rowSubtitle\">\n {typeof nodeSubtitle === 'function'\n ? nodeSubtitle({\n node,\n path,\n treeIndex\n })\n : nodeSubtitle}\n </span>\n )}\n </div>\n\n <div className=\"rst__rowToolbar\">\n {buttons.map((btn, index) => (\n <div\n key={index} // eslint-disable-line react/no-array-index-key\n className=\"rst__toolbarButton\"\n >\n {btn}\n </div>\n ))}\n </div>\n </div>\n </div>,\n {offsetX: 0, offsetY: 0}\n )}\n </div>\n </div>\n );\n }\n}\n\nNodeRendererDefault.defaultProps = {\n isSearchMatch: false,\n isSearchFocus: false,\n canDrag: false,\n toggleChildrenVisibility: null,\n buttons: [],\n className: '',\n style: {},\n parentNode: null,\n draggedNode: null,\n canDrop: false,\n title: null,\n subtitle: null,\n rowDirection: 'ltr'\n};\n\nNodeRendererDefault.propTypes = {\n node: PropTypes.shape({}).isRequired,\n title: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n subtitle: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n path: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])).isRequired,\n treeIndex: PropTypes.number.isRequired,\n treeId: PropTypes.string.isRequired,\n isSearchMatch: PropTypes.bool,\n isSearchFocus: PropTypes.bool,\n canDrag: PropTypes.bool,\n scaffoldBlockPxWidth: PropTypes.number.isRequired,\n toggleChildrenVisibility: PropTypes.func,\n buttons: PropTypes.arrayOf(PropTypes.node),\n className: PropTypes.string,\n style: PropTypes.shape({}),\n\n // Drag and drop API functions\n // Drag source\n connectDragPreview: PropTypes.func.isRequired,\n connectDragSource: PropTypes.func.isRequired,\n parentNode: PropTypes.shape({}), // Needed for dndManager\n isDragging: PropTypes.bool.isRequired,\n didDrop: PropTypes.bool.isRequired,\n draggedNode: PropTypes.shape({}),\n // Drop target\n isOver: PropTypes.bool.isRequired,\n canDrop: PropTypes.bool,\n\n // rtl support\n rowDirection: PropTypes.string\n};\n\nexport default NodeRendererDefault;\n","import {createContext} from 'react';\n\nexport const TreeThemeContext = createContext({\n generateTreeNodeProps: undefined\n});\n\nTreeThemeContext.displayName = 'TreeThemeContext';\n","import React, {Component, Children, cloneElement} from 'react';\nimport PropTypes from 'prop-types';\n\nimport './tree-node.css';\nimport {classnames} from './utils';\nimport {MIN_NODE_CONTENT_WIDTH} from '.';\nimport {TreeThemeContext} from '../treeThemeContext';\n\nclass TreeNode extends Component {\n static contextType = TreeThemeContext;\n\n render() { //NOSONAR\n const {\n children,\n listIndex,\n swapFrom,\n swapLength,\n swapDepth,\n scaffoldBlockPxWidth,\n lowerSiblingCounts,\n connectDropTarget,\n isOver,\n draggedNode,\n canDrop,\n treeIndex,\n // eslint-disable-next-line no-unused-vars\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n treeId, // Delete from otherProps\n // eslint-disable-next-line no-unused-vars\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getPrevRow, // Delete from otherProps\n // eslint-disable-next-line no-unused-vars\n node, // Delete from otherProps\n // eslint-disable-next-line no-unused-vars\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n path, // Delete from otherProps\n rowDirection,\n ...otherProps\n } = this.props;\n\n const rowDirectionClass = rowDirection === 'rtl' ? 'rst__rtl' : null;\n\n // Construct the scaffold representing the structure of the tree\n const scaffoldBlockCount = lowerSiblingCounts.length;\n const scaffold = [];\n lowerSiblingCounts.forEach((lowerSiblingCount, i) => {\n let lineClass = '';\n if (lowerSiblingCount > 0) {\n // At this level in the tree, the nodes had sibling nodes further down\n\n /*if (listIndex === 0) {\n // Top-left corner of the tree\n // +-----+\n // | |\n // | +--+\n // | | |\n // +--+--+\n lineClass =\n 'rst__lineHalfHorizontalRight rst__lineHalfVerticalBottom';\n } else*/ if (i === scaffoldBlockCount - 1) {\n // Last scaffold block in the row, right before the row content\n // +--+--+\n // | | |\n // | +--+\n // | | |\n // +--+--+\n lineClass = 'rst__lineHalfHorizontalRight rst__lineFullVertical';\n } else {\n // Simply connecting the line extending down to the next sibling on this level\n // +--+--+\n // | | |\n // | | |\n // | | |\n // +--+--+\n lineClass = 'rst__lineFullVertical';\n }\n } /*else if (listIndex === 0) {\n // Top-left corner of the tree, but has no siblings\n // +-----+\n // | |\n // | +--+\n // | |\n // +-----+\n lineClass = 'rst__lineHalfHorizontalRight';\n }*/ else if (i === scaffoldBlockCount - 1) {\n // The last or only node in this level of the tree\n // +--+--+\n // | | |\n // | +--+\n // | |\n // +-----+\n lineClass = 'rst__lineHalfVerticalTop rst__lineHalfHorizontalRight';\n }\n\n scaffold.push(\n <div\n key={`pre_${1 + i}`}\n style={{width: scaffoldBlockPxWidth}}\n className={classnames('rst__lineBlock', lineClass, rowDirectionClass)}\n />\n );\n\n if (treeIndex !== listIndex && i === swapDepth) {\n // This row has been shifted, and is at the depth of\n // the line pointing to the new destination\n let highlightLineClass = '';\n\n if (listIndex === swapFrom + swapLength - 1) {\n // This block is on the bottom (target) line\n // This block points at the target block (where the row will go when released)\n highlightLineClass = 'rst__highlightBottomLeftCorner';\n } else if (treeIndex === swapFrom) {\n // This block is on the top (source) line\n highlightLineClass = 'rst__highlightTopLeftCorner';\n } else {\n // This block is between the bottom and top\n highlightLineClass = 'rst__highlightLineVertical';\n }\n\n let style;\n if (rowDirection === 'rtl') {\n style = {\n width: scaffoldBlockPxWidth,\n right: scaffoldBlockPxWidth * i\n };\n } else {\n // Default ltr\n style = {\n width: scaffoldBlockPxWidth,\n left: scaffoldBlockPxWidth * i\n };\n }\n\n scaffold.push(\n <div\n // eslint-disable-next-line react/no-array-index-key\n key={i}\n style={style}\n className={classnames('rst__absoluteLineBlock', highlightLineClass, rowDirectionClass)}\n />\n );\n }\n });\n\n let style;\n const scaffoldWidth = scaffoldBlockPxWidth * scaffoldBlockCount;\n if (rowDirection === 'rtl') {\n style = {right: scaffoldWidth};\n } else {\n // Default ltr\n style = {left: scaffoldWidth};\n }\n style = {...style, width: `calc(100% - ${scaffoldWidth}px`};\n const width = `${scaffoldWidth + MIN_NODE_CONTENT_WIDTH}px`;\n const nodeStyle = {...otherProps.style, width};\n const treeNodeProps =\n this.context && this.context.generateTreeNodeProps && this.context.generateTreeNodeProps(this.props);\n return connectDropTarget(\n <div\n {...otherProps}\n className={classnames(\n 'rst__node',\n node.root && 'rst__root',\n rowDirectionClass,\n treeNodeProps && treeNodeProps.treeNodeClassName,\n !!draggedNode && draggedNode.nodeId !== node.nodeId && 'rst_node_hover_disabled'\n )}\n style={nodeStyle}\n >\n {scaffold}\n\n <div className=\"rst__nodeContent\" style={style}>\n {Children.map(children, (child) =>\n cloneElement(child, {\n isOver,\n canDrop,\n draggedNode\n })\n )}\n </div>\n </div>\n );\n }\n}\n\nTreeNode.defaultProps = {\n swapFrom: null,\n swapDepth: null,\n swapLength: null,\n canDrop: false,\n draggedNode: null,\n rowDirection: 'ltr'\n};\n\nTreeNode.propTypes = {\n treeIndex: PropTypes.number.isRequired,\n treeId: PropTypes.string.isRequired,\n swapFrom: PropTypes.number,\n swapDepth: PropTypes.number,\n swapLength: PropTypes.number,\n scaffoldBlockPxWidth: PropTypes.number.isRequired,\n lowerSiblingCounts: PropTypes.arrayOf(PropTypes.number).isRequired,\n\n listIndex: PropTypes.number.isRequired,\n children: PropTypes.node.isRequired,\n\n // Drop target\n connectDropTarget: PropTypes.func.isRequired,\n isOver: PropTypes.bool.isRequired,\n canDrop: PropTypes.bool,\n draggedNode: PropTypes.shape({}),\n\n // used in dndManager\n getPrevRow: PropTypes.func.isRequired,\n node: PropTypes.shape({}).isRequired,\n path: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])).isRequired,\n\n // rtl support\n rowDirection: PropTypes.string\n};\n\nexport default TreeNode;\n","// Can override the following:\n//\n// style: PropTypes.shape({}),\n// innerStyle: PropTypes.shape({}),\n// reactVirtualizedListProps: PropTypes.shape({}),\n// scaffoldBlockPxWidth: PropTypes.number,\n// slideRegionSize: PropTypes.number,\n// rowHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.func]),\n// treeNodeRenderer: PropTypes.func,\n// nodeContentRenderer: PropTypes.func,\n// placeholderRenderer: PropTypes.func,\n\nimport nodeContentRenderer from './node-content-renderer';\nimport treeNodeRenderer from './tree-node-renderer';\n\nexport const MIN_NODE_CONTENT_WIDTH = 250;\nconst scaffoldBlockPxWidth = 16;\nconst rowHeight = 28;\nconst slideRegionSize = 50;\nexport {nodeContentRenderer, treeNodeRenderer, scaffoldBlockPxWidth, rowHeight, slideRegionSize};\n","import PropTypes from 'prop-types';\nimport {EntityType, RelationType} from '@reltio/mdm-sdk';\n\nconst lazyGenericNodeType = () => GenericNodeType;\nconst lazyHierarchyNodeType = () => HierarchyNodeType;\n\nconst GenericNodeType = PropTypes.shape({\n nodeId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n children: PropTypes.arrayOf(lazyGenericNodeType),\n showParents: PropTypes.bool,\n expanded: PropTypes.bool,\n pending: PropTypes.bool,\n cycled: PropTypes.bool\n});\n\nconst HierarchyNodeType = PropTypes.shape({\n nodeId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n entity: EntityType,\n relation: RelationType,\n relations: PropTypes.arrayOf(RelationType),\n total: PropTypes.number,\n parent: PropTypes.arrayOf(PropTypes.string),\n directParentUri: PropTypes.string,\n children: PropTypes.arrayOf(lazyHierarchyNodeType),\n loading: PropTypes.bool,\n expanded: PropTypes.bool,\n showParents: PropTypes.bool,\n cycled: PropTypes.bool,\n pending: PropTypes.bool\n});\n\nconst ActivenessDateType = PropTypes.number;\n\nconst TreeType = PropTypes.shape({\n root: HierarchyNodeType,\n graphTypes: PropTypes.string,\n entitiesMap: PropTypes.object,\n title: PropTypes.string,\n activenessDate: ActivenessDateType,\n scrollTo: HierarchyNodeType,\n loading: PropTypes.bool\n});\n\nexport {ActivenessDateType, GenericNodeType, HierarchyNodeType, TreeType};\n","import React, {useCallback, useEffect, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport {GenericNodeType} from '../../constants/prop-types';\nimport {ReactSortableTreeUtils} from '@reltio/components';\nimport * as hierarchyTheme from './theme';\nimport {propOr} from 'ramda';\nimport {CellMeasurerCache} from 'react-virtualized';\n\nconst MeasuredNode = ({measure, registerChild, NodeRenderer, node, treeIndex}) => {\n useEffect(measure, [treeIndex]);\n return <NodeRenderer measure={measure} registerChild={registerChild} node={node} />;\n};\n\nMeasuredNode.propTypes = {\n measure: PropTypes.func,\n registerChild: PropTypes.func,\n NodeRenderer: PropTypes.func,\n node: GenericNodeType,\n treeIndex: PropTypes.number\n};\n\n// eslint-disable-next-line react/prop-types,react/display-name\nconst getMeasuredNode = ({NodeRenderer, node, treeIndex}) => ({measure, registerChild}) => (\n <MeasuredNode\n NodeRenderer={NodeRenderer}\n node={node}\n treeIndex={treeIndex}\n measure={measure}\n registerChild={registerChild}\n />\n);\n\nconst useRefreshableMeasurerCache = (treeDataRef, getNodeKey) => {\n const keyMapper = useCallback(\n (rawIndex) => {\n const nodeInfo = ReactSortableTreeUtils.getVisibleNodeInfoAtIndex({\n treeData: treeDataRef.current,\n index: rawIndex,\n getNodeKey\n });\n return getNodeKey({node: propOr({nodeId: -1}, 'node', nodeInfo)});\n },\n [getNodeKey, treeDataRef]\n );\n const [measurerCache] = useState(\n new CellMeasurerCache({\n fixedWidth: true,\n defaultHeight: hierarchyTheme.rowHeight,\n minHeight: hierarchyTheme.rowHeight,\n keyMapper\n })\n );\n const clearCache = () => {\n measurerCache.clearAll();\n };\n\n const onWindowResize = useCallback(clearCache, []);\n useEffect(() => {\n window.addEventListener('resize', onWindowResize);\n return () => {\n window.removeEventListener('resize', onWindowResize);\n };\n }, [onWindowResize]);\n return measurerCache;\n};\n\nexport {getMeasuredNode, useRefreshableMeasurerCache};\n","const getElementByNodeId = (nodeId) => {\n return document.querySelector(`[data-node-id=\"${nodeId}\"]`);\n};\n\nconst scrollToContainerElementByNodeId = (nodeId, scrollingContainer) => {\n const element = getElementByNodeId(nodeId);\n if (element) {\n const elementRect = element.getBoundingClientRect();\n const scrollingContainerRect = scrollingContainer.getBoundingClientRect();\n if (elementRect.right > scrollingContainerRect.right) {\n scrollingContainer.scrollLeft = elementRect.right - scrollingContainerRect.right;\n } else if (scrollingContainer.scrollLeft > 0 && elementRect.left < scrollingContainerRect.left) {\n scrollingContainer.scrollLeft =\n scrollingContainer.scrollLeft + elementRect.left - scrollingContainerRect.left;\n }\n } else {\n setTimeout(() => scrollToContainerElementByNodeId(nodeId, scrollingContainer), 0);\n }\n};\n\nconst getNodeKey = ({node, treeIndex}) => (treeIndex ? `${node.nodeId}-${treeIndex}` : `${node.nodeId}`);\n\nconst DefaultNodeRenderer = ({node}) => node.title || null;\n\nexport {scrollToContainerElementByNodeId, getNodeKey, DefaultNodeRenderer};\n","import React, {useCallback, useEffect, useMemo, useRef} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport PropTypes from 'prop-types';\nimport {assoc, identity, omit, path, pick, pipe} from 'ramda';\nimport {CellMeasurer} from 'react-virtualized';\nimport {useStyles} from './styles';\nimport {\n ReactSortableTree,\n ReactSortableTreeUtils,\n usePrevious,\n useRunOnceAfterValueInitialization\n} from '@reltio/components';\nimport * as hierarchyTheme from './theme';\nimport {GenericNodeType} from '../../constants/prop-types';\nimport {getMeasuredNode, useRefreshableMeasurerCache} from './measureHelpers';\nimport {DefaultNodeRenderer, getNodeKey, scrollToContainerElementByNodeId} from './nodeHelpers';\n\nconst theme = pick(\n ['nodeContentRenderer', 'treeNodeRenderer', 'scaffoldBlockPxWidth', 'rowHeight', 'slideRegionSize'],\n hierarchyTheme\n);\n\nconst Tree = ({\n NodeRenderer = DefaultNodeRenderer,\n root,\n scrollToNode,\n onChange,\n onRequestChildren,\n canDrag = false,\n canDrop,\n onScroll = identity,\n onNodeMoved = identity,\n inlineRoot\n}) => {\n const styles = useStyles();\n\n const treeData = useMemo(() => {\n const rootChildren = (root && root.children) || [];\n if (inlineRoot) {\n const inlinedRoot = pipe(omit(['children']), assoc('root', true))(root);\n return [inlinedRoot, ...rootChildren];\n } else {\n return rootChildren;\n }\n }, [root, inlineRoot]);\n\n const virtualizedListRef = useRef(null);\n const treeDataRef = useRef(null);\n const scrollTimerRef = useRef(null);\n treeDataRef.current = treeData;\n\n const getVirtualizedListInstance = useCallback(\n () => path(['current', 'wrappedInstance', 'current'], virtualizedListRef),\n []\n );\n\n const measurerCache = useRefreshableMeasurerCache(treeDataRef, getNodeKey);\n useRunOnceAfterValueInitialization(() => {\n // force applying of rows measurements after first grid render\n setTimeout(() => {\n const vList = getVirtualizedListInstance();\n vList && vList.forceUpdateGrid();\n }, 0);\n }, root);\n\n const getScrollingContainer = useCallback(\n () => path(['Grid', '_scrollingContainer'], getVirtualizedListInstance()),\n [getVirtualizedListInstance]\n );\n\n useEffect(() => {\n if (root && scrollToNode) {\n const results = ReactSortableTreeUtils.find({\n treeData,\n getNodeKey: getNodeKey,\n searchFocusOffset: 0,\n searchQuery: '',\n searchMethod: ({node}) => node === scrollToNode\n });\n const treeIndex = path(['matches', 0, 'treeIndex'], results);\n const vList = getVirtualizedListInstance();\n if (vList && treeIndex != null) {\n vList.scrollToRow(treeIndex);\n scrollTimerRef.current = setTimeout(() => {\n const scrollingContainer = getScrollingContainer();\n scrollToContainerElementByNodeId(scrollToNode.nodeId, scrollingContainer);\n }, 500);\n }\n }\n\n return () => {\n clearTimeout(scrollTimerRef.current);\n };\n }, [root, treeData, scrollToNode, getVirtualizedListInstance, getScrollingContainer]);\n\n const onSortableTreeChange = useCallback(\n (treeData) => {\n onChange && onChange({...root, children: inlineRoot ? treeData.slice(1) : treeData});\n },\n [onChange, root, inlineRoot]\n );\n\n //eslint-disable-next-line\n const nodeRenderWithMeasure = useCallback(\n ({node, treeIndex}) => (\n <CellMeasurer\n cache={measurerCache}\n columnIndex={0}\n key={getNodeKey({node})}\n rowIndex={treeIndex}\n parent={getVirtualizedListInstance()}\n >\n {getMeasuredNode({NodeRenderer, node, treeIndex})}\n </CellMeasurer>\n ),\n [NodeRenderer, measurerCache]\n );\n\n const generateNodeProps = useCallback(\n (rowInfo) => ({\n title: nodeRenderWithMeasure(rowInfo)\n }),\n [nodeRenderWithMeasure]\n );\n const previousTreeData = usePrevious(treeData);\n const onMoveNode = useCallback(\n (movedNodeInfo) => {\n const {prevPath, nextParentNode} = movedNodeInfo;\n let prevParentNode;\n if (prevPath.length > 1) {\n const parentPath = prevPath.slice(0, -1);\n const result = ReactSortableTreeUtils.getNodeAtPath({\n treeData: previousTreeData,\n getNodeKey: getNodeKey,\n path: parentPath\n });\n if (result) {\n prevParentNode = result.node;\n }\n } else {\n prevParentNode = root;\n }\n onNodeMoved({prevParentNode, ...movedNodeInfo, nextParentNode: nextParentNode || root});\n },\n [onNodeMoved, root, previousTreeData]\n );\n\n const handleOnLazyLoadChildren = useCallback(\n ({node}) => {\n onRequestChildren(node);\n },\n [onRequestChildren]\n );\n const handleResize = useCallback(() => {\n measurerCache.clearAll();\n }, [measurerCache]);\n\n return root ? (\n <ReactResizeDetector skipOnMount handleWidth onResize={handleResize}>\n <div className={styles.container}>\n {!inlineRoot && (\n <div className={styles.root}>\n <NodeRenderer node={root} isRoot={true} />\n </div>\n )}\n <div className={styles.tree}>\n <ReactSortableTree\n isVirtualized={true}\n canDrag={canDrag}\n canDrop={canDrop}\n treeData={treeData}\n theme={theme}\n generateNodeProps={generateNodeProps}\n rowHeight={measurerCache.rowHeight}\n reactVirtualizedListProps={{\n ref: virtualizedListRef,\n scrollToAlignment: 'end',\n onScroll\n }}\n onMoveNode={onMoveNode}\n onChange={onSortableTreeChange}\n onLazyLoadChildren={handleOnLazyLoadChildren}\n getNodeKey={getNodeKey}\n />\n </div>\n </div>\n </ReactResizeDetector>\n ) : null;\n};\n\nTree.propTypes = {\n NodeRenderer: PropTypes.elementType,\n root: GenericNodeType,\n canDrag: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n canDrop: PropTypes.func,\n scrollToNode: PropTypes.object,\n onChange: PropTypes.func,\n onRequestChildren: PropTypes.func,\n onNodeMoved: PropTypes.func,\n onScroll: PropTypes.func,\n inlineRoot: PropTypes.bool,\n getNodeKey: PropTypes.func\n};\n\nexport default Tree;\n","import {makeStyles} from '@mui/styles';\n\nexport const useCommonStyles = makeStyles(() => ({\n container: {\n fontSize: '13px',\n display: 'flex',\n paddingTop: '6px',\n position: 'relative'\n },\n title: {\n flexGrow: 1,\n width: 0,\n minHeight: '15px'\n }\n}));\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n loadingSpinner: {\n alignSelf: 'center',\n maxHeight: '16px',\n marginRight: '16px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport {useCommonStyles} from '../commonStyles';\nimport {useStyles} from './styles';\n\nimport {LoadingSpinner} from '@reltio/components';\n\nexport const LoadingNode = ({className, registerChild}) => {\n const commonStyles = useCommonStyles();\n const styles = useStyles();\n return (\n <div className={classnames(commonStyles.container, className)} ref={registerChild}>\n <LoadingSpinner className={styles.loadingSpinner} />\n <div className={commonStyles.title}>{i18n.text('Loading...')}</div>\n </div>\n );\n};\n\nLoadingNode.propTypes = {\n className: PropTypes.string,\n registerChild: PropTypes.func\n};\n\nexport default LoadingNode;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n wrapper: {\n width: '100%'\n },\n avatar: {\n height: '16px',\n width: '16px',\n marginRight: '8px'\n },\n avatarWithMultiParent: {\n cursor: 'pointer'\n },\n number: {\n color: 'rgba(0,0,0,0.54)',\n marginLeft: '13px'\n },\n multiParentIcon: {\n position: 'absolute',\n top: '15px',\n left: '-3px',\n cursor: 'pointer'\n },\n actionsBlock: {\n position: 'absolute',\n right: '0',\n top: '2px',\n backgroundColor: 'rgb(240,240,240)',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n left: '-40px',\n top: 0,\n width: '40px',\n height: '100%',\n background: 'linear-gradient(to right, rgba(240,240,240, 0.2), rgba(240,240,240, 1) 100%)',\n pointerEvents: 'none'\n }\n },\n actionsBlockWithOpenMenu: {\n backgroundColor: 'white',\n '&::after': {\n background: 'linear-gradient(to right, rgba(255,255,255, 0.2), rgba(255,255,255, 1) 100%)'\n }\n },\n actionsBlockForCheckedNode: {\n backgroundColor: 'rgb(224,238,249)',\n '&::after': {\n background: 'linear-gradient(to right, rgba(224,238,249, 0.2), rgba(224,238,249, 1) 100%)'\n }\n },\n regularNodeCheckbox: {\n padding: 0,\n marginRight: '16px',\n marginTop: '-4px',\n marginLeft: '-4px'\n },\n subtitle: {\n fontSize: '11px',\n letterSpacing: 0,\n lineHeight: '13px',\n paddingLeft: '24px',\n paddingTop: '2px',\n paddingBottom: '4px',\n wordBreak: 'break-word'\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: \"11\",\n height: \"11\",\n viewBox: \"0 0 12 12\",\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}, React.createElement(\"circle\", {\n strokeOpacity: \".54\",\n stroke: \"#000\",\n fill: \"#FFF\",\n cx: \"6\",\n cy: \"6\",\n r: \"5.5\"\n}), React.createElement(\"path\", {\n d: \"M5.536 4.641L4.505 3.61H8v3.495L6.874 5.98 5.509 7.344a1.995 1.995 0 00-.581 1.548l-.407-.408a2 2 0 010-2.828l1.015-1.015z\",\n fillOpacity: \".87\",\n fill: \"#000\"\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: \"10\",\n height: \"10\",\n viewBox: \"0 0 10 10\",\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: \".38\"\n}, React.createElement(\"path\", {\n d: \"M4.536 3.641L3.505 2.61H7v3.495L5.874 4.98 4.509 6.344a1.995 1.995 0 00-.581 1.548l-.407-.408a2 2 0 010-2.828l1.015-1.015z\",\n fill: \"#000\"\n}))));","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n fontSize: '13px',\n lineHeight: '16px',\n display: 'flex',\n marginBottom: '12px',\n alignItems: 'center',\n '&:last-child': {\n marginBottom: 0\n }\n },\n avatar: {\n height: '16px',\n width: '16px',\n marginRight: '6px',\n flexShrink: 0\n },\n loadingNode: {\n paddingTop: 0,\n width: '100%'\n }\n}));\n","import React, {useState} from 'react';\nimport {HierarchyNodeTitle} from '@reltio/components';\nimport LoadingNode from '../../LoadingNode/LoadingNode';\nimport ParentIcon from './parentIcon.svg';\nimport {useStyles} from './styles';\n\ntype Node = {\n pending: boolean;\n title?: string;\n viewId?: string;\n entityUri?: string;\n};\n\ntype Props = {\n node: Node;\n};\n\nexport const MultiParentBlockItem = ({node}: Props) => {\n const styles = useStyles();\n const [popperAnchor, setPopperAnchor] = useState<HTMLElement>();\n\n return (\n <div ref={setPopperAnchor} className={styles.root}>\n {node.pending ? (\n <LoadingNode className={styles.loadingNode} />\n ) : (\n <>\n <ParentIcon className={styles.avatar} />\n <HierarchyNodeTitle\n title={node.title}\n entityUri={node.entityUri}\n viewId={node.viewId}\n anchorEl={popperAnchor}\n />\n </>\n )}\n </div>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n multiParent: {\n position: 'relative',\n background: '#ffffff',\n border: '1px solid rgba(0,0,0,0.12)',\n marginLeft: '-5px',\n marginTop: '10px',\n padding: '10px 11px 9px 6px',\n '&:after,&:before': {\n bottom: '100%',\n left: '12px',\n border: 'solid transparent',\n content: \"' '\",\n height: 0,\n width: 0,\n position: 'absolute',\n 'pointer-events': 'none'\n },\n '&:after': {\n borderColor: 'rgba(255, 255, 255, 0)',\n borderBottomColor: '#ffffff',\n borderWidth: '6px',\n marginLeft: '-6px'\n },\n '&:before': {\n borderColor: 'rgba(220, 216, 245, 0)',\n borderBottomColor: 'rgba(0,0,0,0.12)',\n borderWidth: '7px',\n marginLeft: '-7px'\n }\n }\n}));\n","import React from 'react';\nimport {MultiParentBlockItem} from '../MultiParentBlockItem/MultiParentBlockItem';\nimport {useStyles} from './styles';\n\ntype Node = {\n pending: boolean;\n title?: string;\n viewId?: string;\n entityUri?: string;\n};\n\ntype Props = {\n showParents: boolean;\n additionalParents: Array<Node>;\n};\n\nconst MultiParentBlock = ({showParents, additionalParents}: Props) => {\n const styles = useStyles();\n\n return showParents && additionalParents.length > 0 ? (\n <div className={styles.multiParent}>\n {additionalParents.map((parent, i) => (\n <MultiParentBlockItem key={i} node={parent} />\n ))}\n </div>\n ) : null;\n};\n\nexport default MultiParentBlock;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n details: {\n margin: '1px 0 8px 24px'\n },\n loadingNode: {\n paddingTop: 0\n },\n detailLine: {\n display: 'flex'\n },\n detail: {\n flexGrow: 1,\n width: 0,\n wordWrap: 'break-word',\n lineHeight: '16px',\n paddingLeft: '8px',\n textIndent: '-8px'\n },\n detailLabel: {\n color: 'rgba(0, 0, 0, 0.6)',\n whiteSpace: 'nowrap',\n lineHeight: '16px',\n letterSpacing: 0,\n marginRight: '5px'\n },\n detailValue: {\n fontSize: '0.75rem',\n letterSpacing: 0\n }\n}));\n","let nodeCounter = 0;\nexport const generateId = () => nodeCounter++;\n","import {assoc, both, complement, curry, equals, findIndex, has, path, pipe, prop, when} from 'ramda';\nimport {nanoid} from 'nanoid';\nimport {\n getGraphType,\n generateNewRelationUri,\n mapTree,\n sortTreeChildren,\n createRelationTypesLabelsMap,\n wrapInArrayIfNeeded\n} from '@reltio/mdm-sdk';\nimport {generateId} from './generateId';\n\nexport const prepareTree = (tree, metadata) => {\n const {sortField, sortOrder, graphTypes} = tree;\n const root = mapTree(tree.root, {\n childrenProcessing: sortTreeChildren({\n sortField,\n sortOrder,\n typesLabelsMap: createRelationTypesLabelsMap(metadata)\n }),\n nodeProcessing: pipe(formatNodeFromTreeResponse, addSelfRelatedNode, expandNode)\n });\n const entitiesMap = buildEntitiesMapFromTree(root);\n const title = (getGraphType(metadata, graphTypes) || {}).label;\n return {...tree, root, entitiesMap, title};\n};\n\nexport const buildTreeFromHops = ({json, parentUri, sortField, sortOrder, metadata, isReversed}) => {\n const entitiesMap = processHopsResponse(json, isReversed);\n const rawSubTree = entitiesMap && breakCycles(entitiesMap[parentUri]);\n return mapTree(rawSubTree, {\n nodeProcessing: pipe(formatNodeFromHopResponse, addSelfRelatedNode),\n childrenProcessing: sortTreeChildren({\n sortField,\n sortOrder,\n typesLabelsMap: createRelationTypesLabelsMap(metadata)\n })\n });\n};\n\nconst convertParentProp = (parent) => (parent ? [].concat(parent) : []);\n\nconst getNodeUri = (node) => path(['entity', 'uri'], node);\n\nconst getRelationsProp = (relations) => (relations ? wrapInArrayIfNeeded(relations) : []);\n\nconst getRelationProp = (node, directParentUri) => {\n const relations = prop('relation', node);\n if (Array.isArray(relations)) {\n const parents = convertParentProp(node.parent);\n const parentIndex = findIndex(equals(directParentUri), parents);\n return path([parentIndex], relations);\n } else {\n return relations;\n }\n};\n\nexport const formatNodeFromTreeResponse = (node, directParent = {}) =>\n node.formatted\n ? node\n : {\n ...node,\n nodeId: generateId(),\n parent: convertParentProp(node.parent),\n directParentUri: getNodeUri(directParent),\n pending: !node.children && node.total > 0,\n formatted: true,\n relations: getRelationsProp(node.relation),\n relation: getRelationProp(node, getNodeUri(directParent))\n };\n\nconst formatNodeFromHopResponse = (node, directParent = {}) => {\n const {children, parent, traversedRelations, untraversedRelations, cycled, formatted, relation, ...entity} = node;\n if (formatted) {\n return node;\n }\n const total = traversedRelations + untraversedRelations - 1;\n const directParentUri = getNodeUri(directParent);\n const formattedNode = {\n nodeId: generateId(),\n cycled,\n entity,\n parent: convertParentProp(parent),\n directParentUri,\n total,\n pending: !cycled && !children && total > 0,\n formatted: true,\n relations: getRelationsProp(relation),\n relation: getRelationProp(node, directParentUri)\n };\n if (children) {\n formattedNode.children = children;\n formattedNode.pending = !cycled && total > children.length;\n }\n return formattedNode;\n};\n\nconst addSelfRelatedNode = (node) => {\n const children = node.children || [];\n const alreadyHasSelfRelatedNode = children.some(\n (child) => path(['entity', 'uri'], child) === node.entity.uri || child.uri === node.entity.uri\n );\n if (!alreadyHasSelfRelatedNode && !node.cycled && node.parent.includes(node.entity.uri)) {\n return {\n ...node,\n children: children.concat({\n ...node,\n nodeId: generateId(),\n directParentUri: node.entity.uri,\n total: 0,\n children: [],\n cycled: true\n })\n };\n }\n return node;\n};\n\nconst expandNode = when(both(has('children'), complement(prop('pending'))), assoc('expanded', true));\n\n/* eslint-disable no-unused-vars, @typescript-eslint/no-unused-vars */\nconst clearNodeForEntityMap = ({\n nodeId,\n relation,\n formatted,\n directParentUri,\n pending,\n children,\n total,\n ...clearedNode\n}) => clearedNode;\n/* eslint-enable */\n\nconst buildEntitiesMapFromTree = (node, result = {}) => {\n const key = getNodeUri(node);\n if (key) {\n result[key] = clearNodeForEntityMap(node);\n }\n if (node.children) {\n node.children.forEach((child) => buildEntitiesMapFromTree(child, result));\n }\n return result;\n};\n\nconst buildEntitiesMapFromHopsEntities = (entitiesMap) => {\n return Object.keys(entitiesMap).reduce((result, entityUri) => {\n const entity = formatNodeFromHopResponse(entitiesMap[entityUri]);\n result[entityUri] = clearNodeForEntityMap(entity);\n return result;\n }, {});\n};\n\nconst processHopsResponse = ({entities, relations}, isReversed) => {\n if (Array.isArray(entities)) {\n const entitiesMap = entities.reduce((result, entity) => {\n result[entity.uri] = entity;\n return result;\n }, {});\n (relations || []).forEach((relation) => {\n const parentObjectKey = isReversed ? 'endObject' : 'startObject';\n const childObjectKey = isReversed ? 'startObject' : 'endObject';\n const parent = entitiesMap[relation[parentObjectKey].objectURI];\n const child = entitiesMap[relation[childObjectKey].objectURI];\n parent.children = parent.children || [];\n if (!parent.children.includes(child)) {\n parent.children.push(child);\n }\n child.parent = child.parent || [];\n if (!child.relation) {\n child.relation = relation;\n }\n if (!child.parent.includes(parent.uri)) {\n child.parent.push(parent.uri);\n }\n });\n return entitiesMap;\n }\n};\n\nconst breakCycles = (root) => {\n /*\n Example of hierarchy with cycles:\n\n node\n |\n child\n |\n N-grand-child\n |\n [N-grand-child | child | node]\n\n Break the cycle by cloning the lowest-level node that causes cycle without its children\n */\n\n const queue = [\n {\n node: root,\n parent: null\n }\n ];\n const visitedNodes = [];\n for (const current of queue) {\n const {node, parent} = current;\n if (visitedNodes.includes(node)) {\n parent.children = parent.children.map((child) => {\n if (child === node) {\n return {\n ...node,\n cycled: true,\n children: []\n };\n } else {\n return child;\n }\n });\n } else {\n visitedNodes.push(node);\n if (node.children) {\n queue.push(...node.children.map((child) => ({node: child, parent: node})));\n }\n }\n }\n return root;\n};\n\nexport const buildEntitiesMapFromHops = curry((isReversed, json) =>\n pipe(processHopsResponse, buildEntitiesMapFromHopsEntities)(json, isReversed)\n);\n\nexport const isLoadingNode = (node) => node.loading;\nexport const isSelectedNode = (node, currentEntityUri) => getNodeUri(node) === currentEntityUri;\nexport const createLoadingNode = () => ({\n entity: {},\n loading: true,\n nodeId: nanoid()\n});\n\nexport const createNewTreeNode = () => ({\n nodeId: generateId(),\n relation: {\n uri: generateNewRelationUri(),\n attributes: {}\n }\n});\n","import {buildEntitiesMapFromHops, buildTreeFromHops} from './treeDataProvider';\nimport i18n from 'ui-i18n';\nimport {any, path, pipe, prop} from 'ramda';\nimport mdm, {profile, ui} from '@reltio/mdm-module';\nimport {getAllEntityTypesForGraphType, getHops, getRequestErrorMessage, isAbortError} from '@reltio/mdm-sdk';\nimport {generateId} from './generateId';\n\nconst treeActions = profile.trees.actions;\n\nexport const expandNodeCommand =\n ({id, nodeId}) =>\n (dispatch) => {\n dispatch(treeActions.nodeExpandedEvent({id, nodeId}));\n };\n\nexport const loadChildren =\n ({parentUri, parentId, graphTypes, activenessDate, id, isReversed, signal}) =>\n (dispatch, getState) => {\n const {sortField, sortOrder} = mdm.selectors.getTree(getState(), id);\n const metadata = mdm.selectors.getMetadata(getState());\n dispatch(treeActions.childrenLoading({id, parentId, nodeId: generateId()}));\n return getHops({uri: parentUri, graphTypes, activenessDate, signal})\n .then((json) => {\n const {children} = buildTreeFromHops({json, parentUri, sortField, sortOrder, metadata, isReversed});\n const entitiesSubMap = buildEntitiesMapFromHops(isReversed, json);\n dispatch(treeActions.childrenLoaded({id, children, parentId}));\n dispatch(treeActions.entitiesMappingLoaded({id, entitiesSubMap}));\n })\n .catch((error) => {\n if (!isAbortError(error)) {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n }\n dispatch(treeActions.cancelChildrenLoading({id, parentId}));\n });\n };\n\nexport const loadParents =\n ({uri, graphTypes, activenessDate, id, isReversed, nodeId, signal}) =>\n (dispatch) => {\n const createSubTreeEntitiesLoadedEvent = (entitiesSubMap) =>\n treeActions.entitiesMappingLoaded({id, entitiesSubMap});\n const parentsProcessing = pipe(\n buildEntitiesMapFromHops(isReversed),\n createSubTreeEntitiesLoadedEvent,\n dispatch\n );\n return getHops({uri, graphTypes, activenessDate, signal})\n .then(parentsProcessing)\n .catch((error) => {\n if (!isAbortError(error)) {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n }\n dispatch(treeActions.treeNodeChanged({id, node: {nodeId, showParents: false}}));\n });\n };\n\nexport const showCurrentEntity =\n ({id, uri}) =>\n (dispatch) => {\n dispatch(treeActions.currentEntityShownInTree({id, uri}));\n setTimeout(() => {\n dispatch(treeActions.resetScrollToNode(id));\n }, 0);\n };\n\nexport const scrollToTreeTop = (id) => (dispatch, getState) => {\n const tree = mdm.selectors.getTree(getState(), id);\n const uri = path(['root', 'children', 0, 'entity', 'uri'], tree);\n if (uri) {\n dispatch(showCurrentEntity({id, uri}));\n }\n};\n\nexport const hasEntityTypesWithSecondaryLabelPattern = pipe(\n getAllEntityTypesForGraphType,\n any(prop('secondaryLabelPattern'))\n);\n","import {always, cond, equals, has} from 'ramda';\nimport {profile} from '@reltio/mdm-module';\nimport {getRelation, NODE_EDITING_MODES, getPayloadForNodeApplyEditing} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {loadChildren} from './treeHelpers';\n\nconst treeActions = profile.trees.actions;\n\nexport const isRelationLoaded = has('attributes');\nexport const isNodeChecked = ({node, checkedNodes}) => has(node.nodeId, checkedNodes);\nexport const isEditorNode = has('editingMode');\n\nexport const hasEditorNode = (node = {}) => {\n return isEditorNode(node) || (has('children', node) && node.children.some(hasEditorNode));\n};\n\nconst loadRelationDetails =\n ({id, node}) =>\n (dispatch) => {\n const {nodeId, relation} = node;\n const currentRelation = Array.isArray(relation) ? relation[0] : relation;\n return isRelationLoaded(currentRelation)\n ? Promise.resolve(relation)\n : getRelation(currentRelation.uri).then((relationDetails) => {\n const detailedRelation = {...currentRelation, ...relationDetails};\n dispatch(\n treeActions.treeNodeChanged({\n id,\n node: {\n nodeId,\n relation: detailedRelation\n }\n })\n );\n return Promise.resolve(detailedRelation);\n });\n };\n\nexport const toggleRelationDetails =\n ({id, node}) =>\n (dispatch) => {\n const {nodeId, showDetails, relation} = node;\n const updatedNode = {\n nodeId,\n showDetails: !showDetails\n };\n dispatch(treeActions.treeNodeChanged({id, node: updatedNode}));\n\n const needDetails = !showDetails && !isRelationLoaded(relation) && relation;\n if (needDetails) {\n dispatch(loadRelationDetails({id, node}));\n }\n };\n\nexport const nodeStartEditing =\n ({id, node}) =>\n (dispatch) => {\n const {nodeId} = node;\n dispatch(treeActions.treeNodeChanged({id, node: {nodeId, loading: true}}));\n dispatch(loadRelationDetails({id, node})).then(() => {\n dispatch(treeActions.treeNodeEditingStarted({id, node}));\n });\n };\n\nexport const nodeStartAddingChild =\n ({id, node, newNode, isReversed, signal}) =>\n (dispatch, getState) => {\n dispatch(treeActions.treeNodeNewChildEditingStarted({id, node, newNode}));\n if (node.pending) {\n const store = getState();\n const {activenessDate, graphTypes} = mdm.selectors.getTree(store, id);\n dispatch(\n loadChildren({\n parentUri: node.entity.uri,\n parentId: node.nodeId,\n graphTypes,\n activenessDate,\n id,\n isReversed,\n signal\n })\n );\n }\n };\n\nexport const nodeCancelEditing =\n ({id, node}) =>\n (dispatch) => {\n const action = cond([\n [equals(NODE_EDITING_MODES.addingParent), always(treeActions.treeNodeNewParentEditingCanceled)],\n [equals(NODE_EDITING_MODES.addingChild), always(treeActions.treeNodeNewChildEditingCanceled)],\n [equals(NODE_EDITING_MODES.editing), always(treeActions.treeNodeEditingCanceled)]\n ])(node.editingMode);\n dispatch(action({id, node}));\n };\n\nexport const nodeApplyEditing =\n ({id, node, isReversed}) =>\n (dispatch, getState) => {\n const connection = mdm.selectors.getTreeEditingConnection(getState(), id, node.relation.uri);\n let dataAction;\n\n switch (node.editingMode) {\n case NODE_EDITING_MODES.addingParent:\n case NODE_EDITING_MODES.addingChild:\n dataAction = treeActions.treeRelationCreated;\n break;\n case NODE_EDITING_MODES.editing: {\n dataAction = treeActions.treeRelationChanged;\n break;\n }\n }\n dispatch(dataAction(getPayloadForNodeApplyEditing({node, connection, isReversed})));\n\n const treeAppearanceChangeActionCreator = cond([\n [equals(NODE_EDITING_MODES.addingParent), always(treeActions.treeNodeNewParentEditingApplied)],\n [equals(NODE_EDITING_MODES.addingChild), always(treeActions.treeNodeNewChildEditingApplied)],\n [equals(NODE_EDITING_MODES.editing), always(treeActions.treeNodeEditingApplied)]\n ])(node.editingMode);\n dispatch(treeAppearanceChangeActionCreator({id, node}));\n };\n\nexport const hasLoadingNode = (node) => {\n return node.loading || (has('children', node) && node.children.some(hasLoadingNode));\n};\n\nexport const getShowSecondaryLabelValue = (showSecondaryLabel = true, enabled) => enabled && showSecondaryLabel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {pick, prop} from 'ramda';\nimport i18n from 'ui-i18n';\n\nimport {useStyles} from './styles';\n\nimport LoadingNode from '../../LoadingNode/LoadingNode';\nimport {ACTIVENESS_ATTR_TYPES, DataTypes, getRelationType, MetadataType, RelationType} from '@reltio/mdm-sdk';\nimport Typography from '@mui/material/Typography';\nimport {DataTypeValue} from '@reltio/components';\nimport {isRelationLoaded} from '../../../../helpers/nodeHelpers';\n\nconst getRelationDetails = pick(['startDate', 'endDate']);\nconst attrTypes = [\n {\n uri: 'typeName',\n type: DataTypes.TYPE_STRING,\n label: i18n.text('Relationship')\n },\n ...ACTIVENESS_ATTR_TYPES\n];\n\nconst RelationDetails = ({showDetails, metadata, relation = {}}) => {\n const styles = useStyles();\n const relationshipData = getRelationDetails(relation);\n relationshipData.typeName = prop('label', getRelationType(metadata, relation.type));\n\n return showDetails && relation ? (\n <div className={styles.details}>\n {isRelationLoaded(relation) ? (\n attrTypes.map(\n (attrType) =>\n relationshipData[attrType.uri] && (\n <div key={attrType.uri} className={styles.detailLine}>\n <div className={styles.detail}>\n <Typography variant=\"caption\" gutterBottom className={styles.detailLabel}>\n {attrType.label + ': '}\n </Typography>\n <span className={styles.detailValue}>\n <DataTypeValue\n value={relationshipData[attrType.uri]}\n dataTypeDefinition={attrType}\n />\n </span>\n </div>\n </div>\n )\n )\n ) : (\n <LoadingNode key=\"loading-details\" className={styles.loadingNode} />\n )}\n </div>\n ) : null;\n};\n\nRelationDetails.propTypes = {\n showDetails: PropTypes.bool,\n relation: RelationType,\n metadata: MetadataType\n};\n\nexport default RelationDetails;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n addButton: {\n marginRight: '11px'\n },\n editButton: {\n marginRight: '13px'\n }\n}));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport i18n from 'ui-i18n';\nimport {identity} from 'ramda';\nimport EditIcon from '@mui/icons-material/Edit';\nimport InfoIcon from '@mui/icons-material/InfoOutlined';\nimport InfoIconSelected from '@mui/icons-material/InfoRounded';\n\nimport AddCircleIcon from '@mui/icons-material/AddCircle';\nimport DeleteIcon from '@mui/icons-material/Delete';\n\nimport {DropDownMenuButton, SmallIconButtonWithTooltip} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\nconst ActionsBlock = ({\n className,\n show,\n showDetails,\n onToggleRelationDetails,\n onMenuOpen,\n onMenuClose,\n onStartEditing,\n onAddParent,\n onAddChild,\n onDelete\n}) => {\n const styles = useStyles();\n const menuItems = [\n onAddParent && {\n text: i18n.text('Add Parent'),\n onClick: onAddParent\n },\n onAddChild && {\n text: i18n.text('Add Child'),\n onClick: onAddChild\n }\n ].filter(identity);\n\n return show && (onToggleRelationDetails || onStartEditing || onAddParent || onAddChild || onDelete) ? (\n <div className={className}>\n {onToggleRelationDetails && (\n <SmallIconButtonWithTooltip\n tooltipTitle={showDetails ? i18n.text('Hide details') : i18n.text('View details')}\n tooltipPlacement=\"bottom-end\"\n size=\"S\"\n icon={showDetails ? InfoIconSelected : InfoIcon}\n onClick={onToggleRelationDetails}\n />\n )}\n {menuItems.length > 0 && (\n <DropDownMenuButton\n buttonComponent={SmallIconButtonWithTooltip}\n buttonProps={{\n icon: AddCircleIcon,\n size: 'S',\n tooltipTitle: i18n.text('Add node'),\n className: styles.addButton\n }}\n menuId={'tree-node-actions'}\n menuItems={menuItems}\n onMenuOpen={onMenuOpen}\n onMenuClose={onMenuClose}\n />\n )}\n {onStartEditing && (\n <SmallIconButtonWithTooltip\n tooltipTitle={i18n.text('Edit node')}\n size=\"S\"\n icon={EditIcon}\n onClick={onStartEditing}\n className={styles.editButton}\n />\n )}\n {onDelete && (\n <SmallIconButtonWithTooltip\n tooltipTitle={i18n.text('Delete node')}\n size=\"S\"\n icon={DeleteIcon}\n onClick={onDelete}\n />\n )}\n </div>\n ) : null;\n};\n\nActionsBlock.propTypes = {\n show: PropTypes.bool,\n showDetails: PropTypes.bool,\n className: PropTypes.string,\n onMenuOpen: PropTypes.func,\n onMenuClose: PropTypes.func,\n onStartEditing: PropTypes.func,\n onAddParent: PropTypes.func,\n onAddChild: PropTypes.func,\n onDelete: PropTypes.func,\n onToggleRelationDetails: PropTypes.func\n};\n\nexport default ActionsBlock;\n","import {defaultTo, includes, path, pipe, prop} from 'ramda';\nimport {getValidatedSortField, getValidatedSortOrder} from '@reltio/mdm-sdk';\n\nexport const getGraphConfig = prop('graph');\nexport const getReverseRelationsConfig = pipe(getGraphConfig, path(['options', 'reverseRelations']));\nexport const getGraphTypeConfig = pipe(getGraphConfig, prop('type'));\n\nexport const getValidatedSortOrderFromConfig = pipe(prop('sortOrder'), getValidatedSortOrder);\n\nexport const getValidatedSortFieldFromConfig = pipe(prop('sortBy'), getValidatedSortField);\n\nexport const getIsSecondaryLabelEnabledFromConfig = pipe(prop('attributes'), defaultTo([]), includes('secondaryLabel'));\n","import {__, both, curry, isNil, path, pathOr, prop, reject} from 'ramda';\nimport {\n checkMetadataForCreate,\n checkMetadataForDelete,\n checkMetadataForUpdate,\n getAbsoluteImageUrl,\n getEndObjectTypeUri,\n getEntityType,\n getGraphType,\n getLabel,\n getPropWithInheritance,\n getRelationshipTypeUrisFromGraphType,\n getRelationType,\n getStartObjectTypeUri,\n isEditableMode as checkIsEditableMode,\n isInHierarchy\n} from '@reltio/mdm-sdk';\n\nimport {createNewTreeNode, isSelectedNode} from '../../../../helpers/treeDataProvider';\nimport {getGraphTypeConfig, getReverseRelationsConfig} from '../../../../helpers/configHelpers';\nimport {profile} from '@reltio/mdm-module';\nimport {nodeStartAddingChild, nodeStartEditing, toggleRelationDetails} from '../../../../helpers/nodeHelpers';\n\nconst treeActions = profile.trees.actions;\n\nconst getTypeGraphIcon = (absoluteImagePath, metadata, entityTypeUri) => {\n const entityType = getEntityType(metadata, entityTypeUri) || {};\n const entityTypeGraphIcon = getPropWithInheritance(metadata, entityType, 'typeGraphIcon');\n return entityTypeGraphIcon && getAbsoluteImageUrl(absoluteImagePath, entityTypeGraphIcon);\n};\n\nconst canEditNode = ({relation}, metadata, mode) =>\n relation ? checkMetadataForUpdate(mode, getRelationType(metadata, relation.type)) : false;\n\nconst canAddRelative = curry((direction, config, metadata, node, mode) => {\n const {entity = {}} = node;\n const isReversed = getReverseRelationsConfig(config) || false;\n const isChild = isReversed ? direction === 'parent' : direction === 'child';\n const nodeEntityTypeUri = entity.type;\n const graphTypeUri = getGraphTypeConfig(config);\n if (graphTypeUri) {\n const graphType = getGraphType(metadata, graphTypeUri);\n const relationTypeUris = getRelationshipTypeUrisFromGraphType(graphType) || [];\n const isNodeEntityInstanceOf = isInHierarchy(metadata, __, nodeEntityTypeUri);\n return relationTypeUris\n .map(getRelationType(metadata))\n .filter(both(checkMetadataForCreate(mode), checkMetadataForUpdate(mode)))\n .map(isChild ? getStartObjectTypeUri : getEndObjectTypeUri)\n .some(isNodeEntityInstanceOf);\n }\n return true;\n});\n\nconst canAddParentForNode = canAddRelative('parent');\nconst canAddChildForNode = canAddRelative('child');\n\nconst canDeleteNode = ({relation}, metadata, mode) =>\n relation ? checkMetadataForDelete(mode, getRelationType(metadata, relation.type)) : false;\n\nconst simpleNodePropsMapping = ({\n node,\n metadata,\n absoluteImagePath,\n currentEntityUri,\n mode,\n config = {},\n showSecondaryLabel,\n onParentsRequested,\n dispatch,\n signal\n}) => {\n const {entity, children, total, pending, showParents, nodeId} = node;\n const {id} = config;\n const isSelected = isSelectedNode(node, currentEntityUri);\n const isEditable = checkIsEditableMode(mode);\n const handleOnDelete = () => {\n const relationUri = path(['relation', 'uri'], node);\n relationUri && dispatch(treeActions.treeRelationRemoved({relationUri}));\n dispatch(treeActions.treeNodeRemoved({id, nodeId}));\n };\n\n const commonActionHandlers = {\n onToggleShowParents: (needLoadAdditionalParents) => {\n dispatch(treeActions.treeNodeChanged({id, node: {nodeId, showParents: !showParents}}));\n needLoadAdditionalParents && onParentsRequested(node);\n }\n };\n\n const actionHandlers = isEditable\n ? {\n onStartEditing: canEditNode(node, metadata, mode) ? () => dispatch(nodeStartEditing({id, node})) : null,\n onAddParent: canAddParentForNode(config, metadata, node, mode)\n ? () =>\n dispatch(treeActions.treeNodeNewParentEditingStarted({id, node, newNode: createNewTreeNode()}))\n : null,\n onAddChild: canAddChildForNode(config, metadata, node, mode)\n ? () =>\n dispatch(\n nodeStartAddingChild({\n id,\n isReversed: getReverseRelationsConfig(config),\n node,\n newNode: createNewTreeNode(),\n signal\n })\n )\n : null,\n onDelete: canDeleteNode(node, metadata, mode) ? handleOnDelete : null,\n ...commonActionHandlers\n }\n : {\n onToggleRelationDetails: () => dispatch(toggleRelationDetails({id, node})),\n ...commonActionHandlers\n };\n return {\n title: getLabel(entity.label),\n subtitle: showSecondaryLabel ? entity.secondaryLabel : undefined,\n number: children && !pending ? children.length : total,\n icon: getTypeGraphIcon(absoluteImagePath, metadata, entity.type),\n isSelectedNode: isSelected,\n entityUri: entity.uri,\n viewId: id,\n showDetails: node.showDetails && !isEditable,\n ...reject(isNil, actionHandlers)\n };\n};\nconst getAdditionalParents = ({node, entitiesMap, metadata, config, absoluteImagePath}) => {\n const {entity, directParentUri} = node;\n return pathOr([], [entity.uri, 'parent'], entitiesMap)\n .filter((parentUri) => parentUri !== directParentUri)\n .map((parentUri) => {\n const mapEntry = prop(parentUri, entitiesMap);\n return mapEntry\n ? simpleNodePropsMapping({node: mapEntry, config, metadata, absoluteImagePath})\n : {pending: true};\n });\n};\n\nconst nodePropsMapping = ({\n node,\n entitiesMap,\n metadata,\n absoluteImagePath,\n currentEntityUri,\n mode,\n config,\n showSecondaryLabel,\n onParentsRequested,\n signal,\n dispatch\n}) => ({\n ...node,\n relation: Array.isArray(node.relation) ? node.relation[0] : node.relation,\n ...simpleNodePropsMapping({\n node,\n metadata,\n absoluteImagePath,\n currentEntityUri,\n mode,\n config,\n showSecondaryLabel,\n onParentsRequested,\n signal,\n dispatch\n }),\n additionalParents: getAdditionalParents({\n node,\n config,\n entitiesMap,\n metadata,\n absoluteImagePath\n })\n});\n\nexport {nodePropsMapping, canDeleteNode, canAddChildForNode};\n","import {createContext} from 'react';\n\nexport const NodeContext = createContext({\n config: {},\n entitiesMap: {},\n onToggleNodeCheckbox: () => {},\n onParentsRequested: () => {},\n checkedNodes: {},\n canSelect: false\n});\n\nNodeContext.displayName = 'NodeContext';\n","import React, {memo, useCallback, useContext, useEffect, useState} from 'react';\nimport classnames from 'classnames';\nimport Avatar from '@mui/material/Avatar';\nimport Checkbox from '@mui/material/Checkbox';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {HierarchyNodeTitle, PageRequestsAbortingContext} from '@reltio/components';\nimport {identity} from 'ramda';\n\nimport {useStyles} from './styles';\nimport {useCommonStyles} from '../commonStyles';\nimport DEFAULT_ICON from './defaultTypeIcon.png';\nimport MultiParentIcon from './multiParentOverlap.svg';\n\nimport {HierarchyNodeType} from '../../../constants/prop-types';\nimport MultiParentBlock from '../components/MultiParentBlock/MultiParentBlock';\nimport RelationDetails from '../components/RelationDetails/RelationDetails';\nimport ActionsBlock from '../components/ActionsBlock/ActionsBlock';\nimport {nodePropsMapping} from './helpers/nodeMappingHelpers';\nimport {NodeContext} from '../nodeContext';\nimport {isNodeChecked, isRelationLoaded} from '../../../helpers/nodeHelpers';\nimport PropTypes from 'prop-types';\n\nconst onImageLoadFail = (e) => {\n e.target.src = DEFAULT_ICON;\n};\n\nexport const RegularNode = ({node = {}, isRoot, registerChild, measure = identity}) => { //NOSONAR\n const styles = useStyles();\n const [popperAnchor, setPopperAnchor] = useState();\n const commonStyles = useCommonStyles();\n const dispatch = useDispatch();\n const {config, entitiesMap, onToggleNodeCheckbox, checkedNodes, canSelect, onParentsRequested, showSecondaryLabel} =\n useContext(NodeContext);\n const absoluteImagePath = useSelector(mdm.selectors.getAbsoluteImagePath);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const {uri: currentEntityUri} = useSelector(mdm.selectors.getEntity);\n const mode = useSelector(mdm.selectors.getMode);\n const signal = useContext(PageRequestsAbortingContext);\n\n const {\n title,\n subtitle,\n number,\n icon,\n relation,\n showDetails,\n additionalParents = [],\n showParents,\n isSelectedNode,\n nodeId,\n viewId,\n entityUri,\n onStartEditing,\n onAddParent,\n onAddChild,\n onToggleRelationDetails,\n onDelete,\n onToggleShowParents\n } = nodePropsMapping({\n node,\n entitiesMap,\n metadata,\n absoluteImagePath,\n currentEntityUri,\n mode,\n config,\n showSecondaryLabel,\n onParentsRequested,\n signal,\n dispatch\n });\n\n const needLoadAdditionalParents = additionalParents.some((parent) => parent.pending);\n const [showControls, setShowControls] = useState(false);\n const showActionsBlock = useCallback(() => setShowControls(true), []);\n const hideActionsBlock = useCallback(() => setShowControls(false), []);\n const [openActionsMenu, setOpenActionsMenu] = useState(false);\n const showActionsMenu = useCallback(() => setOpenActionsMenu(true), []);\n const hideActionsMenu = useCallback(() => {\n setOpenActionsMenu(false);\n setShowControls(false);\n }, []);\n const hasMultiParents = additionalParents.length > 0;\n const toggleShowParents =\n hasMultiParents && onToggleShowParents ? onToggleShowParents.bind(null, needLoadAdditionalParents) : undefined;\n const toggleNodeCheckbox = useCallback(\n (event) =>\n onToggleNodeCheckbox({\n checked: event.target.checked,\n node\n }),\n [node, onToggleNodeCheckbox]\n );\n const checked = isNodeChecked({node, checkedNodes});\n const showCheckbox = false && canSelect && onDelete; // to move node you should have rights to delete it\n useEffect(measure, [\n showCheckbox,\n hasMultiParents,\n subtitle,\n !!onToggleRelationDetails,\n showDetails,\n number,\n showParents,\n showDetails && isRelationLoaded(relation),\n showParents && needLoadAdditionalParents,\n measure\n ]);\n return (\n <div\n className={styles.wrapper}\n data-node-id={nodeId}\n data-reltio-id={'tree-node-' + nodeId}\n onMouseEnter={showActionsBlock}\n onMouseLeave={hideActionsBlock}\n ref={registerChild}\n >\n <div ref={setPopperAnchor} className={commonStyles.container}>\n {showCheckbox ? (\n <Checkbox\n className={classnames(styles.regularNodeCheckbox)}\n checked={checked}\n onChange={toggleNodeCheckbox}\n color=\"primary\"\n />\n ) : (\n <Avatar\n className={classnames(styles.avatar, {[styles.avatarWithMultiParent]: hasMultiParents})}\n src={icon || DEFAULT_ICON}\n onError={onImageLoadFail}\n onClick={toggleShowParents}\n />\n )}\n\n {hasMultiParents && !showCheckbox && (\n <MultiParentIcon className={styles.multiParentIcon} onClick={toggleShowParents} />\n )}\n <div className={commonStyles.title}>\n <HierarchyNodeTitle\n title={title}\n isSelected={isSelectedNode}\n viewId={viewId}\n entityUri={entityUri}\n anchorEl={popperAnchor}\n />\n {!!number && <span className={styles.number}>{number}</span>}\n <ActionsBlock\n show={showControls || openActionsMenu}\n className={classnames(styles.actionsBlock, {\n [styles.actionsBlockWithOpenMenu]: openActionsMenu && !checked,\n [styles.actionsBlockForCheckedNode]: openActionsMenu && checked\n })}\n showDetails={showDetails}\n onToggleRelationDetails={relation && !isRoot ? onToggleRelationDetails : null}\n onMenuOpen={showActionsMenu}\n onMenuClose={hideActionsMenu}\n onStartEditing={!isRoot ? onStartEditing : null}\n onAddChild={onAddChild}\n onAddParent={onAddParent}\n onDelete={!isRoot ? onDelete : null}\n />\n </div>\n </div>\n {!showCheckbox && <MultiParentBlock showParents={showParents} additionalParents={additionalParents} />}\n {subtitle && <div className={styles.subtitle}>{subtitle}</div>}\n {onToggleRelationDetails && (\n <RelationDetails showDetails={showDetails} metadata={metadata} relation={relation} />\n )}\n </div>\n );\n};\n\nRegularNode.propTypes = {\n node: HierarchyNodeType,\n isRoot: PropTypes.bool,\n registerChild: PropTypes.func,\n measure: PropTypes.func\n};\n\nexport default memo(RegularNode);\n","import PropTypes from 'prop-types';\nimport React, {useMemo} from 'react';\nimport {\n MetadataType,\n RelationTypeType,\n getEntityType,\n getPropWithInheritance,\n getDirectionalLabelFromObject\n} from '@reltio/mdm-sdk';\nimport {RelationTypeSelector} from '@reltio/components';\nimport {ascend, evolve, identity, pipe, prop, propEq, propOr, tap} from 'ramda';\n\nconst getRelationTypesOptions = (relationTypes, isChild, metadata) => {\n const labelsMap = {};\n const addLabelInMap = (label) => (labelsMap[label] = propOr(0, label, labelsMap) + 1);\n const getDirectionalLabel = pipe(getDirectionalLabelFromObject, tap(addLabelInMap));\n const byLabel = ascend(prop('label'));\n const getEntityTypeWithInheritedIcon = (metadata, entityTypeUri) => {\n const entityType = getEntityType(metadata, entityTypeUri);\n const typeIcon = getPropWithInheritance(metadata, entityType, 'typeIcon');\n return {...entityType, typeIcon};\n };\n return relationTypes\n .map(({uri, label, startObject, endObject}) => ({\n label: {directionalLabel: getDirectionalLabel(isChild ? endObject : startObject), typeLabel: label},\n value: uri,\n startObject: {\n ...startObject,\n objectType: getEntityTypeWithInheritedIcon(metadata, startObject.objectTypeURI)\n },\n endObject: {...endObject, objectType: getEntityTypeWithInheritedIcon(metadata, endObject.objectTypeURI)}\n }))\n .map(\n evolve({\n label: ({directionalLabel, typeLabel}) => {\n return directionalLabel\n ? labelsMap[directionalLabel] > 1\n ? `${directionalLabel} (${typeLabel})`\n : directionalLabel\n : typeLabel;\n }\n })\n )\n .sort(byLabel);\n};\n\nconst fromEditorValue = (option) => option.value;\n\nconst toEditorValue = (value, relationsTypesOptions) => relationsTypesOptions.find(propEq('value', value));\n\nconst NodeRelationTypeSelector = ({\n value,\n relationTypes = [],\n isChild,\n onChange = identity,\n metadata,\n ...otherProps\n}) => {\n const relationsTypesOptions = useMemo(\n () => getRelationTypesOptions(relationTypes, isChild, metadata),\n [relationTypes, isChild, metadata]\n );\n\n return (\n <RelationTypeSelector\n value={toEditorValue(value, relationsTypesOptions)}\n options={relationsTypesOptions}\n onChange={pipe(fromEditorValue, onChange)}\n {...otherProps}\n />\n );\n};\n\nNodeRelationTypeSelector.propTypes = {\n className: PropTypes.string,\n value: PropTypes.string,\n relationTypes: PropTypes.arrayOf(RelationTypeType),\n isChild: PropTypes.bool,\n metadata: MetadataType,\n onChange: PropTypes.func\n};\n\nexport default NodeRelationTypeSelector;\n","import {__, allPass, curry, defaultTo, filter, isNil, map, pipe, reject} from 'ramda';\n\nimport {\n checkMetadataForCreate,\n checkMetadataForUpdate,\n getEndObjectTypeUri,\n getRelationshipTypeUrisFromGraphType,\n getRelationType,\n getStartObjectTypeUri,\n isInHierarchy\n} from '@reltio/mdm-sdk';\n\nexport const isAvailableRelationForRelatedEntity = curry((isChild, relatedEntity, metadata, relationType) => {\n const isRelatedEntityInstanceOf = isInHierarchy(metadata, __, relatedEntity.type);\n const getObjectUri = isChild ? getStartObjectTypeUri : getEndObjectTypeUri;\n return pipe(getObjectUri, isRelatedEntityInstanceOf)(relationType);\n});\n\nexport const getAllAvailableRelationTypes = (isChild, relatedEntity, metadata, graphType, mode) =>\n pipe(\n getRelationshipTypeUrisFromGraphType,\n defaultTo([]),\n map(getRelationType(metadata)),\n reject(isNil),\n filter(\n allPass([\n checkMetadataForCreate(mode),\n checkMetadataForUpdate(mode),\n isAvailableRelationForRelatedEntity(isChild, relatedEntity, metadata)\n ])\n )\n )(graphType);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n editorContainer: {\n width: 'calc(100% - 34px)',\n minWidth: '185px',\n backgroundColor: 'rgba(0,0,0,0.03)',\n padding: '16px 16px 8px 16px'\n },\n dense: {\n marginBottom: 0\n },\n item: {\n marginBottom: '20px'\n },\n actionButtons: {\n display: 'flex',\n justifyContent: 'flex-end'\n }\n}));\n","import React, {memo, useCallback, useContext, useEffect, useMemo} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport PropTypes from 'prop-types';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {equals, pipe} from 'ramda';\nimport Button from '@mui/material/Button';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {HierarchyNodeType} from '../../../constants/prop-types';\nimport {NodeContext} from '../nodeContext';\nimport {\n isAvailableRelationBetweenEntities,\n getActivenessAttributes,\n getSuitableEntityTypeUrisForRelationTypes,\n getErrorMessage,\n getGraphType,\n getHierarchyNodeEditorActiveError,\n getLabel,\n getRelationAttributesList,\n getRelationType,\n relationEditorAttributeTypesSelectionStrategy,\n validateHierarchyConnection,\n NODE_EDITING_MODES,\n isAttributeTypeError\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {\n AttributesList,\n EntitySelector,\n ErrorWrapper,\n isHighlightedErrorType,\n ScrollToElementContext,\n useDidUpdateEffect,\n useScrollToAttributeError\n} from '@reltio/components';\nimport NodeRelationTypeSelector from '../components/NodeRelationTypeSelector/NodeRelationTypeSelector';\nimport {getGraphTypeConfig, getReverseRelationsConfig} from '../../../helpers/configHelpers';\nimport {getAllAvailableRelationTypes} from './helpers';\nimport {nodeApplyEditing, nodeCancelEditing} from '../../../helpers/nodeHelpers';\n\nimport {useStyles} from './styles';\n\nconst treeActions = profile.trees.actions;\n\nexport const EditorNode = ({node = {}, measure, registerChild}) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n const {relatedEntity, relation: {uri: relationUri} = {}, editingMode, initialConnection} = node;\n const isAddingParent = editingMode === NODE_EDITING_MODES.addingParent;\n const {config} = useContext(NodeContext);\n const viewId = config.id;\n const isReversed = getReverseRelationsConfig(config) || false;\n const isChild = isReversed ? isAddingParent : !isAddingParent;\n\n const connection = useSelector((state) => mdm.selectors.getTreeEditingConnection(state, viewId, relationUri));\n const error = useSelector((state) =>\n getHierarchyNodeEditorActiveError(connection, mdm.selectors.getProfileErrors(state))\n );\n const allErrors = useSelector(mdm.selectors.getProfileErrors);\n\n const {relation, entity} = connection;\n const {attributes, type: relationTypeUri, crosswalks = []} = relation;\n const attributeListEntity = useMemo(\n () => ({\n attributes,\n ...getActivenessAttributes(relation)\n }),\n [attributes, relation]\n );\n const globalSearchRequestOptions = useSelector((state) =>\n mdm.selectors.getGlobalSearchRequestOptions(state, ['ovOnly'])\n );\n const metadata = useSelector(mdm.selectors.getMetadata);\n const mode = useSelector(mdm.selectors.getMode);\n\n const graphTypeUri = getGraphTypeConfig(config);\n const graphType = getGraphType(metadata, graphTypeUri) || {};\n const allAvailableRelationTypes = useMemo(\n () => getAllAvailableRelationTypes(isChild, relatedEntity, metadata, graphType, mode),\n [isChild, relatedEntity, metadata, graphType, mode]\n );\n const availableRelationTypes = useMemo(\n () =>\n entity && entity.uri\n ? allAvailableRelationTypes.filter(\n isAvailableRelationBetweenEntities(isChild, entity, relatedEntity, metadata)\n )\n : allAvailableRelationTypes,\n [entity, allAvailableRelationTypes, isChild, relatedEntity, metadata]\n );\n\n const availableEntityTypeUris = useMemo(\n () =>\n getSuitableEntityTypeUrisForRelationTypes(\n isChild,\n metadata,\n relationTypeUri ? [getRelationType(metadata, relationTypeUri)] : allAvailableRelationTypes\n ),\n [isChild, metadata, relationTypeUri, allAvailableRelationTypes]\n );\n\n const onRelationTypeChange = useCallback(\n (relationTypeUri) => {\n dispatch(treeActions.treeNodeRelationTypeChanged({id: viewId, node, relationTypeUri}));\n },\n [node, viewId, dispatch]\n );\n const onChangeEntity = useCallback(\n (entity) => {\n dispatch(treeActions.treeNodeEntityChanged({id: viewId, node, entity}));\n },\n [node, viewId, dispatch]\n );\n\n useEffect(() => {\n // autoselecting relation type on mount\n if (!relationTypeUri && allAvailableRelationTypes.length === 1) {\n onRelationTypeChange(allAvailableRelationTypes[0].uri);\n }\n }, [relationTypeUri, allAvailableRelationTypes, onRelationTypeChange]);\n\n useDidUpdateEffect(() => {\n // autoselecting relation type on entity change\n if (!relationTypeUri && availableRelationTypes.length >= 1) {\n onRelationTypeChange(availableRelationTypes[0].uri);\n }\n }, [relationTypeUri, entity, availableRelationTypes, onRelationTypeChange]);\n\n useEffect(measure, [\n viewId,\n connection,\n allErrors,\n relationTypeUri,\n allAvailableRelationTypes,\n !!onRelationTypeChange,\n entity,\n availableRelationTypes,\n measure\n ]);\n const relationAttrTypes = useMemo(\n () => getRelationAttributesList(metadata, relationTypeUri),\n [relationTypeUri, metadata]\n );\n const selectorCompatibleEntity = useMemo(\n () =>\n entity && {\n entityUri: entity.uri,\n entityType: entity.type,\n entityLabel: getLabel(entity.label)\n },\n [entity]\n );\n\n const onAddAttributes = useCallback(\n (params) => pipe(profile.actions.addAttributes, dispatch)(params.map((param) => ({...param, viewId}))),\n [viewId, dispatch]\n );\n\n const onChangeAttribute = useCallback(\n (params) => pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const onDeleteAttribute = useCallback(\n (params) => pipe(profile.actions.removeAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const validate = useCallback(() => {\n const errors = validateHierarchyConnection(metadata, connection);\n dispatch(profile.errors.actions.errorsSet(errors));\n return errors.length === 0;\n }, [connection, metadata, dispatch]);\n\n const onCancel = useCallback(() => {\n dispatch(nodeCancelEditing({id: viewId, node}));\n }, [node, viewId, dispatch]);\n\n const onApply = useCallback(() => {\n if (validate()) {\n dispatch(nodeApplyEditing({id: viewId, isReversed, node}));\n }\n }, [node, viewId, isReversed, dispatch, validate]);\n\n const canApply = !equals(initialConnection, connection) && relationTypeUri;\n const errorMessage = getErrorMessage(error);\n const highlightedError = useContext(ScrollToElementContext);\n const isErrorHighlighted = useMemo(\n () =>\n isHighlightedErrorType(highlightedError.type) &&\n isAttributeTypeError(highlightedError.element, relationUri, relationTypeUri),\n [relationUri, relationTypeUri, highlightedError]\n );\n const {ref, errorClassName} = useScrollToAttributeError({\n highlightedError: isErrorHighlighted ? highlightedError : null,\n isSimple: true\n });\n\n return (\n <div className={styles.editorContainer} ref={registerChild} data-reltio-id={'tree-node-' + node?.nodeId}>\n <ReactResizeDetector handleHeight={true} onResize={measure} />\n {allAvailableRelationTypes.length !== 1 && (\n <NodeRelationTypeSelector\n isChild={isChild}\n relationTypes={availableRelationTypes}\n className={styles.item}\n value={relationTypeUri}\n metadata={metadata}\n onChange={onRelationTypeChange}\n />\n )}\n <div ref={ref} className={errorClassName}>\n <ErrorWrapper errorMessage={errorMessage} className={styles.item}>\n <EntitySelector\n key={relationTypeUri}\n className={classnames({[styles.dense]: errorMessage})}\n entity={selectorCompatibleEntity || {}}\n entityTypesUris={availableEntityTypeUris}\n max={config.max || 20}\n globalSearchRequestOptions={globalSearchRequestOptions}\n mode={mode}\n onChange={onChangeEntity}\n metadata={metadata}\n attributeTypesSelectionStrategy={relationEditorAttributeTypesSelectionStrategy}\n />\n </ErrorWrapper>\n </div>\n {relationTypeUri && (\n <AttributesList\n className={styles.item}\n attrTypes={relationAttrTypes}\n entity={attributeListEntity}\n showEmptyEditors={false}\n crosswalks={crosswalks}\n mode={mode}\n parentUri={relationUri}\n onAddAttributes={onAddAttributes}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onDeleteAttribute}\n />\n )}\n <div className={styles.actionButtons}>\n <Button onClick={onCancel}>{i18n.text('Cancel')}</Button>\n <Button color=\"primary\" disabled={!canApply} onClick={onApply}>\n {i18n.text('Apply')}\n </Button>\n </div>\n </div>\n );\n};\n\nEditorNode.propTypes = {\n node: HierarchyNodeType,\n registerChild: PropTypes.func,\n measure: PropTypes.func\n};\n\nexport default memo(EditorNode);\n","import React from 'react';\nimport {always, cond, T} from 'ramda';\nimport LoadingNode from './LoadingNode/LoadingNode';\nimport RegularNode from './RegularNode/RegularNode';\nimport {isLoadingNode} from '../../helpers/treeDataProvider';\nimport EditorNode from './EditorNode/EditorNode';\nimport {isEditorNode} from '../../helpers/nodeHelpers';\n\nconst NodeTypes = {\n loading: 'loading',\n regular: 'regular',\n editor: 'editor'\n};\n\nconst getNodeType = cond([\n [isEditorNode, always(NodeTypes.editor)],\n [isLoadingNode, always(NodeTypes.loading)],\n [T, always(NodeTypes.regular)]\n]);\n\nexport default class NodesFactory {\n static build(props) {\n const {node} = props;\n const type = getNodeType(node);\n switch (type) {\n case NodeTypes.loading:\n return <LoadingNode {...props} />;\n case NodeTypes.regular:\n return <RegularNode {...props} />;\n case NodeTypes.editor:\n return <EditorNode {...props} />;\n }\n }\n}\n","import PropTypes from 'prop-types';\n\nimport NodesFactory from './NodesFactory';\nimport {HierarchyNodeType} from '../../constants/prop-types';\n\nexport const Node = (props) => NodesFactory.build(props);\n\nNode.propTypes = {\n node: HierarchyNodeType,\n onToggleShowParents: PropTypes.func\n};\n\nexport default Node;\n","import React, {memo, useCallback, useMemo} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {\n getRelationType,\n isEditableMode as checkIsEditableMode,\n isAvailableRelationBetweenEntities\n} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\nimport Tree from '../Tree/Tree';\nimport {TreeType} from '../../constants/prop-types';\nimport Node from '../Node/Node';\nimport {NodeContext} from '../Node/nodeContext';\nimport {TreeThemeContext} from '../Tree/treeThemeContext';\nimport {getShowSecondaryLabelValue, hasLoadingNode, isEditorNode, isNodeChecked} from '../../helpers/nodeHelpers';\nimport mdm from '@reltio/mdm-module';\nimport {canAddChildForNode, canDeleteNode} from '../Node/RegularNode/helpers/nodeMappingHelpers';\nimport {getReverseRelationsConfig, getIsSecondaryLabelEnabledFromConfig} from '../../helpers/configHelpers';\n\nconst HierarchyPanel = ({\n className,\n config,\n tree = {},\n onChildrenRequested,\n onParentsRequested,\n onTreeChanged,\n onTreeScroll,\n onNodeMoved,\n onToggleNodeCheckbox,\n checkedNodes,\n mode,\n isGraphView\n}) => {\n const styles = useStyles({isGraphView});\n const isEditableMode = checkIsEditableMode(mode);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const nodeContextValue = useMemo(\n () => ({\n config,\n entitiesMap: tree.entitiesMap,\n onToggleNodeCheckbox,\n checkedNodes,\n canSelect: isEditableMode,\n onParentsRequested,\n showSecondaryLabel: getShowSecondaryLabelValue(\n tree.showSecondaryLabel,\n getIsSecondaryLabelEnabledFromConfig(config)\n )\n }),\n [\n checkedNodes,\n config,\n isEditableMode,\n onToggleNodeCheckbox,\n tree.entitiesMap,\n tree.showSecondaryLabel,\n onParentsRequested\n ]\n );\n\n const treeThemeContextValue = useMemo(\n () => ({\n generateTreeNodeProps: ({node}) => ({\n treeNodeClassName: classnames({\n [styles.checkedNode]: isNodeChecked({node, checkedNodes}),\n [styles.editorNode]: isEditorNode(node)\n })\n })\n }),\n [checkedNodes, styles]\n );\n\n const canDrag = useCallback(\n ({node}) =>\n isEditableMode && !isEditorNode(node) && !hasLoadingNode(node) && canDeleteNode(node, metadata, mode),\n [isEditableMode, metadata, mode]\n );\n const canDrop = useCallback(\n ({nextParent, node}) => {\n const isChild = !getReverseRelationsConfig(config);\n const relatedNode = nextParent === null ? tree.root : nextParent;\n const isValidRelatedNode = relatedNode && !relatedNode.loading && relatedNode.entity;\n return (\n isValidRelatedNode &&\n canAddChildForNode(config, metadata, relatedNode) &&\n isAvailableRelationBetweenEntities(\n isChild,\n node.entity,\n relatedNode.entity,\n metadata,\n getRelationType(metadata, node.relation.type)\n )\n );\n },\n [config, metadata, tree.root]\n );\n return (\n <div className={classnames(styles.panel, className)}>\n <div className={styles.treeWrapper}>\n <TreeThemeContext.Provider value={treeThemeContextValue}>\n <NodeContext.Provider value={nodeContextValue}>\n <Tree\n NodeRenderer={Node}\n onChange={onTreeChanged}\n canDrag={canDrag}\n canDrop={canDrop}\n root={tree.root}\n scrollToNode={tree.scrollTo}\n onScroll={onTreeScroll}\n onRequestChildren={onChildrenRequested}\n onNodeMoved={onNodeMoved}\n inlineRoot={!!tree.root && isEditorNode(tree.root)}\n />\n </NodeContext.Provider>\n </TreeThemeContext.Provider>\n </div>\n </div>\n );\n};\n\nHierarchyPanel.propTypes = {\n className: PropTypes.string,\n tree: TreeType,\n onChildrenRequested: PropTypes.func,\n onParentsRequested: PropTypes.func,\n onTreeChanged: PropTypes.func,\n onTreeScroll: PropTypes.func,\n onNodeMoved: PropTypes.func,\n onToggleNodeCheckbox: PropTypes.func,\n checkedNodes: PropTypes.object,\n mode: PropTypes.string,\n config: PropTypes.object,\n isGraphView: PropTypes.bool\n};\n\nexport default memo(HierarchyPanel);\n","import React from 'react';\nimport {GraphType} from '@reltio/mdm-sdk';\nimport {SelectorWithOnlyOptionAutoSelect} from '@reltio/components';\n\ntype Props = {\n value: string;\n onChange: (value: string) => void;\n graphTypes: GraphType[];\n className?: string;\n};\n\nconst GraphTypeSelector = ({value, onChange, graphTypes, className}: Props) => {\n return (\n <SelectorWithOnlyOptionAutoSelect\n classes={{\n root: className\n }}\n value={value}\n onChange={onChange}\n options={graphTypes.map(({uri, label}) => ({value: uri, label}))}\n />\n );\n};\nexport default GraphTypeSelector;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe} from 'ramda';\nimport {DateEditor} from '@reltio/components';\n\ntype Props = {\n value: number;\n onChange: (value: number) => void;\n className?: string;\n fullWidth?: boolean;\n};\n\nconst ActivenessDateControl = ({value, onChange, className, fullWidth}: Props) => {\n const handleChange = pipe((date) => date && date.getTime(), onChange);\n\n return (\n <DateEditor\n value={value}\n label={i18n.text('Effective date')}\n onChange={handleChange}\n slotProps={{\n textField: {size: 'small', className, fullWidth}\n }}\n />\n );\n};\n\nexport default ActivenessDateControl;\n","import {makeStyles} from '@mui/styles';\n\nconst popupHorizontalPadding = '23px';\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: popupHorizontalPadding,\n paddingRight: popupHorizontalPadding,\n minWidth: '245px',\n maxWidth: '308px',\n width: '40%'\n },\n title: {\n marginBottom: '30px'\n },\n sortControls: {\n display: 'flex',\n alignItems: 'center'\n },\n sortSelectorRoot: {\n flex: 1,\n padding: '11px 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 checkboxControlRoot: {\n marginTop: '6px',\n marginLeft: '-12px'\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n },\n divider: {\n borderColor: 'rgba(0,0,0,0.1)',\n margin: `19px -${popupHorizontalPadding}`\n }\n}));\n","import React, {useRef, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport Typography from '@mui/material/Typography';\nimport Popover from '@mui/material/Popover';\nimport Button from '@mui/material/Button';\nimport FilterIcon from '@mui/icons-material/FilterList';\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport Divider from '@mui/material/Divider';\n\nimport {useStyles} from './styles';\n\nimport {DropDownEditor, SmallIconButtonWithTooltip, withTooltip} from '@reltio/components';\nimport {TREE_SORT_FIELD_VALUES, TREE_SORT_ORDER_VALUES} from '@reltio/mdm-sdk';\n\nexport const FormControlLabelWithTooltip = withTooltip(FormControlLabel);\n\nconst SORTING_OPTIONS = [\n {\n label: i18n.text('Relationship type label'),\n value: TREE_SORT_FIELD_VALUES.relationTypeLabel\n },\n {\n label: i18n.text('Entity label'),\n value: TREE_SORT_FIELD_VALUES.entityLabel\n }\n];\n\nconst FilterSortButton = ({\n className,\n sortField,\n sortOrder,\n onSort,\n showSecondaryLabel,\n hasSecondaryLabelPattern,\n onShowSecondaryLabelChange\n}) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const [isOpen, setIsOpen] = useState(false);\n const isAsc = sortOrder === TREE_SORT_ORDER_VALUES.asc;\n\n const togglePopup = () => setIsOpen((open) => !open);\n const toggleSortOrder = () => {\n onSort({\n sortField,\n sortOrder: isAsc ? TREE_SORT_ORDER_VALUES.desc : TREE_SORT_ORDER_VALUES.asc\n });\n };\n\n const changeSortField = (newSortField) => {\n onSort({\n sortField: newSortField,\n sortOrder\n });\n };\n\n const tooltipTitle = !hasSecondaryLabelPattern\n ? i18n.text(\"Entity types in this hierarchy don't have any secondary label pattern defined.\")\n : '';\n\n return (\n <>\n <Button\n data-reltio-id=\"filter-sort-button\"\n ref={buttonRef}\n classes={{root: classnames(styles.triggerButton, className)}}\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 {onShowSecondaryLabelChange && (\n <>\n <Typography className={styles.viewOptionsTitle} variant=\"h6\">\n {i18n.text('View options')}\n </Typography>\n <FormControlLabelWithTooltip\n tooltipTitle={tooltipTitle}\n showForDisabled\n classes={{\n root: styles.checkboxControlRoot,\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showSecondaryLabel || false}\n onChange={(e) => onShowSecondaryLabelChange(e.target.checked)}\n />\n }\n label={i18n.text('Display secondary label')}\n disabled={hasSecondaryLabelPattern}\n />\n <Divider className={styles.divider} />\n </>\n )}\n <Typography className={styles.title} variant=\"h6\">\n {i18n.text('Sort by')}\n </Typography>\n <div className={styles.sortControls}>\n <DropDownEditor\n entries={SORTING_OPTIONS}\n TextFieldProps={{variant: 'filled'}}\n classes={{\n root: styles.sortSelectorRoot,\n menuItem: styles.sortSelectorMenuItem\n }}\n fullWidth\n disableUnderline\n value={sortField}\n onChange={changeSortField}\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 </Popover>\n </>\n );\n};\n\nFilterSortButton.propTypes = {\n className: PropTypes.string,\n sortField: PropTypes.string,\n sortOrder: PropTypes.string,\n onSort: PropTypes.func,\n showSecondaryLabel: PropTypes.bool,\n hasSecondaryLabelPattern: PropTypes.bool,\n onShowSecondaryLabelChange: PropTypes.func\n};\n\nexport default FilterSortButton;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n text: {\n fontSize: '12px',\n lineHeight: '14px',\n letterSpacing: 0,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n textContainer: {\n maxWidth: 'calc(100% - 13px)'\n },\n separator: {\n marginLeft: '4px',\n marginRight: '4px'\n }\n}));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\n\nimport MUIBreadcrumbs from '@mui/material/Breadcrumbs';\nimport Link from '@mui/material/Link';\nimport Typography from '@mui/material/Typography';\n\nimport {useStyles} from './styles';\n\nconst Breadcrumbs = ({items = [], ...otherProps}) => {\n const styles = useStyles();\n\n const renderItem = (item, index, items) => {\n const {label, href, onClick} = item;\n const color = index === items.length - 1 ? 'textPrimary' : 'textSecondary';\n\n return onClick || href ? (\n <Link\n key={index}\n color={color}\n classes={{root: styles.text}}\n href={href}\n onClick={onClick}\n underline=\"hover\"\n >\n {label}\n </Link>\n ) : (\n <Typography key={index} href={href} color={color} classes={{root: styles.text}}>\n {label}\n </Typography>\n );\n };\n\n return (\n <MUIBreadcrumbs\n aria-label={i18n.text('Breadcrumb')}\n expandText={i18n.text('Show path')}\n classes={{li: styles.textContainer, separator: classnames(styles.text, styles.separator)}}\n {...otherProps}\n >\n {items.map(renderItem)}\n </MUIBreadcrumbs>\n );\n};\n\nconst BreadcrumbsType = PropTypes.shape({\n label: PropTypes.string.isRequired,\n href: PropTypes.string,\n onClick: PropTypes.func\n});\n\nBreadcrumbs.propTypes = {\n items: PropTypes.arrayOf(BreadcrumbsType)\n};\n\nexport default Breadcrumbs;\n","import {anyPass, filter, has, isEmpty, map, pick, pipe, reject} from 'ramda';\nimport mdm, {profile} from '@reltio/mdm-module';\n\nconst treeActions = profile.trees.actions;\n\nconst fieldsToSave = ['showSecondaryLabel'];\n\nconst getStateToSave = pipe(\n filter(anyPass([has('root'), ...fieldsToSave.map((field) => has(field))])),\n map(pick(fieldsToSave)),\n reject(isEmpty)\n);\n\nexport const saveTreesPreferences = (id) => (dispatch, getState) => {\n const store = getState();\n const trees = mdm.selectors.getTrees(store);\n const state = getStateToSave(trees);\n dispatch(\n treeActions.treesStateSaved({\n id,\n state\n })\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n filtersBar: {\n paddingLeft: '16px',\n display: 'flex',\n alignItems: 'center',\n marginTop: '8px',\n marginBottom: '4px',\n height: '48px'\n },\n activenessDate: {\n flex: 1,\n margin: 0\n },\n filterSortButton: {\n flexShrink: 0,\n margin: '0 12px 0 16px'\n },\n breadcrumbs: {\n padding: '8px 24px',\n backgroundColor: 'rgba(0,0,0,0.03)'\n },\n graphTypeSelector: {\n margin: '0 10px 15px 24px',\n overflow: 'hidden'\n }\n});\n","import React, {useCallback, useEffect, useMemo} from 'react';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n HierarchyTreeViewConfig,\n Tree,\n createRelationTypesLabelsMap,\n debounce,\n getLabel,\n getPathByEntityUri\n} from '@reltio/mdm-sdk';\nimport GraphTypeSelector from '../GraphTypeSelector/GraphTypeSelector';\nimport ActivenessDateControl from '../ActivenessDateControl/ActivenessDateControl';\nimport FilterSortButton from '../FilterSortButton/FilterSortButton';\nimport Breadcrumbs from '../Breadcrumbs/Breadcrumbs';\nimport {hasEntityTypesWithSecondaryLabelPattern, scrollToTreeTop} from '../../helpers/treeHelpers';\nimport {saveTreesPreferences} from '../../helpers/saveStateHelpers';\nimport {\n getIsSecondaryLabelEnabledFromConfig,\n getValidatedSortFieldFromConfig,\n getValidatedSortOrderFromConfig\n} from '../../helpers/configHelpers';\nimport {getShowSecondaryLabelValue} from '../../helpers/nodeHelpers';\n\nimport {useStyles} from './styles';\n\nconst PREFERENCES_UPDATE_DEBOUNCE_INTERVAL = 500;\n\ntype Props = {\n tree?: Tree;\n config: HierarchyTreeViewConfig;\n entityUri: string;\n activenessDate: number;\n graphType: string;\n onChangeGraphType: (graphType: string) => void;\n};\n\nexport const HierarchyTreeToolbar = ({\n tree,\n config,\n entityUri,\n activenessDate,\n graphType,\n onChangeGraphType\n}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n const graphTypes = [];\n\n const {id, showPath} = config;\n const {sortField, sortOrder, showSecondaryLabel} = tree || {};\n const metadata = useSelector(mdm.selectors.getMetadata);\n\n const isSecondaryLabelEnabled = getIsSecondaryLabelEnabledFromConfig(config);\n const showSecondaryLabelValue = getShowSecondaryLabelValue(showSecondaryLabel, isSecondaryLabelEnabled);\n const hasSecondaryLabelPattern = hasEntityTypesWithSecondaryLabelPattern(metadata, graphType);\n\n const nodePath = useMemo(\n () =>\n getPathByEntityUri((tree || {}).root, entityUri).map((node) => ({\n label: getLabel(node?.entity?.label)\n })),\n [tree, entityUri]\n );\n\n const savePreferences = useCallback(\n debounce(() => dispatch(saveTreesPreferences(id)), PREFERENCES_UPDATE_DEBOUNCE_INTERVAL),\n [id]\n );\n\n const onShowSecondaryLabelChange = useCallback(\n (show) => {\n dispatch(profile.trees.actions.treeSecondaryLabelShown({id, show}));\n savePreferences();\n },\n [id, dispatch, savePreferences]\n );\n\n const onTreeSort = useCallback(\n ({sortField, sortOrder}) => {\n dispatch(\n profile.trees.actions.treeSorted({\n id,\n typesLabelsMap: createRelationTypesLabelsMap(metadata),\n sortField,\n sortOrder\n })\n );\n dispatch(scrollToTreeTop(id));\n },\n [id, metadata, dispatch]\n );\n\n const onTreeActivenessDateChange = useCallback(\n (activenessDate) => {\n dispatch(profile.trees.actions.activenessDateChanged({id, activenessDate}));\n },\n [id, dispatch]\n );\n\n useEffect(() => {\n if (!sortField || !sortOrder) {\n onTreeSort({\n sortField: getValidatedSortFieldFromConfig(config),\n sortOrder: getValidatedSortOrderFromConfig(config)\n });\n }\n }, [onTreeSort, sortField, sortOrder, config]);\n\n return (\n <>\n {graphTypes.length > 0 && (\n <GraphTypeSelector\n className={styles.graphTypeSelector}\n value={graphType}\n onChange={onChangeGraphType}\n graphTypes={graphTypes}\n />\n )}\n <div className={styles.filtersBar}>\n <ActivenessDateControl\n className={styles.activenessDate}\n value={activenessDate}\n onChange={onTreeActivenessDateChange}\n fullWidth\n />\n <FilterSortButton\n sortField={sortField}\n sortOrder={sortOrder}\n className={styles.filterSortButton}\n onSort={onTreeSort}\n showSecondaryLabel={showSecondaryLabelValue}\n onShowSecondaryLabelChange={isSecondaryLabelEnabled ? onShowSecondaryLabelChange : undefined}\n hasSecondaryLabelPattern={hasSecondaryLabelPattern}\n />\n </div>\n {showPath && nodePath.length > 0 && <Breadcrumbs items={nodePath} className={styles.breadcrumbs} />}\n </>\n );\n};\n","import {useCallback, useEffect, useRef} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useDidUpdateEffect, usePrevious, useSafePromise} from '@reltio/components';\n\nimport i18n from 'ui-i18n';\nimport {pipe, pick} from 'ramda';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {\n Entity,\n getRequestErrorMessage,\n getTree,\n hasEntityInTree,\n isAbortError,\n updateTreesWithNewEntity\n} from '@reltio/mdm-sdk';\nimport {prepareTree} from './treeDataProvider';\nimport {showCurrentEntity} from './treeHelpers';\nimport {hasEditorNode} from './nodeHelpers';\nimport mdmModule from '@reltio/mdm-module';\n\nconst treeActions = profile.trees.actions;\n\ntype TreeLoaderProps = {\n entityUri: string;\n id: string;\n graphTypes: string;\n activenessDate: number;\n isReversed: boolean;\n enabled: boolean;\n signal: AbortSignal;\n};\nconst useTreeLoader = ({entityUri, id, graphTypes, activenessDate, isReversed, enabled, signal}: TreeLoaderProps) => {\n const safePromise = useSafePromise();\n const dispatch = useDispatch();\n const timerRef = useRef(null);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const tree = useSelector((state) => mdm.selectors.getTree(state, id)) || {};\n const {root, isReversed: isCurrentReversed, graphTypes: currentGraphTypes} = tree;\n const previousActivenessDate = usePrevious(activenessDate) || activenessDate;\n const showCurrentEntityDelayed = useCallback(() => {\n timerRef.current = setTimeout(() => dispatch(showCurrentEntity({id, uri: entityUri})), 100);\n }, [id, entityUri, dispatch]);\n const hasRoot = !!root;\n const entity: Entity = useSelector(mdmModule.selectors.getEntity);\n useDidUpdateEffect(() => {\n const updatedTrees = updateTreesWithNewEntity(pick(['uri', 'label', 'secondaryLabel', 'type'], entity), {\n [id]: tree\n });\n if (updatedTrees.length) {\n dispatch(treeActions.treeChanged({id, tree: updatedTrees[0].root}));\n }\n }, [entity?.updatedTime]);\n useEffect(() => {\n if (enabled && hasRoot) {\n showCurrentEntityDelayed();\n return () => clearTimeout(timerRef.current);\n }\n }, [enabled, showCurrentEntityDelayed, hasRoot]);\n useEffect(() => {\n if (enabled) {\n const createTreeLoadedEvent = (tree) =>\n treeActions.treeLoaded({id, tree, graphTypes, activenessDate, isReversed});\n const treeProcessing = pipe(prepareTree, createTreeLoadedEvent, dispatch);\n const shouldUpdate =\n !hasEntityInTree(root, entityUri) ||\n isCurrentReversed !== isReversed ||\n previousActivenessDate !== activenessDate ||\n currentGraphTypes !== graphTypes ||\n hasEditorNode(root);\n if (shouldUpdate) {\n dispatch(treeActions.treeLoading(id));\n clearTimeout(timerRef.current);\n safePromise(getTree({uri: entityUri, graphTypes, activenessDate, isReversed, signal}))\n .then((tree) => treeProcessing({...tree, graphTypes}, metadata))\n .then((_) => showCurrentEntityDelayed())\n .catch((e) => {\n dispatch(\n treeActions.treeLoadedWithError({\n id,\n errorMessage: isAbortError(e)\n ? ' ' // error message can't be empty\n : getRequestErrorMessage(e, i18n.text('Something went wrong'))\n })\n );\n console.warn(e);\n });\n }\n }\n }, [\n entityUri,\n graphTypes,\n activenessDate,\n id,\n metadata,\n isReversed,\n enabled,\n safePromise,\n dispatch,\n showCurrentEntityDelayed,\n isCurrentReversed,\n currentGraphTypes,\n previousActivenessDate\n ]);\n};\n\nexport default useTreeLoader;\n","import {useEffect} from 'react';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {isTempUri, NODE_EDITING_MODES} from '@reltio/mdm-sdk';\nimport {prepareTree} from './treeDataProvider';\nimport {pipe} from 'ramda';\n\nconst treeActions = profile.trees.actions;\n\ntype NewEntityTreeProps = {\n entityUri: string;\n id: string;\n graphTypes: string;\n activenessDate: number;\n isReversed: boolean;\n};\n\nconst useNewEntityTree = ({id, entityUri, graphTypes, activenessDate, isReversed}: NewEntityTreeProps) => {\n const dispatch = useDispatch();\n const currentModifiedEntitySelector = (store) => mdm.selectors.getModifiedEntity(store, entityUri);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const modifiedEntity = useSelector(currentModifiedEntitySelector);\n const {root} = useSelector((state) => mdm.selectors.getTree(state, id)) || {};\n const isTreeForCurrentEntityUri =\n root?.entity?.uri === entityUri ||\n (root?.editingMode === NODE_EDITING_MODES.addingParent &&\n root?.children?.some(({entity}) => entity?.uri === entityUri));\n\n useEffect(() => {\n const needCreateTreeForNewEntity = modifiedEntity && isTempUri(entityUri) && !isTreeForCurrentEntityUri;\n if (needCreateTreeForNewEntity) {\n const createTreeLoadedEvent = (tree) =>\n treeActions.treeLoaded({id, tree, graphTypes, activenessDate, isReversed});\n const treeProcessing = pipe(prepareTree, createTreeLoadedEvent, dispatch);\n treeProcessing(\n {\n root: {\n entity: modifiedEntity,\n total: 0\n },\n graphTypes\n },\n metadata\n );\n }\n }, [\n activenessDate,\n dispatch,\n entityUri,\n graphTypes,\n id,\n isReversed,\n metadata,\n modifiedEntity,\n isTreeForCurrentEntityUri\n ]);\n};\n\nexport default useNewEntityTree;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n hierarchyViewContainer: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%'\n },\n view: {\n width: '100%',\n flexGrow: 1\n }\n});\n","import React, {useCallback, useEffect, useMemo, useRef, useState, useContext} from 'react';\nimport classnames from 'classnames';\nimport {omit} from 'ramda';\nimport mdm, {profile, ui} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {getLabel, HierarchyTreeViewConfig, isTempUri, isViewMode, GraphLayout} from '@reltio/mdm-sdk';\nimport {BasicView, PageRequestsAbortingContext, FeaturesContext} from '@reltio/components';\nimport HierarchyPanel from './components/HierarchyPanel/HierarchyPanel';\nimport {HierarchyViewSkeleton} from '../HierarchyViewSkeleton/HierarchyViewSkeleton';\nimport {HierarchyViewHeader} from '../HierarchyViewHeader/HierarchyViewHeader';\nimport {HierarchyTreeToolbar} from './components/HierarchyTreeToolbar/HierarchyTreeToolbar';\nimport {ProfileLayoutItemContent} from '../ProfileLayoutItemContent/ProfileLayoutItemContent';\nimport {loadChildren, loadParents, showCurrentEntity} from './helpers/treeHelpers';\nimport useTreeLoader from './helpers/useTreeLoader';\nimport {getReverseRelationsConfig} from './helpers/configHelpers';\nimport useNewEntityTree from './helpers/useNewEntityTree';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: HierarchyTreeViewConfig;\n className?: string;\n isGraphView?: boolean;\n};\nexport const HierarchyTreeView = ({config, className, isGraphView}: Props) => {\n const {id, caption: title, graph: graphConfig, _showNavigateToGraph} = config;\n\n const tree = useSelector((state) => mdm.selectors.getTree(state, id));\n const entity = useSelector(mdm.selectors.getEntity);\n const mode = useSelector(mdm.selectors.getMode);\n\n const styles = useStyles();\n const dispatch = useDispatch();\n const initialActivenessDate = useRef(Date.now());\n\n const defaultGraphType = graphConfig?.type;\n const entityUri = entity.uri;\n\n const {activenessDate = initialActivenessDate.current, loading, errorMessage} = tree || {};\n\n const [currentGraphType, setCurrentGraphType] = useState(defaultGraphType);\n const [checkedNodes, setCheckedNodes] = useState({});\n\n const signal = useContext(PageRequestsAbortingContext);\n const featuresContext = useContext(FeaturesContext);\n const showNavigateToGraph =\n _showNavigateToGraph !== undefined ? _showNavigateToGraph : featuresContext.showNavigateToGraph;\n const features = useMemo(() => ({...featuresContext, showNavigateToGraph}), [showNavigateToGraph, featuresContext]);\n\n const isReversed = getReverseRelationsConfig(config);\n\n useTreeLoader({\n id,\n entityUri,\n graphTypes: currentGraphType,\n activenessDate,\n isReversed,\n enabled: entityUri && isViewMode(mode) && !isTempUri(entityUri),\n signal\n });\n\n useNewEntityTree({\n id,\n entityUri,\n graphTypes: currentGraphType,\n activenessDate,\n isReversed\n });\n\n const onChildrenRequested = useCallback(\n (parent) =>\n dispatch(\n loadChildren({\n parentUri: parent.entity.uri,\n parentId: parent.nodeId,\n graphTypes: currentGraphType,\n activenessDate,\n id,\n isReversed,\n signal\n })\n ),\n [dispatch, currentGraphType, activenessDate, id, isReversed, signal]\n );\n\n const onParentsRequested = useCallback(\n (node) =>\n dispatch(\n loadParents({\n uri: node.entity.uri,\n graphTypes: currentGraphType,\n activenessDate,\n id,\n isReversed,\n signal,\n nodeId: node.nodeId\n })\n ),\n [dispatch, currentGraphType, activenessDate, id, isReversed, signal]\n );\n\n const onTreeChanged = useCallback(\n (tree) => {\n dispatch(profile.trees.actions.treeChanged({id, tree}));\n },\n [dispatch, id]\n );\n\n const onScrollToCurrentEntity = useCallback(() => {\n dispatch(showCurrentEntity({id, uri: entityUri}));\n }, [dispatch, id, entityUri]);\n\n const onNodeMoved = useCallback(\n (movedNodeInfo) => {\n const {node, nextParentNode} = movedNodeInfo;\n const {entity: newParent} = nextParentNode || {};\n const {relation, entity} = node;\n if (relation) {\n dispatch(profile.trees.actions.treeRelationRepointed({entity, relation, newParent, isReversed}));\n } else {\n console.error('relation not found:' + JSON.stringify(movedNodeInfo));\n }\n },\n [dispatch, isReversed]\n );\n\n const onToggleNodeCheckbox = useCallback(({checked, node}) => {\n if (checked) {\n setCheckedNodes((checkedNodes) => ({...checkedNodes, [node.nodeId]: node}));\n } else {\n setCheckedNodes(omit([node.nodeId]));\n }\n }, []);\n\n const openGraph = useCallback(() => {\n dispatch(\n ui.actions.openGraph({viewId: id, graphType: currentGraphType, entityUri, graphLayout: GraphLayout.TREE})\n );\n }, [dispatch, id, currentGraphType, entityUri]);\n\n useEffect(() => {\n setCheckedNodes({});\n }, [mode]);\n\n useEffect(() => {\n setCurrentGraphType(defaultGraphType);\n }, [defaultGraphType]);\n\n return (\n <FeaturesContext.Provider value={features}>\n <BasicView className={classnames(styles.view, className)}>\n <HierarchyViewHeader\n title={title}\n onScrollToCurrentEntity={onScrollToCurrentEntity}\n entityLabel={getLabel(entity.label)}\n onGraphOpen={openGraph}\n disabled={loading}\n isGraphView={isGraphView}\n />\n <ProfileLayoutItemContent\n className={styles.view}\n containerClassName={styles.hierarchyViewContainer}\n toolbar={\n <HierarchyTreeToolbar\n activenessDate={activenessDate}\n config={config}\n entityUri={entityUri}\n tree={tree}\n graphType={currentGraphType}\n onChangeGraphType={setCurrentGraphType}\n />\n }\n isLoading={loading}\n skeleton={<HierarchyViewSkeleton />}\n isEmptyData={!!errorMessage}\n noDataText={errorMessage}\n >\n <HierarchyPanel\n isGraphView={isGraphView}\n config={config}\n tree={tree}\n onTreeChanged={onTreeChanged}\n mode={mode}\n onNodeMoved={onNodeMoved}\n onParentsRequested={onParentsRequested}\n onChildrenRequested={onChildrenRequested}\n onToggleNodeCheckbox={onToggleNodeCheckbox}\n checkedNodes={checkedNodes}\n />\n </ProfileLayoutItemContent>\n </BasicView>\n </FeaturesContext.Provider>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n position: 'relative'\n },\n bodyWrapper: {\n paddingTop: '14px'\n }\n}));\n","import React, {useRef, useEffect, useState} from 'react';\nimport {useAPI} from '@reltio/components';\nimport {CustomActionViewConfig} from '@reltio/mdm-sdk';\nimport Tooltip from '@mui/material/Tooltip';\nimport Dialog from '@mui/material/Dialog';\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 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 '@mui/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 '@mui/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 '@mui/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 from '@mui/material/Typography';\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 {\n AttributeType,\n Entity,\n Paging,\n AttributeItem,\n ImageAttributeViewConfig,\n RequestNextPageOfAttributeValuesPayload\n} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} 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 '@mui/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 {BasicView, ImageAttributesLine} from '@reltio/components';\nimport {\n findAttributeTypeByUri,\n ImageAttributeViewConfig,\n RequestNextPageOfAttributeValuesPayload\n} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {ImageAttributeViewEditableContent} from './ImageAttributeViewEditableContent/ImageAttributeViewEditableContent';\nimport {ImageLineCaption} from './ImageLineCaption/ImageLineCaption';\nimport {ProfileLayoutItemHeader} from '../ProfileLayoutItemHeader/ProfileLayoutItemHeader';\nimport {ProfileLayoutItemContent} from '../ProfileLayoutItemContent/ProfileLayoutItemContent';\n\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 isViewMode = useSelector(mdmModule.selectors.getIsViewMode);\n const entity = useSelector(mdmModule.selectors.getEntityWithDiff);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n\n const attributeType = attributeUri ? findAttributeTypeByUri(metadata, attributeUri) : null;\n\n const requestNextPageOfAttributeValues = useCallback(\n (payload: RequestNextPageOfAttributeValuesPayload) =>\n dispatch(profile.actions.requestNextPageOfAttributeValues(payload)),\n [dispatch]\n );\n\n const entityValues = pathOr([], ['attributes', attributeType?.name], entity);\n const paging = path(['attributes', 'paging', attributeUri], entity);\n const totalValues = entityValues.length;\n const isEmptyData = !attributeType || (isViewMode && !totalValues);\n\n return (\n <BasicView className={className}>\n <ProfileLayoutItemHeader title={config.caption} description={attributeType?.description} />\n <ProfileLayoutItemContent\n className={styles.container}\n noDataText={config['text-empty']}\n isEmptyData={isEmptyData}\n >\n {isViewMode ? (\n <>\n <ImageAttributesLine\n attributeType={attributeType}\n attributeValues={entityValues}\n imageSize={IMAGE_SIZE}\n paging={paging}\n parentUri={entity.uri}\n requestNextPageOfAttributeValues={requestNextPageOfAttributeValues}\n />\n <ImageLineCaption totalImages={totalValues} />\n </>\n ) : (\n <ImageAttributeViewEditableContent\n attributeType={attributeType}\n config={config}\n paging={paging}\n requestNextPageOfAttributeValues={requestNextPageOfAttributeValues}\n />\n )}\n </ProfileLayoutItemContent>\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 '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n padding: '12px 16px',\n display: 'flex',\n flexGrow: '1'\n },\n icon: {\n flexShrink: 0,\n width: 40,\n height: 40\n },\n content: {\n width: '100%',\n marginLeft: 12,\n '& $label': {\n '&:nth-child(1)': {\n fontSize: '1rem',\n width: '60%'\n },\n '&:nth-child(2)': {\n fontSize: '0.8rem',\n width: '40%'\n }\n }\n },\n label: {}\n});\n","import React from 'react';\nimport Skeleton from '@mui/material/Skeleton';\nimport {useStyles} from './styles';\n\nexport const ProfilePotentialMatchesViewSkeleton = () => {\n const styles = useStyles();\n return (\n <div className={styles.container}>\n <Skeleton variant=\"circular\" className={styles.icon} />\n <div className={styles.content}>\n <Skeleton className={styles.label} />\n <Skeleton className={styles.label} />\n </div>\n </div>\n );\n};\n","import {makeStyles} from '@mui/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 i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {isEmpty, map} from 'ramda';\nimport mdmModule, {ui} from '@reltio/mdm-module';\nimport {BasicView, CollaborationContext, EntitiesMapContext, useMatchesLoader, ViewIdContext} from '@reltio/components';\nimport {\n getEntityUriForLink,\n getEntityUriFromMatchObject,\n getPotentialMatchesObjectIdsForCollaboration,\n Order,\n ProfilePotentialMatchesViewConfig\n} from '@reltio/mdm-sdk';\nimport Link from '@mui/material/Link';\nimport {MatchCard} from './MatchCard';\nimport {ProfileLayoutItemHeader} from '../ProfileLayoutItemHeader/ProfileLayoutItemHeader';\nimport {ProfileLayoutItemContent} from '../ProfileLayoutItemContent/ProfileLayoutItemContent';\nimport {ProfilePotentialMatchesViewSkeleton} from './ProfilePotentialMatchesViewSkeleton/ProfilePotentialMatchesViewSkeleton';\n\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'};\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(ui.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 return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <BasicView className={classnames(styles.root, className)}>\n <ProfileLayoutItemHeader title={config.caption} />\n <ProfileLayoutItemContent\n className={styles.matchesContainer}\n isLoading={isLoading}\n skeleton={<ProfilePotentialMatchesViewSkeleton />}\n noDataText={i18n.text('No matches found')}\n isEmptyData={isEmpty(matches)}\n >\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 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 </ProfileLayoutItemContent>\n </BasicView>\n </EntitiesMapContext.Provider>\n );\n};\n","import React from 'react';\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 {withDragHandle} from '@reltio/components';\nimport {ProfileAttributesView} from '../ProfileAttributesView/ProfileAttributesView';\nimport {ProfileSingleAttributeView} from '../ProfileSingleAttributeView/ProfileSingleAttributeView';\nimport {ProfileRelationsView} from '../ProfileRelationsView/ProfileRelationsView';\nimport {ProfileRelationsTableView} from '../ProfileRelationsTableView/ProfileRelationsTableView';\nimport {ProfileTableAttributeView} from '../ProfileTableAttributeView/ProfileTableAttributeView';\nimport {HierarchyPathsView} from '../HierarchyPathsView';\nimport {HierarchyTreeView} from '../HierarchyTreeView/HierarchyTreeView';\nimport {CustomView} from '../Sandbox/CustomView';\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);\nexport const WrappedHierarchyTreeView = wrapView(HierarchyTreeView);\nexport const WrappedRelationshipsTableView = wrapView(ProfileRelationsTableView);\nexport const WrappedEntityMapView = wrapView(EntityMapView);\nexport const WrappedImageAttributeView = wrapView(ImageAttributeView);\n\nexport type ViewComponentProps = {\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 {config, className, isFullscreen, onToggleFullscreen}: ViewComponentProps\n ) => {\n switch (config[propName]) {\n case ViewsFactory.ViewTypes.HierarchyTree:\n return <WrappedHierarchyTreeView config={config as HierarchyTreeViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.HierarchyPaths:\n return <WrappedHierarchyPathView config={config as HierarchyPathsViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.RelationsTable:\n return <WrappedRelationshipsTableView config={config as RelationsViewConfig} className={className} />;\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 {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, {useMemo} 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 className?: string;\n};\n\nexport const ProfileRelationsView = ({config, className}: Props) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const parsedConfig = useMemo(() => parseRelationsConfig(metadata, config), [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 {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, {useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {RelationsViewConfig, parseRelationsConfig, Metadata} from '@reltio/mdm-sdk';\nimport {RelationsTableView} from './components/RelationsTableView/RelationsTableView';\nimport {RelationsTableViewStateContext} from './contexts/RelationsTableViewStateContext';\nimport useRelationsTableState from './hooks/useRelationsTableState';\n\ntype Props = {\n config: RelationsViewConfig;\n className?: string;\n};\n\nexport const ProfileRelationsTableView = ({config, className}: Props) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const parsedConfig = useMemo(() => parseRelationsConfig(metadata, config), [metadata, config]);\n const relationsState = useRelationsTableState(parsedConfig);\n return (\n <RelationsTableViewStateContext.Provider value={relationsState}>\n <RelationsTableView config={parsedConfig} className={className} />\n </RelationsTableViewStateContext.Provider>\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 '@mui/icons-material/Fullscreen';\nimport FullscreenExitIcon from '@mui/icons-material/FullscreenExit';\nimport Skeleton from '@mui/material/Skeleton';\nimport {BasicView, LinearLoadIndicator, ReltioMap, 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 <Skeleton variant=\"rectangular\" className={styles.fullHeight} />\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, isFullscreen, isAutosize, onToggleFullscreen}: ViewComponentProps) => {\n const styles = useStyles();\n return (\n <Suspense fallback={<Fallback />}>\n {ViewsFactory.getComponent({\n config,\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} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n item: theme.basicView,\n fixedSizeContainer: {\n height: '100%'\n },\n overflowContainer: {\n width: '100%',\n height: '100%',\n overflow: 'hidden'\n }\n}));\n","import React, {ReactChildren, ReactNode} from 'react';\nimport {omit} from 'ramda';\nimport {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 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, {\n [styles.item]: !isCustomView,\n customView: isCustomView\n })}\n >\n <div className={styles.overflowContainer}>\n <div\n data-reltio-id=\"profile-view-container\"\n className={classnames({[styles.fixedSizeContainer]: !AutosizeComponent})}\n >\n {AutosizeComponent}\n <ViewComponent\n config={config}\n isFullscreen={isFullscreen}\n onToggleFullscreen={onToggleFullscreen}\n isAutosize={Boolean(AutosizeComponent)}\n />\n </div>\n {ResizeComponent}\n </div>\n </div>\n );\n};\n\nexport {ProfileLayoutItem};\n","import {makeStyles} from '@mui/styles';\n\nconst DEFAULT_MIN_WIDTH = 1024;\n\ntype Props = {\n maxWidth?: number;\n minWidth?: number;\n scrollbarWidth?: number;\n};\n\nexport const useStyles = makeStyles({\n scrollWrapper: {\n flexGrow: 1,\n overflow: 'auto'\n },\n scrollableContent: ({maxWidth, minWidth = DEFAULT_MIN_WIDTH, scrollbarWidth}: Props) => ({\n minWidth: maxWidth && maxWidth < minWidth ? maxWidth - scrollbarWidth : minWidth,\n height: '100%'\n })\n});\n","import React, {useEffect, useMemo, useRef} from 'react';\nimport {PopupBoundariesContext, ReltioGridLayout, ReltioGridLayoutOptions} 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 frozen?: boolean;\n entityUri?: string;\n maxWidth?: number;\n minWidth?: number;\n layoutOptions?: ReltioGridLayoutOptions;\n onLayoutChanged: (layout: Layout) => void;\n};\n\nconst calcScrollbarWidth = (element: HTMLDivElement) => (element ? element.offsetWidth - element.clientWidth : 0);\n\nconst ProfileLayout = ({\n views,\n layout,\n frozen,\n entityUri,\n maxWidth,\n minWidth,\n layoutOptions,\n onLayoutChanged\n}: Props) => {\n const scrollWrapperRef = useRef<HTMLDivElement>();\n const scrollbarWidth = calcScrollbarWidth(scrollWrapperRef.current);\n const boundariesElement = scrollWrapperRef.current;\n\n const styles = useStyles({maxWidth, minWidth, 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} data-reltio-id=\"reltio-profile-grid\">\n <PopupBoundariesContext.Provider value={popupBoundariesValue}>\n <ReltioGridLayout\n LayoutItem={ProfileLayoutItem}\n views={views}\n layout={layout}\n onLayoutChanged={onLayoutChanged}\n draggableHandle=\".viewDraggableHandle\"\n isStatic={frozen}\n layoutOptions={layoutOptions}\n />\n </PopupBoundariesContext.Provider>\n </div>\n </div>\n );\n};\n\nexport {ProfileLayout};\n","import {makeStyles} from '@mui/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 from '@mui/material/Snackbar';\nimport Portal from '@mui/material/Portal';\nimport React, {useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport Button from '@mui/material/Button';\nimport CloseIcon from '@mui/icons-material/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, {useEffect} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdm, {ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {NotificationItem} from './types';\nimport {Notification} from './Notification';\n\nexport const Notifications = () => {\n const dispatch = useDispatch();\n const notifications: NotificationItem[] = useSelector(mdm.selectors.getNotifications);\n\n useEffect(\n () => () => {\n dispatch(mdmModuleUi.actions.clearNotifications());\n },\n []\n );\n\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 '@mui/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 menuButton: {\n marginLeft: 8\n },\n cancelButton: {\n border: '1px solid rgba(0, 0, 0, 0.23)'\n }\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 from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport SvgIcon from '@mui/material/SvgIcon';\nimport VisibilityIcon from '@mui/icons-material/Visibility';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport CreateIcon from '@mui/icons-material/Create';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\n\nimport {\n getEntityType,\n Entity,\n checkMetadataPermission,\n isDataTenantEntity,\n isTempUri,\n MetadataPermissions,\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 DropDownMenuButton,\n MultilineMenuItem,\n SmallIconButton\n} from '@reltio/components';\nimport {useCloneAction} from './hooks/useCloneAction';\n\nimport SuggestSvg from './suggest.svg';\nimport CopySvg from './copy.svg';\n\nimport {useStyles} from './styles';\n\ntype MultilineMenuItemProps = React.ComponentProps<typeof MultilineMenuItem>;\ntype Props = {\n className?: string;\n showMenu?: boolean;\n profileBandConfig?: ProfileBandConfig;\n menuItems: MultilineMenuItemProps['item'][];\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, menuItems, showMenu = true}: 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: Mode.Editing,\n description: i18n.text('Edit profile directly'),\n icon: CreateIcon,\n permission: 'UPDATE'\n },\n {\n label: i18n.text('Suggesting'),\n value: Mode.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: Mode.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 className={styles.cancelButton}\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 {showMenu && (\n <DropDownMenuButton\n menuId=\"profile-header-menu\"\n buttonComponent={SmallIconButton}\n buttonProps={{\n icon: MoreVertIcon,\n size: 'L',\n 'data-reltio-id': 'reltio-profile-header-menu',\n className: styles.menuButton\n }}\n menuItems={menuItems}\n MenuItemRenderer={MultilineMenuItem}\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 {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 {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n display: 'flex',\n overflow: 'hidden',\n flexShrink: 0,\n marginLeft: '3px',\n height: '100%'\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, {useEffect} from 'react';\nimport {SidePanelContentHeader, SidePanel, RightPanelTab} from '@reltio/components';\nimport {isNil} from 'ramda';\n\nimport {useStyles} from './styles';\n\nexport enum ActivePanel {\n Workflow,\n Collaboration,\n History,\n DBConnector\n}\n\ntype Props = {\n active?: ActivePanel;\n tabs: Array<RightPanelTab>;\n onClose?: () => void;\n};\n\nexport const RightSidePanel = ({active, tabs, onClose}: Props) => {\n const styles = useStyles();\n const isOpen = !isNil(active);\n const {content, headerProps, hidden} = tabs[active] || {};\n\n useEffect(() => {\n if (hidden) {\n onClose();\n }\n }, [active, hidden, onClose]);\n\n return (\n <div className={styles.wrapper}>\n <SidePanel open={isOpen}>\n {!hidden && (\n <>\n <SidePanelContentHeader {...headerProps} onClose={onClose} />\n {content}\n </>\n )}\n </SidePanel>\n </div>\n );\n};\n","import {makeStyles} from '@mui/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, {useContext, VFC} from 'react';\nimport Badge from '@mui/material/Badge';\nimport {WorkflowTasksContext} from '@reltio/components';\nimport InboxIcon from '@mui/icons-material/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 anchorOriginTopRightRectangular: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <InboxIcon />\n </Badge>\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 from '@mui/material/Badge';\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 anchorOriginTopRightRectangular: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <CollaborationIcon />\n </Badge>\n );\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"path\", {\n 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 '@mui/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","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 {makeStyles} from '@mui/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 from '@mui/material/Box';\nimport Link from '@mui/material/Link';\nimport KeyboardArrowDownIcon from '@mui/icons-material/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 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","import React, {useContext, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport {isTempUri, getEntityType, Metadata, Entity, calcTotalCommentItems, HistoryEvent} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {CollaborationContext, RightPanelTab, WorkflowTasksContext} from '@reltio/components';\nimport {\n AddWorkflowButton,\n HistoryHeader,\n HistoryPanelEmptyState,\n HistoryView,\n useHistory,\n useHistoryEnabled\n} from '@reltio/components';\nimport i18n from 'ui-i18n';\nimport HistoryIcon from '@mui/icons-material/History';\nimport {ActivePanel} from '../../RightSidePanel/RightSidePanel';\nimport {DBConnectorsList} from '../../RightSidePanel/components/DBConnectorsList/DBConnectorsList';\nimport {WorkflowButton} from '../../RightSidePanel/components/WorkflowButton/WorkflowButton';\nimport {CollaborationButton} from '../../RightSidePanel/components/CollaborationButton/CollaborationButton';\nimport ConnectorsIcon from '../../RightSidePanel/icons/ConnectorsIcon.svg';\n\nimport {WorkflowList} from '../../RightSidePanel/components/WorkflowList/WorkflowList';\nimport WorkflowPanelEmptyState from '../../RightSidePanel/components/WorkflowPanelEmptyState/WorkflowPanelEmptyState';\nimport {CollaborationList} from '../../RightSidePanel/components/CollaborationList/CollaborationList';\nimport CollaborationPanelEmptyState from '../../RightSidePanel/components/CollaborationPanelEmptyState/CollaborationPanelEmptyState';\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 perspectiveId: string;\n commentId?: string;\n hideHistory?: boolean;\n};\n\nexport const useProfileRightSidePanelElements = ({\n commentId,\n hideHistory,\n perspectiveId\n}: Props): {tabs: Array<RightPanelTab>; defaultTab?: number} => {\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\n const defaultTab = commentId ? ActivePanel.Collaboration : undefined;\n\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 {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({\n perspectiveId,\n entity,\n historyButtonId: ActivePanel.History\n });\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 tabs = useMemo(\n () => [\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 hidden: hideHistory\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 workflowTasksContext?.total,\n enabledWorkflowButton,\n collaborationTotal,\n enabledCollaborationButton,\n isProfilePersisted,\n isLoading,\n historyWithTotal,\n historicUris,\n entity?.uri,\n entity?.type,\n historyEvent,\n onLoadMore,\n canLoadMore,\n metadata,\n historyFilter,\n onApplyFilter,\n isDBConnectorSideViewEnabled\n ]\n );\n\n return {tabs, defaultTab};\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n profileContainer: {\n display: 'flex',\n overflow: 'hidden',\n flexGrow: 1\n }\n}));\n","import React, {memo} from 'react';\nimport {pipe, pluck, propEq, reject} from 'ramda';\nimport {ProfileResizablePanes} from '@reltio/components';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\nimport {useProfileRightSidePanelElements} from '../ProfilePerspectiveView/hooks/useProfileRightSidePanelElements';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n perspectiveId: string;\n commentId?: string;\n hideHistory?: boolean;\n children: React.ReactElement;\n};\n\nexport const ProfilePerspectiveResizablePanes = memo(({perspectiveId, commentId, hideHistory, children}: Props) => {\n const styles = useStyles();\n const {defaultTab, tabs} = useProfileRightSidePanelElements({commentId, hideHistory, perspectiveId});\n\n return (\n <div className={styles.profileContainer}>\n <ProfileResizablePanes\n defaultTab={defaultTab}\n perspectiveId={perspectiveId}\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(tabs)}\n >\n {children}\n <RightSidePanel tabs={tabs} />\n </ProfileResizablePanes>\n </div>\n );\n});\n\nProfilePerspectiveResizablePanes.displayName = 'ProfilePerspectiveView';\n","import {useCallback, useEffect, useMemo, useRef, 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 const tempConfig = useRef<{views: ProfilePerspectiveConfig['views']; layout: Layout}>();\n const handleResetUndo = useCallback(() => {\n setViews(tempConfig.current.views);\n handleLayoutChange(tempConfig.current.layout);\n }, [handleLayoutChange]);\n\n const handleLayoutReset = useCallback(() => {\n tempConfig.current = {views, layout};\n const {views: fixedViews, layout: fixedLayout} = fixNonUniqViewsIds<ProfileViewConfig, ReltioGridLayoutItem>({\n views: config.views,\n layout: config.layout\n });\n setViews(fixedViews);\n handleLayoutChange(fixedLayout);\n }, [config, layout, views, handleLayoutChange]);\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 {\n views,\n layout,\n isLoaded,\n onLayoutReset: handleLayoutReset,\n onResetUndo: handleResetUndo,\n handleLayoutChange\n };\n};\n","import {makeStyles} from '@mui/styles';\n\nconst useStyles = makeStyles((theme) => ({\n wrapper: {\n alignItems: 'center',\n display: 'flex',\n padding: '12px 16px',\n fontSize: '13px',\n lineHeight: '15px',\n fontWeight: theme.typography.fontWeightRegular,\n color: theme.palette.text.secondary\n },\n loadingWrapper: {\n display: 'flex',\n backgroundColor: 'rgba(238, 238, 238, 1)',\n color: theme.palette.text.secondary,\n boxShadow: 'inset 0px -1px 0px rgba(0, 0, 0, 0.12)'\n },\n errorWrapper: {\n display: 'flex',\n backgroundColor: 'rgba(255, 235, 238, 1)',\n color: theme.palette.error.main\n },\n successWrapper: {\n display: 'flex',\n backgroundColor: 'rgba(239, 253, 227, 1)',\n color: theme.palette.success.main,\n '& span, & b': {\n paddingRight: '4px'\n }\n },\n closeIcon: {\n color: theme.palette.text.secondary,\n cursor: 'pointer',\n '&:hover': {\n background: 'none'\n }\n },\n indicatorIcon: {\n padding: '0 14px'\n },\n link: {\n color: theme.palette.primary.main,\n fontSize: theme.typography.pxToRem(13),\n fontWeight: theme.typography.fontWeightRegular,\n cursor: 'pointer'\n }\n}));\n\nexport default useStyles;\n","import React from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\n\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\nimport {getLabel} from '@reltio/mdm-sdk';\n\nimport Typography from '@mui/material/Typography';\nimport CloseIcon from '@mui/icons-material/Close';\nimport InfoIcon from '@mui/icons-material/InfoRounded';\nimport SuccessIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/ReportProblem';\n\nimport useStyles from './styles';\n\nexport enum BackgroundUpdateStatus {\n loading = 'loading',\n success = 'success',\n error = 'error'\n}\n\ntype Props = {\n label?: string;\n onClose: () => void;\n onRefresh?: () => void;\n status?: BackgroundUpdateStatus;\n};\n\nconst CloseIconButton = ({onClose}: {onClose: () => void}) => {\n const styles = useStyles();\n return (\n <SmallIconButtonWithTooltip\n tooltipTitle={i18n.text('Close')}\n onClick={onClose}\n size={'S'}\n className={styles.closeIcon}\n icon={CloseIcon}\n />\n );\n};\n\nconst ProcessLoading = ({onClose}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.wrapper, styles.loadingWrapper)}>\n <CloseIconButton onClose={onClose} />\n <InfoIcon className={classnames(styles.indicatorIcon)} />\n <Typography>{i18n.text('Loading background process...')}</Typography>\n </div>\n );\n};\n\nconst ProcessSuccess = ({label, onClose, onRefresh}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.wrapper, styles.successWrapper)}>\n <CloseIconButton onClose={onClose} />\n <SuccessIcon className={classnames(styles.indicatorIcon)} />\n <div data-reltio-id=\"background-update-success\">\n <span>{i18n.text('This Profile')}</span>\n <b>{getLabel(label)}</b>\n <span>{i18n.text('has been updated.')}</span>\n <span onClick={onRefresh} className={styles.link}>\n {i18n.text('Click Here to Refresh the page')}\n </span>\n <span>{i18n.text(' to retrieve the latest profile data.')}</span>\n </div>\n </div>\n );\n};\n\nconst ProcessError = ({onClose}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.wrapper, styles.errorWrapper)}>\n <CloseIconButton onClose={onClose} />\n <ErrorIcon className={classnames(styles.indicatorIcon)} />\n <Typography>\n {i18n.text(\n 'UI attempted to check for updates but no update received in the last 30 seconds. Try refreshing the page manually.'\n )}\n </Typography>\n </div>\n );\n};\n\nexport const BackgroundProcessIndicator = ({label, onClose, onRefresh, status}: Props) => {\n switch (status) {\n case BackgroundUpdateStatus.loading:\n return <ProcessLoading onClose={onClose} />;\n case BackgroundUpdateStatus.success:\n return <ProcessSuccess label={label} onClose={onClose} onRefresh={onRefresh} />;\n case BackgroundUpdateStatus.error:\n return <ProcessError onClose={onClose} />;\n default:\n return null;\n }\n};\n","import {useCallback, useContext, useEffect, useRef, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {isNil} from 'ramda';\nimport {useActionsHook, useSafePromise, ViewIdContext} from '@reltio/components';\nimport {getEntityUpdatedTime, ProfileCheckUpdate} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {BackgroundUpdateStatus} from '../../BackgroundProcessIndicator/BackgroundProcessIndicator';\nimport {getBackgroundUpdateDelay} from './data/backgroundUpdateDalay';\n\nconst NUMBER_OF_RETRY = 5;\n\nconst isEntityTypeInBackgroundProcess = (entityTypeList?: string[], entityType?: string) => {\n if (entityTypeList?.[0] === '*') {\n return true;\n }\n if (isNil(entityTypeList)) {\n return false;\n }\n return entityTypeList.includes(entityType);\n};\n\nconst checkEntityTypeInList = (entityTypeList: string[], entityType: string) =>\n isEntityTypeInBackgroundProcess(entityTypeList, entityType);\n\ntype Props = {\n entityUri: string;\n entityTypeUri: string;\n entityUpdatedTime: number;\n};\n\nexport const useBackgroundProcessIndicator = ({entityUri, entityTypeUri, entityUpdatedTime}: Props) => {\n const dispatch = useDispatch();\n const {autoUpdateInReadMode, entityTypes: entityTypesForUpdate}: ProfileCheckUpdate =\n useSelector(mdm.selectors.getProfileCheckUpdate) || {};\n\n const needBackgroundProcess = checkEntityTypeInList(entityTypesForUpdate, entityTypeUri);\n const isAutoUpdated = checkEntityTypeInList(autoUpdateInReadMode, entityTypeUri);\n\n const timerId = useRef(null);\n const safePromise = useSafePromise();\n const listenToActions = useActionsHook();\n const viewId = useContext(ViewIdContext);\n\n const [isOpenBackgroundProcessIndicator, setIsOpenBackgroundProcessIndicator] = useState(false);\n const [backgroundUpdateStatus, setBackgroundUpdateStatus] = useState(BackgroundUpdateStatus.loading);\n const backgroundUpdateDelay = getBackgroundUpdateDelay();\n\n const onRefreshProfile = useCallback(() => {\n // entity refreshing\n dispatch(profile.entity.actions.loadEntity({viewId, uri: entityUri}));\n setIsOpenBackgroundProcessIndicator(false);\n }, [dispatch, entityUri, viewId]);\n\n const onCloseBackgroundProcessIndicator = useCallback(() => {\n setIsOpenBackgroundProcessIndicator(false);\n }, []);\n\n const cancelUpdateProcess = useCallback(() => {\n clearTimeout(timerId.current);\n setIsOpenBackgroundProcessIndicator(false);\n safePromise(Promise.resolve());\n }, [safePromise]);\n\n const getUpdatedTime = useCallback(\n (numberOfRetry) => {\n safePromise(getEntityUpdatedTime(entityUri))\n .then((result) => {\n if (result.updatedTime > entityUpdatedTime) {\n setBackgroundUpdateStatus(BackgroundUpdateStatus.success);\n if (isAutoUpdated) {\n onRefreshProfile();\n } else {\n setIsOpenBackgroundProcessIndicator(true);\n }\n numberOfRetry = -1;\n }\n })\n .catch(() => {})\n .finally(() => {\n if (numberOfRetry < 0) {\n return;\n }\n if (!numberOfRetry) {\n setBackgroundUpdateStatus(BackgroundUpdateStatus.error);\n setIsOpenBackgroundProcessIndicator(true);\n } else {\n numberOfRetry = numberOfRetry - 1;\n timerId.current = setTimeout(getUpdatedTime, backgroundUpdateDelay, numberOfRetry);\n }\n });\n },\n [entityUpdatedTime, entityUri, isAutoUpdated, onRefreshProfile, safePromise, backgroundUpdateDelay]\n );\n\n const runBackgroundUpdate = useCallback(() => {\n if (needBackgroundProcess) {\n setBackgroundUpdateStatus(BackgroundUpdateStatus.loading);\n setIsOpenBackgroundProcessIndicator(true);\n timerId.current = setTimeout(getUpdatedTime, backgroundUpdateDelay, NUMBER_OF_RETRY - 1);\n }\n }, [getUpdatedTime, needBackgroundProcess]);\n\n useEffect(() => {\n const stopListeningActions = listenToActions((action) => {\n if (action.type === profile.constants.ProfileActions.PROFILE_SAVED) {\n runBackgroundUpdate();\n }\n });\n return () => {\n stopListeningActions();\n };\n }, [listenToActions, safePromise, runBackgroundUpdate]);\n\n return {\n onRefreshProfile,\n onCloseBackgroundProcessIndicator,\n cancelUpdateProcess,\n isOpenBackgroundProcessIndicator,\n backgroundUpdateStatus\n };\n};\n","import {makeStyles} from '@mui/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 '@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 mdm, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n Entity,\n getProfileObjectIdsForCollaboration,\n Mode,\n ProfilePerspectiveConfig,\n isTempUri,\n HistoryEvent,\n AttributeError\n} from '@reltio/mdm-sdk';\nimport {\n CollaborationContext,\n WorkflowTasksContext,\n EMPTY_STATE_ICONS,\n EMPTY_STATE_VARIANTS,\n AttributesErrorsPanel,\n EmptyState,\n LinearLoadIndicator,\n ProfilePerspectiveViewContext,\n SearchValueContext,\n useCollaboration,\n HistoryDiffContext,\n useHistoryDiff,\n useHistorySlice,\n useEntityLoadingIndication,\n ScrollToElementProvider,\n CollaborationContextProvider,\n useLayoutResetter,\n FeaturesContext\n} from '@reltio/components';\nimport {ProfileSavedState} from '../../types';\n\nimport {ProfileLayout} from '../ProfileLayout';\nimport {Notifications} from '../Notifications';\nimport {PerspectiveProfileBand} from '../PerspectiveProfileBand';\nimport {ProfilePerspectiveResizablePanes} from '../ProfilePerspectiveResizablePanes/ProfilePerspectiveResizablePanes';\nimport {useProfileValidation} from '../hooks/useProfileValidation';\nimport {useProfileLayout} from './hooks/useProfileLayout';\nimport {useWorkflowTasks} from './hooks/useWorkflowTasks';\nimport {BackgroundProcessIndicator} from '../BackgroundProcessIndicator/BackgroundProcessIndicator';\nimport {useBackgroundProcessIndicator} from './hooks/useBackgroundProcessIndicator';\n\nimport {useStyles} from './styles';\nimport mdmModule from '@reltio/mdm-module';\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 perspectiveId = 'profile';\n\nconst ProfilePerspectiveView = memo(({config, saveState, getSavedState, commentId}: Props) => {\n const {maxWidth, profileBand, workflow, frozen} = 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 const allErrors: AttributeError[] = useSelector(mdm.selectors.getProfileErrors);\n\n const dispatch = useDispatch();\n const historyDiff = useHistoryDiff();\n const workflowTasks = useWorkflowTasks(workflow);\n const {isEmptyState} = useEntityLoadingIndication();\n\n const {type: entityTypeUri, uri: entityUri, updatedTime: entityUpdatedTime} = entity || {};\n const {\n onRefreshProfile,\n onCloseBackgroundProcessIndicator,\n cancelUpdateProcess,\n isOpenBackgroundProcessIndicator,\n backgroundUpdateStatus\n } = useBackgroundProcessIndicator({entityUri, entityTypeUri, entityUpdatedTime});\n const objectIds = useMemo(() => getProfileObjectIdsForCollaboration(entity), [entity]);\n const emptyCollaboration = useContext(CollaborationContext);\n const collaboration = useCollaboration({objectIds});\n\n const featuresContext = useContext(FeaturesContext);\n const showDescription = useSelector(mdmModule.selectors.getShowAttributeDescription);\n const features = useMemo(() => ({...featuresContext, showDescription}), [featuresContext, showDescription]);\n\n const {\n views,\n layout,\n isLoaded: isLayoutLoaded,\n onLayoutReset,\n onResetUndo,\n handleLayoutChange\n } = 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 useEffect(() => {\n return () => cancelUpdateProcess();\n }, [entityUri, mode]);\n\n // possible for a short time during createProfile saga execution\n const hideLayout = mode === Mode.Viewing && isTempUri(entityUri);\n\n const renderEmptyState = (text: string) => (\n <div className={styles.emptyState}>\n <EmptyState LogoRenderer={EMPTY_STATE_ICONS.NO_DATA} text={text} variant={EMPTY_STATE_VARIANTS.embedded} />\n </div>\n );\n\n const {SnackbarRenderer, resetLayout} = useLayoutResetter({onLayoutReset, onResetUndo});\n const menuItems = useMemo(\n () => [\n {\n primary: i18n.text('Reset layout'),\n secondary: i18n.text('Restore the default layout without saving any changes'),\n onClick: resetLayout\n }\n ],\n [resetLayout]\n );\n\n return (\n <FeaturesContext.Provider value={features}>\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 <ScrollToElementProvider>\n <div className={styles.perspectiveView}>\n {isLayoutLoaded && entityUri ? (\n <ProfilePerspectiveResizablePanes\n commentId={commentId}\n perspectiveId={perspectiveId}\n >\n <div className={styles.profileWrapper}>\n <PerspectiveProfileBand\n profileBandConfig={profileBand}\n showMenu={!frozen}\n menuItems={menuItems}\n />\n {isEmptyState ? (\n renderEmptyState(i18n.text('Loading'))\n ) : (\n <>\n {isOpenBackgroundProcessIndicator && (\n <BackgroundProcessIndicator\n label={entity.label}\n onClose={onCloseBackgroundProcessIndicator}\n onRefresh={onRefreshProfile}\n status={backgroundUpdateStatus}\n />\n )}\n {!isHistoryActive && (\n <AttributesErrorsPanel\n attributesWithErrors={allErrors}\n />\n )}\n {!hideLayout && (\n <ProfileLayout\n maxWidth={maxWidth}\n views={views}\n layout={layout}\n frozen={frozen}\n entityUri={entityUri}\n onLayoutChanged={handleLayoutChange}\n />\n )}\n </>\n )}\n </div>\n </ProfilePerspectiveResizablePanes>\n ) : (\n <>\n <LinearLoadIndicator />\n {renderEmptyState(i18n.text('No data to display.'))}\n </>\n )}\n <Notifications />\n <SnackbarRenderer />\n </div>\n </ScrollToElementProvider>\n </SearchValueContext.Provider>\n </HistoryDiffContext.Provider>\n </WorkflowTasksContext.Provider>\n </CollaborationContextProvider>\n </ProfilePerspectiveViewContext.Provider>\n </FeaturesContext.Provider>\n );\n});\n\nProfilePerspectiveView.displayName = 'ProfilePerspectiveView';\n\nexport {ProfilePerspectiveView};\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","const BACKGROUND_UPDATE_DELAY = 6000;\nexport const getBackgroundUpdateDelay = (delay?: number) => delay || BACKGROUND_UPDATE_DELAY;\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 {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 React, {useCallback, useMemo} from 'react';\nimport {AdapterMoment} from '@mui/x-date-pickers/AdapterMoment';\nimport {identity} from 'ramda';\nimport createGenerateClassName from '@mui/styles/createGenerateClassName';\nimport StylesProvider from '@mui/styles/StylesProvider';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider';\nimport {ErrorPopup, SandboxAPIContext, SnackbarContext, useSnackbar, ViewIdContext} from '@reltio/components';\nimport {\n convertOldProfileConfig,\n ProfilePerspectiveConfig,\n promisifyCallback,\n QxSandboxApi,\n userPreferencesComparator\n} from '@reltio/mdm-sdk';\nimport {ProfileSavedState} from '../types';\nimport ProfilePerspectiveView from '../components/ProfilePerspectiveView';\nimport {equalsState} from './helpers';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'profilePerspective',\n disableGlobal: true,\n seed: 'prfl'\n});\n\nuserPreferencesComparator.register('profile', equalsState);\n\ntype Props = {\n config: ProfilePerspectiveConfig;\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 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 const processedConfig = useMemo(() => config && convertOldProfileConfig(config), [config]);\n\n return (\n <ViewIdContext.Provider value={processedConfig?.id}>\n <SnackbarContext.Provider value={showSnackbarMessage}>\n <SandboxAPIContext.Provider value={qxSandboxApi}>\n <StylesProvider generateClassName={generateClassName}>\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n {processedConfig && (\n <ProfilePerspectiveView\n config={processedConfig}\n saveState={saveState}\n getSavedState={getSavedStatePromisified}\n commentId={commentId}\n />\n )}\n <ErrorPopup showErrorFromStore={true} />\n <SnackbarRenderer />\n </LocalizationProvider>\n </StylesProvider>\n </SandboxAPIContext.Provider>\n </SnackbarContext.Provider>\n </ViewIdContext.Provider>\n );\n};\n\nexport default ProfilePerspective;\n","import {makeStyles} from '@mui/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 from '@mui/material/Link';\nimport ArrowForwardIosRoundedIcon from '@mui/icons-material/ArrowForwardIosRounded';\nimport Typography from '@mui/material/Typography';\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 '@mui/styles';\n\nexport const useStyles = makeStyles((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 '@mui/icons-material/LocalOffer';\nimport Toolbar from '@mui/material/Toolbar';\nimport Typography from '@mui/material/Typography';\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 '@mui/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 {identity} from 'ramda';\nimport createGenerateClassName from '@mui/styles/createGenerateClassName';\nimport StylesProvider from '@mui/styles/StylesProvider';\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 onResize?: (width: number, height: number) => void;\n};\n\nconst TagPerspective = ({config, tag, entityUri, onResize = identity}: Props) => {\n return (\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 );\n};\n\nexport default TagPerspective;\n","import {makeStyles} from '@mui/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 {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 {makeStyles} from '@mui/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 React, {memo, useContext, useEffect, useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {Entity} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {\n AttributesView,\n EMPTY_STATE_ICONS,\n EMPTY_STATE_VARIANTS,\n EmptyState,\n FeaturesContext,\n LinearLoadIndicator,\n WorkflowTasksContext\n} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {DCRProfileBand} from './components/DCRProfileBand/DCRProfileBand';\nimport {useWorkflowTasks} from './hooks/useWorkflowTasks';\nimport {ProfilePerspectiveResizablePanes} from '../ProfilePerspectiveResizablePanes/ProfilePerspectiveResizablePanes';\n\nimport {useStyles} from './styles';\n\nconst workflowConfig = {processTypes: ['dataChangeRequestReview']};\nconst perspectiveId = 'dcrCard';\n\nexport const DCRReviewPerspectiveView = memo(() => {\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const workflowTasks = useWorkflowTasks(workflowConfig);\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n\n const featuresContext = useContext(FeaturesContext);\n const showDescription = useSelector(mdmModule.selectors.getShowAttributeDescription);\n const features = useMemo(() => ({...featuresContext, showDescription}), [featuresContext, showDescription]);\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 <FeaturesContext.Provider value={features}>\n <WorkflowTasksContext.Provider value={workflowTasks}>\n <div className={styles.perspectiveView}>\n {!isLoaded && <LinearLoadIndicator />}\n <div className={styles.perspectiveContainer}>\n {isLoaded ? (\n <ProfilePerspectiveResizablePanes hideHistory={true} perspectiveId={perspectiveId}>\n <div className={styles.contentWrapper}>\n <DCRProfileBand />\n <div className={styles.attributesWrapper}>\n <AttributesView />\n </div>\n </div>\n </ProfilePerspectiveResizablePanes>\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 </FeaturesContext.Provider>\n );\n});\n\nDCRReviewPerspectiveView.displayName = 'DCRReviewPerspectiveView';\n","import React from 'react';\nimport {identity} from 'ramda';\nimport createGenerateClassName from '@mui/styles/createGenerateClassName';\nimport StylesProvider from '@mui/styles/StylesProvider';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {DCRReviewPerspectiveConfig} from '@reltio/mdm-sdk';\nimport {AdapterMoment} from '@mui/x-date-pickers/AdapterMoment';\nimport {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider';\nimport DCRReviewPerspectiveView from '../components/DCRReviewPerspectiveView';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'dcrReviewPerspective',\n disableGlobal: true,\n seed: 'dcr'\n});\n\ntype Props = {\n config: DCRReviewPerspectiveConfig;\n onResize?: (width: number, height: number) => void;\n};\n\nconst DCRReviewPerspective = ({config, onResize = identity}: Props) => {\n return (\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n <DCRReviewPerspectiveView />\n <ErrorPopup showErrorFromStore={true} />\n </LocalizationProvider>\n </StylesProvider>\n </ViewIdContext.Provider>\n );\n};\n\nexport default DCRReviewPerspective;\n"],"names":["SingleAttributeContext","React","displayName","useStyles","makeStyles","triggerButton","minWidth","color","popupContent","paddingTop","paddingBottom","paddingLeft","paddingRight","maxWidth","width","checkboxControlRoot","marginTop","marginLeft","checkboxControlLabel","fontSize","checkboxControlCheckbox","marginRight","className","styles","buttonRef","useRef","isOpen","setIsOpen","useState","showInactive","toggleShowInactive","useContext","togglePopup","open","IconButton","ref","classes","root","classnames","onClick","Popover","paper","anchorEl","current","onClose","anchorOrigin","vertical","horizontal","transformOrigin","FormControlLabel","label","control","Checkbox","checked","onChange","e","target","i18n","padding","rightMenuItems","display","flex","justifyContent","alignItems","totalCaption","lineHeight","letterSpacing","flexShrink","ProfileLayoutItemHeader","title","description","extra","children","totalText","isRequired","FacetViewHeader","RequiredMark","DescriptionIcon","HideOnShrink","widthToHide","VerticalDivider","height","margin","Typography","variant","ovIcon","SingleAttributeHeader","caption","totalVisibleValues","showInactiveValuesMenu","isEditableMode","searchQuery","setSearchQuery","setPage","totalNonVisibleValues","nonVisibleValues","attributeType","required","count","OvIcon","nonOvTotal","nonOvValues","ExpandableSearchInput","query","noData","ProfileLayoutItemNoData","text","getAttributeNameFromAttributeUri","getLastUriPart","search","value","Object","values","some","utils","String","theme","messagesContainer","flexDirection","moreButton","backgroundColor","marginBottom","buttonLabel","fontWeight","icon","divider","borderColor","ovFalse","inactive","emptyArray","withContext","ScrollToElementContext","contextValue","parentUri","element","type","highlightedError","isHighlightedErrorType","isAttributeTypeError","uri","noDataText","attributeTypeUri","cardinality","name","dispatch","useDispatch","viewId","ViewIdContext","entity","useSelector","mdmModule","modifiedEntity","state","errors","errorMessage","getAttributePagerActiveTypeErrorMessage","mode","attributeSource","getAttributeSource","entityValuesUris","pipe","pathOr","map","prop","modifiedEntityValues","modifiedEntityValuesUris","showEmptyEditors","isTempUri","emptyEditorValue","useMemo","createNewAttribute","omit","errorClassName","useScrollToAttributeError","isSimple","isModifiedEntityValuesEmpty","isEmptyValue","showEmpty","newValues","filter","onAddAttributes","useCallback","params","profile","param","onChangeAttribute","onDeleteAttribute","onDeactivateError","onAdd","createAttribute","isComplexAttribute","attributes","canCreate","checkCanCreateAttribute","commonProps","crosswalks","showNonOv","isEmptyAttributeList","length","isEmpty","CardinalityMessage","ErrorMessage","message","Button","Add","idx","key","attributeValue","lazy","ownError","getAttributeOwnError","isEmptyEditor","Divider","originalValue","modifiedEntityValue","find","propEq","deleted","includes","edited","value1","value2","cleanser","is","over","lensPath","cleanAttributesWith","valueTransformer","unless","isOv","deleteEmptyComplex","identity","equals","areValuesEqual","cond","always","simpleAttribute","SingleAttributeReadableContent","style","content","SingleAttributeViewSkeleton","Skeleton","container","position","ProfileLayoutItemContent","containerClassName","skeleton","toolbar","isLoading","isEmptyData","pagination","isLoadedOnce","isStartedLoading","setIsStartedLoading","setIsLoadedOnce","useEffect","useLoadedOnce","shouldRenderToolbar","shouldRenderPagination","LinearLoadIndicator","overflow","flexGrow","DEFAULT_ROWS_PER_PAGE","SingleAttributeView","config","max","page","hasPaging","entityUri","mdm","pivotingAttributes","hasValues","PivotingAttributeContext","BasicView","BasicTablePagination","rowsPerPage","rowsPerPageOptions","onChangePage","useSingleAttributeLoader","attributeUri","metadata","setValues","paging","setPaging","setIsLoading","safePromise","useSafePromise","attributeValuesRef","apiPath","tenant","isViewMode","isHistoryModeEnabled","diff","attributeTypeName","attributeTypeSource","findAttributeValues","findAttributeTypeByUri","globalFilter","loadAttributes","isReadableAttribute","isFirstLevelAttributeUri","rest","getRequest","defaultMaxValues","offset","isDataTenantEntity","async","Infinity","findAttributeValuesByTypeUri","ovValues","slice","totalOvValues","totalValues","getPagedLocalEntity","getPagedEntity","options","undefined","then","response","path","loadedValue","isAnalyticAttribute","catch","error","console","warn","ui","getRequestErrorMessage","finally","useDidUpdateEffect","partitionByOv","partition","totalProp","ifElse","has","RelationsViewStateContext","button","palette","secondary","sortControls","sortSelectorRoot","sortSelectorMenuItem","sortOrderButton","FilterButton","sortOrder","toggleSortOrder","sortOption","changeSortOption","sortOptions","hasSortOptions","isAsc","DropDownEditor","entries","TextFieldProps","menuItem","fullWidth","disableUnderline","MenuProps","SmallIconButton","tooltipTitle","ArrowUpwardIcon","ArrowDownwardIcon","size","ImportDTContext","MAX","Math","pow","cursor","top","left","userSelect","zIndex","badge","badgePosition","right","MultipleImportIcon","Badge","anchorOriginTopRightRectangular","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","tooltipProps","setSecondaryLabel","onOpen","isNil","request","getDataTenantEntitySecondaryLabel","getEntitySecondaryLabel","CircularProgress","colorPrimary","Tooltip","disableFocusListener","useRelationInfo","connection","relation","entityType","getEntityType","entityLabel","getLabel","preparedUri","getEntityUriForLink","relationLabel","getRelationTypeLabelFromMetadata","relationType","SuggestedButtons","acceptRelation","ignoreRelation","props","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","getRelationUriFromConnection","getEntityUriFromConnection","defaultRelationTypeObject","connectionWithDefaultRelationType","evolve","object","relationDirection","newConnections","currentConnections","canAddRelations","isEmptyRelationList","getRelationEditableContent","openedRelation","allowOnlyCreateNew","itemKey","RelationEditor","shouldShowAddRelationButton","shouldShowRelationEditorToAdd","attributesList","RelationAttributes","currentEntityUri","firstLevelRelationAttrTypes","getRelationAttributesList","attributeListEntity","getRelationAttributesFromConnection","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","calcAverageRating","ratings","pluck","mean","defaultTo","toFixed","getCountOfLikes","rating","getCountOfDislikes","calcRatingsScale","percentOfLikes","percentOfDislikes","formattedPercentOfLikes","parseFloat","Number","wrapper","gap","info","axis","scaleHistory","greenBadge","redBadge","scale","scaleBar","ratingsList","borderTop","borderBottom","maxHeight","boxSizing","avatar","userInfo","user","textOverflow","ratingDateWrapper","ratingDate","sourcesWrapper","RatingsPopup","sortedRatings","sort","a","b","timestampA","Date","timestamp","getTime","sortRatingsByTime","agreeCount","disagreeCount","PopupWithArrow","placement","transition","LinearProgress","bar","empty","ThumbUp","ThumbDown","i","comment","Avatar","Person","crosswalk","ColoredSourceIcon","averageRating","counts","Ratings","ratingsRef","setOpen","textTransform","RatingsButtons","onAgree","onDisagree","username","ratingOfCurrentUser","endIcon","buttonContent","entityTypeIcon","showDetailsButton","relationAttributes","RelationComplexItem","showRating","Box","rateRelation","RelationsList","mainEnityUri","isComplex","relationTypeObject","ignoreSuggestedRelation","relatedEntityUri","startDate","endDate","isInDirection","startEntityUri","endEntityUri","createRelation","useSuggestedRelations","getRelationshipsObjectIdsForCollaboration","RelationsContentSkeleton","list","selectors","getEntity","getMode","RelationsView","getConnectionsWithDraftsByViewId","getTotalByViewId","sorting","order","field","queryClause","Maybe","filterValueToQueryStringWithQuotes","queryString","orSome","FilterBuilder","addClause","build","buildRelationsFilter","reload","useRelationsLoader","importDTContextValue","pick","useExpandInvalidRelations","EntityContext","Provider","addButton","removedStyle","inactiveStyle","headCell","entityCell","whiteSpace","headLabelWrapper","transform","rowCell","pointerEvents","cell","CellValueRenderer","rowValue","isSorted","otherProps","index","ExpandedValueTooltip","withFilterAtBottom","headCellData","cellLabel","DefaultHeadCellRenderer","getRelationTypes","rel","uniq","getAttrPathFromColumnId","split","getNestedPathByColumnId","columnId","startsWith","attrPath","getBasicTableColumnsData","columnData","sortable","resizable","nestedPath","headCellRenderer","HeadCellRenderer","rowCellValueRenderer","EntityProfileRenderer","DefaultCellValueRenderer","EditButtons","Edit","Delete","propTypes","PropTypes","RelationsTableViewStateContext","tableContainer","fontFamily","columnsData","basicTableRef","hoverRowIndex","setHoverRowIndex","onFilter","onSort","filters","tableRowsData","reduce","acc","assoc","getOvAttributeValuesByPath","getRelationAttributeValues","getRowValueByColumnId","getBasicTableRowsData","tableColumnsData","isNew","renderRowCell","handleOnRowHover","rowIndex","hoveredRowRightContent","BasicTable","autosizing","rowsData","hoverStateEnabled","defaultColumnWidth","defaultColumnMinWidth","headRowHeight","onRowHover","hoveredRowRightContentWrapper","hoveredRowRightContentContainer","resizeDebounceDelay","onShowInactiveChange","MoreVertIcon","onToggleFilters","allColumnsData","visibleColumns","onChangeColumns","onChangeShowInactive","enabled","ColumnsSettings","selectedColumns","oneLine","relationAvatar","SkeletonCellRenderer","columnIndex","isFirstColumn","RelationsTableSkeleton","TableSkeleton","RowCellRenderer","addArea","skeletonContainer","oneLineSkeleton","relationAvatarSkeleton","relationLabelSkeleton","RelationsTableView","setRowsPerPage","featuresContext","FeaturesContext","showDescription","features","visibleColumnsData","filtersClause","buildColumnsFilter","openedRelations","canDelete","useConfigPermissions","canEditRelations","canRemoveRelations","onChangeRowsPerPage","CHANGE_SEARCH_QUERY","CHANGE_SHOW_INACTIVE","actions","basicTableViewState","createStandardAction","changeShowInactive","reducer","action","payload","ROWS_PER_PAGE_OPTIONS","DEFAULT_COLUMNS_DATA","dataTypeDefinition","DataTypes","hideable","ActivenessAttrTypes","getColumnIdFromAttrUri","attributeUriToSearchUri","getColumnsDataFromRelationAttributes","attr","getAttrDataTypeDefinition","uniqBy","getColumnsData","relationTypes","chain","getReadableAttributesList","DEFAULT_COLUMNS_TO_SHOW","DEFAULT_SORT_FIELD","TableAttributeContext","headLabel","blobWrapper","overflowY","overflowX","defaultWrapper","updateAttribute","historyPalettes","HistoryOperations","insertAttribute","deleteAttribute","historyClassName","onScroll","stopPropagation","simpleValue","appearance","HistoryDiffContext","getHistoryAppearanceByUri","getHistoryAttributeClassName","dataTypeValue","DataTypeValue","getColumnsDataFromAttributeNode","attrNode","parents","reject","childNode","isAttributeSearchUri","actionButtons","AttributeEditing","onCancel","onApply","hasChanges","shouldConnectAllModifiedEntities","isReference","getReferencedEntityUriFromAttrValue","allModifiedEntities","expanded","isMissedTypeError","ErrorType","findAttributeValueByError","curry","either","areOneHierarchyUris","editor","isError","checkIsAttributeTypeError","highlightedAttributeError","isPartOfErrorAttributeTypeUri","isPartOfErrorParentUri","editingValues","modifiedValues","onStartEditing","onReset","checkHasChanges","hasConfigToCreate","shouldOpenInvalidEditors","listenToActions","useActionsHook","missedAttributeError","both","forEach","stopListeningActions","useExpandAttributes","withTableContext","deletedUris","Boolean","onEdit","onRemove","getOvAttributeValuesByPathWithUri","getAttributeValues","checkIsEditableMode","hideRightContent","checkCanDeleteAttribute","isReltioCrosswalk","canEdit","checkCanEditAttribute","checkCanEdit","handleEditAttribute","handleRemoveAttribute","attribute","context","header","TableAttributeView","isAttributeValueEmpty","newAttributeUri","setNewAttributeUri","originalValues","setOriginalValues","actualValues","not","refEntity","isEmptyEntity","newAttribute","createDefaultValues","attributeTypes","getEditableAttributeTypeSubAttributes","prev","editingValueOriginal","attributeItem","without","validate","tempEntitiesMap","validateComplexAttribute","evaluateErrorPath","getSingleAttributeEntity","original","useEditableAttribute","preparedValues","item","showTable","hidden","showToolbar","hidePageSelectorWhenSmall","treeContainer","tree","buttonsContainer","linearIndicator","ConfigContext","onImageLoadFail","src","DEFAULT_ICON","Node","node","nodeId","absoluteImagePath","popperAnchor","setPopperAnchor","isSelected","entityTypeGraphIcon","getPropWithInheritance","getAbsoluteImageUrl","alt","onError","HierarchyNodeTitle","HierarchyViewSkeleton","_extends","assign","arguments","source","prototype","hasOwnProperty","call","apply","this","viewBox","version","xmlns","xmlnsXlink","d","stroke","strokeWidth","fill","fillRule","xlinkHref","fillOpacity","mask","opacity","HierarchyViewHeader","onScrollToCurrentEntity","onGraphOpen","isGraphView","showNavigateToGraph","showForDisabled","ShowGraphIcon","SelectNodeIcon","lineBlock","lineChildren","bottom","treeTheme","rootIndex","verticalLine","horizontalLineRight","textAlign","rootNode","longRootNode","nodeContent","nodeRootLongContent","rowContents","borderLeft","verticalAlign","buttonWrapper","collapsedButton","expandedButton","borderRight","rowTitle","nodeContentRenderer","scaffoldBlockPxWidth","toggleChildrenVisibility","treeIndex","nodeTitle","showToggleChildrenButton","treeNodeRenderer","lowerSiblingCounts","scaffoldBlockCount","scaffold","lowerSiblingCount","push","shift","scaffoldWidth","nodeStyle","rowHeight","slideRegionSize","getNodeKey","getCacheKey","nodeCounter","generateId","processResponse","fakeRoot","parentPaths","nextRoot","j","nextParent","entities","isRoot","ROOTS_PER_PAGE_OPTIONS","textField","spacing","panel","treeWrapper","checkedNode","editorNode","visibility","join","NodeRendererDefault","Component","render","connectDragPreview","connectDragSource","isDragging","canDrop","canDrag","subtitle","draggedNode","isSearchMatch","isSearchFocus","buttons","didDrop","treeId","isOver","parentNode","rowDirection","nodeSubtitle","rowDirectionClass","handle","Array","_","DragIndicator","dropEffect","isDraggedDescendant","ReactSortableTreeUtils","isLandingPadActive","cycled","pending","btn","offsetX","offsetY","defaultProps","TreeThemeContext","createContext","generateTreeNodeProps","TreeNode","listIndex","swapFrom","swapLength","swapDepth","connectDropTarget","getPrevRow","lineClass","highlightLineClass","MIN_NODE_CONTENT_WIDTH","treeNodeProps","treeNodeClassName","Children","child","cloneElement","contextType","GenericNodeType","showParents","HierarchyNodeType","EntityType","RelationType","parent","directParentUri","ActivenessDateType","TreeType","graphTypes","activenessDate","scrollTo","MeasuredNode","measure","registerChild","NodeRenderer","scrollToContainerElementByNodeId","scrollingContainer","document","querySelector","getElementByNodeId","elementRect","getBoundingClientRect","scrollingContainerRect","scrollLeft","setTimeout","DefaultNodeRenderer","hierarchyTheme","Tree","scrollToNode","onRequestChildren","onNodeMoved","inlineRoot","treeData","rootChildren","virtualizedListRef","treeDataRef","scrollTimerRef","getVirtualizedListInstance","measurerCache","keyMapper","rawIndex","nodeInfo","propOr","CellMeasurerCache","fixedWidth","defaultHeight","onWindowResize","clearAll","window","addEventListener","removeEventListener","useRefreshableMeasurerCache","useRunOnceAfterValueInitialization","vList","forceUpdateGrid","getScrollingContainer","results","searchFocusOffset","searchMethod","scrollToRow","clearTimeout","onSortableTreeChange","nodeRenderWithMeasure","cache","getMeasuredNode","generateNodeProps","rowInfo","previousTreeData","usePrevious","onMoveNode","movedNodeInfo","prevPath","nextParentNode","prevParentNode","parentPath","result","handleOnLazyLoadChildren","handleResize","skipOnMount","handleWidth","onResize","ReactSortableTree","isVirtualized","reactVirtualizedListProps","scrollToAlignment","onLazyLoadChildren","useCommonStyles","loadingSpinner","LoadingNode","commonStyles","LoadingSpinner","avatarWithMultiParent","number","multiParentIcon","actionsBlock","actionsBlockWithOpenMenu","actionsBlockForCheckedNode","regularNodeCheckbox","strokeOpacity","cx","cy","r","loadingNode","MultiParentBlockItem","multiParent","border","borderBottomColor","borderWidth","additionalParents","details","detailLine","detail","wordWrap","textIndent","detailLabel","detailValue","prepareTree","sortField","mapTree","childrenProcessing","sortTreeChildren","typesLabelsMap","createRelationTypesLabelsMap","nodeProcessing","formatNodeFromTreeResponse","addSelfRelatedNode","expandNode","buildEntitiesMapFromTree","getGraphType","convertParentProp","getNodeUri","getRelationsProp","getRelationProp","isArray","parentIndex","findIndex","directParent","formatted","formatNodeFromHopResponse","traversedRelations","untraversedRelations","formattedNode","complement","clearNodeForEntityMap","buildEntitiesMapFromHopsEntities","keys","processHopsResponse","isReversed","childObjectKey","objectURI","buildEntitiesMapFromHops","json","createNewTreeNode","generateNewRelationUri","treeActions","loadChildren","parentId","signal","getState","childrenLoading","getHops","rawSubTree","queue","visitedNodes","breakCycles","buildTreeFromHops","entitiesSubMap","childrenLoaded","entitiesMappingLoaded","isAbortError","cancelChildrenLoading","showCurrentEntity","currentEntityShownInTree","resetScrollToNode","hasEntityTypesWithSecondaryLabelPattern","getAllEntityTypesForGraphType","any","isRelationLoaded","isNodeChecked","checkedNodes","isEditorNode","hasEditorNode","loadRelationDetails","currentRelation","resolve","getRelation","relationDetails","detailedRelation","treeNodeChanged","hasLoadingNode","getShowSecondaryLabelValue","showSecondaryLabel","getRelationDetails","ACTIVENESS_ATTR_TYPES","RelationDetails","relationshipData","typeName","attrType","gutterBottom","MetadataType","editButton","ActionsBlock","onToggleRelationDetails","onMenuOpen","onMenuClose","onAddParent","onAddChild","onDelete","AddCircleIcon","getGraphConfig","getReverseRelationsConfig","getGraphTypeConfig","getValidatedSortOrderFromConfig","getValidatedSortOrder","getValidatedSortFieldFromConfig","getValidatedSortField","getIsSecondaryLabelEnabledFromConfig","getTypeGraphIcon","entityTypeUri","canEditNode","canAddRelative","isChild","nodeEntityTypeUri","graphTypeUri","graphType","relationTypeUris","getRelationshipTypeUrisFromGraphType","isNodeEntityInstanceOf","isInHierarchy","__","checkMetadataForCreate","getStartObjectTypeUri","getEndObjectTypeUri","canAddParentForNode","canAddChildForNode","canDeleteNode","simpleNodePropsMapping","onParentsRequested","isSelectedNode","isEditable","commonActionHandlers","onToggleShowParents","needLoadAdditionalParents","actionHandlers","treeNodeEditingStarted","nodeStartEditing","treeNodeNewParentEditingStarted","newNode","treeNodeNewChildEditingStarted","store","nodeStartAddingChild","treeRelationRemoved","treeNodeRemoved","updatedNode","toggleRelationDetails","getAdditionalParents","mapEntry","NodeContext","onToggleNodeCheckbox","canSelect","RegularNode","PageRequestsAbortingContext","nodePropsMapping","setShowControls","showActionsBlock","hideActionsBlock","openActionsMenu","setOpenActionsMenu","showActionsMenu","hideActionsMenu","hasMultiParents","toggleShowParents","bind","event","onMouseEnter","onMouseLeave","fromEditorValue","option","toEditorValue","relationsTypesOptions","NodeRelationTypeSelector","labelsMap","getDirectionalLabel","getDirectionalLabelFromObject","tap","byLabel","ascend","getEntityTypeWithInheritedIcon","typeIcon","startObject","endObject","directionalLabel","typeLabel","objectTypeURI","getRelationTypesOptions","RelationTypeSelector","RelationTypeType","isAvailableRelationForRelatedEntity","relatedEntity","isRelatedEntityInstanceOf","getObjectUri","editorContainer","dense","EditorNode","editingMode","initialConnection","isAddingParent","NODE_EDITING_MODES","getHierarchyNodeEditorActiveError","allErrors","relationTypeUri","globalSearchRequestOptions","allAvailableRelationTypes","allPass","getAllAvailableRelationTypes","availableRelationTypes","isAvailableRelationBetweenEntities","availableEntityTypeUris","getSuitableEntityTypeUrisForRelationTypes","onRelationTypeChange","treeNodeRelationTypeChanged","onChangeEntity","treeNodeEntityChanged","relationAttrTypes","selectorCompatibleEntity","validateHierarchyConnection","treeNodeNewParentEditingCanceled","treeNodeNewChildEditingCanceled","treeNodeEditingCanceled","nodeCancelEditing","dataAction","treeRelationCreated","treeRelationChanged","getPayloadForNodeApplyEditing","treeNodeNewParentEditingApplied","treeNodeNewChildEditingApplied","treeNodeEditingApplied","treeAppearanceChangeActionCreator","nodeApplyEditing","canApply","getErrorMessage","isErrorHighlighted","handleHeight","ErrorWrapper","EntitySelector","entityTypesUris","attributeTypesSelectionStrategy","relationEditorAttributeTypesSelectionStrategy","NodeTypes","getNodeType","T","HierarchyPanel","onChildrenRequested","onTreeChanged","onTreeScroll","nodeContextValue","treeThemeContextValue","relatedNode","SelectorWithOnlyOptionAutoSelect","handleChange","date","DateEditor","slotProps","popupHorizontalPadding","FormControlLabelWithTooltip","withTooltip","SORTING_OPTIONS","TREE_SORT_FIELD_VALUES","FilterSortButton","hasSecondaryLabelPattern","onShowSecondaryLabelChange","TREE_SORT_ORDER_VALUES","viewOptionsTitle","newSortField","textContainer","separator","Breadcrumbs","items","expandText","li","href","Link","underline","BreadcrumbsType","fieldsToSave","getStateToSave","anyPass","filtersBar","filterSortButton","breadcrumbs","graphTypeSelector","HierarchyTreeToolbar","onChangeGraphType","showPath","isSecondaryLabelEnabled","showSecondaryLabelValue","nodePath","getPathByEntityUri","savePreferences","debounce","trees","treesStateSaved","saveTreesPreferences","onTreeSort","scrollToTreeTop","onTreeActivenessDateChange","hierarchyViewContainer","view","HierarchyTreeView","graph","graphConfig","_showNavigateToGraph","initialActivenessDate","now","defaultGraphType","currentGraphType","setCurrentGraphType","setCheckedNodes","timerRef","isCurrentReversed","currentGraphTypes","previousActivenessDate","showCurrentEntityDelayed","hasRoot","updatedTrees","updateTreesWithNewEntity","treeChanged","updatedTime","createTreeLoadedEvent","treeLoaded","treeProcessing","hasEntityInTree","treeLoading","getTree","treeLoadedWithError","useTreeLoader","isTreeForCurrentEntityUri","useNewEntityTree","parentsProcessing","loadParents","newParent","JSON","stringify","openGraph","graphLayout","GraphLayout","bodyWrapper","CustomView","basicViewRef","dialogRef","showModal","setShowModal","defaultTooltip","html","visible","updatedTooltip","customStyles","popup","useAPI","innerHTML","from","childNodes","appendChild","Dialog","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","ProfilePotentialMatchesViewSkeleton","matchesContainer","footer","DEFAULT_OPTIONS","showTransitiveMatches","showInactiveEntities","DEFAULT_SORTING","Order","wrapView","withErrorBoundary","withDragHandle","WrappedStubView","WrappedProfileAttributesView","AttributesView","excludeUris","includeUris","attributesCount","pinnedAttributes","WrappedProfileSingleAttributeView","singleAttribute","setShowInactive","useSingleAttribute","WrappedProfileTableAttributeView","tableAttribute","getAttributeTypesTree","flatAttributeTreeNode","initialState","useReducer","requestFilters","mdmFilters","columnFilter","columnFilterToMdmFilter","buildMDMFilters","changePage","toggleSort","changeFilter","toggleFilters","changeColumns","useActions","useTableAttribute","WrappedProfileRelationsView","parsedConfig","parseRelationsConfig","relationsState","append","setSortOrder","setSortOption","useRelationsState","WrappedCustomView","WrappedHierarchyPathView","setTreeData","graphUri","setErrorMessage","pagedData","setPagedData","forest","newTrees","getPathsTree","useLoadPaths","getRowHeight","clearHeightsCache","heightsCache","setHeightsCache","prevCache","useDynamicNodesHeights","refreshMode","refreshRate","labelRowsPerPage","WrappedProfilePotentialMatchesView","turnOnDisableSpinner","turnOffDisableSpinner","matches","loadMatches","useMatchesLoader","onStartLoading","onFinishLoading","onFinishMatchAction","openPotentialMatchPerspective","perspectiveId","getPotentialMatchesObjectIdsForCollaboration","getEntityUriFromMatchObject","WrappedHierarchyTreeView","WrappedRelationshipsTableView","sortColumn","changeRowsPerPage","subtract","useRelationsTableState","WrappedEntityMapView","isFullscreen","onToggleFullscreen","mapKey","markers","setMarkers","useMarkers","loadingElement","defaultCenter","lat","lng","mapOptions","mapTypeControl","FullscreenExitIcon","FullscreenIcon","ReltioMap","defaultZoom","mapContainerClassName","WrappedImageAttributeView","entityValues","ImageAttributesLine","ViewsFactory","ViewTypes","ProfileViewTypes","getComponentBy","propName","HierarchyTree","HierarchyPaths","RelationsTable","Relations","Attributes","SingleAttribute","AttributeTable","Map","Custom","ImageAttribute","PotentialMatches","getComponent","Fallback","ViewComponent","isAutosize","Suspense","fallback","basicView","fixedSizeContainer","overflowContainer","omittingProps","ProfileLayoutItem","layoutItemConfig","views","ResizeComponent","AutosizeComponent","isCustomView","class","platform","CustomScriptPlatform","reltioClass","getViewTypeByClass","customView","DEFAULT_MIN_WIDTH","scrollWrapper","scrollableContent","scrollbarWidth","ProfileLayout","layout","frozen","layoutOptions","onLayoutChanged","scrollWrapperRef","offsetWidth","clientWidth","boundariesElement","popupBoundariesValue","priority","scrollTop","PopupBoundariesContext","ReltioGridLayout","LayoutItem","draggableHandle","isStatic","closeIcon","snackbar","flexWrap","Notification","notification","autoCloseInterval","autoHideDuration","setAction","setShow","closeSnackbar","_e","reason","mdmModuleUi","cancelAction","onConfirm","applyAction","needConfirmation","CloseIcon","Portal","body","Snackbar","confirmationText","confirmationDescription","Notifications","notifications","n","editingButtons","searchResults","comments","menuButton","cancelButton","SuggestIcon","SvgIcon","CopyIcon","filterGroupByPermissions","group","isTempEntity","isWorkflowEnabled","canStartProcessInstanceSearchQuery","permission","isSuggestMode","checkMetadataPermission","PerspectiveProfileBand","profileBandConfig","showMenu","profileOperation","isOperationSaving","Operation","isDisabledButtons","openCloneConfirmationDialog","setOpenCloneConfirmationDialog","onCloneDiscard","onClone","cloneAction","cloneActionProp","isRelationSuitableForEntityType","isRelationWithEntityType","modifiedRelationTypes","getRelationTypeUriFromAttrType","data","relationshipTypesToCopy","useCloneAction","OPTIONS_GROUP","CreateIcon","VisibilityIcon","BUTTONS_GROUP","confirm","shouldShowSelect","MetadataPermissions","hasOnlyReadPermission","accessibleOptionsGroup","accessibleButtonsGroup","handleSave","ProfileBand","mr","ProfileBandHistory","ProfileBandNavigation","ModeSwitcherSelect","optionsGroup","buttonsGroup","MenuItemRenderer","MultilineMenuItem","ActivePanel","RightSidePanel","active","tabs","headerProps","SidePanel","SidePanelContentHeader","itemWrapper","DBConnectorsList","dBConnectorSideViews","sideView","WorkflowButton","WorkflowTasksContext","Inbox","CollaborationButton","commentsMap","calcTotalCommentItems","CollaborationIcon","WorkflowList","tasks","task","WorkflowTaskCard","taskId","SidePanelEmptyState","showMoreLink","showMoreIcon","CollaborationList","getComments","pageToken","useCommentsEntitiesMap","objectId","commentId","CollaborationItem","KeyboardArrowDown","getSecondTitle","profileContainer","ProfilePerspectiveResizablePanes","hideHistory","defaultTab","isWorkflowSideViewEnabled","isCollaborationSideViewEnabled","isDBConnectorSideViewEnabled","isCollaborationEnabled","Collaboration","historyEvent","workflowTasksContext","collaborationContext","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","historyButtonId","History","historyFilter","onApplyFilter","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","enabledWorkflowButton","enabledCollaborationButton","collaborationTotal","Workflow","mainTitle","secondTitle","rightContent","AddWorkflowButton","HistoryIcon","HistoryView","contributorsUris","HistoryPanelEmptyState","HistoryHeader","DBConnector","ConnectorsIcon","useProfileRightSidePanelElements","ProfileResizablePanes","buttonsProps","emptyState","typography","fontWeightRegular","loadingWrapper","errorWrapper","successWrapper","success","indicatorIcon","link","pxToRem","BackgroundUpdateStatus","CloseIconButton","ProcessLoading","ProcessSuccess","onRefresh","ProcessError","BackgroundProcessIndicator","status","checkEntityTypeInList","entityTypeList","isEntityTypeInBackgroundProcess","perspectiveView","default","profileWrapper","ProfilePerspectiveView","saveState","getSavedState","profileBand","workflow","isHistoryActive","keywordValue","historyDiff","useHistoryDiff","workflowTasks","workflowConfig","commonWorkflowTasks","useCommonWorkflowTasks","defaultActionSuccessHandler","useWorkflowDefaultActionSuccessHandler","onActionSuccess","useWorkflowTasks","isEmptyState","useEntityLoadingIndication","entityUpdatedTime","onRefreshProfile","onCloseBackgroundProcessIndicator","cancelUpdateProcess","isOpenBackgroundProcessIndicator","backgroundUpdateStatus","autoUpdateInReadMode","entityTypes","entityTypesForUpdate","needBackgroundProcess","isAutoUpdated","timerId","setIsOpenBackgroundProcessIndicator","setBackgroundUpdateStatus","backgroundUpdateDelay","getUpdatedTime","numberOfRetry","getEntityUpdatedTime","runBackgroundUpdate","NUMBER_OF_RETRY","useBackgroundProcessIndicator","getProfileObjectIdsForCollaboration","emptyCollaboration","collaboration","useCollaboration","isLoaded","isLayoutLoaded","onLayoutReset","onResetUndo","handleLayoutChange","profileConfig","setLayout","setViews","canRead","validatedViews","validatedLayout","removeUnsupportedLayoutItems","configHash","hash","nestedRoute","savedStateKey","getSavedStateAndFix","debouncedSaveState","savedState","updateSavedState","useSavedStateForEntityType","tempConfig","handleResetUndo","handleLayoutReset","fixedViews","fixedLayout","fixNonUniqViewsIds","isConfigChanged","useProfileLayout","useHistorySlice","isValidateReadMode","isDTEntity","profileViews","hasProfileViews","needDispatch","useProfileValidation","sidePanelViews","hideLayout","renderEmptyState","SnackbarRenderer","resetLayout","useLayoutResetter","ProfilePerspectiveViewContext","SearchValueContext","AttributesErrorsPanel","attributesWithErrors","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","seed","userPreferencesComparator","newState","sortLayoutItems","x","y","prepareState","looseEquals","qxSandboxApi","getSavedStatePromisified","promisifyCallback","showSnackbarMessage","useSnackbar","processedConfig","convertOldProfileConfig","SnackbarContext","S","SandboxAPIContext","StylesProvider","LocalizationProvider","dateAdapter","AdapterMoment","floor","ErrorPopup","showErrorFromStore","titleContainer","totalNumber","TagListHeader","switchToProfile","ArrowForwardIosRounded","Spacer","TagProfileBand","Toolbar","tagsContainer","tagsView","listContainer","entitiesList","TagPerspectiveView","tag","safeRequestTotalPromise","safeRequestEntitiesPromise","setTotal","setEntities","requestEntities","requestTotal","getDataTenantFromEntityUri","fieldName","isDT","getEntities","requestOptions","select","getFilteredEntitiesFromDataTenant","enrichEntityWithDataTenant","getFilteredEntities","getTotalFromDataTenant","getTotals","useTagsProvider","useTag","refScrollBlock","hasPagination","ProfilesList","actionsWrapper","DCRProfileBand","entityTask","objectURIs","getEntityUriFromDCRUri","TaskActionButtons","perspectiveContainer","attributesWrapper","contentWrapper","processTypes","DCRReviewPerspectiveView","actionSuccessHandler","point"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"5201.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/ProfileLayoutItemHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItemHeader/ProfileLayoutItemHeader.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/ProfileLayoutItemNoData/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItemNoData/ProfileLayoutItemNoData.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/SingleAttributeViewSkeleton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeViewSkeleton/SingleAttributeViewSkeleton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItemContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItemContent/ProfileLayoutItemContent.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/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/RatingsPopup/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RatingsPopup/RatingsPopup.tsx","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/RelationsContentSkeleton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsContentSkeleton/RelationsContentSkeleton.tsx","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/ProfileRelationsTableView/components/AddRelationButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/AddRelationButton/AddRelationButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/cell-renderers/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/cell-renderers/RowCellRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/cell-renderers/EntityProfileRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/cell-renderers/HeadCellRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/helpers/relations.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/helpers/dataHelpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/EditButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/contexts/RelationsTableViewStateContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/RelationsTable.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTable/helpers/buttonsHelper.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTableHeader/MoreButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTableHeader/MoreButton/MoreButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTableHeader/RelationsTableHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTableSkeleton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTableSkeleton/RelationsTableSkeleton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTableView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/components/RelationsTableView/RelationsTableView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/hooks/reducer.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/helpers/tableHelpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/hooks/useRelationsTableState.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/hooks/useTableAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTableHeader/AttributeTableHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/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/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/TableAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/TableAttributeView.tsx","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/HierarchyViewSkeleton/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyViewSkeleton/HierarchyViewSkeleton.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyViewHeader/icons/SelectNode.svg","webpack://@reltio/remotes/../profile/src/components/HierarchyViewHeader/icons/ShowGraph.svg","webpack://@reltio/remotes/../profile/src/components/HierarchyViewHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyViewHeader/HierarchyViewHeader.tsx","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/helpers.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/hooks/useDynamicNodesHeights.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/hooks/useLoadPaths.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/HierarchyPathsView.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/HierarchyPanel/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/theme/utils.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/theme/node-content-renderer.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/treeThemeContext.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/theme/tree-node-renderer.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/theme/index.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/constants/prop-types.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/measureHelpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/nodeHelpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Tree/Tree.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/commonStyles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/LoadingNode/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/LoadingNode/LoadingNode.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/RegularNode/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/RegularNode/multiParentOverlap.svg","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/MultiParentBlockItem/parentIcon.svg","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/MultiParentBlockItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/MultiParentBlockItem/MultiParentBlockItem.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/MultiParentBlock/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/MultiParentBlock/MultiParentBlock.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/RelationDetails/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/generateId.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/treeDataProvider.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/treeHelpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/nodeHelpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/RelationDetails/RelationDetails.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/ActionsBlock/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/ActionsBlock/ActionsBlock.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/configHelpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/RegularNode/helpers/nodeMappingHelpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/nodeContext.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/RegularNode/RegularNode.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/components/NodeRelationTypeSelector/NodeRelationTypeSelector.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/EditorNode/helpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/EditorNode/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/EditorNode/EditorNode.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/NodesFactory.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Node/Node.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/HierarchyPanel/HierarchyPanel.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/GraphTypeSelector/GraphTypeSelector.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/ActivenessDateControl/ActivenessDateControl.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/FilterSortButton/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/FilterSortButton/FilterSortButton.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Breadcrumbs/styles.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/Breadcrumbs/Breadcrumbs.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/saveStateHelpers.js","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/HierarchyTreeToolbar/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/components/HierarchyTreeToolbar/HierarchyTreeToolbar.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/useTreeLoader.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/helpers/useNewEntityTree.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyTreeView/HierarchyTreeView.tsx","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/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/ProfilePotentialMatchesViewSkeleton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/ProfilePotentialMatchesViewSkeleton/ProfilePotentialMatchesViewSkeleton.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/helpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/ProfileRelationsView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useRelationsState.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsTableView/ProfileRelationsTableView.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/PerspectiveProfileBand.tsx","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/hooks/useCloneAction.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/RightSidePanel.tsx","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/components/WorkflowButton/WorkflowButton.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/icons/ConnectorsIcon.svg","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/components/WorkflowPanelEmptyState/WorkflowPanelEmptyState.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/CollaborationPanelEmptyState/CollaborationPanelEmptyState.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/hooks/useProfileRightSidePanelElements.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveResizablePanes/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveResizablePanes/ProfilePerspectiveResizablePanes.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/hooks/useProfileLayout.ts","webpack://@reltio/remotes/../profile/src/components/BackgroundProcessIndicator/styles.ts","webpack://@reltio/remotes/../profile/src/components/BackgroundProcessIndicator/BackgroundProcessIndicator.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/hooks/useBackgroundProcessIndicator.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/ProfilePerspectiveView/hooks/useWorkflowTasks.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/hooks/data/backgroundUpdateDalay.ts","webpack://@reltio/remotes/../profile/src/components/hooks/useProfileValidation.ts","webpack://@reltio/remotes/../profile/src/perspectives/helpers.ts","webpack://@reltio/remotes/../profile/src/perspectives/ProfilePerspective.tsx","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/hooks/useWorkflowTasks.ts","webpack://@reltio/remotes/../profile/src/components/DCRReviewPerspectiveView/styles.ts","webpack://@reltio/remotes/../profile/src/components/DCRReviewPerspectiveView/DCRReviewPerspectiveView.tsx","webpack://@reltio/remotes/../profile/src/perspectives/DCRReviewPerspective.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 '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n triggerButton: {\n minWidth: 0,\n color: 'rgba(0,0,0,0.54)'\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 from '@mui/material/Popover';\nimport IconButton from '@mui/material/IconButton';\nimport FilterIcon from '@mui/icons-material/FilterList';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\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 [isOpen, setIsOpen] = useState(false);\n const {showInactive, toggleShowInactive} = useContext(SingleAttributeContext);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n return (\n <>\n <IconButton\n ref={buttonRef}\n data-reltio-id=\"reltio-filter-button\"\n classes={{root: classnames(styles.triggerButton, className)}}\n onClick={togglePopup}\n >\n <FilterIcon />\n </IconButton>\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 '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n padding: '0px 0px 0px 16px'\n },\n rightMenuItems: {\n display: 'flex',\n flex: '1 1 auto',\n justifyContent: 'flex-end',\n alignItems: 'center',\n paddingRight: '8px',\n marginLeft: '8px'\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}));\n","import React from 'react';\nimport Typography from '@mui/material/Typography';\nimport {DescriptionIcon, FacetViewHeader, HideOnShrink, RequiredMark, VerticalDivider} from '@reltio/components';\nimport {useStyles} from './styles';\n\ntype Props = {\n title: string;\n description?: string;\n totalText?: string;\n children?: React.ReactNode;\n extra?: React.ReactNode;\n isRequired?: boolean;\n};\n\nexport const ProfileLayoutItemHeader = ({title, description, extra, children, totalText, isRequired}: Props) => {\n const styles = useStyles();\n return (\n <FacetViewHeader title={title} className={styles.root}>\n {isRequired && <RequiredMark />}\n <DescriptionIcon description={description} />\n {totalText && (\n <HideOnShrink widthToHide={400}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {totalText}\n </Typography>\n </HideOnShrink>\n )}\n {extra}\n <div className={styles.rightMenuItems}>{children}</div>\n </FacetViewHeader>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n ovIcon: {\n marginLeft: '5px'\n }\n}));\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {ExpandableSearchInput, OvIcon} from '@reltio/components';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport FilterButton from '../FilterButton/FilterButton';\nimport {ProfileLayoutItemHeader} from '../../../ProfileLayoutItemHeader/ProfileLayoutItemHeader';\n\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 isRequired = isEditableMode && attributeType?.required;\n const totalText =\n totalVisibleValues === 1\n ? i18n.text('${count} item', {count: totalVisibleValues})\n : i18n.text('${count} items', {count: totalVisibleValues});\n return (\n <ProfileLayoutItemHeader\n title={caption}\n totalText={totalText}\n description={attributeType?.description}\n isRequired={isRequired}\n extra={\n <OvIcon\n nonOvTotal={totalNonVisibleValues}\n className={styles.ovIcon}\n nonOvValues={nonVisibleValues}\n attributeType={attributeType}\n />\n }\n >\n <ExpandableSearchInput query={searchQuery} onChange={handleChangeSearchQuery} />\n {showInactiveValuesMenu && <FilterButton />}\n </ProfileLayoutItemHeader>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n noData: {\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport Typography from '@mui/material/Typography';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n text?: string;\n};\n\nexport const ProfileLayoutItemNoData = ({className, text}: Props) => {\n const styles = useStyles();\n return (\n <Typography className={classnames(styles.noData, className)}>{text || i18n.text('No data found')}</Typography>\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} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n messagesContainer: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start'\n },\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px',\n marginLeft: '-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 borderColor: 'rgba(0,0,0,0.12)'\n },\n ovFalse: theme.inactive,\n noData: {\n padding: '8px 0px'\n }\n}));\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {always, cond, isEmpty, map, pathOr, pipe, prop, propEq, omit} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport Button from '@mui/material/Button';\nimport AddIcon from '@mui/icons-material/Add';\nimport Divider from '@mui/material/Divider';\nimport {\n CardinalityMessage,\n EditableAttribute,\n ErrorMessage,\n isHighlightedErrorType,\n ScrollToElementContext,\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 AttributeError\n} from '@reltio/mdm-sdk';\nimport {ProfileLayoutItemNoData} from '../../../ProfileLayoutItemNoData/ProfileLayoutItemNoData';\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 ScrollToElementContext>;\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: omit(['defaultValue'], 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 createAttribute = (attributeType: AttributeType): AttributeItem => ({parentUri, attributeType});\n\n if (showEmpty && !isComplexAttribute(attributeType.type)) {\n const attributes = [createAttribute(omit(['defaultValue'], attributeType)), createAttribute(attributeType)];\n return onAddAttributes(attributes);\n }\n\n return onAddAttributes([createAttribute(attributeType)]);\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 <div className={styles.messagesContainer}>\n <CardinalityMessage cardinality={cardinality} />\n <ErrorMessage message={errorMessage} />\n </div>\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 isEmptyEditor={showEmpty}\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 && <ProfileLayoutItemNoData className={styles.noData} text={noDataText} />}\n </div>\n )\n );\n};\n\nexport default withContext(\n ScrollToElementContext,\n (contextValue, {parentUri, attributeType}) => {\n const {element, type} = contextValue || {};\n const isHighlighted =\n isHighlightedErrorType(type) &&\n isAttributeTypeError(element as AttributeError, parentUri, attributeType.uri);\n return {highlightedError: isHighlighted ? contextValue : null};\n },\n SingleAttributeEditableContent\n);\n","import {makeStyles} from '@mui/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 '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n content: {\n padding: '8px 16px',\n '& $label': {\n '&:nth-child(1)': {\n width: '60%'\n },\n '&:nth-child(2)': {\n width: '40%'\n }\n }\n },\n label: {\n fontSize: '1rem'\n }\n}));\n","import React from 'react';\nimport Skeleton from '@mui/material/Skeleton';\nimport {useStyles} from './styles';\n\nexport const SingleAttributeViewSkeleton = () => {\n const styles = useStyles();\n return (\n <div className={styles.content}>\n <Skeleton className={styles.label} />\n <Skeleton className={styles.label} />\n </div>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n container: {\n position: 'relative'\n },\n noData: {\n fontSize: '13px',\n padding: '8px 16px',\n color: 'rgba(0,0,0,0.54)'\n }\n}));\n","import React, {useEffect, useState} from 'react';\nimport classnames from 'classnames';\nimport {LinearLoadIndicator} from '@reltio/components';\nimport {ProfileLayoutItemNoData} from '../ProfileLayoutItemNoData/ProfileLayoutItemNoData';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n containerClassName?: string;\n isLoading?: boolean;\n isEmptyData?: boolean;\n noDataText?: string;\n skeleton?: React.ReactNode;\n toolbar?: React.ReactNode;\n pagination?: React.ReactNode;\n children: React.ReactNode;\n};\n\nconst useLoadedOnce = (isLoading: boolean) => {\n const [isStartedLoading, setIsStartedLoading] = useState(false);\n const [isLoadedOnce, setIsLoadedOnce] = useState(false);\n\n useEffect(() => {\n if (isLoading) {\n setIsStartedLoading(true);\n } else if (isStartedLoading) {\n setIsLoadedOnce(true);\n }\n }, [isLoading, isStartedLoading]);\n\n return isLoadedOnce || !isStartedLoading;\n};\n\nexport const ProfileLayoutItemContent = ({\n children,\n className,\n containerClassName,\n skeleton,\n toolbar,\n noDataText,\n isLoading = false,\n isEmptyData = false,\n pagination = null\n}: Props) => {\n const styles = useStyles();\n const isLoadedOnce = useLoadedOnce(isLoading);\n\n const renderContent = () => {\n if (!isLoadedOnce && skeleton && isLoading) {\n return skeleton;\n }\n if (isEmptyData) {\n return <ProfileLayoutItemNoData className={styles.noData} text={noDataText} />;\n }\n return <div className={className}>{children}</div>;\n };\n\n const shouldRenderToolbar = isLoadedOnce || !skeleton;\n const shouldRenderPagination = (isLoadedOnce || !skeleton) && !isEmptyData;\n\n return (\n <>\n <div className={classnames(styles.container, containerClassName)}>\n {isLoading && <LinearLoadIndicator />}\n {shouldRenderToolbar && toolbar}\n {renderContent()}\n </div>\n {shouldRenderPagination && pagination}\n </>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n padding: '8px 16px',\n overflow: 'hidden',\n flexGrow: 1\n },\n pagination: {\n flexGrow: 0,\n flexShrink: 0\n }\n}));\n","import React, {useContext} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport mdm from '@reltio/mdm-module';\nimport {PivotingAttribute, SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {BasicView, BasicTablePagination, PivotingAttributeContext} from '@reltio/components';\nimport {SingleAttributeHeader} from '../SingleAttributeHeader/SingleAttributeHeader';\nimport SingleAttributeEditableContent from '../SingleAttributeEditableContent/SingleAttributeEditableContent';\nimport {SingleAttributeReadableContent} from '../SingleAttributeReadableContent/SingleAttributeReadableContent';\nimport {SingleAttributeViewSkeleton} from '../SingleAttributeViewSkeleton/SingleAttributeViewSkeleton';\nimport {ProfileLayoutItemContent} from '../../../ProfileLayoutItemContent/ProfileLayoutItemContent';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\n\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, showInactiveValuesMenu} = config;\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 isEditableMode = useSelector(mdm.selectors.getIsEditableMode);\n const pivotingAttributes: PivotingAttribute[] = useSelector(mdm.selectors.getPivotingAttributes);\n\n const max = config.max || DEFAULT_ROWS_PER_PAGE;\n const hasValues = values.length !== 0;\n const noDataText = config['text-empty'];\n const isEmptyData = !attributeType || (!isEditableMode && !hasValues);\n const commonProps = {values, showInactive, attributeType};\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 <ProfileLayoutItemContent\n className={styles.content}\n noDataText={noDataText}\n isLoading={isLoading}\n skeleton={<SingleAttributeViewSkeleton />}\n pagination={\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 }\n isEmptyData={isEmptyData}\n >\n {isEditableMode ? (\n <SingleAttributeEditableContent\n {...commonProps}\n parentUri={entityUri}\n noDataText={noDataText}\n />\n ) : (\n <SingleAttributeReadableContent {...commonProps} />\n )}\n </ProfileLayoutItemContent>\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 Order,\n Entity,\n isAnalyticAttribute\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\nconst DEFAULT_ROWS_PER_PAGE = 15;\n\ntype Params = {\n filters?: SearchFilter[];\n searchQuery?: string;\n sorting?: {\n field: string;\n order: Order;\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} = config;\n const max = config.max || DEFAULT_ROWS_PER_PAGE;\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<AttributeValue[]>(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, searchQuery, ...rest} = params;\n\n const getRequest = (): Promise<Pick<Entity, 'attributes' | 'analyticsAttributes'>> => {\n const commonProps = {\n defaultMaxValues: max,\n attributeTypeUri: attributeUri,\n offset: max * page,\n searchQuery\n };\n\n if (isDataTenantEntity(entity) || isHistoryModeEnabled) {\n return getPagedLocalEntity({...commonProps, metadata, entity});\n }\n\n return getPagedEntity({\n ...commonProps,\n ...rest,\n tenant,\n apiPath,\n parentUri,\n options: showInactive ? '' : undefined,\n globalFilter\n });\n };\n\n safePromise(getRequest())\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 as GenericAttributeValue) || loadedValue;\n })\n );\n const paging = path(['paging', attributeUri], attributes);\n if (isAnalyticAttribute(attributeType) && paging && paging.totalValues) {\n paging.totalOvValues = paging.totalValues;\n }\n setPaging(paging);\n })\n .catch((error) => {\n console.warn(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} from '@mui/styles';\n\nconst popupHorizontalPadding = '23px';\n\nexport const useStyles = makeStyles((theme) => ({\n button: {\n color: theme.palette.text.secondary\n },\n popupContent: {\n padding: `19px ${popupHorizontalPadding}`\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n },\n divider: {\n borderColor: '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 from '@mui/material/Popover';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport FilterIcon from '@mui/icons-material/FilterList';\nimport IconButton from '@mui/material/IconButton';\nimport Divider from '@mui/material/Divider';\nimport Typography from '@mui/material/Typography';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport ArrowDownwardIcon from '@mui/icons-material/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 {showInactive, toggleShowInactive, sortOrder, toggleSortOrder, sortOption, changeSortOption, 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 <IconButton\n ref={buttonRef}\n data-reltio-id=\"reltio-filter-button\"\n classes={{\n root: classnames(styles.button, className)\n }}\n onClick={togglePopup}\n >\n <FilterIcon />\n </IconButton>\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 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 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 '@mui/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 '@mui/icons-material/CloudDownload';\nimport Badge from '@mui/material/Badge';\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 anchorOriginTopRightRectangular: 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 '@mui/icons-material/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 data-reltio-id=\"import-from-dt-button\"\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} from '@reltio/components';\nimport FilterButton from './FilterButton/FilterButton';\nimport {ImportFromDT} from './ImportFromDT/ImportFromDT';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {ProfileLayoutItemHeader} from '../../../ProfileLayoutItemHeader/ProfileLayoutItemHeader';\n\ntype Props = {\n title?: string;\n total?: number;\n};\n\nconst RelationsHeader = ({title, total}: Props) => {\n const {searchQuery, changeSearchQuery} = useContext(RelationsViewStateContext);\n\n const totalText =\n total === 1 ? i18n.text('${count} item', {count: total}) : i18n.text('${count} items', {count: total});\n return (\n <ProfileLayoutItemHeader title={title} totalText={totalText}>\n <ExpandableSearchInput query={searchQuery} onChange={changeSearchQuery} />\n <ImportFromDT />\n <FilterButton />\n </ProfileLayoutItemHeader>\n );\n};\n\nexport default RelationsHeader;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\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 from '@mui/material/CircularProgress';\nimport Tooltip from '@mui/material/Tooltip';\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 '@mui/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 '@mui/material/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 '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\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 from '@mui/material/Typography';\nimport EditIcon from '@mui/icons-material/Edit';\nimport DeleteIcon from '@mui/icons-material/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, ComplexInOutRelationItem} from '@reltio/mdm-sdk';\n\nconst getUri: (relation: string | ComplexInOutRelationItem) => string = 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 '@mui/styles';\n\nexport const useStyles = makeStyles({\n arrowIcon: {\n fontSize: '16px',\n marginRight: '6px'\n }\n});\n","import React from 'react';\nimport ArrowRightIcon from '@mui/icons-material/ArrowRight';\nimport ArrowDropDownIcon from '@mui/icons-material/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 '@mui/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 '@mui/styles';\n\nexport const useStyles = makeStyles({\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px',\n marginLeft: '12px'\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 borderColor: 'rgba(0,0,0,0.12)'\n },\n noData: {\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 from '@mui/material/Button';\nimport AddIcon from '@mui/icons-material/Add';\nimport Divider from '@mui/material/Divider';\nimport {\n Connection,\n isTempUri,\n Mode,\n createNewConnectionWithDefaultRelationType,\n checkNew,\n RelationsViewConfig,\n getRelationUriFromConnection,\n getEntityUriFromConnection\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 {ProfileLayoutItemNoData} from '../../../ProfileLayoutItemNoData/ProfileLayoutItemNoData';\n\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) => getRelationUriFromConnection(connection) === relationUri\n );\n const entityUri = 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 && <ProfileLayoutItemNoData className={styles.noData} text={noDataText} />}\n </div>\n );\n};\n\nexport default RelationsEditableContent;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((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 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 getRelationAttributesFromConnection\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 ...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 '@mui/icons-material/InfoRounded';\nimport InfoIcon from '@mui/icons-material/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 '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\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 alignItems: 'center'\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 sortRatingsByTime = (ratings: Rating[]) => {\n return [...ratings].sort((a, b) => {\n const timestampA = new Date(a.timestamp).getTime();\n const timestampB = new Date(b.timestamp).getTime();\n return timestampB - timestampA;\n });\n};\n\nexport const calcAverageRating = (ratings: Rating[]) => {\n const averageRating: number = pipe(pluck('value'), mean, defaultTo(0))(ratings);\n return averageRating.toFixed(1);\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 calcRatingsScale = (ratings: Rating[]) => {\n if (ratings.length === 0) {\n return {percentOfLikes: 0, percentOfDislikes: 0};\n }\n\n const percentOfLikes = (getCountOfLikes(ratings) / ratings.length) * 100;\n const formattedPercentOfLikes = parseFloat(Number(percentOfLikes).toFixed(1));\n const formattedPercentOfDislikes = parseFloat(Number(100 - formattedPercentOfLikes).toFixed(1));\n\n return {percentOfLikes: formattedPercentOfLikes, percentOfDislikes: formattedPercentOfDislikes};\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex',\n flexDirection: 'column',\n padding: 12,\n width: 355,\n gap: 12\n },\n info: {\n background: 'rgba(0, 0, 0, 0.05)',\n display: 'flex',\n padding: '6px 12px',\n fontSize: 13,\n gap: 16\n },\n axis: {\n position: 'relative',\n display: 'flex',\n justifyContent: 'space-between',\n fontSize: 12,\n color: theme.palette.text.secondary,\n paddingTop: 4,\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n background: theme.palette.divider,\n width: '1px',\n height: '4px'\n },\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n right: 0,\n background: theme.palette.divider,\n width: '1px',\n height: '4px'\n }\n },\n scaleHistory: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n title: {\n fontSize: 13,\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.text.secondary,\n gap: 8,\n '& .value': {\n color: theme.palette.text.primary\n },\n '& .boldValue': {\n color: theme.palette.text.primary,\n fontWeight: 700\n }\n },\n greenBadge: {\n width: 12,\n height: 12,\n background: 'rgb(151, 192, 97)'\n },\n redBadge: {\n width: 12,\n height: 12,\n background: 'rgb(255, 112, 112)'\n },\n scale: {\n width: '100%',\n height: 16,\n background: 'rgba(255, 112, 112)',\n '&.empty': {\n background: '#F9F9F9'\n }\n },\n scaleBar: {\n background: 'rgba(151,192,97)'\n },\n icon: {\n width: '14px',\n height: '14px',\n color: 'rgba(0,0,0,0.54)'\n },\n ratingsList: {\n borderTop: '1px solid #ccc',\n borderBottom: '1px solid #ccc',\n padding: '12px 0',\n maxHeight: 140,\n boxSizing: 'border-box',\n overflow: 'auto'\n },\n rating: {\n display: 'flex',\n padding: '4px 0px',\n alignItems: 'center'\n },\n avatar: {\n width: 24,\n height: 24,\n marginRight: 12,\n '& .icon': {\n fontSize: 18\n }\n },\n userInfo: {\n overflow: 'hidden'\n },\n user: {\n fontSize: 13,\n color: theme.palette.text.primary,\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n ratingDateWrapper: {\n display: 'flex',\n alignSelf: 'start',\n marginLeft: 'auto'\n },\n ratingDate: {\n fontSize: 10,\n color: theme.palette.text.secondary,\n marginRight: 4\n },\n sourcesWrapper: {\n display: 'flex',\n alignItems: 'center',\n gap: 4\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {Crosswalk, Rating} from '@reltio/mdm-sdk';\nimport {ColoredSourceIcon, PopupWithArrow} from '@reltio/components';\nimport PersonIcon from '@mui/icons-material/Person';\nimport ThumbUpIcon from '@mui/icons-material/ThumbUp';\nimport ThumbDownIcon from '@mui/icons-material/ThumbDown';\nimport Avatar from '@mui/material/Avatar';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport {\n calcAverageRating,\n calcRatingsScale,\n getCountOfDislikes,\n getCountOfLikes,\n sortRatingsByTime\n} from '../../../helpers/ratings';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n open: boolean;\n ratings: Rating[];\n crosswalks: Crosswalk[];\n className?: string;\n anchorEl: HTMLElement | null;\n onClose: () => void;\n};\n\nexport const RatingsPopup = ({ratings, crosswalks, open, anchorEl, onClose}: Props) => {\n const styles = useStyles();\n\n const sortedRatings = sortRatingsByTime(ratings);\n const {percentOfLikes, percentOfDislikes} = calcRatingsScale(ratings);\n const agreeCount = `${getCountOfLikes(ratings)} (${percentOfLikes}%)`;\n const disagreeCount = `${getCountOfDislikes(ratings)} (${percentOfDislikes}%)`;\n\n return (\n <PopupWithArrow open={open} anchorEl={anchorEl} onClose={onClose} placement=\"top-start\" transition>\n <div className={styles.wrapper}>\n <div className={styles.info}>\n <span className={styles.title}>\n {i18n.text('Score:')}\n <span className=\"boldValue\">{calcAverageRating(ratings)}</span>\n </span>\n <span className={styles.title}>\n {i18n.text('No. of responses:')}\n <span className=\"value\">{ratings.length}</span>\n </span>\n </div>\n <div>\n <LinearProgress\n variant=\"determinate\"\n value={percentOfLikes}\n classes={{bar: styles.scaleBar}}\n className={classnames(styles.scale, {empty: !ratings.length})}\n />\n <div className={styles.axis}>\n <span>0</span>\n <span>100%</span>\n </div>\n </div>\n <div className={styles.scaleHistory}>\n <span className={styles.title}>\n <div className={styles.greenBadge} />\n <ThumbUpIcon className={styles.icon} />\n {i18n.text('Agree:')}\n <span className=\"value\">{agreeCount}</span>\n </span>\n <span className={styles.title}>\n <div className={styles.redBadge} />\n <ThumbDownIcon className={styles.icon} />\n {i18n.text('Disagree:')}\n <span className=\"value\">{disagreeCount}</span>\n </span>\n </div>\n {!!sortedRatings.length && (\n <div className={styles.ratingsList} data-reltio-id=\"reltio-ratings-list\">\n {sortedRatings.map(({user, comment, timestamp, value}, i) => (\n <div key={i} className={styles.rating} data-reltio-id=\"reltio-rating-item\">\n <Avatar className={styles.avatar}>\n <PersonIcon className=\"icon\" />\n </Avatar>\n <div className={styles.userInfo}>\n <div className={styles.user}>{user}</div>\n <div className={styles.title}>{comment || i18n.text('No comment')}</div>\n </div>\n <div className={styles.ratingDateWrapper}>\n <span className={styles.ratingDate}>{i18n.date(timestamp, 'L LT')}</span>\n {value === 1 ? (\n <ThumbDownIcon className={styles.icon} data-reltio-id=\"reltio-dislike-icon\" />\n ) : (\n <ThumbUpIcon className={styles.icon} data-reltio-id=\"reltio-like-icon\" />\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n <div className={styles.sourcesWrapper}>\n <span className={styles.title}>{i18n.text('Sources:')}</span>\n {crosswalks.map((crosswalk, i) => (\n <ColoredSourceIcon key={i} crosswalk={crosswalk} />\n ))}\n </div>\n </div>\n </PopupWithArrow>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n width: 128,\n cursor: 'pointer'\n },\n averageRating: {\n marginBottom: 4,\n fontSize: '16px',\n letterSpacing: '0.15px',\n lineHeight: '24px',\n color: theme.palette.text.primary\n },\n counts: {\n display: 'flex',\n marginTop: 4,\n gap: 32\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: theme.palette.text.secondary\n },\n scale: {\n height: 3,\n width: '100%',\n background: 'rgba(255, 112, 112)',\n '&.empty': {\n background: '#F9F9F9'\n }\n },\n scaleBar: {\n background: 'rgba(151,192,97)'\n }\n}));\n","import React, {useRef, useState} from 'react';\nimport classnames from 'classnames';\nimport {Crosswalk, Rating} from '@reltio/mdm-sdk';\nimport Typography from '@mui/material/Typography';\nimport ThumbUpIcon from '@mui/icons-material/ThumbUp';\nimport ThumbDownIcon from '@mui/icons-material/ThumbDown';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport {RatingsPopup} from '../RatingsPopup/RatingsPopup';\nimport {calcAverageRating, calcRatingsScale, getCountOfDislikes, getCountOfLikes} from '../../../helpers/ratings';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n ratings: Rating[];\n crosswalks: Crosswalk[];\n className?: string;\n};\n\nexport const Ratings = ({ratings, crosswalks, className}: Props) => {\n const styles = useStyles();\n const ratingsRef = useRef();\n const [open, setOpen] = useState(false);\n const {percentOfLikes} = calcRatingsScale(ratings);\n\n return (\n <>\n <div\n data-reltio-id=\"reltio-ratings\"\n className={classnames(styles.wrapper, className)}\n ref={ratingsRef}\n onClick={() => setOpen(true)}\n >\n <Typography className={styles.averageRating}>{calcAverageRating(ratings)}</Typography>\n <LinearProgress\n variant=\"determinate\"\n value={percentOfLikes}\n classes={{bar: styles.scaleBar}}\n className={classnames(styles.scale, {empty: !ratings.length})}\n />\n <div className={styles.counts}>\n <div className={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 <RatingsPopup\n ratings={ratings}\n open={open}\n crosswalks={crosswalks}\n anchorEl={ratingsRef.current}\n onClose={() => setOpen(false)}\n />\n </>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex',\n marginLeft: -8,\n gap: 8\n },\n button: {\n minWidth: 0,\n padding: 8,\n fontSize: '14px',\n lineHeight: '16px',\n textTransform: 'none',\n color: theme.palette.text.secondary\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 from '@mui/material/Button';\nimport ArrowDropDownIcon from '@mui/icons-material/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, {\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 '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n padding: '3px 16px'\n },\n entityTypeIcon: {\n marginRight: '16px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '14px',\n lineHeight: '16px'\n },\n entityLabelContainer: {\n display: 'flex',\n wordBreak: 'break-all',\n textDecoration: 'none'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '14px',\n lineHeight: '16px'\n },\n ratings: {\n marginLeft: 'auto'\n },\n showDetailsButton: {\n marginLeft: '16px',\n marginTop: '8px'\n },\n relationAttributes: {\n paddingLeft: '60px'\n },\n suggestedWrapper: {\n padding: '6px 8px 6px 16px',\n backgroundColor: theme.suggested,\n minWidth: 'fit-content'\n },\n commentsContainer: {\n alignSelf: 'center',\n marginTop: '11px',\n '& + $ratings': {\n marginLeft: '16px'\n }\n },\n additionalButtonsWrapper: {\n marginLeft: 'auto',\n display: 'flex',\n alignItems: 'center'\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 from '@mui/material/Box';\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 showRating?: boolean;\n};\n\nexport const RelationComplexItem = ({\n connection,\n loadRelations,\n renderRelationArrowButton,\n acceptRelation,\n ignoreRelation,\n showRating\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 const crosswalks = relation?.object?.crosswalks || [];\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 && showRating && (\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 {showRating && (\n <Ratings ratings={ratings} crosswalks={crosswalks} className={styles.ratings} />\n )}\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, type} = 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 showRating={type === 'rating'}\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 '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n padding: '12px 16px',\n display: 'flex',\n flexDirection: 'column',\n '& $label': {\n '&:nth-child(1)': {\n width: '60%'\n },\n '&:nth-child(2)': {\n width: '40%'\n }\n }\n },\n icon: {\n flexShrink: 0,\n marginRight: '8px',\n width: 16,\n height: 16\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n '&:nth-child(2)': {\n marginTop: '4px'\n }\n },\n label: {\n fontSize: '1rem'\n }\n});\n","import React from 'react';\nimport Skeleton from '@mui/material/Skeleton';\nimport {useStyles} from './styles';\n\nexport const RelationsContentSkeleton = () => {\n const styles = useStyles();\n return (\n <div className={styles.container}>\n <div className={styles.row}>\n <Skeleton variant=\"circular\" className={styles.icon} />\n <Skeleton className={styles.label} />\n </div>\n <div className={styles.row}>\n <Skeleton variant=\"circular\" className={styles.icon} />\n <Skeleton className={styles.label} />\n </div>\n </div>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n list: {\n paddingTop: '8px',\n paddingBottom: '10px',\n overflow: 'auto',\n flexGrow: 1\n },\n content: {\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} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {BasicTablePagination} from '@reltio/components';\nimport {isEditableMode, Connection, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport RelationsEditableContent from '../RelationsEditableContent/RelationsEditableContent';\nimport RelationsList from '../RelationsList/RelationsList';\nimport {RelationsContentSkeleton} from '../RelationsContentSkeleton/RelationsContentSkeleton';\nimport {ProfileLayoutItemContent} from '../../../ProfileLayoutItemContent/ProfileLayoutItemContent';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\n\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 {page, setPage, rowsPerPage} = useContext(RelationsViewStateContext);\n\n const noDataText = config['text-empty'];\n const isEmptyData = !config.content || (!isEditableMode(mode) && total === 0);\n\n return (\n <ProfileLayoutItemContent\n className={styles.content}\n noDataText={noDataText}\n isEmptyData={isEmptyData}\n isLoading={isLoading}\n skeleton={<RelationsContentSkeleton />}\n pagination={\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 }\n >\n {isEditableMode(mode) ? (\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 <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 </ProfileLayoutItemContent>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0\n }\n});\n","import React, {useContext, useEffect, useMemo} from 'react';\nimport {pick} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {ActivityFilter, Connection, getEntitiesMapForConnections, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {\n BasicView,\n EntitiesMapContext,\n useRelationsLoader,\n EntityContext,\n useExpandInvalidRelations\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';\n\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, 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 useExpandInvalidRelations(config.id);\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 <RelationsContent\n isLoading={isLoading}\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n total={total}\n />\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 {makeStyles} from '@mui/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 marginBottom: '4px'\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 React from 'react';\nimport i18n from 'ui-i18n';\nimport AddIcon from '@mui/icons-material/Add';\nimport Button from '@mui/material/Button';\nimport {useStyles} from './styles';\n\ntype Props = {\n onClick: () => void;\n};\n\nconst AddRelationButton = ({onClick}: Props) => {\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\nexport default AddRelationButton;\n","import {makeStyles} from '@mui/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 width: '100%',\n fontSize: '12px',\n '&>div>span': {\n maxWidth: 'calc(100% + 22px)'\n }\n },\n entityCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%'\n },\n label: {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n headLabelWrapper: {\n display: 'flex',\n alignItems: 'center',\n minWidth: 0\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 '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 React from 'react';\nimport classnames from 'classnames';\nimport {checkRemoved, isActiveObject} from '@reltio/mdm-sdk';\nimport {RowCellRenderProps} from '../../../types/TableData';\nimport {useStyles} from './styles';\n\ntype Props = RowCellRenderProps & {isSorted: boolean};\n\nconst RowCellRenderer = ({cell, CellValueRenderer, rowValue: {connection}, isSorted, ...otherProps}: Props) => {\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\nexport default RowCellRenderer;\n","import React, {useContext} from 'react';\nimport {ui} from '@reltio/mdm-module';\nimport {useDispatch} from 'react-redux';\nimport {ConnectionEntity, TEntityType, getEntityUriForLink, getLabel} from '@reltio/mdm-sdk';\nimport {EntityTypeIcon, ExpandedValueTooltip, ViewIdContext} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n value: {\n entity: ConnectionEntity;\n entityType: TEntityType;\n };\n};\n\nconst EntityProfileRenderer = ({value: {entityType, entity}}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n\n const entityLabel = getLabel(entity.entityLabel);\n const preparedUri = getEntityUriForLink({uri: entity.entityUri, dataTenant: entity.dataTenant});\n\n const handleClick = () => {\n dispatch(ui.actions.openEntity({uri: preparedUri, viewId}));\n };\n\n return (\n <div className={styles.entityCell}>\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <ExpandedValueTooltip value={entityLabel}>\n <span className={styles.entityLabel} onClick={handleClick}>\n {entityLabel}\n </span>\n </ExpandedValueTooltip>\n </div>\n );\n};\n\nexport default EntityProfileRenderer;\n","import React from 'react';\nimport {withFilterAtBottom, DescriptionIcon, ExpandedValueTooltip} from '@reltio/components';\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {useStyles} from './styles';\n\nconst HeadCellRenderer = (props) => {\n const styles = useStyles();\n const {description, label} = props?.headCellData || {};\n const cellLabel = (\n <div className={styles.headLabelWrapper}>\n <ExpandedValueTooltip value={label}>\n <div className={styles.label}>{label}</div>\n </ExpandedValueTooltip>\n <DescriptionIcon description={description} />\n </div>\n );\n\n return (\n <div className={styles.headCell}>\n <DefaultHeadCellRenderer {...props} headCellData={{...props?.headCellData, label: cellLabel}} />\n </div>\n );\n};\n\nexport default withFilterAtBottom(HeadCellRenderer);\n","import {buildColumnsFilter} from '@reltio/components';\nimport {\n FilterBuilder,\n filterValueToQueryStringWithQuotes,\n Maybe,\n getReadableAttributesList,\n getOvAttributeValuesByPath\n} 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\nexport const getRelationsAttributesFromMetadata = ({content: {inRelations = [], outRelations = []}}, {relationTypes}) =>\n pipe(\n getRelationTypes,\n chain((relationType) => pipe(find(propEq('uri', relationType)), getReadableAttributesList)(relationTypes))\n )([...inRelations, ...outRelations]);\n\nexport const getRelationAttributeValues = (attrPath, relation) =>\n pipe(path(['object', 'attributes']), getOvAttributeValuesByPath(attrPath))(relation);\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 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 '../../../helpers/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\nexport const 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\nexport const getBasicTableColumnsData = map(getColumnDataByColumnId);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Tooltip from '@mui/material/Tooltip';\nimport IconButton from '@mui/material/IconButton';\nimport EditIcon from '@mui/icons-material/Edit';\nimport DeleteIcon from '@mui/icons-material/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} size=\"large\">\n <EditIcon />\n </IconButton>\n </Tooltip>\n )}\n {canRemove && (\n <Tooltip title={i18n.text('Remove')}>\n <IconButton onClick={handleRemoveRelation} size=\"large\">\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 React from 'react';\nimport {RelationsTableViewState} from '../hooks/useRelationsTableState';\n\nexport const RelationsTableViewStateContext = React.createContext<RelationsTableViewState>(null);\n\nRelationsTableViewStateContext.displayName = 'RelationsViewStateContext';\n","import {makeStyles} from '@mui/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 '@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, {useCallback, useContext, useMemo, useState} from 'react';\nimport {path} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Connection} from '@reltio/mdm-sdk';\nimport {BasicTable, ColumnData} from '@reltio/components';\nimport RowCellRenderer from './cell-renderers/RowCellRenderer';\nimport {getBasicTableColumnsData, getBasicTableRowsData} from './helpers/dataHelpers';\nimport {checkRelationPermission} from './helpers/buttonsHelper';\nimport {RowCellRenderProps} from '../../types/TableData';\nimport EditButtons from './EditButtons';\nimport {RelationsTableViewStateContext} from '../../contexts/RelationsTableViewStateContext';\n\nimport {useStyles} from './styles';\n\nconst MAX_HEIGHT = 477;\n\ntype Props = {\n columnsData: ColumnData[];\n connections: Connection[];\n onEditRelation: (connection: Connection) => void;\n onRemoveRelation: (relationUri: string) => void;\n basicTableRef: React.RefObject<unknown>;\n allowOnlyCreateNew?: boolean;\n};\n\nconst RelationsTable = ({\n columnsData,\n connections,\n onEditRelation,\n onRemoveRelation,\n basicTableRef,\n allowOnlyCreateNew\n}: Props) => {\n const styles = useStyles();\n\n const [hoverRowIndex, setHoverRowIndex] = useState<number>(null);\n\n const {onFilter, onSort, filters, sorting} = useContext(RelationsTableViewStateContext);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const mode = useSelector(mdmModule.selectors.getMode);\n\n const tableRowsData = useMemo(\n () => getBasicTableRowsData(connections, columnsData, metadata),\n [connections, columnsData, metadata]\n );\n const tableColumnsData = useMemo(() => getBasicTableColumnsData(columnsData), [columnsData]);\n\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 renderRowCell = useCallback(\n (props: RowCellRenderProps) => <RowCellRenderer {...props} isSorted={sorting?.field === props.columnData.id} />,\n [sorting]\n );\n const handleOnRowHover = useCallback((rowIndex) => setHoverRowIndex(rowIndex), []);\n const handleEditRelation = useCallback(\n () => onEditRelation(path([hoverRowIndex, 'connection'], tableRowsData)),\n [hoverRowIndex, onEditRelation, 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 data-reltio-id=\"reltio-relations-table\" 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={100}\n headRowHeight={48}\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\nexport default RelationsTable;\n","import {profile} from '@reltio/mdm-module';\nimport {checkMetadataForDelete, checkMetadataForUpdate, checkNew, checkRemoved, getRelationType} from '@reltio/mdm-sdk';\n\nexport const 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","import {makeStyles} from '@mui/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 {SmallIconButtonWithTooltip} from '@reltio/components';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\nimport Popover from '@mui/material/Popover';\nimport Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\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 React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {ColumnsSettings, FilterButton, VerticalDivider, ExpandableSearchInput} from '@reltio/components';\nimport {RelationsTableViewStateContext} from '../../contexts/RelationsTableViewStateContext';\nimport {ProfileLayoutItemHeader} from '../../../ProfileLayoutItemHeader/ProfileLayoutItemHeader';\nimport MoreButton from './MoreButton/MoreButton';\n\ntype Props = {\n title: string;\n total: number;\n};\n\nconst RelationsTableHeader = ({title, total}: Props) => {\n const {\n searchQuery,\n setSearchQuery,\n filters,\n onToggleFilters,\n allColumnsData,\n visibleColumns,\n onChangeColumns,\n onChangeShowInactive,\n showInactive\n } = useContext(RelationsTableViewStateContext);\n const totalText =\n total === 1 ? i18n.text('${count} entity', {count: total}) : i18n.text('${count} entities', {count: total});\n return (\n <ProfileLayoutItemHeader title={title} totalText={totalText}>\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 <MoreButton showInactive={showInactive} onShowInactiveChange={onChangeShowInactive} />\n </ProfileLayoutItemHeader>\n );\n};\n\nexport default RelationsTableHeader;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n display: 'flex',\n height: '30px',\n alignItems: 'center',\n paddingTop: '8px'\n },\n oneLine: {\n margin: '15px 25px',\n width: '40%'\n },\n relationAvatar: {\n flexShrink: 0,\n marginLeft: '16px',\n width: '30px',\n height: '30px'\n },\n relationLabel: {\n marginLeft: '16px',\n width: '30%'\n }\n});\n","import React from 'react';\nimport {ColumnData, RenderRowCellProps, TableSkeleton} from '@reltio/components';\nimport Skeleton from '@mui/material/Skeleton';\nimport {useStyles} from './styles';\n\ntype Props = {\n tableColumnsData: ColumnData[];\n};\n\nconst SkeletonCellRenderer = ({columnIndex}: RenderRowCellProps) => {\n const styles = useStyles();\n\n const isFirstColumn = columnIndex === 0;\n return (\n <>\n <div className={styles.container}>\n {isFirstColumn && <Skeleton variant=\"circular\" className={styles.relationAvatar} />}\n <Skeleton className={isFirstColumn ? styles.relationLabel : styles.oneLine} />\n </div>\n </>\n );\n};\n\nexport const RelationsTableSkeleton = ({tableColumnsData}: Props) => {\n return (\n <TableSkeleton\n tableColumnsData={tableColumnsData}\n RowCellRenderer={SkeletonCellRenderer}\n defaultColumnWidth={250}\n defaultColumnMinWidth={100}\n />\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0\n },\n content: {\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 addArea: {\n paddingTop: '8px'\n },\n skeletonContainer: {\n display: 'flex',\n height: '30px',\n alignItems: 'center',\n paddingTop: '8px'\n },\n oneLineSkeleton: {\n margin: '15px 25px',\n width: '40%'\n },\n relationAvatarSkeleton: {\n flexShrink: 0,\n marginLeft: '16px',\n width: '30px',\n height: '30px'\n },\n relationLabelSkeleton: {\n marginLeft: '16px',\n width: '30%'\n }\n});\n","import React, {useCallback, useContext, useEffect, useMemo, useRef} from 'react';\nimport {pipe, propEq} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n BasicTablePagination,\n BasicView,\n useConfigPermissions,\n useRelationsLoader,\n RelationEditor,\n FeaturesContext,\n useExpandInvalidRelations\n} from '@reltio/components';\nimport {\n isTempUri,\n createNewConnectionWithDefaultRelationType,\n RelationsViewConfig,\n Connection,\n ActivityFilter,\n getRelationUriFromConnection,\n getEntityUriFromConnection\n} from '@reltio/mdm-sdk';\nimport AddRelationButton from '../AddRelationButton/AddRelationButton';\nimport RelationsTable from '../RelationsTable/RelationsTable';\nimport RelationsTableHeader from '../RelationsTableHeader/RelationsTableHeader';\nimport {getBasicTableColumnsData} from '../RelationsTable/helpers/dataHelpers';\nimport {RelationsTableViewStateContext} from '../../contexts/RelationsTableViewStateContext';\nimport {ProfileLayoutItemContent} from '../../../ProfileLayoutItemContent/ProfileLayoutItemContent';\nimport {RelationsTableSkeleton} from '../RelationsTableSkeleton/RelationsTableSkeleton';\nimport {buildRelationsFilter} from '../../helpers/relations';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: RelationsViewConfig;\n className?: string;\n};\n\nexport const RelationsTableView = ({className, config}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const connections = useSelector((state) =>\n mdmModule.selectors.getConnectionsWithDraftsByViewId(state, config.id)\n ) as Connection[];\n const entity = useSelector(mdmModule.selectors.getEntity);\n const total = useSelector((state) => mdmModule.selectors.getTotalByViewId(state, config.id));\n const mode = useSelector(mdmModule.selectors.getMode);\n const relationToAdd = useSelector((state) => mdmModule.selectors.getRelationToAddByViewId(state, config.id));\n const relationsToEdit = useSelector((state) => mdmModule.selectors.getRelationsToEditByViewId(state, config.id));\n const checkIfCanAddRelations = useSelector((state) =>\n mdmModule.selectors.getCheckIfCanAddRelations(state, config.content)\n );\n\n const {\n page,\n rowsPerPage,\n sorting,\n filters,\n searchQuery,\n visibleColumns,\n allColumnsData,\n showInactive,\n rowsPerPageOptions,\n setPage,\n setRowsPerPage,\n setSearchQuery\n } = useContext(RelationsTableViewStateContext);\n\n const featuresContext = useContext(FeaturesContext);\n const showDescription = useSelector(mdmModule.selectors.getShowAttributeDescription);\n const features = useMemo(() => ({...featuresContext, showDescription}), [featuresContext, showDescription]);\n\n useEffect(() => {\n setSearchQuery('');\n }, [entity?.uri]); //eslint-disable-line react-hooks/exhaustive-deps\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\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), dispatch)(newConnection);\n }, [config, mode, metadata, dispatch]);\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) => getRelationUriFromConnection(connection) === relationUri\n );\n const entityUri = getEntityUriFromConnection(connectionToRemove);\n if (isTempUri(entityUri)) {\n dispatch(profile.modifiedEntities.actions.entityDeleted(entityUri));\n }\n },\n [config, connections, dispatch]\n );\n\n const canAddRelations = entity && checkIfCanAddRelations;\n const openedRelations = relationToAdd ? [relationToAdd, ...relationsToEdit] : relationsToEdit;\n const {canUpdate, canDelete} = useConfigPermissions();\n const canEditRelations = canUpdate(config);\n const canRemoveRelations = canDelete(config);\n const basicTableRef = useRef(null);\n useExpandInvalidRelations(config.id);\n\n const tableColumnsData = useMemo(() => getBasicTableColumnsData(visibleColumnsData), [visibleColumnsData]);\n\n return (\n <FeaturesContext.Provider value={features}>\n <BasicView className={className}>\n <RelationsTableHeader title={config.caption} total={total} />\n {canAddRelations && (\n <div className={styles.addArea}>\n <AddRelationButton onClick={onAddRelation} />\n </div>\n )}\n {openedRelations.map((relation) => (\n <RelationEditor\n key={getRelationUriFromConnection(relation)}\n connection={relation}\n config={config}\n mode={mode}\n metadata={metadata}\n />\n ))}\n <ProfileLayoutItemContent\n isLoading={isLoading}\n isEmptyData={!filters && !connections.length}\n skeleton={<RelationsTableSkeleton tableColumnsData={tableColumnsData} />}\n pagination={\n <BasicTablePagination\n count={total}\n rowsPerPageOptions={rowsPerPageOptions}\n rowsPerPage={rowsPerPage}\n onChangeRowsPerPage={setRowsPerPage}\n page={page}\n onChangePage={setPage}\n basicTableRef={basicTableRef}\n />\n }\n >\n <RelationsTable\n columnsData={visibleColumnsData}\n connections={connections}\n onEditRelation={\n canEditRelations\n ? pipe(profile.relations.actions.openRelationEditor(config.id), dispatch)\n : null\n }\n onRemoveRelation={canRemoveRelations ? onRemoveRelation : null}\n basicTableRef={basicTableRef}\n allowOnlyCreateNew={config.allowOnlyCreateNew}\n />\n </ProfileLayoutItemContent>\n </BasicView>\n </FeaturesContext.Provider>\n );\n};\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 './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 {useMemo, useReducer} from 'react';\nimport {useSelector} from 'react-redux';\nimport {pluck} from 'ramda';\nimport reducer, {actions} from './reducer';\nimport mdmModule from '@reltio/mdm-module';\nimport {RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {ColumnData, ColumnFilter, Sorting, useActions} from '@reltio/components';\nimport {DEFAULT_COLUMNS_DATA, getColumnsData, getRowsPerPageOptions} from '../helpers/tableHelpers';\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\nexport type RelationsTableViewState = {\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n page: number;\n setPage: (page: number) => void;\n visibleColumns: string[];\n onChangeColumns: (cols: string[]) => void;\n onToggleFilters: () => void;\n setRowsPerPage: (rowsPerPage: number) => void;\n onChangeShowInactive: (showInactive: boolean) => void;\n onSort: (field: string) => void;\n onFilter: (event: {columnId: string; filter: ColumnFilter}) => void;\n filters?: Record<string, ColumnFilter>;\n sorting: Sorting;\n showInactive: boolean;\n rowsPerPage: number;\n rowsPerPageOptions: number[];\n allColumnsData: ColumnData[];\n};\n\nconst useRelationsTableState = (config: RelationsViewConfig): RelationsTableViewState => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n\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 allColumnsData = useMemo(() => getColumnsData(config, metadata), [config, metadata]);\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n const {\n changeSearchQuery,\n changePage,\n toggleSort,\n changeFilter,\n toggleFilters,\n changeColumns,\n changeRowsPerPage,\n changeShowInactive\n } = useActions({\n actions,\n dispatch\n });\n\n const rowsPerPageOptions = useMemo(() => getRowsPerPageOptions(DEFAULT_ROWS_PER_PAGE), []);\n\n return {\n ...state,\n rowsPerPageOptions,\n onChangeShowInactive: changeShowInactive,\n setSearchQuery: changeSearchQuery,\n setPage: changePage,\n setRowsPerPage: changeRowsPerPage,\n onSort: toggleSort,\n onFilter: changeFilter,\n onToggleFilters: toggleFilters,\n onChangeColumns: changeColumns,\n allColumnsData\n };\n};\n\nexport default useRelationsTableState;\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 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 '@mui/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 width: '100%',\n '&>div>span': {\n maxWidth: 'calc(100% + 22px)'\n }\n },\n headLabel: {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n headLabelWrapper: {\n display: 'flex',\n alignItems: 'center',\n minWidth: 0\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 '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';\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {withFilterAtBottom, DescriptionIcon, ExpandedValueTooltip} from '@reltio/components';\nimport {useStyles} from './styles';\n\nconst HeadCellRenderer = (props) => {\n const styles = useStyles();\n const {description, label} = props?.headCellData || {};\n const cellLabel = (\n <div className={styles.headLabelWrapper}>\n <ExpandedValueTooltip value={label}>\n <div className={styles.headLabel}>{label}</div>\n </ExpandedValueTooltip>\n <DescriptionIcon description={description} />\n </div>\n );\n\n return (\n <div className={styles.headCell}>\n <DefaultHeadCellRenderer {...props} headCellData={{...props?.headCellData, label: cellLabel}} />\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 {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\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\n return {\n ...state,\n setSearchQuery: changeSearchQuery,\n setPage: changePage,\n onSort: toggleSort,\n onFilter: changeFilter,\n onToggleFilters: toggleFilters,\n onChangeColumns: changeColumns,\n allColumnsData,\n ...attribute\n };\n};\n","import React, {useContext} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {ColumnsSettings, FilterButton, VerticalDivider, ExpandableSearchInput} from '@reltio/components';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {ProfileLayoutItemHeader} from '../../../ProfileLayoutItemHeader/ProfileLayoutItemHeader';\n\ntype Props = {\n title: string;\n};\n\nconst AttributeTableHeader = ({title}: Props) => {\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 isRequired = isEditableMode && attributeType?.required;\n\n return (\n <ProfileLayoutItemHeader title={title} description={attributeType?.description} isRequired={isRequired}>\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 </ProfileLayoutItemHeader>\n );\n};\n\nexport default AttributeTableHeader;\n","import {useCallback, useContext, useState, useMemo} from 'react';\nimport {\n createNewAttribute,\n Entity,\n getAttributeSource,\n isEditableMode as checkIsEditableMode,\n isEmptyEntity,\n NestedAttributeValue,\n AttributeItem,\n isEmptyValue,\n validateComplexAttribute,\n ComplexAttributeValue,\n EntitiesMap,\n evaluateErrorPath,\n getSingleAttributeEntity,\n getEditableAttributeTypeSubAttributes,\n ReferenceAttributeValue\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 isAttributeValueEmpty = useCallback((attributeValue: ComplexAttributeValue) => {\n const hasRefEntity = (attributeValue as ReferenceAttributeValue).refEntity;\n return !hasRefEntity && isEmptyEntity({attributes: attributeValue.value});\n }, []);\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 value: {\n ...newAttribute,\n value: createDefaultValues({\n attributeTypes: getEditableAttributeTypeSubAttributes(metadata, attributeType),\n parentUri: newAttribute.uri,\n mode,\n metadata\n })\n },\n uri: newAttribute.uri,\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) =>\n originalValues.find(propEq('uri', value.uri)) !== value && !isAttributeValueEmpty(value);\n\n return {\n checkHasChanges,\n isAttributeValueEmpty,\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 '@mui/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 from '@mui/material/Button';\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 data-reltio-id=\"table-attribute-view-apply-button\"\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 isTempUri\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 (attributeType?.required && modifiedValues.length === 1 && isTempUri(modifiedValues[0].uri)) {\n return onStartEditing(modifiedValues[0]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [attributeType]);\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 '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n addButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginLeft: '-4px',\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 classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {\n AttributeError,\n AttributeItem,\n AttributeType,\n checkCanCreateAttribute,\n ComplexAttributeValue,\n EntitiesMap,\n isAttributeTypeError as checkIsAttributeTypeError,\n isPartOfErrorAttributeTypeUri,\n isPartOfErrorParentUri,\n TableAttributeViewConfig\n} from '@reltio/mdm-sdk';\nimport {\n ScrollToElementContext,\n isHighlightedErrorType,\n useConfigPermissions,\n useScrollToAttributeError,\n withContext\n} from '@reltio/components';\nimport Button from '@mui/material/Button';\nimport AddIcon from '@mui/icons-material/Add';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {AttributeEditing} from '../AttributeEditing/AttributeEditing';\nimport {useExpandAttributes} from './hooks/useExpandAttributes';\nimport {useStyles} from './styles';\n\ntype HighlightedElement = React.ContextType<typeof ScrollToElementContext>;\n\ntype Props = {\n config: TableAttributeViewConfig;\n entityUri: string;\n attributeType: AttributeType;\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?: HighlightedElement;\n highlightedAttributeError?: HighlightedElement;\n};\n\nconst 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 const {ref, errorClassName} = useScrollToAttributeError({highlightedError, isSimple: true});\n useExpandAttributes({\n onStartEditing,\n modifiedValues,\n highlightedError: highlightedError?.element as AttributeError,\n highlightedAttributeError: highlightedAttributeError?.element as AttributeError\n });\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 ref={ref} className={classnames(styles.editor, errorClassName)}>\n {canCreate && (\n <Button\n color=\"primary\"\n onClick={onAdd}\n className={styles.addButton}\n data-reltio-id=\"table-attribute-view-add-button\"\n >\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\nexport default withContext(\n ScrollToElementContext,\n (contextValue, {entityUri, attributeType}) => {\n const {element, type} = contextValue || {};\n const isError = isHighlightedErrorType(type);\n\n const isAttributeTypeError =\n isError && checkIsAttributeTypeError(element as AttributeError, entityUri, attributeType.uri);\n const isAttributeError =\n element &&\n isError &&\n !isAttributeTypeError &&\n isPartOfErrorAttributeTypeUri(attributeType, element) &&\n isPartOfErrorParentUri(entityUri, element);\n\n const highlightedError = isAttributeTypeError ? contextValue : null;\n const highlightedAttributeError = isAttributeError ? contextValue : null;\n return {highlightedError, highlightedAttributeError};\n },\n TableAttributeEditableContent\n);\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 '@mui/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 '@mui/icons-material/Edit';\nimport DeleteIcon from '@mui/icons-material/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={48}\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 {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n overflow: 'hidden',\n minHeight: 4\n },\n noData: {\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)',\n padding: '8px 16px'\n },\n header: {\n padding: '0 8px 0 16px'\n }\n}));\n","import React, {useMemo, useContext} from 'react';\nimport {propEq, isEmpty} from 'ramda';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport {BasicView, BasicTablePagination, TableSkeleton} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {Entity, TableAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport AttributeTableHeader from '../AttributeTableHeader/AttributeTableHeader';\nimport {getBasicTableColumnsData} from '../../helpers/tableAttributeHelpers';\nimport {useEditableAttribute} from './hooks/useEditableAttribute';\nimport TableAttributeEditableContent from '../TableAttributeEditableContent/TableAttributeEditableContent';\nimport {ProfileLayoutItemContent} from '../../../ProfileLayoutItemContent/ProfileLayoutItemContent';\nimport AttributeTable from '../AttributeTable/AttributeTable';\n\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 styles = useStyles();\n\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const isEditableMode = useSelector(mdmModule.selectors.getIsEditableMode);\n const modifiedEntity =\n useSelector((state) => mdmModule.selectors.getModifiedEntity(state, entityUri)) || ({} as Entity);\n\n const {\n onDeleteAttribute,\n onStartEditing,\n onChangeAttribute,\n onAdd,\n onCancel,\n onApply,\n onReset,\n checkHasChanges,\n isAttributeValueEmpty,\n modifiedValues,\n editingValues,\n deletedUris\n } = useEditableAttribute();\n\n const {\n totalVisibleValues,\n attributeType,\n hasPaging,\n isLoading,\n page,\n setPage,\n allColumnsData,\n visibleColumns,\n values,\n filters,\n onFilter,\n onSort,\n sorting\n } = useContext(TableAttributeContext);\n\n const preparedValues = isEditableMode ? modifiedValues.filter((item) => !isAttributeValueEmpty(item)) : values;\n\n const visibleColumnsData = useMemo(\n () => visibleColumns.map((id) => allColumnsData.find(propEq('id', id))),\n [visibleColumns, allColumnsData]\n );\n const tableColumnsData = useMemo(() => getBasicTableColumnsData(visibleColumnsData), [visibleColumnsData]);\n\n const max = config.max || DEFAULT_ROWS_PER_PAGE;\n const showTable = Boolean((preparedValues.length !== 0 || filters) && attributeType && !attributeType.hidden);\n const showToolbar = attributeType && isEditableMode && !isEmpty(modifiedEntity);\n const noDataText = visibleColumnsData.length === 0 ? i18n.text('All columns are hidden') : '';\n const isEmptyData = !showTable || visibleColumnsData.length === 0;\n\n return (\n <BasicView className={classnames(styles.root, className)}>\n <AttributeTableHeader title={config.caption} />\n <ProfileLayoutItemContent\n className={styles.content}\n isLoading={isLoading}\n skeleton={<TableSkeleton tableColumnsData={tableColumnsData} />}\n toolbar={\n showToolbar && (\n <TableAttributeEditableContent\n config={config}\n entityUri={entityUri}\n attributeType={attributeType}\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 />\n )\n }\n pagination={\n hasPaging && (\n <BasicTablePagination\n count={totalVisibleValues}\n rowsPerPageOptions={[]}\n rowsPerPage={max}\n page={page}\n onChangePage={setPage}\n />\n )\n }\n noDataText={noDataText}\n isEmptyData={isEmptyData}\n >\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 </ProfileLayoutItemContent>\n </BasicView>\n );\n};\n","import {makeStyles} from '@mui/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 hidePageSelectorWhenSmall: {\n '@media (min-width: 450px)': {\n '& .MuiInputBase-root': {\n display: 'none'\n },\n '& .MuiTablePagination-selectLabel': {\n display: 'none'\n }\n }\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 linearIndicator: {\n top: '42px'\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, getLabel} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport Avatar from '@mui/material/Avatar';\nimport {useStyles} from './styles';\nimport DEFAULT_ICON from './icons/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: {uri},\n nodeId\n } = node;\n const title = getLabel(node.entity.label);\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 = entityType ? getPropWithInheritance(metadata, entityType, 'typeGraphIcon') : null;\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 {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n padding: '16px',\n display: 'flex',\n flexDirection: 'column'\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n '&:nth-child(n + 2)': {\n marginTop: '4px',\n marginLeft: '32px'\n },\n '&:nth-child(1) $label': {\n width: '60%'\n },\n '&:nth-child(2) $label': {\n width: '40%'\n },\n '&:nth-child(3) $label': {\n width: '50%'\n }\n },\n icon: {\n width: '16px',\n height: '16px',\n flexShrink: 0,\n marginRight: '8px'\n },\n label: {\n fontSize: '1rem'\n }\n});\n","import React from 'react';\nimport Skeleton from '@mui/material/Skeleton';\nimport {useStyles} from './styles';\n\nexport const HierarchyViewSkeleton = () => {\n const styles = useStyles();\n return (\n <div data-reltio-id=\"hierarchy-view-skeleton\" className={styles.container}>\n <div className={styles.row}>\n <Skeleton variant=\"circular\" className={styles.icon} />\n <Skeleton className={styles.label} />\n </div>\n <div className={styles.row}>\n <Skeleton variant=\"circular\" className={styles.icon} />\n <Skeleton className={styles.label} />\n </div>\n <div className={styles.row}>\n <Skeleton variant=\"circular\" className={styles.icon} />\n <Skeleton className={styles.label} />\n </div>\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: \"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: \"M12 7c2.762 0 5 2.238 5 5s-2.238 5-5 5-5-2.238-5-5 2.238-5 5-5zm0 2a3 3 0 100 6 3 3 0 100-6zm8.94 2A8.994 8.994 0 0013 3.06V1h-2v2.06A8.994 8.994 0 003.06 11H1v2h2.06A8.994 8.994 0 0011 20.94V23h2v-2.06A8.994 8.994 0 0020.94 13H23v-2h-2.06zM12 19c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z\",\n id: \"svg244080201a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg244080201b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg244080201a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg244080201b)\",\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 id: \"svg4492718a\",\n d: \"M7 18a2 2 0 110 4 2 2 0 010-4zm10.5-2a1.5 1.5 0 110 3 1.5 1.5 0 010-3zm-6-9a4.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-5zm-8 1a1.5 1.5 0 110 3 1.5 1.5 0 010-3zm17-1a1.5 1.5 0 110 3 1.5 1.5 0 010-3zm-4-5a1.5 1.5 0 110 3 1.5 1.5 0 010-3zM6 2a2 2 0 110 4 2 2 0 010-4z\"\n})), React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg4492718b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg4492718a\"\n})), React.createElement(\"path\", {\n fill: \"#000\",\n fillOpacity: \".54\",\n d: \"M0 0h24v24H0z\",\n mask: \"url(#svg4492718b)\"\n}))));","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n button: {\n padding: '8px'\n },\n disabled: {\n opacity: 0.54,\n fillOpacity: 1\n }\n});\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {FeaturesContext, SmallIconButtonWithTooltip} from '@reltio/components';\nimport SelectNodeIcon from './icons/SelectNode.svg';\nimport ShowGraphIcon from './icons/ShowGraph.svg';\nimport {ProfileLayoutItemHeader} from '../ProfileLayoutItemHeader/ProfileLayoutItemHeader';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n title: string;\n entityLabel?: string;\n onScrollToCurrentEntity?: () => void;\n onGraphOpen: () => void;\n disabled?: boolean;\n isGraphView?: boolean;\n};\n\nexport const HierarchyViewHeader = ({\n title,\n entityLabel = '',\n onScrollToCurrentEntity,\n onGraphOpen,\n disabled = false,\n isGraphView = false\n}: Props) => {\n const styles = useStyles();\n const {showNavigateToGraph} = useContext(FeaturesContext);\n return (\n <ProfileLayoutItemHeader title={title}>\n {!isGraphView && showNavigateToGraph && (\n <SmallIconButtonWithTooltip\n data-reltio-id=\"show-graph-button\"\n className={styles.button}\n classes={{disabled: styles.disabled}}\n tooltipTitle={i18n.text('Show Graph')}\n showForDisabled\n disabled={disabled}\n icon={ShowGraphIcon}\n onClick={onGraphOpen}\n size=\"L\"\n />\n )}\n {!!onScrollToCurrentEntity && (\n <SmallIconButtonWithTooltip\n data-reltio-id=\"scroll-to-node-button\"\n className={styles.button}\n tooltipTitle={i18n.text('Scroll to ${node}', {node: entityLabel})}\n classes={{disabled: styles.disabled}}\n icon={SelectNodeIcon}\n showForDisabled\n disabled={disabled}\n onClick={onScrollToCurrentEntity}\n size=\"L\"\n />\n )}\n </ProfileLayoutItemHeader>\n );\n};\n","import {makeStyles} from '@mui/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 rootNode: {\n padding: '0 24px 0 13px'\n },\n\n longRootNode: {\n padding: '0 24px 0 5px'\n },\n\n nodeContent: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n paddingLeft: '18px',\n boxSizing: 'border-box'\n },\n nodeRootLongContent: {\n paddingLeft: '20px'\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 classnames from 'classnames';\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 const longRootNode = node?.rootIndex > 99 && node.root;\n return (\n <div\n {...otherProps}\n className={classnames(styles.node, {\n [styles.longRootNode]: longRootNode,\n [styles.rootNode]: node.root && !longRootNode\n })}\n style={nodeStyle}\n >\n {scaffold}\n\n <div className={classnames(styles.nodeContent, {[styles.nodeRootLongContent]: longRootNode})} style={style}>\n {children}\n </div>\n </div>\n );\n};\n\nexport default TreeNode;\n","import {Node} from './types';\n\nexport const getNodeKey = ({node}: {node: Node}) => node.nodeId;\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 {useEffect, useState, useCallback} 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 [isLoading, setIsLoading] = useState(false);\n const [treeData, setTreeData] = useState<Node[]>([]);\n const [errorMessage, setErrorMessage] = useState<string>(null);\n const [rowsPerPage, setRowsPerPage] = useState(25);\n const [pagedData, setPagedData] = useState<Node[]>([]);\n const [page, setPage] = useState(0);\n useEffect(() => {\n setPagedData(treeData.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage));\n }, [page, rowsPerPage, treeData]);\n\n useEffect(() => {\n setPage(0);\n setRowsPerPage(25);\n }, [treeData]);\n const onChangeRowsPerPage = useCallback(\n (rowsPerPage) => {\n setRowsPerPage(rowsPerPage);\n setPage(0);\n },\n [setRowsPerPage]\n );\n\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 setIsLoading(true);\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 .finally(() => {\n setIsLoading(false);\n });\n }\n return () => {\n setTreeData([]);\n };\n }, [entityUri, graphUri, safePromise]);\n\n return {\n isLoading,\n treeData: pagedData,\n setTreeData,\n errorMessage,\n rowsPerPage,\n count: treeData.length,\n onChangePage: setPage,\n onChangeRowsPerPage,\n page\n };\n};\n","import React, {useCallback, useContext, useEffect, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport mdmModule, {ui} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {BasicTablePagination, BasicView, FeaturesContext, ReactSortableTree} from '@reltio/components';\nimport {HierarchyPathsViewConfig} from '@reltio/mdm-sdk';\nimport {Node} from './Node';\nimport {ConfigContext} from './ConfigContext';\nimport {HierarchyViewSkeleton} from '../HierarchyViewSkeleton/HierarchyViewSkeleton';\nimport {HierarchyViewHeader} from '../HierarchyViewHeader/HierarchyViewHeader';\nimport {ProfileLayoutItemContent} from '../ProfileLayoutItemContent/ProfileLayoutItemContent';\nimport {useDynamicNodesHeights} from './hooks/useDynamicNodesHeights';\nimport {useLoadPaths} from './hooks/useLoadPaths';\nimport {getNodeKey} from './helpers';\nimport {theme} from './theme';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n config: HierarchyPathsViewConfig;\n};\nconst ROOTS_PER_PAGE_OPTIONS = [10, 25];\n\nexport const HierarchyPathsView = ({config, className}: Props) => {\n const {id, caption, graph, _showNavigateToGraph} = 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 {\n treeData,\n setTreeData,\n errorMessage,\n isLoading,\n rowsPerPage,\n count,\n onChangePage,\n onChangeRowsPerPage,\n page\n } = useLoadPaths(entityUri, graphType);\n const {onResize, getRowHeight, clearHeightsCache} = useDynamicNodesHeights();\n\n const featuresContext = useContext(FeaturesContext);\n const showNavigateToGraph =\n _showNavigateToGraph !== undefined ? _showNavigateToGraph : featuresContext.showNavigateToGraph;\n const features = useMemo(() => ({...featuresContext, showNavigateToGraph}), [showNavigateToGraph, featuresContext]);\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 <FeaturesContext.Provider value={features}>\n <ConfigContext.Provider value={config}>\n <BasicView className={className}>\n <HierarchyViewHeader onGraphOpen={openGraph} title={caption} />\n <ProfileLayoutItemContent\n className={styles.treeContainer}\n isLoading={isLoading}\n noDataText={errorMessage}\n isEmptyData={!!errorMessage}\n skeleton={<HierarchyViewSkeleton />}\n pagination={\n count > ROOTS_PER_PAGE_OPTIONS[1] && (\n <BasicTablePagination\n classes={{root: styles.hidePageSelectorWhenSmall}}\n count={count}\n onChangePage={onChangePage}\n page={page}\n rowsPerPage={rowsPerPage}\n onChangeRowsPerPage={onChangeRowsPerPage}\n rowsPerPageOptions={ROOTS_PER_PAGE_OPTIONS}\n labelRowsPerPage={i18n.text('Roots per page:')}\n />\n )\n }\n >\n <div className={styles.tree}>\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 </div>\n </ProfileLayoutItemContent>\n </BasicView>\n </ConfigContext.Provider>\n </FeaturesContext.Provider>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n textField: {\n marginLeft: theme.spacing(),\n marginRight: theme.spacing(),\n width: 200\n },\n panel: ({isGraphView}) => ({\n display: 'flex',\n flexGrow: 1,\n flexDirection: 'column',\n minHeight: isGraphView ? undefined : '372px',\n maxHeight: isGraphView ? undefined : '507px',\n height: isGraphView ? '100%' : undefined\n }),\n treeWrapper: {\n flexGrow: 1,\n height: 0,\n marginTop: 7\n },\n checkedNode: {\n backgroundColor: 'rgba(0,114,206, 0.12)'\n },\n editorNode: {\n overflow: 'hidden',\n '&:hover': {\n backgroundColor: 'transparent !important'\n },\n '&:hover div.rst__moveHandle': {\n visibility: 'hidden'\n },\n '& div.rst__rowLabel': {\n paddingRight: 0\n }\n }\n}));\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%'\n },\n root: {\n minHeight: '28px',\n display: 'flex',\n padding: '0 18px',\n '&:hover': {\n backgroundColor: 'rgba(0,0,0,0.06)'\n },\n wordBreak: 'break-all'\n },\n tree: {\n flexGrow: 1,\n height: 0\n }\n}));\n","export function classnames(...classes) {\n // Use Boolean constructor as a filter callback\n // Allows for loose type truthy/falsey checks\n // Boolean(\"\") === false;\n // Boolean(false) === false;\n // Boolean(undefined) === false;\n // Boolean(null) === false;\n // Boolean(0) === false;\n // Boolean(\"classname\") === true;\n return classes.filter(Boolean).join(' ');\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\n\nimport DragIndicatorIcon from '@mui/icons-material/DragIndicator';\nimport Tooltip from '@mui/material/Tooltip';\nimport i18n from 'ui-i18n';\nimport './node-content.css';\nimport {classnames} from './utils';\nimport {ReactSortableTreeUtils} from '@reltio/components';\n\nclass NodeRendererDefault extends Component {\n render() {\n const {\n scaffoldBlockPxWidth,\n toggleChildrenVisibility,\n connectDragPreview,\n connectDragSource,\n isDragging,\n canDrop,\n canDrag,\n node,\n title,\n subtitle,\n draggedNode,\n path,\n treeIndex,\n isSearchMatch,\n isSearchFocus,\n buttons,\n className,\n style,\n didDrop,\n //eslint-disable-next-line no-unused-vars\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n treeId,\n //eslint-disable-next-line no-unused-vars\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isOver, // Not needed, but preserved for other renderers\n //eslint-disable-next-line no-unused-vars\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n parentNode, // Needed for dndManager\n rowDirection,\n ...otherProps\n } = this.props;\n const nodeTitle = title || node.title;\n const nodeSubtitle = subtitle || node.subtitle;\n const rowDirectionClass = rowDirection === 'rtl' ? 'rst__rtl' : null;\n let handle;\n if (canDrag) {\n if (typeof node.children === 'function' && node.expanded) {\n // Show a loading symbol on the handle when the children are expanded\n // and yet still defined by a function (a callback to fetch the children)\n handle = (\n <div className=\"rst__loadingHandle\">\n <div className=\"rst__loadingCircle\">\n {[...new Array(12)].map((_, index) => (\n <div\n // eslint-disable-next-line react/no-array-index-key\n key={index}\n className={classnames('rst__loadingCirclePoint', rowDirectionClass)}\n />\n ))}\n </div>\n </div>\n );\n } else {\n // Show the handle used to initiate a drag-and-drop\n handle = connectDragSource(\n <div className=\"rst__moveHandle\">\n <Tooltip title={i18n.text('Drag node')}>\n <DragIndicatorIcon />\n </Tooltip>\n </div>,\n {\n dropEffect: 'copy'\n }\n );\n }\n }\n\n const isDraggedDescendant = draggedNode && ReactSortableTreeUtils.isDescendant(draggedNode, node);\n const isLandingPadActive = !didDrop && isDragging;\n\n const showToggleChildrenButton =\n toggleChildrenVisibility &&\n !node.root &&\n !node.cycled &&\n ((node.children && node.children.length > 0) || node.pending);\n\n const onToggle = () => {\n toggleChildrenVisibility({\n node,\n path,\n treeIndex\n });\n };\n\n return (\n <div style={{height: '100%'}} {...otherProps} key={node.nodeId}>\n {showToggleChildrenButton && node.expanded && !isDragging && (\n <div\n style={{width: scaffoldBlockPxWidth - 2}}\n className={classnames('rst__lineChildren', rowDirectionClass)}\n />\n )}\n\n <div className={classnames('rst__rowWrapper', rowDirectionClass)}>\n {/* Set the row preview to be used during drag and drop */}\n {connectDragPreview(\n <div\n className={classnames(\n 'rst__row',\n isLandingPadActive && 'rst__rowLandingPad',\n isLandingPadActive && !canDrop && 'rst__rowCancelPad',\n isSearchMatch && 'rst__rowSearchMatch',\n isSearchFocus && 'rst__rowSearchFocus',\n rowDirectionClass,\n className\n )}\n style={{\n opacity: isDraggedDescendant ? 0.5 : 1,\n ...style\n }}\n >\n {handle}\n\n <div\n className={classnames(\n 'rst__rowContents',\n !canDrag && 'rst__rowContentsDragDisabled',\n rowDirectionClass\n )}\n >\n {showToggleChildrenButton ? (\n <div className=\"rst__buttonWrapper\" onClick={onToggle}>\n <div\n aria-label={node.expanded ? 'Collapse' : 'Expand'}\n className={classnames(\n node.expanded ? 'rst__collapseButton' : 'rst__expandButton',\n rowDirectionClass\n )}\n />\n </div>\n ) : (\n <div className={classnames('rst__buttonWrapper', 'rst__noButton')} />\n )}\n <div className={classnames('rst__rowLabel', rowDirectionClass)}>\n <div\n className={classnames(\n 'rst__rowTitle',\n node.subtitle && 'rst__rowTitleWithSubtitle'\n )}\n >\n {typeof nodeTitle === 'function'\n ? nodeTitle({\n node,\n path,\n treeIndex\n })\n : nodeTitle}\n </div>\n\n {nodeSubtitle && (\n <span className=\"rst__rowSubtitle\">\n {typeof nodeSubtitle === 'function'\n ? nodeSubtitle({\n node,\n path,\n treeIndex\n })\n : nodeSubtitle}\n </span>\n )}\n </div>\n\n <div className=\"rst__rowToolbar\">\n {buttons.map((btn, index) => (\n <div\n key={index} // eslint-disable-line react/no-array-index-key\n className=\"rst__toolbarButton\"\n >\n {btn}\n </div>\n ))}\n </div>\n </div>\n </div>,\n {offsetX: 0, offsetY: 0}\n )}\n </div>\n </div>\n );\n }\n}\n\nNodeRendererDefault.defaultProps = {\n isSearchMatch: false,\n isSearchFocus: false,\n canDrag: false,\n toggleChildrenVisibility: null,\n buttons: [],\n className: '',\n style: {},\n parentNode: null,\n draggedNode: null,\n canDrop: false,\n title: null,\n subtitle: null,\n rowDirection: 'ltr'\n};\n\nNodeRendererDefault.propTypes = {\n node: PropTypes.shape({}).isRequired,\n title: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n subtitle: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n path: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])).isRequired,\n treeIndex: PropTypes.number.isRequired,\n treeId: PropTypes.string.isRequired,\n isSearchMatch: PropTypes.bool,\n isSearchFocus: PropTypes.bool,\n canDrag: PropTypes.bool,\n scaffoldBlockPxWidth: PropTypes.number.isRequired,\n toggleChildrenVisibility: PropTypes.func,\n buttons: PropTypes.arrayOf(PropTypes.node),\n className: PropTypes.string,\n style: PropTypes.shape({}),\n\n // Drag and drop API functions\n // Drag source\n connectDragPreview: PropTypes.func.isRequired,\n connectDragSource: PropTypes.func.isRequired,\n parentNode: PropTypes.shape({}), // Needed for dndManager\n isDragging: PropTypes.bool.isRequired,\n didDrop: PropTypes.bool.isRequired,\n draggedNode: PropTypes.shape({}),\n // Drop target\n isOver: PropTypes.bool.isRequired,\n canDrop: PropTypes.bool,\n\n // rtl support\n rowDirection: PropTypes.string\n};\n\nexport default NodeRendererDefault;\n","import {createContext} from 'react';\n\nexport const TreeThemeContext = createContext({\n generateTreeNodeProps: undefined\n});\n\nTreeThemeContext.displayName = 'TreeThemeContext';\n","import React, {Component, Children, cloneElement} from 'react';\nimport PropTypes from 'prop-types';\n\nimport './tree-node.css';\nimport {classnames} from './utils';\nimport {MIN_NODE_CONTENT_WIDTH} from '.';\nimport {TreeThemeContext} from '../treeThemeContext';\n\nclass TreeNode extends Component {\n static contextType = TreeThemeContext;\n\n render() { //NOSONAR\n const {\n children,\n listIndex,\n swapFrom,\n swapLength,\n swapDepth,\n scaffoldBlockPxWidth,\n lowerSiblingCounts,\n connectDropTarget,\n isOver,\n draggedNode,\n canDrop,\n treeIndex,\n // eslint-disable-next-line no-unused-vars\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n treeId, // Delete from otherProps\n // eslint-disable-next-line no-unused-vars\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getPrevRow, // Delete from otherProps\n // eslint-disable-next-line no-unused-vars\n node, // Delete from otherProps\n // eslint-disable-next-line no-unused-vars\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n path, // Delete from otherProps\n rowDirection,\n ...otherProps\n } = this.props;\n\n const rowDirectionClass = rowDirection === 'rtl' ? 'rst__rtl' : null;\n\n // Construct the scaffold representing the structure of the tree\n const scaffoldBlockCount = lowerSiblingCounts.length;\n const scaffold = [];\n lowerSiblingCounts.forEach((lowerSiblingCount, i) => {\n let lineClass = '';\n if (lowerSiblingCount > 0) {\n // At this level in the tree, the nodes had sibling nodes further down\n\n /*if (listIndex === 0) {\n // Top-left corner of the tree\n // +-----+\n // | |\n // | +--+\n // | | |\n // +--+--+\n lineClass =\n 'rst__lineHalfHorizontalRight rst__lineHalfVerticalBottom';\n } else*/ if (i === scaffoldBlockCount - 1) {\n // Last scaffold block in the row, right before the row content\n // +--+--+\n // | | |\n // | +--+\n // | | |\n // +--+--+\n lineClass = 'rst__lineHalfHorizontalRight rst__lineFullVertical';\n } else {\n // Simply connecting the line extending down to the next sibling on this level\n // +--+--+\n // | | |\n // | | |\n // | | |\n // +--+--+\n lineClass = 'rst__lineFullVertical';\n }\n } /*else if (listIndex === 0) {\n // Top-left corner of the tree, but has no siblings\n // +-----+\n // | |\n // | +--+\n // | |\n // +-----+\n lineClass = 'rst__lineHalfHorizontalRight';\n }*/ else if (i === scaffoldBlockCount - 1) {\n // The last or only node in this level of the tree\n // +--+--+\n // | | |\n // | +--+\n // | |\n // +-----+\n lineClass = 'rst__lineHalfVerticalTop rst__lineHalfHorizontalRight';\n }\n\n scaffold.push(\n <div\n key={`pre_${1 + i}`}\n style={{width: scaffoldBlockPxWidth}}\n className={classnames('rst__lineBlock', lineClass, rowDirectionClass)}\n />\n );\n\n if (treeIndex !== listIndex && i === swapDepth) {\n // This row has been shifted, and is at the depth of\n // the line pointing to the new destination\n let highlightLineClass = '';\n\n if (listIndex === swapFrom + swapLength - 1) {\n // This block is on the bottom (target) line\n // This block points at the target block (where the row will go when released)\n highlightLineClass = 'rst__highlightBottomLeftCorner';\n } else if (treeIndex === swapFrom) {\n // This block is on the top (source) line\n highlightLineClass = 'rst__highlightTopLeftCorner';\n } else {\n // This block is between the bottom and top\n highlightLineClass = 'rst__highlightLineVertical';\n }\n\n let style;\n if (rowDirection === 'rtl') {\n style = {\n width: scaffoldBlockPxWidth,\n right: scaffoldBlockPxWidth * i\n };\n } else {\n // Default ltr\n style = {\n width: scaffoldBlockPxWidth,\n left: scaffoldBlockPxWidth * i\n };\n }\n\n scaffold.push(\n <div\n // eslint-disable-next-line react/no-array-index-key\n key={i}\n style={style}\n className={classnames('rst__absoluteLineBlock', highlightLineClass, rowDirectionClass)}\n />\n );\n }\n });\n\n let style;\n const scaffoldWidth = scaffoldBlockPxWidth * scaffoldBlockCount;\n if (rowDirection === 'rtl') {\n style = {right: scaffoldWidth};\n } else {\n // Default ltr\n style = {left: scaffoldWidth};\n }\n style = {...style, width: `calc(100% - ${scaffoldWidth}px`};\n const width = `${scaffoldWidth + MIN_NODE_CONTENT_WIDTH}px`;\n const nodeStyle = {...otherProps.style, width};\n const treeNodeProps =\n this.context && this.context.generateTreeNodeProps && this.context.generateTreeNodeProps(this.props);\n return connectDropTarget(\n <div\n {...otherProps}\n className={classnames(\n 'rst__node',\n node.root && 'rst__root',\n rowDirectionClass,\n treeNodeProps && treeNodeProps.treeNodeClassName,\n !!draggedNode && draggedNode.nodeId !== node.nodeId && 'rst_node_hover_disabled'\n )}\n style={nodeStyle}\n >\n {scaffold}\n\n <div className=\"rst__nodeContent\" style={style}>\n {Children.map(children, (child) =>\n cloneElement(child, {\n isOver,\n canDrop,\n draggedNode\n })\n )}\n </div>\n </div>\n );\n }\n}\n\nTreeNode.defaultProps = {\n swapFrom: null,\n swapDepth: null,\n swapLength: null,\n canDrop: false,\n draggedNode: null,\n rowDirection: 'ltr'\n};\n\nTreeNode.propTypes = {\n treeIndex: PropTypes.number.isRequired,\n treeId: PropTypes.string.isRequired,\n swapFrom: PropTypes.number,\n swapDepth: PropTypes.number,\n swapLength: PropTypes.number,\n scaffoldBlockPxWidth: PropTypes.number.isRequired,\n lowerSiblingCounts: PropTypes.arrayOf(PropTypes.number).isRequired,\n\n listIndex: PropTypes.number.isRequired,\n children: PropTypes.node.isRequired,\n\n // Drop target\n connectDropTarget: PropTypes.func.isRequired,\n isOver: PropTypes.bool.isRequired,\n canDrop: PropTypes.bool,\n draggedNode: PropTypes.shape({}),\n\n // used in dndManager\n getPrevRow: PropTypes.func.isRequired,\n node: PropTypes.shape({}).isRequired,\n path: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])).isRequired,\n\n // rtl support\n rowDirection: PropTypes.string\n};\n\nexport default TreeNode;\n","// Can override the following:\n//\n// style: PropTypes.shape({}),\n// innerStyle: PropTypes.shape({}),\n// reactVirtualizedListProps: PropTypes.shape({}),\n// scaffoldBlockPxWidth: PropTypes.number,\n// slideRegionSize: PropTypes.number,\n// rowHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.func]),\n// treeNodeRenderer: PropTypes.func,\n// nodeContentRenderer: PropTypes.func,\n// placeholderRenderer: PropTypes.func,\n\nimport nodeContentRenderer from './node-content-renderer';\nimport treeNodeRenderer from './tree-node-renderer';\n\nexport const MIN_NODE_CONTENT_WIDTH = 250;\nconst scaffoldBlockPxWidth = 16;\nconst rowHeight = 28;\nconst slideRegionSize = 50;\nexport {nodeContentRenderer, treeNodeRenderer, scaffoldBlockPxWidth, rowHeight, slideRegionSize};\n","import PropTypes from 'prop-types';\nimport {EntityType, RelationType} from '@reltio/mdm-sdk';\n\nconst lazyGenericNodeType = () => GenericNodeType;\nconst lazyHierarchyNodeType = () => HierarchyNodeType;\n\nconst GenericNodeType = PropTypes.shape({\n nodeId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n children: PropTypes.arrayOf(lazyGenericNodeType),\n showParents: PropTypes.bool,\n expanded: PropTypes.bool,\n pending: PropTypes.bool,\n cycled: PropTypes.bool\n});\n\nconst HierarchyNodeType = PropTypes.shape({\n nodeId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n entity: EntityType,\n relation: RelationType,\n relations: PropTypes.arrayOf(RelationType),\n total: PropTypes.number,\n parent: PropTypes.arrayOf(PropTypes.string),\n directParentUri: PropTypes.string,\n children: PropTypes.arrayOf(lazyHierarchyNodeType),\n loading: PropTypes.bool,\n expanded: PropTypes.bool,\n showParents: PropTypes.bool,\n cycled: PropTypes.bool,\n pending: PropTypes.bool\n});\n\nconst ActivenessDateType = PropTypes.number;\n\nconst TreeType = PropTypes.shape({\n root: HierarchyNodeType,\n graphTypes: PropTypes.string,\n entitiesMap: PropTypes.object,\n title: PropTypes.string,\n activenessDate: ActivenessDateType,\n scrollTo: HierarchyNodeType,\n loading: PropTypes.bool\n});\n\nexport {ActivenessDateType, GenericNodeType, HierarchyNodeType, TreeType};\n","import React, {useCallback, useEffect, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport {GenericNodeType} from '../../constants/prop-types';\nimport {ReactSortableTreeUtils} from '@reltio/components';\nimport * as hierarchyTheme from './theme';\nimport {propOr} from 'ramda';\nimport {CellMeasurerCache} from 'react-virtualized';\n\nconst MeasuredNode = ({measure, registerChild, NodeRenderer, node, treeIndex}) => {\n useEffect(measure, [treeIndex]);\n return <NodeRenderer measure={measure} registerChild={registerChild} node={node} />;\n};\n\nMeasuredNode.propTypes = {\n measure: PropTypes.func,\n registerChild: PropTypes.func,\n NodeRenderer: PropTypes.func,\n node: GenericNodeType,\n treeIndex: PropTypes.number\n};\n\n// eslint-disable-next-line react/prop-types,react/display-name\nconst getMeasuredNode = ({NodeRenderer, node, treeIndex}) => ({measure, registerChild}) => (\n <MeasuredNode\n NodeRenderer={NodeRenderer}\n node={node}\n treeIndex={treeIndex}\n measure={measure}\n registerChild={registerChild}\n />\n);\n\nconst useRefreshableMeasurerCache = (treeDataRef, getNodeKey) => {\n const keyMapper = useCallback(\n (rawIndex) => {\n const nodeInfo = ReactSortableTreeUtils.getVisibleNodeInfoAtIndex({\n treeData: treeDataRef.current,\n index: rawIndex,\n getNodeKey\n });\n return getNodeKey({node: propOr({nodeId: -1}, 'node', nodeInfo)});\n },\n [getNodeKey, treeDataRef]\n );\n const [measurerCache] = useState(\n new CellMeasurerCache({\n fixedWidth: true,\n defaultHeight: hierarchyTheme.rowHeight,\n minHeight: hierarchyTheme.rowHeight,\n keyMapper\n })\n );\n const clearCache = () => {\n measurerCache.clearAll();\n };\n\n const onWindowResize = useCallback(clearCache, []);\n useEffect(() => {\n window.addEventListener('resize', onWindowResize);\n return () => {\n window.removeEventListener('resize', onWindowResize);\n };\n }, [onWindowResize]);\n return measurerCache;\n};\n\nexport {getMeasuredNode, useRefreshableMeasurerCache};\n","const getElementByNodeId = (nodeId) => {\n return document.querySelector(`[data-node-id=\"${nodeId}\"]`);\n};\n\nconst scrollToContainerElementByNodeId = (nodeId, scrollingContainer) => {\n const element = getElementByNodeId(nodeId);\n if (element) {\n const elementRect = element.getBoundingClientRect();\n const scrollingContainerRect = scrollingContainer.getBoundingClientRect();\n if (elementRect.right > scrollingContainerRect.right) {\n scrollingContainer.scrollLeft = elementRect.right - scrollingContainerRect.right;\n } else if (scrollingContainer.scrollLeft > 0 && elementRect.left < scrollingContainerRect.left) {\n scrollingContainer.scrollLeft =\n scrollingContainer.scrollLeft + elementRect.left - scrollingContainerRect.left;\n }\n } else {\n setTimeout(() => scrollToContainerElementByNodeId(nodeId, scrollingContainer), 0);\n }\n};\n\nconst getNodeKey = ({node, treeIndex}) => (treeIndex ? `${node.nodeId}-${treeIndex}` : `${node.nodeId}`);\n\nconst DefaultNodeRenderer = ({node}) => node.title || null;\n\nexport {scrollToContainerElementByNodeId, getNodeKey, DefaultNodeRenderer};\n","import React, {useCallback, useEffect, useMemo, useRef} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport PropTypes from 'prop-types';\nimport {assoc, identity, omit, path, pick, pipe} from 'ramda';\nimport {CellMeasurer} from 'react-virtualized';\nimport {useStyles} from './styles';\nimport {\n ReactSortableTree,\n ReactSortableTreeUtils,\n usePrevious,\n useRunOnceAfterValueInitialization\n} from '@reltio/components';\nimport * as hierarchyTheme from './theme';\nimport {GenericNodeType} from '../../constants/prop-types';\nimport {getMeasuredNode, useRefreshableMeasurerCache} from './measureHelpers';\nimport {DefaultNodeRenderer, getNodeKey, scrollToContainerElementByNodeId} from './nodeHelpers';\n\nconst theme = pick(\n ['nodeContentRenderer', 'treeNodeRenderer', 'scaffoldBlockPxWidth', 'rowHeight', 'slideRegionSize'],\n hierarchyTheme\n);\n\nconst Tree = ({\n NodeRenderer = DefaultNodeRenderer,\n root,\n scrollToNode,\n onChange,\n onRequestChildren,\n canDrag = false,\n canDrop,\n onScroll = identity,\n onNodeMoved = identity,\n inlineRoot\n}) => {\n const styles = useStyles();\n\n const treeData = useMemo(() => {\n const rootChildren = (root && root.children) || [];\n if (inlineRoot) {\n const inlinedRoot = pipe(omit(['children']), assoc('root', true))(root);\n return [inlinedRoot, ...rootChildren];\n } else {\n return rootChildren;\n }\n }, [root, inlineRoot]);\n\n const virtualizedListRef = useRef(null);\n const treeDataRef = useRef(null);\n const scrollTimerRef = useRef(null);\n treeDataRef.current = treeData;\n\n const getVirtualizedListInstance = useCallback(\n () => path(['current', 'wrappedInstance', 'current'], virtualizedListRef),\n []\n );\n\n const measurerCache = useRefreshableMeasurerCache(treeDataRef, getNodeKey);\n useRunOnceAfterValueInitialization(() => {\n // force applying of rows measurements after first grid render\n setTimeout(() => {\n const vList = getVirtualizedListInstance();\n vList && vList.forceUpdateGrid();\n }, 0);\n }, root);\n\n const getScrollingContainer = useCallback(\n () => path(['Grid', '_scrollingContainer'], getVirtualizedListInstance()),\n [getVirtualizedListInstance]\n );\n\n useEffect(() => {\n if (root && scrollToNode) {\n const results = ReactSortableTreeUtils.find({\n treeData,\n getNodeKey: getNodeKey,\n searchFocusOffset: 0,\n searchQuery: '',\n searchMethod: ({node}) => node === scrollToNode\n });\n const treeIndex = path(['matches', 0, 'treeIndex'], results);\n const vList = getVirtualizedListInstance();\n if (vList && treeIndex != null) {\n vList.scrollToRow(treeIndex);\n scrollTimerRef.current = setTimeout(() => {\n const scrollingContainer = getScrollingContainer();\n scrollToContainerElementByNodeId(scrollToNode.nodeId, scrollingContainer);\n }, 500);\n }\n }\n\n return () => {\n clearTimeout(scrollTimerRef.current);\n };\n }, [root, treeData, scrollToNode, getVirtualizedListInstance, getScrollingContainer]);\n\n const onSortableTreeChange = useCallback(\n (treeData) => {\n onChange && onChange({...root, children: inlineRoot ? treeData.slice(1) : treeData});\n },\n [onChange, root, inlineRoot]\n );\n\n //eslint-disable-next-line\n const nodeRenderWithMeasure = useCallback(\n ({node, treeIndex}) => (\n <CellMeasurer\n cache={measurerCache}\n columnIndex={0}\n key={getNodeKey({node})}\n rowIndex={treeIndex}\n parent={getVirtualizedListInstance()}\n >\n {getMeasuredNode({NodeRenderer, node, treeIndex})}\n </CellMeasurer>\n ),\n [NodeRenderer, measurerCache]\n );\n\n const generateNodeProps = useCallback(\n (rowInfo) => ({\n title: nodeRenderWithMeasure(rowInfo)\n }),\n [nodeRenderWithMeasure]\n );\n const previousTreeData = usePrevious(treeData);\n const onMoveNode = useCallback(\n (movedNodeInfo) => {\n const {prevPath, nextParentNode} = movedNodeInfo;\n let prevParentNode;\n if (prevPath.length > 1) {\n const parentPath = prevPath.slice(0, -1);\n const result = ReactSortableTreeUtils.getNodeAtPath({\n treeData: previousTreeData,\n getNodeKey: getNodeKey,\n path: parentPath\n });\n if (result) {\n prevParentNode = result.node;\n }\n } else {\n prevParentNode = root;\n }\n onNodeMoved({prevParentNode, ...movedNodeInfo, nextParentNode: nextParentNode || root});\n },\n [onNodeMoved, root, previousTreeData]\n );\n\n const handleOnLazyLoadChildren = useCallback(\n ({node}) => {\n onRequestChildren(node);\n },\n [onRequestChildren]\n );\n const handleResize = useCallback(() => {\n measurerCache.clearAll();\n }, [measurerCache]);\n\n return root ? (\n <ReactResizeDetector skipOnMount handleWidth onResize={handleResize}>\n <div className={styles.container}>\n {!inlineRoot && (\n <div className={styles.root}>\n <NodeRenderer node={root} isRoot={true} />\n </div>\n )}\n <div className={styles.tree}>\n <ReactSortableTree\n isVirtualized={true}\n canDrag={canDrag}\n canDrop={canDrop}\n treeData={treeData}\n theme={theme}\n generateNodeProps={generateNodeProps}\n rowHeight={measurerCache.rowHeight}\n reactVirtualizedListProps={{\n ref: virtualizedListRef,\n scrollToAlignment: 'end',\n onScroll\n }}\n onMoveNode={onMoveNode}\n onChange={onSortableTreeChange}\n onLazyLoadChildren={handleOnLazyLoadChildren}\n getNodeKey={getNodeKey}\n />\n </div>\n </div>\n </ReactResizeDetector>\n ) : null;\n};\n\nTree.propTypes = {\n NodeRenderer: PropTypes.elementType,\n root: GenericNodeType,\n canDrag: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n canDrop: PropTypes.func,\n scrollToNode: PropTypes.object,\n onChange: PropTypes.func,\n onRequestChildren: PropTypes.func,\n onNodeMoved: PropTypes.func,\n onScroll: PropTypes.func,\n inlineRoot: PropTypes.bool,\n getNodeKey: PropTypes.func\n};\n\nexport default Tree;\n","import {makeStyles} from '@mui/styles';\n\nexport const useCommonStyles = makeStyles(() => ({\n container: {\n fontSize: '13px',\n display: 'flex',\n paddingTop: '6px',\n position: 'relative'\n },\n title: {\n flexGrow: 1,\n width: 0,\n minHeight: '15px'\n }\n}));\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n loadingSpinner: {\n alignSelf: 'center',\n maxHeight: '16px',\n marginRight: '16px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport {useCommonStyles} from '../commonStyles';\nimport {useStyles} from './styles';\n\nimport {LoadingSpinner} from '@reltio/components';\n\nexport const LoadingNode = ({className, registerChild}) => {\n const commonStyles = useCommonStyles();\n const styles = useStyles();\n return (\n <div className={classnames(commonStyles.container, className)} ref={registerChild}>\n <LoadingSpinner className={styles.loadingSpinner} />\n <div className={commonStyles.title}>{i18n.text('Loading...')}</div>\n </div>\n );\n};\n\nLoadingNode.propTypes = {\n className: PropTypes.string,\n registerChild: PropTypes.func\n};\n\nexport default LoadingNode;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n wrapper: {\n width: '100%'\n },\n avatar: {\n height: '16px',\n width: '16px',\n marginRight: '8px'\n },\n avatarWithMultiParent: {\n cursor: 'pointer'\n },\n number: {\n color: 'rgba(0,0,0,0.54)',\n marginLeft: '13px'\n },\n multiParentIcon: {\n position: 'absolute',\n top: '15px',\n left: '-3px',\n cursor: 'pointer'\n },\n actionsBlock: {\n position: 'absolute',\n right: '0',\n top: '2px',\n backgroundColor: 'rgb(240,240,240)',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n left: '-40px',\n top: 0,\n width: '40px',\n height: '100%',\n background: 'linear-gradient(to right, rgba(240,240,240, 0.2), rgba(240,240,240, 1) 100%)',\n pointerEvents: 'none'\n }\n },\n actionsBlockWithOpenMenu: {\n backgroundColor: 'white',\n '&::after': {\n background: 'linear-gradient(to right, rgba(255,255,255, 0.2), rgba(255,255,255, 1) 100%)'\n }\n },\n actionsBlockForCheckedNode: {\n backgroundColor: 'rgb(224,238,249)',\n '&::after': {\n background: 'linear-gradient(to right, rgba(224,238,249, 0.2), rgba(224,238,249, 1) 100%)'\n }\n },\n regularNodeCheckbox: {\n padding: 0,\n marginRight: '16px',\n marginTop: '-4px',\n marginLeft: '-4px'\n },\n subtitle: {\n fontSize: '11px',\n letterSpacing: 0,\n lineHeight: '13px',\n paddingLeft: '24px',\n paddingTop: '2px',\n paddingBottom: '4px',\n wordBreak: 'break-word'\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: \"11\",\n height: \"11\",\n viewBox: \"0 0 12 12\",\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}, React.createElement(\"circle\", {\n strokeOpacity: \".54\",\n stroke: \"#000\",\n fill: \"#FFF\",\n cx: \"6\",\n cy: \"6\",\n r: \"5.5\"\n}), React.createElement(\"path\", {\n d: \"M5.536 4.641L4.505 3.61H8v3.495L6.874 5.98 5.509 7.344a1.995 1.995 0 00-.581 1.548l-.407-.408a2 2 0 010-2.828l1.015-1.015z\",\n fillOpacity: \".87\",\n fill: \"#000\"\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: \"10\",\n height: \"10\",\n viewBox: \"0 0 10 10\",\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: \".38\"\n}, React.createElement(\"path\", {\n d: \"M4.536 3.641L3.505 2.61H7v3.495L5.874 4.98 4.509 6.344a1.995 1.995 0 00-.581 1.548l-.407-.408a2 2 0 010-2.828l1.015-1.015z\",\n fill: \"#000\"\n}))));","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n fontSize: '13px',\n lineHeight: '16px',\n display: 'flex',\n marginBottom: '12px',\n alignItems: 'center',\n '&:last-child': {\n marginBottom: 0\n }\n },\n avatar: {\n height: '16px',\n width: '16px',\n marginRight: '6px',\n flexShrink: 0\n },\n loadingNode: {\n paddingTop: 0,\n width: '100%'\n }\n}));\n","import React, {useState} from 'react';\nimport {HierarchyNodeTitle} from '@reltio/components';\nimport LoadingNode from '../../LoadingNode/LoadingNode';\nimport ParentIcon from './parentIcon.svg';\nimport {useStyles} from './styles';\n\ntype Node = {\n pending: boolean;\n title?: string;\n viewId?: string;\n entityUri?: string;\n};\n\ntype Props = {\n node: Node;\n};\n\nexport const MultiParentBlockItem = ({node}: Props) => {\n const styles = useStyles();\n const [popperAnchor, setPopperAnchor] = useState<HTMLElement>();\n\n return (\n <div ref={setPopperAnchor} className={styles.root}>\n {node.pending ? (\n <LoadingNode className={styles.loadingNode} />\n ) : (\n <>\n <ParentIcon className={styles.avatar} />\n <HierarchyNodeTitle\n title={node.title}\n entityUri={node.entityUri}\n viewId={node.viewId}\n anchorEl={popperAnchor}\n />\n </>\n )}\n </div>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n multiParent: {\n position: 'relative',\n background: '#ffffff',\n border: '1px solid rgba(0,0,0,0.12)',\n marginLeft: '-5px',\n marginTop: '10px',\n padding: '10px 11px 9px 6px',\n '&:after,&:before': {\n bottom: '100%',\n left: '12px',\n border: 'solid transparent',\n content: \"' '\",\n height: 0,\n width: 0,\n position: 'absolute',\n 'pointer-events': 'none'\n },\n '&:after': {\n borderColor: 'rgba(255, 255, 255, 0)',\n borderBottomColor: '#ffffff',\n borderWidth: '6px',\n marginLeft: '-6px'\n },\n '&:before': {\n borderColor: 'rgba(220, 216, 245, 0)',\n borderBottomColor: 'rgba(0,0,0,0.12)',\n borderWidth: '7px',\n marginLeft: '-7px'\n }\n }\n}));\n","import React from 'react';\nimport {MultiParentBlockItem} from '../MultiParentBlockItem/MultiParentBlockItem';\nimport {useStyles} from './styles';\n\ntype Node = {\n pending: boolean;\n title?: string;\n viewId?: string;\n entityUri?: string;\n};\n\ntype Props = {\n showParents: boolean;\n additionalParents: Array<Node>;\n};\n\nconst MultiParentBlock = ({showParents, additionalParents}: Props) => {\n const styles = useStyles();\n\n return showParents && additionalParents.length > 0 ? (\n <div className={styles.multiParent}>\n {additionalParents.map((parent, i) => (\n <MultiParentBlockItem key={i} node={parent} />\n ))}\n </div>\n ) : null;\n};\n\nexport default MultiParentBlock;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n details: {\n margin: '1px 0 8px 24px'\n },\n loadingNode: {\n paddingTop: 0\n },\n detailLine: {\n display: 'flex'\n },\n detail: {\n flexGrow: 1,\n width: 0,\n wordWrap: 'break-word',\n lineHeight: '16px',\n paddingLeft: '8px',\n textIndent: '-8px'\n },\n detailLabel: {\n color: 'rgba(0, 0, 0, 0.6)',\n whiteSpace: 'nowrap',\n lineHeight: '16px',\n letterSpacing: 0,\n marginRight: '5px'\n },\n detailValue: {\n fontSize: '0.75rem',\n letterSpacing: 0\n }\n}));\n","let nodeCounter = 0;\nexport const generateId = () => nodeCounter++;\n","import {assoc, both, complement, curry, equals, findIndex, has, path, pipe, prop, when} from 'ramda';\nimport {nanoid} from 'nanoid';\nimport {\n getGraphType,\n generateNewRelationUri,\n mapTree,\n sortTreeChildren,\n createRelationTypesLabelsMap,\n wrapInArrayIfNeeded\n} from '@reltio/mdm-sdk';\nimport {generateId} from './generateId';\n\nexport const prepareTree = (tree, metadata) => {\n const {sortField, sortOrder, graphTypes} = tree;\n const root = mapTree(tree.root, {\n childrenProcessing: sortTreeChildren({\n sortField,\n sortOrder,\n typesLabelsMap: createRelationTypesLabelsMap(metadata)\n }),\n nodeProcessing: pipe(formatNodeFromTreeResponse, addSelfRelatedNode, expandNode)\n });\n const entitiesMap = buildEntitiesMapFromTree(root);\n const title = (getGraphType(metadata, graphTypes) || {}).label;\n return {...tree, root, entitiesMap, title};\n};\n\nexport const buildTreeFromHops = ({json, parentUri, sortField, sortOrder, metadata, isReversed}) => {\n const entitiesMap = processHopsResponse(json, isReversed);\n const rawSubTree = entitiesMap && breakCycles(entitiesMap[parentUri]);\n return mapTree(rawSubTree, {\n nodeProcessing: pipe(formatNodeFromHopResponse, addSelfRelatedNode),\n childrenProcessing: sortTreeChildren({\n sortField,\n sortOrder,\n typesLabelsMap: createRelationTypesLabelsMap(metadata)\n })\n });\n};\n\nconst convertParentProp = (parent) => (parent ? [].concat(parent) : []);\n\nconst getNodeUri = (node) => path(['entity', 'uri'], node);\n\nconst getRelationsProp = (relations) => (relations ? wrapInArrayIfNeeded(relations) : []);\n\nconst getRelationProp = (node, directParentUri) => {\n const relations = prop('relation', node);\n if (Array.isArray(relations)) {\n const parents = convertParentProp(node.parent);\n const parentIndex = findIndex(equals(directParentUri), parents);\n return path([parentIndex], relations);\n } else {\n return relations;\n }\n};\n\nexport const formatNodeFromTreeResponse = (node, directParent = {}) =>\n node.formatted\n ? node\n : {\n ...node,\n nodeId: generateId(),\n parent: convertParentProp(node.parent),\n directParentUri: getNodeUri(directParent),\n pending: !node.children && node.total > 0,\n formatted: true,\n relations: getRelationsProp(node.relation),\n relation: getRelationProp(node, getNodeUri(directParent))\n };\n\nconst formatNodeFromHopResponse = (node, directParent = {}) => {\n const {children, parent, traversedRelations, untraversedRelations, cycled, formatted, relation, ...entity} = node;\n if (formatted) {\n return node;\n }\n const total = traversedRelations + untraversedRelations - 1;\n const directParentUri = getNodeUri(directParent);\n const formattedNode = {\n nodeId: generateId(),\n cycled,\n entity,\n parent: convertParentProp(parent),\n directParentUri,\n total,\n pending: !cycled && !children && total > 0,\n formatted: true,\n relations: getRelationsProp(relation),\n relation: getRelationProp(node, directParentUri)\n };\n if (children) {\n formattedNode.children = children;\n formattedNode.pending = !cycled && total > children.length;\n }\n return formattedNode;\n};\n\nconst addSelfRelatedNode = (node) => {\n const children = node.children || [];\n const alreadyHasSelfRelatedNode = children.some(\n (child) => path(['entity', 'uri'], child) === node.entity.uri || child.uri === node.entity.uri\n );\n if (!alreadyHasSelfRelatedNode && !node.cycled && node.parent.includes(node.entity.uri)) {\n return {\n ...node,\n children: children.concat({\n ...node,\n nodeId: generateId(),\n directParentUri: node.entity.uri,\n total: 0,\n children: [],\n cycled: true\n })\n };\n }\n return node;\n};\n\nconst expandNode = when(both(has('children'), complement(prop('pending'))), assoc('expanded', true));\n\n/* eslint-disable no-unused-vars, @typescript-eslint/no-unused-vars */\nconst clearNodeForEntityMap = ({\n nodeId,\n relation,\n formatted,\n directParentUri,\n pending,\n children,\n total,\n ...clearedNode\n}) => clearedNode;\n/* eslint-enable */\n\nconst buildEntitiesMapFromTree = (node, result = {}) => {\n const key = getNodeUri(node);\n if (key) {\n result[key] = clearNodeForEntityMap(node);\n }\n if (node.children) {\n node.children.forEach((child) => buildEntitiesMapFromTree(child, result));\n }\n return result;\n};\n\nconst buildEntitiesMapFromHopsEntities = (entitiesMap) => {\n return Object.keys(entitiesMap).reduce((result, entityUri) => {\n const entity = formatNodeFromHopResponse(entitiesMap[entityUri]);\n result[entityUri] = clearNodeForEntityMap(entity);\n return result;\n }, {});\n};\n\nconst processHopsResponse = ({entities, relations}, isReversed) => {\n if (Array.isArray(entities)) {\n const entitiesMap = entities.reduce((result, entity) => {\n result[entity.uri] = entity;\n return result;\n }, {});\n (relations || []).forEach((relation) => {\n const parentObjectKey = isReversed ? 'endObject' : 'startObject';\n const childObjectKey = isReversed ? 'startObject' : 'endObject';\n const parent = entitiesMap[relation[parentObjectKey].objectURI];\n const child = entitiesMap[relation[childObjectKey].objectURI];\n parent.children = parent.children || [];\n if (!parent.children.includes(child)) {\n parent.children.push(child);\n }\n child.parent = child.parent || [];\n if (!child.relation) {\n child.relation = relation;\n }\n if (!child.parent.includes(parent.uri)) {\n child.parent.push(parent.uri);\n }\n });\n return entitiesMap;\n }\n};\n\nconst breakCycles = (root) => {\n /*\n Example of hierarchy with cycles:\n\n node\n |\n child\n |\n N-grand-child\n |\n [N-grand-child | child | node]\n\n Break the cycle by cloning the lowest-level node that causes cycle without its children\n */\n\n const queue = [\n {\n node: root,\n parent: null\n }\n ];\n const visitedNodes = [];\n for (const current of queue) {\n const {node, parent} = current;\n if (visitedNodes.includes(node)) {\n parent.children = parent.children.map((child) => {\n if (child === node) {\n return {\n ...node,\n cycled: true,\n children: []\n };\n } else {\n return child;\n }\n });\n } else {\n visitedNodes.push(node);\n if (node.children) {\n queue.push(...node.children.map((child) => ({node: child, parent: node})));\n }\n }\n }\n return root;\n};\n\nexport const buildEntitiesMapFromHops = curry((isReversed, json) =>\n pipe(processHopsResponse, buildEntitiesMapFromHopsEntities)(json, isReversed)\n);\n\nexport const isLoadingNode = (node) => node.loading;\nexport const isSelectedNode = (node, currentEntityUri) => getNodeUri(node) === currentEntityUri;\nexport const createLoadingNode = () => ({\n entity: {},\n loading: true,\n nodeId: nanoid()\n});\n\nexport const createNewTreeNode = () => ({\n nodeId: generateId(),\n relation: {\n uri: generateNewRelationUri(),\n attributes: {}\n }\n});\n","import {buildEntitiesMapFromHops, buildTreeFromHops} from './treeDataProvider';\nimport i18n from 'ui-i18n';\nimport {any, path, pipe, prop} from 'ramda';\nimport mdm, {profile, ui} from '@reltio/mdm-module';\nimport {getAllEntityTypesForGraphType, getHops, getRequestErrorMessage, isAbortError} from '@reltio/mdm-sdk';\nimport {generateId} from './generateId';\n\nconst treeActions = profile.trees.actions;\n\nexport const expandNodeCommand =\n ({id, nodeId}) =>\n (dispatch) => {\n dispatch(treeActions.nodeExpandedEvent({id, nodeId}));\n };\n\nexport const loadChildren =\n ({parentUri, parentId, graphTypes, activenessDate, id, isReversed, signal}) =>\n (dispatch, getState) => {\n const {sortField, sortOrder} = mdm.selectors.getTree(getState(), id);\n const metadata = mdm.selectors.getMetadata(getState());\n dispatch(treeActions.childrenLoading({id, parentId, nodeId: generateId()}));\n return getHops({uri: parentUri, graphTypes, activenessDate, signal})\n .then((json) => {\n const {children} = buildTreeFromHops({json, parentUri, sortField, sortOrder, metadata, isReversed});\n const entitiesSubMap = buildEntitiesMapFromHops(isReversed, json);\n dispatch(treeActions.childrenLoaded({id, children, parentId}));\n dispatch(treeActions.entitiesMappingLoaded({id, entitiesSubMap}));\n })\n .catch((error) => {\n if (!isAbortError(error)) {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n }\n dispatch(treeActions.cancelChildrenLoading({id, parentId}));\n });\n };\n\nexport const loadParents =\n ({uri, graphTypes, activenessDate, id, isReversed, nodeId, signal}) =>\n (dispatch) => {\n const createSubTreeEntitiesLoadedEvent = (entitiesSubMap) =>\n treeActions.entitiesMappingLoaded({id, entitiesSubMap});\n const parentsProcessing = pipe(\n buildEntitiesMapFromHops(isReversed),\n createSubTreeEntitiesLoadedEvent,\n dispatch\n );\n return getHops({uri, graphTypes, activenessDate, signal})\n .then(parentsProcessing)\n .catch((error) => {\n if (!isAbortError(error)) {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n }\n dispatch(treeActions.treeNodeChanged({id, node: {nodeId, showParents: false}}));\n });\n };\n\nexport const showCurrentEntity =\n ({id, uri}) =>\n (dispatch) => {\n dispatch(treeActions.currentEntityShownInTree({id, uri}));\n setTimeout(() => {\n dispatch(treeActions.resetScrollToNode(id));\n }, 0);\n };\n\nexport const scrollToTreeTop = (id) => (dispatch, getState) => {\n const tree = mdm.selectors.getTree(getState(), id);\n const uri = path(['root', 'children', 0, 'entity', 'uri'], tree);\n if (uri) {\n dispatch(showCurrentEntity({id, uri}));\n }\n};\n\nexport const hasEntityTypesWithSecondaryLabelPattern = pipe(\n getAllEntityTypesForGraphType,\n any(prop('secondaryLabelPattern'))\n);\n","import {always, cond, equals, has} from 'ramda';\nimport {profile} from '@reltio/mdm-module';\nimport {getRelation, NODE_EDITING_MODES, getPayloadForNodeApplyEditing} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {loadChildren} from './treeHelpers';\n\nconst treeActions = profile.trees.actions;\n\nexport const isRelationLoaded = has('attributes');\nexport const isNodeChecked = ({node, checkedNodes}) => has(node.nodeId, checkedNodes);\nexport const isEditorNode = has('editingMode');\n\nexport const hasEditorNode = (node = {}) => {\n return isEditorNode(node) || (has('children', node) && node.children.some(hasEditorNode));\n};\n\nconst loadRelationDetails =\n ({id, node}) =>\n (dispatch) => {\n const {nodeId, relation} = node;\n const currentRelation = Array.isArray(relation) ? relation[0] : relation;\n return isRelationLoaded(currentRelation)\n ? Promise.resolve(relation)\n : getRelation(currentRelation.uri).then((relationDetails) => {\n const detailedRelation = {...currentRelation, ...relationDetails};\n dispatch(\n treeActions.treeNodeChanged({\n id,\n node: {\n nodeId,\n relation: detailedRelation\n }\n })\n );\n return Promise.resolve(detailedRelation);\n });\n };\n\nexport const toggleRelationDetails =\n ({id, node}) =>\n (dispatch) => {\n const {nodeId, showDetails, relation} = node;\n const updatedNode = {\n nodeId,\n showDetails: !showDetails\n };\n dispatch(treeActions.treeNodeChanged({id, node: updatedNode}));\n\n const needDetails = !showDetails && !isRelationLoaded(relation) && relation;\n if (needDetails) {\n dispatch(loadRelationDetails({id, node}));\n }\n };\n\nexport const nodeStartEditing =\n ({id, node}) =>\n (dispatch) => {\n const {nodeId} = node;\n dispatch(treeActions.treeNodeChanged({id, node: {nodeId, loading: true}}));\n dispatch(loadRelationDetails({id, node})).then(() => {\n dispatch(treeActions.treeNodeEditingStarted({id, node}));\n });\n };\n\nexport const nodeStartAddingChild =\n ({id, node, newNode, isReversed, signal}) =>\n (dispatch, getState) => {\n dispatch(treeActions.treeNodeNewChildEditingStarted({id, node, newNode}));\n if (node.pending) {\n const store = getState();\n const {activenessDate, graphTypes} = mdm.selectors.getTree(store, id);\n dispatch(\n loadChildren({\n parentUri: node.entity.uri,\n parentId: node.nodeId,\n graphTypes,\n activenessDate,\n id,\n isReversed,\n signal\n })\n );\n }\n };\n\nexport const nodeCancelEditing =\n ({id, node}) =>\n (dispatch) => {\n const action = cond([\n [equals(NODE_EDITING_MODES.addingParent), always(treeActions.treeNodeNewParentEditingCanceled)],\n [equals(NODE_EDITING_MODES.addingChild), always(treeActions.treeNodeNewChildEditingCanceled)],\n [equals(NODE_EDITING_MODES.editing), always(treeActions.treeNodeEditingCanceled)]\n ])(node.editingMode);\n dispatch(action({id, node}));\n };\n\nexport const nodeApplyEditing =\n ({id, node, isReversed}) =>\n (dispatch, getState) => {\n const connection = mdm.selectors.getTreeEditingConnection(getState(), id, node.relation.uri);\n let dataAction;\n\n switch (node.editingMode) {\n case NODE_EDITING_MODES.addingParent:\n case NODE_EDITING_MODES.addingChild:\n dataAction = treeActions.treeRelationCreated;\n break;\n case NODE_EDITING_MODES.editing: {\n dataAction = treeActions.treeRelationChanged;\n break;\n }\n }\n dispatch(dataAction(getPayloadForNodeApplyEditing({node, connection, isReversed})));\n\n const treeAppearanceChangeActionCreator = cond([\n [equals(NODE_EDITING_MODES.addingParent), always(treeActions.treeNodeNewParentEditingApplied)],\n [equals(NODE_EDITING_MODES.addingChild), always(treeActions.treeNodeNewChildEditingApplied)],\n [equals(NODE_EDITING_MODES.editing), always(treeActions.treeNodeEditingApplied)]\n ])(node.editingMode);\n dispatch(treeAppearanceChangeActionCreator({id, node}));\n };\n\nexport const hasLoadingNode = (node) => {\n return node.loading || (has('children', node) && node.children.some(hasLoadingNode));\n};\n\nexport const getShowSecondaryLabelValue = (showSecondaryLabel = true, enabled) => enabled && showSecondaryLabel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {pick, prop} from 'ramda';\nimport i18n from 'ui-i18n';\n\nimport {useStyles} from './styles';\n\nimport LoadingNode from '../../LoadingNode/LoadingNode';\nimport {ACTIVENESS_ATTR_TYPES, DataTypes, getRelationType, MetadataType, RelationType} from '@reltio/mdm-sdk';\nimport Typography from '@mui/material/Typography';\nimport {DataTypeValue} from '@reltio/components';\nimport {isRelationLoaded} from '../../../../helpers/nodeHelpers';\n\nconst getRelationDetails = pick(['startDate', 'endDate']);\nconst attrTypes = [\n {\n uri: 'typeName',\n type: DataTypes.TYPE_STRING,\n label: i18n.text('Relationship')\n },\n ...ACTIVENESS_ATTR_TYPES\n];\n\nconst RelationDetails = ({showDetails, metadata, relation = {}}) => {\n const styles = useStyles();\n const relationshipData = getRelationDetails(relation);\n relationshipData.typeName = prop('label', getRelationType(metadata, relation.type));\n\n return showDetails && relation ? (\n <div className={styles.details}>\n {isRelationLoaded(relation) ? (\n attrTypes.map(\n (attrType) =>\n relationshipData[attrType.uri] && (\n <div key={attrType.uri} className={styles.detailLine}>\n <div className={styles.detail}>\n <Typography variant=\"caption\" gutterBottom className={styles.detailLabel}>\n {attrType.label + ': '}\n </Typography>\n <span className={styles.detailValue}>\n <DataTypeValue\n value={relationshipData[attrType.uri]}\n dataTypeDefinition={attrType}\n />\n </span>\n </div>\n </div>\n )\n )\n ) : (\n <LoadingNode key=\"loading-details\" className={styles.loadingNode} />\n )}\n </div>\n ) : null;\n};\n\nRelationDetails.propTypes = {\n showDetails: PropTypes.bool,\n relation: RelationType,\n metadata: MetadataType\n};\n\nexport default RelationDetails;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n addButton: {\n marginRight: '11px'\n },\n editButton: {\n marginRight: '13px'\n }\n}));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport i18n from 'ui-i18n';\nimport {identity} from 'ramda';\nimport EditIcon from '@mui/icons-material/Edit';\nimport InfoIcon from '@mui/icons-material/InfoOutlined';\nimport InfoIconSelected from '@mui/icons-material/InfoRounded';\n\nimport AddCircleIcon from '@mui/icons-material/AddCircle';\nimport DeleteIcon from '@mui/icons-material/Delete';\n\nimport {DropDownMenuButton, SmallIconButtonWithTooltip} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\nconst ActionsBlock = ({\n className,\n show,\n showDetails,\n onToggleRelationDetails,\n onMenuOpen,\n onMenuClose,\n onStartEditing,\n onAddParent,\n onAddChild,\n onDelete\n}) => {\n const styles = useStyles();\n const menuItems = [\n onAddParent && {\n text: i18n.text('Add Parent'),\n onClick: onAddParent\n },\n onAddChild && {\n text: i18n.text('Add Child'),\n onClick: onAddChild\n }\n ].filter(identity);\n\n return show && (onToggleRelationDetails || onStartEditing || onAddParent || onAddChild || onDelete) ? (\n <div className={className}>\n {onToggleRelationDetails && (\n <SmallIconButtonWithTooltip\n tooltipTitle={showDetails ? i18n.text('Hide details') : i18n.text('View details')}\n tooltipPlacement=\"bottom-end\"\n size=\"S\"\n icon={showDetails ? InfoIconSelected : InfoIcon}\n onClick={onToggleRelationDetails}\n />\n )}\n {menuItems.length > 0 && (\n <DropDownMenuButton\n buttonComponent={SmallIconButtonWithTooltip}\n buttonProps={{\n icon: AddCircleIcon,\n size: 'S',\n tooltipTitle: i18n.text('Add node'),\n className: styles.addButton\n }}\n menuId={'tree-node-actions'}\n menuItems={menuItems}\n onMenuOpen={onMenuOpen}\n onMenuClose={onMenuClose}\n />\n )}\n {onStartEditing && (\n <SmallIconButtonWithTooltip\n tooltipTitle={i18n.text('Edit node')}\n size=\"S\"\n icon={EditIcon}\n onClick={onStartEditing}\n className={styles.editButton}\n />\n )}\n {onDelete && (\n <SmallIconButtonWithTooltip\n tooltipTitle={i18n.text('Delete node')}\n size=\"S\"\n icon={DeleteIcon}\n onClick={onDelete}\n />\n )}\n </div>\n ) : null;\n};\n\nActionsBlock.propTypes = {\n show: PropTypes.bool,\n showDetails: PropTypes.bool,\n className: PropTypes.string,\n onMenuOpen: PropTypes.func,\n onMenuClose: PropTypes.func,\n onStartEditing: PropTypes.func,\n onAddParent: PropTypes.func,\n onAddChild: PropTypes.func,\n onDelete: PropTypes.func,\n onToggleRelationDetails: PropTypes.func\n};\n\nexport default ActionsBlock;\n","import {defaultTo, includes, path, pipe, prop} from 'ramda';\nimport {getValidatedSortField, getValidatedSortOrder} from '@reltio/mdm-sdk';\n\nexport const getGraphConfig = prop('graph');\nexport const getReverseRelationsConfig = pipe(getGraphConfig, path(['options', 'reverseRelations']));\nexport const getGraphTypeConfig = pipe(getGraphConfig, prop('type'));\n\nexport const getValidatedSortOrderFromConfig = pipe(prop('sortOrder'), getValidatedSortOrder);\n\nexport const getValidatedSortFieldFromConfig = pipe(prop('sortBy'), getValidatedSortField);\n\nexport const getIsSecondaryLabelEnabledFromConfig = pipe(prop('attributes'), defaultTo([]), includes('secondaryLabel'));\n","import {__, both, curry, isNil, path, pathOr, prop, reject} from 'ramda';\nimport {\n checkMetadataForCreate,\n checkMetadataForDelete,\n checkMetadataForUpdate,\n getAbsoluteImageUrl,\n getEndObjectTypeUri,\n getEntityType,\n getGraphType,\n getLabel,\n getPropWithInheritance,\n getRelationshipTypeUrisFromGraphType,\n getRelationType,\n getStartObjectTypeUri,\n isEditableMode as checkIsEditableMode,\n isInHierarchy\n} from '@reltio/mdm-sdk';\n\nimport {createNewTreeNode, isSelectedNode} from '../../../../helpers/treeDataProvider';\nimport {getGraphTypeConfig, getReverseRelationsConfig} from '../../../../helpers/configHelpers';\nimport {profile} from '@reltio/mdm-module';\nimport {nodeStartAddingChild, nodeStartEditing, toggleRelationDetails} from '../../../../helpers/nodeHelpers';\n\nconst treeActions = profile.trees.actions;\n\nconst getTypeGraphIcon = (absoluteImagePath, metadata, entityTypeUri) => {\n const entityType = getEntityType(metadata, entityTypeUri) || {};\n const entityTypeGraphIcon = getPropWithInheritance(metadata, entityType, 'typeGraphIcon');\n return entityTypeGraphIcon && getAbsoluteImageUrl(absoluteImagePath, entityTypeGraphIcon);\n};\n\nconst canEditNode = ({relation}, metadata, mode) =>\n relation ? checkMetadataForUpdate(mode, getRelationType(metadata, relation.type)) : false;\n\nconst canAddRelative = curry((direction, config, metadata, node, mode) => {\n const {entity = {}} = node;\n const isReversed = getReverseRelationsConfig(config) || false;\n const isChild = isReversed ? direction === 'parent' : direction === 'child';\n const nodeEntityTypeUri = entity.type;\n const graphTypeUri = getGraphTypeConfig(config);\n if (graphTypeUri) {\n const graphType = getGraphType(metadata, graphTypeUri);\n const relationTypeUris = getRelationshipTypeUrisFromGraphType(graphType) || [];\n const isNodeEntityInstanceOf = isInHierarchy(metadata, __, nodeEntityTypeUri);\n return relationTypeUris\n .map(getRelationType(metadata))\n .filter(both(checkMetadataForCreate(mode), checkMetadataForUpdate(mode)))\n .map(isChild ? getStartObjectTypeUri : getEndObjectTypeUri)\n .some(isNodeEntityInstanceOf);\n }\n return true;\n});\n\nconst canAddParentForNode = canAddRelative('parent');\nconst canAddChildForNode = canAddRelative('child');\n\nconst canDeleteNode = ({relation}, metadata, mode) =>\n relation ? checkMetadataForDelete(mode, getRelationType(metadata, relation.type)) : false;\n\nconst simpleNodePropsMapping = ({\n node,\n metadata,\n absoluteImagePath,\n currentEntityUri,\n mode,\n config = {},\n showSecondaryLabel,\n onParentsRequested,\n dispatch,\n signal\n}) => {\n const {entity, children, total, pending, showParents, nodeId} = node;\n const {id} = config;\n const isSelected = isSelectedNode(node, currentEntityUri);\n const isEditable = checkIsEditableMode(mode);\n const handleOnDelete = () => {\n const relationUri = path(['relation', 'uri'], node);\n relationUri && dispatch(treeActions.treeRelationRemoved({relationUri}));\n dispatch(treeActions.treeNodeRemoved({id, nodeId}));\n };\n\n const commonActionHandlers = {\n onToggleShowParents: (needLoadAdditionalParents) => {\n dispatch(treeActions.treeNodeChanged({id, node: {nodeId, showParents: !showParents}}));\n needLoadAdditionalParents && onParentsRequested(node);\n }\n };\n\n const actionHandlers = isEditable\n ? {\n onStartEditing: canEditNode(node, metadata, mode) ? () => dispatch(nodeStartEditing({id, node})) : null,\n onAddParent: canAddParentForNode(config, metadata, node, mode)\n ? () =>\n dispatch(treeActions.treeNodeNewParentEditingStarted({id, node, newNode: createNewTreeNode()}))\n : null,\n onAddChild: canAddChildForNode(config, metadata, node, mode)\n ? () =>\n dispatch(\n nodeStartAddingChild({\n id,\n isReversed: getReverseRelationsConfig(config),\n node,\n newNode: createNewTreeNode(),\n signal\n })\n )\n : null,\n onDelete: canDeleteNode(node, metadata, mode) ? handleOnDelete : null,\n ...commonActionHandlers\n }\n : {\n onToggleRelationDetails: () => dispatch(toggleRelationDetails({id, node})),\n ...commonActionHandlers\n };\n return {\n title: getLabel(entity.label),\n subtitle: showSecondaryLabel ? entity.secondaryLabel : undefined,\n number: children && !pending ? children.length : total,\n icon: getTypeGraphIcon(absoluteImagePath, metadata, entity.type),\n isSelectedNode: isSelected,\n entityUri: entity.uri,\n viewId: id,\n showDetails: node.showDetails && !isEditable,\n ...reject(isNil, actionHandlers)\n };\n};\nconst getAdditionalParents = ({node, entitiesMap, metadata, config, absoluteImagePath}) => {\n const {entity, directParentUri} = node;\n return pathOr([], [entity.uri, 'parent'], entitiesMap)\n .filter((parentUri) => parentUri !== directParentUri)\n .map((parentUri) => {\n const mapEntry = prop(parentUri, entitiesMap);\n return mapEntry\n ? simpleNodePropsMapping({node: mapEntry, config, metadata, absoluteImagePath})\n : {pending: true};\n });\n};\n\nconst nodePropsMapping = ({\n node,\n entitiesMap,\n metadata,\n absoluteImagePath,\n currentEntityUri,\n mode,\n config,\n showSecondaryLabel,\n onParentsRequested,\n signal,\n dispatch\n}) => ({\n ...node,\n relation: Array.isArray(node.relation) ? node.relation[0] : node.relation,\n ...simpleNodePropsMapping({\n node,\n metadata,\n absoluteImagePath,\n currentEntityUri,\n mode,\n config,\n showSecondaryLabel,\n onParentsRequested,\n signal,\n dispatch\n }),\n additionalParents: getAdditionalParents({\n node,\n config,\n entitiesMap,\n metadata,\n absoluteImagePath\n })\n});\n\nexport {nodePropsMapping, canDeleteNode, canAddChildForNode};\n","import {createContext} from 'react';\n\nexport const NodeContext = createContext({\n config: {},\n entitiesMap: {},\n onToggleNodeCheckbox: () => {},\n onParentsRequested: () => {},\n checkedNodes: {},\n canSelect: false\n});\n\nNodeContext.displayName = 'NodeContext';\n","import React, {memo, useCallback, useContext, useEffect, useState} from 'react';\nimport classnames from 'classnames';\nimport Avatar from '@mui/material/Avatar';\nimport Checkbox from '@mui/material/Checkbox';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {HierarchyNodeTitle, PageRequestsAbortingContext} from '@reltio/components';\nimport {identity} from 'ramda';\n\nimport {useStyles} from './styles';\nimport {useCommonStyles} from '../commonStyles';\nimport DEFAULT_ICON from './defaultTypeIcon.png';\nimport MultiParentIcon from './multiParentOverlap.svg';\n\nimport {HierarchyNodeType} from '../../../constants/prop-types';\nimport MultiParentBlock from '../components/MultiParentBlock/MultiParentBlock';\nimport RelationDetails from '../components/RelationDetails/RelationDetails';\nimport ActionsBlock from '../components/ActionsBlock/ActionsBlock';\nimport {nodePropsMapping} from './helpers/nodeMappingHelpers';\nimport {NodeContext} from '../nodeContext';\nimport {isNodeChecked, isRelationLoaded} from '../../../helpers/nodeHelpers';\nimport PropTypes from 'prop-types';\n\nconst onImageLoadFail = (e) => {\n e.target.src = DEFAULT_ICON;\n};\n\nexport const RegularNode = ({node = {}, isRoot, registerChild, measure = identity}) => { //NOSONAR\n const styles = useStyles();\n const [popperAnchor, setPopperAnchor] = useState();\n const commonStyles = useCommonStyles();\n const dispatch = useDispatch();\n const {config, entitiesMap, onToggleNodeCheckbox, checkedNodes, canSelect, onParentsRequested, showSecondaryLabel} =\n useContext(NodeContext);\n const absoluteImagePath = useSelector(mdm.selectors.getAbsoluteImagePath);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const {uri: currentEntityUri} = useSelector(mdm.selectors.getEntity);\n const mode = useSelector(mdm.selectors.getMode);\n const signal = useContext(PageRequestsAbortingContext);\n\n const {\n title,\n subtitle,\n number,\n icon,\n relation,\n showDetails,\n additionalParents = [],\n showParents,\n isSelectedNode,\n nodeId,\n viewId,\n entityUri,\n onStartEditing,\n onAddParent,\n onAddChild,\n onToggleRelationDetails,\n onDelete,\n onToggleShowParents\n } = nodePropsMapping({\n node,\n entitiesMap,\n metadata,\n absoluteImagePath,\n currentEntityUri,\n mode,\n config,\n showSecondaryLabel,\n onParentsRequested,\n signal,\n dispatch\n });\n\n const needLoadAdditionalParents = additionalParents.some((parent) => parent.pending);\n const [showControls, setShowControls] = useState(false);\n const showActionsBlock = useCallback(() => setShowControls(true), []);\n const hideActionsBlock = useCallback(() => setShowControls(false), []);\n const [openActionsMenu, setOpenActionsMenu] = useState(false);\n const showActionsMenu = useCallback(() => setOpenActionsMenu(true), []);\n const hideActionsMenu = useCallback(() => {\n setOpenActionsMenu(false);\n setShowControls(false);\n }, []);\n const hasMultiParents = additionalParents.length > 0;\n const toggleShowParents =\n hasMultiParents && onToggleShowParents ? onToggleShowParents.bind(null, needLoadAdditionalParents) : undefined;\n const toggleNodeCheckbox = useCallback(\n (event) =>\n onToggleNodeCheckbox({\n checked: event.target.checked,\n node\n }),\n [node, onToggleNodeCheckbox]\n );\n const checked = isNodeChecked({node, checkedNodes});\n const showCheckbox = false && canSelect && onDelete; // to move node you should have rights to delete it\n useEffect(measure, [\n showCheckbox,\n hasMultiParents,\n subtitle,\n !!onToggleRelationDetails,\n showDetails,\n number,\n showParents,\n showDetails && isRelationLoaded(relation),\n showParents && needLoadAdditionalParents,\n measure\n ]);\n return (\n <div\n className={styles.wrapper}\n data-node-id={nodeId}\n data-reltio-id={'tree-node-' + nodeId}\n onMouseEnter={showActionsBlock}\n onMouseLeave={hideActionsBlock}\n ref={registerChild}\n >\n <div ref={setPopperAnchor} className={commonStyles.container}>\n {showCheckbox ? (\n <Checkbox\n className={classnames(styles.regularNodeCheckbox)}\n checked={checked}\n onChange={toggleNodeCheckbox}\n color=\"primary\"\n />\n ) : (\n <Avatar\n className={classnames(styles.avatar, {[styles.avatarWithMultiParent]: hasMultiParents})}\n src={icon || DEFAULT_ICON}\n onError={onImageLoadFail}\n onClick={toggleShowParents}\n />\n )}\n\n {hasMultiParents && !showCheckbox && (\n <MultiParentIcon className={styles.multiParentIcon} onClick={toggleShowParents} />\n )}\n <div className={commonStyles.title}>\n <HierarchyNodeTitle\n title={title}\n isSelected={isSelectedNode}\n viewId={viewId}\n entityUri={entityUri}\n anchorEl={popperAnchor}\n />\n {!!number && <span className={styles.number}>{number}</span>}\n <ActionsBlock\n show={showControls || openActionsMenu}\n className={classnames(styles.actionsBlock, {\n [styles.actionsBlockWithOpenMenu]: openActionsMenu && !checked,\n [styles.actionsBlockForCheckedNode]: openActionsMenu && checked\n })}\n showDetails={showDetails}\n onToggleRelationDetails={relation && !isRoot ? onToggleRelationDetails : null}\n onMenuOpen={showActionsMenu}\n onMenuClose={hideActionsMenu}\n onStartEditing={!isRoot ? onStartEditing : null}\n onAddChild={onAddChild}\n onAddParent={onAddParent}\n onDelete={!isRoot ? onDelete : null}\n />\n </div>\n </div>\n {!showCheckbox && <MultiParentBlock showParents={showParents} additionalParents={additionalParents} />}\n {subtitle && <div className={styles.subtitle}>{subtitle}</div>}\n {onToggleRelationDetails && (\n <RelationDetails showDetails={showDetails} metadata={metadata} relation={relation} />\n )}\n </div>\n );\n};\n\nRegularNode.propTypes = {\n node: HierarchyNodeType,\n isRoot: PropTypes.bool,\n registerChild: PropTypes.func,\n measure: PropTypes.func\n};\n\nexport default memo(RegularNode);\n","import PropTypes from 'prop-types';\nimport React, {useMemo} from 'react';\nimport {\n MetadataType,\n RelationTypeType,\n getEntityType,\n getPropWithInheritance,\n getDirectionalLabelFromObject\n} from '@reltio/mdm-sdk';\nimport {RelationTypeSelector} from '@reltio/components';\nimport {ascend, evolve, identity, pipe, prop, propEq, propOr, tap} from 'ramda';\n\nconst getRelationTypesOptions = (relationTypes, isChild, metadata) => {\n const labelsMap = {};\n const addLabelInMap = (label) => (labelsMap[label] = propOr(0, label, labelsMap) + 1);\n const getDirectionalLabel = pipe(getDirectionalLabelFromObject, tap(addLabelInMap));\n const byLabel = ascend(prop('label'));\n const getEntityTypeWithInheritedIcon = (metadata, entityTypeUri) => {\n const entityType = getEntityType(metadata, entityTypeUri);\n const typeIcon = getPropWithInheritance(metadata, entityType, 'typeIcon');\n return {...entityType, typeIcon};\n };\n return relationTypes\n .map(({uri, label, startObject, endObject}) => ({\n label: {directionalLabel: getDirectionalLabel(isChild ? endObject : startObject), typeLabel: label},\n value: uri,\n startObject: {\n ...startObject,\n objectType: getEntityTypeWithInheritedIcon(metadata, startObject.objectTypeURI)\n },\n endObject: {...endObject, objectType: getEntityTypeWithInheritedIcon(metadata, endObject.objectTypeURI)}\n }))\n .map(\n evolve({\n label: ({directionalLabel, typeLabel}) => {\n return directionalLabel\n ? labelsMap[directionalLabel] > 1\n ? `${directionalLabel} (${typeLabel})`\n : directionalLabel\n : typeLabel;\n }\n })\n )\n .sort(byLabel);\n};\n\nconst fromEditorValue = (option) => option.value;\n\nconst toEditorValue = (value, relationsTypesOptions) => relationsTypesOptions.find(propEq('value', value));\n\nconst NodeRelationTypeSelector = ({\n value,\n relationTypes = [],\n isChild,\n onChange = identity,\n metadata,\n ...otherProps\n}) => {\n const relationsTypesOptions = useMemo(\n () => getRelationTypesOptions(relationTypes, isChild, metadata),\n [relationTypes, isChild, metadata]\n );\n\n return (\n <RelationTypeSelector\n value={toEditorValue(value, relationsTypesOptions)}\n options={relationsTypesOptions}\n onChange={pipe(fromEditorValue, onChange)}\n {...otherProps}\n />\n );\n};\n\nNodeRelationTypeSelector.propTypes = {\n className: PropTypes.string,\n value: PropTypes.string,\n relationTypes: PropTypes.arrayOf(RelationTypeType),\n isChild: PropTypes.bool,\n metadata: MetadataType,\n onChange: PropTypes.func\n};\n\nexport default NodeRelationTypeSelector;\n","import {__, allPass, curry, defaultTo, filter, isNil, map, pipe, reject} from 'ramda';\n\nimport {\n checkMetadataForCreate,\n checkMetadataForUpdate,\n getEndObjectTypeUri,\n getRelationshipTypeUrisFromGraphType,\n getRelationType,\n getStartObjectTypeUri,\n isInHierarchy\n} from '@reltio/mdm-sdk';\n\nexport const isAvailableRelationForRelatedEntity = curry((isChild, relatedEntity, metadata, relationType) => {\n const isRelatedEntityInstanceOf = isInHierarchy(metadata, __, relatedEntity.type);\n const getObjectUri = isChild ? getStartObjectTypeUri : getEndObjectTypeUri;\n return pipe(getObjectUri, isRelatedEntityInstanceOf)(relationType);\n});\n\nexport const getAllAvailableRelationTypes = (isChild, relatedEntity, metadata, graphType, mode) =>\n pipe(\n getRelationshipTypeUrisFromGraphType,\n defaultTo([]),\n map(getRelationType(metadata)),\n reject(isNil),\n filter(\n allPass([\n checkMetadataForCreate(mode),\n checkMetadataForUpdate(mode),\n isAvailableRelationForRelatedEntity(isChild, relatedEntity, metadata)\n ])\n )\n )(graphType);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n editorContainer: {\n width: 'calc(100% - 34px)',\n minWidth: '185px',\n backgroundColor: 'rgba(0,0,0,0.03)',\n padding: '16px 16px 8px 16px'\n },\n dense: {\n marginBottom: 0\n },\n item: {\n marginBottom: '20px'\n },\n actionButtons: {\n display: 'flex',\n justifyContent: 'flex-end'\n }\n}));\n","import React, {memo, useCallback, useContext, useEffect, useMemo} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport PropTypes from 'prop-types';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {equals, pipe} from 'ramda';\nimport Button from '@mui/material/Button';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {HierarchyNodeType} from '../../../constants/prop-types';\nimport {NodeContext} from '../nodeContext';\nimport {\n isAvailableRelationBetweenEntities,\n getActivenessAttributes,\n getSuitableEntityTypeUrisForRelationTypes,\n getErrorMessage,\n getGraphType,\n getHierarchyNodeEditorActiveError,\n getLabel,\n getRelationAttributesList,\n getRelationType,\n relationEditorAttributeTypesSelectionStrategy,\n validateHierarchyConnection,\n NODE_EDITING_MODES,\n isAttributeTypeError\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {\n AttributesList,\n EntitySelector,\n ErrorWrapper,\n isHighlightedErrorType,\n ScrollToElementContext,\n useDidUpdateEffect,\n useScrollToAttributeError\n} from '@reltio/components';\nimport NodeRelationTypeSelector from '../components/NodeRelationTypeSelector/NodeRelationTypeSelector';\nimport {getGraphTypeConfig, getReverseRelationsConfig} from '../../../helpers/configHelpers';\nimport {getAllAvailableRelationTypes} from './helpers';\nimport {nodeApplyEditing, nodeCancelEditing} from '../../../helpers/nodeHelpers';\n\nimport {useStyles} from './styles';\n\nconst treeActions = profile.trees.actions;\n\nexport const EditorNode = ({node = {}, measure, registerChild}) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n const {relatedEntity, relation: {uri: relationUri} = {}, editingMode, initialConnection} = node;\n const isAddingParent = editingMode === NODE_EDITING_MODES.addingParent;\n const {config} = useContext(NodeContext);\n const viewId = config.id;\n const isReversed = getReverseRelationsConfig(config) || false;\n const isChild = isReversed ? isAddingParent : !isAddingParent;\n\n const connection = useSelector((state) => mdm.selectors.getTreeEditingConnection(state, viewId, relationUri));\n const error = useSelector((state) =>\n getHierarchyNodeEditorActiveError(connection, mdm.selectors.getProfileErrors(state))\n );\n const allErrors = useSelector(mdm.selectors.getProfileErrors);\n\n const {relation, entity} = connection;\n const {attributes, type: relationTypeUri, crosswalks = []} = relation;\n const attributeListEntity = useMemo(\n () => ({\n attributes,\n ...getActivenessAttributes(relation)\n }),\n [attributes, relation]\n );\n const globalSearchRequestOptions = useSelector((state) =>\n mdm.selectors.getGlobalSearchRequestOptions(state, ['ovOnly'])\n );\n const metadata = useSelector(mdm.selectors.getMetadata);\n const mode = useSelector(mdm.selectors.getMode);\n\n const graphTypeUri = getGraphTypeConfig(config);\n const graphType = getGraphType(metadata, graphTypeUri) || {};\n const allAvailableRelationTypes = useMemo(\n () => getAllAvailableRelationTypes(isChild, relatedEntity, metadata, graphType, mode),\n [isChild, relatedEntity, metadata, graphType, mode]\n );\n const availableRelationTypes = useMemo(\n () =>\n entity && entity.uri\n ? allAvailableRelationTypes.filter(\n isAvailableRelationBetweenEntities(isChild, entity, relatedEntity, metadata)\n )\n : allAvailableRelationTypes,\n [entity, allAvailableRelationTypes, isChild, relatedEntity, metadata]\n );\n\n const availableEntityTypeUris = useMemo(\n () =>\n getSuitableEntityTypeUrisForRelationTypes(\n isChild,\n metadata,\n relationTypeUri ? [getRelationType(metadata, relationTypeUri)] : allAvailableRelationTypes\n ),\n [isChild, metadata, relationTypeUri, allAvailableRelationTypes]\n );\n\n const onRelationTypeChange = useCallback(\n (relationTypeUri) => {\n dispatch(treeActions.treeNodeRelationTypeChanged({id: viewId, node, relationTypeUri}));\n },\n [node, viewId, dispatch]\n );\n const onChangeEntity = useCallback(\n (entity) => {\n dispatch(treeActions.treeNodeEntityChanged({id: viewId, node, entity}));\n },\n [node, viewId, dispatch]\n );\n\n useEffect(() => {\n // autoselecting relation type on mount\n if (!relationTypeUri && allAvailableRelationTypes.length === 1) {\n onRelationTypeChange(allAvailableRelationTypes[0].uri);\n }\n }, [relationTypeUri, allAvailableRelationTypes, onRelationTypeChange]);\n\n useDidUpdateEffect(() => {\n // autoselecting relation type on entity change\n if (!relationTypeUri && availableRelationTypes.length >= 1) {\n onRelationTypeChange(availableRelationTypes[0].uri);\n }\n }, [relationTypeUri, entity, availableRelationTypes, onRelationTypeChange]);\n\n useEffect(measure, [\n viewId,\n connection,\n allErrors,\n relationTypeUri,\n allAvailableRelationTypes,\n !!onRelationTypeChange,\n entity,\n availableRelationTypes,\n measure\n ]);\n const relationAttrTypes = useMemo(\n () => getRelationAttributesList(metadata, relationTypeUri),\n [relationTypeUri, metadata]\n );\n const selectorCompatibleEntity = useMemo(\n () =>\n entity && {\n entityUri: entity.uri,\n entityType: entity.type,\n entityLabel: getLabel(entity.label)\n },\n [entity]\n );\n\n const onAddAttributes = useCallback(\n (params) => pipe(profile.actions.addAttributes, dispatch)(params.map((param) => ({...param, viewId}))),\n [viewId, dispatch]\n );\n\n const onChangeAttribute = useCallback(\n (params) => pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const onDeleteAttribute = useCallback(\n (params) => pipe(profile.actions.removeAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const validate = useCallback(() => {\n const errors = validateHierarchyConnection(metadata, connection);\n dispatch(profile.errors.actions.errorsSet(errors));\n return errors.length === 0;\n }, [connection, metadata, dispatch]);\n\n const onCancel = useCallback(() => {\n dispatch(nodeCancelEditing({id: viewId, node}));\n }, [node, viewId, dispatch]);\n\n const onApply = useCallback(() => {\n if (validate()) {\n dispatch(nodeApplyEditing({id: viewId, isReversed, node}));\n }\n }, [node, viewId, isReversed, dispatch, validate]);\n\n const canApply = !equals(initialConnection, connection) && relationTypeUri;\n const errorMessage = getErrorMessage(error);\n const highlightedError = useContext(ScrollToElementContext);\n const isErrorHighlighted = useMemo(\n () =>\n isHighlightedErrorType(highlightedError.type) &&\n isAttributeTypeError(highlightedError.element, relationUri, relationTypeUri),\n [relationUri, relationTypeUri, highlightedError]\n );\n const {ref, errorClassName} = useScrollToAttributeError({\n highlightedError: isErrorHighlighted ? highlightedError : null,\n isSimple: true\n });\n\n return (\n <div className={styles.editorContainer} ref={registerChild} data-reltio-id={'tree-node-' + node?.nodeId}>\n <ReactResizeDetector handleHeight={true} onResize={measure} />\n {allAvailableRelationTypes.length !== 1 && (\n <NodeRelationTypeSelector\n isChild={isChild}\n relationTypes={availableRelationTypes}\n className={styles.item}\n value={relationTypeUri}\n metadata={metadata}\n onChange={onRelationTypeChange}\n />\n )}\n <div ref={ref} className={errorClassName}>\n <ErrorWrapper errorMessage={errorMessage} className={styles.item}>\n <EntitySelector\n key={relationTypeUri}\n className={classnames({[styles.dense]: errorMessage})}\n entity={selectorCompatibleEntity || {}}\n entityTypesUris={availableEntityTypeUris}\n max={config.max || 20}\n globalSearchRequestOptions={globalSearchRequestOptions}\n mode={mode}\n onChange={onChangeEntity}\n metadata={metadata}\n attributeTypesSelectionStrategy={relationEditorAttributeTypesSelectionStrategy}\n />\n </ErrorWrapper>\n </div>\n {relationTypeUri && (\n <AttributesList\n className={styles.item}\n attrTypes={relationAttrTypes}\n entity={attributeListEntity}\n showEmptyEditors={false}\n crosswalks={crosswalks}\n mode={mode}\n parentUri={relationUri}\n onAddAttributes={onAddAttributes}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onDeleteAttribute}\n />\n )}\n <div className={styles.actionButtons}>\n <Button onClick={onCancel}>{i18n.text('Cancel')}</Button>\n <Button color=\"primary\" disabled={!canApply} onClick={onApply}>\n {i18n.text('Apply')}\n </Button>\n </div>\n </div>\n );\n};\n\nEditorNode.propTypes = {\n node: HierarchyNodeType,\n registerChild: PropTypes.func,\n measure: PropTypes.func\n};\n\nexport default memo(EditorNode);\n","import React from 'react';\nimport {always, cond, T} from 'ramda';\nimport LoadingNode from './LoadingNode/LoadingNode';\nimport RegularNode from './RegularNode/RegularNode';\nimport {isLoadingNode} from '../../helpers/treeDataProvider';\nimport EditorNode from './EditorNode/EditorNode';\nimport {isEditorNode} from '../../helpers/nodeHelpers';\n\nconst NodeTypes = {\n loading: 'loading',\n regular: 'regular',\n editor: 'editor'\n};\n\nconst getNodeType = cond([\n [isEditorNode, always(NodeTypes.editor)],\n [isLoadingNode, always(NodeTypes.loading)],\n [T, always(NodeTypes.regular)]\n]);\n\nexport default class NodesFactory {\n static build(props) {\n const {node} = props;\n const type = getNodeType(node);\n switch (type) {\n case NodeTypes.loading:\n return <LoadingNode {...props} />;\n case NodeTypes.regular:\n return <RegularNode {...props} />;\n case NodeTypes.editor:\n return <EditorNode {...props} />;\n }\n }\n}\n","import PropTypes from 'prop-types';\n\nimport NodesFactory from './NodesFactory';\nimport {HierarchyNodeType} from '../../constants/prop-types';\n\nexport const Node = (props) => NodesFactory.build(props);\n\nNode.propTypes = {\n node: HierarchyNodeType,\n onToggleShowParents: PropTypes.func\n};\n\nexport default Node;\n","import React, {memo, useCallback, useMemo} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {\n getRelationType,\n isEditableMode as checkIsEditableMode,\n isAvailableRelationBetweenEntities\n} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\nimport Tree from '../Tree/Tree';\nimport {TreeType} from '../../constants/prop-types';\nimport Node from '../Node/Node';\nimport {NodeContext} from '../Node/nodeContext';\nimport {TreeThemeContext} from '../Tree/treeThemeContext';\nimport {getShowSecondaryLabelValue, hasLoadingNode, isEditorNode, isNodeChecked} from '../../helpers/nodeHelpers';\nimport mdm from '@reltio/mdm-module';\nimport {canAddChildForNode, canDeleteNode} from '../Node/RegularNode/helpers/nodeMappingHelpers';\nimport {getReverseRelationsConfig, getIsSecondaryLabelEnabledFromConfig} from '../../helpers/configHelpers';\n\nconst HierarchyPanel = ({\n className,\n config,\n tree = {},\n onChildrenRequested,\n onParentsRequested,\n onTreeChanged,\n onTreeScroll,\n onNodeMoved,\n onToggleNodeCheckbox,\n checkedNodes,\n mode,\n isGraphView\n}) => {\n const styles = useStyles({isGraphView});\n const isEditableMode = checkIsEditableMode(mode);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const nodeContextValue = useMemo(\n () => ({\n config,\n entitiesMap: tree.entitiesMap,\n onToggleNodeCheckbox,\n checkedNodes,\n canSelect: isEditableMode,\n onParentsRequested,\n showSecondaryLabel: getShowSecondaryLabelValue(\n tree.showSecondaryLabel,\n getIsSecondaryLabelEnabledFromConfig(config)\n )\n }),\n [\n checkedNodes,\n config,\n isEditableMode,\n onToggleNodeCheckbox,\n tree.entitiesMap,\n tree.showSecondaryLabel,\n onParentsRequested\n ]\n );\n\n const treeThemeContextValue = useMemo(\n () => ({\n generateTreeNodeProps: ({node}) => ({\n treeNodeClassName: classnames({\n [styles.checkedNode]: isNodeChecked({node, checkedNodes}),\n [styles.editorNode]: isEditorNode(node)\n })\n })\n }),\n [checkedNodes, styles]\n );\n\n const canDrag = useCallback(\n ({node}) =>\n isEditableMode && !isEditorNode(node) && !hasLoadingNode(node) && canDeleteNode(node, metadata, mode),\n [isEditableMode, metadata, mode]\n );\n const canDrop = useCallback(\n ({nextParent, node}) => {\n const isChild = !getReverseRelationsConfig(config);\n const relatedNode = nextParent === null ? tree.root : nextParent;\n const isValidRelatedNode = relatedNode && !relatedNode.loading && relatedNode.entity;\n return (\n isValidRelatedNode &&\n canAddChildForNode(config, metadata, relatedNode) &&\n isAvailableRelationBetweenEntities(\n isChild,\n node.entity,\n relatedNode.entity,\n metadata,\n getRelationType(metadata, node.relation.type)\n )\n );\n },\n [config, metadata, tree.root]\n );\n return (\n <div className={classnames(styles.panel, className)}>\n <div className={styles.treeWrapper}>\n <TreeThemeContext.Provider value={treeThemeContextValue}>\n <NodeContext.Provider value={nodeContextValue}>\n <Tree\n NodeRenderer={Node}\n onChange={onTreeChanged}\n canDrag={canDrag}\n canDrop={canDrop}\n root={tree.root}\n scrollToNode={tree.scrollTo}\n onScroll={onTreeScroll}\n onRequestChildren={onChildrenRequested}\n onNodeMoved={onNodeMoved}\n inlineRoot={!!tree.root && isEditorNode(tree.root)}\n />\n </NodeContext.Provider>\n </TreeThemeContext.Provider>\n </div>\n </div>\n );\n};\n\nHierarchyPanel.propTypes = {\n className: PropTypes.string,\n tree: TreeType,\n onChildrenRequested: PropTypes.func,\n onParentsRequested: PropTypes.func,\n onTreeChanged: PropTypes.func,\n onTreeScroll: PropTypes.func,\n onNodeMoved: PropTypes.func,\n onToggleNodeCheckbox: PropTypes.func,\n checkedNodes: PropTypes.object,\n mode: PropTypes.string,\n config: PropTypes.object,\n isGraphView: PropTypes.bool\n};\n\nexport default memo(HierarchyPanel);\n","import React from 'react';\nimport {GraphType} from '@reltio/mdm-sdk';\nimport {SelectorWithOnlyOptionAutoSelect} from '@reltio/components';\n\ntype Props = {\n value: string;\n onChange: (value: string) => void;\n graphTypes: GraphType[];\n className?: string;\n};\n\nconst GraphTypeSelector = ({value, onChange, graphTypes, className}: Props) => {\n return (\n <SelectorWithOnlyOptionAutoSelect\n classes={{\n root: className\n }}\n value={value}\n onChange={onChange}\n options={graphTypes.map(({uri, label}) => ({value: uri, label}))}\n />\n );\n};\nexport default GraphTypeSelector;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe} from 'ramda';\nimport {DateEditor} from '@reltio/components';\n\ntype Props = {\n value: number;\n onChange: (value: number) => void;\n className?: string;\n fullWidth?: boolean;\n};\n\nconst ActivenessDateControl = ({value, onChange, className, fullWidth}: Props) => {\n const handleChange = pipe((date) => date && date.getTime(), onChange);\n\n return (\n <DateEditor\n value={value}\n label={i18n.text('Effective date')}\n onChange={handleChange}\n slotProps={{\n textField: {size: 'small', className, fullWidth}\n }}\n />\n );\n};\n\nexport default ActivenessDateControl;\n","import {makeStyles} from '@mui/styles';\n\nconst popupHorizontalPadding = '23px';\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: popupHorizontalPadding,\n paddingRight: popupHorizontalPadding,\n minWidth: '245px',\n maxWidth: '308px',\n width: '40%'\n },\n title: {\n marginBottom: '30px'\n },\n sortControls: {\n display: 'flex',\n alignItems: 'center'\n },\n sortSelectorRoot: {\n flex: 1,\n padding: '11px 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 checkboxControlRoot: {\n marginTop: '6px',\n marginLeft: '-12px'\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n },\n divider: {\n borderColor: 'rgba(0,0,0,0.1)',\n margin: `19px -${popupHorizontalPadding}`\n }\n}));\n","import React, {useRef, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport Typography from '@mui/material/Typography';\nimport Popover from '@mui/material/Popover';\nimport Button from '@mui/material/Button';\nimport FilterIcon from '@mui/icons-material/FilterList';\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport Divider from '@mui/material/Divider';\n\nimport {useStyles} from './styles';\n\nimport {DropDownEditor, SmallIconButtonWithTooltip, withTooltip} from '@reltio/components';\nimport {TREE_SORT_FIELD_VALUES, TREE_SORT_ORDER_VALUES} from '@reltio/mdm-sdk';\n\nexport const FormControlLabelWithTooltip = withTooltip(FormControlLabel);\n\nconst SORTING_OPTIONS = [\n {\n label: i18n.text('Relationship type label'),\n value: TREE_SORT_FIELD_VALUES.relationTypeLabel\n },\n {\n label: i18n.text('Entity label'),\n value: TREE_SORT_FIELD_VALUES.entityLabel\n }\n];\n\nconst FilterSortButton = ({\n className,\n sortField,\n sortOrder,\n onSort,\n showSecondaryLabel,\n hasSecondaryLabelPattern,\n onShowSecondaryLabelChange\n}) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const [isOpen, setIsOpen] = useState(false);\n const isAsc = sortOrder === TREE_SORT_ORDER_VALUES.asc;\n\n const togglePopup = () => setIsOpen((open) => !open);\n const toggleSortOrder = () => {\n onSort({\n sortField,\n sortOrder: isAsc ? TREE_SORT_ORDER_VALUES.desc : TREE_SORT_ORDER_VALUES.asc\n });\n };\n\n const changeSortField = (newSortField) => {\n onSort({\n sortField: newSortField,\n sortOrder\n });\n };\n\n const tooltipTitle = !hasSecondaryLabelPattern\n ? i18n.text(\"Entity types in this hierarchy don't have any secondary label pattern defined.\")\n : '';\n\n return (\n <>\n <Button\n data-reltio-id=\"filter-sort-button\"\n ref={buttonRef}\n classes={{root: classnames(styles.triggerButton, className)}}\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 {onShowSecondaryLabelChange && (\n <>\n <Typography className={styles.viewOptionsTitle} variant=\"h6\">\n {i18n.text('View options')}\n </Typography>\n <FormControlLabelWithTooltip\n tooltipTitle={tooltipTitle}\n showForDisabled\n classes={{\n root: styles.checkboxControlRoot,\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showSecondaryLabel || false}\n onChange={(e) => onShowSecondaryLabelChange(e.target.checked)}\n />\n }\n label={i18n.text('Display secondary label')}\n disabled={hasSecondaryLabelPattern}\n />\n <Divider className={styles.divider} />\n </>\n )}\n <Typography className={styles.title} variant=\"h6\">\n {i18n.text('Sort by')}\n </Typography>\n <div className={styles.sortControls}>\n <DropDownEditor\n entries={SORTING_OPTIONS}\n TextFieldProps={{variant: 'filled'}}\n classes={{\n root: styles.sortSelectorRoot,\n menuItem: styles.sortSelectorMenuItem\n }}\n fullWidth\n disableUnderline\n value={sortField}\n onChange={changeSortField}\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 </Popover>\n </>\n );\n};\n\nFilterSortButton.propTypes = {\n className: PropTypes.string,\n sortField: PropTypes.string,\n sortOrder: PropTypes.string,\n onSort: PropTypes.func,\n showSecondaryLabel: PropTypes.bool,\n hasSecondaryLabelPattern: PropTypes.bool,\n onShowSecondaryLabelChange: PropTypes.func\n};\n\nexport default FilterSortButton;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n text: {\n fontSize: '12px',\n lineHeight: '14px',\n letterSpacing: 0,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n textContainer: {\n maxWidth: 'calc(100% - 13px)'\n },\n separator: {\n marginLeft: '4px',\n marginRight: '4px'\n }\n}));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\n\nimport MUIBreadcrumbs from '@mui/material/Breadcrumbs';\nimport Link from '@mui/material/Link';\nimport Typography from '@mui/material/Typography';\n\nimport {useStyles} from './styles';\n\nconst Breadcrumbs = ({items = [], ...otherProps}) => {\n const styles = useStyles();\n\n const renderItem = (item, index, items) => {\n const {label, href, onClick} = item;\n const color = index === items.length - 1 ? 'textPrimary' : 'textSecondary';\n\n return onClick || href ? (\n <Link\n key={index}\n color={color}\n classes={{root: styles.text}}\n href={href}\n onClick={onClick}\n underline=\"hover\"\n >\n {label}\n </Link>\n ) : (\n <Typography key={index} href={href} color={color} classes={{root: styles.text}}>\n {label}\n </Typography>\n );\n };\n\n return (\n <MUIBreadcrumbs\n aria-label={i18n.text('Breadcrumb')}\n expandText={i18n.text('Show path')}\n classes={{li: styles.textContainer, separator: classnames(styles.text, styles.separator)}}\n {...otherProps}\n >\n {items.map(renderItem)}\n </MUIBreadcrumbs>\n );\n};\n\nconst BreadcrumbsType = PropTypes.shape({\n label: PropTypes.string.isRequired,\n href: PropTypes.string,\n onClick: PropTypes.func\n});\n\nBreadcrumbs.propTypes = {\n items: PropTypes.arrayOf(BreadcrumbsType)\n};\n\nexport default Breadcrumbs;\n","import {anyPass, filter, has, isEmpty, map, pick, pipe, reject} from 'ramda';\nimport mdm, {profile} from '@reltio/mdm-module';\n\nconst treeActions = profile.trees.actions;\n\nconst fieldsToSave = ['showSecondaryLabel'];\n\nconst getStateToSave = pipe(\n filter(anyPass([has('root'), ...fieldsToSave.map((field) => has(field))])),\n map(pick(fieldsToSave)),\n reject(isEmpty)\n);\n\nexport const saveTreesPreferences = (id) => (dispatch, getState) => {\n const store = getState();\n const trees = mdm.selectors.getTrees(store);\n const state = getStateToSave(trees);\n dispatch(\n treeActions.treesStateSaved({\n id,\n state\n })\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n filtersBar: {\n paddingLeft: '16px',\n display: 'flex',\n alignItems: 'center',\n marginTop: '8px',\n marginBottom: '4px',\n height: '48px'\n },\n activenessDate: {\n flex: 1,\n margin: 0\n },\n filterSortButton: {\n flexShrink: 0,\n margin: '0 12px 0 16px'\n },\n breadcrumbs: {\n padding: '8px 24px',\n backgroundColor: 'rgba(0,0,0,0.03)'\n },\n graphTypeSelector: {\n margin: '0 10px 15px 24px',\n overflow: 'hidden'\n }\n});\n","import React, {useCallback, useEffect, useMemo} from 'react';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n HierarchyTreeViewConfig,\n Tree,\n createRelationTypesLabelsMap,\n debounce,\n getLabel,\n getPathByEntityUri\n} from '@reltio/mdm-sdk';\nimport GraphTypeSelector from '../GraphTypeSelector/GraphTypeSelector';\nimport ActivenessDateControl from '../ActivenessDateControl/ActivenessDateControl';\nimport FilterSortButton from '../FilterSortButton/FilterSortButton';\nimport Breadcrumbs from '../Breadcrumbs/Breadcrumbs';\nimport {hasEntityTypesWithSecondaryLabelPattern, scrollToTreeTop} from '../../helpers/treeHelpers';\nimport {saveTreesPreferences} from '../../helpers/saveStateHelpers';\nimport {\n getIsSecondaryLabelEnabledFromConfig,\n getValidatedSortFieldFromConfig,\n getValidatedSortOrderFromConfig\n} from '../../helpers/configHelpers';\nimport {getShowSecondaryLabelValue} from '../../helpers/nodeHelpers';\n\nimport {useStyles} from './styles';\n\nconst PREFERENCES_UPDATE_DEBOUNCE_INTERVAL = 500;\n\ntype Props = {\n tree?: Tree;\n config: HierarchyTreeViewConfig;\n entityUri: string;\n activenessDate: number;\n graphType: string;\n onChangeGraphType: (graphType: string) => void;\n};\n\nexport const HierarchyTreeToolbar = ({\n tree,\n config,\n entityUri,\n activenessDate,\n graphType,\n onChangeGraphType\n}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n const graphTypes = [];\n\n const {id, showPath} = config;\n const {sortField, sortOrder, showSecondaryLabel} = tree || {};\n const metadata = useSelector(mdm.selectors.getMetadata);\n\n const isSecondaryLabelEnabled = getIsSecondaryLabelEnabledFromConfig(config);\n const showSecondaryLabelValue = getShowSecondaryLabelValue(showSecondaryLabel, isSecondaryLabelEnabled);\n const hasSecondaryLabelPattern = hasEntityTypesWithSecondaryLabelPattern(metadata, graphType);\n\n const nodePath = useMemo(\n () =>\n getPathByEntityUri((tree || {}).root, entityUri).map((node) => ({\n label: getLabel(node?.entity?.label)\n })),\n [tree, entityUri]\n );\n\n const savePreferences = useCallback(\n debounce(() => dispatch(saveTreesPreferences(id)), PREFERENCES_UPDATE_DEBOUNCE_INTERVAL),\n [id]\n );\n\n const onShowSecondaryLabelChange = useCallback(\n (show) => {\n dispatch(profile.trees.actions.treeSecondaryLabelShown({id, show}));\n savePreferences();\n },\n [id, dispatch, savePreferences]\n );\n\n const onTreeSort = useCallback(\n ({sortField, sortOrder}) => {\n dispatch(\n profile.trees.actions.treeSorted({\n id,\n typesLabelsMap: createRelationTypesLabelsMap(metadata),\n sortField,\n sortOrder\n })\n );\n dispatch(scrollToTreeTop(id));\n },\n [id, metadata, dispatch]\n );\n\n const onTreeActivenessDateChange = useCallback(\n (activenessDate) => {\n dispatch(profile.trees.actions.activenessDateChanged({id, activenessDate}));\n },\n [id, dispatch]\n );\n\n useEffect(() => {\n if (!sortField || !sortOrder) {\n onTreeSort({\n sortField: getValidatedSortFieldFromConfig(config),\n sortOrder: getValidatedSortOrderFromConfig(config)\n });\n }\n }, [onTreeSort, sortField, sortOrder, config]);\n\n return (\n <>\n {graphTypes.length > 0 && (\n <GraphTypeSelector\n className={styles.graphTypeSelector}\n value={graphType}\n onChange={onChangeGraphType}\n graphTypes={graphTypes}\n />\n )}\n <div className={styles.filtersBar}>\n <ActivenessDateControl\n className={styles.activenessDate}\n value={activenessDate}\n onChange={onTreeActivenessDateChange}\n fullWidth\n />\n <FilterSortButton\n sortField={sortField}\n sortOrder={sortOrder}\n className={styles.filterSortButton}\n onSort={onTreeSort}\n showSecondaryLabel={showSecondaryLabelValue}\n onShowSecondaryLabelChange={isSecondaryLabelEnabled ? onShowSecondaryLabelChange : undefined}\n hasSecondaryLabelPattern={hasSecondaryLabelPattern}\n />\n </div>\n {showPath && nodePath.length > 0 && <Breadcrumbs items={nodePath} className={styles.breadcrumbs} />}\n </>\n );\n};\n","import {useCallback, useEffect, useRef} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useDidUpdateEffect, usePrevious, useSafePromise} from '@reltio/components';\n\nimport i18n from 'ui-i18n';\nimport {pipe, pick} from 'ramda';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {\n Entity,\n getRequestErrorMessage,\n getTree,\n hasEntityInTree,\n isAbortError,\n updateTreesWithNewEntity\n} from '@reltio/mdm-sdk';\nimport {prepareTree} from './treeDataProvider';\nimport {showCurrentEntity} from './treeHelpers';\nimport {hasEditorNode} from './nodeHelpers';\nimport mdmModule from '@reltio/mdm-module';\n\nconst treeActions = profile.trees.actions;\n\ntype TreeLoaderProps = {\n entityUri: string;\n id: string;\n graphTypes: string;\n activenessDate: number;\n isReversed: boolean;\n enabled: boolean;\n signal: AbortSignal;\n};\nconst useTreeLoader = ({entityUri, id, graphTypes, activenessDate, isReversed, enabled, signal}: TreeLoaderProps) => {\n const safePromise = useSafePromise();\n const dispatch = useDispatch();\n const timerRef = useRef(null);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const tree = useSelector((state) => mdm.selectors.getTree(state, id)) || {};\n const {root, isReversed: isCurrentReversed, graphTypes: currentGraphTypes} = tree;\n const previousActivenessDate = usePrevious(activenessDate) || activenessDate;\n const showCurrentEntityDelayed = useCallback(() => {\n timerRef.current = setTimeout(() => dispatch(showCurrentEntity({id, uri: entityUri})), 100);\n }, [id, entityUri, dispatch]);\n const hasRoot = !!root;\n const entity: Entity = useSelector(mdmModule.selectors.getEntity);\n useDidUpdateEffect(() => {\n const updatedTrees = updateTreesWithNewEntity(pick(['uri', 'label', 'secondaryLabel', 'type'], entity), {\n [id]: tree\n });\n if (updatedTrees.length) {\n dispatch(treeActions.treeChanged({id, tree: updatedTrees[0].root}));\n }\n }, [entity?.updatedTime]);\n useEffect(() => {\n if (enabled && hasRoot) {\n showCurrentEntityDelayed();\n return () => clearTimeout(timerRef.current);\n }\n }, [enabled, showCurrentEntityDelayed, hasRoot]);\n useEffect(() => {\n if (enabled) {\n const createTreeLoadedEvent = (tree) =>\n treeActions.treeLoaded({id, tree, graphTypes, activenessDate, isReversed});\n const treeProcessing = pipe(prepareTree, createTreeLoadedEvent, dispatch);\n const shouldUpdate =\n !hasEntityInTree(root, entityUri) ||\n isCurrentReversed !== isReversed ||\n previousActivenessDate !== activenessDate ||\n currentGraphTypes !== graphTypes ||\n hasEditorNode(root);\n if (shouldUpdate) {\n dispatch(treeActions.treeLoading(id));\n clearTimeout(timerRef.current);\n safePromise(getTree({uri: entityUri, graphTypes, activenessDate, isReversed, signal}))\n .then((tree) => treeProcessing({...tree, graphTypes}, metadata))\n .then((_) => showCurrentEntityDelayed())\n .catch((e) => {\n dispatch(\n treeActions.treeLoadedWithError({\n id,\n errorMessage: isAbortError(e)\n ? ' ' // error message can't be empty\n : getRequestErrorMessage(e, i18n.text('Something went wrong'))\n })\n );\n console.warn(e);\n });\n }\n }\n }, [\n entityUri,\n graphTypes,\n activenessDate,\n id,\n metadata,\n isReversed,\n enabled,\n safePromise,\n dispatch,\n showCurrentEntityDelayed,\n isCurrentReversed,\n currentGraphTypes,\n previousActivenessDate\n ]);\n};\n\nexport default useTreeLoader;\n","import {useEffect} from 'react';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {isTempUri, NODE_EDITING_MODES} from '@reltio/mdm-sdk';\nimport {prepareTree} from './treeDataProvider';\nimport {pipe} from 'ramda';\n\nconst treeActions = profile.trees.actions;\n\ntype NewEntityTreeProps = {\n entityUri: string;\n id: string;\n graphTypes: string;\n activenessDate: number;\n isReversed: boolean;\n};\n\nconst useNewEntityTree = ({id, entityUri, graphTypes, activenessDate, isReversed}: NewEntityTreeProps) => {\n const dispatch = useDispatch();\n const currentModifiedEntitySelector = (store) => mdm.selectors.getModifiedEntity(store, entityUri);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const modifiedEntity = useSelector(currentModifiedEntitySelector);\n const {root} = useSelector((state) => mdm.selectors.getTree(state, id)) || {};\n const isTreeForCurrentEntityUri =\n root?.entity?.uri === entityUri ||\n (root?.editingMode === NODE_EDITING_MODES.addingParent &&\n root?.children?.some(({entity}) => entity?.uri === entityUri));\n\n useEffect(() => {\n const needCreateTreeForNewEntity = modifiedEntity && isTempUri(entityUri) && !isTreeForCurrentEntityUri;\n if (needCreateTreeForNewEntity) {\n const createTreeLoadedEvent = (tree) =>\n treeActions.treeLoaded({id, tree, graphTypes, activenessDate, isReversed});\n const treeProcessing = pipe(prepareTree, createTreeLoadedEvent, dispatch);\n treeProcessing(\n {\n root: {\n entity: modifiedEntity,\n total: 0\n },\n graphTypes\n },\n metadata\n );\n }\n }, [\n activenessDate,\n dispatch,\n entityUri,\n graphTypes,\n id,\n isReversed,\n metadata,\n modifiedEntity,\n isTreeForCurrentEntityUri\n ]);\n};\n\nexport default useNewEntityTree;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n hierarchyViewContainer: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%'\n },\n view: {\n width: '100%',\n flexGrow: 1\n }\n});\n","import React, {useCallback, useEffect, useMemo, useRef, useState, useContext} from 'react';\nimport classnames from 'classnames';\nimport {omit} from 'ramda';\nimport mdm, {profile, ui} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {getLabel, HierarchyTreeViewConfig, isTempUri, isViewMode, GraphLayout} from '@reltio/mdm-sdk';\nimport {BasicView, PageRequestsAbortingContext, FeaturesContext} from '@reltio/components';\nimport HierarchyPanel from './components/HierarchyPanel/HierarchyPanel';\nimport {HierarchyViewSkeleton} from '../HierarchyViewSkeleton/HierarchyViewSkeleton';\nimport {HierarchyViewHeader} from '../HierarchyViewHeader/HierarchyViewHeader';\nimport {HierarchyTreeToolbar} from './components/HierarchyTreeToolbar/HierarchyTreeToolbar';\nimport {ProfileLayoutItemContent} from '../ProfileLayoutItemContent/ProfileLayoutItemContent';\nimport {loadChildren, loadParents, showCurrentEntity} from './helpers/treeHelpers';\nimport useTreeLoader from './helpers/useTreeLoader';\nimport {getReverseRelationsConfig} from './helpers/configHelpers';\nimport useNewEntityTree from './helpers/useNewEntityTree';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: HierarchyTreeViewConfig;\n className?: string;\n isGraphView?: boolean;\n};\nexport const HierarchyTreeView = ({config, className, isGraphView}: Props) => {\n const {id, caption: title, graph: graphConfig, _showNavigateToGraph} = config;\n\n const tree = useSelector((state) => mdm.selectors.getTree(state, id));\n const entity = useSelector(mdm.selectors.getEntity);\n const mode = useSelector(mdm.selectors.getMode);\n\n const styles = useStyles();\n const dispatch = useDispatch();\n const initialActivenessDate = useRef(Date.now());\n\n const defaultGraphType = graphConfig?.type;\n const entityUri = entity.uri;\n\n const {activenessDate = initialActivenessDate.current, loading, errorMessage} = tree || {};\n\n const [currentGraphType, setCurrentGraphType] = useState(defaultGraphType);\n const [checkedNodes, setCheckedNodes] = useState({});\n\n const signal = useContext(PageRequestsAbortingContext);\n const featuresContext = useContext(FeaturesContext);\n const showNavigateToGraph =\n _showNavigateToGraph !== undefined ? _showNavigateToGraph : featuresContext.showNavigateToGraph;\n const features = useMemo(() => ({...featuresContext, showNavigateToGraph}), [showNavigateToGraph, featuresContext]);\n\n const isReversed = getReverseRelationsConfig(config);\n\n useTreeLoader({\n id,\n entityUri,\n graphTypes: currentGraphType,\n activenessDate,\n isReversed,\n enabled: entityUri && isViewMode(mode) && !isTempUri(entityUri),\n signal\n });\n\n useNewEntityTree({\n id,\n entityUri,\n graphTypes: currentGraphType,\n activenessDate,\n isReversed\n });\n\n const onChildrenRequested = useCallback(\n (parent) =>\n dispatch(\n loadChildren({\n parentUri: parent.entity.uri,\n parentId: parent.nodeId,\n graphTypes: currentGraphType,\n activenessDate,\n id,\n isReversed,\n signal\n })\n ),\n [dispatch, currentGraphType, activenessDate, id, isReversed, signal]\n );\n\n const onParentsRequested = useCallback(\n (node) =>\n dispatch(\n loadParents({\n uri: node.entity.uri,\n graphTypes: currentGraphType,\n activenessDate,\n id,\n isReversed,\n signal,\n nodeId: node.nodeId\n })\n ),\n [dispatch, currentGraphType, activenessDate, id, isReversed, signal]\n );\n\n const onTreeChanged = useCallback(\n (tree) => {\n dispatch(profile.trees.actions.treeChanged({id, tree}));\n },\n [dispatch, id]\n );\n\n const onScrollToCurrentEntity = useCallback(() => {\n dispatch(showCurrentEntity({id, uri: entityUri}));\n }, [dispatch, id, entityUri]);\n\n const onNodeMoved = useCallback(\n (movedNodeInfo) => {\n const {node, nextParentNode} = movedNodeInfo;\n const {entity: newParent} = nextParentNode || {};\n const {relation, entity} = node;\n if (relation) {\n dispatch(profile.trees.actions.treeRelationRepointed({entity, relation, newParent, isReversed}));\n } else {\n console.error('relation not found:' + JSON.stringify(movedNodeInfo));\n }\n },\n [dispatch, isReversed]\n );\n\n const onToggleNodeCheckbox = useCallback(({checked, node}) => {\n if (checked) {\n setCheckedNodes((checkedNodes) => ({...checkedNodes, [node.nodeId]: node}));\n } else {\n setCheckedNodes(omit([node.nodeId]));\n }\n }, []);\n\n const openGraph = useCallback(() => {\n dispatch(\n ui.actions.openGraph({viewId: id, graphType: currentGraphType, entityUri, graphLayout: GraphLayout.TREE})\n );\n }, [dispatch, id, currentGraphType, entityUri]);\n\n useEffect(() => {\n setCheckedNodes({});\n }, [mode]);\n\n useEffect(() => {\n setCurrentGraphType(defaultGraphType);\n }, [defaultGraphType]);\n\n return (\n <FeaturesContext.Provider value={features}>\n <BasicView className={classnames(styles.view, className)}>\n <HierarchyViewHeader\n title={title}\n onScrollToCurrentEntity={onScrollToCurrentEntity}\n entityLabel={getLabel(entity.label)}\n onGraphOpen={openGraph}\n disabled={loading}\n isGraphView={isGraphView}\n />\n <ProfileLayoutItemContent\n className={styles.view}\n containerClassName={styles.hierarchyViewContainer}\n toolbar={\n <HierarchyTreeToolbar\n activenessDate={activenessDate}\n config={config}\n entityUri={entityUri}\n tree={tree}\n graphType={currentGraphType}\n onChangeGraphType={setCurrentGraphType}\n />\n }\n isLoading={loading}\n skeleton={<HierarchyViewSkeleton />}\n isEmptyData={!!errorMessage}\n noDataText={errorMessage}\n >\n <HierarchyPanel\n isGraphView={isGraphView}\n config={config}\n tree={tree}\n onTreeChanged={onTreeChanged}\n mode={mode}\n onNodeMoved={onNodeMoved}\n onParentsRequested={onParentsRequested}\n onChildrenRequested={onChildrenRequested}\n onToggleNodeCheckbox={onToggleNodeCheckbox}\n checkedNodes={checkedNodes}\n />\n </ProfileLayoutItemContent>\n </BasicView>\n </FeaturesContext.Provider>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n position: 'relative'\n },\n bodyWrapper: {\n paddingTop: '14px'\n }\n}));\n","import React, {useRef, useEffect, useState} from 'react';\nimport {useAPI} from '@reltio/components';\nimport {CustomActionViewConfig} from '@reltio/mdm-sdk';\nimport Tooltip from '@mui/material/Tooltip';\nimport Dialog from '@mui/material/Dialog';\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 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 '@mui/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 '@mui/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 '@mui/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 from '@mui/material/Typography';\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 {\n AttributeType,\n Entity,\n Paging,\n AttributeItem,\n ImageAttributeViewConfig,\n RequestNextPageOfAttributeValuesPayload\n} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} 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 '@mui/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 {BasicView, ImageAttributesLine} from '@reltio/components';\nimport {\n findAttributeTypeByUri,\n ImageAttributeViewConfig,\n RequestNextPageOfAttributeValuesPayload\n} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {ImageAttributeViewEditableContent} from './ImageAttributeViewEditableContent/ImageAttributeViewEditableContent';\nimport {ImageLineCaption} from './ImageLineCaption/ImageLineCaption';\nimport {ProfileLayoutItemHeader} from '../ProfileLayoutItemHeader/ProfileLayoutItemHeader';\nimport {ProfileLayoutItemContent} from '../ProfileLayoutItemContent/ProfileLayoutItemContent';\n\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 isViewMode = useSelector(mdmModule.selectors.getIsViewMode);\n const entity = useSelector(mdmModule.selectors.getEntityWithDiff);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n\n const attributeType = attributeUri ? findAttributeTypeByUri(metadata, attributeUri) : null;\n\n const requestNextPageOfAttributeValues = useCallback(\n (payload: RequestNextPageOfAttributeValuesPayload) =>\n dispatch(profile.actions.requestNextPageOfAttributeValues(payload)),\n [dispatch]\n );\n\n const entityValues = pathOr([], ['attributes', attributeType?.name], entity);\n const paging = path(['attributes', 'paging', attributeUri], entity);\n const totalValues = entityValues.length;\n const isEmptyData = !attributeType || (isViewMode && !totalValues);\n\n return (\n <BasicView className={className}>\n <ProfileLayoutItemHeader title={config.caption} description={attributeType?.description} />\n <ProfileLayoutItemContent\n className={styles.container}\n noDataText={config['text-empty']}\n isEmptyData={isEmptyData}\n >\n {isViewMode ? (\n <>\n <ImageAttributesLine\n attributeType={attributeType}\n attributeValues={entityValues}\n imageSize={IMAGE_SIZE}\n paging={paging}\n parentUri={entity.uri}\n requestNextPageOfAttributeValues={requestNextPageOfAttributeValues}\n />\n <ImageLineCaption totalImages={totalValues} />\n </>\n ) : (\n <ImageAttributeViewEditableContent\n attributeType={attributeType}\n config={config}\n paging={paging}\n requestNextPageOfAttributeValues={requestNextPageOfAttributeValues}\n />\n )}\n </ProfileLayoutItemContent>\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 '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n padding: '12px 16px',\n display: 'flex',\n flexGrow: '1'\n },\n icon: {\n flexShrink: 0,\n width: 40,\n height: 40\n },\n content: {\n width: '100%',\n marginLeft: 12,\n '& $label': {\n '&:nth-child(1)': {\n fontSize: '1rem',\n width: '60%'\n },\n '&:nth-child(2)': {\n fontSize: '0.8rem',\n width: '40%'\n }\n }\n },\n label: {}\n});\n","import React from 'react';\nimport Skeleton from '@mui/material/Skeleton';\nimport {useStyles} from './styles';\n\nexport const ProfilePotentialMatchesViewSkeleton = () => {\n const styles = useStyles();\n return (\n <div className={styles.container}>\n <Skeleton variant=\"circular\" className={styles.icon} />\n <div className={styles.content}>\n <Skeleton className={styles.label} />\n <Skeleton className={styles.label} />\n </div>\n </div>\n );\n};\n","import {makeStyles} from '@mui/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 i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {isEmpty, map} from 'ramda';\nimport mdmModule, {ui} from '@reltio/mdm-module';\nimport {BasicView, CollaborationContext, EntitiesMapContext, useMatchesLoader, ViewIdContext} from '@reltio/components';\nimport {\n getEntityUriForLink,\n getEntityUriFromMatchObject,\n getPotentialMatchesObjectIdsForCollaboration,\n Order,\n ProfilePotentialMatchesViewConfig\n} from '@reltio/mdm-sdk';\nimport Link from '@mui/material/Link';\nimport {MatchCard} from './MatchCard';\nimport {ProfileLayoutItemHeader} from '../ProfileLayoutItemHeader/ProfileLayoutItemHeader';\nimport {ProfileLayoutItemContent} from '../ProfileLayoutItemContent/ProfileLayoutItemContent';\nimport {ProfilePotentialMatchesViewSkeleton} from './ProfilePotentialMatchesViewSkeleton/ProfilePotentialMatchesViewSkeleton';\n\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'};\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(ui.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 return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <BasicView className={classnames(styles.root, className)}>\n <ProfileLayoutItemHeader title={config.caption} />\n <ProfileLayoutItemContent\n className={styles.matchesContainer}\n isLoading={isLoading}\n skeleton={<ProfilePotentialMatchesViewSkeleton />}\n noDataText={i18n.text('No matches found')}\n isEmptyData={isEmpty(matches)}\n >\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 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 </ProfileLayoutItemContent>\n </BasicView>\n </EntitiesMapContext.Provider>\n );\n};\n","import React from 'react';\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 {withDragHandle} from '@reltio/components';\nimport {ProfileAttributesView} from '../ProfileAttributesView/ProfileAttributesView';\nimport {ProfileSingleAttributeView} from '../ProfileSingleAttributeView/ProfileSingleAttributeView';\nimport {ProfileRelationsView} from '../ProfileRelationsView/ProfileRelationsView';\nimport {ProfileRelationsTableView} from '../ProfileRelationsTableView/ProfileRelationsTableView';\nimport {ProfileTableAttributeView} from '../ProfileTableAttributeView/ProfileTableAttributeView';\nimport {HierarchyPathsView} from '../HierarchyPathsView';\nimport {HierarchyTreeView} from '../HierarchyTreeView/HierarchyTreeView';\nimport {CustomView} from '../Sandbox/CustomView';\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);\nexport const WrappedHierarchyTreeView = wrapView(HierarchyTreeView);\nexport const WrappedRelationshipsTableView = wrapView(ProfileRelationsTableView);\nexport const WrappedEntityMapView = wrapView(EntityMapView);\nexport const WrappedImageAttributeView = wrapView(ImageAttributeView);\n\nexport type ViewComponentProps = {\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 {config, className, isFullscreen, onToggleFullscreen}: ViewComponentProps\n ) => {\n switch (config[propName]) {\n case ViewsFactory.ViewTypes.HierarchyTree:\n return <WrappedHierarchyTreeView config={config as HierarchyTreeViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.HierarchyPaths:\n return <WrappedHierarchyPathView config={config as HierarchyPathsViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.RelationsTable:\n return <WrappedRelationshipsTableView config={config as RelationsViewConfig} className={className} />;\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 {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, {useMemo} 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 className?: string;\n};\n\nexport const ProfileRelationsView = ({config, className}: Props) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const parsedConfig = useMemo(() => parseRelationsConfig(metadata, config), [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 {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, {useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {RelationsViewConfig, parseRelationsConfig, Metadata} from '@reltio/mdm-sdk';\nimport {RelationsTableView} from './components/RelationsTableView/RelationsTableView';\nimport {RelationsTableViewStateContext} from './contexts/RelationsTableViewStateContext';\nimport useRelationsTableState from './hooks/useRelationsTableState';\n\ntype Props = {\n config: RelationsViewConfig;\n className?: string;\n};\n\nexport const ProfileRelationsTableView = ({config, className}: Props) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const parsedConfig = useMemo(() => parseRelationsConfig(metadata, config), [metadata, config]);\n const relationsState = useRelationsTableState(parsedConfig);\n return (\n <RelationsTableViewStateContext.Provider value={relationsState}>\n <RelationsTableView config={parsedConfig} className={className} />\n </RelationsTableViewStateContext.Provider>\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 '@mui/icons-material/Fullscreen';\nimport FullscreenExitIcon from '@mui/icons-material/FullscreenExit';\nimport Skeleton from '@mui/material/Skeleton';\nimport {BasicView, LinearLoadIndicator, ReltioMap, 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 <Skeleton variant=\"rectangular\" className={styles.fullHeight} />\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, isFullscreen, isAutosize, onToggleFullscreen}: ViewComponentProps) => {\n const styles = useStyles();\n return (\n <Suspense fallback={<Fallback />}>\n {ViewsFactory.getComponent({\n config,\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} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n item: theme.basicView,\n fixedSizeContainer: {\n height: '100%'\n },\n overflowContainer: {\n width: '100%',\n height: '100%',\n overflow: 'hidden'\n }\n}));\n","import React, {ReactChildren, ReactNode} from 'react';\nimport {omit} from 'ramda';\nimport {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 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, {\n [styles.item]: !isCustomView,\n customView: isCustomView\n })}\n >\n <div className={styles.overflowContainer}>\n <div\n data-reltio-id=\"profile-view-container\"\n className={classnames({[styles.fixedSizeContainer]: !AutosizeComponent})}\n >\n {AutosizeComponent}\n <ViewComponent\n config={config}\n isFullscreen={isFullscreen}\n onToggleFullscreen={onToggleFullscreen}\n isAutosize={Boolean(AutosizeComponent)}\n />\n </div>\n {ResizeComponent}\n </div>\n </div>\n );\n};\n\nexport {ProfileLayoutItem};\n","import {makeStyles} from '@mui/styles';\n\nconst DEFAULT_MIN_WIDTH = 1024;\n\ntype Props = {\n maxWidth?: number;\n minWidth?: number;\n scrollbarWidth?: number;\n};\n\nexport const useStyles = makeStyles({\n scrollWrapper: {\n flexGrow: 1,\n overflow: 'auto'\n },\n scrollableContent: ({maxWidth, minWidth = DEFAULT_MIN_WIDTH, scrollbarWidth}: Props) => ({\n minWidth: maxWidth && maxWidth < minWidth ? maxWidth - scrollbarWidth : minWidth,\n height: '100%'\n })\n});\n","import React, {useEffect, useMemo, useRef} from 'react';\nimport {PopupBoundariesContext, ReltioGridLayout, ReltioGridLayoutOptions} 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 frozen?: boolean;\n entityUri?: string;\n maxWidth?: number;\n minWidth?: number;\n layoutOptions?: ReltioGridLayoutOptions;\n onLayoutChanged: (layout: Layout) => void;\n};\n\nconst calcScrollbarWidth = (element: HTMLDivElement) => (element ? element.offsetWidth - element.clientWidth : 0);\n\nconst ProfileLayout = ({\n views,\n layout,\n frozen,\n entityUri,\n maxWidth,\n minWidth,\n layoutOptions,\n onLayoutChanged\n}: Props) => {\n const scrollWrapperRef = useRef<HTMLDivElement>();\n const scrollbarWidth = calcScrollbarWidth(scrollWrapperRef.current);\n const boundariesElement = scrollWrapperRef.current;\n\n const styles = useStyles({maxWidth, minWidth, 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} data-reltio-id=\"reltio-profile-grid\">\n <PopupBoundariesContext.Provider value={popupBoundariesValue}>\n <ReltioGridLayout\n LayoutItem={ProfileLayoutItem}\n views={views}\n layout={layout}\n onLayoutChanged={onLayoutChanged}\n draggableHandle=\".viewDraggableHandle\"\n isStatic={frozen}\n layoutOptions={layoutOptions}\n />\n </PopupBoundariesContext.Provider>\n </div>\n </div>\n );\n};\n\nexport {ProfileLayout};\n","import {makeStyles} from '@mui/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 from '@mui/material/Snackbar';\nimport Portal from '@mui/material/Portal';\nimport React, {useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport Button from '@mui/material/Button';\nimport CloseIcon from '@mui/icons-material/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, {useEffect} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdm, {ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {NotificationItem} from './types';\nimport {Notification} from './Notification';\n\nexport const Notifications = () => {\n const dispatch = useDispatch();\n const notifications: NotificationItem[] = useSelector(mdm.selectors.getNotifications);\n\n useEffect(\n () => () => {\n dispatch(mdmModuleUi.actions.clearNotifications());\n },\n []\n );\n\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 '@mui/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 menuButton: {\n marginLeft: 8\n },\n cancelButton: {\n border: '1px solid rgba(0, 0, 0, 0.23)'\n }\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 from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport SvgIcon from '@mui/material/SvgIcon';\nimport VisibilityIcon from '@mui/icons-material/Visibility';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport CreateIcon from '@mui/icons-material/Create';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\n\nimport {\n getEntityType,\n Entity,\n checkMetadataPermission,\n isDataTenantEntity,\n isTempUri,\n MetadataPermissions,\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 DropDownMenuButton,\n MultilineMenuItem,\n SmallIconButton\n} from '@reltio/components';\nimport {useCloneAction} from './hooks/useCloneAction';\n\nimport SuggestSvg from './suggest.svg';\nimport CopySvg from './copy.svg';\n\nimport {useStyles} from './styles';\n\ntype MultilineMenuItemProps = React.ComponentProps<typeof MultilineMenuItem>;\ntype Props = {\n className?: string;\n showMenu?: boolean;\n profileBandConfig?: ProfileBandConfig;\n menuItems: MultilineMenuItemProps['item'][];\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, menuItems, showMenu = true}: 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: Mode.Editing,\n description: i18n.text('Edit profile directly'),\n icon: CreateIcon,\n permission: 'UPDATE'\n },\n {\n label: i18n.text('Suggesting'),\n value: Mode.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: Mode.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 className={styles.cancelButton}\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 {showMenu && (\n <DropDownMenuButton\n menuId=\"profile-header-menu\"\n buttonComponent={SmallIconButton}\n buttonProps={{\n icon: MoreVertIcon,\n size: 'L',\n 'data-reltio-id': 'reltio-profile-header-menu',\n className: styles.menuButton\n }}\n menuItems={menuItems}\n MenuItemRenderer={MultilineMenuItem}\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 {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 {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n display: 'flex',\n overflow: 'hidden',\n flexShrink: 0,\n marginLeft: '3px',\n height: '100%'\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, {useEffect} from 'react';\nimport {SidePanelContentHeader, SidePanel, RightPanelTab} from '@reltio/components';\nimport {isNil} from 'ramda';\n\nimport {useStyles} from './styles';\n\nexport enum ActivePanel {\n Workflow,\n Collaboration,\n History,\n DBConnector\n}\n\ntype Props = {\n active?: ActivePanel;\n tabs: Array<RightPanelTab>;\n onClose?: () => void;\n};\n\nexport const RightSidePanel = ({active, tabs, onClose}: Props) => {\n const styles = useStyles();\n const isOpen = !isNil(active);\n const {content, headerProps, hidden} = tabs[active] || {};\n\n useEffect(() => {\n if (hidden) {\n onClose();\n }\n }, [active, hidden, onClose]);\n\n return (\n <div className={styles.wrapper}>\n <SidePanel open={isOpen}>\n {!hidden && (\n <>\n <SidePanelContentHeader {...headerProps} onClose={onClose} />\n {content}\n </>\n )}\n </SidePanel>\n </div>\n );\n};\n","import {makeStyles} from '@mui/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, {useContext, VFC} from 'react';\nimport Badge from '@mui/material/Badge';\nimport {WorkflowTasksContext} from '@reltio/components';\nimport InboxIcon from '@mui/icons-material/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 anchorOriginTopRightRectangular: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <InboxIcon />\n </Badge>\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 from '@mui/material/Badge';\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 anchorOriginTopRightRectangular: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <CollaborationIcon />\n </Badge>\n );\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"path\", {\n 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 '@mui/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","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 {makeStyles} from '@mui/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 from '@mui/material/Box';\nimport Link from '@mui/material/Link';\nimport KeyboardArrowDownIcon from '@mui/icons-material/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 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","import React, {useContext, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport {isTempUri, getEntityType, Metadata, Entity, calcTotalCommentItems, HistoryEvent} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {CollaborationContext, RightPanelTab, WorkflowTasksContext} from '@reltio/components';\nimport {\n AddWorkflowButton,\n HistoryHeader,\n HistoryPanelEmptyState,\n HistoryView,\n useHistory,\n useHistoryEnabled\n} from '@reltio/components';\nimport i18n from 'ui-i18n';\nimport HistoryIcon from '@mui/icons-material/History';\nimport {ActivePanel} from '../../RightSidePanel/RightSidePanel';\nimport {DBConnectorsList} from '../../RightSidePanel/components/DBConnectorsList/DBConnectorsList';\nimport {WorkflowButton} from '../../RightSidePanel/components/WorkflowButton/WorkflowButton';\nimport {CollaborationButton} from '../../RightSidePanel/components/CollaborationButton/CollaborationButton';\nimport ConnectorsIcon from '../../RightSidePanel/icons/ConnectorsIcon.svg';\n\nimport {WorkflowList} from '../../RightSidePanel/components/WorkflowList/WorkflowList';\nimport WorkflowPanelEmptyState from '../../RightSidePanel/components/WorkflowPanelEmptyState/WorkflowPanelEmptyState';\nimport {CollaborationList} from '../../RightSidePanel/components/CollaborationList/CollaborationList';\nimport CollaborationPanelEmptyState from '../../RightSidePanel/components/CollaborationPanelEmptyState/CollaborationPanelEmptyState';\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 perspectiveId: string;\n commentId?: string;\n hideHistory?: boolean;\n};\n\nexport const useProfileRightSidePanelElements = ({\n commentId,\n hideHistory,\n perspectiveId\n}: Props): {tabs: Array<RightPanelTab>; defaultTab?: number} => {\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\n const defaultTab = commentId ? ActivePanel.Collaboration : undefined;\n\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 {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({\n perspectiveId,\n entity,\n historyButtonId: ActivePanel.History\n });\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 tabs = useMemo(\n () => [\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 hidden: hideHistory\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 workflowTasksContext?.total,\n enabledWorkflowButton,\n collaborationTotal,\n enabledCollaborationButton,\n isProfilePersisted,\n isLoading,\n historyWithTotal,\n historicUris,\n entity?.uri,\n entity?.type,\n historyEvent,\n onLoadMore,\n canLoadMore,\n metadata,\n historyFilter,\n onApplyFilter,\n isDBConnectorSideViewEnabled\n ]\n );\n\n return {tabs, defaultTab};\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n profileContainer: {\n display: 'flex',\n overflow: 'hidden',\n flexGrow: 1\n }\n}));\n","import React, {memo} from 'react';\nimport {pipe, pluck, propEq, reject} from 'ramda';\nimport {ProfileResizablePanes} from '@reltio/components';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\nimport {useProfileRightSidePanelElements} from '../ProfilePerspectiveView/hooks/useProfileRightSidePanelElements';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n perspectiveId: string;\n commentId?: string;\n hideHistory?: boolean;\n children: React.ReactElement;\n};\n\nexport const ProfilePerspectiveResizablePanes = memo(({perspectiveId, commentId, hideHistory, children}: Props) => {\n const styles = useStyles();\n const {defaultTab, tabs} = useProfileRightSidePanelElements({commentId, hideHistory, perspectiveId});\n\n return (\n <div className={styles.profileContainer}>\n <ProfileResizablePanes\n defaultTab={defaultTab}\n perspectiveId={perspectiveId}\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(tabs)}\n >\n {children}\n <RightSidePanel tabs={tabs} />\n </ProfileResizablePanes>\n </div>\n );\n});\n\nProfilePerspectiveResizablePanes.displayName = 'ProfilePerspectiveView';\n","import {useCallback, useEffect, useMemo, useRef, 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 const tempConfig = useRef<{views: ProfilePerspectiveConfig['views']; layout: Layout}>();\n const handleResetUndo = useCallback(() => {\n setViews(tempConfig.current.views);\n handleLayoutChange(tempConfig.current.layout);\n }, [handleLayoutChange]);\n\n const handleLayoutReset = useCallback(() => {\n tempConfig.current = {views, layout};\n const {views: fixedViews, layout: fixedLayout} = fixNonUniqViewsIds<ProfileViewConfig, ReltioGridLayoutItem>({\n views: config.views,\n layout: config.layout\n });\n setViews(fixedViews);\n handleLayoutChange(fixedLayout);\n }, [config, layout, views, handleLayoutChange]);\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 {\n views,\n layout,\n isLoaded,\n onLayoutReset: handleLayoutReset,\n onResetUndo: handleResetUndo,\n handleLayoutChange\n };\n};\n","import {makeStyles} from '@mui/styles';\n\nconst useStyles = makeStyles((theme) => ({\n wrapper: {\n alignItems: 'center',\n display: 'flex',\n padding: '12px 16px',\n fontSize: '13px',\n lineHeight: '15px',\n fontWeight: theme.typography.fontWeightRegular,\n color: theme.palette.text.secondary\n },\n loadingWrapper: {\n display: 'flex',\n backgroundColor: 'rgba(238, 238, 238, 1)',\n color: theme.palette.text.secondary,\n boxShadow: 'inset 0px -1px 0px rgba(0, 0, 0, 0.12)'\n },\n errorWrapper: {\n display: 'flex',\n backgroundColor: 'rgba(255, 235, 238, 1)',\n color: theme.palette.error.main\n },\n successWrapper: {\n display: 'flex',\n backgroundColor: 'rgba(239, 253, 227, 1)',\n color: theme.palette.success.main,\n '& span, & b': {\n paddingRight: '4px'\n }\n },\n closeIcon: {\n color: theme.palette.text.secondary,\n cursor: 'pointer',\n '&:hover': {\n background: 'none'\n }\n },\n indicatorIcon: {\n padding: '0 14px'\n },\n link: {\n color: theme.palette.primary.main,\n fontSize: theme.typography.pxToRem(13),\n fontWeight: theme.typography.fontWeightRegular,\n cursor: 'pointer'\n }\n}));\n\nexport default useStyles;\n","import React from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\n\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\nimport {getLabel} from '@reltio/mdm-sdk';\n\nimport Typography from '@mui/material/Typography';\nimport CloseIcon from '@mui/icons-material/Close';\nimport InfoIcon from '@mui/icons-material/InfoRounded';\nimport SuccessIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/ReportProblem';\n\nimport useStyles from './styles';\n\nexport enum BackgroundUpdateStatus {\n loading = 'loading',\n success = 'success',\n error = 'error'\n}\n\ntype Props = {\n label?: string;\n onClose: () => void;\n onRefresh?: () => void;\n status?: BackgroundUpdateStatus;\n};\n\nconst CloseIconButton = ({onClose}: {onClose: () => void}) => {\n const styles = useStyles();\n return (\n <SmallIconButtonWithTooltip\n tooltipTitle={i18n.text('Close')}\n onClick={onClose}\n size={'S'}\n className={styles.closeIcon}\n icon={CloseIcon}\n />\n );\n};\n\nconst ProcessLoading = ({onClose}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.wrapper, styles.loadingWrapper)}>\n <CloseIconButton onClose={onClose} />\n <InfoIcon className={classnames(styles.indicatorIcon)} />\n <Typography>{i18n.text('Loading background process...')}</Typography>\n </div>\n );\n};\n\nconst ProcessSuccess = ({label, onClose, onRefresh}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.wrapper, styles.successWrapper)}>\n <CloseIconButton onClose={onClose} />\n <SuccessIcon className={classnames(styles.indicatorIcon)} />\n <div data-reltio-id=\"background-update-success\">\n <span>{i18n.text('This Profile')}</span>\n <b>{getLabel(label)}</b>\n <span>{i18n.text('has been updated.')}</span>\n <span onClick={onRefresh} className={styles.link}>\n {i18n.text('Click Here to Refresh the page')}\n </span>\n <span>{i18n.text(' to retrieve the latest profile data.')}</span>\n </div>\n </div>\n );\n};\n\nconst ProcessError = ({onClose}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.wrapper, styles.errorWrapper)}>\n <CloseIconButton onClose={onClose} />\n <ErrorIcon className={classnames(styles.indicatorIcon)} />\n <Typography>\n {i18n.text(\n 'UI attempted to check for updates but no update received in the last 30 seconds. Try refreshing the page manually.'\n )}\n </Typography>\n </div>\n );\n};\n\nexport const BackgroundProcessIndicator = ({label, onClose, onRefresh, status}: Props) => {\n switch (status) {\n case BackgroundUpdateStatus.loading:\n return <ProcessLoading onClose={onClose} />;\n case BackgroundUpdateStatus.success:\n return <ProcessSuccess label={label} onClose={onClose} onRefresh={onRefresh} />;\n case BackgroundUpdateStatus.error:\n return <ProcessError onClose={onClose} />;\n default:\n return null;\n }\n};\n","import {useCallback, useContext, useEffect, useRef, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {isNil} from 'ramda';\nimport {useActionsHook, useSafePromise, ViewIdContext} from '@reltio/components';\nimport {getEntityUpdatedTime, ProfileCheckUpdate} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {BackgroundUpdateStatus} from '../../BackgroundProcessIndicator/BackgroundProcessIndicator';\nimport {getBackgroundUpdateDelay} from './data/backgroundUpdateDalay';\n\nconst NUMBER_OF_RETRY = 5;\n\nconst isEntityTypeInBackgroundProcess = (entityTypeList?: string[], entityType?: string) => {\n if (entityTypeList?.[0] === '*') {\n return true;\n }\n if (isNil(entityTypeList)) {\n return false;\n }\n return entityTypeList.includes(entityType);\n};\n\nconst checkEntityTypeInList = (entityTypeList: string[], entityType: string) =>\n isEntityTypeInBackgroundProcess(entityTypeList, entityType);\n\ntype Props = {\n entityUri: string;\n entityTypeUri: string;\n entityUpdatedTime: number;\n};\n\nexport const useBackgroundProcessIndicator = ({entityUri, entityTypeUri, entityUpdatedTime}: Props) => {\n const dispatch = useDispatch();\n const {autoUpdateInReadMode, entityTypes: entityTypesForUpdate}: ProfileCheckUpdate =\n useSelector(mdm.selectors.getProfileCheckUpdate) || {};\n\n const needBackgroundProcess = checkEntityTypeInList(entityTypesForUpdate, entityTypeUri);\n const isAutoUpdated = checkEntityTypeInList(autoUpdateInReadMode, entityTypeUri);\n\n const timerId = useRef(null);\n const safePromise = useSafePromise();\n const listenToActions = useActionsHook();\n const viewId = useContext(ViewIdContext);\n\n const [isOpenBackgroundProcessIndicator, setIsOpenBackgroundProcessIndicator] = useState(false);\n const [backgroundUpdateStatus, setBackgroundUpdateStatus] = useState(BackgroundUpdateStatus.loading);\n const backgroundUpdateDelay = getBackgroundUpdateDelay();\n\n const onRefreshProfile = useCallback(() => {\n // entity refreshing\n dispatch(profile.entity.actions.loadEntity({viewId, uri: entityUri}));\n setIsOpenBackgroundProcessIndicator(false);\n }, [dispatch, entityUri, viewId]);\n\n const onCloseBackgroundProcessIndicator = useCallback(() => {\n setIsOpenBackgroundProcessIndicator(false);\n }, []);\n\n const cancelUpdateProcess = useCallback(() => {\n clearTimeout(timerId.current);\n setIsOpenBackgroundProcessIndicator(false);\n safePromise(Promise.resolve());\n }, [safePromise]);\n\n const getUpdatedTime = useCallback(\n (numberOfRetry) => {\n safePromise(getEntityUpdatedTime(entityUri))\n .then((result) => {\n if (result.updatedTime > entityUpdatedTime) {\n setBackgroundUpdateStatus(BackgroundUpdateStatus.success);\n if (isAutoUpdated) {\n onRefreshProfile();\n } else {\n setIsOpenBackgroundProcessIndicator(true);\n }\n numberOfRetry = -1;\n }\n })\n .catch(() => {})\n .finally(() => {\n if (numberOfRetry < 0) {\n return;\n }\n if (!numberOfRetry) {\n setBackgroundUpdateStatus(BackgroundUpdateStatus.error);\n setIsOpenBackgroundProcessIndicator(true);\n } else {\n numberOfRetry = numberOfRetry - 1;\n timerId.current = setTimeout(getUpdatedTime, backgroundUpdateDelay, numberOfRetry);\n }\n });\n },\n [entityUpdatedTime, entityUri, isAutoUpdated, onRefreshProfile, safePromise, backgroundUpdateDelay]\n );\n\n const runBackgroundUpdate = useCallback(() => {\n if (needBackgroundProcess) {\n setBackgroundUpdateStatus(BackgroundUpdateStatus.loading);\n setIsOpenBackgroundProcessIndicator(true);\n timerId.current = setTimeout(getUpdatedTime, backgroundUpdateDelay, NUMBER_OF_RETRY - 1);\n }\n }, [getUpdatedTime, needBackgroundProcess]);\n\n useEffect(() => {\n const stopListeningActions = listenToActions((action) => {\n if (action.type === profile.constants.ProfileActions.PROFILE_SAVED) {\n runBackgroundUpdate();\n }\n });\n return () => {\n stopListeningActions();\n };\n }, [listenToActions, safePromise, runBackgroundUpdate]);\n\n return {\n onRefreshProfile,\n onCloseBackgroundProcessIndicator,\n cancelUpdateProcess,\n isOpenBackgroundProcessIndicator,\n backgroundUpdateStatus\n };\n};\n","import {makeStyles} from '@mui/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 '@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 mdm, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n Entity,\n getProfileObjectIdsForCollaboration,\n Mode,\n ProfilePerspectiveConfig,\n isTempUri,\n HistoryEvent,\n AttributeError\n} from '@reltio/mdm-sdk';\nimport {\n CollaborationContext,\n WorkflowTasksContext,\n EMPTY_STATE_ICONS,\n EMPTY_STATE_VARIANTS,\n AttributesErrorsPanel,\n EmptyState,\n LinearLoadIndicator,\n ProfilePerspectiveViewContext,\n SearchValueContext,\n useCollaboration,\n HistoryDiffContext,\n useHistoryDiff,\n useHistorySlice,\n useEntityLoadingIndication,\n ScrollToElementProvider,\n CollaborationContextProvider,\n useLayoutResetter,\n FeaturesContext\n} from '@reltio/components';\nimport {ProfileSavedState} from '../../types';\n\nimport {ProfileLayout} from '../ProfileLayout';\nimport {Notifications} from '../Notifications';\nimport {PerspectiveProfileBand} from '../PerspectiveProfileBand';\nimport {ProfilePerspectiveResizablePanes} from '../ProfilePerspectiveResizablePanes/ProfilePerspectiveResizablePanes';\nimport {useProfileValidation} from '../hooks/useProfileValidation';\nimport {useProfileLayout} from './hooks/useProfileLayout';\nimport {useWorkflowTasks} from './hooks/useWorkflowTasks';\nimport {BackgroundProcessIndicator} from '../BackgroundProcessIndicator/BackgroundProcessIndicator';\nimport {useBackgroundProcessIndicator} from './hooks/useBackgroundProcessIndicator';\n\nimport {useStyles} from './styles';\nimport mdmModule from '@reltio/mdm-module';\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 perspectiveId = 'profile';\n\nconst ProfilePerspectiveView = memo(({config, saveState, getSavedState, commentId}: Props) => {\n const {maxWidth, profileBand, workflow, frozen} = 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 const allErrors: AttributeError[] = useSelector(mdm.selectors.getProfileErrors);\n\n const dispatch = useDispatch();\n const historyDiff = useHistoryDiff();\n const workflowTasks = useWorkflowTasks(workflow);\n const {isEmptyState} = useEntityLoadingIndication();\n\n const {type: entityTypeUri, uri: entityUri, updatedTime: entityUpdatedTime} = entity || {};\n const {\n onRefreshProfile,\n onCloseBackgroundProcessIndicator,\n cancelUpdateProcess,\n isOpenBackgroundProcessIndicator,\n backgroundUpdateStatus\n } = useBackgroundProcessIndicator({entityUri, entityTypeUri, entityUpdatedTime});\n const objectIds = useMemo(() => getProfileObjectIdsForCollaboration(entity), [entity]);\n const emptyCollaboration = useContext(CollaborationContext);\n const collaboration = useCollaboration({objectIds});\n\n const featuresContext = useContext(FeaturesContext);\n const showDescription = useSelector(mdmModule.selectors.getShowAttributeDescription);\n const features = useMemo(() => ({...featuresContext, showDescription}), [featuresContext, showDescription]);\n\n const {\n views,\n layout,\n isLoaded: isLayoutLoaded,\n onLayoutReset,\n onResetUndo,\n handleLayoutChange\n } = 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 useEffect(() => {\n return () => cancelUpdateProcess();\n }, [entityUri, mode]);\n\n // possible for a short time during createProfile saga execution\n const hideLayout = mode === Mode.Viewing && isTempUri(entityUri);\n\n const renderEmptyState = (text: string) => (\n <div className={styles.emptyState}>\n <EmptyState LogoRenderer={EMPTY_STATE_ICONS.NO_DATA} text={text} variant={EMPTY_STATE_VARIANTS.embedded} />\n </div>\n );\n\n const {SnackbarRenderer, resetLayout} = useLayoutResetter({onLayoutReset, onResetUndo});\n const menuItems = useMemo(\n () => [\n {\n primary: i18n.text('Reset layout'),\n secondary: i18n.text('Restore the default layout without saving any changes'),\n onClick: resetLayout\n }\n ],\n [resetLayout]\n );\n\n return (\n <FeaturesContext.Provider value={features}>\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 <ScrollToElementProvider>\n <div className={styles.perspectiveView}>\n {isLayoutLoaded && entityUri ? (\n <ProfilePerspectiveResizablePanes\n commentId={commentId}\n perspectiveId={perspectiveId}\n >\n <div className={styles.profileWrapper}>\n <PerspectiveProfileBand\n profileBandConfig={profileBand}\n showMenu={!frozen}\n menuItems={menuItems}\n />\n {isEmptyState ? (\n renderEmptyState(i18n.text('Loading'))\n ) : (\n <>\n {isOpenBackgroundProcessIndicator && (\n <BackgroundProcessIndicator\n label={entity.label}\n onClose={onCloseBackgroundProcessIndicator}\n onRefresh={onRefreshProfile}\n status={backgroundUpdateStatus}\n />\n )}\n {!isHistoryActive && (\n <AttributesErrorsPanel\n attributesWithErrors={allErrors}\n />\n )}\n {!hideLayout && (\n <ProfileLayout\n maxWidth={maxWidth}\n views={views}\n layout={layout}\n frozen={frozen}\n entityUri={entityUri}\n onLayoutChanged={handleLayoutChange}\n />\n )}\n </>\n )}\n </div>\n </ProfilePerspectiveResizablePanes>\n ) : (\n <>\n <LinearLoadIndicator />\n {renderEmptyState(i18n.text('No data to display.'))}\n </>\n )}\n <Notifications />\n <SnackbarRenderer />\n </div>\n </ScrollToElementProvider>\n </SearchValueContext.Provider>\n </HistoryDiffContext.Provider>\n </WorkflowTasksContext.Provider>\n </CollaborationContextProvider>\n </ProfilePerspectiveViewContext.Provider>\n </FeaturesContext.Provider>\n );\n});\n\nProfilePerspectiveView.displayName = 'ProfilePerspectiveView';\n\nexport {ProfilePerspectiveView};\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","const BACKGROUND_UPDATE_DELAY = 6000;\nexport const getBackgroundUpdateDelay = (delay?: number) => delay || BACKGROUND_UPDATE_DELAY;\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 {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 React, {useCallback, useMemo} from 'react';\nimport {AdapterMoment} from '@mui/x-date-pickers/AdapterMoment';\nimport {identity} from 'ramda';\nimport createGenerateClassName from '@mui/styles/createGenerateClassName';\nimport StylesProvider from '@mui/styles/StylesProvider';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider';\nimport {ErrorPopup, SandboxAPIContext, SnackbarContext, useSnackbar, ViewIdContext} from '@reltio/components';\nimport {\n convertOldProfileConfig,\n ProfilePerspectiveConfig,\n promisifyCallback,\n QxSandboxApi,\n userPreferencesComparator\n} from '@reltio/mdm-sdk';\nimport {ProfileSavedState} from '../types';\nimport ProfilePerspectiveView from '../components/ProfilePerspectiveView';\nimport {equalsState} from './helpers';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'profilePerspective',\n disableGlobal: true,\n seed: 'prfl'\n});\n\nuserPreferencesComparator.register('profile', equalsState);\n\ntype Props = {\n config: ProfilePerspectiveConfig;\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 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 const processedConfig = useMemo(() => config && convertOldProfileConfig(config), [config]);\n\n return (\n <ViewIdContext.Provider value={processedConfig?.id}>\n <SnackbarContext.Provider value={showSnackbarMessage}>\n <SandboxAPIContext.Provider value={qxSandboxApi}>\n <StylesProvider generateClassName={generateClassName}>\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n {processedConfig && (\n <ProfilePerspectiveView\n config={processedConfig}\n saveState={saveState}\n getSavedState={getSavedStatePromisified}\n commentId={commentId}\n />\n )}\n <ErrorPopup showErrorFromStore={true} />\n <SnackbarRenderer />\n </LocalizationProvider>\n </StylesProvider>\n </SandboxAPIContext.Provider>\n </SnackbarContext.Provider>\n </ViewIdContext.Provider>\n );\n};\n\nexport default ProfilePerspective;\n","import {makeStyles} from '@mui/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 from '@mui/material/Link';\nimport ArrowForwardIosRoundedIcon from '@mui/icons-material/ArrowForwardIosRounded';\nimport Typography from '@mui/material/Typography';\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 '@mui/styles';\n\nexport const useStyles = makeStyles((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 '@mui/icons-material/LocalOffer';\nimport Toolbar from '@mui/material/Toolbar';\nimport Typography from '@mui/material/Typography';\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 '@mui/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 {identity} from 'ramda';\nimport createGenerateClassName from '@mui/styles/createGenerateClassName';\nimport StylesProvider from '@mui/styles/StylesProvider';\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 onResize?: (width: number, height: number) => void;\n};\n\nconst TagPerspective = ({config, tag, entityUri, onResize = identity}: Props) => {\n return (\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 );\n};\n\nexport default TagPerspective;\n","import {makeStyles} from '@mui/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 {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 {makeStyles} from '@mui/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 React, {memo, useContext, useEffect, useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {Entity} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {\n AttributesView,\n EMPTY_STATE_ICONS,\n EMPTY_STATE_VARIANTS,\n EmptyState,\n FeaturesContext,\n LinearLoadIndicator,\n WorkflowTasksContext\n} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {DCRProfileBand} from './components/DCRProfileBand/DCRProfileBand';\nimport {useWorkflowTasks} from './hooks/useWorkflowTasks';\nimport {ProfilePerspectiveResizablePanes} from '../ProfilePerspectiveResizablePanes/ProfilePerspectiveResizablePanes';\n\nimport {useStyles} from './styles';\n\nconst workflowConfig = {processTypes: ['dataChangeRequestReview']};\nconst perspectiveId = 'dcrCard';\n\nexport const DCRReviewPerspectiveView = memo(() => {\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const workflowTasks = useWorkflowTasks(workflowConfig);\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n\n const featuresContext = useContext(FeaturesContext);\n const showDescription = useSelector(mdmModule.selectors.getShowAttributeDescription);\n const features = useMemo(() => ({...featuresContext, showDescription}), [featuresContext, showDescription]);\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 <FeaturesContext.Provider value={features}>\n <WorkflowTasksContext.Provider value={workflowTasks}>\n <div className={styles.perspectiveView}>\n {!isLoaded && <LinearLoadIndicator />}\n <div className={styles.perspectiveContainer}>\n {isLoaded ? (\n <ProfilePerspectiveResizablePanes hideHistory={true} perspectiveId={perspectiveId}>\n <div className={styles.contentWrapper}>\n <DCRProfileBand />\n <div className={styles.attributesWrapper}>\n <AttributesView />\n </div>\n </div>\n </ProfilePerspectiveResizablePanes>\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 </FeaturesContext.Provider>\n );\n});\n\nDCRReviewPerspectiveView.displayName = 'DCRReviewPerspectiveView';\n","import React from 'react';\nimport {identity} from 'ramda';\nimport createGenerateClassName from '@mui/styles/createGenerateClassName';\nimport StylesProvider from '@mui/styles/StylesProvider';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {DCRReviewPerspectiveConfig} from '@reltio/mdm-sdk';\nimport {AdapterMoment} from '@mui/x-date-pickers/AdapterMoment';\nimport {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider';\nimport DCRReviewPerspectiveView from '../components/DCRReviewPerspectiveView';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'dcrReviewPerspective',\n disableGlobal: true,\n seed: 'dcr'\n});\n\ntype Props = {\n config: DCRReviewPerspectiveConfig;\n onResize?: (width: number, height: number) => void;\n};\n\nconst DCRReviewPerspective = ({config, onResize = identity}: Props) => {\n return (\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n <DCRReviewPerspectiveView />\n <ErrorPopup showErrorFromStore={true} />\n </LocalizationProvider>\n </StylesProvider>\n </ViewIdContext.Provider>\n );\n};\n\nexport default DCRReviewPerspective;\n"],"names":["SingleAttributeContext","React","displayName","useStyles","makeStyles","triggerButton","minWidth","color","popupContent","paddingTop","paddingBottom","paddingLeft","paddingRight","maxWidth","width","checkboxControlRoot","marginTop","marginLeft","checkboxControlLabel","fontSize","checkboxControlCheckbox","marginRight","className","styles","buttonRef","useRef","isOpen","setIsOpen","useState","showInactive","toggleShowInactive","useContext","togglePopup","open","IconButton","ref","classes","root","classnames","onClick","Popover","paper","anchorEl","current","onClose","anchorOrigin","vertical","horizontal","transformOrigin","FormControlLabel","label","control","Checkbox","checked","onChange","e","target","i18n","padding","rightMenuItems","display","flex","justifyContent","alignItems","totalCaption","lineHeight","letterSpacing","flexShrink","ProfileLayoutItemHeader","title","description","extra","children","totalText","isRequired","FacetViewHeader","RequiredMark","DescriptionIcon","HideOnShrink","widthToHide","VerticalDivider","height","margin","Typography","variant","ovIcon","SingleAttributeHeader","caption","totalVisibleValues","showInactiveValuesMenu","isEditableMode","searchQuery","setSearchQuery","setPage","totalNonVisibleValues","nonVisibleValues","attributeType","required","count","OvIcon","nonOvTotal","nonOvValues","ExpandableSearchInput","query","noData","ProfileLayoutItemNoData","text","getAttributeNameFromAttributeUri","getLastUriPart","search","value","Object","values","some","utils","String","theme","messagesContainer","flexDirection","moreButton","backgroundColor","marginBottom","buttonLabel","fontWeight","icon","divider","borderColor","ovFalse","inactive","emptyArray","withContext","ScrollToElementContext","contextValue","parentUri","element","type","highlightedError","isHighlightedErrorType","isAttributeTypeError","uri","noDataText","attributeTypeUri","cardinality","name","dispatch","useDispatch","viewId","ViewIdContext","entity","useSelector","mdmModule","modifiedEntity","state","errors","errorMessage","getAttributePagerActiveTypeErrorMessage","mode","attributeSource","getAttributeSource","entityValuesUris","pipe","pathOr","map","prop","modifiedEntityValues","modifiedEntityValuesUris","showEmptyEditors","isTempUri","emptyEditorValue","useMemo","createNewAttribute","omit","errorClassName","useScrollToAttributeError","isSimple","isModifiedEntityValuesEmpty","isEmptyValue","showEmpty","newValues","filter","onAddAttributes","useCallback","params","profile","param","onChangeAttribute","onDeleteAttribute","onDeactivateError","onAdd","createAttribute","isComplexAttribute","attributes","canCreate","checkCanCreateAttribute","commonProps","crosswalks","showNonOv","isEmptyAttributeList","length","isEmpty","CardinalityMessage","ErrorMessage","message","Button","Add","idx","key","attributeValue","lazy","ownError","getAttributeOwnError","isEmptyEditor","Divider","originalValue","modifiedEntityValue","find","propEq","deleted","includes","edited","value1","value2","cleanser","is","over","lensPath","cleanAttributesWith","valueTransformer","unless","isOv","deleteEmptyComplex","identity","equals","areValuesEqual","cond","always","simpleAttribute","SingleAttributeReadableContent","style","content","SingleAttributeViewSkeleton","Skeleton","container","position","ProfileLayoutItemContent","containerClassName","skeleton","toolbar","isLoading","isEmptyData","pagination","isLoadedOnce","isStartedLoading","setIsStartedLoading","setIsLoadedOnce","useEffect","useLoadedOnce","shouldRenderToolbar","shouldRenderPagination","LinearLoadIndicator","overflow","flexGrow","SingleAttributeView","config","page","hasPaging","entityUri","mdm","pivotingAttributes","max","hasValues","PivotingAttributeContext","BasicView","BasicTablePagination","rowsPerPage","rowsPerPageOptions","onChangePage","useSingleAttributeLoader","attributeUri","metadata","setValues","paging","setPaging","setIsLoading","safePromise","useSafePromise","attributeValuesRef","apiPath","tenant","isViewMode","isHistoryModeEnabled","diff","attributeTypeName","attributeTypeSource","findAttributeValues","findAttributeTypeByUri","globalFilter","loadAttributes","isReadableAttribute","isFirstLevelAttributeUri","rest","getRequest","defaultMaxValues","offset","isDataTenantEntity","async","Infinity","findAttributeValuesByTypeUri","ovValues","slice","totalOvValues","totalValues","getPagedLocalEntity","getPagedEntity","options","undefined","then","response","path","loadedValue","isAnalyticAttribute","catch","error","console","warn","ui","getRequestErrorMessage","finally","useDidUpdateEffect","partitionByOv","partition","totalProp","ifElse","has","RelationsViewStateContext","button","palette","secondary","sortControls","sortSelectorRoot","sortSelectorMenuItem","sortOrderButton","FilterButton","sortOrder","toggleSortOrder","sortOption","changeSortOption","sortOptions","hasSortOptions","isAsc","DropDownEditor","entries","TextFieldProps","menuItem","fullWidth","disableUnderline","MenuProps","SmallIconButton","tooltipTitle","ArrowUpwardIcon","ArrowDownwardIcon","size","ImportDTContext","MAX","Math","pow","cursor","top","left","userSelect","zIndex","badge","badgePosition","right","MultipleImportIcon","Badge","anchorOriginTopRightRectangular","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","tooltipProps","setSecondaryLabel","onOpen","isNil","request","getDataTenantEntitySecondaryLabel","getEntitySecondaryLabel","CircularProgress","colorPrimary","Tooltip","disableFocusListener","useRelationInfo","connection","relation","entityType","getEntityType","entityLabel","getLabel","preparedUri","getEntityUriForLink","relationLabel","getRelationTypeLabelFromMetadata","relationType","SuggestedButtons","acceptRelation","ignoreRelation","props","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","getRelationUriFromConnection","getEntityUriFromConnection","defaultRelationTypeObject","connectionWithDefaultRelationType","evolve","object","relationDirection","newConnections","currentConnections","canAddRelations","isEmptyRelationList","getRelationEditableContent","openedRelation","allowOnlyCreateNew","itemKey","RelationEditor","shouldShowAddRelationButton","shouldShowRelationEditorToAdd","attributesList","RelationAttributes","currentEntityUri","firstLevelRelationAttrTypes","getRelationAttributesList","attributeListEntity","getRelationAttributesFromConnection","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","calcAverageRating","ratings","pluck","mean","defaultTo","toFixed","getCountOfLikes","rating","getCountOfDislikes","calcRatingsScale","percentOfLikes","percentOfDislikes","formattedPercentOfLikes","parseFloat","Number","wrapper","gap","info","axis","scaleHistory","greenBadge","redBadge","scale","scaleBar","ratingsList","borderTop","borderBottom","maxHeight","boxSizing","avatar","userInfo","user","textOverflow","ratingDateWrapper","ratingDate","sourcesWrapper","RatingsPopup","sortedRatings","sort","a","b","timestampA","Date","timestamp","getTime","sortRatingsByTime","agreeCount","disagreeCount","PopupWithArrow","placement","transition","LinearProgress","bar","empty","ThumbUp","ThumbDown","i","comment","Avatar","Person","crosswalk","ColoredSourceIcon","averageRating","counts","Ratings","ratingsRef","setOpen","textTransform","RatingsButtons","onAgree","onDisagree","username","ratingOfCurrentUser","endIcon","buttonContent","entityTypeIcon","showDetailsButton","relationAttributes","RelationComplexItem","showRating","Box","rateRelation","RelationsList","mainEnityUri","isComplex","relationTypeObject","ignoreSuggestedRelation","relatedEntityUri","startDate","endDate","isInDirection","startEntityUri","endEntityUri","createRelation","useSuggestedRelations","getRelationshipsObjectIdsForCollaboration","RelationsContentSkeleton","list","selectors","getEntity","getMode","RelationsView","getConnectionsWithDraftsByViewId","getTotalByViewId","sorting","order","field","queryClause","Maybe","filterValueToQueryStringWithQuotes","queryString","orSome","FilterBuilder","addClause","build","buildRelationsFilter","reload","useRelationsLoader","importDTContextValue","pick","useExpandInvalidRelations","EntityContext","Provider","addButton","removedStyle","inactiveStyle","headCell","entityCell","whiteSpace","headLabelWrapper","transform","rowCell","pointerEvents","cell","CellValueRenderer","rowValue","isSorted","otherProps","index","ExpandedValueTooltip","withFilterAtBottom","headCellData","cellLabel","DefaultHeadCellRenderer","getRelationTypes","rel","uniq","getAttrPathFromColumnId","split","getNestedPathByColumnId","columnId","startsWith","attrPath","getBasicTableColumnsData","columnData","sortable","resizable","nestedPath","headCellRenderer","HeadCellRenderer","rowCellValueRenderer","EntityProfileRenderer","DefaultCellValueRenderer","EditButtons","Edit","Delete","propTypes","PropTypes","RelationsTableViewStateContext","tableContainer","fontFamily","columnsData","basicTableRef","hoverRowIndex","setHoverRowIndex","onFilter","onSort","filters","tableRowsData","reduce","acc","assoc","getOvAttributeValuesByPath","getRelationAttributeValues","getRowValueByColumnId","getBasicTableRowsData","tableColumnsData","isNew","renderRowCell","handleOnRowHover","rowIndex","hoveredRowRightContent","BasicTable","autosizing","rowsData","hoverStateEnabled","defaultColumnWidth","defaultColumnMinWidth","headRowHeight","onRowHover","hoveredRowRightContentWrapper","hoveredRowRightContentContainer","resizeDebounceDelay","onShowInactiveChange","MoreVertIcon","onToggleFilters","allColumnsData","visibleColumns","onChangeColumns","onChangeShowInactive","enabled","ColumnsSettings","selectedColumns","oneLine","relationAvatar","SkeletonCellRenderer","columnIndex","isFirstColumn","RelationsTableSkeleton","TableSkeleton","RowCellRenderer","addArea","skeletonContainer","oneLineSkeleton","relationAvatarSkeleton","relationLabelSkeleton","RelationsTableView","setRowsPerPage","featuresContext","FeaturesContext","showDescription","features","visibleColumnsData","filtersClause","buildColumnsFilter","openedRelations","canDelete","useConfigPermissions","canEditRelations","canRemoveRelations","onChangeRowsPerPage","CHANGE_SEARCH_QUERY","CHANGE_SHOW_INACTIVE","actions","basicTableViewState","createStandardAction","changeShowInactive","reducer","action","payload","ROWS_PER_PAGE_OPTIONS","DEFAULT_COLUMNS_DATA","dataTypeDefinition","DataTypes","hideable","ActivenessAttrTypes","getColumnIdFromAttrUri","attributeUriToSearchUri","getColumnsDataFromRelationAttributes","attr","getAttrDataTypeDefinition","uniqBy","getColumnsData","relationTypes","chain","getReadableAttributesList","DEFAULT_COLUMNS_TO_SHOW","DEFAULT_SORT_FIELD","TableAttributeContext","headLabel","blobWrapper","overflowY","overflowX","defaultWrapper","updateAttribute","historyPalettes","HistoryOperations","insertAttribute","deleteAttribute","historyClassName","onScroll","stopPropagation","simpleValue","appearance","HistoryDiffContext","getHistoryAppearanceByUri","getHistoryAttributeClassName","dataTypeValue","DataTypeValue","getColumnsDataFromAttributeNode","attrNode","parents","reject","childNode","isAttributeSearchUri","actionButtons","AttributeEditing","onCancel","onApply","hasChanges","shouldConnectAllModifiedEntities","isReference","getReferencedEntityUriFromAttrValue","allModifiedEntities","expanded","isMissedTypeError","ErrorType","findAttributeValueByError","curry","either","areOneHierarchyUris","editor","isError","checkIsAttributeTypeError","highlightedAttributeError","isPartOfErrorAttributeTypeUri","isPartOfErrorParentUri","editingValues","modifiedValues","onStartEditing","onReset","checkHasChanges","hasConfigToCreate","shouldOpenInvalidEditors","listenToActions","useActionsHook","missedAttributeError","both","forEach","stopListeningActions","useExpandAttributes","withTableContext","deletedUris","Boolean","onEdit","onRemove","getOvAttributeValuesByPathWithUri","getAttributeValues","checkIsEditableMode","hideRightContent","checkCanDeleteAttribute","isReltioCrosswalk","canEdit","checkCanEditAttribute","checkCanEdit","handleEditAttribute","handleRemoveAttribute","attribute","context","header","TableAttributeView","isAttributeValueEmpty","newAttributeUri","setNewAttributeUri","originalValues","setOriginalValues","actualValues","not","refEntity","isEmptyEntity","newAttribute","createDefaultValues","attributeTypes","getEditableAttributeTypeSubAttributes","prev","editingValueOriginal","attributeItem","without","validate","tempEntitiesMap","validateComplexAttribute","evaluateErrorPath","getSingleAttributeEntity","original","useEditableAttribute","preparedValues","item","showTable","hidden","showToolbar","hidePageSelectorWhenSmall","treeContainer","tree","buttonsContainer","linearIndicator","ConfigContext","onImageLoadFail","src","DEFAULT_ICON","Node","node","nodeId","absoluteImagePath","popperAnchor","setPopperAnchor","isSelected","entityTypeGraphIcon","getPropWithInheritance","getAbsoluteImageUrl","alt","onError","HierarchyNodeTitle","HierarchyViewSkeleton","_extends","assign","arguments","source","prototype","hasOwnProperty","call","apply","this","viewBox","version","xmlns","xmlnsXlink","d","stroke","strokeWidth","fill","fillRule","xlinkHref","fillOpacity","mask","opacity","HierarchyViewHeader","onScrollToCurrentEntity","onGraphOpen","isGraphView","showNavigateToGraph","showForDisabled","ShowGraphIcon","SelectNodeIcon","lineBlock","lineChildren","bottom","treeTheme","rootIndex","verticalLine","horizontalLineRight","textAlign","rootNode","longRootNode","nodeContent","nodeRootLongContent","rowContents","borderLeft","verticalAlign","buttonWrapper","collapsedButton","expandedButton","borderRight","rowTitle","nodeContentRenderer","scaffoldBlockPxWidth","toggleChildrenVisibility","treeIndex","nodeTitle","showToggleChildrenButton","treeNodeRenderer","lowerSiblingCounts","scaffoldBlockCount","scaffold","lowerSiblingCount","push","shift","scaffoldWidth","nodeStyle","rowHeight","slideRegionSize","getNodeKey","getCacheKey","nodeCounter","generateId","processResponse","fakeRoot","parentPaths","nextRoot","j","nextParent","entities","isRoot","ROOTS_PER_PAGE_OPTIONS","textField","spacing","panel","treeWrapper","checkedNode","editorNode","visibility","join","NodeRendererDefault","Component","render","connectDragPreview","connectDragSource","isDragging","canDrop","canDrag","subtitle","draggedNode","isSearchMatch","isSearchFocus","buttons","didDrop","treeId","isOver","parentNode","rowDirection","nodeSubtitle","rowDirectionClass","handle","Array","_","DragIndicator","dropEffect","isDraggedDescendant","ReactSortableTreeUtils","isLandingPadActive","cycled","pending","btn","offsetX","offsetY","defaultProps","TreeThemeContext","createContext","generateTreeNodeProps","TreeNode","listIndex","swapFrom","swapLength","swapDepth","connectDropTarget","getPrevRow","lineClass","highlightLineClass","MIN_NODE_CONTENT_WIDTH","treeNodeProps","treeNodeClassName","Children","child","cloneElement","contextType","GenericNodeType","showParents","HierarchyNodeType","EntityType","RelationType","parent","directParentUri","ActivenessDateType","TreeType","graphTypes","activenessDate","scrollTo","MeasuredNode","measure","registerChild","NodeRenderer","scrollToContainerElementByNodeId","scrollingContainer","document","querySelector","getElementByNodeId","elementRect","getBoundingClientRect","scrollingContainerRect","scrollLeft","setTimeout","DefaultNodeRenderer","hierarchyTheme","Tree","scrollToNode","onRequestChildren","onNodeMoved","inlineRoot","treeData","rootChildren","virtualizedListRef","treeDataRef","scrollTimerRef","getVirtualizedListInstance","measurerCache","keyMapper","rawIndex","nodeInfo","propOr","CellMeasurerCache","fixedWidth","defaultHeight","onWindowResize","clearAll","window","addEventListener","removeEventListener","useRefreshableMeasurerCache","useRunOnceAfterValueInitialization","vList","forceUpdateGrid","getScrollingContainer","results","searchFocusOffset","searchMethod","scrollToRow","clearTimeout","onSortableTreeChange","nodeRenderWithMeasure","cache","getMeasuredNode","generateNodeProps","rowInfo","previousTreeData","usePrevious","onMoveNode","movedNodeInfo","prevPath","nextParentNode","prevParentNode","parentPath","result","handleOnLazyLoadChildren","handleResize","skipOnMount","handleWidth","onResize","ReactSortableTree","isVirtualized","reactVirtualizedListProps","scrollToAlignment","onLazyLoadChildren","useCommonStyles","loadingSpinner","LoadingNode","commonStyles","LoadingSpinner","avatarWithMultiParent","number","multiParentIcon","actionsBlock","actionsBlockWithOpenMenu","actionsBlockForCheckedNode","regularNodeCheckbox","strokeOpacity","cx","cy","r","loadingNode","MultiParentBlockItem","multiParent","border","borderBottomColor","borderWidth","additionalParents","details","detailLine","detail","wordWrap","textIndent","detailLabel","detailValue","prepareTree","sortField","mapTree","childrenProcessing","sortTreeChildren","typesLabelsMap","createRelationTypesLabelsMap","nodeProcessing","formatNodeFromTreeResponse","addSelfRelatedNode","expandNode","buildEntitiesMapFromTree","getGraphType","convertParentProp","getNodeUri","getRelationsProp","getRelationProp","isArray","parentIndex","findIndex","directParent","formatted","formatNodeFromHopResponse","traversedRelations","untraversedRelations","formattedNode","complement","clearNodeForEntityMap","buildEntitiesMapFromHopsEntities","keys","processHopsResponse","isReversed","childObjectKey","objectURI","buildEntitiesMapFromHops","json","createNewTreeNode","generateNewRelationUri","treeActions","loadChildren","parentId","signal","getState","childrenLoading","getHops","rawSubTree","queue","visitedNodes","breakCycles","buildTreeFromHops","entitiesSubMap","childrenLoaded","entitiesMappingLoaded","isAbortError","cancelChildrenLoading","showCurrentEntity","currentEntityShownInTree","resetScrollToNode","hasEntityTypesWithSecondaryLabelPattern","getAllEntityTypesForGraphType","any","isRelationLoaded","isNodeChecked","checkedNodes","isEditorNode","hasEditorNode","loadRelationDetails","currentRelation","resolve","getRelation","relationDetails","detailedRelation","treeNodeChanged","hasLoadingNode","getShowSecondaryLabelValue","showSecondaryLabel","getRelationDetails","ACTIVENESS_ATTR_TYPES","RelationDetails","relationshipData","typeName","attrType","gutterBottom","MetadataType","editButton","ActionsBlock","onToggleRelationDetails","onMenuOpen","onMenuClose","onAddParent","onAddChild","onDelete","AddCircleIcon","getGraphConfig","getReverseRelationsConfig","getGraphTypeConfig","getValidatedSortOrderFromConfig","getValidatedSortOrder","getValidatedSortFieldFromConfig","getValidatedSortField","getIsSecondaryLabelEnabledFromConfig","getTypeGraphIcon","entityTypeUri","canEditNode","canAddRelative","isChild","nodeEntityTypeUri","graphTypeUri","graphType","relationTypeUris","getRelationshipTypeUrisFromGraphType","isNodeEntityInstanceOf","isInHierarchy","__","checkMetadataForCreate","getStartObjectTypeUri","getEndObjectTypeUri","canAddParentForNode","canAddChildForNode","canDeleteNode","simpleNodePropsMapping","onParentsRequested","isSelectedNode","isEditable","commonActionHandlers","onToggleShowParents","needLoadAdditionalParents","actionHandlers","treeNodeEditingStarted","nodeStartEditing","treeNodeNewParentEditingStarted","newNode","treeNodeNewChildEditingStarted","store","nodeStartAddingChild","treeRelationRemoved","treeNodeRemoved","updatedNode","toggleRelationDetails","getAdditionalParents","mapEntry","NodeContext","onToggleNodeCheckbox","canSelect","RegularNode","PageRequestsAbortingContext","nodePropsMapping","setShowControls","showActionsBlock","hideActionsBlock","openActionsMenu","setOpenActionsMenu","showActionsMenu","hideActionsMenu","hasMultiParents","toggleShowParents","bind","event","onMouseEnter","onMouseLeave","fromEditorValue","option","toEditorValue","relationsTypesOptions","NodeRelationTypeSelector","labelsMap","getDirectionalLabel","getDirectionalLabelFromObject","tap","byLabel","ascend","getEntityTypeWithInheritedIcon","typeIcon","startObject","endObject","directionalLabel","typeLabel","objectTypeURI","getRelationTypesOptions","RelationTypeSelector","RelationTypeType","isAvailableRelationForRelatedEntity","relatedEntity","isRelatedEntityInstanceOf","getObjectUri","editorContainer","dense","EditorNode","editingMode","initialConnection","isAddingParent","NODE_EDITING_MODES","getHierarchyNodeEditorActiveError","allErrors","relationTypeUri","globalSearchRequestOptions","allAvailableRelationTypes","allPass","getAllAvailableRelationTypes","availableRelationTypes","isAvailableRelationBetweenEntities","availableEntityTypeUris","getSuitableEntityTypeUrisForRelationTypes","onRelationTypeChange","treeNodeRelationTypeChanged","onChangeEntity","treeNodeEntityChanged","relationAttrTypes","selectorCompatibleEntity","validateHierarchyConnection","treeNodeNewParentEditingCanceled","treeNodeNewChildEditingCanceled","treeNodeEditingCanceled","nodeCancelEditing","dataAction","treeRelationCreated","treeRelationChanged","getPayloadForNodeApplyEditing","treeNodeNewParentEditingApplied","treeNodeNewChildEditingApplied","treeNodeEditingApplied","treeAppearanceChangeActionCreator","nodeApplyEditing","canApply","getErrorMessage","isErrorHighlighted","handleHeight","ErrorWrapper","EntitySelector","entityTypesUris","attributeTypesSelectionStrategy","relationEditorAttributeTypesSelectionStrategy","NodeTypes","getNodeType","T","HierarchyPanel","onChildrenRequested","onTreeChanged","onTreeScroll","nodeContextValue","treeThemeContextValue","relatedNode","SelectorWithOnlyOptionAutoSelect","handleChange","date","DateEditor","slotProps","popupHorizontalPadding","FormControlLabelWithTooltip","withTooltip","SORTING_OPTIONS","TREE_SORT_FIELD_VALUES","FilterSortButton","hasSecondaryLabelPattern","onShowSecondaryLabelChange","TREE_SORT_ORDER_VALUES","viewOptionsTitle","newSortField","textContainer","separator","Breadcrumbs","items","expandText","li","href","Link","underline","BreadcrumbsType","fieldsToSave","getStateToSave","anyPass","filtersBar","filterSortButton","breadcrumbs","graphTypeSelector","HierarchyTreeToolbar","onChangeGraphType","showPath","isSecondaryLabelEnabled","showSecondaryLabelValue","nodePath","getPathByEntityUri","savePreferences","debounce","trees","treesStateSaved","saveTreesPreferences","onTreeSort","scrollToTreeTop","onTreeActivenessDateChange","hierarchyViewContainer","view","HierarchyTreeView","graph","graphConfig","_showNavigateToGraph","initialActivenessDate","now","defaultGraphType","currentGraphType","setCurrentGraphType","setCheckedNodes","timerRef","isCurrentReversed","currentGraphTypes","previousActivenessDate","showCurrentEntityDelayed","hasRoot","updatedTrees","updateTreesWithNewEntity","treeChanged","updatedTime","createTreeLoadedEvent","treeLoaded","treeProcessing","hasEntityInTree","treeLoading","getTree","treeLoadedWithError","useTreeLoader","isTreeForCurrentEntityUri","useNewEntityTree","parentsProcessing","loadParents","newParent","JSON","stringify","openGraph","graphLayout","GraphLayout","bodyWrapper","CustomView","basicViewRef","dialogRef","showModal","setShowModal","defaultTooltip","html","visible","updatedTooltip","customStyles","popup","useAPI","innerHTML","from","childNodes","appendChild","Dialog","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","ProfilePotentialMatchesViewSkeleton","matchesContainer","footer","DEFAULT_OPTIONS","showTransitiveMatches","showInactiveEntities","DEFAULT_SORTING","Order","wrapView","withErrorBoundary","withDragHandle","WrappedStubView","WrappedProfileAttributesView","AttributesView","excludeUris","includeUris","attributesCount","pinnedAttributes","WrappedProfileSingleAttributeView","singleAttribute","setShowInactive","useSingleAttribute","WrappedProfileTableAttributeView","tableAttribute","getAttributeTypesTree","flatAttributeTreeNode","initialState","useReducer","requestFilters","mdmFilters","columnFilter","columnFilterToMdmFilter","buildMDMFilters","changePage","toggleSort","changeFilter","toggleFilters","changeColumns","useActions","useTableAttribute","WrappedProfileRelationsView","parsedConfig","parseRelationsConfig","relationsState","append","setSortOrder","setSortOption","useRelationsState","WrappedCustomView","WrappedHierarchyPathView","setTreeData","graphUri","setErrorMessage","pagedData","setPagedData","forest","newTrees","getPathsTree","useLoadPaths","getRowHeight","clearHeightsCache","heightsCache","setHeightsCache","prevCache","useDynamicNodesHeights","refreshMode","refreshRate","labelRowsPerPage","WrappedProfilePotentialMatchesView","turnOnDisableSpinner","turnOffDisableSpinner","matches","loadMatches","useMatchesLoader","onStartLoading","onFinishLoading","onFinishMatchAction","openPotentialMatchPerspective","perspectiveId","getPotentialMatchesObjectIdsForCollaboration","getEntityUriFromMatchObject","WrappedHierarchyTreeView","WrappedRelationshipsTableView","sortColumn","changeRowsPerPage","subtract","useRelationsTableState","WrappedEntityMapView","isFullscreen","onToggleFullscreen","mapKey","markers","setMarkers","useMarkers","loadingElement","defaultCenter","lat","lng","mapOptions","mapTypeControl","FullscreenExitIcon","FullscreenIcon","ReltioMap","defaultZoom","mapContainerClassName","WrappedImageAttributeView","entityValues","ImageAttributesLine","ViewsFactory","ViewTypes","ProfileViewTypes","getComponentBy","propName","HierarchyTree","HierarchyPaths","RelationsTable","Relations","Attributes","SingleAttribute","AttributeTable","Map","Custom","ImageAttribute","PotentialMatches","getComponent","Fallback","ViewComponent","isAutosize","Suspense","fallback","basicView","fixedSizeContainer","overflowContainer","omittingProps","ProfileLayoutItem","layoutItemConfig","views","ResizeComponent","AutosizeComponent","isCustomView","class","platform","CustomScriptPlatform","reltioClass","getViewTypeByClass","customView","DEFAULT_MIN_WIDTH","scrollWrapper","scrollableContent","scrollbarWidth","ProfileLayout","layout","frozen","layoutOptions","onLayoutChanged","scrollWrapperRef","offsetWidth","clientWidth","boundariesElement","popupBoundariesValue","priority","scrollTop","PopupBoundariesContext","ReltioGridLayout","LayoutItem","draggableHandle","isStatic","closeIcon","snackbar","flexWrap","Notification","notification","autoCloseInterval","autoHideDuration","setAction","setShow","closeSnackbar","_e","reason","mdmModuleUi","cancelAction","onConfirm","applyAction","needConfirmation","CloseIcon","Portal","body","Snackbar","confirmationText","confirmationDescription","Notifications","notifications","n","editingButtons","searchResults","comments","menuButton","cancelButton","SuggestIcon","SvgIcon","CopyIcon","filterGroupByPermissions","group","isTempEntity","isWorkflowEnabled","canStartProcessInstanceSearchQuery","permission","isSuggestMode","checkMetadataPermission","PerspectiveProfileBand","profileBandConfig","showMenu","profileOperation","isOperationSaving","Operation","isDisabledButtons","openCloneConfirmationDialog","setOpenCloneConfirmationDialog","onCloneDiscard","onClone","cloneAction","cloneActionProp","isRelationSuitableForEntityType","isRelationWithEntityType","modifiedRelationTypes","getRelationTypeUriFromAttrType","data","relationshipTypesToCopy","useCloneAction","OPTIONS_GROUP","CreateIcon","VisibilityIcon","BUTTONS_GROUP","confirm","shouldShowSelect","MetadataPermissions","hasOnlyReadPermission","accessibleOptionsGroup","accessibleButtonsGroup","handleSave","ProfileBand","mr","ProfileBandHistory","ProfileBandNavigation","ModeSwitcherSelect","optionsGroup","buttonsGroup","MenuItemRenderer","MultilineMenuItem","ActivePanel","RightSidePanel","active","tabs","headerProps","SidePanel","SidePanelContentHeader","itemWrapper","DBConnectorsList","dBConnectorSideViews","sideView","WorkflowButton","WorkflowTasksContext","Inbox","CollaborationButton","commentsMap","calcTotalCommentItems","CollaborationIcon","WorkflowList","tasks","task","WorkflowTaskCard","taskId","SidePanelEmptyState","showMoreLink","showMoreIcon","CollaborationList","getComments","pageToken","useCommentsEntitiesMap","objectId","commentId","CollaborationItem","KeyboardArrowDown","getSecondTitle","profileContainer","ProfilePerspectiveResizablePanes","hideHistory","defaultTab","isWorkflowSideViewEnabled","isCollaborationSideViewEnabled","isDBConnectorSideViewEnabled","isCollaborationEnabled","Collaboration","historyEvent","workflowTasksContext","collaborationContext","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","historyButtonId","History","historyFilter","onApplyFilter","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","enabledWorkflowButton","enabledCollaborationButton","collaborationTotal","Workflow","mainTitle","secondTitle","rightContent","AddWorkflowButton","HistoryIcon","HistoryView","contributorsUris","HistoryPanelEmptyState","HistoryHeader","DBConnector","ConnectorsIcon","useProfileRightSidePanelElements","ProfileResizablePanes","buttonsProps","emptyState","typography","fontWeightRegular","loadingWrapper","errorWrapper","successWrapper","success","indicatorIcon","link","pxToRem","BackgroundUpdateStatus","CloseIconButton","ProcessLoading","ProcessSuccess","onRefresh","ProcessError","BackgroundProcessIndicator","status","checkEntityTypeInList","entityTypeList","isEntityTypeInBackgroundProcess","perspectiveView","default","profileWrapper","ProfilePerspectiveView","saveState","getSavedState","profileBand","workflow","isHistoryActive","keywordValue","historyDiff","useHistoryDiff","workflowTasks","workflowConfig","commonWorkflowTasks","useCommonWorkflowTasks","defaultActionSuccessHandler","useWorkflowDefaultActionSuccessHandler","onActionSuccess","useWorkflowTasks","isEmptyState","useEntityLoadingIndication","entityUpdatedTime","onRefreshProfile","onCloseBackgroundProcessIndicator","cancelUpdateProcess","isOpenBackgroundProcessIndicator","backgroundUpdateStatus","autoUpdateInReadMode","entityTypes","entityTypesForUpdate","needBackgroundProcess","isAutoUpdated","timerId","setIsOpenBackgroundProcessIndicator","setBackgroundUpdateStatus","backgroundUpdateDelay","getUpdatedTime","numberOfRetry","getEntityUpdatedTime","runBackgroundUpdate","NUMBER_OF_RETRY","useBackgroundProcessIndicator","getProfileObjectIdsForCollaboration","emptyCollaboration","collaboration","useCollaboration","isLoaded","isLayoutLoaded","onLayoutReset","onResetUndo","handleLayoutChange","profileConfig","setLayout","setViews","canRead","validatedViews","validatedLayout","removeUnsupportedLayoutItems","configHash","hash","nestedRoute","savedStateKey","getSavedStateAndFix","debouncedSaveState","savedState","updateSavedState","useSavedStateForEntityType","tempConfig","handleResetUndo","handleLayoutReset","fixedViews","fixedLayout","fixNonUniqViewsIds","isConfigChanged","useProfileLayout","useHistorySlice","isValidateReadMode","isDTEntity","profileViews","hasProfileViews","needDispatch","useProfileValidation","sidePanelViews","hideLayout","renderEmptyState","SnackbarRenderer","resetLayout","useLayoutResetter","ProfilePerspectiveViewContext","SearchValueContext","AttributesErrorsPanel","attributesWithErrors","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","seed","userPreferencesComparator","newState","sortLayoutItems","x","y","prepareState","looseEquals","qxSandboxApi","getSavedStatePromisified","promisifyCallback","showSnackbarMessage","useSnackbar","processedConfig","convertOldProfileConfig","SnackbarContext","S","SandboxAPIContext","StylesProvider","LocalizationProvider","dateAdapter","AdapterMoment","floor","ErrorPopup","showErrorFromStore","titleContainer","totalNumber","TagListHeader","switchToProfile","ArrowForwardIosRounded","Spacer","TagProfileBand","Toolbar","tagsContainer","tagsView","listContainer","entitiesList","TagPerspectiveView","tag","safeRequestTotalPromise","safeRequestEntitiesPromise","setTotal","setEntities","requestEntities","requestTotal","getDataTenantFromEntityUri","fieldName","isDT","getEntities","requestOptions","select","getFilteredEntitiesFromDataTenant","enrichEntityWithDataTenant","getFilteredEntities","getTotalFromDataTenant","getTotals","useTagsProvider","useTag","refScrollBlock","hasPagination","ProfilesList","actionsWrapper","DCRProfileBand","entityTask","objectURIs","getEntityUriFromDCRUri","TaskActionButtons","perspectiveContainer","attributesWrapper","contentWrapper","processTypes","DCRReviewPerspectiveView","actionSuccessHandler","point"],"sourceRoot":""}
|