@reltio/remotes 1.4.1387 → 1.4.1389

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/1219.js +2 -0
  2. package/1219.js.map +1 -0
  3. package/1375.js +1 -1
  4. package/1375.js.map +1 -1
  5. package/1689.css +636 -0
  6. package/1689.css.map +1 -0
  7. package/1689.js +2 -0
  8. package/1689.js.map +1 -0
  9. package/2114.js +1 -1
  10. package/2114.js.map +1 -1
  11. package/2443.js +3 -0
  12. package/{8782.js.LICENSE.txt → 2443.js.LICENSE.txt} +0 -0
  13. package/2443.js.map +1 -0
  14. package/2890.js +1 -1
  15. package/2890.js.map +1 -1
  16. package/3149.js +2 -0
  17. package/3149.js.map +1 -0
  18. package/3213.js +3 -0
  19. package/{3723.js.LICENSE.txt → 3213.js.LICENSE.txt} +0 -0
  20. package/3213.js.map +1 -0
  21. package/3273.js +2 -0
  22. package/3273.js.map +1 -0
  23. package/3540.js +1 -1
  24. package/3540.js.map +1 -1
  25. package/3602.js +2 -0
  26. package/3602.js.map +1 -0
  27. package/4015.js +2 -0
  28. package/4015.js.map +1 -0
  29. package/447.js +1 -1
  30. package/447.js.map +1 -1
  31. package/461.js +1 -1
  32. package/461.js.map +1 -1
  33. package/4678.js +2 -0
  34. package/4678.js.map +1 -0
  35. package/4843.js +1 -1
  36. package/{7880.css → 4881.css} +1 -1
  37. package/{7880.css.map → 4881.css.map} +1 -1
  38. package/4881.js +2 -0
  39. package/4881.js.map +1 -0
  40. package/4889.js +1 -1
  41. package/4889.js.map +1 -1
  42. package/5400.js +1 -1
  43. package/5400.js.map +1 -1
  44. package/5601.js +2 -0
  45. package/5601.js.map +1 -0
  46. package/5709.js +1 -1
  47. package/5709.js.map +1 -1
  48. package/5720.js +1 -1
  49. package/5720.js.map +1 -1
  50. package/5937.js +1 -1
  51. package/5937.js.map +1 -1
  52. package/6103.js +1 -1
  53. package/6103.js.map +1 -1
  54. package/6312.js +1 -1
  55. package/6312.js.map +1 -1
  56. package/6413.js +3 -0
  57. package/{5312.js.LICENSE.txt → 6413.js.LICENSE.txt} +0 -0
  58. package/6413.js.map +1 -0
  59. package/6617.js +2 -0
  60. package/6617.js.map +1 -0
  61. package/6669.js +2 -0
  62. package/6669.js.map +1 -0
  63. package/6710.js +2 -0
  64. package/6710.js.map +1 -0
  65. package/6913.js +2 -0
  66. package/6913.js.map +1 -0
  67. package/7584.js +2 -0
  68. package/7584.js.map +1 -0
  69. package/7937.js +1 -1
  70. package/7937.js.map +1 -1
  71. package/8051.js +2 -0
  72. package/8051.js.map +1 -0
  73. package/8183.js +2 -0
  74. package/8183.js.map +1 -0
  75. package/8443.js +2 -0
  76. package/8443.js.map +1 -0
  77. package/9043.js +1 -1
  78. package/9043.js.map +1 -1
  79. package/9211.js +1 -1
  80. package/9211.js.map +1 -1
  81. package/9431.js +1 -1
  82. package/9431.js.map +1 -1
  83. package/9630.js +1 -1
  84. package/9630.js.map +1 -1
  85. package/9754.js +3 -0
  86. package/{9396.js.LICENSE.txt → 9754.js.LICENSE.txt} +0 -0
  87. package/9754.js.map +1 -0
  88. package/99.js +2 -0
  89. package/99.js.map +1 -0
  90. package/package.json +1 -1
  91. package/remoteEntry.js +1 -1
  92. package/remoteEntry.js.map +1 -1
  93. package/162.js +0 -2
  94. package/162.js.map +0 -1
  95. package/1807.js +0 -2
  96. package/1807.js.map +0 -1
  97. package/3723.js +0 -3
  98. package/3723.js.map +0 -1
  99. package/376.js +0 -2
  100. package/376.js.map +0 -1
  101. package/3760.js +0 -2
  102. package/3760.js.map +0 -1
  103. package/39.js +0 -2
  104. package/39.js.map +0 -1
  105. package/4038.js +0 -2
  106. package/4038.js.map +0 -1
  107. package/4312.js +0 -2
  108. package/4312.js.map +0 -1
  109. package/4689.js +0 -2
  110. package/4689.js.map +0 -1
  111. package/4713.js +0 -2
  112. package/4713.js.map +0 -1
  113. package/5312.js +0 -3
  114. package/5312.js.map +0 -1
  115. package/7861.js +0 -2
  116. package/7861.js.map +0 -1
  117. package/7880.js +0 -2
  118. package/7880.js.map +0 -1
  119. package/8782.js +0 -3
  120. package/8782.js.map +0 -1
  121. package/8922.js +0 -2
  122. package/8922.js.map +0 -1
  123. package/9396.js +0 -3
  124. package/9396.js.map +0 -1
  125. package/9606.css +0 -3
  126. package/9606.css.map +0 -1
  127. package/9606.js +0 -2
  128. package/9606.js.map +0 -1
  129. package/9992.js +0 -2
  130. package/9992.js.map +0 -1
package/9211.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"9211.js","mappings":"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","sources":["webpack://@reltio/remotes/../components/src/components/AttributeSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/AttributeSelector/AttributeSelector.tsx","webpack://@reltio/remotes/../components/src/components/BasicView/styles.js","webpack://@reltio/remotes/../components/src/components/BasicView/BasicView.tsx","webpack://@reltio/remotes/../components/src/components/DateIntervalSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/DateIntervalSelector/DateIntervalSelector.tsx","webpack://@reltio/remotes/../components/src/components/ErrorBoundary/ErrorBoundary.tsx","webpack://@reltio/remotes/../components/src/components/UserSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/UserSelector/UserSelector.tsx","webpack://@reltio/remotes/../components/src/components/activityLog/types/ActivityTypes.ts","webpack://@reltio/remotes/../components/src/components/activityLog/utils/activities.ts","webpack://@reltio/remotes/../components/src/components/editors/CustomDateRangeEditor/styles.ts","webpack://@reltio/remotes/../components/src/components/editors/CustomDateRangeEditor/CustomDateRangeEditor.tsx","webpack://@reltio/remotes/../components/src/types/index.ts","webpack://@reltio/remotes/../hierarchy-tree/src/icons/SelectNode.svg","webpack://@reltio/remotes/../hierarchy-tree/src/icons/ShowGraph.svg","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/HierarchyViewHeader/styles.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/HierarchyViewHeader/HierarchyViewHeader.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/HierarchyPanel/styles.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Tree/styles.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Tree/theme/utils.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Tree/theme/node-content-renderer.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Tree/treeThemeContext.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Tree/theme/tree-node-renderer.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Tree/theme/index.js","webpack://@reltio/remotes/../hierarchy-tree/src/constants/prop-types.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Tree/measureHelpers.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Tree/nodeHelpers.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Tree/Tree.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/commonStyles.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/LoadingNode/styles.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/LoadingNode/LoadingNode.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/RegularNode/styles.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/RegularNode/multiParentOverlap.svg","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/components/NodeTitle/styles.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/components/NodeTitle/NodeTitle.tsx","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/components/MultiParentBlock/styles.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/components/MultiParentBlock/parentIcon.svg","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/components/MultiParentBlock/MultiParentBlock.tsx","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/components/RelationDetails/styles.js","webpack://@reltio/remotes/../hierarchy-tree/src/helpers/treeDataProvider.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/helpers/treeHelpers.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/helpers/nodeHelpers.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/components/RelationDetails/RelationDetails.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/components/ActionsBlock/styles.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/components/ActionsBlock/ActionsBlock.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/helpers/configHelpers.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/RegularNode/helpers/nodeMappingHelpers.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/nodeContext.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/RegularNode/useEntityDetails.ts","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/RegularNode/RegularNode.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/components/NodeRelationTypeSelector/NodeRelationTypeSelector.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/EditorNode/helpers.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/EditorNode/styles.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/EditorNode/EditorNode.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/NodesFactory.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Node/Node.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/HierarchyPanel/HierarchyPanel.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/helpers/useTreeLoader.ts","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/GraphTypeSelector/GraphTypeSelector.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/ActivenessDateControl/ActivenessDateControl.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/FilterSortButton/styles.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/FilterSortButton/FilterSortButton.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Breadcrumbs/styles.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/Breadcrumbs/Breadcrumbs.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/helpers/saveStateHelpers.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/helpers/useNewEntityTree.ts","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/styles.js","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/HierarchyView.tsx","webpack://@reltio/remotes/../hierarchy-tree/src/HierarchyView/index.js","webpack://@reltio/remotes/../hierarchy-tree/src/index.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileAttributesView/ProfileAttributesView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/contexts/SingleAttributeContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/FilterButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/FilterButton/FilterButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeHeader/SingleAttributeHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeEditableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/hooks/helpers/index.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeEditableContent/SingleAttributeEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeReadableContent/SingleAttributeReadableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeView/SingleAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/hooks/useSingleAttributeLoader.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/contexts/RelationsViewStateContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/FilterButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/FilterButton/FilterButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/contexts/ImportDTContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/hooks/useImportFromDTLoader.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/MultipleImportIcon.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/ImportFromDT.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/RelationsHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationTooltip/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationTooltip/RelationTooltip.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useRelationInfo.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SuggestedButtons/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SuggestedButtons/SuggestedButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/EditableRelationItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/EditableRelationItem/EditableRelationItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/permissions.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/relation.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationArrowButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationArrowButton/RelationArrowButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SecondLevelWrapper/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SecondLevelWrapper/SecondLevelWrapper.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useSecondLevelConnections.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsEditableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsEditableContent/RelationsEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationAttributes/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationAttributes/RelationAttributes.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/ShowDetailsButton/ShowDetailsButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationItem/RelationItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/ratings.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/Ratings/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/Ratings/Ratings.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RatingsButtons/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RatingsButtons/RatingsButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationCompexItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationCompexItem/RelationComplexItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationsList.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useSuggestedRelations.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsContent/RelationsContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsView/RelationsView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/filters.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useRelationsState.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/contexts/TableAttributeContext.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/reducer.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/HeadCellRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/helpers/tableAttributeHelpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTableHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTableHeader/AttributeTableHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/RowCellRenderer.tsx","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/AttributeEditing/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeEditing/AttributeEditing.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/hooks/useEditableAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/TableAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/hooks/useLoadPaths.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/ConfigContext.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/Node.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/helpers.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/node-content-renderer.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/index.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/tree-node-data-renderer.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/icons/ShowGraph.svg","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/HierarchyPathsHeader.tsx","webpack://@reltio/remotes/../profile/src/components/Sandbox/styles.ts","webpack://@reltio/remotes/../profile/src/components/Sandbox/CustomView.tsx","webpack://@reltio/remotes/../profile/src/components/views/HOCs/styles.ts","webpack://@reltio/remotes/../profile/src/components/views/HOCs/withDragHandle.tsx","webpack://@reltio/remotes/../profile/src/components/views/HOCs/withErrorBoundary.tsx","webpack://@reltio/remotes/../profile/src/components/views/styles.ts","webpack://@reltio/remotes/../profile/src/components/EntityMapView/useMarkers.js","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/styles.ts","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/ProfilePotentialMatchesView.tsx","webpack://@reltio/remotes/../profile/src/components/views/ViewsFactory.tsx","webpack://@reltio/remotes/../profile/src/components/views/StubView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/ProfileSingleAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/hooks/useSingleAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/ProfileTableAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/useTableAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/helpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/ProfileRelationsView.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/HierarchyPathsView.tsx","webpack://@reltio/remotes/../profile/src/components/EntityMapView/EntityMapView.tsx","webpack://@reltio/remotes/../profile/src/components/views/ViewComponent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItem/ProfileLayoutItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileLayout/ProfileLayout.tsx","webpack://@reltio/remotes/../profile/src/components/Notifications/styles.ts","webpack://@reltio/remotes/../profile/src/components/Notifications/Notification.tsx","webpack://@reltio/remotes/../profile/src/components/Notifications/Notifications.tsx","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/suggest.svg","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/copy.svg","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/styles.ts","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/hooks/useCloneAction.ts","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/PerspectiveProfileBand.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowButton/WorkflowButton.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationList/CollaborationList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowList/WorkflowList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/icons/CollaborationIcon.svg","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationButton/CollaborationButton.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowPanelEmptyState/WorkflowPanelEmptyState.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationPanelEmptyState/CollaborationPanelEmptyState.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/icons/ConnectorsIcon.svg","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/DBConnectorsList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/DBConnectorsList/DBConnectorsList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/RightSidePanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/components/ErrorsPanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/icons/hyperlink.svg","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/helpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/components/Error.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/useCachedErrors.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/ProfileErrorsPanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/ProfilePerspectiveView.tsx","webpack://@reltio/remotes/../profile/src/components/hooks/useProfileValidation.ts","webpack://@reltio/remotes/../profile/src/perspectives/ProfilePerspective.tsx","webpack://@reltio/remotes/../profile/src/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/../relations-table/src/RelationsTableView/AddRelationButton/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/AddRelationButton/AddRelationButton.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/RowCellRenderer.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/EntityProfileRenderer.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/HeadCellRenderer.js","webpack://@reltio/remotes/../relations-table/src/core/relations.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/helpers/dataHelpers.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/EditButtons.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/RelationsTable.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/helpers/buttonsHelper.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/MoreButton/styles.ts","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/MoreButton/MoreButton.tsx","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/RelationsTableHeader.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/stateReducer.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/helpers/tableHelpers.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/helpers/relationsHelpers.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableView.tsx","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/index.js","webpack://@reltio/remotes/../relations-table/src/index.tsx"],"sourcesContent":["import {makeStyles} from '@material-ui/core/styles';\n\nexport const customStyles = {\n input: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n menuPortal: (currentStyles) => ({...currentStyles, zIndex: 1300})\n};\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n title: {\n paddingBottom: '10px',\n paddingLeft: '5px',\n fontSize: '14px'\n },\n dropDownInput: {\n width: '100%',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n borderTop: '4px'\n },\n option: {\n fontSize: '14px',\n height: '32px'\n },\n noOptionsMessage: {\n fontSize: '14px'\n }\n});\n","import React, {useCallback, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {pipe, defaultTo} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {AttributeOption} from '../../types';\nimport mdmModule from '@reltio/mdm-module';\nimport {MultiValueProps, OptionProps} from 'react-select';\nimport {AttributeType, getAttributeTypeSubAttributes, Metadata, TEntityType} from '@reltio/mdm-sdk';\nimport {Typography as Typography} from '@material-ui/core';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport MultiValue from '../ReactSelect/commonComponents/MultiValue';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport AttributeListItem from '../AttributeListItem/AttributeListItem';\nimport {customStyles, useStyles} from './styles';\n\ntype Props = {\n entityType: TEntityType;\n selectedAttributes: AttributeOption[];\n className?: string;\n onChange?: (attributes: AttributeOption[]) => void;\n title?: string;\n disableUnderline?: boolean;\n menuPlacement?: string;\n};\n\nconst AttributeSelector = ({\n entityType,\n selectedAttributes,\n className,\n onChange,\n title,\n disableUnderline,\n menuPlacement = 'bottom'\n}: Props) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const styles = useStyles();\n\n const prepareItems = useCallback(\n (data: AttributeType[], level = 0, prevLabel = ''): AttributeOption[] => {\n return data.reduce((acc, item) => {\n if (item.hidden) return acc;\n const chipLabel = `${prevLabel && prevLabel + ' / '}${item.label}`;\n acc.push({\n label: item.label,\n value: item.uri,\n attrType: item,\n chipLabel,\n level\n });\n const subAttributes = getAttributeTypeSubAttributes(metadata, item);\n return acc.concat(subAttributes ? prepareItems(subAttributes, level + 1, chipLabel) : []);\n }, []);\n },\n [metadata]\n );\n\n const options = useMemo(() => prepareItems(entityType?.attributes || []), [entityType, prepareItems]);\n\n const CustomOption = ({isFocused, isSelected, data, label, innerProps}: OptionProps<AttributeOption, true>) => (\n <div {...innerProps}>\n <AttributeListItem\n checked={isSelected}\n level={data.level}\n data={data}\n label={label}\n labelInText={label}\n isFocused={isFocused}\n />\n </div>\n );\n\n const CustomMultiValue = ({data, ...props}: MultiValueProps<AttributeOption>) => (\n <MultiValue {...props}>{data.chipLabel}</MultiValue>\n );\n\n return (\n <div className={classnames(styles.root, className)}>\n <Typography className={styles.title} variant={'subtitle1'}>\n {title || i18n.text('Attribute')}\n </Typography>\n <MultiSelect\n value={selectedAttributes}\n options={options}\n TextFieldProps={{\n InputProps: {disableUnderline},\n classes: {root: styles.dropDownInput}\n }}\n components={{\n DropdownIndicator: DropdownIndicatorWithIconButton,\n MultiValue: CustomMultiValue,\n Option: CustomOption\n }}\n onChange={pipe(defaultTo([]), onChange)}\n styles={customStyles}\n classes={styles}\n menuPlacement={menuPlacement}\n menuPortalTarget={document.body}\n />\n </div>\n );\n};\n\nexport default AttributeSelector;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n 'basic-view__paper': {\n display: 'flex',\n flexDirection: 'column',\n ...theme.basicView\n }\n}));\n","import Paper, {PaperProps} from '@material-ui/core/Paper';\nimport PropTypes from 'prop-types';\nimport React, {forwardRef, Ref} from 'react';\nimport {useStyles} from './styles';\n\nconst BasicView = forwardRef<Ref<typeof Paper>, PaperProps>(({children, className, ...otherProps}, ref) => {\n const styles = useStyles();\n return (\n <Paper ref={ref} className={className} classes={{root: styles['basic-view__paper']}} {...otherProps}>\n {children}\n </Paper>\n );\n});\n\nBasicView.displayName = 'BasicView';\n\nBasicView.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string\n};\n\nexport default BasicView;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n flex: 1\n },\n input: {\n height: '100%',\n paddingLeft: '12px',\n paddingRight: '8px',\n fontSize: '14px'\n },\n inputNumber: {\n minWidth: '60px',\n marginRight: 10,\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n },\n inputUnit: {\n width: '100%'\n }\n});\n","import React from 'react';\nimport {pipe} from 'ramda';\nimport i18n from 'ui-i18n';\nimport capitalize from '@material-ui/core/utils/capitalize';\nimport {TextField as TextField} from '@material-ui/core';\nimport SimpleDropDownSelector from '../SimpleDropDownSelector/SimpleDropDownSelector';\nimport {getValue} from '../../core/utils';\nimport {useStyles} from './styles';\n\ntype Props = {\n interval: [number, string];\n onChange: ([number, string]) => void;\n onFocus?: () => void;\n};\n\nconst periods = [\n i18n.text('minutes'),\n i18n.text('hours'),\n i18n.text('days'),\n i18n.text('weeks'),\n i18n.text('months'),\n i18n.text('years')\n];\n\nconst DateIntervalSelector = ({interval: [value, unit], onChange, onFocus}: Props) => {\n const styles = useStyles();\n const getIntervalFromValue = (newValue: number) => [newValue, unit];\n const getIntervalFromUnit = ({value: newUnit}: {value: string}) => [value, newUnit];\n const onNumberChange = pipe(getValue, parseInt, getIntervalFromValue, onChange);\n const onUnitChange = pipe(getIntervalFromUnit, onChange);\n return (\n <div className={styles.root}>\n <TextField\n type=\"number\"\n value={value || ''}\n onChange={onNumberChange}\n inputProps={{min: 1, onFocus: onFocus}}\n InputProps={{classes: {root: styles.input}}}\n className={styles.inputNumber}\n />\n <SimpleDropDownSelector\n label={''}\n placeholder={capitalize(unit)}\n className={styles.inputUnit}\n value={{value: unit, label: capitalize(unit)}}\n options={periods.map((value) => ({\n value,\n label: capitalize(value)\n }))}\n onChange={onUnitChange}\n TextFieldProps={{\n inputProps: {onFocus: onFocus},\n InputProps: {classes: {root: styles.input}}\n }}\n />\n </div>\n );\n};\n\nexport default DateIntervalSelector;\n","import React from 'react';\n\ntype State = {\n error: Error | null;\n};\n\ntype Props = {\n error: React.ReactNode;\n};\n\nexport default class ErrorBoundary extends React.Component<Props, State> {\n constructor(props) {\n super(props);\n this.state = {\n error: null\n };\n }\n\n componentDidCatch(error) {\n this.setState({\n error: error\n });\n console.error(error);\n }\n\n render() {\n const {children, error} = this.props;\n if (this.state.error) {\n return error;\n }\n return children;\n }\n}\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const customStyles = {\n input: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n loadingMessage: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n menuPortal: (currentStyles) => ({...currentStyles, zIndex: 1300})\n};\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n title: {\n paddingBottom: '10px',\n paddingLeft: '5px',\n fontSize: '14px'\n },\n dropDownInput: {\n width: '100%',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n borderTop: '4px'\n },\n option: {\n fontSize: '14px',\n height: '32px'\n }\n});\n","import React, {useRef} from 'react';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {defaultTo, pipe, pluck, prop} from 'ramda';\nimport classnames from 'classnames';\nimport {Typography as Typography} from '@material-ui/core';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport {getAllUsersForTenant, User, utils} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {customStyles, useStyles} from './styles';\n\ntype Props = {\n selectedUsers: string[];\n onChange: (activities: string[]) => void;\n className?: string;\n disableUnderline?: boolean;\n};\n\nconst UserSelector = ({selectedUsers, onChange, className, disableUnderline}: Props) => {\n const styles = useStyles();\n\n const valueToOption = (value: string) => ({value, label: value});\n const prepareValues = (values: string[]) => values.map(valueToOption);\n const filterUsers = (inputValue) => (users) =>\n inputValue ? users.filter((username) => utils.strings.search(username, inputValue)) : users;\n\n const tenant = useSelector(mdmModule.selectors.getTenant);\n const servicesPath = useSelector(mdmModule.selectors.getServicesPath);\n\n const cachedRequest = useRef<Promise<{array: User[]}>>();\n const getOptions = (inputValue) => {\n if (!cachedRequest.current) {\n cachedRequest.current = getAllUsersForTenant({tenant, servicesPath});\n }\n return cachedRequest.current.then(\n pipe(prop('array'), pluck('username'), filterUsers(inputValue), prepareValues)\n );\n };\n\n return (\n <div className={classnames(styles.root, className)}>\n <Typography className={styles.title} variant={'subtitle1'}>\n {i18n.text('User')}\n </Typography>\n <MultiSelect\n value={prepareValues(selectedUsers)}\n onChange={pipe(defaultTo([]), pluck('value'), onChange)}\n defaultOptions={true}\n getOptions={getOptions}\n TextFieldProps={{\n InputProps: {disableUnderline},\n className: styles.dropDownInput\n }}\n components={{\n DropdownIndicator: DropdownIndicatorWithIconButton\n }}\n styles={customStyles}\n classes={styles}\n menuPortalTarget={document.body}\n />\n </div>\n );\n};\n\nexport default UserSelector;\n","export enum ActivityTypes {\n MODEL_UPDATED = 'MODEL_UPDATED',\n ENTITY_REMOVED = 'ENTITY_REMOVED',\n ENTITY_CREATED = 'ENTITY_CREATED',\n ENTITY_CHANGED = 'ENTITY_CHANGED',\n ENTITIES_MERGED = 'ENTITIES_MERGED',\n ENTITIES_SPLITTED = 'ENTITIES_SPLITTED',\n ENTITY_LOST_MERGE = 'ENTITY_LOST_MERGE',\n RELATIONSHIP_CREATED = 'RELATIONSHIP_CREATED',\n RELATIONSHIP_REMOVED = 'RELATIONSHIP_REMOVED',\n RELATIONSHIP_CHANGED = 'RELATIONSHIP_CHANGED',\n POTENTIAL_MATCHES_FOUND = 'POTENTIAL_MATCHES_FOUND',\n NOT_MATCHES_SET = 'NOT_MATCHES_SET',\n NOT_MATCHES_RESET = 'NOT_MATCHES_RESET',\n PERIODIC_TASK_SCHEDULED = 'PERIODIC_TASK_SCHEDULED',\n ENTITIES_MERGED_MANUALLY = 'ENTITIES_MERGED_MANUALLY',\n POTENTIAL_MATCHES_REMOVED = 'POTENTIAL_MATCHES_REMOVED',\n ENTITIES_MERGED_ON_THE_FLY = 'ENTITIES_MERGED_ON_THE_FLY',\n USER_LOGIN = 'USER_LOGIN',\n USER_LOGOUT = 'USER_LOGOUT',\n USER_SEARCH = 'USER_SEARCH',\n USER_PROFILE_VIEW = 'USER_PROFILE_VIEW',\n COMMENT_ADDED = 'COMMENT_ADDED',\n COMMENT_UPDATED = 'COMMENT_UPDATED',\n COMMENT_DELETED = 'COMMENT_DELETED',\n ANALYTICS_ATTRIBUTES_CHANGED = 'ANALYTICS_ATTRIBUTES_CHANGED',\n SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE = 'SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE',\n GROUP_CREATED = 'GROUP_CREATED',\n GROUP_REMOVED = 'GROUP_REMOVED',\n GROUP_CHANGED = 'GROUP_CHANGED'\n}\n","import {\n formatDataTypeValue,\n findAttributeTypeByUri,\n Metadata,\n AttributePresentations,\n makeAttrTypeUri,\n getAttrDataTypeDefinition\n} from '@reltio/mdm-sdk';\nimport {\n filter,\n groupBy,\n ifElse,\n map,\n path,\n pipe,\n propOr,\n values,\n isNil,\n includes,\n reject\n} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {ActivityData, ActivityItem, ActivityTypes, DeltaValue} from '../types';\n\nconst getItemDataType = path(['data', 'type']);\n\nexport const getActivityType = (activity: ActivityData) => {\n const {items, label} = activity;\n const [firstItem] = items || [];\n return getItemDataType(firstItem) || label;\n};\n\nexport const isValidActivityType = (type: string): boolean => pipe(values, includes(type))(ActivityTypes);\n\nexport const removeIgnoredItems = (activity: ActivityData): ActivityData => {\n const {items, label} = activity;\n const isImplementedItem = (item: ActivityItem): boolean => isValidActivityType(getItemDataType(item) || label);\n const filteredItems = filter(isImplementedItem)(items);\n if (items.length !== filteredItems.length) {\n console.error('Activities not implemented:', reject(isImplementedItem)(items));\n }\n return {\n ...activity,\n items: filteredItems,\n itemsTotal: filteredItems.length\n };\n};\n\nexport const splitActivityByType = (activity: ActivityData) => {\n return pipe(\n propOr([], 'items'),\n groupBy(getItemDataType),\n values,\n ifElse(\n ({length}) => length > 1,\n map((items) => ({\n ...activity,\n items,\n itemsTotal: items.length\n })),\n () => [activity]\n )\n )(activity);\n};\n\nexport const stringifyDeltaValue = (\n deltaValue: DeltaValue['value'],\n attributeTypeUri: string,\n metadata: Metadata,\n attributePresentations: AttributePresentations\n) => {\n const attributeType = findAttributeTypeByUri(metadata, attributeTypeUri);\n const dataTypeDefinition = getAttrDataTypeDefinition(attributeType);\n const formatValue = formatDataTypeValue({attributePresentations, dataTypeDefinition});\n\n if (isNil(deltaValue)) {\n return '';\n }\n\n if (typeof deltaValue === 'string') {\n return attributeType ? formatValue(deltaValue) : deltaValue;\n }\n\n return Object.entries(deltaValue)\n .flatMap(([attributeTypeName, deltaValues]) =>\n deltaValues.map((deltaValue) =>\n stringifyDeltaValue(\n deltaValue.value,\n makeAttrTypeUri(attributeTypeUri, attributeTypeName),\n metadata,\n attributePresentations\n )\n )\n )\n .join(', ');\n};\n\nexport const getActivityLabel = (type: ActivityTypes) => {\n const labels = {\n [ActivityTypes.COMMENT_ADDED]: i18n.text('Comment added'),\n [ActivityTypes.COMMENT_DELETED]: i18n.text('Comment deleted'),\n [ActivityTypes.COMMENT_UPDATED]: i18n.text('Comment updated'),\n [ActivityTypes.ENTITIES_MERGED]: i18n.text('Profile merged'),\n [ActivityTypes.ENTITIES_MERGED_MANUALLY]: i18n.text('Profile merged manually'),\n [ActivityTypes.ENTITIES_MERGED_ON_THE_FLY]: i18n.text('Profile merged on the fly'),\n [ActivityTypes.ENTITIES_SPLITTED]: i18n.text('Profile un-merged'),\n [ActivityTypes.ENTITY_CHANGED]: i18n.text('Profile updated'),\n [ActivityTypes.ENTITY_CREATED]: i18n.text('Profile created'),\n [ActivityTypes.ENTITY_LOST_MERGE]: i18n.text('Profile lost merge'),\n [ActivityTypes.ENTITY_REMOVED]: i18n.text('Profile removed'),\n [ActivityTypes.GROUP_CHANGED]: i18n.text('Group updated'),\n [ActivityTypes.GROUP_CREATED]: i18n.text('Group created'),\n [ActivityTypes.GROUP_REMOVED]: i18n.text('Group removed'),\n [ActivityTypes.MODEL_UPDATED]: i18n.text('Model was updated'),\n [ActivityTypes.NOT_MATCHES_RESET]: i18n.text('Not matches reset'),\n [ActivityTypes.NOT_MATCHES_SET]: i18n.text('Not matches set'),\n [ActivityTypes.PERIODIC_TASK_SCHEDULED]: i18n.text('Periodic task was scheduled'),\n [ActivityTypes.POTENTIAL_MATCHES_FOUND]: i18n.text('Potential matches found'),\n [ActivityTypes.POTENTIAL_MATCHES_REMOVED]: i18n.text('Potential matches removed'),\n [ActivityTypes.RELATIONSHIP_CHANGED]: i18n.text('Relationship updated'),\n [ActivityTypes.RELATIONSHIP_CREATED]: i18n.text('Relationship created'),\n [ActivityTypes.RELATIONSHIP_REMOVED]: i18n.text('Relationship removed'),\n [ActivityTypes.USER_LOGIN]: i18n.text('Logged in'),\n [ActivityTypes.USER_LOGOUT]: i18n.text('Logged out'),\n [ActivityTypes.USER_PROFILE_VIEW]: i18n.text('Profile viewed'),\n [ActivityTypes.USER_SEARCH]: i18n.text('Searched'),\n [ActivityTypes.ANALYTICS_ATTRIBUTES_CHANGED]: i18n.text('Analytics attribute changed'),\n [ActivityTypes.SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE]: i18n.text('SFDC connector synchronization issue')\n };\n return labels[type] || '';\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n dropdownIndicator: {\n transition: 'transform .15s ease'\n },\n inputRoot: {\n fontSize: '14px',\n height: 46\n },\n input: {\n padding: '0 12px 0'\n },\n dateOptionLabel: {\n minWidth: '100px'\n },\n paper: {\n minWidth: '112px'\n }\n});\n","import React, {useCallback, useRef, useState} from 'react';\nimport moment from 'moment';\nimport i18n from 'ui-i18n';\nimport {isNil} from 'ramda';\nimport {DataTypes, formatDataTypeValue} from '@reltio/mdm-sdk';\n\nimport {TextField as TextField} from '@material-ui/core';\nimport {Menu as Menu} from '@material-ui/core';\nimport DropdownIndicatorWithIconButton from '../../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport DateRangePicker from '../../DateRangePicker/DateRangePicker';\nimport {useStyles} from './styles';\n\ntype DateValues = [Date, Date];\ntype Props = {\n values: DateValues;\n onChange: (values: DateValues) => void;\n onFocus?: () => void;\n};\n\nconst localeFormat = moment.localeData().longDateFormat('L');\n\nconst formatValue = (value: Date, placeholder: string) => {\n return isNil(value)\n ? `${placeholder}`\n : `${formatDataTypeValue({dataTypeDefinition: {type: DataTypes.TYPE_ACTIVENESS_DATE}}, value)}`;\n};\n\nconst CustomDateRangeEditor = ({values, onChange, onFocus}: Props) => {\n const placeholder = localeFormat;\n const inputRef = useRef(null);\n const [open, setOpen] = useState(false);\n const styles = useStyles();\n\n const onApply = (values: DateValues) => {\n onChange(values);\n setOpen(false);\n };\n\n const handleToggle = useCallback(() => {\n setOpen((open) => !open);\n onFocus();\n }, [onFocus]);\n\n const onCancel = () => {\n setOpen(false);\n };\n\n return (\n <div className={styles.root}>\n <TextField\n fullWidth\n value={values.map((value) => formatValue(value, placeholder)).join(' \\u2014 ')}\n onClick={handleToggle}\n variant=\"filled\"\n ref={inputRef}\n InputProps={{\n endAdornment: (\n <DropdownIndicatorWithIconButton\n selectProps={{classes: styles, menuIsOpen: open}}\n innerProps={{}}\n />\n ),\n disableUnderline: isNil(values),\n readOnly: true,\n classes: {\n root: styles.inputRoot,\n input: styles.input\n }\n }}\n InputLabelProps={{\n shrink: false\n }}\n placeholder={i18n.text(`${placeholder} \\u2014 ${placeholder}`)}\n />\n <Menu\n variant=\"menu\"\n open={open}\n autoFocus={false}\n classes={{paper: styles.paper}}\n anchorEl={inputRef.current}\n onClose={onCancel}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left'\n }}\n elevation={2}\n getContentAnchorEl={null}\n MenuListProps={{\n autoFocusItem: open,\n style: {width: '100%'}\n }}\n >\n <DateRangePicker\n values={values}\n onCancel={onCancel}\n onApply={onApply}\n type={DataTypes.TYPE_ACTIVENESS_DATE}\n />\n </Menu>\n </div>\n );\n};\n\nexport default CustomDateRangeEditor;\n","import {AttributeType} from '@reltio/mdm-sdk';\n\nexport type ReactGridLayoutItem = {\n i: string;\n x: number;\n y: number;\n w: number;\n h: number;\n minW?: number;\n minH?: number;\n maxW?: number;\n maxH?: number;\n static?: boolean;\n};\n\nexport type AttributeOption = {\n label: string;\n value: string;\n attrType: AttributeType;\n chipLabel: string;\n level: number;\n};\n\nexport enum DateRangeTypes {\n WITHIN = 'within',\n AGO = 'ago',\n BETWEEN = 'between'\n}\n\nexport type DateRangeFilter = {\n type: DateRangeTypes;\n period: [number, string] | [Date, Date];\n};\n\nexport type QueryBuilderAttributeData = {\n title: string;\n pathToTitle: Array<string>;\n fieldName: string;\n entityTypeUri: string;\n attrType: AttributeType;\n uri: string;\n groupName: string;\n filterOptions: Array<string>;\n};\n\nexport type QueryBuilderAttribute = {\n id: string;\n values: Array<unknown>;\n data: QueryBuilderAttributeData;\n filter: string;\n operator: string;\n};\n\nexport type AttributeSelectorItem = {\n attrType?: AttributeType;\n entityTypeUri?: string;\n fieldName: string;\n groupName?: string;\n title: string;\n uri?: string;\n children?: AttributeSelectorItem[];\n pathToTitle?: string[];\n};\n\nexport type AttributeSelectorItemsGroup = {\n id?: string;\n title: string;\n attributes: AttributeSelectorItem[];\n};\n\nexport type AttributeSelectionInfo = {\n index: number;\n checked: boolean;\n attribute: AttributeSelectorItem;\n selectedAttributes: AttributeSelectorItem[];\n};\n\nexport type BasicAttributeSelectorProps = {\n className?: string;\n itemsGroups: AttributeSelectorItemsGroup[];\n value: AttributeSelectorItem;\n onSelect: (selectInfo: AttributeSelectionInfo) => void;\n onRestoreFocus?: () => void;\n onOpenPopup?: () => void;\n getLabel?: (value: {fieldName?: string; pathToTitle?: string[]; title: string}) => string;\n disableRestoreFocus?: boolean;\n disableEnforceFocus?: boolean;\n single?: boolean;\n ungroup?: boolean;\n disabled?: boolean;\n hideCheckBox?: boolean;\n};\nexport enum RequestStates {\n INIT = 'init',\n LOADING = 'loading',\n LOADED = 'loaded',\n ERROR = 'error'\n}\n\nexport type SelectableItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selected?: boolean;\n};\n\nexport type DropDownMenuItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selectable?: boolean;\n selected?: boolean;\n};\n","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: \"svg2250934887a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg2250934887b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2250934887a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2250934887b)\",\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: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\",\n fillOpacity: \".54\"\n}, React.createElement(\"path\", {\n d: \"M14.5 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm4 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm-17 1a1.5 1.5 0 110-3 1.5 1.5 0 010 3zM4 4a2 2 0 110-4 2 2 0 010 4zm1 16a2 2 0 110-4 2 2 0 010 4zm4.5-6a4.5 4.5 0 110-9 4.5 4.5 0 010 9zm0-2a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm6 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3z\",\n fill: \"#000\"\n}))));","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n header: {\n padding: '0 4px 0 16px'\n },\n buttonsContainer: {\n flexShrink: 0,\n marginLeft: 'auto',\n '& > * + *': {\n marginLeft: '-4px'\n }\n },\n button: {\n padding: '8px'\n },\n icon: {\n width: '24px',\n height: '24px'\n },\n disabledIcon: {\n opacity: 0.54\n }\n}));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {IconButton as IconButton} from '@material-ui/core';\nimport {FacetViewHeader, withTooltip} from '@reltio/components';\nimport SelectNodeIcon from '../../icons/SelectNode.svg';\nimport ShowGraphIcon from '../../icons/ShowGraph.svg';\nimport {useStyles} from './styles';\n\nconst IconButtonWithTooltip = withTooltip(IconButton);\n\nconst HierarchyViewHeader = ({title, entityLabel = '', onScrollToCurrentEntity, onGraphOpen, disabled = false}) => {\n const styles = useStyles();\n const iconClassName = classnames(styles.icon, {[styles.disabledIcon]: disabled});\n return (\n <FacetViewHeader title={title} className={styles.header}>\n <div className={styles.buttonsContainer}>\n <IconButtonWithTooltip\n tooltipTitle={i18n.text('Show Graph')}\n onClick={onGraphOpen}\n classes={{root: styles.button, label: iconClassName}}\n disabled={disabled}\n showForDisabled\n >\n <ShowGraphIcon />\n </IconButtonWithTooltip>\n <IconButtonWithTooltip\n tooltipTitle={i18n.text('Scroll to ${node}', {node: entityLabel})}\n tooltipPlacement=\"bottom-end\"\n onClick={onScrollToCurrentEntity}\n classes={{root: styles.button, label: iconClassName}}\n disabled={disabled}\n showForDisabled\n >\n <SelectNodeIcon />\n </IconButtonWithTooltip>\n </div>\n </FacetViewHeader>\n );\n};\n\nHierarchyViewHeader.propTypes = {\n title: PropTypes.string,\n entityLabel: PropTypes.string,\n total: PropTypes.number,\n onScrollToCurrentEntity: PropTypes.func,\n onGraphOpen: PropTypes.func,\n disabled: PropTypes.bool\n};\n\nexport default HierarchyViewHeader;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n textField: {\n marginLeft: theme.spacing(),\n marginRight: theme.spacing(),\n width: 200\n },\n panel: {\n display: 'flex',\n flexGrow: 1,\n flexDirection: 'column',\n minHeight: '372px',\n maxHeight: '507px'\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 '@material-ui/core/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 '@material-ui/icons/DragIndicator';\nimport {Tooltip as Tooltip} from '@material-ui/core';\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() {\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 (\n i ===\n scaffoldBlockCount - 1\n ) {\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 (\n i ===\n scaffoldBlockCount - 1\n ) {\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 scrollToElementByNodeId = (nodeId) => {\n const element = getElementByNodeId(nodeId);\n\n if (element) {\n element.scrollIntoView({block: 'nearest', inline: 'start'});\n } else {\n setTimeout(() => scrollToElementByNodeId(nodeId), 0);\n }\n};\n\nconst getNodeKey = ({node}) => node.nodeId;\n\nconst DefaultNodeRenderer = ({node}) => node.title || null;\n\nexport {scrollToElementByNodeId, 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, scrollToElementByNodeId} 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 treeDataRef.current = treeData;\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 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 setTimeout(() => {\n scrollToElementByNodeId(scrollToNode.nodeId);\n }, 500);\n }\n }\n }, [root, treeData, scrollToNode]);\n\n const getVirtualizedListInstance = () => path(['current', 'wrappedInstance', 'current'], virtualizedListRef);\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} />\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 '@material-ui/core/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 '@material-ui/core/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 '@material-ui/core/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 popper: {\n maxWidth: '345px',\n minWidth: '200px',\n boxShadow: '0 1px 1px 0 rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12), 0 1px 3px 0 rgba(0,0,0,0.2)',\n backgroundColor: 'white',\n borderRadius: '2px'\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}))));","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n link: {\n cursor: 'pointer',\n color: theme.palette.primary.main,\n lineHeight: '15px'\n },\n selected: {\n fontWeight: 'bold'\n }\n}));\n","import React from 'react';\nimport classnames from 'classnames';\nimport {Link} from '@reltio/components';\nimport {useStyles} from './styles';\n\ntype NodeTitleProps = React.HTMLProps<HTMLSpanElement> & {\n title: string;\n isSelected?: boolean;\n link: string;\n onClick: () => void;\n};\n\nconst NodeTitle = ({title, isSelected, link, onClick, ...otherProps}: NodeTitleProps) => {\n const styles = useStyles();\n\n return (\n <span {...otherProps} className={classnames(styles.link, {[styles.selected]: isSelected})}>\n <Link to={link} onClick={onClick}>\n {title}\n </Link>\n </span>\n );\n};\n\nexport default NodeTitle;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n avatar: {\n height: '16px',\n width: '16px',\n marginRight: '6px',\n flexShrink: '0'\n },\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 parentContainer: {\n fontSize: '13px',\n lineHeight: '16px',\n display: 'flex',\n marginBottom: '12px',\n alignItems: 'center',\n '&:last-child': {\n marginBottom: 0\n }\n },\n loadingNode: {\n paddingTop: 0\n }\n}));\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"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 React from 'react';\nimport {useDispatch} from 'react-redux';\nimport {ui} from '@reltio/mdm-module';\nimport {useStyles} from './styles';\nimport ParentIcon from './parentIcon.svg';\n\nimport LoadingNode from '../../LoadingNode/LoadingNode';\nimport NodeTitle from '../NodeTitle/NodeTitle';\n\ntype NodeType = {\n pending: boolean;\n title?: string;\n entityLink?: string;\n viewId?: string;\n entityUri?: string;\n};\ntype MultiParentBlockProps = {\n showParents: boolean;\n additionalParents: Array<NodeType>;\n};\nconst MultiParentBlock = ({showParents, additionalParents}: MultiParentBlockProps) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n\n return showParents && additionalParents.length > 0 ? (\n <div className={styles.multiParent}>\n {additionalParents.map((parent, i) => (\n <div key={i} className={styles.parentContainer}>\n {parent.pending ? (\n <LoadingNode className={styles.loadingNode} />\n ) : (\n <>\n <ParentIcon className={styles.avatar} />\n <NodeTitle\n title={parent.title}\n link={parent.entityLink}\n onClick={() =>\n dispatch(ui.actions.openEntity({uri: parent.entityUri, viewId: parent.viewId}))\n }\n />\n </>\n )}\n </div>\n ))}\n </div>\n ) : null;\n};\n\nexport default MultiParentBlock;\n","import {makeStyles} from '@material-ui/core/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","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';\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\nlet nodeCounter = 0;\nexport const generateId = () => nodeCounter++;\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, generateId} from '../../helpers/treeDataProvider';\nimport {any, path, pipe, prop} from 'ramda';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {getAllEntityTypesForGraphType, getHops} from '@reltio/mdm-sdk';\n\nconst treeActions = profile.trees.actions;\n\nexport const expandNodeCommand = ({id, nodeId}) => (dispatch) => {\n dispatch(treeActions.nodeExpandedEvent({id, nodeId}));\n};\n\nexport const loadChildren = ({parentUri, parentId, graphTypes, activenessDate, id, isReversed}) => (\n dispatch,\n getState\n) => {\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}).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};\n\nexport const loadParents = ({uri, graphTypes, activenessDate, id, isReversed}) => (dispatch) => {\n const createSubTreeEntitiesLoadedEvent = (entitiesSubMap) =>\n treeActions.entitiesMappingLoaded({id, entitiesSubMap});\n const parentsProcessing = pipe(buildEntitiesMapFromHops(isReversed), createSubTreeEntitiesLoadedEvent, dispatch);\n return getHops({uri, graphTypes, activenessDate}).then(parentsProcessing);\n};\n\nexport const showCurrentEntity = ({id, uri}) => (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 = ({id, node}) => (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 = ({id, node}) => (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 = ({id, node}) => (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 = ({id, node, newNode, isReversed}) => (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 })\n );\n }\n};\n\nexport const nodeCancelEditing = ({id, node}) => (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 = ({id, node, isReversed}) => (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 as Typography} from '@material-ui/core';\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 '@material-ui/core/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 '@material-ui/icons/Edit';\nimport InfoIcon from '@material-ui/icons/InfoOutlined';\nimport InfoIconSelected from '@material-ui/icons/InfoRounded';\n\nimport AddCircleIcon from '@material-ui/icons/AddCircle';\nimport DeleteIcon from '@material-ui/icons/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 {__, curry, identity, isNil, path, prop, pathOr, reject} from 'ramda';\nimport {\n checkMetadataForUpdate,\n isInHierarchy,\n getEntityType,\n getGraphType,\n getRelationType,\n getRelationshipTypeUrisFromGraphType,\n isEditableMode as checkIsEditableMode,\n getEntityLink,\n getStartObjectTypeUri,\n getEndObjectTypeUri,\n checkMetadataForDelete,\n getLabel,\n getPropWithInheritance,\n getAbsoluteImageUrl\n} from '@reltio/mdm-sdk';\n\nimport {createNewTreeNode, isSelectedNode} from '../../../../helpers/treeDataProvider';\nimport {getGraphTypeConfig, getReverseRelationsConfig} from '../../../helpers/configHelpers';\nimport {profile} from '@reltio/mdm-module';\n\nconst treeActions = profile.trees.actions;\nimport {nodeStartAddingChild, nodeStartEditing, toggleRelationDetails} from '../../../helpers/nodeHelpers';\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) => {\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(identity)\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 uiPath,\n showSecondaryLabel,\n onParentsRequested,\n dispatch\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)\n ? () =>\n dispatch(treeActions.treeNodeNewParentEditingStarted({id, node, newNode: createNewTreeNode()}))\n : null,\n onAddChild: canAddChildForNode(config, metadata, node)\n ? () =>\n dispatch(\n nodeStartAddingChild({\n id,\n isReversed: getReverseRelationsConfig(config),\n node,\n newNode: createNewTreeNode()\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 entityLink: getEntityLink({uiPath, uri: entity.uri}),\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, uiPath}) => {\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, uiPath})\n : {pending: true};\n });\n};\n\nconst nodePropsMapping = ({\n node,\n entitiesMap,\n metadata,\n absoluteImagePath,\n currentEntityUri,\n mode,\n config,\n uiPath,\n showSecondaryLabel,\n onParentsRequested,\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 uiPath,\n showSecondaryLabel,\n onParentsRequested,\n dispatch\n }),\n additionalParents: getAdditionalParents({node, config, entitiesMap, metadata, absoluteImagePath, uiPath})\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 {useState, useCallback, useRef, useEffect} from 'react';\nimport {getEntity} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '@reltio/components';\n\nexport const useEntityDetails = (entityUri: string) => {\n const [entityDetails, setEntityDetails] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const timerId = useRef(null);\n const safePromise = useSafePromise();\n\n const cancelRequest = useCallback(() => safePromise(Promise.resolve()), [safePromise]);\n\n const showEntityDetails = useCallback(() => {\n timerId.current = setTimeout(() => {\n setIsLoading(true);\n safePromise(getEntity(entityUri))\n .then(setEntityDetails)\n .finally(() => setIsLoading(false));\n }, 1000);\n }, [entityUri, safePromise]);\n\n const hideEntityDetails = useCallback(() => {\n cancelRequest();\n clearTimeout(timerId.current);\n setIsLoading(false);\n setEntityDetails(null);\n }, [cancelRequest]);\n\n useEffect(() => {\n return () => clearTimeout(timerId.current);\n }, []);\n\n return {\n isLoading,\n entityDetails,\n showEntityDetails,\n hideEntityDetails\n };\n};\n","import React, {memo, useCallback, useContext, useEffect, useState, useRef} from 'react';\nimport classnames from 'classnames';\nimport {Avatar as Avatar} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdm, {ui} from '@reltio/mdm-module';\nimport {Popper, ProfileCard} 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 NodeTitle from '../components/NodeTitle/NodeTitle';\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';\nimport {useEntityDetails} from './useEntityDetails';\n\nconst onImageLoadFail = (e) => {\n e.target.src = DEFAULT_ICON;\n};\n\nexport const RegularNode = ({node = {}, registerChild, measure = identity}) => {//NOSONAR\n const styles = useStyles();\n const popperAnchor = useRef();\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 uiPath = useSelector(mdm.selectors.getUIPath);\n\n const {\n title,\n subtitle,\n number,\n icon,\n relation,\n showDetails,\n additionalParents = [],\n showParents,\n isSelectedNode,\n nodeId,\n entityLink,\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 uiPath,\n showSecondaryLabel,\n onParentsRequested,\n dispatch\n });\n\n const {isLoading, entityDetails, showEntityDetails, hideEntityDetails} = useEntityDetails(entityUri);\n const showPopper = Boolean(entityDetails) || isLoading;\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 onTitleClick = useCallback(() => {\n dispatch(ui.actions.openEntity({uri: entityUri, viewId}));\n }, [viewId, entityUri, dispatch]);\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 onMouseEnter={showActionsBlock}\n onMouseLeave={hideActionsBlock}\n ref={registerChild}\n >\n <div ref={popperAnchor} 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 <NodeTitle\n title={title}\n isSelected={isSelectedNode}\n link={entityLink}\n onClick={onTitleClick}\n onMouseEnter={showEntityDetails}\n onMouseLeave={hideEntityDetails}\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 && onToggleRelationDetails}\n onMenuOpen={showActionsMenu}\n onMenuClose={hideActionsMenu}\n onStartEditing={onStartEditing}\n onAddChild={onAddChild}\n onAddParent={onAddParent}\n onDelete={onDelete}\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 <Popper\n anchorEl={popperAnchor.current}\n className={styles.popper}\n open={showPopper}\n modal={false}\n placement=\"top-start\"\n >\n <ProfileCard entity={entityDetails} variant={isLoading ? 'loading' : 'normal'} />\n </Popper>\n </div>\n );\n};\n\nRegularNode.propTypes = {\n node: HierarchyNodeType,\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(() => getRelationTypesOptions(relationTypes, isChild, metadata), [\n relationTypes,\n isChild,\n 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 {__, curry, defaultTo, filter, isNil, map, pipe, reject} from 'ramda';\n\nimport {\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) =>\n pipe(\n getRelationshipTypeUrisFromGraphType,\n defaultTo([]),\n map(getRelationType(metadata)),\n reject(isNil),\n filter(isAvailableRelationForRelatedEntity(isChild, relatedEntity, metadata))\n )(graphType);\n","import {makeStyles} from '@material-ui/core/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 {allPass, prop, propEq, equals, pipe} from 'ramda';\nimport {Button as Button} from '@material-ui/core';\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 isEmptyValue\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {\n AttributesList,\n EntitySelector,\n ErrorWrapper,\n ScrollToErrorContext,\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),\n [isChild, relatedEntity, metadata, graphType]\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(ScrollToErrorContext);\n const isErrorHighlighted = useMemo(\n () =>\n allPass([\n pipe(prop('uri'), isEmptyValue),\n propEq('parentUri', relationUri),\n propEq('attributeTypeUri', relationTypeUri)\n ])(highlightedError.error),\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}>\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}) => {\n const styles = useStyles();\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 return (\n relatedNode &&\n !relatedNode.loading &&\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};\n\nexport default memo(HierarchyPanel);\n","import {useCallback, useEffect} 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 {Entity, getRequestErrorMessage, getTree, hasEntityInTree, updateTreesWithNewEntity} from '@reltio/mdm-sdk';\nimport {prepareTree} from '../../helpers/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};\nconst useTreeLoader = ({entityUri, id, graphTypes, activenessDate, isReversed, enabled}: TreeLoaderProps) => {\n const safePromise = useSafePromise({cancelOnUnmount: false});\n const dispatch = useDispatch();\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 () => setTimeout(() => dispatch(showCurrentEntity({id, uri: entityUri})), 100),\n [id, entityUri, dispatch]\n );\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 }\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 safePromise(getTree({uri: entityUri, graphTypes, activenessDate, isReversed}))\n .then((tree) => treeProcessing({...tree, graphTypes}, metadata))\n .then((_) => showCurrentEntityDelayed())\n .catch((e) => {\n dispatch(\n treeActions.treeLoadedWithError({\n id,\n errorMessage: getRequestErrorMessage(e, i18n.text('Something went wrong'))\n })\n );\n console.warn(e);\n });\n }\n }\n }, [\n entityUri,\n root,\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 React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {GraphTypeType} from '@reltio/mdm-sdk';\nimport {SelectorWithOnlyOptionAutoSelect} from '@reltio/components';\n\nconst GraphTypeSelector = ({value, onChange, graphTypes, className}) => {\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};\n\nGraphTypeSelector.propTypes = {\n value: PropTypes.string,\n onChange: PropTypes.func,\n graphTypes: PropTypes.arrayOf(GraphTypeType),\n className: PropTypes.string\n};\n\nexport default GraphTypeSelector;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport i18n from 'ui-i18n';\nimport {pipe} from 'ramda';\nimport {ActivenessDateType} from '../../constants/prop-types';\nimport {DateEditor} from '@reltio/components';\n\nconst ActivenessDateControl = ({value, onChange, ...otherProps}) => {\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 margin=\"dense\"\n {...otherProps}\n />\n );\n};\n\nActivenessDateControl.propTypes = {\n value: ActivenessDateType,\n onChange: PropTypes.func\n};\n\nexport default ActivenessDateControl;\n","import {makeStyles} from '@material-ui/core/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: '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 checkboxControlRoot: {\n marginTop: '6px',\n marginLeft: '-12px'\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n },\n divider: {\n backgroundColor: 'rgba(0,0,0,0.1)',\n margin: `19px -${popupHorizontalPadding}`\n }\n}));\n","import React, {useRef, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport {Popover as Popover} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport FilterIcon from '@material-ui/icons/FilterList';\nimport ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';\nimport ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport {Divider as Divider} from '@material-ui/core';\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 showSecondaryLabelDisabledReason,\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 return (\n <>\n <Button ref={buttonRef} classes={{root: classnames(styles.triggerButton, className)}} onClick={togglePopup}>\n <FilterIcon />\n </Button>\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n {onShowSecondaryLabelChange && (\n <>\n <Typography className={styles.viewOptionsTitle} variant=\"h6\">\n {i18n.text('View options')}\n </Typography>\n <FormControlLabelWithTooltip\n tooltipTitle={showSecondaryLabelDisabledReason}\n showForDisabled={!!showSecondaryLabelDisabledReason}\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={!!showSecondaryLabelDisabledReason}\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 MenuProps={{getContentAnchorEl: null, anchorOrigin: {vertical: 'bottom', horizontal: 'left'}}}\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 showSecondaryLabelDisabledReason: PropTypes.string,\n onShowSecondaryLabelChange: PropTypes.func\n};\n\nexport default FilterSortButton;\n","import {makeStyles} from '@material-ui/core/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 {Breadcrumbs as MUIBreadcrumbs} from '@material-ui/core';\nimport {Link as Link} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\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 key={index} color={color} classes={{root: styles.text}} href={href} onClick={onClick}>\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 {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 '../../helpers/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 '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n view: {\n width: '100%'\n },\n linearIndicator: {\n top: '42px'\n },\n filtersBar: {\n paddingLeft: '24px',\n display: 'flex',\n alignItems: 'center',\n marginTop: '2px',\n marginBottom: '12px',\n height: '46px'\n },\n errorMessage: {\n fontSize: '13px',\n marginLeft: '24px',\n marginRight: '16px',\n lineHeight: '1.4',\n color: theme.palette.text.secondary\n },\n activenessDate: {\n flex: 1,\n margin: 0\n },\n filterSortButton: {\n flexShrink: 0,\n margin: '0 6px 0 12px'\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 '@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}));\n","import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport classnames from 'classnames';\nimport {omit, path} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport HierarchyViewHeader from './HierarchyViewHeader/HierarchyViewHeader';\nimport HierarchyPanel from './HierarchyPanel/HierarchyPanel';\nimport {BasicView, LinearLoadIndicator} from '@reltio/components';\nimport {useDispatch} from 'react-redux';\nimport {profile, ui} from '@reltio/mdm-module';\nimport {\n hasEntityTypesWithSecondaryLabelPattern,\n loadChildren,\n loadParents,\n scrollToTreeTop,\n showCurrentEntity\n} from './helpers/treeHelpers';\nimport useTreeLoader from './helpers/useTreeLoader';\nimport GraphTypeSelector from './GraphTypeSelector/GraphTypeSelector';\nimport ActivenessDateControl from './ActivenessDateControl/ActivenessDateControl';\nimport {\n createRelationTypesLabelsMap,\n debounce,\n Entity,\n getGraphTypesForEntityType,\n getLabel,\n getPathByEntityUri,\n HierarchyTreeViewConfig,\n isTempUri,\n isViewMode,\n Metadata,\n Mode,\n Tree\n} from '@reltio/mdm-sdk';\nimport FilterSortButton from './FilterSortButton/FilterSortButton';\nimport {\n getReverseRelationsConfig,\n getIsSecondaryLabelEnabledFromConfig,\n getValidatedSortFieldFromConfig,\n getValidatedSortOrderFromConfig\n} from './helpers/configHelpers';\nimport Breadcrumbs from './Breadcrumbs/Breadcrumbs';\nimport {saveTreesPreferences} from './helpers/saveStateHelpers';\nimport {getShowSecondaryLabelValue} from './helpers/nodeHelpers';\nimport useNewEntityTree from './helpers/useNewEntityTree';\n\nimport {useStyles} from './styles';\n\nconst treeActions = profile.trees.actions;\nconst PREFERENCES_UPDATE_DEBOUNCE_INTERVAL = 500;\n\ntype Props = {\n config: HierarchyTreeViewConfig;\n tree: Tree;\n metadata: Metadata;\n entity: Entity;\n mode: Mode;\n className?: string;\n};\nconst HierarchyView = ({config, tree, metadata, entity = {} as Entity, mode, className}: Props) => {\n const {id, caption: title, graph: graphConfig, showPath} = config;\n const {uri: entityUri, type: entityTypeUri} = entity;\n const initialActivenessDate = useRef(Date.now());\n const {\n activenessDate = initialActivenessDate.current,\n sortField,\n sortOrder,\n loading,\n errorMessage,\n showSecondaryLabel\n } = tree || {};\n const isReversed = getReverseRelationsConfig(config);\n const isSecondaryLabelEnabled = getIsSecondaryLabelEnabledFromConfig(config);\n const showSecondaryLabelValue = getShowSecondaryLabelValue(showSecondaryLabel, isSecondaryLabelEnabled);\n\n const [currentGraphType, setCurrentGraphType] = useState(graphConfig.type);\n const graphTypes = useMemo(() => {\n getGraphTypesForEntityType(metadata, entityTypeUri);\n //remove me\n return [];\n }, [metadata, entityTypeUri]);\n const hasSecondaryLabelPattern = hasEntityTypesWithSecondaryLabelPattern(metadata, currentGraphType);\n\n const dispatch = useDispatch();\n\n const onTreeSort = useCallback(\n ({sortField, sortOrder}) => {\n dispatch(\n treeActions.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 savePreferences = useCallback(\n debounce(() => dispatch(saveTreesPreferences(id)), PREFERENCES_UPDATE_DEBOUNCE_INTERVAL),\n [id, dispatch]\n );\n\n const onShowSecondaryLabelChange = useCallback(\n (show) => {\n dispatch(treeActions.treeSecondaryLabelShown({id, show}));\n savePreferences();\n },\n [id, dispatch, savePreferences]\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 useTreeLoader({\n id,\n entityUri,\n graphTypes: currentGraphType,\n activenessDate,\n isReversed,\n enabled: entityUri && isViewMode(mode) && !isTempUri(entityUri)\n });\n useNewEntityTree({\n id,\n entityUri,\n graphTypes: currentGraphType,\n activenessDate,\n isReversed\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 })\n ),\n [currentGraphType, activenessDate, id, dispatch, isReversed]\n );\n const onParentsRequested = useCallback(\n (node) =>\n dispatch(loadParents({uri: node.entity.uri, graphTypes: currentGraphType, activenessDate, id, isReversed})),\n [currentGraphType, activenessDate, id, isReversed, dispatch]\n );\n const onTreeChanged = useCallback(\n (tree) => {\n dispatch(treeActions.treeChanged({id, tree}));\n },\n [dispatch, id]\n );\n const onTreeActivenessDateChange = useCallback(\n (activenessDate) => {\n dispatch(treeActions.activenessDateChanged({id, activenessDate}));\n },\n [dispatch, id]\n );\n const onScrollToCurrentEntity = useCallback(\n (_) => {\n dispatch(showCurrentEntity({id, uri: entityUri}));\n },\n [dispatch, id, entityUri]\n );\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(treeActions.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 [checkedNodes, setCheckedNodes] = useState({});\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 const openGraph = useCallback(() => {\n dispatch(ui.actions.openGraph({viewId: id, graphType: currentGraphType, entityUri}));\n }, [dispatch, id, currentGraphType, entityUri]);\n\n const clearCheckedNodes = useCallback(() => setCheckedNodes({}), []);\n useEffect(clearCheckedNodes, [mode]);\n\n const styles = useStyles();\n const nodePath = useMemo(\n () =>\n getPathByEntityUri((tree || {}).root, entityUri).map((node) => ({\n label: getLabel(path(['entity', 'label'], node))\n })),\n [tree, entityUri]\n );\n\n return (\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 />\n {loading && <LinearLoadIndicator className={styles.linearIndicator} />}\n {graphTypes.length > 0 && (\n <GraphTypeSelector\n className={styles.graphTypeSelector}\n value={currentGraphType}\n onChange={setCurrentGraphType}\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 showSecondaryLabelDisabledReason={\n !hasSecondaryLabelPattern\n ? i18n.text(\n \"Entity types in this hierarchy don't have any secondary label pattern defined.\"\n )\n : ''\n }\n />\n </div>\n {showPath && nodePath.length > 0 && <Breadcrumbs items={nodePath} className={styles.breadcrumbs} />}\n {!errorMessage ? (\n <HierarchyPanel\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 ) : (\n <Typography className={styles.errorMessage}>{errorMessage}</Typography>\n )}\n </BasicView>\n );\n};\n\nexport default HierarchyView;\n","import HierarchyView from './HierarchyView';\nimport mdm from '@reltio/mdm-module';\nimport {connect} from 'react-redux';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n tree: mdm.selectors.getTree(state, ownProps.config.id),\n total: mdm.selectors.getTreeTotal(state, ownProps.config.id),\n entity: mdm.selectors.getEntity(state),\n metadata: mdm.selectors.getMetadata(state),\n mode: mdm.selectors.getMode(state)\n };\n};\nexport default connect(mapStateToProps, undefined)(HierarchyView);\n","import MomentUtils from '@date-io/moment';\nimport React from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport HierarchyView from './HierarchyView';\n\nimport {StylesProvider, createGenerateClassName} from '@material-ui/core/styles';\n\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport {Provider} from 'react-redux';\nimport {HierarchyTreeViewConfig} from '@reltio/mdm-sdk';\nimport {identity} from 'ramda';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {Store} from 'redux';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'hierarchyTree',\n disableGlobal: true\n});\n\ntype Props = {\n config: HierarchyTreeViewConfig;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n className: string;\n};\n\nconst HierarchyTreeView = ({config, store, onResize = identity, className}: Props) => (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n {config && <HierarchyView config={config} className={className} />}\n <ErrorPopup />\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n);\n\nexport default HierarchyTreeView;\n","import React from 'react';\nimport {AttributesView} from '@reltio/components';\nimport {AttributeViewConfig} from '@reltio/mdm-sdk';\n\ntype ProfileAttributesViewProps = {\n config: AttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileAttributesView = ({className, config}: ProfileAttributesViewProps) => {\n return (\n <AttributesView\n className={className}\n caption={config.caption}\n excludeUris={config.excludeUris}\n includeUris={config.includeUris}\n attributesCount={config.attributesCount}\n pinnedAttributes={config.pinnedAttributes}\n />\n );\n};\n","import React from 'react';\nimport {AttributeValue, AttributeType} from '@reltio/mdm-sdk';\n\nexport const SingleAttributeContext = React.createContext<{\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n values: AttributeValue[];\n page: number;\n setPage: (page: number) => void;\n isLoading: boolean;\n showInactive?: boolean;\n toggleShowInactive?: (checked: boolean) => void;\n hasPaging: boolean;\n totalVisibleValues: number;\n attributeType: AttributeType;\n totalNonVisibleValues: number;\n nonVisibleValues: AttributeValue[];\n }>(null);\n\nSingleAttributeContext.displayName = 'SingleAttributeContext';\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n triggerButton: {\n minWidth: 0,\n color: 'rgba(0,0,0,0.54)',\n width: '36px'\n },\n popupContent: {\n paddingTop: '19px',\n paddingBottom: '23px',\n paddingLeft: '23px',\n paddingRight: '23px',\n maxWidth: '180px',\n width: '40%'\n },\n checkboxControlRoot: {\n marginTop: '6px',\n marginLeft: '-12px'\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n }\n}));\n","import React, {useContext, useRef, useState} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {Popover as Popover} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport FilterIcon from '@material-ui/icons/FilterList';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\n\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst FilterButton = ({className}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const [isOpen, setIsOpen] = useState(false);\n const {showInactive, toggleShowInactive} = useContext(SingleAttributeContext);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n return (\n <>\n <Button ref={buttonRef} classes={{root: classnames(styles.triggerButton, className)}} onClick={togglePopup}>\n <FilterIcon />\n </Button>\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n root: styles.checkboxControlRoot,\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive}\n onChange={(e) => toggleShowInactive(e.target.checked)}\n />\n }\n label={i18n.text('Show inactive values')}\n />\n </Popover>\n </>\n );\n};\n\nexport default FilterButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n padding: '0 4px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n },\n ovIcon: {\n marginTop: '2px',\n marginLeft: '5px'\n }\n}));\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {FacetViewHeader, HideOnShrink, ExpandableSearchInput, VerticalDivider, OvIcon} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport FilterButton from '../FilterButton/FilterButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n caption: string;\n totalVisibleValues: number;\n showInactiveValuesMenu: boolean;\n};\n\nexport const SingleAttributeHeader = ({caption, totalVisibleValues, showInactiveValuesMenu}: Props) => {\n const styles = useStyles();\n\n const {searchQuery, setSearchQuery, setPage, totalNonVisibleValues, nonVisibleValues, attributeType} = useContext(\n SingleAttributeContext\n );\n\n const handleChangeSearchQuery = (query: string) => {\n setSearchQuery(query);\n setPage(0);\n };\n\n return (\n <FacetViewHeader title={caption} className={styles.root}>\n <HideOnShrink widthToHide={500}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {i18n.number(totalVisibleValues)}{' '}\n {totalVisibleValues === 1 ? i18n.text('item') : i18n.text('items')}\n </Typography>\n </HideOnShrink>\n {\n <OvIcon\n nonOvTotal={totalNonVisibleValues}\n className={styles.ovIcon}\n nonOvValues={nonVisibleValues}\n attributeType={attributeType}\n />\n }\n <ExpandableSearchInput query={searchQuery} onChange={handleChangeSearchQuery} />\n {showInactiveValuesMenu && <FilterButton />}\n </FacetViewHeader>\n );\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {inactive: Record<string, number>}) => ({\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n divider: {\n margin: '0 -16px 8px',\n backgroundColor: 'rgba(0,0,0,0.12)'\n },\n ovFalse: theme.inactive,\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px 8px 0'\n }\n}));\n","import {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 React, {useCallback, useContext, useRef} from 'react';\nimport i18n from 'ui-i18n';\nimport {always, cond, map, pathOr, pipe, prop, propEq} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport classnames from 'classnames';\nimport {CardinalityMessage, EditableAttribute, ErrorMessage, ViewIdContext} 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} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\nimport {areValuesEqual} from '../../../hooks/helpers';\n\ntype Props = {\n values: AttributeValue[];\n attributeType: AttributeType;\n parentUri: string;\n showInactive: boolean;\n noDataText: string;\n};\n\nconst emptyArray = [];\n\nexport const SingleAttributeEditableContent = ({values, attributeType, parentUri, showInactive, noDataText}: 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 = useRef<AttributeValue>(\n createNewAttribute({\n parentUri,\n attributeType\n })\n );\n\n const isModifiedEntityValuesEmpty = isEmptyValue(modifiedEntityValues);\n const showEmpty = isRequired && isModifiedEntityValuesEmpty;\n\n const newValues = showEmpty\n ? [emptyEditorValue.current]\n : modifiedEntityValues.filter(pipe(prop('uri'), isTempUri));\n\n const onAddAttributes = useCallback(\n (params: AttributeItem[]) =>\n pipe(profile.actions.addAttributes, dispatch)(params.map((param) => ({...param, viewId}))),\n [viewId, dispatch]\n );\n\n const onChangeAttribute = useCallback(\n (params: AttributeItem) => pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const onDeleteAttribute = useCallback(\n (params: AttributeItem) => pipe(profile.actions.removeAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const onDeactivateError = useCallback(pipe(profile.errors.actions.errorDeactivated, dispatch), [dispatch]);\n\n const onAdd = useCallback(() => {\n const attribute: AttributeItem = {\n parentUri,\n attributeType\n };\n\n return onAddAttributes(\n showEmpty && !isComplexAttribute(attributeType.type) ? [attribute, attribute] : [attribute]\n );\n }, [onAddAttributes, parentUri, attributeType, showEmpty]);\n\n const canCreate = checkCanCreateAttribute({attributeType, mode});\n\n const commonProps = {\n attributeType: attributeType,\n errors,\n crosswalks: modifiedEntity.crosswalks,\n mode,\n onAddAttributes,\n onChangeAttribute,\n onDeactivateError,\n showNonOv: showInactive\n };\n const isEmptyAttributeList = newValues.length === 0 && values.length === 0;\n return (\n <div>\n <CardinalityMessage cardinality={cardinality} />\n <ErrorMessage message={errorMessage} />\n {canCreate && (\n <Button color=\"primary\" onClick={onAdd} className={styles.moreButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {newValues.map((value, idx) => (\n <EditableAttribute\n key={value.uri}\n {...commonProps}\n attributeValue={value}\n lazy={showEmpty && !isRequired}\n showEmptyEditors={showEmptyEditors}\n ownError={getAttributeOwnError(value, idx, attributeTypeUri, errors)}\n onDeleteAttribute={onDeleteAttribute}\n />\n ))}\n {newValues.length > 0 && values.length > 0 && <Divider className={styles.divider} />}\n {values.map((originalValue) => {\n const modifiedEntityValue = modifiedEntityValues.find(propEq('uri', originalValue.uri));\n const value = modifiedEntityValue || originalValue;\n const deleted = entityValuesUris.includes(value.uri) && !modifiedEntityValuesUris.includes(value.uri);\n const edited = !deleted && modifiedEntityValue && !areValuesEqual(modifiedEntityValue, originalValue);\n const state = cond([\n [always(deleted), always('deleted')],\n [always(edited), always('edited')]\n ])();\n return (\n <div key={value.uri} className={classnames({[styles.ovFalse]: !isOv(value)})}>\n <EditableAttribute\n {...commonProps}\n attributeValue={value}\n ownError={getAttributeOwnError(value, null, attributeTypeUri, errors)}\n onDeleteAttribute={onDeleteAttribute}\n state={state}\n />\n </div>\n );\n })}\n {isEmptyAttributeList && <Typography className={styles.noData}>{noDataText}</Typography>}\n </div>\n );\n};\n","import React from 'react';\nimport {ReadOnlyAttribute} from '@reltio/components';\nimport {AttributeType, AttributeValue} from '@reltio/mdm-sdk';\n\ntype Props = {\n values: AttributeValue[];\n attributeType: AttributeType;\n showInactive: boolean;\n};\n\nexport const SingleAttributeReadableContent = ({values, attributeType, showInactive}: Props) => {\n return (\n <>\n {values.map((value) => {\n return (\n <ReadOnlyAttribute\n key={value.uri}\n attributeValue={value}\n attributeType={attributeType}\n showNonOv={showInactive}\n />\n );\n })}\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n padding: '4px 16px 9px',\n overflow: 'auto',\n flexGrow: 1\n },\n noData: {\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)'\n },\n pagination: {\n flexGrow: 0,\n flexShrink: 0\n }\n}));\n","import React, {useContext} from 'react';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {PivotingAttribute, SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {BasicView, BasicTablePagination, LinearLoadIndicator, PivotingAttributeContext} from '@reltio/components';\nimport mdm from '@reltio/mdm-module';\nimport {Box as Box} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SingleAttributeHeader} from '../SingleAttributeHeader/SingleAttributeHeader';\nimport {SingleAttributeEditableContent} from '../SingleAttributeEditableContent/SingleAttributeEditableContent';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport {SingleAttributeReadableContent} from '../SingleAttributeReadableContent/SingleAttributeReadableContent';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const SingleAttributeView = ({config, className}: Props) => {\n const {caption, max, showInactiveValuesMenu} = config;\n\n const styles = useStyles();\n\n const {values, totalVisibleValues, page, setPage, isLoading, hasPaging, attributeType, showInactive} = useContext(\n SingleAttributeContext\n );\n\n const entityUri = useSelector(mdm.selectors.getEntityUri);\n const isViewMode = useSelector(mdm.selectors.getIsViewMode);\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode);\n const pivotingAttributes: PivotingAttribute[] = useSelector(mdm.selectors.getPivotingAttributes);\n\n const hasValues = values.length !== 0;\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n const renderContent = () => {\n if (isLoading) {\n return <LinearLoadIndicator />;\n }\n\n if (attributeType) {\n if (isViewMode && hasValues) {\n const props = {\n values,\n attributeType,\n showInactive\n };\n return <SingleAttributeReadableContent {...props} />;\n } else if (isEditableMode) {\n const props = {\n values,\n attributeType,\n parentUri: entityUri,\n showInactive,\n noDataText\n };\n return <SingleAttributeEditableContent {...props} />;\n }\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n };\n\n return (\n <PivotingAttributeContext.Provider value={pivotingAttributes}>\n <BasicView className={classnames(styles.root, className)}>\n <SingleAttributeHeader\n totalVisibleValues={totalVisibleValues}\n caption={caption}\n showInactiveValuesMenu={showInactiveValuesMenu}\n />\n <Box className={styles.content}>{renderContent()}</Box>\n {hasPaging && (\n <BasicTablePagination\n count={totalVisibleValues}\n page={page}\n rowsPerPage={max}\n rowsPerPageOptions={[]}\n onChangePage={setPage}\n classes={{root: styles.pagination}}\n />\n )}\n </BasicView>\n </PivotingAttributeContext.Provider>\n );\n};\n","import {useCallback, useState, useEffect, useMemo, useRef} from 'react';\nimport {ifElse, prop, always, has, pathOr, path, partition, propEq} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n isDataTenantEntity,\n getPagedEntity,\n getAttributeSource,\n AttributeValue,\n SearchFilter,\n findAttributeTypeByUri,\n isReadableAttribute,\n isTempUri,\n isOv,\n findAttributeValues,\n isFirstLevelAttributeUri,\n SingleAttributeViewConfig\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {useSafePromise, useDidUpdateEffect} from '@reltio/components';\nimport {getPagedLocalEntity, getAttributeNameFromAttributeUri} from './helpers';\n\ntype Params = {\n filters?: SearchFilter[];\n searchQuery?: string;\n sorting?: {\n field: string;\n order: string;\n };\n page: number;\n showInactive: boolean;\n};\n\nexport const useSingleAttributeLoader = (\n config: SingleAttributeViewConfig,\n params: Params,\n canShowHistoryDiff: boolean\n) => {\n const {attributeUri, max = 15} = config;\n const metadata = useSelector(mdm.selectors.getMetadata);\n const [values, setValues] = useState([]);\n const [paging, setPaging] = useState(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 entitySelector = canShowHistoryDiff ? mdm.selectors.getEntityWithDiff : mdm.selectors.getEntityWithoutDiff;\n const entity = useSelector(entitySelector);\n const isViewMode = useSelector(mdm.selectors.getIsViewMode);\n const isHistoryModeEnabled = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const diff = useSelector(mdm.selectors.getHistoryDiff);\n\n const parentUri = entity.uri;\n const attributeTypeName = getAttributeNameFromAttributeUri(attributeUri);\n const attributeTypeSource = getAttributeSource(attributeUri);\n attributeValuesRef.current = findAttributeValues(entity, parentUri, attributeTypeName);\n const attributeType = useMemo(() => findAttributeTypeByUri(metadata, attributeUri), [metadata, attributeUri]);\n const {globalFilter} = useSelector(mdm.selectors.getGlobalSearchRequestOptions);\n const {showInactive} = params;\n const loadAttributes = useCallback(() => {\n if (\n attributeType &&\n isReadableAttribute(attributeType) &&\n !isTempUri(parentUri) &&\n isFirstLevelAttributeUri(attributeUri)\n ) {\n setIsLoading(true);\n const {page, showInactive, ...rest} = params;\n const request = isDataTenantEntity(entity) || isHistoryModeEnabled ? getPagedLocalEntity : getPagedEntity;\n safePromise(\n request({\n metadata,\n entity,\n apiPath,\n tenant,\n parentUri,\n defaultMaxValues: max,\n attributeTypeUri: attributeUri,\n offset: max * page,\n globalFilter,\n options: showInactive ? '' : undefined,\n ...rest\n })\n )\n .then((response) => {\n const attributes = path([attributeTypeSource], response);\n const values: AttributeValue[] = pathOr([], [attributeTypeName], attributes);\n if (!isHistoryModeEnabled) {\n dispatch(\n profile.actions.processNextPageOfAttributeValues({\n parentUri,\n attributeTypeUri: attributeUri,\n attributeTypeName,\n values\n })\n );\n }\n setValues(\n values.map((loadedValue) => {\n const valueFromEntity = attributeValuesRef.current?.find(propEq('uri', loadedValue.uri));\n return valueFromEntity || loadedValue;\n })\n );\n setPaging(path(['paging', attributeUri], attributes));\n })\n .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 = showInactive ? [] : nonOvValues;\n const totalProp = showInactive ? 'totalValues' : 'totalOvValues';\n const totalVisibleValues = ifElse(has(totalProp), prop(totalProp), always(values.length))(paging);\n const hasPaging = max < totalVisibleValues;\n const totalNonVisibleValues = paging?.totalValues\n ? paging.totalValues - totalVisibleValues\n : nonVisibleValues.length;\n return {\n values,\n isLoading,\n hasPaging,\n totalVisibleValues,\n attributeType,\n totalNonVisibleValues,\n nonVisibleValues\n };\n};\n","import React from 'react';\nimport {RelationsViewState} from '../hooks/useRelationsState';\n\nexport const RelationsViewStateContext = React.createContext<RelationsViewState>(null);\n\nRelationsViewStateContext.displayName = 'RelationsViewStateContext';\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nconst popupHorizontalPadding = '23px';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n button: {\n color: theme.palette.text.secondary,\n width: '36px',\n minWidth: '36px'\n },\n popupContent: {\n padding: `19px ${popupHorizontalPadding}`\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n },\n divider: {\n backgroundColor: 'rgba(0,0,0,0.1)',\n margin: `19px -${popupHorizontalPadding}`\n },\n title: {\n marginBottom: '30px'\n },\n sortControls: {\n display: 'flex',\n alignItems: 'center'\n },\n sortSelectorRoot: {\n flex: 1,\n padding: '13px 16px',\n fontSize: '0.85rem'\n },\n sortSelectorMenuItem: {\n fontSize: '0.85rem'\n },\n sortOrderButton: {\n flexShrink: 0,\n margin: '0 8px 0 7px'\n }\n}));\n","import React, {useContext, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {isEmptyValue} from '@reltio/mdm-sdk';\nimport {DropDownEditor, SmallIconButtonWithTooltip} from '@reltio/components';\nimport {Popover as Popover} from '@material-ui/core';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport FilterIcon from '@material-ui/icons/FilterList';\nimport {Button as Button} from '@material-ui/core';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';\nimport ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';\nimport {RelationsViewStateContext} from '../../../contexts/RelationsViewStateContext';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst FilterButton = ({className}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const {\n showInactive,\n toggleShowInactive,\n sortOrder,\n toggleSortOrder,\n sortOption,\n changeSortOption,\n sortOptions\n } = useContext(RelationsViewStateContext);\n const [isOpen, setIsOpen] = useState(false);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n const hasSortOptions = !isEmptyValue(sortOptions);\n\n const isAsc = sortOrder === 'asc';\n\n return (\n <>\n <Button\n ref={buttonRef}\n classes={{\n root: classnames(styles.button, className)\n }}\n onClick={togglePopup}\n >\n <FilterIcon />\n </Button>\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive || false}\n onChange={toggleShowInactive}\n />\n }\n label={i18n.text('Show inactive Relationships')}\n />\n {hasSortOptions && (\n <>\n <Divider className={styles.divider} />\n <Typography className={styles.title} variant=\"h6\">\n {i18n.text('Sort by')}\n </Typography>\n <div className={styles.sortControls}>\n <DropDownEditor\n entries={sortOptions}\n TextFieldProps={{variant: 'filled'}}\n classes={{\n root: styles.sortSelectorRoot,\n menuItem: styles.sortSelectorMenuItem\n }}\n fullWidth\n disableUnderline\n value={sortOption}\n onChange={changeSortOption}\n MenuProps={{\n getContentAnchorEl: null,\n anchorOrigin: {vertical: 'bottom', horizontal: 'left'}\n }}\n />\n <SmallIconButtonWithTooltip\n tooltipTitle={isAsc ? i18n.text('Ascending') : i18n.text('Descending')}\n icon={isAsc ? ArrowUpwardIcon : ArrowDownwardIcon}\n onClick={toggleSortOrder}\n className={styles.sortOrderButton}\n size=\"L\"\n />\n </div>\n </>\n )}\n </Popover>\n </>\n );\n};\n\nFilterButton.displayName = 'FilterButton';\n\nexport default FilterButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n header: {\n padding: '0 6px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px',\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n }\n});\n","import React from 'react';\nimport {RelationsViewConfig} from '@reltio/mdm-sdk';\n\nexport const ImportDTContext = React.createContext<{\n reloadRelations: () => void;\n config: Pick<RelationsViewConfig, 'content' | 'importFromDT' | 'maxDtssImport'>;\n }>(null);\n","import {useSelector, useDispatch} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {useCallback, useContext, useEffect, useState} from 'react';\nimport {getRequestErrorMessage, hasNonImportedRelations, importDTConnections, isTempUri} from '@reltio/mdm-sdk';\nimport {ui} from '@reltio/mdm-module';\nimport {ImportDTContext} from '../../../../contexts/ImportDTContext';\nimport i18n from 'ui-i18n';\n\nconst MAX = Math.pow(2, 31) - 1;\ntype Tenant = {id: string; label: string};\n\nexport const useImportFromDTLoader = () => {\n const dataTenants: Array<Tenant> = useSelector(mdmModule.selectors.getDataTenants);\n const dispatch = useDispatch();\n const {config, reloadRelations} = useContext(ImportDTContext);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const [tenants, setTenants] = useState<Array<Tenant>>([]);\n const [selectedTenant, setSelectedTenant] = useState<Tenant>(null);\n const dtssPath = useSelector(mdmModule.selectors.getDtssPath);\n const customerTenant = useSelector(mdmModule.selectors.getTenant);\n const content = [{...config.content, offset: 0, max: config.maxDtssImport ?? MAX}];\n\n const checkHasNonImportedConnections = useCallback(() => {\n setTenants([]);\n if (config.importFromDT && !isTempUri(entityUri)) {\n Promise.all(\n (dataTenants || []).map((tenant) =>\n hasNonImportedRelations({\n entityUri,\n content,\n dtssPath,\n customerTenant,\n dataTenant: tenant.id\n }).then(({hasNonImportedConnections}) => ({\n ...tenant,\n hasNonImportedConnections\n }))\n )\n )\n .then((modifiedTenants) => modifiedTenants.filter((tenant) => tenant.hasNonImportedConnections))\n .then(setTenants);\n }\n }, [entityUri, dtssPath, customerTenant, config, dataTenants]);\n\n const onConfirmImport = useCallback(() => {\n importDTConnections({\n entityUri,\n content,\n dtssPath,\n customerTenant,\n dataTenant: selectedTenant.id\n })\n .then(() => {\n reloadRelations();\n checkHasNonImportedConnections();\n })\n .catch((error) =>\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))))\n );\n setSelectedTenant(null);\n }, [\n entityUri,\n dtssPath,\n customerTenant,\n config,\n checkHasNonImportedConnections,\n reloadRelations,\n selectedTenant,\n setSelectedTenant\n ]);\n\n useEffect(() => {\n checkHasNonImportedConnections();\n }, [checkHasNonImportedConnections]);\n const onCancelConfirmation = useCallback(() => setSelectedTenant(null), []);\n const onImportClick = useCallback((tenant: Tenant) => setSelectedTenant(tenant), []);\n return {\n tenants,\n selectedTenant,\n onConfirmImport,\n onCancelConfirmation,\n onImportClick\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n tenant: {\n backgroundColor: '#0000EE',\n cursor: 'pointer',\n position: 'absolute',\n top: '8px',\n left: '22px',\n width: '10px',\n height: '10px',\n color: 'white',\n fontSize: '10px',\n fontWeight: 'bold',\n userSelect: 'text',\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n button: {\n position: 'relative'\n },\n badge: {\n fontSize: '10px',\n height: '14px',\n minWidth: '14px',\n width: '14px',\n fontWeight: 'bold',\n backgroundColor: '#FF4081',\n color: '#FFF'\n },\n badgePosition: {\n right: '5px',\n top: '4px'\n }\n}));\n","import React from 'react';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport {Badge as Badge} from '@material-ui/core';\nimport {useStyles} from './styles';\n\ninterface Props {\n label: number | string;\n}\n\nexport const MultipleImportIcon = ({label}: Props) => {\n const styles = useStyles();\n return (\n <Badge\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n badgeContent={label}\n >\n <CloudDownloadIcon />\n </Badge>\n );\n};\n","import React from 'react';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport {DropDownMenuButton, SmallIconButtonWithTooltip} from '@reltio/components';\nimport {useImportFromDTLoader} from './hooks/useImportFromDTLoader';\nimport {useStyles} from './styles';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {ConfirmationDialog} from '@reltio/components';\nimport {MultipleImportIcon} from './MultipleImportIcon';\n\nexport const ImportFromDT = () => {\n const {tenants, selectedTenant, onConfirmImport, onCancelConfirmation, onImportClick} = useImportFromDTLoader();\n const styles = useStyles();\n const oneTenant = tenants.length === 1;\n const labelOnButton = oneTenant\n ? tenants[0].label.indexOf('DT:') === 0\n ? tenants[0].label[3]\n : tenants[0].label[0]\n : tenants.length;\n return (\n <>\n {!!tenants.length && (\n <>\n {oneTenant ? (\n <div className={styles.button}>\n <SmallIconButtonWithTooltip\n size={'L'}\n icon={CloudDownloadIcon}\n tooltipTitle={i18n.text('Import connections from ${label}', {label: tenants[0].label})}\n onClick={() => onImportClick(tenants[0])}\n />\n <div className={classnames(styles.tenant)}>{labelOnButton}</div>\n </div>\n ) : (\n <DropDownMenuButton\n menuId={'importDT-table-actions'}\n buttonComponent={SmallIconButtonWithTooltip}\n buttonProps={{\n tooltipTitle: i18n.text('Import connections'),\n size: 'L',\n // eslint-disable-next-line react/display-name\n icon: () => <MultipleImportIcon label={labelOnButton} />\n }}\n menuItems={tenants.map((tenant) => ({\n onClick: () => {\n onImportClick(tenant);\n },\n text: tenant.label\n }))}\n />\n )}\n <ConfirmationDialog\n open={!!selectedTenant}\n title={i18n.text('Confirmation')}\n content={i18n.text('Import connections from ${label}?', {label: selectedTenant?.label})}\n discardCaption={i18n.text('Cancel')}\n saveCaption={i18n.text('Import')}\n onDiscard={onCancelConfirmation}\n onSave={onConfirmImport}\n />\n </>\n )}\n </>\n );\n};\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {ExpandableSearchInput, FacetViewHeader, HideOnShrink, VerticalDivider} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport FilterButton from './FilterButton/FilterButton';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {useStyles} from './styles';\nimport {ImportFromDT} from './ImportFromDT/ImportFromDT';\n\ntype Props = {\n title?: string;\n total?: number;\n};\n\nconst RelationsHeader = ({title, total}: Props) => {\n const styles = useStyles();\n\n const {searchQuery, changeSearchQuery} = useContext(RelationsViewStateContext);\n\n return (\n <FacetViewHeader title={title || ''} className={styles.header}>\n {total > 0 && (\n <HideOnShrink widthToHide={400}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {total > 1\n ? i18n.text('${count} items', {count: total})\n : i18n.text('${count} item', {count: total})}\n </Typography>\n </HideOnShrink>\n )}\n <ExpandableSearchInput query={searchQuery} onChange={changeSearchQuery} />\n <ImportFromDT />\n <FilterButton />\n </FacetViewHeader>\n );\n};\n\nexport default RelationsHeader;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {tooltip: Record<string, string | number>}) => ({\n tooltip: theme.tooltip,\n tooltipContent: {\n minWidth: '165px',\n padding: '4px 2px 2px'\n },\n label: {\n fontSize: '11px',\n lineHeight: '13px',\n fontWeight: 500,\n margin: 0,\n color: 'white'\n },\n secondaryLabel: {\n color: 'rgba(255, 255, 255, 0.7)',\n fontSize: '10px',\n marginTop: '4px',\n fontWeight: 500,\n lineHeight: '11px'\n },\n progress: {\n marginTop: '4px',\n color: '#FFFFFF'\n }\n}));\n","import React, {useCallback, useEffect, useState} from 'react';\nimport {isNil, ifElse} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n ConnectionEntity,\n getDataTenantEntitySecondaryLabel,\n getEntitySecondaryLabel,\n isDataTenantEntity,\n isTempUri\n} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {useSafePromise} from '@reltio/components';\nimport {CircularProgress as CircularProgress} from '@material-ui/core';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {useStyles} from './styles';\n\nconst PROGRESS_ICON_SIZE = 16;\n\ntype Props = {\n label: string;\n entity?: ConnectionEntity;\n children: React.ReactElement;\n};\n\nconst RelationTooltip = ({label, entity, children, ...tooltipProps}: Props) => {\n const styles = useStyles();\n const safePromise = useSafePromise();\n const tenant = useSelector(mdm.selectors.getTenant);\n const dtssPath = useSelector(mdm.selectors.getDtssPath) as string;\n const [isLoading, setIsLoading] = useState(false);\n const [secondaryLabel, setSecondaryLabel] = useState<string>(null);\n\n useEffect(() => {\n setSecondaryLabel(null);\n }, [entity]);\n\n const onOpen = useCallback(() => {\n if (entity?.entityUri && !isTempUri(entity?.entityUri) && isNil(secondaryLabel)) {\n const request = ifElse(\n isDataTenantEntity,\n (entity: ConnectionEntity) =>\n getDataTenantEntitySecondaryLabel({\n entityUri: entity.entityUri,\n dataTenant: entity.dataTenant,\n customerTenant: tenant,\n dtssPath\n }),\n (entity: ConnectionEntity) => getEntitySecondaryLabel(entity.entityUri)\n );\n\n setIsLoading(true);\n safePromise(request(entity))\n .then(({secondaryLabel}) => {\n setSecondaryLabel(secondaryLabel);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }\n }, [dtssPath, entity, tenant, safePromise, secondaryLabel]);\n\n const tooltipContent = (\n <div className={styles.tooltipContent}>\n <div className={styles.label}>{label}</div>\n {isLoading && <CircularProgress size={PROGRESS_ICON_SIZE} classes={{colorPrimary: styles.progress}} />}\n {secondaryLabel && <div className={styles.secondaryLabel}>{secondaryLabel}</div>}\n </div>\n );\n\n return (\n <Tooltip\n onOpen={onOpen}\n title={tooltipContent}\n disableFocusListener\n classes={{tooltip: styles.tooltip}}\n {...tooltipProps}\n >\n {children}\n </Tooltip>\n );\n};\n\nexport default RelationTooltip;\n","import {\n Connection,\n Metadata,\n getEntityType,\n getLabel,\n getEntityUriForLink,\n getRelationTypeLabelFromMetadata\n} 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 string;\n const entityLabel = getLabel(entity?.entityLabel) as string;\n const preparedUri = getEntityUriForLink({uri: entity?.entityUri, dataTenant: entity?.dataTenant}) as string;\n const relationLabel =\n relation?.relationLabel || (getRelationTypeLabelFromMetadata(metadata, relation?.relationType) as string);\n\n return {\n entityType,\n entityLabel,\n preparedUri,\n relationLabel\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n container: {\n display: 'flex'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport Button, {ButtonProps} from '@material-ui/core/Button';\nimport {useStyles} from './styles';\n\ntype Props = {\n acceptRelation: () => void;\n ignoreRelation: () => void;\n};\n\nexport const SuggestedButtons = ({acceptRelation, ignoreRelation, ...props}: Props & ButtonProps) => {\n const styles = useStyles();\n return (\n <div className={styles.container}>\n <Button onClick={acceptRelation} variant=\"text\" color=\"primary\" {...props} style={{alignSelf: 'center'}}>\n {i18n.text('Accept')}\n </Button>\n <Button onClick={ignoreRelation} variant=\"text\" color=\"primary\" {...props} style={{alignSelf: 'center'}}>\n {i18n.text('Ignore')}\n </Button>\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {inactiveBackground: string}) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n\n marginBottom: '2px'\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row',\n minHeight: '24px',\n padding: '0 16px'\n },\n rowInactive: {\n background: theme.inactiveBackground\n },\n entityAvatar: {\n height: '12px',\n width: '12px',\n fontSize: '11px',\n marginRight: '8px'\n },\n entityLabelContainer: {\n textDecoration: 'none',\n cursor: 'pointer',\n paddingRight: '8px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n editButtonsContent: {\n marginLeft: 'auto',\n flex: '0 0 40px'\n },\n editButtons: {\n padding: 0\n },\n removed: {\n color: theme.palette.text.secondary,\n textDecoration: 'line-through'\n },\n editedLabel: {\n fontStyle: 'italic',\n color: theme.palette.text.secondary,\n margin: '0 5px'\n }\n}));\n","import React, {memo, useCallback} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport mdm from '@reltio/mdm-module';\nimport {Typography as Typography} from '@material-ui/core';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport {Connection, Metadata, isActiveObject, checkRemoved, checkEdited, checkIgnored} from '@reltio/mdm-sdk';\nimport {EntityTypeIcon, EntityUriLink, SmallIconButtonWithTooltip} from '@reltio/components';\nimport RelationTooltip from '../RelationTooltip/RelationTooltip';\nimport {useRelationInfo} from '../../hooks/useRelationInfo';\nimport {checkRelationPermission} from '../../helpers/permissions';\nimport {SuggestedButtons} from '../SuggestedButtons/SuggestedButtons';\nimport {useStyles} from './styles';\n\ntype Props = {\n connection: Connection;\n onRemoveRelation: (relationUri: string) => void;\n onEditRelation: (connection: Connection) => void;\n onAcceptRelation?: (connection: Connection) => void;\n onIgnoreRelation?: (connection: Connection) => void;\n metadata: Metadata;\n showControls: boolean;\n renderRelationArrowButton?: () => React.ReactNode;\n};\n\nconst EditableRelationItem = memo(\n ({\n connection,\n metadata,\n showControls,\n onRemoveRelation,\n onEditRelation,\n onAcceptRelation,\n onIgnoreRelation,\n renderRelationArrowButton\n }: Props) => {\n const styles = useStyles();\n\n const {entity, relation} = connection;\n const removed = checkRemoved(connection);\n const edited = checkEdited(connection);\n const ignored = checkIgnored(connection);\n const {entityType, entityLabel, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const isActive = isActiveObject(relation) && isActiveObject(entity);\n const mode = useSelector(mdm.selectors.getMode);\n const {canRemove, canUpdate} = checkRelationPermission({\n mode,\n onRemoveRelation,\n onEditRelation,\n metadata,\n connection\n });\n\n const handleRemoveRelation = useCallback(\n () => onRemoveRelation(connection.relation.relationUri),\n [onRemoveRelation, connection]\n );\n\n const handleEditRelation = useCallback(() => onEditRelation(connection), [onEditRelation, connection]);\n\n const handleAcceptRelation = useCallback(() => {\n onAcceptRelation(connection);\n }, [onAcceptRelation, connection]);\n\n const handleIgnoreRelation = useCallback(() => onIgnoreRelation(connection), [onIgnoreRelation, connection]);\n\n const editButtonsContent =\n (canRemove || canUpdate) && showControls && !connection.suggested ? (\n <>\n {canUpdate && (\n <SmallIconButtonWithTooltip\n icon={EditIcon}\n size=\"XS\"\n onClick={handleEditRelation}\n tooltipTitle={i18n.text('Edit')}\n />\n )}\n {canRemove && (\n <SmallIconButtonWithTooltip\n icon={DeleteIcon}\n size=\"XS\"\n onClick={handleRemoveRelation}\n tooltipTitle={i18n.text('Remove')}\n />\n )}\n </>\n ) : undefined;\n\n const suggustedButtonsContent = connection.suggested ? (\n <SuggestedButtons\n acceptRelation={handleAcceptRelation}\n ignoreRelation={handleIgnoreRelation}\n size=\"small\"\n disabled={ignored}\n />\n ) : undefined;\n const captionText = ignored ? i18n.text('ignored') : i18n.text('edited');\n return (\n <div\n className={classnames(\n styles.container,\n {[styles.rowInactive]: !isActive},\n {[styles.removed]: removed || ignored}\n )}\n >\n <div className={styles.row}>\n {renderRelationArrowButton && renderRelationArrowButton()}\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n {(edited || ignored) && (\n <Typography variant=\"caption\" className={styles.editedLabel}>\n ({captionText})\n </Typography>\n )}\n {relationLabel && <span className={styles.relationLabel}>{`, ${relationLabel}`}</span>}\n </EntityUriLink>\n\n <div className={styles.editButtonsContent}>{editButtonsContent}</div>\n {suggustedButtonsContent}\n </div>\n </div>\n );\n }\n);\n\nEditableRelationItem.displayName = 'EditableRelationItem';\n\nexport default EditableRelationItem;\n","import {checkMetadataForDelete, checkMetadataForUpdate, checkRemoved, getRelationType, Mode} from '@reltio/mdm-sdk';\n\nexport const checkRelationPermission = ({metadata, mode, connection, onRemoveRelation, onEditRelation}) => {\n const isEditableMode = mode === Mode.Editing || mode === Mode.Suggesting;\n if (isEditableMode && connection) {\n const {\n relation: {relationType}\n } = connection;\n const isRemoved = checkRemoved(connection);\n const relationTypeMetadata = getRelationType(metadata, relationType);\n const canRemove = onRemoveRelation && !isRemoved && checkMetadataForDelete(mode, relationTypeMetadata);\n const canUpdate = onEditRelation && !isRemoved && checkMetadataForUpdate(mode, relationTypeMetadata);\n return {canRemove, canUpdate};\n } else {\n return {canRemove: false, canUpdate: false};\n }\n};\n","import {Directions, wrapInArrayIfNeeded, InOutRelation} from '@reltio/mdm-sdk';\n\nexport const getFirstRelationTypeObject = (inRelations: InOutRelation, outRelations: InOutRelation) => {\n const prepareRelation = (direction, relations) => {\n const relationsArr = relations ? wrapInArrayIfNeeded(relations) : [];\n return relationsArr.map((relation) => ({\n type: relation,\n direction: direction === Directions.IN ? Directions.IN : Directions.OUT\n }));\n };\n return prepareRelation(Directions.IN, inRelations).concat(prepareRelation(Directions.OUT, outRelations))[0];\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n arrowIcon: {\n fontSize: '16px',\n marginRight: '6px'\n }\n});\n","import React from 'react';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport {checkNew, Connection, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n onClick: () => void;\n connection: Connection;\n config: RelationsViewConfig;\n showSecondLevel: boolean;\n};\n\nexport const RelationArrowButton = ({onClick, connection, config, showSecondLevel}: Props) => {\n const styles = useStyles();\n const {parentEntityUri} = connection;\n const {contentSecondLevel} = config;\n\n const props = {\n onClick,\n className: styles.arrowIcon\n };\n\n if (parentEntityUri || !contentSecondLevel || checkNew(connection)) {\n return null;\n }\n\n return showSecondLevel ? <ArrowDropDownIcon {...props} /> : <ArrowRightIcon {...props} />;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n row: {\n display: 'flex',\n alignItems: 'center',\n width: '100%'\n },\n secondLevelContent: {\n paddingLeft: '24px'\n }\n});\n","import React, {useContext, useMemo} from 'react';\nimport {Connection, ActivityFilter, getEntitiesMapForConnections, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {useSecondLevelConnections} from '../../hooks/useSecondLevelConnections';\nimport {RelationArrowButton} from '../RelationArrowButton/RelationArrowButton';\nimport {RelationsContent} from '../RelationsContent/RelationsContent';\nimport {useStyles} from './styles';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {EntitiesMapContext} from '@reltio/components';\n\ntype Props = {\n config: RelationsViewConfig;\n connection: Connection;\n children: (render: () => React.ReactNode) => React.ReactNode;\n};\n\nexport const SecondLevelWrapper = ({config, connection, children}: Props) => {\n const styles = useStyles();\n\n const {showInactive} = useContext(RelationsViewStateContext);\n\n const {\n connections,\n showSecondLevel,\n toggleShowSecondLevel,\n loadRelations,\n loading,\n total\n } = useSecondLevelConnections({\n config,\n connection,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY\n });\n\n const entitiesMap = useMemo(() => getEntitiesMapForConnections(connections), [connections]);\n\n const renderRelationArrowButton = () => {\n return (\n <RelationArrowButton\n onClick={toggleShowSecondLevel}\n connection={connection}\n config={config}\n showSecondLevel={showSecondLevel}\n />\n );\n };\n\n return (\n <>\n {children(renderRelationArrowButton)}\n {showSecondLevel && (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <div className={styles.secondLevelContent}>\n <RelationsContent\n isLoading={loading}\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n total={total}\n parentEntityUri={connection.entity.entityUri}\n />\n </div>\n </EntitiesMapContext.Provider>\n )}\n </>\n );\n};\n","import {useState, useCallback} from 'react';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {\n Connection,\n getRelationsForEntity,\n ActivityFilter,\n GlobalSearchRequestOptions,\n RelationsViewConfig\n} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} from '@reltio/mdm-module';\n\ntype Params = {\n config: RelationsViewConfig;\n connection: Connection;\n relationActivityFilter: ActivityFilter;\n};\n\nexport const useSecondLevelConnections = ({config, connection, relationActivityFilter}: Params) => {\n const dispatch = useDispatch();\n\n const [showSecondLevel, setShowSecondLevel] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const {contentSecondLevel} = config;\n const {entity} = connection;\n\n const connections =\n (useSelector((state) =>\n mdmModule.selectors.getConnectionsWithDraftsByViewId(state, config.id, entity.entityUri)\n ) as Connection[]) || [];\n\n const total = useSelector((state) => mdmModule.selectors.getTotalByViewId(state, config.id, entity.entityUri));\n const {activityFilter}: GlobalSearchRequestOptions =\n useSelector(mdmModule.selectors.getGlobalSearchRequestOptions) || {};\n\n const loadRelations = useCallback(() => {\n const requestConfig = {\n ...contentSecondLevel,\n returnObjects: true,\n returnDates: true,\n activeness: {\n relation: relationActivityFilter || ActivityFilter.ALL,\n entity: activityFilter\n }\n };\n\n setLoading(true);\n\n getRelationsForEntity(entity.entityUri, [requestConfig]).then((response) => {\n const {connections, total} = response[0];\n\n if (connections) {\n dispatch(\n profile.relations.actions.secondLevelRelationsLoaded({\n connections,\n parentEntityUri: entity.entityUri,\n id: config.id,\n total\n })\n );\n }\n\n setLoading(false);\n });\n }, [config.id, contentSecondLevel, dispatch, entity.entityUri, activityFilter, relationActivityFilter]);\n\n const toggleShowSecondLevel = useCallback(() => {\n if (!showSecondLevel && !connection.connections) {\n loadRelations();\n }\n\n setShowSecondLevel((show) => !show);\n }, [loadRelations, connection.connections, showSecondLevel]);\n\n return {connections, showSecondLevel, toggleShowSecondLevel, loadRelations, loading, total};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px',\n marginLeft: '16px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n divider: {\n margin: '0 0 8px',\n backgroundColor: 'rgba(0,0,0,0.12)'\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px'\n }\n}));\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pipe, partition, evolve, always, omit} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {\n Connection,\n isTempUri,\n Mode,\n createNewConnectionWithDefaultRelationType,\n checkNew,\n RelationsViewConfig\n} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {RelationEditor} from '@reltio/components';\nimport EditableRelationItem from '../EditableRelationItem/EditableRelationItem';\nimport {getFirstRelationTypeObject} from '../../helpers/relation';\nimport {SecondLevelWrapper} from '../SecondLevelWrapper/SecondLevelWrapper';\nimport {useStyles} from './styles';\n\nexport type Props = {\n className?: string;\n noDataText: string;\n connections: Array<Connection>;\n config: RelationsViewConfig;\n mode: Mode;\n parentEntityUri?: string;\n};\n\nconst RelationsEditableContent = ({className, connections = [], config, mode, noDataText, parentEntityUri}: Props) => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const relationToAdd = useSelector((state) => mdmModule.selectors.getRelationToAddByViewId(state, config.id));\n const relationsToEdit = useSelector((state) => mdmModule.selectors.getRelationsToEditByViewId(state, config.id));\n const entity = useSelector(mdmModule.selectors.getEntity);\n const checkIfCanAddRelations = useSelector((state) =>\n mdmModule.selectors.getCheckIfCanAddRelations(state, config.content)\n );\n\n const dispatch = useDispatch();\n const styles = useStyles();\n\n const onAddRelation = useCallback(() => {\n const newConnection = createNewConnectionWithDefaultRelationType({config, mode, metadata, parentEntityUri});\n pipe(profile.relations.actions.openRelationEditor(config.id), dispatch)(newConnection);\n }, [config, mode, metadata, dispatch, parentEntityUri]);\n\n const onRemoveRelation = useCallback(\n (relationUri) => {\n dispatch(profile.relations.actions.closeRelationEditor(config.id, relationUri));\n dispatch(profile.relations.actions.removeRelation(config.id, relationUri));\n const connectionToRemove = connections.find(\n (connection) => profile.relations.selectors.getRelationUriFromConnection(connection) === relationUri\n );\n const entityUri = profile.relations.selectors.getEntityUriFromConnection(connectionToRemove);\n if (isTempUri(entityUri)) {\n dispatch(profile.modifiedEntities.actions.entityDeleted(entityUri));\n }\n },\n [config, connections, dispatch]\n );\n const content = config.content;\n const defaultRelationTypeObject = getFirstRelationTypeObject(content.inRelations, content.outRelations);\n const onAcceptRelation = useCallback(\n (connection) => {\n const connectionWithDefaultRelationType = pipe(\n omit(['suggested']),\n evolve({\n relation: {\n relationType: always(defaultRelationTypeObject.type),\n object: evolve({type: always(defaultRelationTypeObject.type), attributes: always(null)})\n }\n })\n )(connection);\n dispatch(profile.relations.actions.addRelation(config.id, connectionWithDefaultRelationType));\n },\n [dispatch, config, defaultRelationTypeObject]\n );\n\n const onIgnoreRelation = useCallback(\n (connection) => {\n dispatch(\n profile.relations.actions.ignoreRelation(config.id, {\n relationType: defaultRelationTypeObject.type,\n relationDirection: defaultRelationTypeObject.direction,\n entityUri: connection.entity.entityUri,\n relationUri: connection.relation.relationUri\n })\n );\n },\n [dispatch, config, defaultRelationTypeObject]\n );\n\n const [newConnections, currentConnections] = partition(checkNew, connections);\n const canAddRelations = entity && checkIfCanAddRelations;\n\n const isEmptyRelationList = newConnections.length === 0 && currentConnections.length === 0;\n\n const getRelationEditableContent = (connection: Connection) => {\n const openedRelation = relationsToEdit.find(\n (openedRelation) => openedRelation?.relation?.relationUri === connection?.relation?.relationUri\n );\n const showControls = !config.allowOnlyCreateNew || checkNew(connection);\n const itemKey = `${connection?.relation?.relationUri}-${connection?.relation?.direction}`;\n return (\n <SecondLevelWrapper config={config} connection={connection} key={itemKey}>\n {(renderRelationArrowButton) => {\n return openedRelation ? (\n <RelationEditor connection={openedRelation} config={config} mode={mode} metadata={metadata} />\n ) : (\n <EditableRelationItem\n renderRelationArrowButton={renderRelationArrowButton}\n connection={connection}\n metadata={metadata}\n showControls={showControls}\n onRemoveRelation={onRemoveRelation}\n onEditRelation={pipe(profile.relations.actions.openRelationEditor(config.id), dispatch)}\n onAcceptRelation={onAcceptRelation}\n onIgnoreRelation={onIgnoreRelation}\n />\n );\n }}\n </SecondLevelWrapper>\n );\n };\n\n const shouldShowAddRelationButton =\n canAddRelations && (!relationToAdd || (relationToAdd && relationToAdd.parentEntityUri === parentEntityUri));\n\n const shouldShowRelationEditorToAdd = relationToAdd && relationToAdd.parentEntityUri === parentEntityUri;\n\n return (\n <div className={className}>\n {shouldShowAddRelationButton && (\n <Button color=\"primary\" onClick={onAddRelation} className={styles.moreButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {shouldShowRelationEditorToAdd && (\n <RelationEditor connection={relationToAdd} config={config} mode={mode} metadata={metadata} />\n )}\n {newConnections.map(getRelationEditableContent)}\n {newConnections.length > 0 && currentConnections.length > 0 && <Divider className={styles.divider} />}\n {currentConnections.map(getRelationEditableContent)}\n {isEmptyRelationList && <Typography className={styles.noData}>{noDataText}</Typography>}\n </div>\n );\n};\n\nexport default RelationsEditableContent;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n attributesList: {\n paddingLeft: '46px',\n paddingRight: '16px',\n marginBottom: '10px',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0\n }\n}));\n","import React, {useContext, useEffect, useMemo} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n AttributeType,\n CollaborationObjectTypes,\n Connection,\n createRelatedObjectUris,\n Entity,\n getActivenessAttributes,\n getAttributesListForReadMode,\n getAttributeValuesUris,\n getRelationAttributesList,\n isEmptyValue,\n Metadata\n} from '@reltio/mdm-sdk';\nimport {CollaborationContext, ReadOnlyAttributesList, RelatedObjectUrisContext} from '@reltio/components';\nimport {useStyles} from './styles';\nimport {isEmpty} from 'ramda';\n\ntype Props = {\n connection: Connection;\n className?: string;\n};\n\nexport const RelationAttributes = ({connection, className}: Props) => {\n const styles = useStyles();\n\n const {relation} = connection;\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n\n const firstLevelRelationAttrTypes = useMemo(\n () => getRelationAttributesList(metadata, relation?.relationType) as AttributeType[],\n [relation?.relationType, metadata]\n );\n\n const attributeListEntity = useMemo(\n () => ({\n attributes: {\n ...profile.relations.selectors.getRelationAttributesFromConnection(connection)\n },\n ...getActivenessAttributes(connection?.relation || {})\n }),\n [connection]\n );\n\n const attributesList = useMemo(\n () => getAttributesListForReadMode(firstLevelRelationAttrTypes, attributeListEntity as Entity),\n [firstLevelRelationAttrTypes, attributeListEntity]\n );\n\n const showAttributesList = attributesList.filter(({values}) => !isEmptyValue(values)).length > 0;\n\n const objectIds = useMemo(() => getAttributeValuesUris(attributeListEntity.attributes), [attributeListEntity]);\n\n const {getCommentsCount} = useContext(CollaborationContext);\n useEffect(() => {\n !isEmpty(objectIds) && getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n const additionalRelatedObjectUris = useMemo(\n () => createRelatedObjectUris(CollaborationObjectTypes.RELATION, {entityUri: currentEntityUri, connection}),\n [connection, currentEntityUri]\n );\n\n return showAttributesList ? (\n <RelatedObjectUrisContext.Provider value={additionalRelatedObjectUris}>\n <ReadOnlyAttributesList\n className={classnames(styles.attributesList, className)}\n entity={attributeListEntity}\n attrTypes={firstLevelRelationAttrTypes}\n />\n </RelatedObjectUrisContext.Provider>\n ) : (\n <div className={classnames(styles.attributesList, className)}>{i18n.text('No attributes')}</div>\n );\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\nimport InfoIconSelected from '@material-ui/icons/InfoRounded';\nimport InfoIcon from '@material-ui/icons/InfoOutlined';\n\ntype Props = {\n show: boolean;\n onToggle: () => void;\n className?: string;\n};\n\nexport const ShowDetailsButton = ({show, onToggle, className}: Props) => {\n return (\n <SmallIconButtonWithTooltip\n className={className}\n tooltipTitle={\n show\n ? i18n.text('Hide attributes of the relationship')\n : i18n.text('Show attributes of the relationship')\n }\n tooltipPlacement=\"bottom-end\"\n size=\"XXS\"\n icon={show ? InfoIconSelected : InfoIcon}\n onClick={onToggle}\n />\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {inactiveBackground: string; suggested: string}) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n paddingBottom: '2px'\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row',\n minHeight: '16px',\n padding: '3px 11px 3px 16px'\n },\n rowInactive: {\n background: theme.inactiveBackground\n },\n entityAvatar: {\n height: '12px',\n width: '12px',\n fontSize: '11px',\n marginRight: '8px'\n },\n entityLabelContainer: {\n textDecoration: 'none',\n cursor: 'pointer',\n wordBreak: 'break-all',\n paddingRight: '8px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n showDetails: {\n marginLeft: 'auto',\n paddingRight: '5px'\n },\n attributesList: {\n paddingLeft: '46px',\n marginBottom: '10px',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0\n },\n suggestedWrapper: {\n backgroundColor: theme.suggested\n },\n commentsContainer: {\n marginLeft: 'auto',\n alignItems: 'center',\n '& + $showDetails': {\n marginLeft: '4px'\n }\n },\n additionalButtonsWrapper: {\n marginLeft: 'auto',\n display: 'flex'\n },\n labelWrapper: {\n display: 'flex',\n alignItems: 'center'\n }\n}));\n","import React, {memo, useState} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {\n Connection,\n Metadata,\n isActiveObject,\n createRelatedObjectUris,\n CollaborationObjectTypes,\n getConnectionRelationUriForLink\n} from '@reltio/mdm-sdk';\nimport {isEmpty} from 'ramda';\nimport {COMMENTS_CONTAINER_VISIBILITY_AREA, CommentsContainer, EntityTypeIcon, EntityUriLink} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport RelationTooltip from '../../RelationTooltip/RelationTooltip';\nimport {RelationAttributes} from '../RelationAttributes/RelationAttributes';\nimport {ShowDetailsButton} from '../ShowDetailsButton/ShowDetailsButton';\nimport {useRelationInfo} from '../../../hooks/useRelationInfo';\nimport {useStyles} from './styles';\nimport {SuggestedButtons} from '../../SuggestedButtons/SuggestedButtons';\n\ntype Props = {\n connection: Connection;\n acceptRelation?: (connection: Connection) => () => void;\n ignoreRelation?: (connection: Connection) => () => void;\n renderRelationArrowButton: () => React.ReactNode;\n};\n\nconst RelationItem = memo(({connection, renderRelationArrowButton, acceptRelation, ignoreRelation}: Props) => {\n const styles = useStyles();\n const isSuggested = connection.suggested;\n const {entity, relation} = connection;\n const [showDetails, setShowDetails] = useState(false);\n\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n const {entityType, entityLabel, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const isActive = isActiveObject(relation) && isActiveObject(entity);\n\n const toggleShowDetails = () => {\n setShowDetails((show) => !show);\n };\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n const relatedObjectUris =\n (entity &&\n relation &&\n createRelatedObjectUris(CollaborationObjectTypes.RELATION, {\n entityUri: currentEntityUri,\n connection\n })) ||\n [];\n return (\n <div\n className={classnames(\n styles.container,\n {[styles.rowInactive]: !isActive},\n {[styles.suggestedWrapper]: isSuggested}\n )}\n >\n <div className={classnames(styles.row, COMMENTS_CONTAINER_VISIBILITY_AREA)}>\n {renderRelationArrowButton && renderRelationArrowButton()}\n <div className={styles.labelWrapper}>\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n {relationLabel && <span className={styles.relationLabel}>{`, ${relationLabel}`}</span>}\n </EntityUriLink>\n </div>\n <div className={styles.additionalButtonsWrapper}>\n {!isEmpty(relatedObjectUris) && (\n <CommentsContainer\n className={styles.commentsContainer}\n uri={getConnectionRelationUriForLink(relation)}\n relatedObjectUris={relatedObjectUris}\n objectType={CollaborationObjectTypes.RELATION}\n allowOnlyOneComment\n />\n )}\n {isSuggested && (\n <SuggestedButtons\n size=\"small\"\n acceptRelation={acceptRelation(connection)}\n ignoreRelation={ignoreRelation(connection)}\n />\n )}\n {!isSuggested && (\n <ShowDetailsButton\n show={showDetails}\n onToggle={toggleShowDetails}\n className={styles.showDetails}\n />\n )}\n </div>\n </div>\n {showDetails && <RelationAttributes connection={connection} />}\n </div>\n );\n});\n\nRelationItem.displayName = 'RelationItem';\n\nexport default RelationItem;\n","import {pluck, mean, pipe, defaultTo} from 'ramda';\nimport {Rating} from '@reltio/mdm-sdk';\n\nexport const calcAverageRating = (ratings: Rating[]) => {\n return pipe(pluck('value'), mean, defaultTo(0))(ratings);\n};\n\nexport const getCountOfLikes = (ratings: Rating[]) => {\n return ratings.filter((rating) => rating.value === 5).length;\n};\n\nexport const getCountOfDislikes = (ratings: Rating[]) => {\n return ratings.filter((rating) => rating.value === 1).length;\n};\n\nexport const calcWidthOfLikesScale = (ratings: Rating[]) => {\n if (ratings.length === 0) {\n return '0%';\n }\n\n return (getCountOfLikes(ratings) / ratings.length) * 100 + '%';\n};\n\nexport const calcWidthOfDislikesScale = (ratings: Rating[]) => {\n if (ratings.length === 0) {\n return '0%';\n }\n\n return (getCountOfDislikes(ratings) / ratings.length) * 100 + '%';\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end'\n },\n averageRating: {\n marginBottom: '7px',\n fontSize: '16px',\n letterSpacing: '0.15px',\n lineHeight: '19px',\n color: theme.palette.text.primary\n },\n scale: {\n display: 'flex',\n marginBottom: '6px',\n width: '128px',\n height: '4px'\n },\n likesScale: {\n height: '100%',\n backgroundColor: '#8CC152'\n },\n dislikesScale: {\n height: '100%',\n backgroundColor: 'rgb(255, 112, 112)'\n },\n counts: {\n display: 'flex'\n },\n likesCount: {\n marginRight: '32px'\n },\n count: {\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n icon: {\n marginRight: '4px',\n width: '14px',\n height: '14px',\n color: 'rgba(0,0,0,0.38)'\n }\n}));\n","import React from 'react';\nimport classnames from 'classnames';\nimport {Rating} from '@reltio/mdm-sdk';\nimport {Typography as Typography} from '@material-ui/core';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport ThumbDownIcon from '@material-ui/icons/ThumbDown';\nimport {\n calcAverageRating,\n calcWidthOfDislikesScale,\n calcWidthOfLikesScale,\n getCountOfDislikes,\n getCountOfLikes\n} from '../../../helpers/ratings';\nimport {useStyles} from './styles';\n\ntype Props = {\n ratings: Rating[];\n className?: string;\n};\n\nexport const Ratings = ({ratings, className}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.wrapper, className)}>\n <Typography className={styles.averageRating}>{calcAverageRating(ratings).toFixed(1)}</Typography>\n <div className={styles.scale}>\n <div className={styles.likesScale} style={{width: calcWidthOfLikesScale(ratings)}} />\n <div className={styles.dislikesScale} style={{width: calcWidthOfDislikesScale(ratings)}} />\n </div>\n <div className={styles.counts}>\n <div className={classnames(styles.likesCount, styles.count)}>\n <ThumbUpIcon className={styles.icon} />\n {getCountOfLikes(ratings)}\n </div>\n <div className={styles.count}>\n <ThumbDownIcon className={styles.icon} />\n {getCountOfDislikes(ratings)}\n </div>\n </div>\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex'\n },\n button: {\n fontSize: '14px',\n textTransform: 'none',\n color: theme.palette.text.secondary\n },\n likeButton: {\n marginLeft: '-12px',\n marginRight: '8px'\n },\n isActive: {\n color: theme.palette.text.primary\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Rating} from '@reltio/mdm-sdk';\nimport {DropDownMenuButton} from '@reltio/components';\nimport {Button as Button} from '@material-ui/core';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport {useStyles} from './styles';\n\ntype Props = {\n ratings: Rating[];\n onAgree: () => void;\n onDisagree: (comment: string) => void;\n};\n\nexport const RatingsButtons = ({ratings, onAgree, onDisagree}: Props) => {\n const styles = useStyles();\n\n const username = useSelector(mdmModule.selectors.getUserName) as string;\n const ratingOfCurrentUser = ratings.find(({user}) => user === username);\n\n const menuItems = [\n {\n text: i18n.text('Has left the practice'),\n onClick: () => onDisagree(i18n.text('Has left the practice'))\n },\n {\n text: i18n.text('Has moved away'),\n onClick: () => onDisagree(i18n.text('Has moved away'))\n },\n {\n text: i18n.text('Has passed away'),\n onClick: () => onDisagree(i18n.text('Has passed away'))\n },\n {\n text: i18n.text('Has retired'),\n onClick: () => onDisagree(i18n.text('Has retired'))\n },\n {\n text: i18n.text('Other'),\n onClick: () => onDisagree(i18n.text('Other'))\n }\n ];\n\n return (\n <div className={styles.wrapper}>\n <Button\n onClick={onAgree}\n variant=\"text\"\n size=\"small\"\n className={classnames(styles.button, styles.likeButton, {\n [styles.isActive]: ratingOfCurrentUser?.value === 5\n })}\n >\n Agree\n </Button>\n <DropDownMenuButton\n buttonProps={{\n endIcon: <ArrowDropDownIcon />,\n variant: 'text',\n size: 'small',\n className: classnames(styles.button, {\n [styles.isActive]: ratingOfCurrentUser?.value === 1\n })\n }}\n buttonContent={ratingOfCurrentUser?.value === 1 ? ratingOfCurrentUser.comment : 'Disagree'}\n menuItems={menuItems}\n menuId=\"disagree-dropdown-menu-button\"\n />\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {suggested: string}) => ({\n wrapper: {\n padding: '6px 16px 6px'\n },\n entityTypeIcon: {\n marginRight: '16px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '14px',\n letterSpacing: 0,\n lineHeight: '16px'\n },\n entityLabelContainer: {\n wordBreak: 'break-all',\n textDecoration: 'none'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n ratings: {\n marginLeft: 'auto'\n },\n showDetailsButton: {\n marginLeft: '16px',\n marginTop: '18px'\n },\n relationAttributes: {\n paddingLeft: '60px'\n },\n suggestedWrapper: {\n padding: '6px 8px 6px 16px',\n backgroundColor: theme.suggested\n },\n commentsContainer: {\n alignSelf: 'center',\n '& + $ratings': {\n marginLeft: '16px'\n }\n },\n additionalButtonsWrapper: {\n marginLeft: 'auto',\n display: 'flex'\n }\n}));\n","import React, {useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport {isEmpty} from 'ramda';\nimport {COMMENTS_CONTAINER_VISIBILITY_AREA, CommentsContainer, EntityTypeIcon, EntityUriLink} from '@reltio/components';\nimport {\n Metadata,\n Connection,\n rateRelation,\n createRelatedObjectUris,\n CollaborationObjectTypes,\n getConnectionRelationUriForLink\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {Box as Box} from '@material-ui/core';\nimport RelationTooltip from '../../RelationTooltip/RelationTooltip';\nimport {RelationAttributes} from '../RelationAttributes/RelationAttributes';\nimport {ShowDetailsButton} from '../ShowDetailsButton/ShowDetailsButton';\nimport {Ratings} from '../Ratings/Ratings';\nimport {useRelationInfo} from '../../../hooks/useRelationInfo';\nimport {RatingsButtons} from '../RatingsButtons/RatingsButtons';\nimport {SuggestedButtons} from '../../SuggestedButtons/SuggestedButtons';\nimport {useStyles} from './styles';\n\ntype Props = {\n connection: Connection;\n loadRelations: () => void;\n acceptRelation?: (connection: Connection) => () => void;\n ignoreRelation?: (connection: Connection) => () => void;\n renderRelationArrowButton: () => React.ReactNode;\n};\n\nexport const RelationComplexItem = ({\n connection,\n loadRelations,\n renderRelationArrowButton,\n acceptRelation,\n ignoreRelation\n}: Props) => {\n const styles = useStyles();\n const isSuggested = connection.suggested;\n\n const [showDetails, setShowDetails] = useState(false);\n\n const {entity, relation} = connection;\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n const {entityLabel, entityType, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const ratings = relation?.ratings || [];\n\n const toggleShowDetails = () => {\n setShowDetails((show) => !show);\n };\n\n const handleAgree = () => {\n rateRelation(relation?.relationUri, {\n comment: '',\n value: 5\n }).then(loadRelations);\n };\n\n const handleDisagree = (comment: string) => {\n rateRelation(relation?.relationUri, {\n comment,\n value: 1\n }).then(loadRelations);\n };\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n const relatedObjectUris =\n (entity &&\n relation &&\n createRelatedObjectUris(CollaborationObjectTypes.RELATION, {\n entityUri: currentEntityUri,\n connection\n })) ||\n [];\n\n return (\n <div className={classnames(styles.wrapper, {[styles.suggestedWrapper]: isSuggested})}>\n <Box display=\"flex\" minHeight=\"44px\" className={COMMENTS_CONTAINER_VISIBILITY_AREA}>\n <Box display=\"flex\" alignItems=\"center\">\n <Box display=\"flex\" alignItems=\"center\">\n {renderRelationArrowButton && renderRelationArrowButton()}\n <EntityTypeIcon entityType={entityType} className={styles.entityTypeIcon} />\n </Box>\n <Box display=\"flex\" flexDirection=\"column\">\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n </EntityUriLink>\n {relationLabel && <span className={styles.relationLabel}>{relationLabel}</span>}\n {!isSuggested && (\n <RatingsButtons ratings={ratings} onAgree={handleAgree} onDisagree={handleDisagree} />\n )}\n </Box>\n </Box>\n <div className={styles.additionalButtonsWrapper}>\n {!isEmpty(relatedObjectUris) && (\n <CommentsContainer\n className={styles.commentsContainer}\n uri={getConnectionRelationUriForLink(relation)}\n relatedObjectUris={relatedObjectUris}\n objectType={CollaborationObjectTypes.RELATION}\n allowOnlyOneComment\n />\n )}\n {isSuggested && (\n <SuggestedButtons\n acceptRelation={acceptRelation(connection)}\n ignoreRelation={ignoreRelation(connection)}\n />\n )}\n {!isSuggested && (\n <>\n <Ratings ratings={ratings} className={styles.ratings} />\n <ShowDetailsButton\n show={showDetails}\n onToggle={toggleShowDetails}\n className={styles.showDetailsButton}\n />\n </>\n )}\n </div>\n </Box>\n {showDetails && <RelationAttributes connection={connection} className={styles.relationAttributes} />}\n </div>\n );\n};\n","import React, {useMemo, useContext, useEffect} from 'react';\nimport {Connection, getRelationshipsObjectIdsForCollaboration, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {CollaborationContext} from '@reltio/components';\nimport RelationItem from './RelationItem/RelationItem';\nimport {RelationComplexItem} from './RelationCompexItem/RelationComplexItem';\nimport {useSuggestedRelations} from '../../hooks/useSuggestedRelations';\nimport {SecondLevelWrapper} from '../SecondLevelWrapper/SecondLevelWrapper';\n\ntype Props = {\n className?: string;\n connections: Array<Connection>;\n loadRelations: () => void;\n config?: RelationsViewConfig;\n mainEnityUri?: string;\n};\n\nconst RelationsList = ({className, connections = [], loadRelations, config, mainEnityUri}: Props) => {\n const {isComplex, content} = config;\n const {ignoreRelation, acceptRelation} = useSuggestedRelations(content, loadRelations, mainEnityUri);\n\n const objectIds = useMemo(() => {\n return getRelationshipsObjectIdsForCollaboration(connections);\n }, [connections]);\n\n const {getCommentsCount} = useContext(CollaborationContext);\n\n useEffect(() => {\n getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n return (\n <div className={className}>\n {connections.map((connection) => {\n const itemKey = `${connection?.relation?.relationUri}-${connection?.relation?.direction}`;\n\n return (\n <SecondLevelWrapper config={config} connection={connection} key={itemKey}>\n {(renderRelationArrowButton) => {\n if (isComplex) {\n return (\n <RelationComplexItem\n loadRelations={loadRelations}\n connection={connection}\n acceptRelation={acceptRelation}\n ignoreRelation={ignoreRelation}\n renderRelationArrowButton={renderRelationArrowButton}\n />\n );\n }\n\n return (\n <RelationItem\n acceptRelation={acceptRelation}\n ignoreRelation={ignoreRelation}\n connection={connection}\n renderRelationArrowButton={renderRelationArrowButton}\n />\n );\n }}\n </SecondLevelWrapper>\n );\n })}\n </div>\n );\n};\n\nRelationsList.displayName = 'RelationsList';\n\nexport default RelationsList;\n","import {useDispatch} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {\n Connection,\n ignoreSuggestedRelation,\n createRelation,\n getRequestErrorMessage,\n Directions,\n RelationsContent\n} from '@reltio/mdm-sdk';\nimport {ui} from '@reltio/mdm-module';\nimport {getFirstRelationTypeObject} from '../helpers/relation';\n\nexport const useSuggestedRelations = (content: RelationsContent, loadRelations: () => void, mainEnityUri: string) => {\n const relationTypeObject = getFirstRelationTypeObject(content.inRelations, content.outRelations);\n const dispatch = useDispatch();\n const ignoreRelation = (connection: Connection) => () => {\n const {entity} = connection;\n ignoreSuggestedRelation(mainEnityUri, {\n relatedEntityUri: entity.entityUri,\n relationType: relationTypeObject.type,\n relationDirection: relationTypeObject.direction\n })\n .then(loadRelations)\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n });\n };\n\n const acceptRelation = (connection: Connection) => () => {\n const {entity, relation} = connection;\n const {startDate, endDate} = relation;\n const isInDirection = relationTypeObject.direction === Directions.IN;\n const startEntityUri = isInDirection ? entity.entityUri : mainEnityUri;\n const endEntityUri = isInDirection ? mainEnityUri : entity.entityUri;\n createRelation({\n startEntityUri,\n endEntityUri,\n relationType: relationTypeObject.type,\n attributes: null,\n startDate,\n endDate\n })\n .then(loadRelations)\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n });\n };\n\n return {\n ignoreRelation,\n acceptRelation\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n list: {\n paddingTop: '8px',\n paddingBottom: '10px',\n overflow: 'auto',\n flexGrow: 1\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {isEditableMode, Connection, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {LinearLoadIndicator} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport RelationsEditableContent from '../RelationsEditableContent/RelationsEditableContent';\nimport RelationsList from '../RelationsList/RelationsList';\nimport {useStyles} from './styles';\n\ntype Props = {\n isLoading: boolean;\n config: RelationsViewConfig;\n loadRelations: () => void;\n connections: Connection[];\n total: number;\n parentEntityUri?: string;\n};\n\nexport const RelationsContent = ({isLoading, config, loadRelations, connections, total, parentEntityUri}: Props) => {\n const styles = useStyles();\n\n const {selectors} = mdmModule;\n const entity = useSelector(selectors.getEntity);\n const mode = useSelector(selectors.getMode);\n\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n if (isLoading) {\n return <LinearLoadIndicator />;\n }\n\n if (isEditableMode(mode)) {\n return (\n <RelationsEditableContent\n connections={connections}\n className={styles.list}\n key={entity?.uri}\n config={config}\n mode={mode}\n noDataText={noDataText}\n parentEntityUri={parentEntityUri}\n />\n );\n }\n\n if (total > 0) {\n return (\n <RelationsList\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n className={styles.list}\n key={entity?.uri}\n mainEnityUri={entity.uri}\n />\n );\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n container: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0\n },\n content: {\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n flexDirection: 'column',\n minHeight: 0\n },\n pagination: {\n height: '52px',\n flexGrow: 0,\n flexShrink: 0\n }\n});\n","import React, {useContext, useEffect, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {ActivityFilter, Connection, getEntitiesMapForConnections, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {BasicTablePagination, BasicView, EntitiesMapContext, useRelationsLoader} from '@reltio/components';\nimport RelationsHeader from '../RelationsHeader/RelationsHeader';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {ImportDTContext} from '../../contexts/ImportDTContext';\nimport {buildRelationsFilter} from '../../helpers/filters';\nimport {RelationsContent} from '../RelationsContent/RelationsContent';\nimport {pick} from 'ramda';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: RelationsViewConfig;\n className?: string;\n};\n\nconst RelationsView = ({config, className}: Props) => {\n const styles = useStyles();\n\n const {\n page,\n setPage,\n rowsPerPage,\n sortOrder,\n sortOption,\n showInactive,\n searchQuery,\n changeSearchQuery\n } = useContext(RelationsViewStateContext);\n const {selectors} = mdmModule;\n const connections = useSelector((state) =>\n selectors.getConnectionsWithDraftsByViewId(state, config.id)\n ) as Connection[];\n const entity = useSelector(selectors.getEntity);\n const total = useSelector((state) => selectors.getTotalByViewId(state, config.id));\n const mode = useSelector(selectors.getMode);\n const sorting = useMemo(\n () => ({\n order: sortOrder,\n field: sortOption\n }),\n [sortOrder, sortOption]\n );\n\n useEffect(() => {\n changeSearchQuery('');\n }, [entity?.uri]); //eslint-disable-line react-hooks/exhaustive-deps\n\n const filter = useMemo(() => buildRelationsFilter(searchQuery), [searchQuery]);\n\n const {isLoading, reload: loadRelations} = useRelationsLoader({\n sorting,\n filter,\n page,\n rowsPerPage,\n config,\n entity,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY,\n mode\n });\n\n const entitiesMap = useMemo(() => getEntitiesMapForConnections(connections), [connections]);\n\n const importDTContextValue = useMemo(\n () => ({\n reloadRelations: loadRelations,\n config: pick(['content', 'importFromDT', 'maxDtssImport'], config)\n }),\n [loadRelations, config]\n );\n\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <BasicView className={className}>\n <div className={styles.container}>\n <ImportDTContext.Provider value={importDTContextValue}>\n <RelationsHeader title={config.caption} total={total} />\n </ImportDTContext.Provider>\n <div className={styles.content}>\n <RelationsContent\n isLoading={isLoading}\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n total={total}\n />\n {total > rowsPerPage && (\n <BasicTablePagination\n classes={{root: styles.pagination}}\n count={total}\n rowsPerPageOptions={[]}\n rowsPerPage={rowsPerPage}\n page={page}\n onChangePage={setPage}\n />\n )}\n </div>\n </div>\n </BasicView>\n </EntitiesMapContext.Provider>\n );\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(searchQuery)\n .map(filterValueToQueryStringWithQuotes)\n .map(\n (queryString) =>\n `containsWordStartingWith(entity.label,${queryString})` +\n ' or ' +\n `containsWordStartingWith(relation.label,${queryString})`\n )\n .orSome('');\n\n return new FilterBuilder().addClause(queryClause).build();\n};\n\nexport {buildRelationsFilter};\n","import {useCallback, useMemo, useState} from 'react';\nimport {RelationsViewConfig, SortOrder} 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 Object.entries(config.sortOptions || {}).map(([key, value]) => ({\n value: key,\n label: value\n })),\n [config.sortOptions]\n );\n\n const rowsPerPage = Number(config.max) || DEFAULT_ROWS_PER_PAGE;\n const [page, setPage] = useState(0);\n const [sortOrder, setSortOrder] = useState(config.sortOrder || DEFAULT_SORT_ORDER);\n const [sortOption, setSortOption] = useState(sortOptions[0]?.value);\n const [searchQuery, setSearchQuery] = useState('');\n const [showInactive, setShowInactive] = useState(DEFAULT_SHOW_INACTIVE);\n\n const toggleShowInactive = useCallback(() => {\n setPage(0);\n setShowInactive((showInactive) => !showInactive);\n }, []);\n\n const toggleSortOrder = useCallback(() => {\n setPage(0);\n setSortOrder((order) => {\n return order === 'asc' ? 'desc' : 'asc';\n });\n }, []);\n\n const changeSortOption = useCallback((option: string) => {\n setPage(0);\n setSortOption(option);\n }, []);\n\n const changeSearchQuery = useCallback((value: string) => {\n setPage(0);\n setSearchQuery(value);\n }, []);\n\n return {\n searchQuery,\n changeSearchQuery,\n sortOrder,\n toggleSortOrder,\n sortOption,\n changeSortOption,\n sortOptions,\n page,\n setPage,\n rowsPerPage,\n showInactive,\n toggleShowInactive\n };\n};\n\nexport default useRelationsState;\n","import React from 'react';\nimport {AttributeValue, AttributeType} 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: AttributeValue[];\n page: number;\n setPage: (page: number) => void;\n isLoading: boolean;\n visibleColumns: string[];\n onChangeColumns: (cols: string[]) => void;\n onToggleFilters: () => void;\n onSort: (payload) => void;\n onFilter: (payload) => void;\n hasPaging: boolean;\n totalVisibleValues: number;\n showTable: boolean;\n filters: {\n [key: string]: {\n filter: string;\n values: [string];\n };\n };\n sorting: {\n order: 'desc' | 'asc';\n field: string;\n };\n attributeType: AttributeType;\n allColumnsData: ColumnsDataType;\n }>(null);\n\nTableAttributeContext.displayName = 'TableAttributeContext';\n","import {basicTableViewState, createStandardAction} from '@reltio/components';\n\nconst CHANGE_SEARCH_QUERY = 'CHANGE_SEARCH_QUERY';\n\nconst actions = {\n ...basicTableViewState.actions,\n changeSearchQuery: createStandardAction(CHANGE_SEARCH_QUERY)\n};\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case CHANGE_SEARCH_QUERY:\n return {...state, searchQuery: action.payload, page: 0};\n default:\n return basicTableViewState.reducer(state, action);\n }\n};\n\nexport {reducer as default, actions};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst removedStyle = {\n textDecoration: 'line-through',\n color: 'rgba(0,0,0,.54)'\n};\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 rowCell: {\n fontSize: '13px',\n overflow: 'hidden'\n },\n 'row-cell--sorted': {\n color: 'rgba(0,0,0,0.87)'\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 headCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n fontSize: '12px'\n },\n 'row-cell--removed': {\n pointerEvents: 'none',\n '& > div': removedStyle\n }\n}));\n","import React from 'react';\n\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {withFilterAtBottom} from '@reltio/components';\nimport {useStyles} from './styles';\n\nconst HeadCellRenderer = (props) => {\n const styles = useStyles();\n return (\n <div className={styles.headCell}>\n <DefaultHeadCellRenderer {...props} />\n </div>\n );\n};\n\nexport default withFilterAtBottom(HeadCellRenderer);\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 getOvAttributeValuesByPath,\n isAttributeSearchUri,\n Metadata,\n SearchParent\n} from '@reltio/mdm-sdk';\nimport HeadCellRenderer from '../components/AttributeTable/HeadCellRenderer';\nimport {DefaultCellValueRenderer} from '@reltio/components';\n\nexport const getColumnsDataFromAttributeNode = (attrNode: AttributeNode, parents: SearchParent[]) => {\n const {uri, label, children, name} = attrNode;\n return reject(isNil, {\n id: attributeUriToSearchUri(uri, parents),\n label,\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) => pipe(path(['value']), getOvAttributeValuesByPath(attrPath))(value);\n\nconst getRowValueByColumnId = (columnId, value) => {\n const attrPath = getAttrPathFromColumnId(columnId);\n return getAttributeValues(attrPath, value);\n};\n\nexport const getBasicTableRowsData = (values, columnsData) =>\n values.map((value) =>\n pipe(\n reduce((acc, {id}) => assoc(id, getRowValueByColumnId(id, value), acc), {}),\n assoc('value', value)\n )(columnsData)\n );\n\nconst getNestedPathByColumnId = (columnId) => {\n if (isAttributeSearchUri(columnId)) {\n const attrPath = getAttrPathFromColumnId(columnId);\n return attrPath.length > 1 ? attrPath.slice(0, -1) : null;\n } else {\n return null;\n }\n};\n\nconst getColumnDataByColumnId = (columnData) => ({\n ...columnData,\n sortable: true,\n resizable: true,\n nestedPath: getNestedPathByColumnId(columnData.id),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: DefaultCellValueRenderer\n});\n\nexport const getBasicTableColumnsData = map(getColumnDataByColumnId);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n header: {\n padding: '0 4px 0 16px'\n }\n}));\n","import React from 'react';\nimport {\n FacetViewHeader,\n ColumnsSettings,\n FilterButton,\n VerticalDivider,\n ExpandableSearchInput\n} from '@reltio/components';\nimport {useStyles} from './styles';\nimport {ColumnsDataType} from '../types';\n\ntype Props = {\n title: string;\n total: number;\n columnsData: ColumnsDataType;\n selectedColumns: string[];\n onChangeColumns: (cols: string[]) => void;\n searchQuery: string;\n onChangeSearchQuery: (val: string) => void;\n filtersEnabled: boolean;\n onToggleFilters: () => void;\n};\nconst AttributeTableHeader = ({\n title,\n searchQuery,\n onChangeSearchQuery,\n filtersEnabled,\n onToggleFilters,\n columnsData,\n selectedColumns,\n onChangeColumns\n}: Props) => {\n const styles = useStyles();\n return (\n <FacetViewHeader title={title} className={styles.header}>\n <ExpandableSearchInput query={searchQuery} onChange={onChangeSearchQuery} />\n <FilterButton enabled={filtersEnabled} onClick={onToggleFilters} />\n <VerticalDivider height={24} margin={4} />\n <ColumnsSettings\n columnsData={columnsData}\n selectedColumns={selectedColumns}\n onChangeColumns={onChangeColumns}\n />\n </FacetViewHeader>\n );\n};\n\nexport default AttributeTableHeader;\n","import React from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\nimport {withTableContext} from '@reltio/components';\n\ntype Props = {\n cell: {values: string[]};\n isSorted: boolean;\n CellValueRenderer: React.ElementType;\n isRemoved: boolean;\n};\nconst RowCellRenderer = ({cell, CellValueRenderer, isRemoved, isSorted, ...otherProps}: Props) => {\n const styles = useStyles();\n return (\n <div\n className={classnames(\n {\n [styles['row-cell--sorted']]: isSorted,\n [styles['row-cell--removed']]: isRemoved\n },\n styles.rowCell\n )}\n >\n {cell.values.map((value, index) => (\n <CellValueRenderer key={index} value={value} {...otherProps} />\n ))}\n </div>\n );\n};\n\nexport default withTableContext(({deletedUris}, {rowValue: {value}}) => ({\n isRemoved: Boolean(deletedUris.find((uri) => value.uri === uri))\n}))(RowCellRenderer);\n","import React from 'react';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport i18n from 'ui-i18n';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\n\ntype Props = {\n onEdit?: () => void;\n onRemove?: () => void;\n};\n\nexport const EditButtons = ({onEdit, onRemove}: Props) => (\n <>\n {onEdit && (\n <SmallIconButtonWithTooltip tooltipTitle={i18n.text('Edit')} icon={EditIcon} size=\"L\" onClick={onEdit} />\n )}\n {onRemove && (\n <SmallIconButtonWithTooltip\n tooltipTitle={i18n.text('Remove')}\n icon={DeleteIcon}\n size=\"L\"\n onClick={onRemove}\n />\n )}\n </>\n);\n\nexport default EditButtons;\n","import React, {useCallback, useContext, useMemo, useState} from 'react';\nimport RowCellRenderer from './RowCellRenderer';\nimport {BasicTable, useConfigPermissions} from '@reltio/components';\nimport {getBasicTableColumnsData, getBasicTableRowsData} from '../../helpers/tableAttributeHelpers';\nimport {useStyles} from './styles';\nimport {\n AttributeValue,\n checkCanEditAttribute,\n checkCanDeleteAttribute,\n SearchFilter,\n isReltioCrosswalk,\n Entity,\n isEditableMode as checkIsEditableMode,\n AttributeItem,\n TableAttributeViewConfig\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: AttributeValue[];\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<AttributeValue>;\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: AttributeValue) =>\n canUpdate(config) &&\n checkCanEditAttribute({\n attributeType,\n mode,\n attributeValue,\n isReltioCrosswalk: isReltioCrosswalk(modifiedEntity.crosswalks, attributeValue)\n });\n const checkCanRemove = (attributeValue: AttributeValue) =>\n canDelete(config) &&\n checkCanDeleteAttribute({\n attributeType,\n mode,\n attributeValue,\n metadata,\n isReltioCrosswalk: isReltioCrosswalk(modifiedEntity.crosswalks, attributeValue)\n });\n\n const hideRightContent = useMemo(\n () =>\n typeof hoverRowIndex === 'number' && isEditableMode\n ? deletedUris.includes(pipe(path([hoverRowIndex]), prop('uri'))(values))\n : true,\n [hoverRowIndex, deletedUris, values, isEditableMode]\n );\n const canRemove = typeof hoverRowIndex === 'number' && checkCanRemove(path([hoverRowIndex], values));\n const canEdit = typeof hoverRowIndex === 'number' && checkCanEdit(path([hoverRowIndex], values));\n\n const handleEditAttribute = useCallback(() => {\n const attributeValue = path([hoverRowIndex], values);\n if (!canEdit) return;\n onEdit(attributeValue);\n }, [onEdit, hoverRowIndex, values, canEdit]);\n\n const handleRemoveAttribute = useCallback(() => {\n const attributeValue = path([hoverRowIndex], values);\n if (!canRemove) return;\n const attribute: AttributeItem = {\n parentUri: entityUri,\n attributeType,\n uri: attributeValue.uri,\n value: attributeValue\n };\n onDeleteAttribute(attribute);\n setHoverRowIndex(null);\n }, [hoverRowIndex, values, onDeleteAttribute, canRemove, attributeType, entityUri]);\n\n const hoveredRowRightContent =\n !hideRightContent && (canRemove || canEdit) ? (\n <EditButtons\n onEdit={canEdit ? handleEditAttribute : undefined}\n onRemove={canRemove ? handleRemoveAttribute : undefined}\n />\n ) : undefined;\n const context = useMemo(() => ({deletedUris}), [deletedUris]);\n return (\n <div className={styles.tableContainer}>\n <BasicTable\n autosizing\n maxHeight={MAX_HEIGHT}\n columnsData={tableColumnsData}\n rowsData={tableRowsData}\n sorting={sorting}\n onSort={onSort}\n filters={filters}\n onFilter={onFilter}\n hoverStateEnabled={true}\n defaultColumnWidth={250}\n defaultColumnMinWidth={200}\n headRowHeight={56}\n resizeDebounceDelay={150}\n renderRowCell={renderRowCell}\n onRowHover={setHoverRowIndex}\n hoverRowIndex={hoverRowIndex}\n hoveredRowRightContent={hoveredRowRightContent}\n context={context}\n classes={{\n hoveredRowRightContentWrapper: styles['row-cell__buttons-wrapper'],\n hoveredRowRightContentContainer: styles['row-cell__buttons-container']\n }}\n />\n </div>\n );\n};\n\nexport default AttributeTable;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n actionButtons: {\n display: 'flex',\n justifyContent: 'flex-end',\n margin: '0 8px 10px',\n\n '& > button': {\n fontSize: '14px',\n lineHeight: '16px',\n marginLeft: '8px',\n padding: '10px 8px',\n backgroundColor: 'rgba(98, 2, 238, 0)'\n }\n }\n}));\n","import {Button as Button} from '@material-ui/core';\nimport React, {useCallback, useContext} from 'react';\nimport {useStyles} from './styles';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {AttributeValue, Entity, isTempUri, getAttributeOwnError, AttributeItem} from '@reltio/mdm-sdk';\nimport {pipe} from 'ramda';\nimport {EditableAttribute, ViewIdContext} from '@reltio/components';\nimport i18n from 'ui-i18n';\n\ntype Props = {\n hasChanges: boolean;\n onChangeAttribute: (attribute: AttributeItem) => void;\n onDeleteAttribute: (attribute: AttributeItem) => void;\n onCancel: (attributeValue: AttributeValue) => void;\n onApply: (attributeValue: AttributeValue) => void;\n attributeValue: AttributeValue;\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 entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const {attributeType} = useContext(TableAttributeContext);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n const mode = useSelector(mdmModule.selectors.getMode);\n\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\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 showEmptyEditors = isTempUri(entityUri);\n\n const errors = useSelector((state) =>\n mdmModule.selectors.getActiveErrorsForAttributesPager(state, entityUri, attributeType)\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\n onClick={() => {\n onCancel(attributeValue);\n }}\n >\n {i18n.text('Cancel')}\n </Button>\n <Button\n color=\"primary\"\n disabled={!hasChanges}\n onClick={() => {\n onApply(attributeValue);\n }}\n >\n {i18n.text('Apply')}\n </Button>\n </div>\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n padding: '4px 16px 9px',\n flex: 1,\n overflow: 'auto'\n },\n noData: {\n fontSize: '13px',\n paddingLeft: '20px',\n color: 'rgba(0,0,0,0.54)'\n },\n\n tableContainer: {\n height: '477px',\n display: 'flex',\n fontFamily: 'Roboto',\n color: 'rgba(0,0,0,0.54)'\n },\n\n header: {\n padding: '0 4px 0 16px'\n },\n\n addButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n editor: {\n padding: '4px 16px'\n }\n}));\n","import {useCallback, useContext, useState, useMemo, useEffect} from 'react';\nimport {\n AttributeValue,\n createNewAttribute,\n Entity,\n getAttributeSource,\n isEditableMode as checkIsEditableMode,\n NestedAttributeValue,\n AttributeItem\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<AttributeValue[]>([]);\n const mode = useSelector(mdmModule.selectors.getMode);\n\n useEffect(() => {\n setOriginalValues([]);\n setNewAttributeUri(null);\n }, [mode]);\n\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const {attributeType, values} = useContext(TableAttributeContext);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const onChangeAttribute = useCallback(\n (params: AttributeItem) => {\n pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId});\n },\n [viewId, dispatch]\n );\n const onDeleteAttribute = useCallback(\n (params: AttributeItem) => pipe(profile.actions.removeAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const onAdd = useCallback(() => {\n const newAttribute = createNewAttribute({\n parentUri: entityUri,\n attributeType\n });\n setNewAttributeUri(newAttribute.uri);\n onChangeAttribute({\n ...newAttribute,\n value: createDefaultValues({\n attributeTypes: attributeType.attributes,\n parentUri: newAttribute.uri,\n mode,\n metadata\n }),\n attributeType\n });\n }, [entityUri, attributeType]);\n\n const onStartEditing = useCallback(\n (attributeValue: AttributeValue) => {\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: AttributeValue) => {\n const editingValueOriginal = originalValues.find(propEq('uri', attributeValue.uri));\n if (editingValueOriginal) {\n const attributeItem = {\n ...attributeValue,\n value: editingValueOriginal,\n attributeType,\n uri: attributeValue.uri\n };\n setOriginalValues((prev) => without([editingValueOriginal], prev));\n onChangeAttribute(attributeItem);\n } else {\n const attributeItem = {\n value: attributeValue,\n attributeType,\n uri: attributeValue.uri\n };\n setNewAttributeUri(null);\n onDeleteAttribute(attributeItem);\n }\n },\n [onDeleteAttribute, onChangeAttribute, setOriginalValues, originalValues]\n );\n\n const onApply = useCallback(\n (attributeValue: AttributeValue) => {\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 [setOriginalValues, setNewAttributeUri]\n );\n\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n const isEditableMode = checkIsEditableMode(mode);\n const attributeSource = getAttributeSource(attributeType);\n\n const modifiedEntityValues: NestedAttributeValue[] = pathOr(\n emptyArray,\n [attributeSource, attributeType?.name],\n modifiedEntity\n );\n\n const modifiedValues = useMemo(() => {\n const newValues = modifiedEntityValues.filter(\n pipe(prop('uri'), both(isTempUri, pipe(equals(newAttributeUri), not)))\n );\n\n const oldValues = map(\n (originalValue) => modifiedEntityValues.find(propEq('uri', originalValue.uri)) || originalValue\n )(values);\n return [...newValues, ...oldValues].map((value) => originalValues.find(propEq('uri', value.uri)) ?? value);\n }, [modifiedEntityValues, originalValues, newAttributeUri, values]);\n\n const deletedUris = useMemo(\n () =>\n isEditableMode\n ? pipe(\n map(prop('uri')),\n filter((uri) => !modifiedEntityValues.find(propEq('uri', uri)))\n )(values)\n : [],\n [modifiedEntityValues, values]\n );\n\n const editingValues = modifiedEntityValues.filter(\n ({uri}) => uri === newAttributeUri || originalValues.find(propEq('uri', uri))\n );\n\n const checkHasChanges = (value) => originalValues.find(propEq('uri', value.uri)) !== value;\n\n return {\n checkHasChanges,\n onChangeAttribute,\n onDeleteAttribute,\n onAdd,\n onCancel,\n onApply,\n onStartEditing,\n modifiedValues,\n editingValues,\n deletedUris\n };\n};\n","import React, {useContext, useMemo} from 'react';\nimport classnames from 'classnames';\nimport {\n BasicView,\n BasicTablePagination,\n LinearLoadIndicator,\n FacetViewHeader,\n useConfigPermissions\n} from '@reltio/components';\nimport {propEq} from 'ramda';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport AttributeTableHeader from '../AttributeTableHeader/AttributeTableHeader';\nimport AttributeTable from '../AttributeTable/AttributeTable';\nimport {Typography as Typography} from '@material-ui/core';\nimport i18n from 'ui-i18n';\nimport {AttributeEditing} from '../AttributeEditing/AttributeEditing';\n\nimport {useStyles} from './styles';\nimport {\n checkCanCreateAttribute,\n isEditableMode as checkIsEditableMode,\n TableAttributeViewConfig\n} from '@reltio/mdm-sdk';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {useEditableAttribute} from './hooks/useEditableAttribute';\n\ntype Props = {\n config: TableAttributeViewConfig;\n className?: string;\n};\n\nexport const TableAttributeView = ({config, className}: Props) => {\n const {caption, max} = config;\n const styles = useStyles();\n\n const {\n values,\n page,\n setPage,\n isLoading,\n searchQuery,\n setSearchQuery,\n visibleColumns,\n onFilter,\n onSort,\n onToggleFilters,\n onChangeColumns,\n filters,\n sorting,\n totalVisibleValues,\n hasPaging,\n attributeType,\n showTable,\n allColumnsData\n } = useContext(TableAttributeContext);\n\n const {\n checkHasChanges,\n onChangeAttribute,\n onDeleteAttribute,\n onAdd,\n onCancel,\n onApply,\n onStartEditing,\n modifiedValues,\n editingValues,\n deletedUris\n } = useEditableAttribute();\n\n const mode = useSelector(mdmModule.selectors.getMode);\n const isEditableMode = checkIsEditableMode(mode);\n\n const preparedValues = isEditableMode ? modifiedValues : values;\n\n const {canCreate: hasConfigToCreate} = useConfigPermissions();\n\n const canCreate =\n hasConfigToCreate(config) &&\n attributeType &&\n checkCanCreateAttribute({attributeType, mode}) &&\n !editingValues.length;\n\n const visibleColumnsData = useMemo(\n () => visibleColumns.map((id) => allColumnsData.find(propEq('id', id))),\n [visibleColumns, allColumnsData]\n );\n\n return (\n <BasicView className={classnames(styles.root, className)}>\n {showTable ? (\n <>\n <AttributeTableHeader\n title={caption}\n total={totalVisibleValues}\n columnsData={allColumnsData}\n selectedColumns={visibleColumns}\n onChangeColumns={onChangeColumns}\n searchQuery={searchQuery}\n onChangeSearchQuery={setSearchQuery}\n filtersEnabled={!!filters}\n onToggleFilters={onToggleFilters}\n />\n <div style={{position: 'relative'}}>\n {isEditableMode && (\n <div className={styles.editor}>\n {canCreate && (\n <Button color=\"primary\" onClick={onAdd} className={styles.addButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {editingValues.map((value) => (\n <AttributeEditing\n key={value.uri}\n attributeValue={value}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onDeleteAttribute}\n onCancel={onCancel}\n onApply={onApply}\n hasChanges={checkHasChanges(value)}\n />\n ))}\n </div>\n )}\n {visibleColumnsData.length > 0 && (\n <AttributeTable\n columnsData={visibleColumnsData}\n config={config}\n values={preparedValues}\n filters={filters}\n onFilter={onFilter}\n sorting={sorting}\n onSort={onSort}\n onEdit={onStartEditing}\n onDeleteAttribute={onDeleteAttribute}\n deletedUris={deletedUris}\n />\n )}\n {hasPaging && (\n <BasicTablePagination\n count={totalVisibleValues}\n rowsPerPageOptions={[]}\n rowsPerPage={max}\n page={page}\n onChangePage={setPage}\n />\n )}\n {isLoading && <LinearLoadIndicator />}\n </div>\n </>\n ) : (\n <>\n <FacetViewHeader title={caption} className={styles.header} />\n <Typography className={styles.noData}>{i18n.text('No data')}</Typography>\n </>\n )}\n </BasicView>\n );\n};\n","import {useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {pick, prop} from 'ramda';\nimport {Entity, getPathsTree, isTempUri, updateTreesWithNewEntity} from '@reltio/mdm-sdk';\nimport {useDidUpdateEffect, useSafePromise} from '@reltio/components';\nimport {Response, Node} from '../types';\n\nlet nodeCounter = 0;\nexport const generateId = () => nodeCounter++;\n\nconst processResponse = (response: Response) => {\n const fakeRoot = {\n children: [] as Node[],\n nodeId: generateId()\n };\n if (response.parentPaths) {\n for (let i = 0; i < response.parentPaths.length; i++) {\n const path = response.parentPaths[i];\n let nextRoot = fakeRoot;\n for (let j = path.length - 1; j >= 0; j--) {\n const nextParent = path[j];\n const entity = response.entities[nextParent.entityUri];\n const isRoot = j === path.length - 1;\n const node: Node = {\n entity,\n children: [],\n nodeId: generateId(),\n expanded: true,\n rootIndex: isRoot ? i + 1 : undefined\n };\n if (isRoot) {\n node.root = isRoot;\n }\n nextRoot.children.push(node);\n nextRoot = node;\n }\n }\n }\n return fakeRoot.children;\n};\nexport const useLoadPaths = (entityUri: string, graphUri: string) => {\n const safePromise = useSafePromise();\n const [treeData, setTreeData] = useState<Node[]>([]);\n const 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 safePromise(getPathsTree({uri: entityUri, graphUri}))\n .then(processResponse)\n .then(setTreeData)\n .catch((e) => {\n console.warn(e);\n });\n }\n return () => {\n setTreeData([]);\n };\n }, [entityUri, graphUri, safePromise]);\n return {treeData, setTreeData};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n fontSize: '13px',\n display: 'flex',\n paddingTop: '6px',\n position: 'relative'\n },\n title: {\n flexGrow: 1,\n minHeight: '15px',\n color: theme.palette.primary.main,\n lineHeight: '15px'\n },\n link: {\n cursor: 'pointer',\n color: theme.palette.primary.main,\n lineHeight: '15px'\n },\n selected: {\n fontWeight: 'bold'\n },\n wrapper: {\n width: '100%'\n },\n avatar: {\n height: '16px',\n width: '16px',\n marginRight: '8px',\n marginLeft: '8px'\n },\n header: {\n padding: '0 4px 0 16px'\n },\n treeContainer: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n minHeight: '372px',\n maxHeight: '507px',\n overflow: 'auto'\n },\n tree: {\n flexGrow: 1,\n height: 0\n },\n buttonsContainer: {\n flexShrink: 0,\n marginLeft: 'auto',\n '& > * + *': {\n marginLeft: '-4px'\n }\n },\n button: {\n padding: '8px'\n }\n}));\n","import React from 'react';\nimport {HierarchyPathsViewConfig} from '@reltio/mdm-sdk';\n\nexport const ConfigContext = React.createContext<HierarchyPathsViewConfig>(null);\n","import React, {memo, useCallback, useContext} from 'react';\nimport classnames from 'classnames';\nimport {Avatar as Avatar} from '@material-ui/core';\nimport {useStyles} from './styles';\nimport DEFAULT_ICON from './defaultTypeIcon.png';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdm, {ui} from '@reltio/mdm-module';\nimport {ConfigContext} from './ConfigContext';\nimport {getAbsoluteImageUrl, getEntityType, getPropWithInheritance, getEntityLink} from '@reltio/mdm-sdk';\nimport {Link} from '@reltio/components';\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 styles = useStyles();\n const dispatch = useDispatch();\n const uri = node.entity.uri;\n const absoluteImagePath = useSelector(mdm.selectors.getAbsoluteImagePath);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const config = useContext(ConfigContext);\n const uiPath = useSelector(mdm.selectors.getUIPath);\n const {uri: currentEntityUri} = useSelector(mdm.selectors.getEntity);\n const entityLink = getEntityLink({uiPath, uri});\n const isSelected = uri === currentEntityUri;\n const onTitleClick = useCallback(() => {\n dispatch(ui.actions.openEntity({uri, viewId: config.id}));\n }, [dispatch, config, uri]);\n const {\n entity: {label: title},\n nodeId\n } = node;\n const entityType = getEntityType(metadata, node.entity.type) || {};\n const entityTypeGraphIcon = getPropWithInheritance(metadata, entityType, 'typeGraphIcon');\n const icon = entityTypeGraphIcon && getAbsoluteImageUrl(absoluteImagePath, entityTypeGraphIcon);\n return (\n <div className={styles.wrapper} data-node-id={nodeId}>\n <div className={styles.container}>\n <Avatar className={classnames(styles.avatar)} src={icon || DEFAULT_ICON} onError={onImageLoadFail} />\n <span className={classnames(styles.link, {[styles.selected]: isSelected})}>\n <Link to={entityLink} onClick={onTitleClick}>\n {title}\n </Link>\n </span>\n </div>\n </div>\n );\n};\n\nexport default memo(Node);\n","export const getNodeKey = ({node}) => node.nodeId;\n","import {makeStyles} from '@material-ui/core/styles';\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 },\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: '50%',\n top: 0,\n height: '50%',\n position: 'absolute',\n backgroundColor: 'rgba(0,122,193,0.3)'\n },\n horizontalLineRight: {\n height: '1px',\n top: '14px',\n left: '50%',\n width: '24%',\n position: 'absolute',\n backgroundColor: 'rgba(0,122,193,0.3)'\n },\n node: {\n minWidth: '100%',\n position: 'relative',\n textAlign: 'left',\n padding: '0 24px 0 18px',\n boxSizing: 'border-box',\n whiteSpace: 'normal',\n '&:hover': {\n backgroundColor: 'rgba(0,0,0,0.06)'\n }\n },\n nodeContent: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n paddingLeft: '18px',\n boxSizing: 'border-box'\n },\n row: {\n display: 'flex'\n },\n rowContents: {\n position: 'relative',\n borderLeft: 'none',\n paddingLeft: '4px',\n flex: '1 1 auto',\n width: 0,\n display: 'flex',\n verticalAlign: 'middle',\n boxSizing: 'border-box'\n },\n buttonWrapper: {\n display: 'flex',\n paddingTop: '13px',\n width: '12px',\n cursor: 'pointer'\n },\n collapsedButton: {\n transform: 'rotate(-90deg)'\n },\n expandedButton: {\n transform: 'rotate(0deg)'\n },\n button: {\n transition: 'transform .15s ease',\n width: 0,\n height: 0,\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n borderTop: '4px solid rgba(0, 0, 0, 0.54)'\n },\n rowTitle: {\n flex: '1 1 auto',\n width: 0,\n paddingRight: '11px'\n }\n}));\n","import React from 'react';\nimport {useStyles} from './styles';\nimport classnames from 'classnames';\nimport {omit} from 'ramda';\nimport {Node} from '../types';\n\ntype Props = {\n treeIndex: number;\n scaffoldBlockPxWidth: number;\n node: Node;\n path: Array<string | number>;\n style?: Record<string, unknown>;\n title: React.ReactElement;\n toggleChildrenVisibility: (props) => void;\n};\n\nconst NodeRendererDefault = (props: Props) => {\n const {scaffoldBlockPxWidth, toggleChildrenVisibility, node, title, path, treeIndex, style, ...otherProps} = omit(\n [\n 'connectDragPreview',\n 'connectDragSource',\n 'isDragging',\n 'canDrop',\n 'canDrag',\n 'draggedNode',\n 'isSearchMatch',\n 'isSearchFocus',\n 'buttons',\n 'didDrop',\n 'children',\n 'treeId',\n 'isOver',\n 'parentNode',\n 'rowDirection'\n ],\n props\n );\n const nodeTitle = title;\n\n const showToggleChildrenButton =\n toggleChildrenVisibility && !node.root && node.children && node.children.length > 0;\n\n const onToggle = () => {\n toggleChildrenVisibility({\n node,\n path,\n treeIndex\n });\n };\n const styles = useStyles();\n return (\n <div style={{height: '100%'}} {...otherProps} key={node.nodeId}>\n {showToggleChildrenButton && node.expanded && (\n <div style={{width: scaffoldBlockPxWidth - 2}} className={styles.lineChildren} />\n )}\n <div className={styles.row} style={style}>\n <div className={styles.rowContents}>\n {showToggleChildrenButton && (\n <div className={styles.buttonWrapper} onClick={onToggle}>\n <div\n aria-label={node.expanded ? 'Collapse' : 'Expand'}\n className={classnames(\n styles.button,\n node.expanded ? styles.expandedButton : styles.collapsedButton\n )}\n />\n </div>\n )}\n <div className={styles.rowTitle}>\n {typeof nodeTitle === 'function'\n ? nodeTitle({\n node,\n path,\n treeIndex\n })\n : nodeTitle}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default NodeRendererDefault;\n","import treeNodeRenderer from './tree-node-data-renderer';\nimport nodeContentRenderer from './node-content-renderer';\n\nconst scaffoldBlockPxWidth = 16;\nconst rowHeight = 28;\nconst slideRegionSize = 50;\n\nexport const theme = {nodeContentRenderer, treeNodeRenderer, scaffoldBlockPxWidth, rowHeight, slideRegionSize};\n","import React from 'react';\nimport {useStyles} from './styles';\nimport {omit} from 'ramda';\nimport {Node} from '../types';\n\nconst MIN_NODE_CONTENT_WIDTH = 250;\n\ntype Props = {\n scaffoldBlockPxWidth: number;\n lowerSiblingCounts: number[];\n\n node: Node;\n children: React.ReactElement;\n style?: Record<string, unknown>;\n};\n\nconst TreeNode = (props: Props) => {\n const {children, scaffoldBlockPxWidth, lowerSiblingCounts, node, ...otherProps} = omit(\n [\n 'listIndex',\n 'swapFrom',\n 'swapLength',\n 'swapDepth',\n 'draggedNode',\n 'getPrevRow',\n 'connectDropTarget',\n 'isOver',\n 'canDrop',\n 'treeIndex',\n 'treeId',\n 'path',\n 'rowDirection'\n ],\n props\n );\n const styles = useStyles();\n // Construct the scaffold representing the structure of the tree\n const scaffoldBlockCount = lowerSiblingCounts.length;\n const scaffold = [];\n lowerSiblingCounts.forEach((lowerSiblingCount, i) => {\n scaffold.push(\n <div key={`pre_${1 + i}`} style={{width: scaffoldBlockPxWidth}} className={styles.lineBlock}>\n {node.root && <div className={styles.rootIndex}>{node.rootIndex}.</div>}\n {i === scaffoldBlockCount - 1 && i !== 0 && (\n <>\n <div className={styles.verticalLine} />\n <div className={styles.horizontalLineRight} />\n </>\n )}\n </div>\n );\n });\n\n const shift = node.root ? scaffoldBlockPxWidth - 4 : 0; //4px - shifting for rootIndex\n const scaffoldWidth = scaffoldBlockPxWidth * scaffoldBlockCount - shift;\n const style = {left: scaffoldWidth, width: `calc(100% - ${scaffoldWidth}px`};\n const width = `${scaffoldWidth + MIN_NODE_CONTENT_WIDTH}px`;\n const nodeStyle = {...otherProps.style, width};\n return (\n <div {...otherProps} className={styles.node} style={nodeStyle}>\n {scaffold}\n\n <div className={styles.nodeContent} style={style}>\n {children}\n </div>\n </div>\n );\n};\n\nexport default TreeNode;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\",\n fillOpacity: \".54\"\n}, React.createElement(\"path\", {\n d: \"M14.5 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm4 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm-17 1a1.5 1.5 0 110-3 1.5 1.5 0 010 3zM4 4a2 2 0 110-4 2 2 0 010 4zm1 16a2 2 0 110-4 2 2 0 010 4zm4.5-6a4.5 4.5 0 110-9 4.5 4.5 0 010 9zm0-2a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm6 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3z\",\n fill: \"#000\"\n}))));","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {FacetViewHeader, SmallIconButtonWithTooltip} from '@reltio/components';\nimport ShowGraphIcon from './icons/ShowGraph.svg';\nimport {useStyles} from './styles';\n\ntype Props = {\n title?: string;\n onGraphOpen: () => void;\n};\n\nconst HierarchyPathsHeader = ({title, onGraphOpen}: Props) => {\n const styles = useStyles();\n return (\n <FacetViewHeader title={title} className={styles.header}>\n <div className={styles.buttonsContainer}>\n <SmallIconButtonWithTooltip\n className={styles.button}\n tooltipTitle={i18n.text('Show Graph')}\n icon={ShowGraphIcon}\n onClick={onGraphOpen}\n size=\"L\"\n />\n </div>\n </FacetViewHeader>\n );\n};\n\nexport default HierarchyPathsHeader;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n position: 'relative'\n },\n bodyWrapper: {\n paddingTop: '21px'\n }\n}));\n","import React, {useRef, useEffect, useState} from 'react';\nimport {useAPI} from '@reltio/components';\nimport {CustomActionViewConfig} from '@reltio/mdm-sdk';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {Dialog as Dialog} from '@material-ui/core';\nimport {isNil, reject} from 'ramda';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: CustomActionViewConfig;\n className?: string;\n};\n\nexport const CustomView = ({config, className}: Props) => {\n const basicViewRef = useRef<HTMLDivElement>();\n const dialogRef = useRef<HTMLDivElement>();\n const [showModal, setShowModal] = useState<boolean>(false);\n const {height, width, tooltip: defaultTooltip} = config;\n const {html, visible, tooltip: updatedTooltip, customStyles, popup} = useAPI(config);\n const styles = useStyles();\n const tooltip = updatedTooltip || defaultTooltip;\n useEffect(() => {\n if (basicViewRef.current && html) {\n basicViewRef.current.innerHTML = '';\n Array.from(html.childNodes).forEach((child) => {\n basicViewRef.current.appendChild(child);\n });\n }\n }, [html]);\n useEffect(() => {\n setShowModal(!!popup);\n }, [popup]);\n\n useEffect(() => {\n if (showModal && dialogRef.current) {\n dialogRef.current.innerHTML = '';\n if (popup) {\n Array.from(popup.childNodes).forEach((child) => {\n dialogRef.current.appendChild(child);\n });\n }\n }\n }, [showModal, popup]);\n\n const style: {width?: number; height?: number} = reject(isNil, {width, height});\n return visible ? (\n <div className={styles.bodyWrapper}>\n <Dialog ref={dialogRef} open={!!popup} />\n <Tooltip title={tooltip || ''}>\n <div\n ref={basicViewRef}\n style={{...style, ...customStyles}}\n className={classnames(styles.root, className)}\n />\n </Tooltip>\n </div>\n ) : null;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n dragHandleContainer: {\n position: 'relative',\n width: '100%',\n height: 'inherit'\n },\n dragHandleVisibilityArea: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '24px',\n zIndex: 11,\n '&:hover $dragHandle': {\n visibility: 'visible'\n },\n '.react-grid-item.static &:hover $dragHandle': {\n visibility: 'hidden'\n }\n },\n dragHandle: {\n position: 'absolute',\n width: '100%',\n display: 'flex',\n justifyContent: 'center',\n top: '-3px',\n zIndex: 11,\n cursor: 'move',\n visibility: 'hidden'\n },\n dragIcon: {\n transform: 'translateX(-50%) rotate(90deg)',\n color: 'rgba(0, 0, 0, 0.3)'\n }\n});\n","import React, {ComponentType} from 'react';\nimport classnames from 'classnames';\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\n\nimport {useStyles} from './styles';\n\nconst withDragHandle = <P extends Record<string, unknown>>(Component: ComponentType<P>) => {\n const WithDragHandle = (props: P) => {\n const styles = useStyles();\n return (\n <div className={styles.dragHandleContainer}>\n <div className={styles.dragHandleVisibilityArea}>\n <div className={classnames('viewDraggableHandle', styles.dragHandle)}>\n <DragIndicatorIcon className={styles.dragIcon} />\n </div>\n </div>\n <Component {...props} />\n </div>\n );\n };\n\n WithDragHandle.displayName = 'WithDragHandle';\n return WithDragHandle;\n};\n\nexport default withDragHandle;\n","import React, {ComponentType} from 'react';\nimport i18n from 'ui-i18n';\nimport {EMPTY_STATE_ICONS, EMPTY_STATE_VARIANTS, EmptyState, ErrorBoundary} from '@reltio/components';\n\nconst withErrorBoundary = <P extends Record<string, unknown>>(Component: ComponentType<P>) => {\n const WithErrorBoundary = (props: P) => {\n return (\n <ErrorBoundary\n error={\n <EmptyState\n LogoRenderer={EMPTY_STATE_ICONS.ERROR}\n text=\"\"\n secondaryText={i18n.text('Something went wrong')}\n variant={EMPTY_STATE_VARIANTS.small}\n />\n }\n >\n <Component {...props} />\n </ErrorBoundary>\n );\n };\n\n WithErrorBoundary.displayName = 'WithErrorBoundary';\n return WithErrorBoundary;\n};\n\nexport default withErrorBoundary;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n stubView: {\n padding: '20px'\n },\n fullHeight: {\n height: '100%'\n },\n component: {\n boxSizing: 'border-box',\n overflow: 'auto',\n boxShadow: 'none',\n borderRadius: 'unset'\n }\n});\n","import {useEffect, useState} from 'react';\nimport {both, gt, lt, path, pipe} from 'ramda';\nimport {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, metadata, mapKey) => {\n const [markers, setMarkers] = useState([]);\n const [loading, setLoading] = useState(true);\n const safePromise = useSafePromise();\n useEffect(() => {\n setLoading(true);\n safePromise(resolve(metadata, [entity], mapKey))\n .then((markers) => {\n setMarkers(markers.filter(filterWrongLat));\n })\n .catch(() => {\n setMarkers([]);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [entity, metadata, mapKey, safePromise]);\n\n return {markers, loading};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles(() => ({\n root: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column'\n },\n fullHeight: {\n height: '100%'\n },\n fullscreenBtn: {\n position: 'absolute',\n right: '5px',\n top: '5px',\n zIndex: 100\n }\n}));\n\nexport default useStyles;\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n caption: {\n color: theme.palette.text.secondary,\n fontSize: '13px'\n }\n}));\n\nexport default useStyles;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport useStyles from './styles';\n\ntype ImageLineCaptionProps = {\n totalImages: number;\n};\n\nexport const ImageLineCaption = ({totalImages}: ImageLineCaptionProps) => {\n const styles = useStyles();\n const photoWord = totalImages > 1 ? i18n.text('photos') : i18n.text('photo');\n return (\n <Typography variant=\"caption\" className={styles.caption}>\n {`${totalImages} ${photoWord}`}\n </Typography>\n );\n};\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pipe, pathOr} from 'ramda';\nimport {EditableImageAttributesLine} from '@reltio/components';\nimport {AttributeType, Entity, Paging, AttributeItem, ImageAttributeViewConfig} from '@reltio/mdm-sdk';\nimport mdmModule, {profile, RequestNextPageOfAttributeValuesPayload} from '@reltio/mdm-module';\nimport {IMAGE_SIZE} from '../ImageAttributeView';\nimport {ImageLineCaption} from '../ImageLineCaption/ImageLineCaption';\n\ntype ImageAttributeViewEditableContentProps = {\n config: ImageAttributeViewConfig;\n attributeType: AttributeType;\n paging?: Paging;\n requestNextPageOfAttributeValues?: (payload: RequestNextPageOfAttributeValuesPayload) => void;\n};\n\nexport const ImageAttributeViewEditableContent = ({\n config,\n attributeType,\n paging,\n requestNextPageOfAttributeValues\n}: ImageAttributeViewEditableContentProps) => {\n const dispatch = useDispatch();\n const entity = useSelector(mdmModule.selectors.getEntity);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entity.uri) || ({} as Entity)\n );\n const modifiedEntityValues = pathOr([], ['attributes', attributeType.name], modifiedEntity);\n const viewId = config.id;\n\n const onChangeAttribute = (params: AttributeItem) =>\n pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId});\n\n const onDeleteAttribute = (params: AttributeItem) =>\n pipe(profile.actions.removeAttribute, dispatch)({...params, viewId});\n\n return (\n <>\n <EditableImageAttributesLine\n attributeValues={modifiedEntityValues}\n attributeType={attributeType}\n onDeleteAttribute={onDeleteAttribute}\n parentUri={modifiedEntity.uri}\n onChangeAttribute={onChangeAttribute}\n imageSize={IMAGE_SIZE}\n paging={paging}\n requestNextPageOfAttributeValues={requestNextPageOfAttributeValues}\n />\n <ImageLineCaption totalImages={modifiedEntityValues.length} />\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n padding: '8px 16px'\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary\n }\n}));\n\nexport default useStyles;\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pathOr, path} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport {BasicView, FacetViewHeader, ImageAttributesLine} from '@reltio/components';\nimport {findAttributeTypeByUri, isEditableMode, ImageAttributeViewConfig} from '@reltio/mdm-sdk';\nimport mdmModule, {profile, RequestNextPageOfAttributeValuesPayload} from '@reltio/mdm-module';\nimport {ImageAttributeViewEditableContent} from './ImageAttributeViewEditableContent/ImageAttributeViewEditableContent';\nimport {ImageLineCaption} from './ImageLineCaption/ImageLineCaption';\nimport useStyles from './styles';\n\ntype ImageAttributeViewProps = {\n config: ImageAttributeViewConfig;\n className?: string;\n};\n\nexport const IMAGE_SIZE = {\n imageMargin: 4,\n imageWidth: 162,\n imageHeight: 162\n};\n\nexport const ImageAttributeView = ({config, className}: ImageAttributeViewProps) => {\n const {attributeUri} = config;\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const mode = useSelector(mdmModule.selectors.getMode);\n const entity = useSelector(mdmModule.selectors.getEntityWithDiff);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n\n const attributeType = findAttributeTypeByUri(metadata, attributeUri);\n const entityValues = pathOr([], ['attributes', attributeType?.name], entity);\n const paging = path(['attributes', 'paging', attributeUri], entity);\n const totalValues = entityValues.length;\n\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n const requestNextPageOfAttributeValues = useCallback(\n (payload: RequestNextPageOfAttributeValuesPayload) =>\n dispatch(profile.actions.requestNextPageOfAttributeValues(payload)),\n [dispatch]\n );\n\n const renderContent = () => {\n if (attributeType) {\n if (isEditableMode(mode)) {\n const props = {\n attributeType,\n config,\n paging,\n requestNextPageOfAttributeValues\n };\n return <ImageAttributeViewEditableContent {...props} />;\n }\n if (totalValues > 0) {\n const props = {\n attributeValues: entityValues,\n attributeType,\n imageSize: IMAGE_SIZE,\n paging,\n parentUri: entity.uri,\n requestNextPageOfAttributeValues\n };\n return (\n <>\n <ImageAttributesLine {...props} />\n <ImageLineCaption totalImages={totalValues} />\n </>\n );\n }\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n };\n return (\n <BasicView className={className}>\n <FacetViewHeader title={config.caption} />\n <div className={styles.container}>{renderContent()}</div>\n </BasicView>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\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 {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 React, {useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {isEmpty, map} from 'ramda';\nimport {Link as Link} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {\n BasicView,\n CollaborationContext,\n EntitiesMapContext,\n FacetViewHeader,\n LinearLoadIndicator,\n useMatchesLoader,\n ViewIdContext\n} from '@reltio/components';\nimport mdmModule, {ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {\n getEntityUriForLink,\n getEntityUriFromMatchObject,\n getPotentialMatchesObjectIdsForCollaboration,\n Order,\n ProfilePotentialMatchesViewConfig\n} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\nimport {MatchCard} from './MatchCard';\n\ntype Props = {\n config: ProfilePotentialMatchesViewConfig;\n className?: string;\n};\n\nexport const DEFAULT_MATCHES_LIMIT = 3;\nexport const DEFAULT_OPTIONS = {\n showTransitiveMatches: true,\n showInactiveEntities: false\n};\nexport const DEFAULT_SORTING = {order: Order.asc, field: 'score'};\nenum ComponentStates {\n Loading,\n NoData,\n Loaded\n}\nexport const ProfilePotentialMatchesView = ({config, className}: Props) => {\n const styles = useStyles();\n const entity = useSelector(mdmModule.selectors.getEntity);\n const entityUri = getEntityUriForLink(entity);\n\n const [isLoading, setIsLoading] = useState(false);\n const turnOnDisableSpinner = useCallback(() => {\n setIsLoading(true);\n }, []);\n const turnOffDisableSpinner = useCallback(() => {\n setIsLoading(false);\n }, []);\n\n const {matches, entitiesMap, loadMatches, total} = useMatchesLoader({\n enabled: !!entityUri,\n entity,\n options: DEFAULT_OPTIONS,\n filter: '',\n page: 0,\n sorting: DEFAULT_SORTING,\n rowsPerPage: DEFAULT_MATCHES_LIMIT,\n onStartLoading: turnOnDisableSpinner,\n onFinishLoading: turnOffDisableSpinner\n });\n const onFinishMatchAction = useCallback(() => {\n loadMatches();\n }, [loadMatches]);\n\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const openPotentialMatchPerspective = useCallback(() => {\n dispatch(mdmModuleUi.actions.openPerspective({perspectiveId: 'potentialMatches', viewId}));\n }, [dispatch, viewId]);\n\n const objectIds = useMemo(\n () => getPotentialMatchesObjectIdsForCollaboration(entityUri, map(getEntityUriFromMatchObject, matches)),\n [entityUri, matches]\n );\n\n const {getCommentsCount} = useContext(CollaborationContext);\n useEffect(() => {\n getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n const showSeeAll = total > DEFAULT_MATCHES_LIMIT && !isEmpty(matches);\n const getComponentState = () => {\n if (isLoading) {\n return ComponentStates.Loading;\n }\n if (isEmpty(matches)) {\n return ComponentStates.NoData;\n }\n return ComponentStates.Loaded;\n };\n const state = getComponentState();\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <BasicView className={classnames(styles.root, className)}>\n <FacetViewHeader title={config.caption} />\n <div className={styles.matchesContainer}>\n {state === ComponentStates.Loading && <LinearLoadIndicator />}\n {state === ComponentStates.NoData && (\n <Typography className={styles.noData}>{i18n.text('No matches found')}</Typography>\n )}\n {state === ComponentStates.Loaded &&\n matches.map((match) => (\n <MatchCard\n config={config}\n entitiesMap={entitiesMap}\n match={match}\n onFinishRequest={onFinishMatchAction}\n onStartRequest={turnOnDisableSpinner}\n key={match.object.uri}\n />\n ))}\n </div>\n {showSeeAll && (\n <>\n <div className={styles.footer}>\n <Link\n component=\"button\"\n variant=\"caption\"\n onClick={openPotentialMatchPerspective}\n underline=\"none\"\n >\n {i18n.text('See all')}\n </Link>\n </div>\n </>\n )}\n </BasicView>\n </EntitiesMapContext.Provider>\n );\n};\n","import React, {lazy} from 'react';\nimport {Store} from 'redux';\nimport {\n ProfileViewConfig,\n ProfileViewTypes,\n AttributeViewConfig,\n EntityMapViewConfig,\n ProfilePotentialMatchesViewConfig,\n RelationsViewConfig,\n ImageAttributeViewConfig,\n SingleAttributeViewConfig,\n HierarchyPathsViewConfig,\n HierarchyTreeViewConfig,\n CustomActionViewConfig\n} from '@reltio/mdm-sdk';\nimport {pipe} from 'ramda';\nimport {ProfileAttributesView} from '../ProfileAttributesView/ProfileAttributesView';\nimport {ProfileSingleAttributeView} from '../ProfileSingleAttributeView/ProfileSingleAttributeView';\nimport {ProfileRelationsView} from '../ProfileRelationsView/ProfileRelationsView';\nimport {ProfileTableAttributeView} from '../ProfileTableAttributeView/ProfileTableAttributeView';\nimport {HierarchyPathsView} from '../HierarchyPathsView';\nimport {CustomView} from '../Sandbox/CustomView';\nimport withDragHandle from './HOCs/withDragHandle';\nimport withErrorBoundary from './HOCs/withErrorBoundary';\nimport {StubView} from './StubView';\nimport EntityMapView from '../EntityMapView/EntityMapView';\nimport {ImageAttributeView} from '../ImageAttributeView/ImageAttributeView';\nimport {ProfilePotentialMatchesView} from '../ProfilePotentialMatchesView/ProfilePotentialMatchesView';\n\nconst wrapView = <P extends unknown>(component: P): P => pipe(withErrorBoundary, withDragHandle)(component);\n\nconst WrappedStubView = wrapView(StubView);\nexport const WrappedProfileAttributesView = wrapView(ProfileAttributesView);\nexport const WrappedProfileSingleAttributeView = wrapView(ProfileSingleAttributeView);\nexport const WrappedProfileTableAttributeView = wrapView(ProfileTableAttributeView);\nexport const WrappedProfileRelationsView = wrapView(ProfileRelationsView);\nexport const WrappedCustomView = wrapView(CustomView);\nexport const WrappedHierarchyPathView = wrapView(HierarchyPathsView);\nexport const WrappedProfilePotentialMatchesView = wrapView(ProfilePotentialMatchesView);\n\nexport const WrappedHierarchyTreeView = lazy(() =>\n import(/* webpackMode: \"eager\" */ '@reltio/hierarchy-tree').then((importedModule) => ({\n default: wrapView(importedModule.HierarchyTreeView)\n }))\n);\n\nexport const WrappedRelationshipsTableView = lazy(() =>\n import(/* webpackMode: \"eager\" */ '@reltio/relations-table').then((importedModule) => ({\n default: wrapView(importedModule.RelationshipsTableView)\n }))\n);\nexport const WrappedEntityMapView = wrapView(EntityMapView);\nexport const WrappedImageAttributeView = wrapView(ImageAttributeView);\n\nexport type ViewComponentProps = {\n store: Store<unknown>;\n config:\n | ProfileViewConfig\n | AttributeViewConfig\n | SingleAttributeViewConfig\n | RelationsViewConfig\n | EntityMapViewConfig\n | ImageAttributeViewConfig;\n className?: string;\n isFullscreen: boolean;\n isAutosize?: boolean;\n onToggleFullscreen: (id: string) => void;\n};\n\nclass ViewsFactory {\n static ViewTypes = ProfileViewTypes;\n static getComponentBy = (\n propName: string,\n {store, config, className, isFullscreen, onToggleFullscreen}: ViewComponentProps\n ) => {\n switch (config[propName]) {\n case ViewsFactory.ViewTypes.HierarchyTree:\n return (\n <WrappedHierarchyTreeView\n config={config as HierarchyTreeViewConfig}\n store={store}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.HierarchyPaths:\n return <WrappedHierarchyPathView config={config as HierarchyPathsViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.RelationsTable:\n return (\n <WrappedRelationshipsTableView\n config={config as RelationsViewConfig}\n store={store}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.Relations:\n return <WrappedProfileRelationsView config={config as RelationsViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.Attributes:\n return <WrappedProfileAttributesView className={className} config={config as AttributeViewConfig} />;\n case ViewsFactory.ViewTypes.SingleAttribute:\n return (\n <WrappedProfileSingleAttributeView\n config={config as SingleAttributeViewConfig}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.AttributeTable:\n return (\n <WrappedProfileTableAttributeView\n config={config as SingleAttributeViewConfig}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.Map:\n return (\n <WrappedEntityMapView\n config={config as EntityMapViewConfig}\n isFullscreen={isFullscreen}\n onToggleFullscreen={onToggleFullscreen}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.Custom:\n return <WrappedCustomView config={config as CustomActionViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.ImageAttribute:\n return <WrappedImageAttributeView config={config as ImageAttributeViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.PotentialMatches:\n return (\n <WrappedProfilePotentialMatchesView\n config={config as ProfilePotentialMatchesViewConfig}\n className={className}\n />\n );\n }\n };\n static getComponent = (props: ViewComponentProps) => {\n return (\n ViewsFactory.getComponentBy('class', props) ||\n ViewsFactory.getComponentBy('react-class', props) || <WrappedStubView className={props.className} />\n );\n };\n}\n\nexport default ViewsFactory;\n","import React from 'react';\nimport classnames from 'classnames';\nimport {BasicView} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst StubView = ({className}: Props) => {\n const styles = useStyles();\n return (\n <BasicView className={classnames(styles.stubView, 'viewDraggableHandle', className)}>NOT IMPLEMENTED</BasicView>\n );\n};\n\nexport {StubView};\n","import React from 'react';\nimport {SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {SingleAttributeContext} from './contexts/SingleAttributeContext';\nimport {SingleAttributeView} from './components/SingleAttributeView/SingleAttributeView';\nimport {useSingleAttribute} from './hooks/useSingleAttribute';\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileSingleAttributeView = ({className, config}: Props) => {\n const singleAttribute = useSingleAttribute(config);\n\n return (\n <SingleAttributeContext.Provider value={singleAttribute}>\n <SingleAttributeView config={config} className={className} />\n </SingleAttributeContext.Provider>\n );\n};\n","import {useState, useMemo, useCallback} from 'react';\nimport {SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {useSingleAttributeLoader} from '../../hooks/useSingleAttributeLoader';\n\nexport const useSingleAttribute = (config: SingleAttributeViewConfig) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [page, setPage] = useState(0);\n const [showInactive, setShowInactive] = useState(false);\n const params = useMemo(() => ({page, searchQuery, showInactive}), [page, searchQuery, showInactive]);\n const attribute = useSingleAttributeLoader(config, params, true);\n const toggleShowInactive = useCallback(() => {\n setPage(0);\n setShowInactive((showInactive) => !showInactive);\n }, []);\n\n return {\n setSearchQuery,\n searchQuery,\n setPage,\n page,\n toggleShowInactive,\n showInactive,\n ...attribute\n };\n};\n","import React from 'react';\nimport {TableAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {TableAttributeContext} from './contexts/TableAttributeContext';\nimport {useTableAttribute} from './hooks/useTableAttribute';\nimport {TableAttributeView} from './components/TableAttributeView/TableAttributeView';\n\ntype Props = {\n config: TableAttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileTableAttributeView = ({config, className}: Props) => {\n const tableAttribute = useTableAttribute(config);\n\n return (\n <TableAttributeContext.Provider value={tableAttribute}>\n {config && <TableAttributeView config={config} className={className} />}\n </TableAttributeContext.Provider>\n );\n};\n","import {useMemo, useReducer} from 'react';\nimport {reject, isNil, pipe, not, prop} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {findAttributeTypeByUri, isComplexAttribute, SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {useActions} from '@reltio/components';\nimport reducer, {actions} from './reducer';\nimport {getColumnsData} from '../helpers/tableAttributeHelpers';\nimport {useSingleAttributeLoader} from '../../hooks/useSingleAttributeLoader';\nimport {buildMDMFilters} from './helpers';\n\nconst DEFAULT_COUNT_COLUMN = 5;\n\nexport const useTableAttribute = (config: SingleAttributeViewConfig) => {\n const {attributeUri} = config;\n const metadata = useSelector(mdm.selectors.getMetadata);\n const attributeType = useMemo(() => findAttributeTypeByUri(metadata, attributeUri), [metadata, attributeUri]);\n const allColumnsData = useMemo(\n () => (attributeType ? getColumnsData(metadata, attributeType) : []),\n [metadata, attributeType]\n );\n const initialState = useMemo(\n () => ({\n searchQuery: '',\n filters: null,\n sorting: undefined,\n visibleColumns: allColumnsData\n .filter(pipe(prop('dataTypeDefinition'), isComplexAttribute, not))\n .map(({id}) => id)\n .slice(0, DEFAULT_COUNT_COLUMN),\n page: 0\n }),\n [allColumnsData]\n );\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n const {searchQuery, filters, sorting, page} = state;\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode);\n\n const requestFilters = useMemo(() => {\n const mdmFilters = buildMDMFilters(allColumnsData, filters);\n return mdmFilters.length ? mdmFilters : null;\n }, [filters, allColumnsData]);\n\n const params = useMemo(\n () => reject(isNil, {filters: requestFilters, page, sorting, searchQuery}),\n [requestFilters, page, sorting, searchQuery]\n );\n const {changeSearchQuery, changePage, toggleSort, changeFilter, toggleFilters, changeColumns} = useActions({\n actions,\n dispatch\n });\n const attribute = useSingleAttributeLoader(config, params, false);\n const showTable = Boolean(\n (attribute?.values?.length || requestFilters || searchQuery || isEditableMode) &&\n attributeType &&\n !attributeType.hidden\n );\n return {\n ...state,\n setSearchQuery: changeSearchQuery,\n setPage: changePage,\n onSort: toggleSort,\n onFilter: changeFilter,\n onToggleFilters: toggleFilters,\n onChangeColumns: changeColumns,\n showTable,\n allColumnsData,\n ...attribute\n };\n};\n","import {propEq} from 'ramda';\nimport {Maybe} from '@reltio/mdm-sdk';\nimport {ColumnData, ColumnFilter, columnFilterToMdmFilter} from '@reltio/components';\n\nexport const buildMDMFilters = (columnsData: ColumnData[], filters: {[key: string]: ColumnFilter}) =>\n Maybe.fromNull(filters)\n .map((filters) =>\n Object.entries(filters).map(([columnId, columnFilter]) => {\n const columnData = columnsData.find(propEq('id', columnId));\n return columnFilterToMdmFilter(columnData, columnFilter);\n })\n )\n .orSome([]);\n","import React from 'react';\nimport RelationsView from './components/RelationsView';\nimport {RelationsViewStateContext} from './contexts/RelationsViewStateContext';\nimport useRelationsState from './hooks/useRelationsState';\nimport {RelationsViewConfig} from '@reltio/mdm-sdk';\n\ntype Props = {\n config: RelationsViewConfig;\n onResize?: (width: number, height: number) => void;\n className?: string;\n};\n\nexport const ProfileRelationsView = ({config, className}: Props) => {\n const relationsState = useRelationsState(config);\n return (\n <RelationsViewStateContext.Provider value={relationsState}>\n <RelationsView config={config} className={className} />\n </RelationsViewStateContext.Provider>\n );\n};\n","import React, {useCallback} from 'react';\nimport {BasicView, ReactSortableTree} from '@reltio/components';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {ui} from '@reltio/mdm-module';\nimport {useLoadPaths} from './hooks/useLoadPaths';\nimport {Node} from './Node';\nimport {useStyles} from './styles';\nimport {ConfigContext} from './ConfigContext';\nimport {HierarchyPathsViewConfig} from '@reltio/mdm-sdk';\nimport {getNodeKey} from './helpers';\nimport {theme} from './theme';\nimport HierarchyPathsHeader from './HierarchyPathsHeader';\n\ntype Props = {\n className?: string;\n config: HierarchyPathsViewConfig;\n};\n\nexport const HierarchyPathsView = ({config, className}: Props) => {\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const {treeData, setTreeData} = useLoadPaths(entityUri, config.graph.type);\n const styles = useStyles();\n const dispatch = useDispatch();\n const {id, graph} = config;\n const openGraph = useCallback(() => {\n dispatch(ui.actions.openGraph({viewId: id, graphType: graph.type, entityUri}));\n }, [dispatch, id, graph, entityUri]);\n const generateNodeProps = useCallback(\n (rowInfo) => ({\n title: <Node node={rowInfo.node} />\n }),\n []\n );\n return (\n <BasicView className={className}>\n <HierarchyPathsHeader onGraphOpen={openGraph} title={config.caption} />\n <ConfigContext.Provider value={config}>\n <div className={styles.treeContainer}>\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 />\n </div>\n </div>\n </ConfigContext.Provider>\n </BasicView>\n );\n};\n","import React, {useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport mdm from '@reltio/mdm-module';\nimport FullscreenIcon from '@material-ui/icons/Fullscreen';\nimport FullscreenExitIcon from '@material-ui/icons/FullscreenExit';\nimport {BasicView, LinearLoadIndicator, ReltioMap} from '@reltio/components';\nimport {SmallIconButton} from '@reltio/components';\n\nimport {AttributeViewConfig} from '@reltio/mdm-sdk';\nimport {useMarkers} from './useMarkers';\nimport useStyles from './styles';\n\ntype EntityMapViewProps = {\n config: AttributeViewConfig;\n className?: string;\n isFullscreen: boolean;\n onToggleFullscreen: (id: string) => void;\n};\n\nexport const EntityMapView = ({config, isFullscreen, onToggleFullscreen, className}: EntityMapViewProps) => {\n const styles = useStyles();\n const metadata = useSelector(mdm.selectors.getMetadata);\n const entity = useSelector(mdm.selectors.getEntity);\n const mapKey = useSelector(mdm.selectors.getGoogleMapKey);\n const {markers, loading} = useMarkers(entity, metadata, mapKey);\n const loadingElement = useMemo(\n () => (\n <div className={styles.fullHeight}>\n <LinearLoadIndicator />\n </div>\n ),\n [styles]\n );\n\n const defaultCenter = useMemo(() => ({lat: 0, lng: 0}), []);\n const mapOptions = useMemo(() => ({mapTypeControl: true}), []);\n\n return (\n mapKey && (\n <BasicView className={classnames(styles.root, className)}>\n {loading && <LinearLoadIndicator />}\n <SmallIconButton\n size=\"S\"\n icon={isFullscreen ? FullscreenExitIcon : FullscreenIcon}\n onClick={() => onToggleFullscreen(config.id)}\n className={styles.fullscreenBtn}\n />\n\n <ReltioMap\n loadingElement={loadingElement}\n defaultZoom={1}\n defaultCenter={defaultCenter}\n markers={markers}\n mapContainerClassName={styles.fullHeight}\n mapKey={mapKey}\n mapOptions={mapOptions}\n />\n </BasicView>\n )\n );\n};\n\nexport default EntityMapView;\n","import React, {memo, Suspense} from 'react';\nimport classnames from 'classnames';\nimport ViewsFactory, {ViewComponentProps} from './ViewsFactory';\nimport {useStyles} from './styles';\n\nconst Fallback = () => null;\n\nconst ViewComponent = memo(({config, store, isFullscreen, isAutosize, onToggleFullscreen}: ViewComponentProps) => {\n const styles = useStyles();\n return (\n <Suspense fallback={<Fallback />}>\n {ViewsFactory.getComponent({\n config,\n store,\n className: classnames(styles.component, {[styles.fullHeight]: !isAutosize}),\n isFullscreen,\n onToggleFullscreen\n })}\n </Suspense>\n );\n});\n\nViewComponent.displayName = 'ViewComponent';\n\nexport {ViewComponent};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {basicView: Record<string, string | number>}) => ({\n item: theme.basicView,\n fixedSizeContainer: {\n height: '100%'\n }\n}));\n","import React, {ReactChildren, ReactNode, useContext} from 'react';\nimport {omit} from 'ramda';\nimport {ReactReduxContext, useSelector} from 'react-redux';\nimport {ReactGridLayoutItem} from '@reltio/components';\nimport {CustomScript, CustomScriptPlatform, ProfileViewConfig, ProfileViewTypes} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {ViewComponent} from '../views/ViewComponent';\nimport ViewsFactory from '../views/ViewsFactory';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n layoutItemConfig: ReactGridLayoutItem;\n views: ProfileViewConfig[];\n className?: string;\n children?: ReactChildren;\n style?: Record<string, unknown>;\n isFullscreen: boolean;\n onToggleFullscreen: (id: string) => void;\n AutosizeComponent?: ReactNode;\n};\n\nconst omittingProps = ['onConfigChanged', 'onRemove'];\n\nconst getViewTypeByClass = (className: string) =>\n Object.entries(ProfileViewTypes).find(([_, value]) => className === value)?.[0];\n\nconst ProfileLayoutItem = ({\n layoutItemConfig,\n views,\n className,\n children: ResizeComponent,\n style,\n isFullscreen,\n onToggleFullscreen,\n AutosizeComponent,\n ...props\n}: Props) => {\n const config = views.find(({id}) => layoutItemConfig.i === id);\n const styles = useStyles();\n const mapKey = useSelector(mdm.selectors.getGoogleMapKey);\n\n const {store} = useContext(ReactReduxContext);\n if (!config) {\n return null;\n }\n const isCustomView = config.class === ViewsFactory.ViewTypes.Custom;\n if (isCustomView && (config?.action as CustomScript)?.platform === CustomScriptPlatform.CLASSIC) {\n return null;\n }\n\n const isMapView = config.class === ViewsFactory.ViewTypes.Map;\n if (isMapView && !mapKey) {\n return null;\n }\n\n const reltioClass = getViewTypeByClass(config.class);\n return (\n <div\n {...omit(omittingProps, props)}\n data-reltio-id={config.id}\n data-reltio-class={reltioClass || ''}\n style={style}\n className={classnames(className, {[styles.item]: !isCustomView})}\n >\n <div className={classnames({[styles.fixedSizeContainer]: !AutosizeComponent})}>\n {AutosizeComponent}\n <ViewComponent\n store={store}\n config={config}\n isFullscreen={isFullscreen}\n onToggleFullscreen={onToggleFullscreen}\n isAutosize={Boolean(AutosizeComponent)}\n />\n </div>\n {ResizeComponent}\n </div>\n );\n};\n\nexport {ProfileLayoutItem};\n","import React from 'react';\nimport {ReltioGridLayout} from '@reltio/components';\nimport {ProfileViewConfig} from '@reltio/mdm-sdk';\n\nimport {Layout} from '../../types';\nimport {ProfileLayoutItem} from '../ProfileLayoutItem';\n\ntype Props = {\n views: ProfileViewConfig[];\n layout?: Layout;\n layoutOptions?: Record<string, unknown>;\n onLayoutChanged: (layout: Layout) => void;\n};\n\nconst ProfileLayout = ({views, layout, layoutOptions, onLayoutChanged}: Props) => {\n return (\n <ReltioGridLayout\n LayoutItem={ProfileLayoutItem}\n views={views}\n layout={layout}\n layoutOptions={layoutOptions}\n onLayoutChanged={onLayoutChanged}\n draggableHandle=\".viewDraggableHandle\"\n />\n );\n};\n\nexport {ProfileLayout};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n closeIcon: {\n paddingRight: '12px',\n boxSizing: 'content-box',\n '& path': {\n fill: '#fff'\n }\n },\n snackbar: {\n '& > div': {\n flexWrap: 'nowrap',\n alignItems: 'baseline'\n }\n }\n}));\n","import {Snackbar as Snackbar} from '@material-ui/core';\nimport {Portal as Portal} from '@material-ui/core';\nimport React, {useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport {ConfirmationDialog, SmallIconButton} from '@reltio/components';\nimport {NotificationItem, Action} from './types';\nimport {useStyles} from './styles';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {ui as mdmModuleUi} from '@reltio/mdm-module';\n\ntype Props = {\n notification: NotificationItem;\n};\n\nconst AUTO_HIDE_DURATION = 5000;\n\nexport const Notification = ({notification}: Props) => {\n const styles = useStyles({});\n const dispatch = useDispatch();\n const autoCloseInterval: number = useSelector(mdmModule.selectors.getAutoCloseInterval);\n const autoHideDuration =\n notification.autoHideDuration || (autoCloseInterval && autoCloseInterval * 1000) || AUTO_HIDE_DURATION;\n const [action, setAction] = useState<Action>();\n const [show, setShow] = useState(true);\n const closeSnackbar = useCallback(\n (_e?: unknown, reason?: string) => {\n if (reason !== 'clickaway') {\n dispatch(mdmModuleUi.actions.closeNotification(notification.id));\n setShow(false);\n }\n },\n [notification]\n );\n const onDiscard = useCallback(() => {\n action.cancelAction && dispatch(action.cancelAction);\n setAction(undefined);\n }, [action]);\n const onConfirm = useCallback(() => {\n dispatch(action.applyAction);\n setAction(undefined);\n dispatch(mdmModuleUi.actions.closeNotification(notification.id));\n }, [action, notification]);\n\n const actions = (\n <>\n {notification.actions.map((action) => (\n <Button\n key={action.label}\n color=\"primary\"\n size=\"small\"\n onClick={() => {\n if (action.needConfirmation) {\n setAction(action);\n } else {\n dispatch(action.applyAction);\n }\n setShow(false);\n }}\n >\n {action.label}\n </Button>\n ))}\n </>\n );\n const message = (\n <>\n <SmallIconButton className={styles.closeIcon} size=\"S\" icon={CloseIcon} onClick={closeSnackbar} />\n {notification.text}\n </>\n );\n\n return (\n <>\n <Portal container={document.body}>\n <Snackbar\n autoHideDuration={autoHideDuration}\n open={show}\n classes={{root: styles.snackbar}}\n action={actions}\n onClose={closeSnackbar}\n anchorOrigin={{vertical: 'bottom', horizontal: 'center'}}\n message={message}\n />\n </Portal>\n <ConfirmationDialog\n open={!!action}\n title={action?.confirmationText}\n content={action?.confirmationDescription}\n onSave={onConfirm}\n onDiscard={onDiscard}\n saveCaption={i18n.text('Proceed')}\n discardCaption={i18n.text('Cancel')}\n />\n </>\n );\n};\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {NotificationItem} from './types';\nimport {Notification} from './Notification';\n\nexport const Notifications = () => {\n const notifications: NotificationItem[] = useSelector(mdm.selectors.getNotifications);\n if (!notifications) return null;\n return (\n <>\n {notifications.slice(-1).map((n) => (\n <Notification key={n.id} notification={n} />\n ))}\n </>\n );\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"19\",\n height: \"17\",\n viewBox: \"0 0 19 17\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M14 17v2H4v-2h10zm6-4v2H4v-2l12.884.001H17l.116-.002L20 13zm-8.457-2H4V9h5.82a8.465 8.465 0 001.723 2zM9.139 6.178l-.289.733.035.088L4 7V5l5.713-.002c-.22.375-.412.768-.574 1.18zM17 2.82a6.451 6.451 0 00-6 4.09 6.451 6.451 0 006 4.092 6.451 6.451 0 006-4.091 6.451 6.451 0 00-6-4.091zm0 6.815a2.728 2.728 0 010-5.455 2.728 2.728 0 010 5.455zm0-4.365c-.905 0-1.636.73-1.636 1.636 0 .906.73 1.637 1.636 1.637.905 0 1.636-.731 1.636-1.637 0-.905-.73-1.636-1.636-1.636z\",\n id: \"svg1467685497a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"g\", {\n transform: \"translate(-4 -2.5)\"\n}, React.createElement(\"mask\", {\n id: \"svg1467685497b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg1467685497a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg1467685497b)\",\n d: \"M0 0h24v24H0z\"\n})))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M20.222 6C21.21 6 22 6.8 22 7.778v12.444C22 21.2 21.209 22 20.222 22H7.778C6.79 22 6 21.2 6 20.222V7.778C6 6.8 6.791 6 7.778 6h12.444zM20 8H8v12h12V8zM4 18H2V4c0-1.1.9-2 2-2h14v2H4v14z\",\n id: \"svg2383396984a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg2383396984b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2383396984a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2383396984b)\",\n d: \"M0 0h24v24H0z\"\n}))));","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n editingButtons: {\n display: 'flex',\n '& button + button': {\n width: '88px',\n marginLeft: '8px'\n }\n },\n searchResults: {\n width: '150px',\n height: '25px',\n backgroundColor: '#ccc'\n },\n comments: {\n display: 'flex',\n justifyContent: 'flex-end',\n marginTop: '10px'\n }\n});\n","import {useCallback, useMemo} from 'react';\nimport {\n includes,\n pipe,\n isNil,\n propOr,\n filter,\n map,\n prop,\n cond,\n identity,\n omit,\n find,\n complement,\n when,\n either,\n pick,\n always,\n T\n} from 'ramda';\nimport {\n BaseCloneAction,\n CloneAction,\n Entity,\n getEntityType,\n isReference,\n isRelationWithEntityType,\n getRelationTypeUriFromAttrType\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\n\ntype Props = {\n cloneAction?: CloneAction[];\n onCloneDiscard: () => void;\n};\n\nexport const useCloneAction = ({cloneAction: cloneActionProp, onCloneDiscard}: Props) => {\n const entity: Entity = useSelector(mdm.selectors.getEntityWithoutDiff);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const dispatch = useDispatch();\n const entityTypeUri = entity?.type;\n const relationTypes = metadata.relationTypes;\n const isRelationSuitableForEntityType = useCallback(isRelationWithEntityType(metadata, entityTypeUri), [\n metadata,\n entityTypeUri\n ]);\n const entityType = getEntityType(metadata, entityTypeUri);\n const cloneAction = useMemo<BaseCloneAction>(\n () =>\n when(\n complement(isNil),\n pipe(\n find(pipe(propOr([], 'entityTypeUris'), either(includes(entityTypeUri), includes('*')))),\n when(complement(isNil), omit(['entityTypeUris']))\n )\n )(cloneActionProp),\n [cloneActionProp, entityTypeUri]\n );\n const onClone = useCallback(() => {\n if (cloneAction) {\n const modifiedRelationTypes: string[] = pipe(\n prop('relationshipTypesToCopy'),\n cond([\n [\n isNil,\n pipe(\n always(entityType),\n propOr([], 'attributes'),\n filter(isReference),\n map(getRelationTypeUriFromAttrType)\n )\n ],\n [\n includes('*'),\n pipe(always(relationTypes || []), map(prop('uri')), filter(isRelationSuitableForEntityType))\n ],\n [T, identity]\n ])\n )(cloneAction);\n dispatch(\n profile.entity.actions.entityCloneRequested({\n data: {\n ...pick(['attributeReplacementMapping'], cloneAction),\n relationshipTypesToCopy: modifiedRelationTypes\n },\n entityUri: entity.uri\n })\n );\n }\n onCloneDiscard();\n }, [cloneAction, onCloneDiscard, entityType, relationTypes, entity.uri, isRelationSuitableForEntityType]);\n return cloneAction ? onClone : undefined;\n};\n","import React, {useCallback, useMemo, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {Box as Box} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport {SvgIcon as SvgIcon} from '@material-ui/core';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CreateIcon from '@material-ui/icons/Create';\n\nimport {\n getEntityType,\n Entity,\n checkMetadataPermission,\n isDataTenantEntity,\n isTempUri,\n MetadataPermissions,\n ModeTypes,\n Mode,\n isSuggestMode,\n isEditableMode,\n CollaborationObjectTypes,\n createRelatedObjectUris,\n Operation,\n ProfileBandConfig\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {\n ProfileBand,\n ModeSwitcherSelect,\n CommentsContainer,\n COMMENTS_CONTAINER_VISIBILITY_AREA,\n ProfileBandNavigation,\n ProfileBandHistory,\n ConfirmationDialog\n} from '@reltio/components';\n\nimport SuggestSvg from './suggest.svg';\nimport CopySvg from './copy.svg';\n\nimport {useStyles} from './styles';\nimport {useCloneAction} from './hooks/useCloneAction';\n\ntype Props = {\n className?: string;\n profileBandConfig?: ProfileBandConfig;\n};\n\nconst SuggestIcon = (props) => (\n <SvgIcon {...props}>\n <SuggestSvg />\n </SvgIcon>\n);\n\nconst CopyIcon = (props) => (\n <SvgIcon {...props}>\n <CopySvg />\n </SvgIcon>\n);\n\ntype Group = {\n label: string;\n value: string;\n description: string;\n icon: React.ElementType;\n permission: string;\n onClick?: (value: string) => void;\n};\n\nconst filterGroupByPermissions = <T extends Group>(\n group: T[],\n entityType,\n isTempEntity: boolean,\n isWorkflowEnabled?: boolean,\n canStartProcessInstanceSearchQuery?: boolean\n): T[] =>\n group.filter(({value, permission}) => {\n if (isTempEntity && !isEditableMode(value)) return false;\n if ((!isWorkflowEnabled || !canStartProcessInstanceSearchQuery) && isSuggestMode(value)) return false;\n return checkMetadataPermission(permission, entityType);\n });\n\nconst hasOnlyReadPermission = (entityType) => {\n return (\n checkMetadataPermission(MetadataPermissions.READ, entityType) &&\n !checkMetadataPermission(MetadataPermissions.UPDATE, entityType) &&\n !checkMetadataPermission(MetadataPermissions.DELETE, entityType) &&\n !checkMetadataPermission(MetadataPermissions.INITIATE_CHANGE_REQUEST, entityType)\n );\n};\n\nexport const PerspectiveProfileBand = ({className, profileBandConfig}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n const canStartProcessInstanceSearchQuery = useSelector(mdm.selectors.getCanUserStartProcessFromQuery);\n const entity = useSelector(mdm.selectors.getEntityWithoutDiff) as Entity;\n const modifiedEntity = useSelector((state) => mdm.selectors.getModifiedEntity(state, entity.uri));\n const metadata = useSelector(mdm.selectors.getMetadata);\n const isWorkflowEnabled = useSelector(mdm.selectors.isWorkflowEnabled) as boolean;\n const mode = useSelector(mdm.selectors.getMode) as Mode;\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode) as boolean;\n const isViewMode = useSelector(mdm.selectors.getIsViewMode) as boolean;\n const isHistoryModeEnabled = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const profileOperation = useSelector(mdm.selectors.getProfileOperation);\n const entityTypeUri = entity?.type;\n const entityType = useMemo(() => getEntityType(metadata, entityTypeUri), [entityTypeUri, metadata]);\n const isOperationSaving = profileOperation === Operation.Saving;\n const isOperationCloning = profileOperation === Operation.Cloning;\n const isDisabledButtons = isOperationCloning || isOperationSaving;\n const [openCloneConfirmationDialog, setOpenCloneConfirmationDialog] = useState(false);\n const onCloneDiscard = useCallback(() => {\n setOpenCloneConfirmationDialog(false);\n }, []);\n const onClone = useCloneAction({cloneAction: profileBandConfig?.cloneAction, onCloneDiscard});\n const OPTIONS_GROUP = useMemo(\n () => [\n {\n label: i18n.text('Editing'),\n value: ModeTypes.EDITING,\n description: i18n.text('Edit profile directly'),\n icon: CreateIcon,\n permission: 'UPDATE'\n },\n {\n label: i18n.text('Suggesting'),\n value: ModeTypes.SUGGESTING,\n description: i18n.text('Suggest changes and initiate a workflow review'),\n icon: SuggestIcon,\n permission: 'INITIATE_CHANGE_REQUEST'\n },\n {\n label: i18n.text('Viewing'),\n value: ModeTypes.VIEWING,\n description: i18n.text('Read or print profile'),\n icon: VisibilityIcon,\n permission: 'READ'\n }\n ],\n []\n );\n\n const BUTTONS_GROUP = useMemo(\n () => [\n ...(onClone\n ? [\n {\n label: i18n.text('Clone'),\n value: 'Clone',\n description: i18n.text('Create a copy of the profile'),\n icon: CopyIcon,\n onClick: () => setOpenCloneConfirmationDialog(true),\n permission: 'CREATE'\n }\n ]\n : []),\n {\n label: i18n.text('Delete'),\n value: 'Delete',\n description: i18n.text('Permanently delete profile'),\n icon: DeleteIcon,\n onClick: () => {\n const conf = window.confirm(i18n.text('Are you sure you want to delete this?'));\n if (conf) {\n dispatch(profile.entity.actions.entityRemoveRequested({entityUri: entity.uri}));\n }\n },\n permission: 'DELETE'\n }\n ],\n [dispatch, entity.uri, onClone]\n );\n\n const shouldShowSelect = !isHistoryModeEnabled && !isDataTenantEntity(entity) && !hasOnlyReadPermission(entityType);\n\n const isTempEntity = isTempUri(entity?.uri);\n\n const accessibleOptionsGroup = useMemo(() => {\n return filterGroupByPermissions(\n OPTIONS_GROUP,\n entityType,\n isTempEntity,\n isWorkflowEnabled,\n canStartProcessInstanceSearchQuery\n );\n }, [OPTIONS_GROUP, entityType, isWorkflowEnabled, canStartProcessInstanceSearchQuery, isTempEntity]);\n const accessibleButtonsGroup = useMemo(() => {\n return filterGroupByPermissions(\n BUTTONS_GROUP,\n entityType,\n isTempEntity,\n isWorkflowEnabled,\n canStartProcessInstanceSearchQuery\n );\n }, [BUTTONS_GROUP, entityType, isWorkflowEnabled, canStartProcessInstanceSearchQuery, isTempEntity]);\n\n const handleChange = useCallback(\n (value: Mode) => {\n dispatch(profile.mode.actions.modeUpdated(value));\n },\n [dispatch]\n );\n\n const onCancel = useCallback(() => {\n dispatch(profile.mode.actions.modeCancelEditing());\n }, [dispatch]);\n\n const handleSave = useCallback(() => {\n dispatch(profile.actions.saveProfile());\n }, [dispatch]);\n\n return (\n <>\n <ProfileBand\n className={classnames(className, COMMENTS_CONTAINER_VISIBILITY_AREA)}\n entity={isEditableMode && modifiedEntity ? modifiedEntity : entity}\n >\n <Box display=\"flex\" alignItems=\"center\">\n <Box mr={3}>\n {isEditableMode && (\n <Box className={styles.editingButtons}>\n <Button\n variant=\"outlined\"\n onClick={onCancel}\n data-reltio-id=\"reltio-profile-cancel-editing\"\n disabled={isDisabledButtons}\n >\n {i18n.text('Cancel')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n data-reltio-id=\"reltio-profile-save-profile\"\n onClick={handleSave}\n disabled={isDisabledButtons}\n >\n {isSuggestMode(mode) ? i18n.text('Suggest') : i18n.text('Save')}\n </Button>\n </Box>\n )}\n {isHistoryModeEnabled && isViewMode ? (\n <ProfileBandHistory />\n ) : (\n isViewMode && <ProfileBandNavigation />\n )}\n </Box>\n {shouldShowSelect && (\n <ModeSwitcherSelect\n optionsGroup={accessibleOptionsGroup}\n buttonsGroup={accessibleButtonsGroup}\n value={mode}\n onChange={handleChange}\n disabled={isDisabledButtons}\n />\n )}\n </Box>\n <Box className={styles.comments}>\n <CommentsContainer\n uri={entity.uri}\n relatedObjectUris={createRelatedObjectUris(CollaborationObjectTypes.ENTITY, {\n entityUri: entity.uri\n })}\n objectType={CollaborationObjectTypes.ENTITY}\n />\n </Box>\n </ProfileBand>\n {!!onClone && (\n <ConfirmationDialog\n open={openCloneConfirmationDialog}\n title={i18n.text('Do you want to create a clone of the profile?')}\n content={i18n.text(\n 'Cloning will create a copy of the current profile. You can modify the cloned profile in the next step. Are you sure you want to proceed?'\n )}\n onSave={onClone}\n onDiscard={onCloneDiscard}\n saveCaption={i18n.text('Proceed')}\n discardCaption={i18n.text('Cancel')}\n />\n )}\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n display: 'flex',\n overflow: 'hidden',\n marginLeft: 'auto',\n flexShrink: 0\n },\n badge: {\n fontSize: '12px',\n height: '18px',\n minWidth: '18px',\n backgroundColor: '#FF4081',\n color: '#FFF'\n },\n badgePosition: {\n right: '5px'\n }\n});\n","import React, {useContext, VFC} from 'react';\nimport {Badge as Badge} from '@material-ui/core';\nimport {WorkflowTasksContext} from '@reltio/components';\nimport InboxIcon from '@material-ui/icons/Inbox';\nimport {useStyles} from '../../styles';\n\nexport const WorkflowButton: VFC = () => {\n const {total} = useContext(WorkflowTasksContext);\n const styles = useStyles();\n return (\n <Badge\n badgeContent={total}\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <InboxIcon />\n </Badge>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n overflow: 'auto',\n paddingRight: '12px'\n },\n showMoreLink: {\n display: 'flex',\n margin: '16px'\n },\n showMoreIcon: {\n fontSize: '1rem'\n }\n});\n","import React, {useContext, useEffect} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {CollaborationContext, CollaborationItem, EntitiesMapContext, useCommentsEntitiesMap} from '@reltio/components';\nimport {Box as Box} from '@material-ui/core';\nimport {Link as Link} from '@material-ui/core';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport {useStyles} from './styles';\n\nexport const CollaborationList = () => {\n const styles = useStyles();\n const {getComments, comments, pageToken} = useContext(CollaborationContext);\n const entityUri = useSelector(mdm.selectors.getEntityUriWithDataTenant);\n\n useEffect(() => {\n getComments(entityUri);\n }, [getComments, entityUri]);\n\n const handleShowMoreComments = () => {\n getComments(entityUri, pageToken);\n };\n\n const entitiesMap = useCommentsEntitiesMap(comments);\n\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <Box className={styles.wrapper}>\n {comments.map((comment) => {\n const {objectId, relatedObjectUris, objectType, commentId} = comment;\n return (\n <CollaborationItem\n key={commentId}\n uri={objectId}\n relatedObjectUris={relatedObjectUris}\n objectType={objectType}\n comment={comment}\n />\n );\n })}\n {pageToken && (\n <Link\n component=\"button\"\n variant=\"caption\"\n className={styles.showMoreLink}\n onClick={handleShowMoreComments}\n underline=\"none\"\n >\n <KeyboardArrowDownIcon className={styles.showMoreIcon} />\n {i18n.text('Show more')}\n </Link>\n )}\n </Box>\n </EntitiesMapContext.Provider>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n overflow: 'auto',\n position: 'relative',\n height: '100%'\n }\n});\n","import React, {useContext} from 'react';\nimport {LinearLoadIndicator, WorkflowTaskCard, WorkflowTasksContext} from '@reltio/components';\nimport {useStyles} from './styles';\n\nexport const WorkflowList = () => {\n const styles = useStyles();\n const {tasks, loading} = useContext(WorkflowTasksContext);\n\n return (\n <div className={styles.wrapper}>\n {loading && <LinearLoadIndicator />}\n {tasks &&\n tasks.map((task) => {\n return <WorkflowTaskCard key={task.taskId} task={task} />;\n })}\n </div>\n );\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M4 17.17L5.17 16H20V4H4v13.17zM20 2c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H6l-4 4V4c0-1.1.9-2 2-2h16zm-3 9H7v2h10v-2zm0-4H7v2h10V7z\",\n id: \"svg2697213709a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"g\", null, React.createElement(\"g\", {\n transform: \"translate(-2 -2)\"\n}, React.createElement(\"mask\", {\n id: \"svg2697213709b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2697213709a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2697213709b)\",\n d: \"M0 0h24v24H0z\"\n}))))));","import React, {useContext, VFC} from 'react';\nimport {Badge as Badge} from '@material-ui/core';\nimport CollaborationIcon from '../../icons/CollaborationIcon.svg';\nimport {CollaborationContext} from '@reltio/components';\nimport {calcTotalCommentItems} from '@reltio/mdm-sdk';\nimport {useStyles} from '../../styles';\n\nexport const CollaborationButton: VFC = () => {\n const {commentsMap} = useContext(CollaborationContext);\n const styles = useStyles();\n return (\n <Badge\n badgeContent={calcTotalCommentItems(commentsMap)}\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <CollaborationIcon />\n </Badge>\n );\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SidePanelEmptyState} from '@reltio/components';\n\nconst WorkflowPanelEmptyState = () => (\n <SidePanelEmptyState\n text={i18n.text('Ready to go with the flow?')}\n secondaryText={i18n.text(\n 'Suggest a change or submit a match review, and we’ll kick off a workflow task to get things going.'\n )}\n />\n);\n\nexport default WorkflowPanelEmptyState;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SidePanelEmptyState} from '@reltio/components';\n\nconst CollaborationPanelEmptyState = () => (\n <SidePanelEmptyState\n text={i18n.text('Care to join the conversation?')}\n secondaryText={i18n.text(\n 'Leave comments for team members anywhere in the Profile page, and we’ll record it here.'\n )}\n />\n);\n\nexport default CollaborationPanelEmptyState;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"path\", {\n d: \"M14.101 16A5.003 5.003 0 0016 18.987V20H2v-4h12.101zM22 18.987V20v-1.013zM4 17v2h2v-2H4zM16 4v1.013A5.004 5.004 0 0014.101 8H2V4h14zm6 0v1.013V4zM6 7V5H4v2h2zm8 3v4H2v-4h12zM4 11v2h2v-2H4zm12 4v-2h6v2c0 1.3-.84 2.4-2 2.82V22h-2v-4.18c-1.16-.42-2-1.52-2-2.82zm0-6c0-1.3.84-2.4 2-2.82V2h2v4.18c1.16.42 2 1.52 2 2.82v2h-6V9z\",\n fill: \"#000\",\n fillOpacity: \".54\"\n})));","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n display: 'flex',\n flexDirection: 'column'\n },\n itemWrapper: {\n paddingLeft: '19px',\n paddingRight: '19px'\n }\n});\n","import React from 'react';\nimport {CustomActionViewConfig} from '@reltio/mdm-sdk';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {CustomView} from '../../../Sandbox/CustomView';\nimport {useStyles} from './styles';\n\nexport const DBConnectorsList = () => {\n const styles = useStyles();\n const dBConnectorSideViews = useSelector(mdm.selectors.getDBConnectorSideViews) as CustomActionViewConfig[];\n\n return (\n <div className={styles.wrapper}>\n {dBConnectorSideViews.map((sideView) => (\n <CustomView key={sideView.id} config={sideView} className={styles.itemWrapper} />\n ))}\n </div>\n );\n};\n","import React, {useCallback, useContext, useEffect, useState, VFC} from 'react';\nimport {pipe, propEq, reject, pluck} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport {\n CollaborationContext,\n SideButtonsPanel,\n SidePanelContentHeader,\n SidePanel,\n WorkflowTasksContext,\n AddWorkflowButton,\n HistoryView,\n HistoryHeader,\n HistoryPanelEmptyState,\n useHistory,\n useHistoryEnabled\n} from '@reltio/components';\nimport {calcTotalCommentItems, Entity, getEntityType, isTempUri, Metadata} from '@reltio/mdm-sdk';\nimport mdm, {HistoryEvent} from '@reltio/mdm-module';\nimport HistoryIcon from '@material-ui/icons/History';\nimport {WorkflowButton} from './components/WorkflowButton/WorkflowButton';\nimport {CollaborationList} from './components/CollaborationList/CollaborationList';\nimport {WorkflowList} from './components/WorkflowList/WorkflowList';\nimport {CollaborationButton} from './components/CollaborationButton/CollaborationButton';\nimport WorkflowPanelEmptyState from './components/WorkflowPanelEmptyState/WorkflowPanelEmptyState';\nimport CollaborationPanelEmptyState from './components/CollaborationPanelEmptyState/CollaborationPanelEmptyState';\nimport ConnectorsIcon from './icons/ConnectorsIcon.svg';\nimport {DBConnectorsList} from './components/DBConnectorsList/DBConnectorsList';\n\nimport {useStyles} from './styles';\n\nconst DEFAULT_PANEL_WIDTH = 480;\nexport enum ActivePanel {\n Workflow,\n Collaboration,\n History,\n DBConnector\n}\nconst getSecondTitle = (total: number): string => {\n if (total) {\n return total === 1 ? i18n.text('${total} item', {total}) : i18n.text('${total} items', {total});\n }\n};\n\nexport const RightSidePanel: VFC = () => {\n const styles = useStyles();\n const isWorkflowSideViewEnabled = useSelector(mdm.selectors.isWorkflowSideViewEnabled) as boolean;\n const isWorkflowEnabled = useSelector(mdm.selectors.isWorkflowEnabled) as boolean;\n const isCollaborationSideViewEnabled = useSelector(mdm.selectors.isCollaborationSideViewEnabled) as boolean;\n const isDBConnectorSideViewEnabled = useSelector(mdm.selectors.isDBConnectorSideViewEnabled) as boolean;\n const isCollaborationEnabled = useSelector(mdm.selectors.isCollaborationEnabled) as boolean;\n const historyEvent: HistoryEvent = useSelector(mdm.selectors.getHistoryEvent);\n const metadata: Metadata = useSelector(mdm.selectors.getMetadata);\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n\n const workflowTasksContext = useContext(WorkflowTasksContext);\n const collaborationContext = useContext(CollaborationContext);\n\n const [active, setActive] = useState<ActivePanel>(null);\n const toggleActive = useCallback((newId: ActivePanel): void => {\n setActive((active) => (active === newId ? null : newId));\n }, []);\n const resetActive = useCallback((): void => {\n setActive(null);\n }, []);\n const isOpen = active !== null;\n const isHistoryTabActive = active === ActivePanel.History;\n const {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({isHistoryTabActive, entity});\n\n const {historyFilter, onApplyFilter, isLoading, historicUris, historyWithTotal, canLoadMore, onLoadMore} =\n useHistory({entity, enabled: isHistoryEnabled});\n\n const enabledWorkflowButton = isWorkflowSideViewEnabled && isWorkflowEnabled && !isTempUri(entity?.uri);\n const enabledCollaborationButton = isCollaborationSideViewEnabled && isCollaborationEnabled;\n const collaborationTotal = calcTotalCommentItems(collaborationContext?.commentsMap);\n\n const elements = [\n {\n buttonProps: {\n id: ActivePanel.Workflow,\n icon: WorkflowButton,\n tooltipTitle: i18n.text('Workflow')\n },\n content: workflowTasksContext?.total ? <WorkflowList /> : <WorkflowPanelEmptyState />,\n headerProps: {\n mainTitle: i18n.text('Workflow'),\n secondTitle: getSecondTitle(workflowTasksContext?.total),\n rightContent: <AddWorkflowButton />\n },\n hidden: !enabledWorkflowButton\n },\n {\n buttonProps: {\n id: ActivePanel.Collaboration,\n icon: CollaborationButton,\n tooltipTitle: i18n.text('Collaboration')\n },\n content: collaborationTotal ? <CollaborationList /> : <CollaborationPanelEmptyState />,\n headerProps: {\n mainTitle: i18n.text('Collaboration'),\n secondTitle: getSecondTitle(collaborationTotal)\n },\n hidden: !enabledCollaborationButton\n },\n {\n buttonProps: {\n id: ActivePanel.History,\n icon: HistoryIcon,\n tooltipTitle: i18n.text('History')\n },\n content: isProfilePersisted ? (\n <HistoryView\n isLoading={isLoading}\n historyWithTotal={historyWithTotal}\n contributorsUris={historicUris}\n entityUri={entity?.uri}\n historyEvent={historyEvent}\n onLoadMore={onLoadMore}\n canLoadMore={canLoadMore}\n />\n ) : (\n <HistoryPanelEmptyState />\n ),\n headerProps: {\n content: (\n <HistoryHeader\n total={isProfilePersisted ? (historicUris?.length || 0) + 1 : undefined}\n entityType={getEntityType(metadata, entity?.type)}\n filter={historyFilter}\n onApplyFilter={onApplyFilter}\n />\n )\n }\n },\n {\n buttonProps: {\n id: ActivePanel.DBConnector,\n icon: ConnectorsIcon,\n tooltipTitle: i18n.text('D&B Connector')\n },\n content: <DBConnectorsList />,\n headerProps: {\n mainTitle: i18n.text('D&B Connector')\n },\n hidden: !isDBConnectorSideViewEnabled\n }\n ];\n\n const visibleElements = reject(propEq('hidden', true))(elements);\n\n useEffect(() => {\n if (elements[active]?.hidden) {\n resetActive();\n }\n }, [active, elements, resetActive, visibleElements]);\n\n return (\n <div className={styles.wrapper}>\n <SidePanel open={isOpen} width={DEFAULT_PANEL_WIDTH}>\n {!elements[active]?.hidden && (\n <>\n <SidePanelContentHeader {...elements[active]?.headerProps} onClose={resetActive} />\n {elements[active]?.content}\n </>\n )}\n </SidePanel>\n <SideButtonsPanel\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(elements)}\n onButtonClick={toggleActive}\n activeIndexId={active}\n />\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst accordionSummaryHeight = '48px';\nconst defaultBorderStyle = '1px solid rgba(0, 0, 0, .125)';\n\nconst useStyles = makeStyles((theme) => ({\n accordion: {\n borderTop: defaultBorderStyle,\n borderBottom: defaultBorderStyle,\n fontSize: '13px',\n boxShadow: 'none',\n '&:not(:first-child)': {\n borderTop: 0\n },\n '&:before': {\n display: 'none'\n },\n '&$accordionExpanded': {\n margin: 'auto'\n }\n },\n accordionExpanded: {},\n accordionSummary: {\n display: 'flex',\n alignItems: 'center',\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight,\n '&$accordionSummaryExpanded': {\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight\n }\n },\n accordionSummaryHeading: {\n flex: 1,\n fontSize: theme.typography.pxToRem(13),\n fontWeight: theme.typography.fontWeightRegular\n },\n accordionSummaryExpanded: {},\n accordionSummaryContent: {\n display: 'flex',\n alignItems: 'center'\n },\n accordionDetails: {\n maxHeight: '21vh',\n overflow: 'auto',\n paddingTop: 0,\n paddingBottom: 0,\n '& ul': {\n paddingLeft: '23px',\n marginTop: '3px'\n },\n '& li': {\n paddingLeft: '9px',\n paddingBottom: '8px'\n }\n },\n parents: {\n color: theme.palette.text.primary\n },\n errorWrapper: {\n lineHeight: '18px',\n display: 'flex',\n flexDirection: 'column'\n },\n errorTitle: {\n display: 'flex',\n alignItems: 'center'\n },\n goToIcon: {\n marginLeft: '4px'\n },\n errorsAccordion: {\n backgroundColor: '#FFF4F6',\n borderColor: '#FFB8B3'\n },\n errorsAccordionDetails: {\n color: '#DD2C00'\n },\n warningsAccordion: {\n backgroundColor: '#FFF9ED',\n borderColor: '#FFDD91'\n },\n warningsAccordionDetails: {\n color: '#CC7500'\n },\n icon: {\n marginRight: '8px'\n },\n errorIcon: {\n fill: '#FF1744'\n },\n warningIcon: {\n fill: '#F9A825'\n }\n}));\n\nexport default useStyles;\n","import React, {memo, ReactNode, ElementType} from 'react';\nimport classnames from 'classnames';\nimport {Accordion as Accordion} from '@material-ui/core';\nimport {AccordionSummary as AccordionSummary} from '@material-ui/core';\nimport {AccordionDetails as AccordionDetails} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport useStyles from '../styles';\n\nimport {AttributeError} from '@reltio/mdm-sdk';\n\ntype Props = {\n panels: {\n id: string;\n title: string;\n icon: ReactNode;\n items: AttributeError[];\n accordionClassName: string;\n accordionDetailsClassName: string;\n }[];\n expandedPanelId: string;\n onToggle: (id: string) => (e, isExpanded: boolean) => void;\n ErrorComponent: ElementType;\n};\n\nexport const ErrorsPanel = memo(({panels, expandedPanelId, onToggle, ErrorComponent}: Props) => {\n const styles = useStyles();\n\n return panels.length > 0 ? (\n <div>\n {panels.map(({id, icon, title, items, accordionClassName, accordionDetailsClassName}) => (\n <Accordion\n key={id}\n square\n expanded={expandedPanelId === id}\n onChange={onToggle(id)}\n className={accordionClassName}\n classes={{root: styles.accordion, expanded: styles.accordionExpanded}}\n >\n <AccordionSummary\n classes={{\n root: styles.accordionSummary,\n expanded: styles.accordionSummaryExpanded,\n content: styles.accordionSummaryContent\n }}\n expandIcon={<ExpandMoreIcon />}\n >\n {icon}\n <Typography className={styles.accordionSummaryHeading}>{title}</Typography>\n </AccordionSummary>\n <AccordionDetails className={classnames(styles.accordionDetails, accordionDetailsClassName)}>\n <ul>\n {items.map((error, i) => (\n <ErrorComponent key={i} error={error} />\n ))}\n </ul>\n </AccordionDetails>\n </Accordion>\n ))}\n </div>\n ) : null;\n});\n\nErrorsPanel.displayName = 'ErrorsPanel';\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"18\",\n height: \"18\",\n viewBox: \"0 0 18 18\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M14.245 12.75c0 .825-.467 1.5-1.045 1.5H4.8c-.583 0-1.05-.675-1.05-1.5v-7.5c0-.832.467-1.5 1.05-1.5h8.4c.578 0 1.05.668 1.05 1.5l-.005 7.5zM9.75 9.96v1.642l3-2.805L9.75 6v1.598c-2.918.404-4.08 2.4-4.5 4.402 1.043-1.402 2.415-2.04 4.5-2.04z\",\n fill: \"#000\",\n fillOpacity: \".54\"\n})));","import {equals, identity, omit} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {\n AttributeError,\n AttributeType,\n AttributeValuePathItemType,\n ErrorSource,\n ErrorType,\n findAttributeTypeByUri,\n Metadata\n} from '@reltio/mdm-sdk';\n\nconst clearError = omit(['deactivated', 'path']);\nexport const areErrorsEqual = (errors1: AttributeError[] = [], errors2: AttributeError[] = []) =>\n errors1.length === errors2.length && equals(errors1.map(clearError), errors2.map(clearError));\n\nexport const getDisplayedErrorMessage = (\n metadata: Metadata,\n {type, source, message, attributeTypeUri = '', attributeType}: AttributeError\n) => {\n if (type === ErrorType.missed && source === ErrorSource.local) {\n const attrType: AttributeType = attributeType || findAttributeTypeByUri(metadata, attributeTypeUri);\n return attrType ? i18n.text('${attribute} is required', {attribute: attrType.label}) : message;\n }\n return message;\n};\n\nexport const getDisplayedErrorPath = ({path: errorPath, uri}: AttributeError) => {\n return errorPath\n ?.slice(0, uri ? errorPath.length - 1 : errorPath.length)\n .filter(({type}) =>\n [AttributeValuePathItemType.attributeValue, AttributeValuePathItemType.relationConnection].includes(type)\n )\n .map(({label}) => label)\n .filter(identity)\n .join(' / ');\n};\n","import React, {memo, useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {AttributeError, Metadata} from '@reltio/mdm-sdk';\nimport HyperlinkIcon from '../icons/hyperlink.svg';\nimport {SmallIconButtonWithTooltip, ScrollToErrorContext} from '@reltio/components';\nimport {getDisplayedErrorMessage, getDisplayedErrorPath} from '../helpers';\n\nimport useStyles from '../styles';\n\ntype Props = {\n error: AttributeError;\n};\n\nexport const Error = memo(({error}: Props) => {\n const styles = useStyles();\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const isEditableMode: boolean = useSelector(mdmModule.selectors.getIsEditableMode);\n const displayedMessage = getDisplayedErrorMessage(metadata, error);\n const displayedErrorPath = getDisplayedErrorPath(error);\n const {highlightError} = useContext(ScrollToErrorContext);\n const showLink = error.uri || (error.parentUri && error.attributeTypeUri);\n\n return (\n <li>\n <div className={styles.errorWrapper}>\n <span className={styles.errorTitle}>\n {displayedMessage}\n {showLink && isEditableMode && (\n <SmallIconButtonWithTooltip\n icon={HyperlinkIcon}\n size=\"XXS\"\n onClick={() => highlightError(error)}\n tooltipTitle={i18n.text('Go to error')}\n className={styles.goToIcon}\n />\n )}\n </span>\n {displayedErrorPath && <span className={styles.parents}>{displayedErrorPath}</span>}\n </div>\n </li>\n );\n});\n\nError.displayName = 'Error';\n","import {useRef} from 'react';\nimport {areErrorsEqual} from './helpers';\n\nexport const useCachedErrors = (allErrors) => {\n const cacheForAllErrors = useRef(allErrors);\n const areEqualErrors = areErrorsEqual(allErrors, cacheForAllErrors.current);\n if (!areEqualErrors) {\n cacheForAllErrors.current = allErrors;\n }\n return cacheForAllErrors.current;\n};\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {partition} from 'ramda';\nimport ErrorIcon from '@material-ui/icons/Warning';\nimport WarningIcon from '@material-ui/icons/Error';\nimport mdmModule from '@reltio/mdm-module';\nimport {AttributeError, isCriticalError} from '@reltio/mdm-sdk';\n\nimport useStyles from './styles';\n\nimport {ErrorsPanel} from './components/ErrorsPanel';\nimport {Error} from './components/Error';\nimport {useCachedErrors} from './useCachedErrors';\n\nexport const ProfileErrorsPanel = () => {\n const styles = useStyles();\n const allErrors = useSelector(mdmModule.selectors.getProfileErrors);\n const cachedAllErrors = useCachedErrors(allErrors);\n\n const [errors, warnings]: [AttributeError[], AttributeError[]] = useMemo(\n () => partition(isCriticalError, cachedAllErrors),\n [cachedAllErrors]\n );\n const [expandedPanelId, setExpandedPanelId] = useState(null);\n const panels = useMemo(\n () =>\n [\n {\n id: 'errors',\n title: i18n.text('${number} ${errors}', {\n number: errors.length,\n errors: errors.length === 1 ? i18n.text('error') : i18n.text('errors')\n }),\n icon: <ErrorIcon className={classnames(styles.icon, styles.errorIcon)} />,\n items: errors,\n accordionClassName: styles.errorsAccordion,\n accordionDetailsClassName: styles.errorsAccordionDetails\n },\n {\n id: 'warnings',\n title: i18n.text('${number} ${warnings}', {\n number: warnings.length,\n warnings: warnings.length === 1 ? i18n.text('warning') : i18n.text('warnings')\n }),\n icon: <WarningIcon className={classnames(styles.icon, styles.warningIcon)} />,\n items: warnings,\n accordionClassName: styles.warningsAccordion,\n accordionDetailsClassName: styles.warningsAccordionDetails\n }\n ].filter(({items}) => items.length > 0),\n [errors, warnings, styles]\n );\n\n useEffect(() => {\n setExpandedPanelId('errors');\n }, [errors]);\n\n const handleChange = useCallback(\n (panelId: string) => (event, isExpanded: boolean) => {\n setExpandedPanelId(isExpanded ? panelId : null);\n },\n []\n );\n\n return panels.length > 0 ? (\n <ErrorsPanel panels={panels} expandedPanelId={expandedPanelId} onToggle={handleChange} ErrorComponent={Error} />\n ) : null;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\ntype Props = {\n maxWidth?: number;\n};\n\nexport const useStyles = makeStyles((theme) => ({\n perspectiveView: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\n overflowX: 'hidden',\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.palette.background.default\n },\n scrollWrapper: {\n flexGrow: 1,\n overflowY: 'auto'\n },\n emptyState: {\n backgroundColor: '#FAFAFA',\n height: '100%'\n },\n profileWrapper: ({maxWidth}: Props) => ({\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n flexGrow: 1,\n maxWidth: maxWidth ? `${maxWidth}px` : '100%'\n }),\n profileContainer: {\n display: 'flex',\n overflow: 'hidden',\n flexGrow: 1\n },\n '@global div[role=tooltip]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n '@global div[role=presentation]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n }\n}));\n","import React, {memo, useCallback, useContext, useEffect, useMemo, useState, useRef} from 'react';\nimport i18n from 'ui-i18n';\nimport {useDispatch, useSelector} from 'react-redux';\nimport hash from 'object-hash';\nimport {\n debounce,\n Entity,\n fixNonUniqViewsIds,\n getProfileObjectIdsForCollaboration,\n ProfilePerspectiveConfig\n} from '@reltio/mdm-sdk';\nimport mdm, {HistoryEvent, profile} from '@reltio/mdm-module';\nimport {\n CollaborationContext,\n WorkflowTasksContext,\n UsersContext,\n EMPTY_STATE_ICONS,\n EMPTY_STATE_VARIANTS,\n EmptyState,\n LinearLoadIndicator,\n ProfilePerspectiveViewContext,\n PopupBoundariesContext,\n SearchValueContext,\n useSavedStateForEntityType,\n useCollaboration,\n useUsers,\n useWorkflowTasks,\n HistoryDiffContext,\n useHistoryDiff,\n useHistorySlice,\n ScrollToErrorProvider\n} from '@reltio/components';\n\nimport {ProfileSavedState, Layout} from '../../types';\n\nimport {ProfileLayout} from '../ProfileLayout';\nimport {Notifications} from '../Notifications';\nimport {PerspectiveProfileBand} from '../PerspectiveProfileBand';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\nimport {ProfileErrorsPanel} from '../ProfileErrorsPanel';\nimport {useProfileValidation} from '../hooks/useProfileValidation';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: ProfilePerspectiveConfig;\n saveState: (state: Record<string, ProfileSavedState>) => void;\n getSavedState: () => Promise<Record<string, ProfileSavedState>>;\n};\n\nconst SAVE_STATE_DEBOUNCE_DELAY = 1000;\nconst emptyState = {} as ProfileSavedState;\nconst ProfilePerspectiveView = memo(({config, saveState, getSavedState}: Props) => {\n const styles = useStyles({maxWidth: config?.maxWidth});\n const dispatch = useDispatch();\n const getSavedStateAndFix = useCallback(() => {\n return getSavedState().then((state) => (state.layout ? {} : state));\n }, [getSavedState]);\n const scrollWrapperRef = useRef<HTMLDivElement>();\n const debouncedSaveState = useCallback(debounce(saveState, SAVE_STATE_DEBOUNCE_DELAY), [saveState]) as (\n state: Record<string, ProfileSavedState>\n ) => void;\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n const nestedRoute = config?.nestedRoute ? `/${config.nestedRoute}` : '';\n const entityTypeUri = entity ? entity.type : null;\n const savedStateKey = entityTypeUri && config ? entityTypeUri + nestedRoute : null;\n\n const {\n isLoaded,\n savedState = emptyState,\n updateSavedState\n } = useSavedStateForEntityType<ProfileSavedState>({\n getSavedState: getSavedStateAndFix,\n saveState: debouncedSaveState,\n entityTypeUri: savedStateKey\n });\n const [layout, setLayout] = useState<Layout>([]);\n const [views, setViews] = useState<ProfilePerspectiveConfig['views']>([]);\n\n const configHash = useMemo(() => hash(config), [config]);\n\n const isHistoryActive = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const objectIds = useMemo(() => getProfileObjectIdsForCollaboration(entity), [entity]);\n const collaboration = useCollaboration({objectIds});\n const emptyCollaboration = useContext(CollaborationContext);\n const users = useUsers();\n const workflowTasks = useWorkflowTasks(config?.workflow);\n const historyEvent: HistoryEvent = useSelector(mdm.selectors.getHistoryEvent);\n useHistorySlice({entity, historyEvent});\n const historyDiff = useHistoryDiff();\n\n const keywordValue = useSelector(mdm.selectors.getSearchKeyword)?.value || '';\n\n useEffect(() => {\n if (isLoaded) {\n const isConfigChanged = configHash !== savedState.configHash;\n const {views: fixedViews, layout: fixedLayout} = fixNonUniqViewsIds({\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 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 if (scrollWrapperRef.current) {\n scrollWrapperRef.current.scrollTop = 0;\n }\n }, [entity?.uri]);\n\n useProfileValidation();\n\n const handleLayoutChange = useCallback(\n (layout: Layout) => {\n updateSavedState({layout, views, configHash});\n setLayout(layout);\n },\n [updateSavedState, configHash, views]\n );\n const boundariesElement = scrollWrapperRef.current;\n\n const popupBoundariesValue = useMemo(\n () => ({\n element: boundariesElement,\n priority: ['top', 'bottom']\n }),\n [boundariesElement]\n );\n return (\n <ProfilePerspectiveViewContext.Provider value={true}>\n <UsersContext.Provider value={users}>\n <CollaborationContext.Provider value={isHistoryActive ? emptyCollaboration : collaboration}>\n <WorkflowTasksContext.Provider value={workflowTasks}>\n <HistoryDiffContext.Provider value={historyDiff}>\n <SearchValueContext.Provider value={keywordValue}>\n <ScrollToErrorProvider>\n <div className={styles.perspectiveView}>\n {(!isLoaded || !entity?.uri) && <LinearLoadIndicator />}\n {isLoaded && entity?.uri ? (\n <div className={styles.profileContainer}>\n <div className={styles.profileWrapper}>\n <PerspectiveProfileBand profileBandConfig={config.profileBand} />\n {!isHistoryActive && <ProfileErrorsPanel />}\n <div ref={scrollWrapperRef} className={styles.scrollWrapper}>\n <PopupBoundariesContext.Provider value={popupBoundariesValue}>\n <ProfileLayout\n layout={layout}\n onLayoutChanged={handleLayoutChange}\n views={views}\n />\n </PopupBoundariesContext.Provider>\n </div>\n </div>\n <RightSidePanel />\n </div>\n ) : (\n <div className={styles.emptyState}>\n <EmptyState\n LogoRenderer={EMPTY_STATE_ICONS.NO_DATA}\n text={i18n.text('No data to display.')}\n variant={EMPTY_STATE_VARIANTS.embedded}\n />\n </div>\n )}\n <Notifications />\n </div>\n </ScrollToErrorProvider>\n </SearchValueContext.Provider>\n </HistoryDiffContext.Provider>\n </WorkflowTasksContext.Provider>\n </CollaborationContext.Provider>\n </UsersContext.Provider>\n </ProfilePerspectiveViewContext.Provider>\n );\n});\n\nProfilePerspectiveView.displayName = 'ProfilePerspectiveView';\n\nexport {ProfilePerspectiveView};\n","import {useCallback, useEffect} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {debounce, Entity, isDataTenantEntity, isTempUri, Mode} from '@reltio/mdm-sdk';\n\nexport const useProfileValidation = () => {\n const dispatch = useDispatch();\n const isValidateReadMode: boolean = useSelector(mdmModule.selectors.getValidateReadMode);\n const entity: Entity = useSelector(mdmModule.selectors.getEntity) || ({} as Entity);\n const {uri, updatedTime} = entity;\n const isDTEntity = isDataTenantEntity(entity);\n const mode: Mode = useSelector(mdmModule.selectors.getMode);\n const profileViews = useSelector(mdmModule.selectors.getProfileViews);\n const hasProfileViews = profileViews && profileViews.length > 0;\n\n const validate = useCallback(\n debounce((needDispatch: boolean) => {\n if (needDispatch) {\n dispatch(profile.actions.validateProfile());\n }\n }, 500),\n [dispatch]\n );\n\n useEffect(() => {\n const needDispatch =\n isValidateReadMode && !isDTEntity && uri && !isTempUri(uri) && mode === Mode.Viewing && hasProfileViews;\n validate(needDispatch);\n }, [validate, isDTEntity, isValidateReadMode, updatedTime, uri, mode, hasProfileViews]);\n};\n","import React, {useCallback, useMemo} from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport MomentUtils from '@date-io/moment';\nimport {identity} from 'ramda';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport {ErrorPopup, SandboxAPIContext, SnackbarContext, useSnackbar, ViewIdContext} from '@reltio/components';\nimport {convertOldProfileConfig, ProfilePerspectiveConfig, promisifyCallback, QxSandboxApi} from '@reltio/mdm-sdk';\nimport {ProfileSavedState} from '../types';\nimport ProfilePerspectiveView from '../components/ProfilePerspectiveView';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'profilePerspective',\n disableGlobal: true\n});\n\ntype Props = {\n config: ProfilePerspectiveConfig;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n saveState: (state: Record<string, ProfileSavedState>) => void;\n getSavedState: (clb: (state: Record<string, ProfileSavedState>) => void) => void;\n qxSandboxApi?: QxSandboxApi;\n};\n\nconst ProfilePerspective = ({config, store, onResize = identity, saveState, getSavedState, qxSandboxApi}: Props) => {\n const getSavedStatePromisified: () => Promise<Record<string, ProfileSavedState>> = useCallback(\n promisifyCallback(getSavedState),\n [getSavedState]\n );\n const {SnackbarRenderer, showSnackbarMessage} = useSnackbar();\n\n const processedConfig = useMemo(() => config && convertOldProfileConfig(config), [config]);\n\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={processedConfig?.id}>\n <SnackbarContext.Provider value={showSnackbarMessage}>\n <SandboxAPIContext.Provider value={qxSandboxApi}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <>\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 />\n )}\n <ErrorPopup showErrorFromStore={true} />\n <SnackbarRenderer />\n </>\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </SandboxAPIContext.Provider>\n </SnackbarContext.Provider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default ProfilePerspective;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n titleContainer: {\n overflow: 'hidden',\n fontSize: '16px',\n fontWeight: 'normal',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n alignItems: 'center',\n display: 'flex',\n minHeight: '48px',\n color: theme.palette.text.secondary\n },\n link: {\n fontSize: '16px',\n fontWeight: 'normal'\n },\n icon: {\n height: '18px',\n color: theme.palette.text.secondary\n },\n totalCaption: {\n lineHeight: 'inherit',\n fontSize: '14px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px'\n },\n totalNumber: {\n fontSize: '16px',\n color: 'rgba(0,0,0,0.87)',\n marginRight: '5px',\n fontWeight: 500\n }\n}));\n","import React, {useCallback, useContext} from 'react';\nimport {useDispatch} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {FacetViewHeader, Spacer, ViewIdContext} from '@reltio/components';\nimport {Link as Link} from '@material-ui/core';\nimport ArrowForwardIosRoundedIcon from '@material-ui/icons/ArrowForwardIosRounded';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n total?: number;\n};\n\nexport const TagListHeader = ({total = 0}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const viewId = useContext(ViewIdContext);\n\n const switchToProfile = useCallback(() => {\n dispatch(mdmModuleUi.actions.openPerspective({perspectiveId: 'profile', viewId}));\n }, [dispatch, viewId]);\n\n return (\n <FacetViewHeader title=\"\">\n <div className={styles.titleContainer}>\n <Link\n component=\"button\"\n variant=\"caption\"\n className={styles.link}\n onClick={switchToProfile}\n underline=\"none\"\n >\n {i18n.text('Profile')}\n </Link>\n <ArrowForwardIosRoundedIcon className={styles.icon} />\n {i18n.text('Tags')}\n </div>\n <Spacer />\n <Typography className={styles.totalCaption} variant=\"caption\">\n <span className={styles.totalNumber}>{i18n.number(total, '0,0')}</span>\n {i18n.text('total profiles')}\n </Typography>\n </FacetViewHeader>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n toolbar: {\n display: 'flex',\n flexShrink: 0,\n background: 'white',\n borderBottom: '1px solid rgba(0,0,0,0.1)',\n boxSizing: 'border-box',\n paddingLeft: '16px'\n },\n avatar: {\n color: 'rgba(0, 0, 0, 0.38)',\n marginRight: '12px'\n },\n label: {\n fontSize: '20px',\n letterSpacing: '0.25px',\n lineHeight: '1.2',\n fontWeight: 500,\n color: theme.palette.text.primary,\n wordBreak: 'break-word'\n }\n}));\n","import React from 'react';\nimport TagIcon from '@material-ui/icons/LocalOffer';\nimport {Toolbar as Toolbar} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {useStyles} from './styles';\n\ntype Props = {\n label: string;\n};\n\nexport const TagProfileBand = ({label}: Props) => {\n const styles = useStyles();\n return (\n <Toolbar className={styles.toolbar}>\n <TagIcon className={styles.avatar} />\n <Typography variant=\"h6\" className={styles.label}>\n {label}\n </Typography>\n </Toolbar>\n );\n};\n","import {useCallback, useMemo} from 'react';\nimport {map} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n Entity,\n getFilteredEntities,\n getFilteredEntitiesFromDataTenant,\n getTotals,\n getTotalFromDataTenant,\n TotalResponse,\n SearchFilter,\n GlobalSearchRequestOptions,\n getDataTenantFromEntityUri,\n enrichEntityWithDataTenant\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\n\ntype Props = {\n entityUri: string;\n tag: string;\n};\n\nexport const useTagsProvider = ({entityUri, tag}: Props) => {\n const globalSearchRequestOptions: GlobalSearchRequestOptions = useSelector(\n mdmModule.selectors.getGlobalSearchRequestOptions\n );\n const tenant: string = useSelector(mdmModule.selectors.getTenant);\n const dtssPath: string = useSelector(mdmModule.selectors.getDtssPath);\n const dataTenant = useMemo(() => getDataTenantFromEntityUri(entityUri), [entityUri]);\n const filters: SearchFilter[] = useMemo(() => {\n return [\n {\n filter: 'equals',\n fieldName: 'tags',\n values: [tag]\n }\n ];\n }, [tag]);\n\n const isDT = !!dataTenant;\n\n const getEntities = useCallback(\n (filters: SearchFilter[] = [], options = {}): Promise<Entity[]> => {\n const requestOptions = {\n select: 'uri,label,type,secondaryLabel,defaultProfilePicValue,startDate,endDate',\n ...options\n };\n return isDT\n ? getFilteredEntitiesFromDataTenant({\n filters,\n options: requestOptions,\n customerTenant: tenant,\n dataTenant,\n dtssPath\n }).then(map(enrichEntityWithDataTenant(dataTenant)))\n : getFilteredEntities(filters, requestOptions);\n },\n [isDT, dataTenant, tenant, dtssPath]\n );\n\n const requestEntities = useCallback(\n (max, offset): Promise<Entity[]> => {\n return getEntities(filters, {offset, max, ...globalSearchRequestOptions});\n },\n [filters, globalSearchRequestOptions, getEntities]\n );\n\n const requestTotal = useCallback((): Promise<number> => {\n const options = globalSearchRequestOptions;\n return (isDT\n ? getTotalFromDataTenant({\n filters,\n options,\n customerTenant: tenant,\n dataTenant,\n dtssPath\n })\n : getTotals(filters, options)\n ).then((json) => (json as TotalResponse).total);\n }, [filters, globalSearchRequestOptions, isDT, dataTenant, tenant, dtssPath]);\n\n return {requestEntities, requestTotal};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n perspectiveView: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.palette.background.default\n },\n tagsContainer: {\n display: 'flex'\n },\n fullHeight: {\n flexGrow: 1,\n height: 0\n },\n tagsView: {\n margin: '16px',\n width: '100%',\n paddingTop: '4px'\n },\n listContainer: {\n flex: 1,\n display: 'flex',\n overflow: 'hidden',\n position: 'relative',\n flexDirection: 'column',\n minHeight: '4px'\n },\n entitiesList: {\n overflowY: 'auto',\n flexGrow: 1\n },\n pagination: {\n flexGrow: 0\n }\n}));\n","import React, {memo, useEffect, useRef, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport mdmModule from '@reltio/mdm-module';\nimport {GlobalSearchRequestOptions} from '@reltio/mdm-sdk';\nimport {BasicTablePagination, BasicView, LinearLoadIndicator, ProfilesList} from '@reltio/components';\nimport {TagListHeader} from './components/TagListHeader';\nimport {TagProfileBand} from './components/TagProfileBand';\nimport {useTag} from './hooks/useTag';\n\nimport {useStyles} from './styles';\n\nconst ROWS_PER_PAGE_OPTIONS = [25, 50, 100];\n\ntype Props = {\n tag?: string;\n entityUri?: string;\n};\n\nconst TagPerspectiveView = memo(({tag, entityUri}: Props) => {\n const styles = useStyles();\n\n const [rowsPerPage, setRowsPerPage] = useState(ROWS_PER_PAGE_OPTIONS[0]);\n const [page, setPage] = useState(0);\n\n const globalSearchRequestOptions: GlobalSearchRequestOptions = useSelector(\n mdmModule.selectors.getGlobalSearchRequestOptions\n );\n\n useEffect(() => {\n setPage(0);\n }, [tag, entityUri, globalSearchRequestOptions]);\n\n const {isLoading, total, entities} = useTag({tag, entityUri, page, rowsPerPage});\n const refScrollBlock = useRef(null);\n\n useEffect(() => {\n if (refScrollBlock.current) {\n refScrollBlock.current.scrollTop = 0;\n }\n }, [entities]);\n\n const hasPagination = total > ROWS_PER_PAGE_OPTIONS[0];\n\n return (\n <div className={styles.perspectiveView}>\n <TagProfileBand label={tag} />\n <div className={classnames(styles.tagsContainer, {[styles.fullHeight]: hasPagination})}>\n <BasicView className={styles.tagsView}>\n <TagListHeader total={total} />\n <div className={styles.listContainer}>\n {isLoading && <LinearLoadIndicator />}\n {total > 0 && (\n <div className={styles.entitiesList} ref={refScrollBlock}>\n <ProfilesList entities={entities} />\n </div>\n )}\n {hasPagination && (\n <div className={styles.pagination}>\n <BasicTablePagination\n count={total}\n rowsPerPageOptions={ROWS_PER_PAGE_OPTIONS}\n rowsPerPage={rowsPerPage}\n page={page}\n onChangePage={setPage}\n onChangeRowsPerPage={setRowsPerPage}\n />\n </div>\n )}\n </div>\n </BasicView>\n </div>\n </div>\n );\n});\n\nTagPerspectiveView.displayName = 'TagPerspectiveView';\n\nexport {TagPerspectiveView};\n","import {useCallback, useEffect, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {useDispatch} from 'react-redux';\nimport {useSafePromise} from '@reltio/components';\nimport {ui} from '@reltio/mdm-module';\nimport {Entity, getRequestErrorMessage} from '@reltio/mdm-sdk';\nimport {useTagsProvider} from './useTagsProvider';\n\ntype Props = {\n tag: string;\n entityUri: string;\n page: number;\n rowsPerPage: number;\n};\n\nexport const useTag = ({tag, entityUri, page = 0, rowsPerPage = 50}: Props) => {\n const dispatch = useDispatch();\n\n const safeRequestTotalPromise = useSafePromise();\n const safeRequestEntitiesPromise = useSafePromise();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [total, setTotal] = useState<number>(0);\n const [entities, setEntities] = useState<Entity[]>([]);\n\n const {requestEntities, requestTotal} = useTagsProvider({entityUri, tag});\n\n const onError = useCallback(\n (e) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(e, i18n.text('Something went wrong'))));\n setTotal(0);\n },\n [dispatch]\n );\n\n useEffect(() => {\n safeRequestTotalPromise(requestTotal()).then(setTotal).catch(onError);\n }, [requestTotal, safeRequestTotalPromise, onError]);\n\n useEffect(() => {\n setIsLoading(true);\n safeRequestEntitiesPromise(requestEntities(rowsPerPage, page * rowsPerPage))\n .then(setEntities)\n .catch(onError)\n .finally(() => setIsLoading(false));\n }, [page, rowsPerPage, requestEntities, safeRequestEntitiesPromise, onError]);\n\n return {isLoading, total, entities};\n};\n","import React from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport {identity} from 'ramda';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {TagPerspectiveConfig} from '@reltio/mdm-sdk';\nimport TagPerspectiveView from '../components/TagPerspectiveView';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'tagPerspective',\n disableGlobal: true\n});\n\ntype Props = {\n config: TagPerspectiveConfig;\n tag?: string;\n entityUri?: string;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n};\n\nconst TagPerspective = ({config, tag, entityUri, store, onResize = identity}: Props) => {\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n {config && <TagPerspectiveView tag={tag} entityUri={entityUri} />}\n <ErrorPopup showErrorFromStore={true} />\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default TagPerspective;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n addButton: {\n marginLeft: '12px',\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)'\n },\n label: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n }\n});\n","import AddIcon from '@material-ui/icons/Add';\nimport {Button as Button} from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport i18n from 'ui-i18n';\nimport {useStyles} from './styles';\n\nconst AddRelationButton = ({onClick}) => {\n const styles = useStyles();\n return (\n <Button color=\"primary\" className={styles.addButton} onClick={onClick}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.label}>{i18n.text('Add')}</div>\n </Button>\n );\n};\n\nAddRelationButton.propTypes = {\n onClick: PropTypes.func\n};\n\nexport default AddRelationButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst removedStyle = {\n textDecoration: 'line-through',\n color: 'rgba(0,0,0,.54)'\n};\n\nconst inactiveStyle = {\n color: 'rgba(0,0,0,.54)'\n};\n\nexport const useStyles = makeStyles((theme) => ({\n headCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n fontSize: '12px'\n },\n entityCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%'\n },\n entityLabel: {\n fontSize: '15px',\n color: theme.palette.primary.main,\n cursor: 'pointer',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n '$row-cell--removed &': removedStyle,\n '$row-cell--inactive &': inactiveStyle\n },\n entityAvatar: {\n transform: 'scale(0.7)',\n margin: '0 10px'\n },\n rowCell: {\n fontSize: '13px',\n overflow: 'hidden'\n },\n 'row-cell--sorted': {\n color: 'rgba(0,0,0,0.87)'\n },\n 'row-cell--removed': {\n pointerEvents: 'none',\n '& > :not($entityCell)': removedStyle\n },\n 'row-cell--inactive': inactiveStyle\n}));\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport classnames from 'classnames';\nimport {checkRemoved, isActiveObject} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\nconst RowCellRenderer = ({cell, CellValueRenderer, rowValue: {connection}, isSorted, ...otherProps}) => {\n const styles = useStyles();\n const isRemoved = checkRemoved(connection);\n const isActive = isActiveObject(connection.relation) && isActiveObject(connection.entity);\n\n return (\n <div\n className={classnames(\n {\n [styles['row-cell--sorted']]: isSorted,\n [styles['row-cell--removed']]: isRemoved,\n [styles['row-cell--inactive']]: !isActive\n },\n styles.rowCell\n )}\n >\n {cell.values.map((value, index) => (\n <CellValueRenderer key={index} value={value} {...otherProps} />\n ))}\n </div>\n );\n};\n\nRowCellRenderer.propTypes = {\n rowValue: PropTypes.object,\n cell: PropTypes.object,\n CellValueRenderer: PropTypes.elementType,\n isSorted: PropTypes.bool\n};\n\nexport default RowCellRenderer;\n","import PropTypes from 'prop-types';\nimport React, {useContext} from 'react';\nimport {ui} from '@reltio/mdm-module';\nimport {always, pipe} from 'ramda';\nimport {useDispatch} from 'react-redux';\nimport {useStyles} from './styles';\nimport {EntityTypeType, getEntityUriForLink, getLabel} from '@reltio/mdm-sdk';\nimport {EntityTypeIcon, ExpandedValueTooltip, ViewIdContext} from '@reltio/components';\n\nconst EntityProfileRenderer = ({value: {entityType, entity}}) => {\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const styles = useStyles();\n const entityLabel = getLabel(entity.entityLabel);\n const preparedUri = getEntityUriForLink({uri: entity.entityUri, dataTenant: entity.dataTenant});\n return (\n <div className={styles.entityCell}>\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <ExpandedValueTooltip value={entityLabel}>\n <span\n className={styles.entityLabel}\n onClick={pipe(always({uri: preparedUri, viewId}), ui.actions.openEntity, dispatch)}\n >\n {entityLabel}\n </span>\n </ExpandedValueTooltip>\n </div>\n );\n};\n\nEntityProfileRenderer.propTypes = {\n value: PropTypes.shape({\n entity: PropTypes.shape({\n entityUri: PropTypes.string,\n entityLabel: PropTypes.string\n }),\n entityType: EntityTypeType\n })\n};\n\nexport default EntityProfileRenderer;\n","import React from 'react';\n\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {withFilterAtBottom} from '@reltio/components';\nimport {useStyles} from './styles';\n\nconst HeadCellRenderer = (props) => {\n const styles = useStyles();\n return (\n <div className={styles.headCell}>\n <DefaultHeadCellRenderer {...props} />\n </div>\n );\n};\n\nexport default withFilterAtBottom(HeadCellRenderer);\n","import {getOvAttributeValuesByPath, getReadableAttributesList} from '@reltio/mdm-sdk';\nimport {chain, find, map, path, pipe, propEq, uniq} from 'ramda';\n\nconst getRelationTypes = pipe(\n map((rel) => rel.uri || rel),\n uniq\n);\n\nconst getRelationsAttributesFromMetadata = ({content: {inRelations = [], outRelations = []}}, {relationTypes}) =>\n pipe(\n getRelationTypes,\n chain((relationType) => pipe(find(propEq('uri', relationType)), getReadableAttributesList)(relationTypes))\n )([...inRelations, ...outRelations]);\n\nconst getRelationAttributeValues = (attrPath, relation) =>\n pipe(path(['object', 'attributes']), getOvAttributeValuesByPath(attrPath))(relation);\n\nexport {getRelationsAttributesFromMetadata, getRelationAttributeValues};\n","import EntityProfileRenderer from '../cell-renderers/EntityProfileRenderer';\nimport HeadCellRenderer from '../cell-renderers/HeadCellRenderer';\nimport {DefaultCellValueRenderer} from '@reltio/components';\nimport {assoc, map, pipe, reduce, slice, split} from 'ramda';\nimport {getEntityType, getRelationTypeLabelFromMetadata} from '@reltio/mdm-sdk';\nimport {getRelationAttributeValues} from '../../../core/relations';\n\nconst getAttrPathFromColumnId = pipe(split('.'), slice(2, Infinity));\n\nconst getRowValueByColumnId = (columnId, {entity, relation}, metadata) => {\n switch (columnId) {\n case 'entity.label':\n return {entity, entityType: getEntityType(metadata, entity.entityType)};\n case 'relation.label':\n return relation.relationLabel || getRelationTypeLabelFromMetadata(metadata, relation.relationType);\n case 'relation.activeness.startDate':\n return relation.startDate;\n case 'relation.activeness.endDate':\n return relation.endDate;\n default: {\n const attrPath = getAttrPathFromColumnId(columnId);\n return getRelationAttributeValues(attrPath, relation);\n }\n }\n};\n\nconst getBasicTableRowsData = (connections, columnsData, metadata) =>\n connections.map((connection) =>\n pipe(\n reduce((acc, {id}) => assoc(id, getRowValueByColumnId(id, connection, metadata), acc), {}),\n assoc('connection', connection)\n )(columnsData)\n );\n\nconst getNestedPathByColumnId = (columnId) => {\n if (columnId.startsWith('relation.attributes')) {\n const attrPath = getAttrPathFromColumnId(columnId);\n return attrPath.length > 1 ? attrPath.slice(0, -1) : null;\n } else {\n return null;\n }\n};\n\nconst getCellValueRenderer = (columnId) => {\n switch (columnId) {\n case 'entity.label':\n return EntityProfileRenderer;\n default:\n return DefaultCellValueRenderer;\n }\n};\n\nconst getColumnDataByColumnId = (columnData) => ({\n ...columnData,\n sortable: true,\n resizable: true,\n nestedPath: getNestedPathByColumnId(columnData.id),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: getCellValueRenderer(columnData.id)\n});\n\nconst getBasicTableColumnsData = map(getColumnDataByColumnId);\n\nexport {getBasicTableRowsData, getBasicTableColumnsData};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n tableContainer: {\n display: 'flex',\n fontFamily: 'Roboto',\n color: 'rgba(0,0,0,0.54)'\n },\n\n emptyData: {\n marginBottom: '30px'\n },\n\n '@global div[role=tooltip]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n\n '@global div[role=presentation]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n 'row-cell__buttons-container': {\n position: 'absolute'\n },\n 'row-cell__buttons-wrapper': {\n display: 'flex',\n paddingLeft: '10px',\n '& > button': {\n marginLeft: '-10px',\n transform: 'scale(0.9)'\n }\n }\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {IconButton as IconButton} from '@material-ui/core';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport i18n from 'ui-i18n';\n\nexport const EditButtons = ({canUpdate, canRemove, handleEditRelation, handleRemoveRelation}) => (\n <>\n {canUpdate && (\n <Tooltip title={i18n.text('Edit')}>\n <IconButton onClick={handleEditRelation}>\n <EditIcon />\n </IconButton>\n </Tooltip>\n )}\n {canRemove && (\n <Tooltip title={i18n.text('Remove')}>\n <IconButton onClick={handleRemoveRelation}>\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n )}\n </>\n);\nEditButtons.propTypes = {\n canUpdate: PropTypes.bool,\n canRemove: PropTypes.bool,\n handleEditRelation: PropTypes.func,\n handleRemoveRelation: PropTypes.func\n};\n\nexport default EditButtons;\n","import PropTypes from 'prop-types';\nimport React, {useCallback, useMemo, useState} from 'react';\nimport RowCellRenderer from './cell-renderers/RowCellRenderer';\nimport {BasicTable, ColumnFilterType, ColumnsDataType, SortingType} from '@reltio/components';\nimport {getBasicTableColumnsData, getBasicTableRowsData} from './helpers/dataHelpers';\nimport {useStyles} from './styles';\nimport {ConnectionType, MetadataType} from '@reltio/mdm-sdk';\nimport {path} from 'ramda';\nimport {checkRelationPermission} from './helpers/buttonsHelper';\nimport EditButtons from './EditButtons';\n\nconst MAX_HEIGHT = 477;\n\nconst RelationsTable = ({\n mode,\n columnsData,\n connections,\n metadata,\n sorting,\n onSort,\n filters,\n onFilter,\n onEditRelation,\n onRemoveRelation,\n basicTableRef,\n allowOnlyCreateNew\n}) => {\n const tableRowsData = useMemo(() => getBasicTableRowsData(connections, columnsData, metadata), [\n connections,\n columnsData,\n metadata\n ]);\n const tableColumnsData = useMemo(() => getBasicTableColumnsData(columnsData), [columnsData]);\n\n const styles = useStyles();\n\n const renderRowCell = useCallback(\n (props) => (\n <RowCellRenderer\n {...props}\n isSorted={!!sorting && sorting.field === props.columnData.id} /* eslint-disable-line react/prop-types */\n />\n ),\n [sorting]\n );\n\n const [hoverRowIndex, setHoverRowIndex] = useState(null);\n const {canRemove, canUpdate} = checkRelationPermission({\n mode,\n onRemoveRelation,\n onEditRelation,\n metadata,\n allowOnlyCreateNew,\n connection: path([hoverRowIndex, 'connection'], tableRowsData)\n });\n\n const handleOnRowHover = useCallback((rowIndex) => setHoverRowIndex(rowIndex), []);\n const handleEditRelation = useCallback(() => onEditRelation(path([hoverRowIndex, 'connection'], tableRowsData)), [\n hoverRowIndex,\n onEditRelation,\n tableRowsData\n ]);\n const handleRemoveRelation = useCallback(\n () => onRemoveRelation(path([hoverRowIndex, 'connection', 'relation', 'relationUri'], tableRowsData)),\n [hoverRowIndex, onRemoveRelation, tableRowsData]\n );\n\n const hoveredRowRightContent =\n canRemove || canUpdate ? (\n <EditButtons\n handleEditRelation={handleEditRelation}\n handleRemoveRelation={handleRemoveRelation}\n canRemove={canRemove}\n canUpdate={canUpdate}\n />\n ) : undefined;\n return (\n <div className={styles.tableContainer}>\n <BasicTable\n autosizing\n maxHeight={MAX_HEIGHT}\n columnsData={tableColumnsData}\n rowsData={tableRowsData}\n sorting={sorting}\n onSort={onSort}\n filters={filters}\n onFilter={onFilter}\n hoverStateEnabled={true}\n defaultColumnWidth={250}\n defaultColumnMinWidth={200}\n headRowHeight={56}\n renderRowCell={renderRowCell}\n onRowHover={handleOnRowHover}\n hoverRowIndex={hoverRowIndex}\n hoveredRowRightContent={hoveredRowRightContent}\n classes={{\n hoveredRowRightContentWrapper: styles['row-cell__buttons-wrapper'],\n hoveredRowRightContentContainer: styles['row-cell__buttons-container']\n }}\n ref={basicTableRef}\n resizeDebounceDelay={150}\n />\n </div>\n );\n};\n\nRelationsTable.propTypes = {\n mode: PropTypes.string,\n columnsData: ColumnsDataType,\n connections: PropTypes.arrayOf(ConnectionType),\n metadata: MetadataType,\n filters: PropTypes.objectOf(ColumnFilterType),\n onFilter: PropTypes.func,\n sorting: SortingType,\n onSort: PropTypes.func,\n onEditRelation: PropTypes.func,\n onRemoveRelation: PropTypes.func,\n basicTableRef: PropTypes.shape({current: PropTypes.object}),\n allowOnlyCreateNew: PropTypes.bool\n};\n\nexport default RelationsTable;\n","import {profile} from '@reltio/mdm-module';\nimport {checkMetadataForDelete, checkMetadataForUpdate, checkNew, checkRemoved, getRelationType} from '@reltio/mdm-sdk';\n\nconst checkRelationPermission = ({\n metadata,\n mode,\n connection,\n onRemoveRelation,\n onEditRelation,\n allowOnlyCreateNew\n}) => {\n const isNew = checkNew(connection);\n const isEditableMode = profile.mode.selectors.getIsEditableMode(mode);\n if (isEditableMode && connection && (!allowOnlyCreateNew || isNew)) {\n const {\n relation: {relationType}\n } = connection;\n const isRemoved = checkRemoved(connection);\n const relationTypeMetadata = getRelationType(metadata, relationType);\n const canRemove = onRemoveRelation && !isRemoved && checkMetadataForDelete(mode, relationTypeMetadata);\n const canUpdate = onEditRelation && !isRemoved && checkMetadataForUpdate(mode, relationTypeMetadata);\n return {canRemove, canUpdate};\n } else {\n return {canRemove: false, canUpdate: false};\n }\n};\n\nexport {checkRelationPermission};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n popupContent: {\n padding: '19px 23px'\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n }\n}));\n","import React, {useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Popover as Popover} from '@material-ui/core';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n showInactive: boolean;\n onShowInactiveChange: (value: boolean) => void;\n};\n\nconst MoreButton = ({className, showInactive, onShowInactiveChange}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const [isOpen, setIsOpen] = useState(false);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n return (\n <>\n <SmallIconButtonWithTooltip\n className={className}\n ref={buttonRef}\n tooltipTitle={i18n.text('More')}\n icon={MoreVertIcon}\n onClick={togglePopup}\n size=\"L\"\n />\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive || false}\n onChange={(e) => onShowInactiveChange(e.target.checked)}\n />\n }\n label={i18n.text('Show inactive Relationships')}\n />\n </Popover>\n </>\n );\n};\n\nexport default MoreButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n header: {\n padding: '0 4px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px',\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n },\n moreButton: {\n marginLeft: '-6px'\n }\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport {\n FacetViewHeader,\n ColumnsDataType,\n ColumnsSettings,\n FilterButton,\n HideOnShrink,\n VerticalDivider,\n ExpandableSearchInput\n} from '@reltio/components';\nimport MoreButton from './MoreButton/MoreButton';\nimport {useStyles} from './styles';\n\nconst RelationsTableHeader = ({\n title,\n total,\n searchQuery,\n onChangeSearchQuery,\n filtersEnabled,\n onToggleFilters,\n columnsData,\n selectedColumns,\n onChangeColumns,\n showInactive,\n onChangeShowInactive\n}) => {\n const styles = useStyles();\n return (\n <FacetViewHeader title={title} className={styles.header}>\n <HideOnShrink widthToHide={500}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {total > 1\n ? i18n.text('${count} entities', {count: total})\n : i18n.text('${count} entity', {count: total})}\n </Typography>\n </HideOnShrink>\n <ExpandableSearchInput query={searchQuery} onChange={onChangeSearchQuery} />\n <FilterButton enabled={filtersEnabled} onClick={onToggleFilters} />\n <VerticalDivider height={24} margin={4} />\n <ColumnsSettings\n columnsData={columnsData}\n selectedColumns={selectedColumns}\n onChangeColumns={onChangeColumns}\n />\n <MoreButton\n className={styles.moreButton}\n showInactive={showInactive}\n onShowInactiveChange={onChangeShowInactive}\n />\n </FacetViewHeader>\n );\n};\n\nRelationsTableHeader.propTypes = {\n title: PropTypes.string,\n total: PropTypes.number,\n columnsData: ColumnsDataType,\n selectedColumns: PropTypes.arrayOf(PropTypes.string),\n onChangeColumns: PropTypes.func,\n searchQuery: PropTypes.string,\n onChangeSearchQuery: PropTypes.func,\n filtersEnabled: PropTypes.bool,\n onToggleFilters: PropTypes.func,\n showInactive: PropTypes.bool,\n onChangeShowInactive: PropTypes.func\n};\n\nexport default RelationsTableHeader;\n","import {basicTableViewState, createStandardAction} from '@reltio/components';\n\nconst CHANGE_SEARCH_QUERY = 'CHANGE_SEARCH_QUERY';\nconst CHANGE_SHOW_INACTIVE = 'CHANGE_SHOW_INACTIVE';\n\nconst actions = {\n ...basicTableViewState.actions,\n changeSearchQuery: createStandardAction(CHANGE_SEARCH_QUERY),\n changeShowInactive: createStandardAction(CHANGE_SHOW_INACTIVE)\n};\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case CHANGE_SEARCH_QUERY:\n return {...state, searchQuery: action.payload, page: 0};\n case CHANGE_SHOW_INACTIVE:\n return {...state, showInactive: action.payload};\n default:\n return basicTableViewState.reducer(state, action);\n }\n};\n\nexport {reducer as default, actions};\n","import {ActivenessAttrTypes, attributeUriToSearchUri, DataTypes, getAttrDataTypeDefinition} from '@reltio/mdm-sdk';\nimport {concat, map, pipe, prop, subtract, uniqBy} from 'ramda';\nimport {getRelationsAttributesFromMetadata} from '../../core/relations';\nimport i18n from 'ui-i18n';\n\nconst ROWS_PER_PAGE_OPTIONS = [10, 25, 50, 100];\nconst getRowsPerPageOptions = (defaultRowsPerPage) =>\n ROWS_PER_PAGE_OPTIONS.filter((option) => option !== defaultRowsPerPage)\n .concat(defaultRowsPerPage)\n .sort(subtract);\n\nconst DEFAULT_COLUMNS_DATA = [\n {\n id: 'entity.label',\n get label() {\n return i18n.text('Entity label');\n },\n dataTypeDefinition: {\n type: DataTypes.TYPE_STRING\n },\n hideable: false\n },\n {\n id: 'relation.label',\n get label() {\n return i18n.text('Directional label');\n },\n dataTypeDefinition: {\n type: DataTypes.TYPE_STRING\n }\n },\n {\n id: 'relation.activeness.startDate',\n get label() {\n return i18n.text('Start date');\n },\n dataTypeDefinition: ActivenessAttrTypes.startDate\n },\n {\n id: 'relation.activeness.endDate',\n get label() {\n return i18n.text('End date');\n },\n dataTypeDefinition: ActivenessAttrTypes.endDate\n }\n];\n\nconst getColumnIdFromAttrUri = pipe(attributeUriToSearchUri, concat('relation.'));\n\nconst getColumnsDataFromRelationAttributes = pipe(\n map((attr) => ({\n id: getColumnIdFromAttrUri(attr.uri),\n label: attr.label,\n dataTypeDefinition: getAttrDataTypeDefinition(attr)\n })),\n uniqBy(prop('id'))\n);\n\nconst getColumnsData = pipe(\n getRelationsAttributesFromMetadata,\n getColumnsDataFromRelationAttributes,\n concat(DEFAULT_COLUMNS_DATA)\n);\n\nexport {getRowsPerPageOptions, DEFAULT_COLUMNS_DATA, getColumnsData};\n","import {buildColumnsFilter} from '@reltio/components';\nimport {\n checkMetadataPermission,\n FilterBuilder,\n filterValueToQueryStringWithQuotes,\n Maybe,\n MetadataPermissions\n} from '@reltio/mdm-sdk';\nimport {curry, either, evolve, indexBy, keys, path, pipe, prop, unless} from 'ramda';\n\nconst getUri = (item) => item.uri || item;\nconst containsUri = (uri) => (item) => getUri(item) === uri;\n\nexport const parseUris = curry((metadata, data) => {\n const parseUri = (acc, item) => {\n let uri = getUri(item),\n shouldSkipDescendantUris = false;\n if (uri.startsWith('!')) {\n uri = uri.slice(1);\n shouldSkipDescendantUris = true;\n }\n const hasValidMetadata = metadata[uri] && checkMetadataPermission(MetadataPermissions.READ, metadata[uri]);\n const nextAcc =\n acc.find(containsUri(uri)) || !hasValidMetadata ? acc : acc.concat(item.uri ? {...item, uri} : uri);\n // prettier-ignore\n return shouldSkipDescendantUris\n ? nextAcc\n : keys(metadata).reduce(\n (acc, descUri) =>\n metadata[descUri].extendsTypeURI === uri && !acc.find(containsUri(descUri))\n ? parseUri(acc, descUri)\n : acc,\n nextAcc\n );\n };\n\n return data.reduce(parseUri, []);\n});\n\nexport const deriveEntityTypesFromRelations = curry((relationTypes, content) => {\n const deriveEntitiesFromRelationsMetadata = (objectType, relations = []) =>\n relations.reduce((acc, relation) => {\n const relationTypeUri = getUri(relation);\n const entityTypeUri = path([relationTypeUri, objectType, 'objectTypeUri'], relationTypes);\n return !entityTypeUri || acc.find(containsUri(entityTypeUri)) ? acc : acc.concat(entityTypeUri);\n }, []);\n\n return {\n ...content,\n entityTypes: [\n ...deriveEntitiesFromRelationsMetadata('startObject', content.inRelations),\n ...deriveEntitiesFromRelationsMetadata('endObject', content.outRelations)\n ]\n };\n});\n\nconst indexByUri = indexBy(prop('uri'));\n\nexport const parseRelationsConfigContent = curry((metadata, content) => {\n const relationTypes = indexByUri(metadata.relationTypes);\n const entityTypes = indexByUri(metadata.entityTypes);\n\n const parseEntryUris = (entry) =>\n evolve(\n {\n inRelations: parseUris(relationTypes),\n outRelations: parseUris(relationTypes),\n entityTypes: parseUris(entityTypes),\n nextEntry: parseEntryUris\n },\n entry\n );\n\n return pipe(\n unless(either(prop('nextEntry'), prop('entityTypes')), deriveEntityTypesFromRelations(relationTypes)),\n parseEntryUris\n )(content);\n});\n\nexport const parseRelationsConfig = (metadata, config) =>\n evolve({content: parseRelationsConfigContent(metadata)}, config);\n\nexport const buildRelationsFilter = (searchQuery, filters, columnsData) => {\n const queryClause = Maybe.fromFalsy(searchQuery)\n .map(filterValueToQueryStringWithQuotes)\n .map(\n (queryString) =>\n `containsWordStartingWith(entity.label,${queryString})` +\n ' or ' +\n `containsWordStartingWith(relation.label,${queryString})`\n )\n .orSome('');\n\n const filtersClause = buildColumnsFilter(columnsData, filters);\n\n return new FilterBuilder().addClause(queryClause).addClause(filtersClause).build();\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n addArea: {\n display: 'flex',\n alignItems: 'center',\n height: '48px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.12)'\n },\n noData: {\n fontSize: '13px',\n paddingLeft: '20px',\n marginBottom: '20px',\n marginTop: '10px',\n color: 'rgba(0,0,0,0.54)'\n }\n});\n","import React, {useCallback, useContext, useEffect, useMemo, useReducer, useRef} from 'react';\nimport AddRelationButton from './AddRelationButton/AddRelationButton';\nimport RelationsTable from './RelationsTable/RelationsTable';\nimport RelationsTableHeader from './RelationsTableHeader/RelationsTableHeader';\nimport reducer, {actions} from './stateReducer';\nimport {\n BasicTablePagination,\n BasicView,\n LinearLoadIndicator,\n ProfilePerspectiveViewContext,\n useConfigPermissions,\n useRelationsLoader,\n RelationEditor\n} from '@reltio/components';\nimport {DEFAULT_COLUMNS_DATA, getColumnsData, getRowsPerPageOptions} from './helpers/tableHelpers';\nimport {pipe, pluck, propEq} from 'ramda';\nimport {buildRelationsFilter} from './helpers/relationsHelpers';\nimport {profile} from '@reltio/mdm-module';\nimport {\n isTempUri,\n ModeTypes,\n createNewConnectionWithDefaultRelationType,\n RelationsViewConfig,\n Entity,\n Metadata,\n Connection,\n Mode,\n ActivityFilter\n} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\nimport {Typography as Typography} from '@material-ui/core';\nimport i18n from 'ui-i18n';\nimport {Dispatch} from 'redux';\n\nconst DEFAULT_ROWS_PER_PAGE = 15;\nconst DEFAULT_SORT_ORDER = 'asc';\nconst DEFAULT_COLUMNS_TO_SHOW = pluck('id', DEFAULT_COLUMNS_DATA);\nconst [DEFAULT_SORT_FIELD] = DEFAULT_COLUMNS_TO_SHOW;\nconst DEFAULT_SHOW_INACTIVE = false;\n\ntype Props = {\n config: RelationsViewConfig;\n entity: Entity;\n metadata: Metadata;\n connections: Connection[];\n total: number;\n mode: Mode;\n className?: string;\n relationToAdd: Connection;\n relationsToEdit: Connection[];\n checkIfCanAddRelations: boolean;\n dispatch: Dispatch;\n readOnlyMode?: boolean;\n};\nconst RelationsTableView = ({\n className,\n config,\n entity,\n metadata,\n connections = [],\n total = 0,\n mode: modeProp,\n relationToAdd,\n relationsToEdit = [],\n checkIfCanAddRelations,\n dispatch: reduxDispatch,\n readOnlyMode\n}: Props) => {\n const initialState = {\n searchQuery: '',\n filters: null,\n visibleColumns: DEFAULT_COLUMNS_TO_SHOW,\n sorting: {\n order: config.sortOrder || DEFAULT_SORT_ORDER,\n field: config.sortColumn || DEFAULT_SORT_FIELD\n },\n page: 0,\n rowsPerPage: config.max || DEFAULT_ROWS_PER_PAGE,\n showInactive: DEFAULT_SHOW_INACTIVE\n };\n\n const styles = useStyles();\n const isProfilePerspectiveView = useContext(ProfilePerspectiveViewContext);\n const mode = isProfilePerspectiveView ? modeProp : ModeTypes.VIEWING;\n\n const [state, dispatch] = useReducer(reducer, initialState);\n const changeSearchQuery = pipe(actions.changeSearchQuery, dispatch);\n const changeShowInactive = pipe(actions.changeShowInactive, dispatch);\n const clearSearchQuery = () => {\n changeSearchQuery('');\n };\n useEffect(clearSearchQuery, [entity?.uri]); //eslint-disable-line react-hooks/exhaustive-deps\n\n const {visibleColumns, searchQuery, filters, sorting, page, rowsPerPage, showInactive} = state;\n\n const allColumnsData = useMemo(() => getColumnsData(config, metadata), [config, metadata]);\n\n const visibleColumnsData = useMemo(\n () => visibleColumns.map((id) => allColumnsData.find(propEq('id', id))),\n [visibleColumns, allColumnsData]\n );\n\n const filter = useMemo(\n () => buildRelationsFilter(searchQuery, filters, visibleColumnsData),\n [filters, searchQuery] // eslint-disable-line\n );\n\n const {isLoading} = useRelationsLoader({\n sorting,\n filter,\n page,\n rowsPerPage,\n config,\n entity,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY,\n mode: modeProp\n });\n\n const rowsPerPageOptions = useMemo(() => getRowsPerPageOptions(initialState.rowsPerPage), []); // eslint-disable-line\n const {handleRowsPerPageChange, handlePageChange} = useMemo(\n () => ({\n handleRowsPerPageChange: pipe(actions.changeRowsPerPage, dispatch),\n handlePageChange: pipe(actions.changePage, dispatch)\n }),\n []\n );\n\n const onAddRelation = useCallback(() => {\n const newConnection = createNewConnectionWithDefaultRelationType({\n config,\n mode,\n metadata,\n parentEntityUri: undefined\n });\n pipe(profile.relations.actions.openRelationEditor(config.id), reduxDispatch)(newConnection);\n }, [config, mode, metadata, reduxDispatch]);\n\n const onRemoveRelation = useCallback(\n (relationUri) => {\n reduxDispatch(profile.relations.actions.closeRelationEditor(config.id, relationUri));\n reduxDispatch(profile.relations.actions.removeRelation(config.id, relationUri));\n const connectionToRemove = connections.find(\n (connection) => profile.relations.selectors.getRelationUriFromConnection(connection) === relationUri\n );\n const entityUri = profile.relations.selectors.getEntityUriFromConnection(connectionToRemove);\n if (isTempUri(entityUri)) {\n reduxDispatch(profile.modifiedEntities.actions.entityDeleted(entityUri));\n }\n },\n [config, connections, reduxDispatch]\n );\n\n const canAddRelations = entity && checkIfCanAddRelations && !readOnlyMode;\n const openedRelations = relationToAdd ? [relationToAdd, ...relationsToEdit] : relationsToEdit;\n const {canUpdate, canDelete} = useConfigPermissions();\n const canEditRelations = canUpdate(config) && !readOnlyMode;\n const canRemoveRelations = canDelete(config) && !readOnlyMode;\n const basicTableRef = useRef(null);\n\n return (\n <BasicView className={className}>\n <RelationsTableHeader\n title={config.caption}\n total={total}\n columnsData={allColumnsData}\n selectedColumns={visibleColumns}\n onChangeColumns={pipe(actions.changeColumns, dispatch)}\n searchQuery={searchQuery}\n onChangeSearchQuery={changeSearchQuery}\n filtersEnabled={!!filters}\n onToggleFilters={pipe(actions.toggleFilters, dispatch)}\n showInactive={showInactive}\n onChangeShowInactive={changeShowInactive}\n />\n {canAddRelations && (\n <div className={styles.addArea}>\n <AddRelationButton onClick={onAddRelation} />\n </div>\n )}\n {openedRelations.map((relation) => (\n <RelationEditor\n key={profile.relations.selectors.getRelationUriFromConnection(relation)}\n connection={relation}\n config={config}\n mode={mode}\n metadata={metadata}\n />\n ))}\n <div style={{position: 'relative'}}>\n <RelationsTable\n mode={mode}\n columnsData={visibleColumnsData}\n connections={connections}\n metadata={metadata}\n filters={filters}\n onFilter={pipe(actions.changeFilter, dispatch)}\n sorting={sorting}\n onSort={pipe(actions.toggleSort, dispatch)}\n onEditRelation={\n canEditRelations\n ? pipe(profile.relations.actions.openRelationEditor(config.id), reduxDispatch)\n : null\n }\n onRemoveRelation={canRemoveRelations ? onRemoveRelation : null}\n basicTableRef={basicTableRef}\n allowOnlyCreateNew={config.allowOnlyCreateNew}\n />\n {connections.length ? (\n <BasicTablePagination\n count={total}\n rowsPerPageOptions={rowsPerPageOptions}\n rowsPerPage={rowsPerPage}\n onChangeRowsPerPage={handleRowsPerPageChange}\n page={page}\n onChangePage={handlePageChange}\n basicTableRef={basicTableRef}\n />\n ) : (\n <Typography className={styles.noData}>{i18n.text('No data found')}</Typography>\n )}\n {isLoading && <LinearLoadIndicator />}\n </div>\n </BasicView>\n );\n};\n\nexport default RelationsTableView;\n","import {memoizeWith} from 'ramda';\nimport {connect} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport RelationsTableView from './RelationsTableView';\nimport {parseRelationsConfig} from './helpers/relationsHelpers';\n\nconst mapStateToProps = (state, ownProps) => {\n const {config} = ownProps;\n\n return {\n connections: mdm.selectors.getConnectionsWithDraftsByViewId(state, config.id),\n total: mdm.selectors.getTotalByViewId(state, config.id),\n entity: mdm.selectors.getEntity(state),\n metadata: mdm.selectors.getMetadata(state),\n mode: mdm.selectors.getMode(state),\n relationToAdd: mdm.selectors.getRelationToAddByViewId(state, config.id),\n relationsToEdit: mdm.selectors.getRelationsToEditByViewId(state, config.id),\n checkIfCanAddRelations: mdm.selectors.getCheckIfCanAddRelations(state, config.content)\n };\n};\n\nconst memoizedParseRelationsConfig = memoizeWith((metadata, config) => config.id, parseRelationsConfig);\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => ({\n ...stateProps,\n ...dispatchProps,\n ...ownProps,\n config: memoizedParseRelationsConfig(stateProps.metadata, ownProps.config)\n});\n\nexport default connect(mapStateToProps, undefined, mergeProps)(RelationsTableView);\n","import MomentUtils from '@date-io/moment';\nimport React from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport RelationsTableView from './RelationsTableView';\nimport {StylesProvider, createGenerateClassName} from '@material-ui/core/styles';\n\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport {Provider} from 'react-redux';\nimport {RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {identity} from 'ramda';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {Store} from 'redux';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'relTable',\n disableGlobal: true\n});\n\ntype Props = {\n config: RelationsViewConfig;\n store: Store;\n onResize?: (width: number, height: number) => void;\n className?: string;\n readOnlyMode?: boolean;\n};\n\nconst StandaloneRelationsTableView = ({config, store, onResize = identity, className, readOnlyMode}: Props) => (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n {config && <RelationsTableView config={config} className={className} readOnlyMode={readOnlyMode} />}\n <ErrorPopup />\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n);\n\nexport default StandaloneRelationsTableView;\n"],"names":["customStyles","input","currentStyles","fontSize","menuPortal","zIndex","useStyles","makeStyles","root","flex","title","paddingBottom","paddingLeft","dropDownInput","width","justifyContent","backgroundColor","borderTop","option","height","noOptionsMessage","entityType","selectedAttributes","className","onChange","disableUnderline","menuPlacement","metadata","useSelector","mdmModule","styles","prepareItems","useCallback","data","level","prevLabel","reduce","acc","item","hidden","chipLabel","label","push","value","uri","attrType","subAttributes","getAttributeTypeSubAttributes","concat","options","useMemo","attributes","classnames","Typography","variant","i18n","MultiSelect","TextFieldProps","InputProps","classes","components","DropdownIndicator","DropdownIndicatorWithIconButton","MultiValue","props","Option","isFocused","isSelected","innerProps","AttributeListItem","checked","labelInText","pipe","defaultTo","menuPortalTarget","document","body","theme","display","flexDirection","basicView","BasicView","forwardRef","ref","children","otherProps","Paper","displayName","propTypes","PropTypes","paddingRight","inputNumber","minWidth","marginRight","inputUnit","periods","interval","unit","onFocus","onNumberChange","getValue","parseInt","newValue","onUnitChange","newUnit","TextField","type","inputProps","min","SimpleDropDownSelector","placeholder","capitalize","map","ErrorBoundary","React","constructor","super","this","state","error","componentDidCatch","setState","console","render","loadingMessage","selectedUsers","valueToOption","prepareValues","values","tenant","servicesPath","cachedRequest","useRef","pluck","defaultOptions","getOptions","inputValue","current","getAllUsersForTenant","then","prop","users","filter","username","utils","filterUsers","ActivityTypes","getItemDataType","path","getActivityType","activity","items","firstItem","removeIgnoredItems","isImplementedItem","isValidActivityType","includes","filteredItems","length","reject","itemsTotal","splitActivityByType","propOr","groupBy","ifElse","stringifyDeltaValue","deltaValue","attributeTypeUri","attributePresentations","attributeType","findAttributeTypeByUri","dataTypeDefinition","getAttrDataTypeDefinition","formatValue","formatDataTypeValue","isNil","Object","entries","flatMap","attributeTypeName","deltaValues","makeAttrTypeUri","join","getActivityLabel","dropdownIndicator","transition","inputRoot","padding","dateOptionLabel","paper","localeFormat","moment","longDateFormat","inputRef","open","setOpen","useState","handleToggle","onCancel","fullWidth","DataTypes","onClick","endAdornment","selectProps","menuIsOpen","readOnly","InputLabelProps","shrink","Menu","autoFocus","anchorEl","onClose","anchorOrigin","vertical","horizontal","transformOrigin","elevation","getContentAnchorEl","MenuListProps","autoFocusItem","style","DateRangePicker","onApply","DateRangeTypes","RequestStates","_extends","assign","target","i","arguments","source","key","prototype","hasOwnProperty","call","apply","viewBox","version","xmlns","xmlnsXlink","d","id","stroke","strokeWidth","fill","fillRule","xlinkHref","fillOpacity","mask","header","buttonsContainer","flexShrink","marginLeft","button","icon","disabledIcon","opacity","IconButtonWithTooltip","withTooltip","IconButton","HierarchyViewHeader","entityLabel","onScrollToCurrentEntity","onGraphOpen","disabled","iconClassName","FacetViewHeader","tooltipTitle","showForDisabled","ShowGraph","node","tooltipPlacement","SelectNode","total","textField","spacing","panel","flexGrow","minHeight","maxHeight","treeWrapper","marginTop","checkedNode","editorNode","overflow","visibility","container","wordBreak","tree","Boolean","NodeRendererDefault","Component","scaffoldBlockPxWidth","toggleChildrenVisibility","connectDragPreview","connectDragSource","isDragging","canDrop","canDrag","subtitle","draggedNode","treeIndex","isSearchMatch","isSearchFocus","buttons","didDrop","treeId","isOver","parentNode","rowDirection","nodeTitle","nodeSubtitle","rowDirectionClass","handle","expanded","Array","_","index","Tooltip","DragIndicator","dropEffect","isDraggedDescendant","ReactSortableTreeUtils","isLandingPadActive","showToggleChildrenButton","cycled","pending","nodeId","btn","offsetX","offsetY","defaultProps","isRequired","TreeThemeContext","createContext","generateTreeNodeProps","undefined","TreeNode","listIndex","swapFrom","swapLength","swapDepth","lowerSiblingCounts","connectDropTarget","getPrevRow","scaffoldBlockCount","scaffold","forEach","lowerSiblingCount","lineClass","highlightLineClass","right","left","scaffoldWidth","MIN_NODE_CONTENT_WIDTH","nodeStyle","treeNodeProps","context","treeNodeClassName","Children","child","cloneElement","contextType","rowHeight","slideRegionSize","GenericNodeType","showParents","HierarchyNodeType","entity","EntityType","relation","RelationType","relations","parent","directParentUri","loading","ActivenessDateType","TreeType","graphTypes","entitiesMap","activenessDate","scrollTo","MeasuredNode","measure","registerChild","NodeRenderer","useEffect","scrollToElementByNodeId","element","querySelector","getElementByNodeId","scrollIntoView","block","inline","setTimeout","getNodeKey","DefaultNodeRenderer","pick","hierarchyTheme","Tree","scrollToNode","onRequestChildren","onScroll","identity","onNodeMoved","inlineRoot","treeData","rootChildren","omit","assoc","virtualizedListRef","treeDataRef","measurerCache","keyMapper","rawIndex","nodeInfo","CellMeasurerCache","fixedWidth","defaultHeight","onWindowResize","clearAll","window","addEventListener","removeEventListener","useRefreshableMeasurerCache","useRunOnceAfterValueInitialization","vList","getVirtualizedListInstance","forceUpdateGrid","results","searchFocusOffset","searchQuery","searchMethod","scrollToRow","onSortableTreeChange","slice","nodeRenderWithMeasure","cache","columnIndex","rowIndex","getMeasuredNode","generateNodeProps","rowInfo","previousTreeData","usePrevious","onMoveNode","movedNodeInfo","prevPath","nextParentNode","prevParentNode","parentPath","result","handleOnLazyLoadChildren","handleResize","skipOnMount","handleWidth","onResize","ReactSortableTree","isVirtualized","reactVirtualizedListProps","scrollToAlignment","onLazyLoadChildren","useCommonStyles","paddingTop","position","loadingSpinner","alignSelf","LoadingNode","commonStyles","LoadingSpinner","wrapper","avatar","avatarWithMultiParent","cursor","number","color","multiParentIcon","top","actionsBlock","content","background","pointerEvents","actionsBlockWithOpenMenu","actionsBlockForCheckedNode","regularNodeCheckbox","letterSpacing","lineHeight","popper","maxWidth","boxShadow","borderRadius","strokeOpacity","cx","cy","r","link","palette","primary","main","selected","fontWeight","Link","to","multiParent","border","bottom","borderColor","borderBottomColor","borderWidth","parentContainer","marginBottom","alignItems","loadingNode","additionalParents","dispatch","useDispatch","entityLink","ui","entityUri","viewId","details","margin","detailLine","detail","wordWrap","textIndent","detailLabel","whiteSpace","detailValue","prepareTree","sortField","sortOrder","mapTree","childrenProcessing","sortTreeChildren","typesLabelsMap","createRelationTypesLabelsMap","nodeProcessing","formatNodeFromTreeResponse","addSelfRelatedNode","expandNode","buildEntitiesMapFromTree","getGraphType","nodeCounter","generateId","convertParentProp","getNodeUri","getRelationsProp","wrapInArrayIfNeeded","getRelationProp","isArray","parents","parentIndex","findIndex","equals","directParent","formatted","formatNodeFromHopResponse","traversedRelations","untraversedRelations","formattedNode","some","when","both","has","complement","clearNodeForEntityMap","buildEntitiesMapFromHopsEntities","keys","processHopsResponse","isReversed","entities","childObjectKey","objectURI","buildEntitiesMapFromHops","curry","json","createNewTreeNode","generateNewRelationUri","treeActions","profile","loadChildren","parentUri","parentId","getState","mdm","childrenLoading","getHops","rawSubTree","queue","visitedNodes","breakCycles","buildTreeFromHops","entitiesSubMap","childrenLoaded","entitiesMappingLoaded","showCurrentEntity","currentEntityShownInTree","resetScrollToNode","hasEntityTypesWithSecondaryLabelPattern","getAllEntityTypesForGraphType","any","isRelationLoaded","isNodeChecked","checkedNodes","isEditorNode","hasEditorNode","loadRelationDetails","currentRelation","Promise","resolve","getRelation","relationDetails","detailedRelation","treeNodeChanged","hasLoadingNode","getShowSecondaryLabelValue","showSecondaryLabel","enabled","getRelationDetails","attrTypes","ACTIVENESS_ATTR_TYPES","RelationDetails","showDetails","relationshipData","typeName","getRelationType","gutterBottom","DataTypeValue","MetadataType","addButton","editButton","ActionsBlock","show","onToggleRelationDetails","onMenuOpen","onMenuClose","onStartEditing","onAddParent","onAddChild","onDelete","menuItems","text","SmallIconButton","size","InfoIconSelected","InfoIcon","DropDownMenuButton","buttonComponent","SmallIconButtonWithTooltip","buttonProps","AddCircleIcon","menuId","EditIcon","DeleteIcon","getGraphConfig","getReverseRelationsConfig","getGraphTypeConfig","getValidatedSortOrderFromConfig","getValidatedSortOrder","getValidatedSortFieldFromConfig","getValidatedSortField","getIsSecondaryLabelEnabledFromConfig","getTypeGraphIcon","absoluteImagePath","entityTypeUri","getEntityType","entityTypeGraphIcon","getPropWithInheritance","getAbsoluteImageUrl","canEditNode","mode","checkMetadataForUpdate","canAddRelative","direction","config","isChild","nodeEntityTypeUri","graphTypeUri","graphType","relationTypeUris","getRelationshipTypeUrisFromGraphType","isNodeEntityInstanceOf","isInHierarchy","__","getStartObjectTypeUri","getEndObjectTypeUri","canAddParentForNode","canAddChildForNode","canDeleteNode","checkMetadataForDelete","simpleNodePropsMapping","currentEntityUri","uiPath","onParentsRequested","isSelectedNode","isEditable","checkIsEditableMode","commonActionHandlers","onToggleShowParents","needLoadAdditionalParents","actionHandlers","treeNodeEditingStarted","nodeStartEditing","treeNodeNewParentEditingStarted","newNode","treeNodeNewChildEditingStarted","store","nodeStartAddingChild","relationUri","treeRelationRemoved","treeNodeRemoved","updatedNode","toggleRelationDetails","getLabel","secondaryLabel","getEntityLink","getAdditionalParents","pathOr","mapEntry","NodeContext","onToggleNodeCheckbox","canSelect","onImageLoadFail","e","src","DEFAULT_ICON","RegularNode","popperAnchor","useContext","nodePropsMapping","isLoading","entityDetails","showEntityDetails","hideEntityDetails","setEntityDetails","setIsLoading","timerId","safePromise","useSafePromise","cancelRequest","getEntity","finally","clearTimeout","useEntityDetails","showPopper","showControls","setShowControls","showActionsBlock","hideActionsBlock","openActionsMenu","setOpenActionsMenu","showActionsMenu","hideActionsMenu","hasMultiParents","toggleShowParents","bind","event","onTitleClick","onMouseEnter","onMouseLeave","Avatar","onError","Popper","modal","placement","ProfileCard","memo","fromEditorValue","toEditorValue","relationsTypesOptions","find","propEq","NodeRelationTypeSelector","relationTypes","labelsMap","getDirectionalLabel","getDirectionalLabelFromObject","tap","byLabel","ascend","getEntityTypeWithInheritedIcon","typeIcon","startObject","endObject","directionalLabel","typeLabel","objectType","objectTypeURI","evolve","sort","getRelationTypesOptions","RelationTypeSelector","RelationTypeType","isAvailableRelationForRelatedEntity","relatedEntity","relationType","isRelatedEntityInstanceOf","getObjectUri","editorContainer","dense","actionButtons","EditorNode","editingMode","initialConnection","isAddingParent","NODE_EDITING_MODES","connection","getHierarchyNodeEditorActiveError","allErrors","relationTypeUri","crosswalks","attributeListEntity","getActivenessAttributes","globalSearchRequestOptions","allAvailableRelationTypes","getAllAvailableRelationTypes","availableRelationTypes","isAvailableRelationBetweenEntities","availableEntityTypeUris","getSuitableEntityTypeUrisForRelationTypes","onRelationTypeChange","treeNodeRelationTypeChanged","onChangeEntity","treeNodeEntityChanged","useDidUpdateEffect","relationAttrTypes","getRelationAttributesList","selectorCompatibleEntity","onAddAttributes","params","param","onChangeAttribute","onDeleteAttribute","validate","errors","validateHierarchyConnection","cond","always","treeNodeNewParentEditingCanceled","treeNodeNewChildEditingCanceled","treeNodeEditingCanceled","action","nodeCancelEditing","dataAction","treeRelationCreated","treeRelationChanged","getPayloadForNodeApplyEditing","treeNodeNewParentEditingApplied","treeNodeNewChildEditingApplied","treeNodeEditingApplied","treeAppearanceChangeActionCreator","nodeApplyEditing","canApply","errorMessage","getErrorMessage","highlightedError","ScrollToErrorContext","isErrorHighlighted","allPass","isEmptyValue","errorClassName","useScrollToAttributeError","isSimple","handleHeight","ErrorWrapper","EntitySelector","entityTypesUris","max","attributeTypesSelectionStrategy","relationEditorAttributeTypesSelectionStrategy","AttributesList","showEmptyEditors","Button","NodeTypes","getNodeType","T","Node","build","HierarchyPanel","onChildrenRequested","onTreeChanged","onTreeScroll","isEditableMode","nodeContextValue","treeThemeContextValue","nextParent","relatedNode","Provider","GraphTypeSelector","SelectorWithOnlyOptionAutoSelect","GraphTypeType","ActivenessDateControl","handleChange","date","getTime","DateEditor","popupHorizontalPadding","triggerButton","popupContent","sortControls","sortSelectorRoot","sortSelectorMenuItem","sortOrderButton","checkboxControlRoot","checkboxControlLabel","checkboxControlCheckbox","divider","FormControlLabelWithTooltip","FormControlLabel","SORTING_OPTIONS","TREE_SORT_FIELD_VALUES","FilterSortButton","onSort","showSecondaryLabelDisabledReason","onShowSecondaryLabelChange","buttonRef","isOpen","setIsOpen","isAsc","TREE_SORT_ORDER_VALUES","togglePopup","Popover","viewOptionsTitle","control","Checkbox","Divider","DropDownEditor","menuItem","newSortField","MenuProps","ArrowUpwardIcon","ArrowDownwardIcon","textOverflow","textContainer","separator","Breadcrumbs","expandText","li","href","BreadcrumbsType","fieldsToSave","getStateToSave","anyPass","field","isEmpty","view","linearIndicator","filtersBar","secondary","filterSortButton","breadcrumbs","graphTypeSelector","fontFamily","connect","ownProps","caption","graph","graphConfig","showPath","initialActivenessDate","Date","now","isSecondaryLabelEnabled","showSecondaryLabelValue","currentGraphType","setCurrentGraphType","getGraphTypesForEntityType","hasSecondaryLabelPattern","onTreeSort","treeSorted","scrollToTreeTop","savePreferences","debounce","trees","treesStateSaved","saveTreesPreferences","treeSecondaryLabelShown","cancelOnUnmount","isCurrentReversed","currentGraphTypes","previousActivenessDate","showCurrentEntityDelayed","hasRoot","updatedTrees","updateTreesWithNewEntity","treeChanged","updatedTime","createTreeLoadedEvent","treeLoaded","treeProcessing","hasEntityInTree","treeLoading","getTree","catch","treeLoadedWithError","getRequestErrorMessage","warn","useTreeLoader","isViewMode","isTempUri","modifiedEntity","isTreeForCurrentEntityUri","useNewEntityTree","parentsProcessing","loadParents","onTreeActivenessDateChange","activenessDateChanged","newParent","treeRelationRepointed","JSON","stringify","setCheckedNodes","openGraph","clearCheckedNodes","nodePath","getPathByEntityUri","LinearLoadIndicator","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","ViewIdContext","StylesProvider","MuiPickersUtilsProvider","MomentUtils","Math","floor","ErrorPopup","SingleAttributeContext","showInactive","toggleShowInactive","totalCaption","ovIcon","SingleAttributeHeader","totalVisibleValues","showInactiveValuesMenu","setSearchQuery","setPage","totalNonVisibleValues","nonVisibleValues","HideOnShrink","widthToHide","VerticalDivider","OvIcon","nonOvTotal","nonOvValues","ExpandableSearchInput","query","moreButton","buttonLabel","ovFalse","inactive","noData","getAttributeNameFromAttributeUri","getLastUriPart","search","String","getPagedLocalEntity","async","defaultMaxValues","Infinity","offset","findAttributeValuesByTypeUri","ovValues","isOv","getAttributeSource","paging","totalOvValues","totalValues","emptyArray","SingleAttributeEditableContent","noDataText","required","cardinality","name","getAttributePagerActiveTypeErrorMessage","attributeSource","entityValuesUris","modifiedEntityValues","modifiedEntityValuesUris","emptyEditorValue","createNewAttribute","isModifiedEntityValuesEmpty","showEmpty","newValues","onDeactivateError","onAdd","attribute","isComplexAttribute","canCreate","checkCanCreateAttribute","commonProps","showNonOv","isEmptyAttributeList","CardinalityMessage","ErrorMessage","message","Add","idx","attributeValue","lazy","ownError","getAttributeOwnError","originalValue","modifiedEntityValue","deleted","edited","value1","value2","cleanser","is","over","lensPath","cleanAttributesWith","valueTransformer","unless","deleteEmptyComplex","areValuesEqual","SingleAttributeReadableContent","pagination","SingleAttributeView","page","hasPaging","pivotingAttributes","hasValues","PivotingAttributeContext","Box","renderContent","BasicTablePagination","count","rowsPerPage","rowsPerPageOptions","onChangePage","useSingleAttributeLoader","canShowHistoryDiff","attributeUri","setValues","setPaging","attributeValuesRef","apiPath","entitySelector","isHistoryModeEnabled","diff","attributeTypeSource","findAttributeValues","globalFilter","loadAttributes","isReadableAttribute","isFirstLevelAttributeUri","rest","request","isDataTenantEntity","getPagedEntity","response","loadedValue","partitionByOv","partition","totalProp","RelationsViewStateContext","FilterButton","toggleSortOrder","sortOption","changeSortOption","sortOptions","hasSortOptions","ImportDTContext","MAX","pow","userSelect","badge","badgePosition","MultipleImportIcon","Badge","anchorOriginTopRightRectangle","badgeContent","CloudDownload","ImportFromDT","tenants","selectedTenant","onConfirmImport","onCancelConfirmation","onImportClick","dataTenants","reloadRelations","setTenants","setSelectedTenant","dtssPath","customerTenant","maxDtssImport","checkHasNonImportedConnections","importFromDT","all","hasNonImportedRelations","dataTenant","hasNonImportedConnections","modifiedTenants","importDTConnections","useImportFromDTLoader","oneTenant","labelOnButton","indexOf","CloudDownloadIcon","ConfirmationDialog","discardCaption","saveCaption","onDiscard","onSave","changeSearchQuery","tooltip","tooltipContent","progress","tooltipProps","setSecondaryLabel","onOpen","getDataTenantEntitySecondaryLabel","getEntitySecondaryLabel","CircularProgress","colorPrimary","disableFocusListener","useRelationInfo","preparedUri","getEntityUriForLink","relationLabel","getRelationTypeLabelFromMetadata","SuggestedButtons","acceptRelation","ignoreRelation","row","rowInactive","inactiveBackground","entityAvatar","entityLabelContainer","textDecoration","editButtonsContent","editButtons","removed","editedLabel","fontStyle","EditableRelationItem","onRemoveRelation","onEditRelation","onAcceptRelation","onIgnoreRelation","renderRelationArrowButton","checkRemoved","checkEdited","ignored","checkIgnored","isActive","isActiveObject","canRemove","canUpdate","Mode","isRemoved","relationTypeMetadata","checkRelationPermission","handleRemoveRelation","handleEditRelation","handleAcceptRelation","handleIgnoreRelation","suggested","suggustedButtonsContent","captionText","EntityTypeIcon","EntityUriLink","getFirstRelationTypeObject","inRelations","outRelations","prepareRelation","Directions","arrowIcon","RelationArrowButton","showSecondLevel","parentEntityUri","contentSecondLevel","checkNew","ArrowDropDown","ArrowRight","secondLevelContent","SecondLevelWrapper","connections","toggleShowSecondLevel","loadRelations","relationActivityFilter","setShowSecondLevel","setLoading","activityFilter","requestConfig","returnObjects","returnDates","activeness","ActivityFilter","getRelationsForEntity","useSecondLevelConnections","getEntitiesMapForConnections","EntitiesMapContext","RelationsContent","relationToAdd","relationsToEdit","checkIfCanAddRelations","onAddRelation","newConnection","createNewConnectionWithDefaultRelationType","connectionToRemove","defaultRelationTypeObject","connectionWithDefaultRelationType","object","relationDirection","newConnections","currentConnections","canAddRelations","isEmptyRelationList","getRelationEditableContent","openedRelation","allowOnlyCreateNew","itemKey","RelationEditor","shouldShowAddRelationButton","shouldShowRelationEditorToAdd","attributesList","RelationAttributes","firstLevelRelationAttrTypes","showAttributesList","getAttributesListForReadMode","objectIds","getAttributeValuesUris","getCommentsCount","CollaborationContext","additionalRelatedObjectUris","createRelatedObjectUris","CollaborationObjectTypes","RelatedObjectUrisContext","ShowDetailsButton","onToggle","suggestedWrapper","commentsContainer","additionalButtonsWrapper","labelWrapper","RelationItem","isSuggested","setShowDetails","relatedObjectUris","COMMENTS_CONTAINER_VISIBILITY_AREA","CommentsContainer","getConnectionRelationUriForLink","allowOnlyOneComment","getCountOfLikes","ratings","rating","getCountOfDislikes","calcWidthOfLikesScale","calcWidthOfDislikesScale","averageRating","scale","likesScale","dislikesScale","counts","likesCount","Ratings","mean","calcAverageRating","toFixed","ThumbUp","ThumbDown","textTransform","likeButton","RatingsButtons","onAgree","onDisagree","ratingOfCurrentUser","user","endIcon","buttonContent","comment","entityTypeIcon","showDetailsButton","relationAttributes","RelationComplexItem","rateRelation","RelationsList","mainEnityUri","isComplex","relationTypeObject","ignoreSuggestedRelation","relatedEntityUri","startDate","endDate","isInDirection","startEntityUri","endEntityUri","createRelation","useSuggestedRelations","getRelationshipsObjectIdsForCollaboration","list","selectors","getMode","RelationsView","getConnectionsWithDraftsByViewId","getTotalByViewId","sorting","order","queryClause","Maybe","filterValueToQueryStringWithQuotes","queryString","orSome","FilterBuilder","addClause","buildRelationsFilter","reload","useRelationsLoader","importDTContextValue","TableAttributeContext","CHANGE_SEARCH_QUERY","actions","basicTableViewState","createStandardAction","reducer","payload","removedStyle","tableContainer","rowCell","transform","headCell","withFilterAtBottom","DefaultHeadCellRenderer","getColumnsDataFromAttributeNode","attrNode","attributeUriToSearchUri","childNode","getAttrPathFromColumnId","split","getNestedPathByColumnId","columnId","isAttributeSearchUri","attrPath","getBasicTableColumnsData","columnData","sortable","resizable","nestedPath","headCellRenderer","HeadCellRenderer","rowCellValueRenderer","DefaultCellValueRenderer","onChangeSearchQuery","filtersEnabled","onToggleFilters","columnsData","selectedColumns","onChangeColumns","ColumnsSettings","withTableContext","deletedUris","rowValue","cell","CellValueRenderer","isSorted","onEdit","onRemove","filters","onFilter","tableRowsData","getOvAttributeValuesByPath","getAttributeValues","getRowValueByColumnId","getBasicTableRowsData","tableColumnsData","renderRowCell","hoverRowIndex","setHoverRowIndex","canDelete","useConfigPermissions","hideRightContent","checkCanDeleteAttribute","isReltioCrosswalk","canEdit","checkCanEditAttribute","checkCanEdit","handleEditAttribute","handleRemoveAttribute","hoveredRowRightContent","BasicTable","autosizing","rowsData","hoverStateEnabled","defaultColumnWidth","defaultColumnMinWidth","headRowHeight","resizeDebounceDelay","onRowHover","hoveredRowRightContentWrapper","hoveredRowRightContentContainer","AttributeEditing","hasChanges","editor","TableAttributeView","visibleColumns","showTable","allColumnsData","checkHasChanges","modifiedValues","editingValues","newAttributeUri","setNewAttributeUri","originalValues","setOriginalValues","newAttribute","createDefaultValues","attributeTypes","prev","editingValueOriginal","attributeItem","without","original","not","useEditableAttribute","preparedValues","hasConfigToCreate","visibleColumnsData","processResponse","fakeRoot","parentPaths","nextRoot","j","isRoot","rootIndex","treeContainer","ConfigContext","lineBlock","lineChildren","verticalLine","horizontalLineRight","textAlign","boxSizing","nodeContent","rowContents","borderLeft","verticalAlign","buttonWrapper","collapsedButton","expandedButton","borderRight","rowTitle","nodeContentRenderer","treeNodeRenderer","shift","ShowGraphIcon","bodyWrapper","CustomView","basicViewRef","dialogRef","showModal","setShowModal","defaultTooltip","html","visible","updatedTooltip","popup","useAPI","innerHTML","from","childNodes","appendChild","Dialog","dragHandleContainer","dragHandleVisibilityArea","dragHandle","dragIcon","WithDragHandle","WithErrorBoundary","EmptyState","LogoRenderer","EMPTY_STATE_ICONS","secondaryText","EMPTY_STATE_VARIANTS","stubView","fullHeight","component","filterWrongLat","gt","lt","fullscreenBtn","ImageLineCaption","totalImages","photoWord","ImageAttributeViewEditableContent","requestNextPageOfAttributeValues","attributeValues","imageSize","IMAGE_SIZE","imageMargin","imageWidth","imageHeight","matchesContainer","footer","ActionButtons","match","onStartRequest","onFinishRequest","canMerge","canMark","getActionPermissionForMatch","matchRules","actionButtonProps","ActionButtonMode","onMergeFinish","MergeButton","NotMatchButton","MatchCard","ProfileMatchCard","createObjectIdForPM","matchEntityUri","DEFAULT_OPTIONS","showTransitiveMatches","showInactiveEntities","DEFAULT_SORTING","Order","ComponentStates","wrapView","withErrorBoundary","withDragHandle","WrappedStubView","WrappedProfileAttributesView","AttributesView","excludeUris","includeUris","attributesCount","pinnedAttributes","WrappedProfileSingleAttributeView","singleAttribute","setShowInactive","useSingleAttribute","WrappedProfileTableAttributeView","tableAttribute","getAttributeTypesTree","chain","flatAttributeTreeNode","uniqBy","getColumnsData","initialState","useReducer","requestFilters","mdmFilters","columnFilter","columnFilterToMdmFilter","buildMDMFilters","changePage","toggleSort","changeFilter","toggleFilters","changeColumns","useActions","useTableAttribute","WrappedProfileRelationsView","relationsState","Number","setSortOrder","setSortOption","useRelationsState","WrappedCustomView","WrappedHierarchyPathView","setTreeData","graphUri","forest","newTrees","getPathsTree","useLoadPaths","WrappedProfilePotentialMatchesView","turnOnDisableSpinner","turnOffDisableSpinner","matches","loadMatches","useMatchesLoader","onStartLoading","onFinishLoading","onFinishMatchAction","openPotentialMatchPerspective","mdmModuleUi","perspectiveId","getPotentialMatchesObjectIdsForCollaboration","getEntityUriFromMatchObject","showSeeAll","Loading","NoData","Loaded","underline","WrappedHierarchyTreeView","importedModule","default","HierarchyTreeView","WrappedRelationshipsTableView","RelationshipsTableView","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","fixedSizeContainer","omittingProps","ProfileLayoutItem","layoutItemConfig","views","ResizeComponent","AutosizeComponent","ReactReduxContext","isCustomView","class","platform","CustomScriptPlatform","reltioClass","getViewTypeByClass","ProfileLayout","layout","layoutOptions","onLayoutChanged","ReltioGridLayout","LayoutItem","draggableHandle","closeIcon","snackbar","flexWrap","Notification","notification","autoCloseInterval","autoHideDuration","setAction","setShow","closeSnackbar","_e","reason","cancelAction","onConfirm","applyAction","needConfirmation","CloseIcon","Portal","Snackbar","confirmationText","confirmationDescription","Notifications","notifications","n","editingButtons","searchResults","comments","SuggestIcon","SvgIcon","CopyIcon","filterGroupByPermissions","group","isTempEntity","isWorkflowEnabled","canStartProcessInstanceSearchQuery","permission","isSuggestMode","checkMetadataPermission","PerspectiveProfileBand","profileBandConfig","profileOperation","isOperationSaving","Operation","isDisabledButtons","openCloneConfirmationDialog","setOpenCloneConfirmationDialog","onCloneDiscard","onClone","cloneAction","cloneActionProp","isRelationSuitableForEntityType","isRelationWithEntityType","either","modifiedRelationTypes","isReference","getRelationTypeUriFromAttrType","relationshipTypesToCopy","useCloneAction","OPTIONS_GROUP","ModeTypes","description","CreateIcon","VisibilityIcon","BUTTONS_GROUP","confirm","shouldShowSelect","MetadataPermissions","hasOnlyReadPermission","accessibleOptionsGroup","accessibleButtonsGroup","handleSave","ProfileBand","mr","ProfileBandHistory","ProfileBandNavigation","ModeSwitcherSelect","optionsGroup","buttonsGroup","WorkflowButton","WorkflowTasksContext","Inbox","showMoreLink","showMoreIcon","CollaborationList","getComments","pageToken","useCommentsEntitiesMap","objectId","commentId","CollaborationItem","KeyboardArrowDown","WorkflowList","tasks","task","WorkflowTaskCard","taskId","CollaborationButton","commentsMap","calcTotalCommentItems","CollaborationIcon","SidePanelEmptyState","itemWrapper","DBConnectorsList","dBConnectorSideViews","sideView","ActivePanel","getSecondTitle","RightSidePanel","isWorkflowSideViewEnabled","isCollaborationSideViewEnabled","isDBConnectorSideViewEnabled","isCollaborationEnabled","historyEvent","workflowTasksContext","collaborationContext","active","setActive","toggleActive","newId","resetActive","isHistoryTabActive","History","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","historyFilter","onApplyFilter","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","enabledWorkflowButton","enabledCollaborationButton","collaborationTotal","elements","Workflow","headerProps","mainTitle","secondTitle","rightContent","AddWorkflowButton","Collaboration","HistoryIcon","HistoryView","contributorsUris","HistoryPanelEmptyState","HistoryHeader","DBConnector","ConnectorsIcon","visibleElements","SidePanel","SidePanelContentHeader","SideButtonsPanel","buttonsProps","onButtonClick","activeIndexId","accordionSummaryHeight","defaultBorderStyle","accordion","borderBottom","accordionExpanded","accordionSummary","accordionSummaryHeading","typography","pxToRem","fontWeightRegular","accordionSummaryExpanded","accordionSummaryContent","accordionDetails","errorWrapper","errorTitle","goToIcon","errorsAccordion","errorsAccordionDetails","warningsAccordion","warningsAccordionDetails","errorIcon","warningIcon","ErrorsPanel","panels","expandedPanelId","ErrorComponent","accordionClassName","accordionDetailsClassName","Accordion","square","AccordionSummary","expandIcon","ExpandMore","AccordionDetails","clipRule","clearError","Error","displayedMessage","ErrorType","ErrorSource","getDisplayedErrorMessage","displayedErrorPath","errorPath","AttributeValuePathItemType","getDisplayedErrorPath","highlightError","showLink","HyperlinkIcon","ProfileErrorsPanel","cachedAllErrors","cacheForAllErrors","errors1","errors2","areErrorsEqual","useCachedErrors","warnings","isCriticalError","setExpandedPanelId","panelId","isExpanded","perspectiveView","overflowX","overflowY","scrollWrapper","emptyState","profileWrapper","profileContainer","ProfilePerspectiveView","saveState","getSavedState","getSavedStateAndFix","scrollWrapperRef","debouncedSaveState","nestedRoute","savedStateKey","isLoaded","savedState","updateSavedState","useSavedStateForEntityType","setLayout","setViews","configHash","hash","isHistoryActive","getProfileObjectIdsForCollaboration","collaboration","useCollaboration","emptyCollaboration","useUsers","workflowTasks","useWorkflowTasks","workflow","useHistorySlice","historyDiff","useHistoryDiff","keywordValue","isConfigChanged","fixedViews","fixedLayout","fixNonUniqViewsIds","sidePanelViews","scrollTop","isValidateReadMode","isDTEntity","profileViews","hasProfileViews","needDispatch","useProfileValidation","handleLayoutChange","boundariesElement","popupBoundariesValue","priority","ProfilePerspectiveViewContext","UsersContext","SearchValueContext","profileBand","PopupBoundariesContext","qxSandboxApi","getSavedStatePromisified","promisifyCallback","SnackbarRenderer","showSnackbarMessage","useSnackbar","processedConfig","convertOldProfileConfig","SnackbarContext","S","SandboxAPIContext","showErrorFromStore","titleContainer","totalNumber","TagListHeader","switchToProfile","ArrowForwardIosRounded","Spacer","toolbar","TagProfileBand","Toolbar","tagsContainer","tagsView","listContainer","entitiesList","ROWS_PER_PAGE_OPTIONS","TagPerspectiveView","tag","setRowsPerPage","safeRequestTotalPromise","safeRequestEntitiesPromise","setTotal","setEntities","requestEntities","requestTotal","getDataTenantFromEntityUri","fieldName","isDT","getEntities","requestOptions","select","getFilteredEntitiesFromDataTenant","enrichEntityWithDataTenant","getFilteredEntities","getTotalFromDataTenant","getTotals","useTagsProvider","useTag","refScrollBlock","hasPagination","ProfilesList","onChangeRowsPerPage","AddRelationButton","inactiveStyle","entityCell","RowCellRenderer","EntityProfileRenderer","ExpandedValueTooltip","EntityTypeType","getRelationTypes","rel","uniq","startsWith","emptyData","EditButtons","Edit","Delete","basicTableRef","getRelationAttributeValues","isNew","handleOnRowHover","ColumnsDataType","ConnectionType","ColumnFilterType","SortingType","onShowInactiveChange","MoreVertIcon","RelationsTableHeader","onChangeShowInactive","CHANGE_SHOW_INACTIVE","changeShowInactive","DEFAULT_COLUMNS_DATA","hideable","ActivenessAttrTypes","getColumnIdFromAttrUri","getColumnsDataFromRelationAttributes","attr","getReadableAttributesList","getUri","containsUri","parseUris","parseUri","shouldSkipDescendantUris","hasValidMetadata","nextAcc","descUri","extendsTypeURI","deriveEntityTypesFromRelations","deriveEntitiesFromRelationsMetadata","entityTypes","indexByUri","indexBy","parseRelationsConfigContent","parseEntryUris","entry","nextEntry","addArea","DEFAULT_COLUMNS_TO_SHOW","DEFAULT_SORT_FIELD","memoizedParseRelationsConfig","memoizeWith","stateProps","dispatchProps","modeProp","reduxDispatch","readOnlyMode","sortColumn","filtersClause","buildColumnsFilter","getRowsPerPageOptions","defaultRowsPerPage","subtract","handleRowsPerPageChange","handlePageChange","changeRowsPerPage","openedRelations","canEditRelations","canRemoveRelations"],"sourceRoot":""}
1
+ {"version":3,"file":"9211.js","mappings":"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","sources":["webpack://@reltio/remotes/../components/src/components/AttributeSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/AttributeSelector/AttributeSelector.tsx","webpack://@reltio/remotes/../components/src/components/DateIntervalSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/DateIntervalSelector/DateIntervalSelector.tsx","webpack://@reltio/remotes/../components/src/components/ErrorBoundary/ErrorBoundary.tsx","webpack://@reltio/remotes/../components/src/components/ReactSelect/CreatableSelect.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/components/Option.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/components/index.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/MultiSelect.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/index.js","webpack://@reltio/remotes/../components/src/components/Spacer/Spacer.js","webpack://@reltio/remotes/../components/src/components/UserSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/UserSelector/UserSelector.tsx","webpack://@reltio/remotes/../components/src/components/activityLog/types/ActivityTypes.ts","webpack://@reltio/remotes/../components/src/components/activityLog/utils/activities.ts","webpack://@reltio/remotes/../components/src/components/editors/CustomDateRangeEditor/styles.ts","webpack://@reltio/remotes/../components/src/components/editors/CustomDateRangeEditor/CustomDateRangeEditor.tsx","webpack://@reltio/remotes/../components/src/types/index.ts","webpack://@reltio/remotes/../profile/src/components/ProfileAttributesView/ProfileAttributesView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/contexts/SingleAttributeContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/FilterButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/FilterButton/FilterButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeHeader/SingleAttributeHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeEditableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/hooks/helpers/index.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeEditableContent/SingleAttributeEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeReadableContent/SingleAttributeReadableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeView/SingleAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/hooks/useSingleAttributeLoader.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/contexts/RelationsViewStateContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/FilterButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/FilterButton/FilterButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/contexts/ImportDTContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/hooks/useImportFromDTLoader.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/MultipleImportIcon.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/ImportFromDT.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/RelationsHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationTooltip/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationTooltip/RelationTooltip.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useRelationInfo.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SuggestedButtons/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SuggestedButtons/SuggestedButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/EditableRelationItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/EditableRelationItem/EditableRelationItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/permissions.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/relation.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationArrowButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationArrowButton/RelationArrowButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SecondLevelWrapper/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SecondLevelWrapper/SecondLevelWrapper.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useSecondLevelConnections.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsEditableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsEditableContent/RelationsEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationAttributes/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationAttributes/RelationAttributes.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/ShowDetailsButton/ShowDetailsButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationItem/RelationItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/ratings.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/Ratings/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/Ratings/Ratings.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RatingsButtons/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RatingsButtons/RatingsButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationCompexItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationCompexItem/RelationComplexItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationsList.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useSuggestedRelations.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsContent/RelationsContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsView/RelationsView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/filters.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useRelationsState.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/contexts/TableAttributeContext.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/reducer.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/HeadCellRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/helpers/tableAttributeHelpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTableHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTableHeader/AttributeTableHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/RowCellRenderer.tsx","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/AttributeEditing/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeEditing/AttributeEditing.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/hooks/useEditableAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/TableAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/hooks/useLoadPaths.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/ConfigContext.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/Node.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/helpers.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/node-content-renderer.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/index.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/tree-node-data-renderer.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/icons/ShowGraph.svg","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/HierarchyPathsHeader.tsx","webpack://@reltio/remotes/../profile/src/components/Sandbox/styles.ts","webpack://@reltio/remotes/../profile/src/components/Sandbox/CustomView.tsx","webpack://@reltio/remotes/../profile/src/components/views/HOCs/styles.ts","webpack://@reltio/remotes/../profile/src/components/views/HOCs/withDragHandle.tsx","webpack://@reltio/remotes/../profile/src/components/views/HOCs/withErrorBoundary.tsx","webpack://@reltio/remotes/../profile/src/components/views/styles.ts","webpack://@reltio/remotes/../profile/src/components/EntityMapView/useMarkers.js","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/styles.ts","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/ProfilePotentialMatchesView.tsx","webpack://@reltio/remotes/../profile/src/components/views/ViewsFactory.tsx","webpack://@reltio/remotes/../profile/src/components/views/StubView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/ProfileSingleAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/hooks/useSingleAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/ProfileTableAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/useTableAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/helpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/ProfileRelationsView.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/HierarchyPathsView.tsx","webpack://@reltio/remotes/../profile/src/components/EntityMapView/EntityMapView.tsx","webpack://@reltio/remotes/../profile/src/components/views/ViewComponent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItem/ProfileLayoutItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileLayout/ProfileLayout.tsx","webpack://@reltio/remotes/../profile/src/components/Notifications/styles.ts","webpack://@reltio/remotes/../profile/src/components/Notifications/Notification.tsx","webpack://@reltio/remotes/../profile/src/components/Notifications/Notifications.tsx","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/suggest.svg","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/copy.svg","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/styles.ts","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/hooks/useCloneAction.ts","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/PerspectiveProfileBand.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowButton/WorkflowButton.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationList/CollaborationList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowList/WorkflowList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/icons/CollaborationIcon.svg","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationButton/CollaborationButton.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowPanelEmptyState/WorkflowPanelEmptyState.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationPanelEmptyState/CollaborationPanelEmptyState.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/icons/ConnectorsIcon.svg","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/DBConnectorsList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/DBConnectorsList/DBConnectorsList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/RightSidePanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/components/ErrorsPanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/icons/hyperlink.svg","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/helpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/components/Error.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/useCachedErrors.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/ProfileErrorsPanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/ProfilePerspectiveView.tsx","webpack://@reltio/remotes/../profile/src/components/hooks/useProfileValidation.ts","webpack://@reltio/remotes/../profile/src/perspectives/ProfilePerspective.tsx","webpack://@reltio/remotes/../profile/src/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/../relations-table/src/RelationsTableView/AddRelationButton/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/AddRelationButton/AddRelationButton.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/RowCellRenderer.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/EntityProfileRenderer.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/cell-renderers/HeadCellRenderer.js","webpack://@reltio/remotes/../relations-table/src/core/relations.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/helpers/dataHelpers.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/EditButtons.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/RelationsTable.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTable/helpers/buttonsHelper.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/MoreButton/styles.ts","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/MoreButton/MoreButton.tsx","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableHeader/RelationsTableHeader.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/stateReducer.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/helpers/tableHelpers.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/helpers/relationsHelpers.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/styles.js","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/RelationsTableView.tsx","webpack://@reltio/remotes/../relations-table/src/RelationsTableView/index.js","webpack://@reltio/remotes/../relations-table/src/index.tsx"],"sourcesContent":["import {makeStyles} from '@material-ui/core/styles';\n\nexport const customStyles = {\n input: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n menuPortal: (currentStyles) => ({...currentStyles, zIndex: 1300})\n};\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n title: {\n paddingBottom: '10px',\n paddingLeft: '5px',\n fontSize: '14px'\n },\n dropDownInput: {\n width: '100%',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n borderTop: '4px'\n },\n option: {\n fontSize: '14px',\n height: '32px'\n },\n noOptionsMessage: {\n fontSize: '14px'\n }\n});\n","import React, {useCallback, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {pipe, defaultTo} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {AttributeOption} from '../../types';\nimport mdmModule from '@reltio/mdm-module';\nimport {MultiValueProps, OptionProps} from 'react-select';\nimport {AttributeType, getAttributeTypeSubAttributes, Metadata, TEntityType} from '@reltio/mdm-sdk';\nimport {Typography as Typography} from '@material-ui/core';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport MultiValue from '../ReactSelect/commonComponents/MultiValue';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport AttributeListItem from '../AttributeListItem/AttributeListItem';\nimport {customStyles, useStyles} from './styles';\n\ntype Props = {\n entityType: TEntityType;\n selectedAttributes: AttributeOption[];\n className?: string;\n onChange?: (attributes: AttributeOption[]) => void;\n title?: string;\n disableUnderline?: boolean;\n menuPlacement?: string;\n};\n\nconst AttributeSelector = ({\n entityType,\n selectedAttributes,\n className,\n onChange,\n title,\n disableUnderline,\n menuPlacement = 'bottom'\n}: Props) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const styles = useStyles();\n\n const prepareItems = useCallback(\n (data: AttributeType[], level = 0, prevLabel = ''): AttributeOption[] => {\n return data.reduce((acc, item) => {\n if (item.hidden) return acc;\n const chipLabel = `${prevLabel && prevLabel + ' / '}${item.label}`;\n acc.push({\n label: item.label,\n value: item.uri,\n attrType: item,\n chipLabel,\n level\n });\n const subAttributes = getAttributeTypeSubAttributes(metadata, item);\n return acc.concat(subAttributes ? prepareItems(subAttributes, level + 1, chipLabel) : []);\n }, []);\n },\n [metadata]\n );\n\n const options = useMemo(() => prepareItems(entityType?.attributes || []), [entityType, prepareItems]);\n\n const CustomOption = ({isFocused, isSelected, data, label, innerProps}: OptionProps<AttributeOption, true>) => (\n <div {...innerProps}>\n <AttributeListItem\n checked={isSelected}\n level={data.level}\n data={data}\n label={label}\n labelInText={label}\n isFocused={isFocused}\n />\n </div>\n );\n\n const CustomMultiValue = ({data, ...props}: MultiValueProps<AttributeOption>) => (\n <MultiValue {...props}>{data.chipLabel}</MultiValue>\n );\n\n return (\n <div className={classnames(styles.root, className)}>\n <Typography className={styles.title} variant={'subtitle1'}>\n {title || i18n.text('Attribute')}\n </Typography>\n <MultiSelect\n value={selectedAttributes}\n options={options}\n TextFieldProps={{\n InputProps: {disableUnderline},\n classes: {root: styles.dropDownInput}\n }}\n components={{\n DropdownIndicator: DropdownIndicatorWithIconButton,\n MultiValue: CustomMultiValue,\n Option: CustomOption\n }}\n onChange={pipe(defaultTo([]), onChange)}\n styles={customStyles}\n classes={styles}\n menuPlacement={menuPlacement}\n menuPortalTarget={document.body}\n />\n </div>\n );\n};\n\nexport default AttributeSelector;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n flex: 1\n },\n input: {\n height: '100%',\n paddingLeft: '12px',\n paddingRight: '8px',\n fontSize: '14px'\n },\n inputNumber: {\n minWidth: '60px',\n marginRight: 10,\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n },\n inputUnit: {\n width: '100%'\n }\n});\n","import React from 'react';\nimport {pipe} from 'ramda';\nimport i18n from 'ui-i18n';\nimport capitalize from '@material-ui/core/utils/capitalize';\nimport {TextField as TextField} from '@material-ui/core';\nimport SimpleDropDownSelector from '../SimpleDropDownSelector/SimpleDropDownSelector';\nimport {getValue} from '../../core/utils';\nimport {useStyles} from './styles';\n\ntype Props = {\n interval: [number, string];\n onChange: ([number, string]) => void;\n onFocus?: () => void;\n};\n\nconst periods = [\n i18n.text('minutes'),\n i18n.text('hours'),\n i18n.text('days'),\n i18n.text('weeks'),\n i18n.text('months'),\n i18n.text('years')\n];\n\nconst DateIntervalSelector = ({interval: [value, unit], onChange, onFocus}: Props) => {\n const styles = useStyles();\n const getIntervalFromValue = (newValue: number) => [newValue, unit];\n const getIntervalFromUnit = ({value: newUnit}: {value: string}) => [value, newUnit];\n const onNumberChange = pipe(getValue, parseInt, getIntervalFromValue, onChange);\n const onUnitChange = pipe(getIntervalFromUnit, onChange);\n return (\n <div className={styles.root}>\n <TextField\n type=\"number\"\n value={value || ''}\n onChange={onNumberChange}\n inputProps={{min: 1, onFocus: onFocus}}\n InputProps={{classes: {root: styles.input}}}\n className={styles.inputNumber}\n />\n <SimpleDropDownSelector\n label={''}\n placeholder={capitalize(unit)}\n className={styles.inputUnit}\n value={{value: unit, label: capitalize(unit)}}\n options={periods.map((value) => ({\n value,\n label: capitalize(value)\n }))}\n onChange={onUnitChange}\n TextFieldProps={{\n inputProps: {onFocus: onFocus},\n InputProps: {classes: {root: styles.input}}\n }}\n />\n </div>\n );\n};\n\nexport default DateIntervalSelector;\n","import React from 'react';\n\ntype State = {\n error: Error | null;\n};\n\ntype Props = {\n error: React.ReactNode;\n};\n\nexport default class ErrorBoundary extends React.Component<Props, State> {\n constructor(props) {\n super(props);\n this.state = {\n error: null\n };\n }\n\n componentDidCatch(error) {\n this.setState({\n error: error\n });\n console.error(error);\n }\n\n render() {\n const {children, error} = this.props;\n if (this.state.error) {\n return error;\n }\n return children;\n }\n}\n","import CreatableSelect from 'react-select/creatable';\nimport withMuiSkin from './withMuiSkin';\n\nexport default withMuiSkin(CreatableSelect);\n","import {MenuItem as MenuItem} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport classNames from 'classnames';\nimport ExpandedValueTooltip from '../../../ExpandedValueTooltip/ExpandedValueTooltip';\n\nexport default function Option(props) {\n const {\n innerProps,\n innerRef,\n children,\n isFocused,\n isSelected,\n selectProps: {classes},\n label\n } = props;\n\n return (\n <MenuItem\n className={classNames(classes.option, {[classes['option--selected']]: isSelected})}\n ref={innerRef}\n selected={isFocused}\n component=\"div\"\n {...innerProps}\n >\n <Checkbox color=\"primary\" checked={isSelected} />\n <ExpandedValueTooltip value={label}>\n <div className={classes['option--item']}>{children}</div>\n </ExpandedValueTooltip>\n </MenuItem>\n );\n}\n\nOption.propTypes = {\n children: PropTypes.node,\n innerProps: PropTypes.shape({\n id: PropTypes.string.isRequired,\n key: PropTypes.string,\n onClick: PropTypes.func.isRequired,\n onMouseMove: PropTypes.func.isRequired,\n onMouseOver: PropTypes.func.isRequired,\n tabIndex: PropTypes.number.isRequired\n }).isRequired,\n innerRef: PropTypes.oneOfType([\n PropTypes.oneOf([null]),\n PropTypes.func,\n PropTypes.shape({\n current: PropTypes.any.isRequired\n })\n ]),\n isFocused: PropTypes.bool.isRequired,\n isSelected: PropTypes.bool.isRequired,\n label: PropTypes.string,\n selectProps: PropTypes.shape({\n classes: PropTypes.shape({\n option: PropTypes.string\n })\n })\n};\n","import Option from './Option';\n\nconst components = {\n Option\n};\n\nexport default components;\n","import React, {useState} from 'react';\nimport PropTypes from 'prop-types';\nimport {omit} from 'ramda';\nimport CreatableSelect from '../CreatableSelect';\nimport Select from '../Select';\nimport AsyncSelect from '../AsyncSelect';\nimport multiSelectComponents from './components';\nimport {makeStyles} from '@material-ui/core/styles';\nimport {mergeClasses} from '../../../core/utils';\n\nconst useStyles = makeStyles((theme) => ({\n label: {\n top: 6,\n left: 16\n },\n placeholder: (props) => ({\n display: !props.placeholder || props.label ? 'none' : undefined\n }),\n 'option--selected': {\n fontWeight: 400\n },\n clearIndicator: {\n padding: theme.spacing(1),\n margin: theme.spacing(0.25, 0.5)\n },\n dropdownIndicator: {\n padding: theme.spacing(1),\n margin: theme.spacing(0.25, 0.5)\n }\n}));\n\nlet id = 0;\nconst getInputId = () => `custom-select-${id++}`;\n\nfunction MultiSelect(props) {\n const {\n label,\n creatable,\n getOptions,\n loadingIndicator,\n components: componentsProp,\n classes: classesProp,\n styles: stylesProp,\n onChange: onChangeProp,\n onInputChange: onInputChangeProp,\n menuPlacement = 'auto',\n ...reactSelectProps\n } = props;\n\n const SelectComponent = creatable ? CreatableSelect : getOptions ? AsyncSelect : Select;\n\n const [inputValue, setInputValue] = useState('');\n const multiSelectClasses = useStyles(omit(['classes'], props));\n const inputId = getInputId();\n\n const components = {\n ...multiSelectComponents,\n ...componentsProp\n };\n\n const classes = mergeClasses(multiSelectClasses, classesProp);\n\n function handleInputChange(value, {action}) {\n onInputChangeProp(value, {action});\n if (action !== 'set-value') {\n setInputValue(value);\n }\n }\n\n function handleChange(value, actionMeta) {\n onChangeProp(value, actionMeta);\n if (actionMeta.action === 'create-option') {\n setInputValue('');\n onInputChangeProp('', {action: 'input-change'});\n }\n }\n\n const styles = {\n indicatorSeparator: (base) => ({\n ...base,\n margin: '10px 0'\n }),\n loadingIndicator: (base) => ({\n ...base,\n display: loadingIndicator ? base.display : 'none'\n }),\n loadingMessage: (base) => ({\n ...base,\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif'\n }),\n ...stylesProp\n };\n\n const labelProps = label\n ? {\n inputId,\n TextFieldProps: {\n label,\n InputLabelProps: {\n htmlFor: inputId,\n shrink: props.value && props.value.length ? true : undefined,\n className: classes.label\n },\n ...props.TextFieldProps\n }\n }\n : {};\n\n return (\n <SelectComponent\n isMulti\n inputId={inputId}\n inputValue={inputValue}\n onChange={handleChange}\n onInputChange={handleInputChange}\n closeMenuOnSelect={false}\n hideSelectedOptions={false}\n classes={classes}\n components={components}\n styles={styles}\n menuPlacement={menuPlacement}\n loadOptions={getOptions}\n {...labelProps}\n {...reactSelectProps}\n />\n );\n}\n\nMultiSelect.defaultProps = {\n creatable: false,\n cacheOptions: true,\n components: {},\n classes: {},\n placeholder: '',\n loadingIndicator: false,\n onInputChange: () => {},\n onChange: () => {}\n};\n\nMultiSelect.propTypes = {\n /**\n * Async creatable multi select with optional placeholder, shrink-label, non-closing menu and options with checkboxes.\n * Based on react-select/creatable and react-select/async.\n * See react-select docs: https://react-select.com\n *\n * Below are listed only props used in the MultiSelect component. Check https://react-select.com/props first.\n * */\n\n /** Ability to create values. React-select/async-creatable is used internally */\n creatable: PropTypes.bool,\n /** True for enabling cache. Recommended. */\n cacheOptions: PropTypes.bool,\n defaultOptions: PropTypes.bool,\n /** Array of selected options. */\n value: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any\n })\n ),\n options: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any\n })\n ),\n /** Way to receive updated values */\n onChange: PropTypes.func,\n /** Way to receive updated inputValue */\n onInputChange: PropTypes.func,\n /** Input placeholder. Will not be shown if the label prop is specified */\n placeholder: PropTypes.string,\n /** Floating label from @material-ui/core/TextField component */\n label: PropTypes.string,\n /** Enable to show default react-select's indicator */\n loadingIndicator: PropTypes.bool,\n /** You could redefine any of these components */\n components: PropTypes.shape({\n ClearIndicator: PropTypes.func,\n Control: PropTypes.func,\n DropdownIndicator: PropTypes.func,\n DownChevron: PropTypes.func,\n CrossIcon: PropTypes.func,\n Group: PropTypes.func,\n GroupHeading: PropTypes.func,\n IndicatorsContainer: PropTypes.func,\n IndicatorSeparator: PropTypes.func,\n Input: PropTypes.func,\n LoadingIndicator: PropTypes.func,\n Menu: PropTypes.func,\n MenuList: PropTypes.func,\n MenuPortal: PropTypes.func,\n LoadingMessage: PropTypes.func,\n NoOptionsMessage: PropTypes.func,\n MultiValue: PropTypes.func,\n MultiValueContainer: PropTypes.func,\n MultiValueLabel: PropTypes.func,\n MultiValueRemove: PropTypes.func,\n Option: PropTypes.func,\n Placeholder: PropTypes.func,\n SelectContainer: PropTypes.func,\n SingleValue: PropTypes.func,\n ValueContainer: PropTypes.func\n }),\n /** Classes are passed to mui skin components. Provided classes will be merged with existing ones. */\n classes: PropTypes.shape({\n control: PropTypes.string,\n valueContainer: PropTypes.string,\n multiValue: PropTypes.string,\n noOptionsMessage: PropTypes.string,\n singleValue: PropTypes.string,\n placeholder: PropTypes.string,\n menu: PropTypes.string,\n clearIndicator: PropTypes.string,\n dropdownIndicator: PropTypes.string,\n option: PropTypes.string,\n 'option--selected': PropTypes.string,\n label: PropTypes.string\n }),\n /**\n * React-select's way to customise style. Could be used to style default react-select components.\n * In other cases better to use classes and components props\n * */\n styles: PropTypes.shape({\n clearIndicator: PropTypes.func,\n container: PropTypes.func,\n control: PropTypes.func,\n dropdownIndicator: PropTypes.func,\n group: PropTypes.func,\n groupHeading: PropTypes.func,\n indicatorsContainer: PropTypes.func,\n indicatorSeparator: PropTypes.func,\n input: PropTypes.func,\n loadingIndicator: PropTypes.func,\n loadingMessage: PropTypes.func,\n menu: PropTypes.func,\n menuList: PropTypes.func,\n menuPortal: PropTypes.func,\n multiValue: PropTypes.func,\n multiValueLabel: PropTypes.func,\n multiValueRemove: PropTypes.func,\n noOptionsMessage: PropTypes.func,\n option: PropTypes.func,\n placeholder: PropTypes.func,\n singleValue: PropTypes.func,\n valueContainer: PropTypes.func\n }),\n /** Props from https://material-ui.com/api/text-field/ */\n TextFieldProps: PropTypes.object /* eslint-disable-line react/forbid-prop-types */,\n getOptions: PropTypes.func,\n menuPlacement: PropTypes.string,\n menuPortalTarget: PropTypes.object,\n getOptionValue: PropTypes.func,\n isSearchable: PropTypes.bool,\n inputRef: PropTypes.shape({current: PropTypes.object})\n};\n\nexport default MultiSelect;\n","import MultiSelect from './MultiSelect';\n\nexport default MultiSelect;\n","import React from 'react';\n\nconst Spacer = () => <div style={{flex: 1}} />;\n\nexport default Spacer;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const customStyles = {\n input: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n loadingMessage: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n menuPortal: (currentStyles) => ({...currentStyles, zIndex: 1300})\n};\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n title: {\n paddingBottom: '10px',\n paddingLeft: '5px',\n fontSize: '14px'\n },\n dropDownInput: {\n width: '100%',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n borderTop: '4px'\n },\n option: {\n fontSize: '14px',\n height: '32px'\n }\n});\n","import React, {useRef} from 'react';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {defaultTo, pipe, pluck, prop} from 'ramda';\nimport classnames from 'classnames';\nimport {Typography as Typography} from '@material-ui/core';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport {getAllUsersForTenant, User, utils} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {customStyles, useStyles} from './styles';\n\ntype Props = {\n selectedUsers: string[];\n onChange: (activities: string[]) => void;\n className?: string;\n disableUnderline?: boolean;\n};\n\nconst UserSelector = ({selectedUsers, onChange, className, disableUnderline}: Props) => {\n const styles = useStyles();\n\n const valueToOption = (value: string) => ({value, label: value});\n const prepareValues = (values: string[]) => values.map(valueToOption);\n const filterUsers = (inputValue) => (users) =>\n inputValue ? users.filter((username) => utils.strings.search(username, inputValue)) : users;\n\n const tenant = useSelector(mdmModule.selectors.getTenant);\n const servicesPath = useSelector(mdmModule.selectors.getServicesPath);\n\n const cachedRequest = useRef<Promise<{array: User[]}>>();\n const getOptions = (inputValue) => {\n if (!cachedRequest.current) {\n cachedRequest.current = getAllUsersForTenant({tenant, servicesPath});\n }\n return cachedRequest.current.then(\n pipe(prop('array'), pluck('username'), filterUsers(inputValue), prepareValues)\n );\n };\n\n return (\n <div className={classnames(styles.root, className)}>\n <Typography className={styles.title} variant={'subtitle1'}>\n {i18n.text('User')}\n </Typography>\n <MultiSelect\n value={prepareValues(selectedUsers)}\n onChange={pipe(defaultTo([]), pluck('value'), onChange)}\n defaultOptions={true}\n getOptions={getOptions}\n TextFieldProps={{\n InputProps: {disableUnderline},\n className: styles.dropDownInput\n }}\n components={{\n DropdownIndicator: DropdownIndicatorWithIconButton\n }}\n styles={customStyles}\n classes={styles}\n menuPortalTarget={document.body}\n />\n </div>\n );\n};\n\nexport default UserSelector;\n","export enum ActivityTypes {\n MODEL_UPDATED = 'MODEL_UPDATED',\n ENTITY_REMOVED = 'ENTITY_REMOVED',\n ENTITY_CREATED = 'ENTITY_CREATED',\n ENTITY_CHANGED = 'ENTITY_CHANGED',\n ENTITIES_MERGED = 'ENTITIES_MERGED',\n ENTITIES_SPLITTED = 'ENTITIES_SPLITTED',\n ENTITY_LOST_MERGE = 'ENTITY_LOST_MERGE',\n RELATIONSHIP_CREATED = 'RELATIONSHIP_CREATED',\n RELATIONSHIP_REMOVED = 'RELATIONSHIP_REMOVED',\n RELATIONSHIP_CHANGED = 'RELATIONSHIP_CHANGED',\n POTENTIAL_MATCHES_FOUND = 'POTENTIAL_MATCHES_FOUND',\n NOT_MATCHES_SET = 'NOT_MATCHES_SET',\n NOT_MATCHES_RESET = 'NOT_MATCHES_RESET',\n PERIODIC_TASK_SCHEDULED = 'PERIODIC_TASK_SCHEDULED',\n ENTITIES_MERGED_MANUALLY = 'ENTITIES_MERGED_MANUALLY',\n POTENTIAL_MATCHES_REMOVED = 'POTENTIAL_MATCHES_REMOVED',\n ENTITIES_MERGED_ON_THE_FLY = 'ENTITIES_MERGED_ON_THE_FLY',\n USER_LOGIN = 'USER_LOGIN',\n USER_LOGOUT = 'USER_LOGOUT',\n USER_SEARCH = 'USER_SEARCH',\n USER_PROFILE_VIEW = 'USER_PROFILE_VIEW',\n COMMENT_ADDED = 'COMMENT_ADDED',\n COMMENT_UPDATED = 'COMMENT_UPDATED',\n COMMENT_DELETED = 'COMMENT_DELETED',\n ANALYTICS_ATTRIBUTES_CHANGED = 'ANALYTICS_ATTRIBUTES_CHANGED',\n SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE = 'SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE',\n GROUP_CREATED = 'GROUP_CREATED',\n GROUP_REMOVED = 'GROUP_REMOVED',\n GROUP_CHANGED = 'GROUP_CHANGED'\n}\n","import {\n formatDataTypeValue,\n findAttributeTypeByUri,\n Metadata,\n AttributePresentations,\n makeAttrTypeUri,\n getAttrDataTypeDefinition\n} from '@reltio/mdm-sdk';\nimport {\n filter,\n groupBy,\n ifElse,\n map,\n path,\n pipe,\n propOr,\n values,\n isNil,\n includes,\n reject\n} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {ActivityData, ActivityItem, ActivityTypes, DeltaValue} from '../types';\n\nconst getItemDataType = path(['data', 'type']);\n\nexport const getActivityType = (activity: ActivityData) => {\n const {items, label} = activity;\n const [firstItem] = items || [];\n return getItemDataType(firstItem) || label;\n};\n\nexport const isValidActivityType = (type: string): boolean => pipe(values, includes(type))(ActivityTypes);\n\nexport const removeIgnoredItems = (activity: ActivityData): ActivityData => {\n const {items, label} = activity;\n const isImplementedItem = (item: ActivityItem): boolean => isValidActivityType(getItemDataType(item) || label);\n const filteredItems = filter(isImplementedItem)(items);\n if (items.length !== filteredItems.length) {\n console.error('Activities not implemented:', reject(isImplementedItem)(items));\n }\n return {\n ...activity,\n items: filteredItems,\n itemsTotal: filteredItems.length\n };\n};\n\nexport const splitActivityByType = (activity: ActivityData) => {\n return pipe(\n propOr([], 'items'),\n groupBy(getItemDataType),\n values,\n ifElse(\n ({length}) => length > 1,\n map((items) => ({\n ...activity,\n items,\n itemsTotal: items.length\n })),\n () => [activity]\n )\n )(activity);\n};\n\nexport const stringifyDeltaValue = (\n deltaValue: DeltaValue['value'],\n attributeTypeUri: string,\n metadata: Metadata,\n attributePresentations: AttributePresentations\n) => {\n const attributeType = findAttributeTypeByUri(metadata, attributeTypeUri);\n const dataTypeDefinition = getAttrDataTypeDefinition(attributeType);\n const formatValue = formatDataTypeValue({attributePresentations, dataTypeDefinition});\n\n if (isNil(deltaValue)) {\n return '';\n }\n\n if (typeof deltaValue === 'string') {\n return attributeType ? formatValue(deltaValue) : deltaValue;\n }\n\n return Object.entries(deltaValue)\n .flatMap(([attributeTypeName, deltaValues]) =>\n deltaValues.map((deltaValue) =>\n stringifyDeltaValue(\n deltaValue.value,\n makeAttrTypeUri(attributeTypeUri, attributeTypeName),\n metadata,\n attributePresentations\n )\n )\n )\n .join(', ');\n};\n\nexport const getActivityLabel = (type: ActivityTypes) => {\n const labels = {\n [ActivityTypes.COMMENT_ADDED]: i18n.text('Comment added'),\n [ActivityTypes.COMMENT_DELETED]: i18n.text('Comment deleted'),\n [ActivityTypes.COMMENT_UPDATED]: i18n.text('Comment updated'),\n [ActivityTypes.ENTITIES_MERGED]: i18n.text('Profile merged'),\n [ActivityTypes.ENTITIES_MERGED_MANUALLY]: i18n.text('Profile merged manually'),\n [ActivityTypes.ENTITIES_MERGED_ON_THE_FLY]: i18n.text('Profile merged on the fly'),\n [ActivityTypes.ENTITIES_SPLITTED]: i18n.text('Profile un-merged'),\n [ActivityTypes.ENTITY_CHANGED]: i18n.text('Profile updated'),\n [ActivityTypes.ENTITY_CREATED]: i18n.text('Profile created'),\n [ActivityTypes.ENTITY_LOST_MERGE]: i18n.text('Profile lost merge'),\n [ActivityTypes.ENTITY_REMOVED]: i18n.text('Profile removed'),\n [ActivityTypes.GROUP_CHANGED]: i18n.text('Group updated'),\n [ActivityTypes.GROUP_CREATED]: i18n.text('Group created'),\n [ActivityTypes.GROUP_REMOVED]: i18n.text('Group removed'),\n [ActivityTypes.MODEL_UPDATED]: i18n.text('Model was updated'),\n [ActivityTypes.NOT_MATCHES_RESET]: i18n.text('Not matches reset'),\n [ActivityTypes.NOT_MATCHES_SET]: i18n.text('Not matches set'),\n [ActivityTypes.PERIODIC_TASK_SCHEDULED]: i18n.text('Periodic task was scheduled'),\n [ActivityTypes.POTENTIAL_MATCHES_FOUND]: i18n.text('Potential matches found'),\n [ActivityTypes.POTENTIAL_MATCHES_REMOVED]: i18n.text('Potential matches removed'),\n [ActivityTypes.RELATIONSHIP_CHANGED]: i18n.text('Relationship updated'),\n [ActivityTypes.RELATIONSHIP_CREATED]: i18n.text('Relationship created'),\n [ActivityTypes.RELATIONSHIP_REMOVED]: i18n.text('Relationship removed'),\n [ActivityTypes.USER_LOGIN]: i18n.text('Logged in'),\n [ActivityTypes.USER_LOGOUT]: i18n.text('Logged out'),\n [ActivityTypes.USER_PROFILE_VIEW]: i18n.text('Profile viewed'),\n [ActivityTypes.USER_SEARCH]: i18n.text('Searched'),\n [ActivityTypes.ANALYTICS_ATTRIBUTES_CHANGED]: i18n.text('Analytics attribute changed'),\n [ActivityTypes.SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE]: i18n.text('SFDC connector synchronization issue')\n };\n return labels[type] || '';\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n dropdownIndicator: {\n transition: 'transform .15s ease'\n },\n inputRoot: {\n fontSize: '14px',\n height: 46\n },\n input: {\n padding: '0 12px 0'\n },\n dateOptionLabel: {\n minWidth: '100px'\n },\n paper: {\n minWidth: '112px'\n }\n});\n","import React, {useCallback, useRef, useState} from 'react';\nimport moment from 'moment';\nimport i18n from 'ui-i18n';\nimport {isNil} from 'ramda';\nimport {DataTypes, formatDataTypeValue} from '@reltio/mdm-sdk';\n\nimport {TextField as TextField} from '@material-ui/core';\nimport {Menu as Menu} from '@material-ui/core';\nimport DropdownIndicatorWithIconButton from '../../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport DateRangePicker from '../../DateRangePicker/DateRangePicker';\nimport {useStyles} from './styles';\n\ntype DateValues = [Date, Date];\ntype Props = {\n values: DateValues;\n onChange: (values: DateValues) => void;\n onFocus?: () => void;\n};\n\nconst localeFormat = moment.localeData().longDateFormat('L');\n\nconst formatValue = (value: Date, placeholder: string) => {\n return isNil(value)\n ? `${placeholder}`\n : `${formatDataTypeValue({dataTypeDefinition: {type: DataTypes.TYPE_ACTIVENESS_DATE}}, value)}`;\n};\n\nconst CustomDateRangeEditor = ({values, onChange, onFocus}: Props) => {\n const placeholder = localeFormat;\n const inputRef = useRef(null);\n const [open, setOpen] = useState(false);\n const styles = useStyles();\n\n const onApply = (values: DateValues) => {\n onChange(values);\n setOpen(false);\n };\n\n const handleToggle = useCallback(() => {\n setOpen((open) => !open);\n onFocus();\n }, [onFocus]);\n\n const onCancel = () => {\n setOpen(false);\n };\n\n return (\n <div className={styles.root}>\n <TextField\n fullWidth\n value={values.map((value) => formatValue(value, placeholder)).join(' \\u2014 ')}\n onClick={handleToggle}\n variant=\"filled\"\n ref={inputRef}\n InputProps={{\n endAdornment: (\n <DropdownIndicatorWithIconButton\n selectProps={{classes: styles, menuIsOpen: open}}\n innerProps={{}}\n />\n ),\n disableUnderline: isNil(values),\n readOnly: true,\n classes: {\n root: styles.inputRoot,\n input: styles.input\n }\n }}\n InputLabelProps={{\n shrink: false\n }}\n placeholder={i18n.text(`${placeholder} \\u2014 ${placeholder}`)}\n />\n <Menu\n variant=\"menu\"\n open={open}\n autoFocus={false}\n classes={{paper: styles.paper}}\n anchorEl={inputRef.current}\n onClose={onCancel}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left'\n }}\n elevation={2}\n getContentAnchorEl={null}\n MenuListProps={{\n autoFocusItem: open,\n style: {width: '100%'}\n }}\n >\n <DateRangePicker\n values={values}\n onCancel={onCancel}\n onApply={onApply}\n type={DataTypes.TYPE_ACTIVENESS_DATE}\n />\n </Menu>\n </div>\n );\n};\n\nexport default CustomDateRangeEditor;\n","import {AttributeType} from '@reltio/mdm-sdk';\n\nexport type ReactGridLayoutItem = {\n i: string;\n x: number;\n y: number;\n w: number;\n h: number;\n minW?: number;\n minH?: number;\n maxW?: number;\n maxH?: number;\n static?: boolean;\n};\n\nexport type AttributeOption = {\n label: string;\n value: string;\n attrType: AttributeType;\n chipLabel: string;\n level: number;\n};\n\nexport enum DateRangeTypes {\n WITHIN = 'within',\n AGO = 'ago',\n BETWEEN = 'between'\n}\n\nexport type DateRangeFilter = {\n type: DateRangeTypes;\n period: [number, string] | [Date, Date];\n};\n\nexport type QueryBuilderAttributeData = {\n title: string;\n pathToTitle: Array<string>;\n fieldName: string;\n entityTypeUri: string;\n attrType: AttributeType;\n uri: string;\n groupName: string;\n filterOptions: Array<string>;\n};\n\nexport type QueryBuilderAttribute = {\n id: string;\n values: Array<unknown>;\n data: QueryBuilderAttributeData;\n filter: string;\n operator: string;\n};\n\nexport type AttributeSelectorItem = {\n attrType?: AttributeType;\n entityTypeUri?: string;\n fieldName: string;\n groupName?: string;\n title: string;\n uri?: string;\n children?: AttributeSelectorItem[];\n pathToTitle?: string[];\n};\n\nexport type AttributeSelectorItemsGroup = {\n id?: string;\n title: string;\n attributes: AttributeSelectorItem[];\n};\n\nexport type AttributeSelectionInfo = {\n index: number;\n checked: boolean;\n attribute: AttributeSelectorItem;\n selectedAttributes: AttributeSelectorItem[];\n};\n\nexport type BasicAttributeSelectorProps = {\n className?: string;\n itemsGroups: AttributeSelectorItemsGroup[];\n value: AttributeSelectorItem;\n onSelect: (selectInfo: AttributeSelectionInfo) => void;\n onRestoreFocus?: () => void;\n onOpenPopup?: () => void;\n getLabel?: (value: {fieldName?: string; pathToTitle?: string[]; title: string}) => string;\n disableRestoreFocus?: boolean;\n disableEnforceFocus?: boolean;\n single?: boolean;\n ungroup?: boolean;\n disabled?: boolean;\n hideCheckBox?: boolean;\n};\nexport enum RequestStates {\n INIT = 'init',\n LOADING = 'loading',\n LOADED = 'loaded',\n ERROR = 'error'\n}\n\nexport type SelectableItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selected?: boolean;\n};\n\nexport type DropDownMenuItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selectable?: boolean;\n selected?: boolean;\n};\n","import React from 'react';\nimport {AttributesView} from '@reltio/components';\nimport {AttributeViewConfig} from '@reltio/mdm-sdk';\n\ntype ProfileAttributesViewProps = {\n config: AttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileAttributesView = ({className, config}: ProfileAttributesViewProps) => {\n return (\n <AttributesView\n className={className}\n caption={config.caption}\n excludeUris={config.excludeUris}\n includeUris={config.includeUris}\n attributesCount={config.attributesCount}\n pinnedAttributes={config.pinnedAttributes}\n />\n );\n};\n","import React from 'react';\nimport {AttributeValue, AttributeType} from '@reltio/mdm-sdk';\n\nexport const SingleAttributeContext = React.createContext<{\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n values: AttributeValue[];\n page: number;\n setPage: (page: number) => void;\n isLoading: boolean;\n showInactive?: boolean;\n toggleShowInactive?: (checked: boolean) => void;\n hasPaging: boolean;\n totalVisibleValues: number;\n attributeType: AttributeType;\n totalNonVisibleValues: number;\n nonVisibleValues: AttributeValue[];\n }>(null);\n\nSingleAttributeContext.displayName = 'SingleAttributeContext';\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n triggerButton: {\n minWidth: 0,\n color: 'rgba(0,0,0,0.54)',\n width: '36px'\n },\n popupContent: {\n paddingTop: '19px',\n paddingBottom: '23px',\n paddingLeft: '23px',\n paddingRight: '23px',\n maxWidth: '180px',\n width: '40%'\n },\n checkboxControlRoot: {\n marginTop: '6px',\n marginLeft: '-12px'\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n }\n}));\n","import React, {useContext, useRef, useState} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {Popover as Popover} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport FilterIcon from '@material-ui/icons/FilterList';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\n\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst FilterButton = ({className}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const [isOpen, setIsOpen] = useState(false);\n const {showInactive, toggleShowInactive} = useContext(SingleAttributeContext);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n return (\n <>\n <Button ref={buttonRef} classes={{root: classnames(styles.triggerButton, className)}} onClick={togglePopup}>\n <FilterIcon />\n </Button>\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n root: styles.checkboxControlRoot,\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive}\n onChange={(e) => toggleShowInactive(e.target.checked)}\n />\n }\n label={i18n.text('Show inactive values')}\n />\n </Popover>\n </>\n );\n};\n\nexport default FilterButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n padding: '0 4px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n },\n ovIcon: {\n marginTop: '2px',\n marginLeft: '5px'\n }\n}));\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {FacetViewHeader, HideOnShrink, ExpandableSearchInput, VerticalDivider, OvIcon} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport FilterButton from '../FilterButton/FilterButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n caption: string;\n totalVisibleValues: number;\n showInactiveValuesMenu: boolean;\n};\n\nexport const SingleAttributeHeader = ({caption, totalVisibleValues, showInactiveValuesMenu}: Props) => {\n const styles = useStyles();\n\n const {searchQuery, setSearchQuery, setPage, totalNonVisibleValues, nonVisibleValues, attributeType} = useContext(\n SingleAttributeContext\n );\n\n const handleChangeSearchQuery = (query: string) => {\n setSearchQuery(query);\n setPage(0);\n };\n\n return (\n <FacetViewHeader title={caption} className={styles.root}>\n <HideOnShrink widthToHide={500}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {i18n.number(totalVisibleValues)}{' '}\n {totalVisibleValues === 1 ? i18n.text('item') : i18n.text('items')}\n </Typography>\n </HideOnShrink>\n {\n <OvIcon\n nonOvTotal={totalNonVisibleValues}\n className={styles.ovIcon}\n nonOvValues={nonVisibleValues}\n attributeType={attributeType}\n />\n }\n <ExpandableSearchInput query={searchQuery} onChange={handleChangeSearchQuery} />\n {showInactiveValuesMenu && <FilterButton />}\n </FacetViewHeader>\n );\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {inactive: Record<string, number>}) => ({\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n divider: {\n margin: '0 -16px 8px',\n backgroundColor: 'rgba(0,0,0,0.12)'\n },\n ovFalse: theme.inactive,\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px 8px 0'\n }\n}));\n","import {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 React, {useCallback, useContext, useRef} from 'react';\nimport i18n from 'ui-i18n';\nimport {always, cond, map, pathOr, pipe, prop, propEq} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport classnames from 'classnames';\nimport {CardinalityMessage, EditableAttribute, ErrorMessage, ViewIdContext} 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} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\nimport {areValuesEqual} from '../../../hooks/helpers';\n\ntype Props = {\n values: AttributeValue[];\n attributeType: AttributeType;\n parentUri: string;\n showInactive: boolean;\n noDataText: string;\n};\n\nconst emptyArray = [];\n\nexport const SingleAttributeEditableContent = ({values, attributeType, parentUri, showInactive, noDataText}: 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 = useRef<AttributeValue>(\n createNewAttribute({\n parentUri,\n attributeType\n })\n );\n\n const isModifiedEntityValuesEmpty = isEmptyValue(modifiedEntityValues);\n const showEmpty = isRequired && isModifiedEntityValuesEmpty;\n\n const newValues = showEmpty\n ? [emptyEditorValue.current]\n : modifiedEntityValues.filter(pipe(prop('uri'), isTempUri));\n\n const onAddAttributes = useCallback(\n (params: AttributeItem[]) =>\n pipe(profile.actions.addAttributes, dispatch)(params.map((param) => ({...param, viewId}))),\n [viewId, dispatch]\n );\n\n const onChangeAttribute = useCallback(\n (params: AttributeItem) => pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const onDeleteAttribute = useCallback(\n (params: AttributeItem) => pipe(profile.actions.removeAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const onDeactivateError = useCallback(pipe(profile.errors.actions.errorDeactivated, dispatch), [dispatch]);\n\n const onAdd = useCallback(() => {\n const attribute: AttributeItem = {\n parentUri,\n attributeType\n };\n\n return onAddAttributes(\n showEmpty && !isComplexAttribute(attributeType.type) ? [attribute, attribute] : [attribute]\n );\n }, [onAddAttributes, parentUri, attributeType, showEmpty]);\n\n const canCreate = checkCanCreateAttribute({attributeType, mode});\n\n const commonProps = {\n attributeType: attributeType,\n errors,\n crosswalks: modifiedEntity.crosswalks,\n mode,\n onAddAttributes,\n onChangeAttribute,\n onDeactivateError,\n showNonOv: showInactive\n };\n const isEmptyAttributeList = newValues.length === 0 && values.length === 0;\n return (\n <div>\n <CardinalityMessage cardinality={cardinality} />\n <ErrorMessage message={errorMessage} />\n {canCreate && (\n <Button color=\"primary\" onClick={onAdd} className={styles.moreButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {newValues.map((value, idx) => (\n <EditableAttribute\n key={value.uri}\n {...commonProps}\n attributeValue={value}\n lazy={showEmpty && !isRequired}\n showEmptyEditors={showEmptyEditors}\n ownError={getAttributeOwnError(value, idx, attributeTypeUri, errors)}\n onDeleteAttribute={onDeleteAttribute}\n />\n ))}\n {newValues.length > 0 && values.length > 0 && <Divider className={styles.divider} />}\n {values.map((originalValue) => {\n const modifiedEntityValue = modifiedEntityValues.find(propEq('uri', originalValue.uri));\n const value = modifiedEntityValue || originalValue;\n const deleted = entityValuesUris.includes(value.uri) && !modifiedEntityValuesUris.includes(value.uri);\n const edited = !deleted && modifiedEntityValue && !areValuesEqual(modifiedEntityValue, originalValue);\n const state = cond([\n [always(deleted), always('deleted')],\n [always(edited), always('edited')]\n ])();\n return (\n <div key={value.uri} className={classnames({[styles.ovFalse]: !isOv(value)})}>\n <EditableAttribute\n {...commonProps}\n attributeValue={value}\n ownError={getAttributeOwnError(value, null, attributeTypeUri, errors)}\n onDeleteAttribute={onDeleteAttribute}\n state={state}\n />\n </div>\n );\n })}\n {isEmptyAttributeList && <Typography className={styles.noData}>{noDataText}</Typography>}\n </div>\n );\n};\n","import React from 'react';\nimport {ReadOnlyAttribute} from '@reltio/components';\nimport {AttributeType, AttributeValue} from '@reltio/mdm-sdk';\n\ntype Props = {\n values: AttributeValue[];\n attributeType: AttributeType;\n showInactive: boolean;\n};\n\nexport const SingleAttributeReadableContent = ({values, attributeType, showInactive}: Props) => {\n return (\n <>\n {values.map((value) => {\n return (\n <ReadOnlyAttribute\n key={value.uri}\n attributeValue={value}\n attributeType={attributeType}\n showNonOv={showInactive}\n />\n );\n })}\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n padding: '4px 16px 9px',\n overflow: 'auto',\n flexGrow: 1\n },\n noData: {\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)'\n },\n pagination: {\n flexGrow: 0,\n flexShrink: 0\n }\n}));\n","import React, {useContext} from 'react';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {PivotingAttribute, SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {BasicView, BasicTablePagination, LinearLoadIndicator, PivotingAttributeContext} from '@reltio/components';\nimport mdm from '@reltio/mdm-module';\nimport {Box as Box} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SingleAttributeHeader} from '../SingleAttributeHeader/SingleAttributeHeader';\nimport {SingleAttributeEditableContent} from '../SingleAttributeEditableContent/SingleAttributeEditableContent';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport {SingleAttributeReadableContent} from '../SingleAttributeReadableContent/SingleAttributeReadableContent';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const SingleAttributeView = ({config, className}: Props) => {\n const {caption, max, showInactiveValuesMenu} = config;\n\n const styles = useStyles();\n\n const {values, totalVisibleValues, page, setPage, isLoading, hasPaging, attributeType, showInactive} = useContext(\n SingleAttributeContext\n );\n\n const entityUri = useSelector(mdm.selectors.getEntityUri);\n const isViewMode = useSelector(mdm.selectors.getIsViewMode);\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode);\n const pivotingAttributes: PivotingAttribute[] = useSelector(mdm.selectors.getPivotingAttributes);\n\n const hasValues = values.length !== 0;\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n const renderContent = () => {\n if (isLoading) {\n return <LinearLoadIndicator />;\n }\n\n if (attributeType) {\n if (isViewMode && hasValues) {\n const props = {\n values,\n attributeType,\n showInactive\n };\n return <SingleAttributeReadableContent {...props} />;\n } else if (isEditableMode) {\n const props = {\n values,\n attributeType,\n parentUri: entityUri,\n showInactive,\n noDataText\n };\n return <SingleAttributeEditableContent {...props} />;\n }\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n };\n\n return (\n <PivotingAttributeContext.Provider value={pivotingAttributes}>\n <BasicView className={classnames(styles.root, className)}>\n <SingleAttributeHeader\n totalVisibleValues={totalVisibleValues}\n caption={caption}\n showInactiveValuesMenu={showInactiveValuesMenu}\n />\n <Box className={styles.content}>{renderContent()}</Box>\n {hasPaging && (\n <BasicTablePagination\n count={totalVisibleValues}\n page={page}\n rowsPerPage={max}\n rowsPerPageOptions={[]}\n onChangePage={setPage}\n classes={{root: styles.pagination}}\n />\n )}\n </BasicView>\n </PivotingAttributeContext.Provider>\n );\n};\n","import {useCallback, useState, useEffect, useMemo, useRef} from 'react';\nimport {ifElse, prop, always, has, pathOr, path, partition, propEq} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n isDataTenantEntity,\n getPagedEntity,\n getAttributeSource,\n AttributeValue,\n SearchFilter,\n findAttributeTypeByUri,\n isReadableAttribute,\n isTempUri,\n isOv,\n findAttributeValues,\n isFirstLevelAttributeUri,\n SingleAttributeViewConfig\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {useSafePromise, useDidUpdateEffect} from '@reltio/components';\nimport {getPagedLocalEntity, getAttributeNameFromAttributeUri} from './helpers';\n\ntype Params = {\n filters?: SearchFilter[];\n searchQuery?: string;\n sorting?: {\n field: string;\n order: string;\n };\n page: number;\n showInactive: boolean;\n};\n\nexport const useSingleAttributeLoader = (\n config: SingleAttributeViewConfig,\n params: Params,\n canShowHistoryDiff: boolean\n) => {\n const {attributeUri, max = 15} = config;\n const metadata = useSelector(mdm.selectors.getMetadata);\n const [values, setValues] = useState([]);\n const [paging, setPaging] = useState(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 entitySelector = canShowHistoryDiff ? mdm.selectors.getEntityWithDiff : mdm.selectors.getEntityWithoutDiff;\n const entity = useSelector(entitySelector);\n const isViewMode = useSelector(mdm.selectors.getIsViewMode);\n const isHistoryModeEnabled = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const diff = useSelector(mdm.selectors.getHistoryDiff);\n\n const parentUri = entity.uri;\n const attributeTypeName = getAttributeNameFromAttributeUri(attributeUri);\n const attributeTypeSource = getAttributeSource(attributeUri);\n attributeValuesRef.current = findAttributeValues(entity, parentUri, attributeTypeName);\n const attributeType = useMemo(() => findAttributeTypeByUri(metadata, attributeUri), [metadata, attributeUri]);\n const {globalFilter} = useSelector(mdm.selectors.getGlobalSearchRequestOptions);\n const {showInactive} = params;\n const loadAttributes = useCallback(() => {\n if (\n attributeType &&\n isReadableAttribute(attributeType) &&\n !isTempUri(parentUri) &&\n isFirstLevelAttributeUri(attributeUri)\n ) {\n setIsLoading(true);\n const {page, showInactive, ...rest} = params;\n const request = isDataTenantEntity(entity) || isHistoryModeEnabled ? getPagedLocalEntity : getPagedEntity;\n safePromise(\n request({\n metadata,\n entity,\n apiPath,\n tenant,\n parentUri,\n defaultMaxValues: max,\n attributeTypeUri: attributeUri,\n offset: max * page,\n globalFilter,\n options: showInactive ? '' : undefined,\n ...rest\n })\n )\n .then((response) => {\n const attributes = path([attributeTypeSource], response);\n const values: AttributeValue[] = pathOr([], [attributeTypeName], attributes);\n if (!isHistoryModeEnabled) {\n dispatch(\n profile.actions.processNextPageOfAttributeValues({\n parentUri,\n attributeTypeUri: attributeUri,\n attributeTypeName,\n values\n })\n );\n }\n setValues(\n values.map((loadedValue) => {\n const valueFromEntity = attributeValuesRef.current?.find(propEq('uri', loadedValue.uri));\n return valueFromEntity || loadedValue;\n })\n );\n setPaging(path(['paging', attributeUri], attributes));\n })\n .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 = showInactive ? [] : nonOvValues;\n const totalProp = showInactive ? 'totalValues' : 'totalOvValues';\n const totalVisibleValues = ifElse(has(totalProp), prop(totalProp), always(values.length))(paging);\n const hasPaging = max < totalVisibleValues;\n const totalNonVisibleValues = paging?.totalValues\n ? paging.totalValues - totalVisibleValues\n : nonVisibleValues.length;\n return {\n values,\n isLoading,\n hasPaging,\n totalVisibleValues,\n attributeType,\n totalNonVisibleValues,\n nonVisibleValues\n };\n};\n","import React from 'react';\nimport {RelationsViewState} from '../hooks/useRelationsState';\n\nexport const RelationsViewStateContext = React.createContext<RelationsViewState>(null);\n\nRelationsViewStateContext.displayName = 'RelationsViewStateContext';\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nconst popupHorizontalPadding = '23px';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n button: {\n color: theme.palette.text.secondary,\n width: '36px',\n minWidth: '36px'\n },\n popupContent: {\n padding: `19px ${popupHorizontalPadding}`\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n },\n divider: {\n backgroundColor: 'rgba(0,0,0,0.1)',\n margin: `19px -${popupHorizontalPadding}`\n },\n title: {\n marginBottom: '30px'\n },\n sortControls: {\n display: 'flex',\n alignItems: 'center'\n },\n sortSelectorRoot: {\n flex: 1,\n padding: '13px 16px',\n fontSize: '0.85rem'\n },\n sortSelectorMenuItem: {\n fontSize: '0.85rem'\n },\n sortOrderButton: {\n flexShrink: 0,\n margin: '0 8px 0 7px'\n }\n}));\n","import React, {useContext, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {isEmptyValue} from '@reltio/mdm-sdk';\nimport {DropDownEditor, SmallIconButtonWithTooltip} from '@reltio/components';\nimport {Popover as Popover} from '@material-ui/core';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport FilterIcon from '@material-ui/icons/FilterList';\nimport {Button as Button} from '@material-ui/core';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';\nimport ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';\nimport {RelationsViewStateContext} from '../../../contexts/RelationsViewStateContext';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst FilterButton = ({className}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const {\n showInactive,\n toggleShowInactive,\n sortOrder,\n toggleSortOrder,\n sortOption,\n changeSortOption,\n sortOptions\n } = useContext(RelationsViewStateContext);\n const [isOpen, setIsOpen] = useState(false);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n const hasSortOptions = !isEmptyValue(sortOptions);\n\n const isAsc = sortOrder === 'asc';\n\n return (\n <>\n <Button\n ref={buttonRef}\n classes={{\n root: classnames(styles.button, className)\n }}\n onClick={togglePopup}\n >\n <FilterIcon />\n </Button>\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive || false}\n onChange={toggleShowInactive}\n />\n }\n label={i18n.text('Show inactive Relationships')}\n />\n {hasSortOptions && (\n <>\n <Divider className={styles.divider} />\n <Typography className={styles.title} variant=\"h6\">\n {i18n.text('Sort by')}\n </Typography>\n <div className={styles.sortControls}>\n <DropDownEditor\n entries={sortOptions}\n TextFieldProps={{variant: 'filled'}}\n classes={{\n root: styles.sortSelectorRoot,\n menuItem: styles.sortSelectorMenuItem\n }}\n fullWidth\n disableUnderline\n value={sortOption}\n onChange={changeSortOption}\n MenuProps={{\n getContentAnchorEl: null,\n anchorOrigin: {vertical: 'bottom', horizontal: 'left'}\n }}\n />\n <SmallIconButtonWithTooltip\n tooltipTitle={isAsc ? i18n.text('Ascending') : i18n.text('Descending')}\n icon={isAsc ? ArrowUpwardIcon : ArrowDownwardIcon}\n onClick={toggleSortOrder}\n className={styles.sortOrderButton}\n size=\"L\"\n />\n </div>\n </>\n )}\n </Popover>\n </>\n );\n};\n\nFilterButton.displayName = 'FilterButton';\n\nexport default FilterButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n header: {\n padding: '0 6px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px',\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n }\n});\n","import React from 'react';\nimport {RelationsViewConfig} from '@reltio/mdm-sdk';\n\nexport const ImportDTContext = React.createContext<{\n reloadRelations: () => void;\n config: Pick<RelationsViewConfig, 'content' | 'importFromDT' | 'maxDtssImport'>;\n }>(null);\n","import {useSelector, useDispatch} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {useCallback, useContext, useEffect, useState} from 'react';\nimport {getRequestErrorMessage, hasNonImportedRelations, importDTConnections, isTempUri} from '@reltio/mdm-sdk';\nimport {ui} from '@reltio/mdm-module';\nimport {ImportDTContext} from '../../../../contexts/ImportDTContext';\nimport i18n from 'ui-i18n';\n\nconst MAX = Math.pow(2, 31) - 1;\ntype Tenant = {id: string; label: string};\n\nexport const useImportFromDTLoader = () => {\n const dataTenants: Array<Tenant> = useSelector(mdmModule.selectors.getDataTenants);\n const dispatch = useDispatch();\n const {config, reloadRelations} = useContext(ImportDTContext);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const [tenants, setTenants] = useState<Array<Tenant>>([]);\n const [selectedTenant, setSelectedTenant] = useState<Tenant>(null);\n const dtssPath = useSelector(mdmModule.selectors.getDtssPath);\n const customerTenant = useSelector(mdmModule.selectors.getTenant);\n const content = [{...config.content, offset: 0, max: config.maxDtssImport ?? MAX}];\n\n const checkHasNonImportedConnections = useCallback(() => {\n setTenants([]);\n if (config.importFromDT && !isTempUri(entityUri)) {\n Promise.all(\n (dataTenants || []).map((tenant) =>\n hasNonImportedRelations({\n entityUri,\n content,\n dtssPath,\n customerTenant,\n dataTenant: tenant.id\n }).then(({hasNonImportedConnections}) => ({\n ...tenant,\n hasNonImportedConnections\n }))\n )\n )\n .then((modifiedTenants) => modifiedTenants.filter((tenant) => tenant.hasNonImportedConnections))\n .then(setTenants);\n }\n }, [entityUri, dtssPath, customerTenant, config, dataTenants]);\n\n const onConfirmImport = useCallback(() => {\n importDTConnections({\n entityUri,\n content,\n dtssPath,\n customerTenant,\n dataTenant: selectedTenant.id\n })\n .then(() => {\n reloadRelations();\n checkHasNonImportedConnections();\n })\n .catch((error) =>\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))))\n );\n setSelectedTenant(null);\n }, [\n entityUri,\n dtssPath,\n customerTenant,\n config,\n checkHasNonImportedConnections,\n reloadRelations,\n selectedTenant,\n setSelectedTenant\n ]);\n\n useEffect(() => {\n checkHasNonImportedConnections();\n }, [checkHasNonImportedConnections]);\n const onCancelConfirmation = useCallback(() => setSelectedTenant(null), []);\n const onImportClick = useCallback((tenant: Tenant) => setSelectedTenant(tenant), []);\n return {\n tenants,\n selectedTenant,\n onConfirmImport,\n onCancelConfirmation,\n onImportClick\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n tenant: {\n backgroundColor: '#0000EE',\n cursor: 'pointer',\n position: 'absolute',\n top: '8px',\n left: '22px',\n width: '10px',\n height: '10px',\n color: 'white',\n fontSize: '10px',\n fontWeight: 'bold',\n userSelect: 'text',\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n button: {\n position: 'relative'\n },\n badge: {\n fontSize: '10px',\n height: '14px',\n minWidth: '14px',\n width: '14px',\n fontWeight: 'bold',\n backgroundColor: '#FF4081',\n color: '#FFF'\n },\n badgePosition: {\n right: '5px',\n top: '4px'\n }\n}));\n","import React from 'react';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport {Badge as Badge} from '@material-ui/core';\nimport {useStyles} from './styles';\n\ninterface Props {\n label: number | string;\n}\n\nexport const MultipleImportIcon = ({label}: Props) => {\n const styles = useStyles();\n return (\n <Badge\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n badgeContent={label}\n >\n <CloudDownloadIcon />\n </Badge>\n );\n};\n","import React from 'react';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport {DropDownMenuButton, SmallIconButtonWithTooltip} from '@reltio/components';\nimport {useImportFromDTLoader} from './hooks/useImportFromDTLoader';\nimport {useStyles} from './styles';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {ConfirmationDialog} from '@reltio/components';\nimport {MultipleImportIcon} from './MultipleImportIcon';\n\nexport const ImportFromDT = () => {\n const {tenants, selectedTenant, onConfirmImport, onCancelConfirmation, onImportClick} = useImportFromDTLoader();\n const styles = useStyles();\n const oneTenant = tenants.length === 1;\n const labelOnButton = oneTenant\n ? tenants[0].label.indexOf('DT:') === 0\n ? tenants[0].label[3]\n : tenants[0].label[0]\n : tenants.length;\n return (\n <>\n {!!tenants.length && (\n <>\n {oneTenant ? (\n <div className={styles.button}>\n <SmallIconButtonWithTooltip\n size={'L'}\n icon={CloudDownloadIcon}\n tooltipTitle={i18n.text('Import connections from ${label}', {label: tenants[0].label})}\n onClick={() => onImportClick(tenants[0])}\n />\n <div className={classnames(styles.tenant)}>{labelOnButton}</div>\n </div>\n ) : (\n <DropDownMenuButton\n menuId={'importDT-table-actions'}\n buttonComponent={SmallIconButtonWithTooltip}\n buttonProps={{\n tooltipTitle: i18n.text('Import connections'),\n size: 'L',\n // eslint-disable-next-line react/display-name\n icon: () => <MultipleImportIcon label={labelOnButton} />\n }}\n menuItems={tenants.map((tenant) => ({\n onClick: () => {\n onImportClick(tenant);\n },\n text: tenant.label\n }))}\n />\n )}\n <ConfirmationDialog\n open={!!selectedTenant}\n title={i18n.text('Confirmation')}\n content={i18n.text('Import connections from ${label}?', {label: selectedTenant?.label})}\n discardCaption={i18n.text('Cancel')}\n saveCaption={i18n.text('Import')}\n onDiscard={onCancelConfirmation}\n onSave={onConfirmImport}\n />\n </>\n )}\n </>\n );\n};\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {ExpandableSearchInput, FacetViewHeader, HideOnShrink, VerticalDivider} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport FilterButton from './FilterButton/FilterButton';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {useStyles} from './styles';\nimport {ImportFromDT} from './ImportFromDT/ImportFromDT';\n\ntype Props = {\n title?: string;\n total?: number;\n};\n\nconst RelationsHeader = ({title, total}: Props) => {\n const styles = useStyles();\n\n const {searchQuery, changeSearchQuery} = useContext(RelationsViewStateContext);\n\n return (\n <FacetViewHeader title={title || ''} className={styles.header}>\n {total > 0 && (\n <HideOnShrink widthToHide={400}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {total > 1\n ? i18n.text('${count} items', {count: total})\n : i18n.text('${count} item', {count: total})}\n </Typography>\n </HideOnShrink>\n )}\n <ExpandableSearchInput query={searchQuery} onChange={changeSearchQuery} />\n <ImportFromDT />\n <FilterButton />\n </FacetViewHeader>\n );\n};\n\nexport default RelationsHeader;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {tooltip: Record<string, string | number>}) => ({\n tooltip: theme.tooltip,\n tooltipContent: {\n minWidth: '165px',\n padding: '4px 2px 2px'\n },\n label: {\n fontSize: '11px',\n lineHeight: '13px',\n fontWeight: 500,\n margin: 0,\n color: 'white'\n },\n secondaryLabel: {\n color: 'rgba(255, 255, 255, 0.7)',\n fontSize: '10px',\n marginTop: '4px',\n fontWeight: 500,\n lineHeight: '11px'\n },\n progress: {\n marginTop: '4px',\n color: '#FFFFFF'\n }\n}));\n","import React, {useCallback, useEffect, useState} from 'react';\nimport {isNil, ifElse} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n ConnectionEntity,\n getDataTenantEntitySecondaryLabel,\n getEntitySecondaryLabel,\n isDataTenantEntity,\n isTempUri\n} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {useSafePromise} from '@reltio/components';\nimport {CircularProgress as CircularProgress} from '@material-ui/core';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {useStyles} from './styles';\n\nconst PROGRESS_ICON_SIZE = 16;\n\ntype Props = {\n label: string;\n entity?: ConnectionEntity;\n children: React.ReactElement;\n};\n\nconst RelationTooltip = ({label, entity, children, ...tooltipProps}: Props) => {\n const styles = useStyles();\n const safePromise = useSafePromise();\n const tenant = useSelector(mdm.selectors.getTenant);\n const dtssPath = useSelector(mdm.selectors.getDtssPath) as string;\n const [isLoading, setIsLoading] = useState(false);\n const [secondaryLabel, setSecondaryLabel] = useState<string>(null);\n\n useEffect(() => {\n setSecondaryLabel(null);\n }, [entity]);\n\n const onOpen = useCallback(() => {\n if (entity?.entityUri && !isTempUri(entity?.entityUri) && isNil(secondaryLabel)) {\n const request = ifElse(\n isDataTenantEntity,\n (entity: ConnectionEntity) =>\n getDataTenantEntitySecondaryLabel({\n entityUri: entity.entityUri,\n dataTenant: entity.dataTenant,\n customerTenant: tenant,\n dtssPath\n }),\n (entity: ConnectionEntity) => getEntitySecondaryLabel(entity.entityUri)\n );\n\n setIsLoading(true);\n safePromise(request(entity))\n .then(({secondaryLabel}) => {\n setSecondaryLabel(secondaryLabel);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }\n }, [dtssPath, entity, tenant, safePromise, secondaryLabel]);\n\n const tooltipContent = (\n <div className={styles.tooltipContent}>\n <div className={styles.label}>{label}</div>\n {isLoading && <CircularProgress size={PROGRESS_ICON_SIZE} classes={{colorPrimary: styles.progress}} />}\n {secondaryLabel && <div className={styles.secondaryLabel}>{secondaryLabel}</div>}\n </div>\n );\n\n return (\n <Tooltip\n onOpen={onOpen}\n title={tooltipContent}\n disableFocusListener\n classes={{tooltip: styles.tooltip}}\n {...tooltipProps}\n >\n {children}\n </Tooltip>\n );\n};\n\nexport default RelationTooltip;\n","import {\n Connection,\n Metadata,\n getEntityType,\n getLabel,\n getEntityUriForLink,\n getRelationTypeLabelFromMetadata\n} 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 string;\n const entityLabel = getLabel(entity?.entityLabel) as string;\n const preparedUri = getEntityUriForLink({uri: entity?.entityUri, dataTenant: entity?.dataTenant}) as string;\n const relationLabel =\n relation?.relationLabel || (getRelationTypeLabelFromMetadata(metadata, relation?.relationType) as string);\n\n return {\n entityType,\n entityLabel,\n preparedUri,\n relationLabel\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n container: {\n display: 'flex'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport Button, {ButtonProps} from '@material-ui/core/Button';\nimport {useStyles} from './styles';\n\ntype Props = {\n acceptRelation: () => void;\n ignoreRelation: () => void;\n};\n\nexport const SuggestedButtons = ({acceptRelation, ignoreRelation, ...props}: Props & ButtonProps) => {\n const styles = useStyles();\n return (\n <div className={styles.container}>\n <Button onClick={acceptRelation} variant=\"text\" color=\"primary\" {...props} style={{alignSelf: 'center'}}>\n {i18n.text('Accept')}\n </Button>\n <Button onClick={ignoreRelation} variant=\"text\" color=\"primary\" {...props} style={{alignSelf: 'center'}}>\n {i18n.text('Ignore')}\n </Button>\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {inactiveBackground: string}) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n\n marginBottom: '2px'\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row',\n minHeight: '24px',\n padding: '0 16px'\n },\n rowInactive: {\n background: theme.inactiveBackground\n },\n entityAvatar: {\n height: '12px',\n width: '12px',\n fontSize: '11px',\n marginRight: '8px'\n },\n entityLabelContainer: {\n textDecoration: 'none',\n cursor: 'pointer',\n paddingRight: '8px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n editButtonsContent: {\n marginLeft: 'auto',\n flex: '0 0 40px'\n },\n editButtons: {\n padding: 0\n },\n removed: {\n color: theme.palette.text.secondary,\n textDecoration: 'line-through'\n },\n editedLabel: {\n fontStyle: 'italic',\n color: theme.palette.text.secondary,\n margin: '0 5px'\n }\n}));\n","import React, {memo, useCallback} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport mdm from '@reltio/mdm-module';\nimport {Typography as Typography} from '@material-ui/core';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport {Connection, Metadata, isActiveObject, checkRemoved, checkEdited, checkIgnored} from '@reltio/mdm-sdk';\nimport {EntityTypeIcon, EntityUriLink, SmallIconButtonWithTooltip} from '@reltio/components';\nimport RelationTooltip from '../RelationTooltip/RelationTooltip';\nimport {useRelationInfo} from '../../hooks/useRelationInfo';\nimport {checkRelationPermission} from '../../helpers/permissions';\nimport {SuggestedButtons} from '../SuggestedButtons/SuggestedButtons';\nimport {useStyles} from './styles';\n\ntype Props = {\n connection: Connection;\n onRemoveRelation: (relationUri: string) => void;\n onEditRelation: (connection: Connection) => void;\n onAcceptRelation?: (connection: Connection) => void;\n onIgnoreRelation?: (connection: Connection) => void;\n metadata: Metadata;\n showControls: boolean;\n renderRelationArrowButton?: () => React.ReactNode;\n};\n\nconst EditableRelationItem = memo(\n ({\n connection,\n metadata,\n showControls,\n onRemoveRelation,\n onEditRelation,\n onAcceptRelation,\n onIgnoreRelation,\n renderRelationArrowButton\n }: Props) => {\n const styles = useStyles();\n\n const {entity, relation} = connection;\n const removed = checkRemoved(connection);\n const edited = checkEdited(connection);\n const ignored = checkIgnored(connection);\n const {entityType, entityLabel, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const isActive = isActiveObject(relation) && isActiveObject(entity);\n const mode = useSelector(mdm.selectors.getMode);\n const {canRemove, canUpdate} = checkRelationPermission({\n mode,\n onRemoveRelation,\n onEditRelation,\n metadata,\n connection\n });\n\n const handleRemoveRelation = useCallback(\n () => onRemoveRelation(connection.relation.relationUri),\n [onRemoveRelation, connection]\n );\n\n const handleEditRelation = useCallback(() => onEditRelation(connection), [onEditRelation, connection]);\n\n const handleAcceptRelation = useCallback(() => {\n onAcceptRelation(connection);\n }, [onAcceptRelation, connection]);\n\n const handleIgnoreRelation = useCallback(() => onIgnoreRelation(connection), [onIgnoreRelation, connection]);\n\n const editButtonsContent =\n (canRemove || canUpdate) && showControls && !connection.suggested ? (\n <>\n {canUpdate && (\n <SmallIconButtonWithTooltip\n icon={EditIcon}\n size=\"XS\"\n onClick={handleEditRelation}\n tooltipTitle={i18n.text('Edit')}\n />\n )}\n {canRemove && (\n <SmallIconButtonWithTooltip\n icon={DeleteIcon}\n size=\"XS\"\n onClick={handleRemoveRelation}\n tooltipTitle={i18n.text('Remove')}\n />\n )}\n </>\n ) : undefined;\n\n const suggustedButtonsContent = connection.suggested ? (\n <SuggestedButtons\n acceptRelation={handleAcceptRelation}\n ignoreRelation={handleIgnoreRelation}\n size=\"small\"\n disabled={ignored}\n />\n ) : undefined;\n const captionText = ignored ? i18n.text('ignored') : i18n.text('edited');\n return (\n <div\n className={classnames(\n styles.container,\n {[styles.rowInactive]: !isActive},\n {[styles.removed]: removed || ignored}\n )}\n >\n <div className={styles.row}>\n {renderRelationArrowButton && renderRelationArrowButton()}\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n {(edited || ignored) && (\n <Typography variant=\"caption\" className={styles.editedLabel}>\n ({captionText})\n </Typography>\n )}\n {relationLabel && <span className={styles.relationLabel}>{`, ${relationLabel}`}</span>}\n </EntityUriLink>\n\n <div className={styles.editButtonsContent}>{editButtonsContent}</div>\n {suggustedButtonsContent}\n </div>\n </div>\n );\n }\n);\n\nEditableRelationItem.displayName = 'EditableRelationItem';\n\nexport default EditableRelationItem;\n","import {checkMetadataForDelete, checkMetadataForUpdate, checkRemoved, getRelationType, Mode} from '@reltio/mdm-sdk';\n\nexport const checkRelationPermission = ({metadata, mode, connection, onRemoveRelation, onEditRelation}) => {\n const isEditableMode = mode === Mode.Editing || mode === Mode.Suggesting;\n if (isEditableMode && connection) {\n const {\n relation: {relationType}\n } = connection;\n const isRemoved = checkRemoved(connection);\n const relationTypeMetadata = getRelationType(metadata, relationType);\n const canRemove = onRemoveRelation && !isRemoved && checkMetadataForDelete(mode, relationTypeMetadata);\n const canUpdate = onEditRelation && !isRemoved && checkMetadataForUpdate(mode, relationTypeMetadata);\n return {canRemove, canUpdate};\n } else {\n return {canRemove: false, canUpdate: false};\n }\n};\n","import {Directions, wrapInArrayIfNeeded, InOutRelation} from '@reltio/mdm-sdk';\n\nexport const getFirstRelationTypeObject = (inRelations: InOutRelation, outRelations: InOutRelation) => {\n const prepareRelation = (direction, relations) => {\n const relationsArr = relations ? wrapInArrayIfNeeded(relations) : [];\n return relationsArr.map((relation) => ({\n type: relation,\n direction: direction === Directions.IN ? Directions.IN : Directions.OUT\n }));\n };\n return prepareRelation(Directions.IN, inRelations).concat(prepareRelation(Directions.OUT, outRelations))[0];\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n arrowIcon: {\n fontSize: '16px',\n marginRight: '6px'\n }\n});\n","import React from 'react';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport {checkNew, Connection, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n onClick: () => void;\n connection: Connection;\n config: RelationsViewConfig;\n showSecondLevel: boolean;\n};\n\nexport const RelationArrowButton = ({onClick, connection, config, showSecondLevel}: Props) => {\n const styles = useStyles();\n const {parentEntityUri} = connection;\n const {contentSecondLevel} = config;\n\n const props = {\n onClick,\n className: styles.arrowIcon\n };\n\n if (parentEntityUri || !contentSecondLevel || checkNew(connection)) {\n return null;\n }\n\n return showSecondLevel ? <ArrowDropDownIcon {...props} /> : <ArrowRightIcon {...props} />;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n row: {\n display: 'flex',\n alignItems: 'center',\n width: '100%'\n },\n secondLevelContent: {\n paddingLeft: '24px'\n }\n});\n","import React, {useContext, useMemo} from 'react';\nimport {Connection, ActivityFilter, getEntitiesMapForConnections, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {useSecondLevelConnections} from '../../hooks/useSecondLevelConnections';\nimport {RelationArrowButton} from '../RelationArrowButton/RelationArrowButton';\nimport {RelationsContent} from '../RelationsContent/RelationsContent';\nimport {useStyles} from './styles';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {EntitiesMapContext} from '@reltio/components';\n\ntype Props = {\n config: RelationsViewConfig;\n connection: Connection;\n children: (render: () => React.ReactNode) => React.ReactNode;\n};\n\nexport const SecondLevelWrapper = ({config, connection, children}: Props) => {\n const styles = useStyles();\n\n const {showInactive} = useContext(RelationsViewStateContext);\n\n const {\n connections,\n showSecondLevel,\n toggleShowSecondLevel,\n loadRelations,\n loading,\n total\n } = useSecondLevelConnections({\n config,\n connection,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY\n });\n\n const entitiesMap = useMemo(() => getEntitiesMapForConnections(connections), [connections]);\n\n const renderRelationArrowButton = () => {\n return (\n <RelationArrowButton\n onClick={toggleShowSecondLevel}\n connection={connection}\n config={config}\n showSecondLevel={showSecondLevel}\n />\n );\n };\n\n return (\n <>\n {children(renderRelationArrowButton)}\n {showSecondLevel && (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <div className={styles.secondLevelContent}>\n <RelationsContent\n isLoading={loading}\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n total={total}\n parentEntityUri={connection.entity.entityUri}\n />\n </div>\n </EntitiesMapContext.Provider>\n )}\n </>\n );\n};\n","import {useState, useCallback} from 'react';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {\n Connection,\n getRelationsForEntity,\n ActivityFilter,\n GlobalSearchRequestOptions,\n RelationsViewConfig\n} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} from '@reltio/mdm-module';\n\ntype Params = {\n config: RelationsViewConfig;\n connection: Connection;\n relationActivityFilter: ActivityFilter;\n};\n\nexport const useSecondLevelConnections = ({config, connection, relationActivityFilter}: Params) => {\n const dispatch = useDispatch();\n\n const [showSecondLevel, setShowSecondLevel] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const {contentSecondLevel} = config;\n const {entity} = connection;\n\n const connections =\n (useSelector((state) =>\n mdmModule.selectors.getConnectionsWithDraftsByViewId(state, config.id, entity.entityUri)\n ) as Connection[]) || [];\n\n const total = useSelector((state) => mdmModule.selectors.getTotalByViewId(state, config.id, entity.entityUri));\n const {activityFilter}: GlobalSearchRequestOptions =\n useSelector(mdmModule.selectors.getGlobalSearchRequestOptions) || {};\n\n const loadRelations = useCallback(() => {\n const requestConfig = {\n ...contentSecondLevel,\n returnObjects: true,\n returnDates: true,\n activeness: {\n relation: relationActivityFilter || ActivityFilter.ALL,\n entity: activityFilter\n }\n };\n\n setLoading(true);\n\n getRelationsForEntity(entity.entityUri, [requestConfig]).then((response) => {\n const {connections, total} = response[0];\n\n if (connections) {\n dispatch(\n profile.relations.actions.secondLevelRelationsLoaded({\n connections,\n parentEntityUri: entity.entityUri,\n id: config.id,\n total\n })\n );\n }\n\n setLoading(false);\n });\n }, [config.id, contentSecondLevel, dispatch, entity.entityUri, activityFilter, relationActivityFilter]);\n\n const toggleShowSecondLevel = useCallback(() => {\n if (!showSecondLevel && !connection.connections) {\n loadRelations();\n }\n\n setShowSecondLevel((show) => !show);\n }, [loadRelations, connection.connections, showSecondLevel]);\n\n return {connections, showSecondLevel, toggleShowSecondLevel, loadRelations, loading, total};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px',\n marginLeft: '16px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n divider: {\n margin: '0 0 8px',\n backgroundColor: 'rgba(0,0,0,0.12)'\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px'\n }\n}));\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pipe, partition, evolve, always, omit} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {\n Connection,\n isTempUri,\n Mode,\n createNewConnectionWithDefaultRelationType,\n checkNew,\n RelationsViewConfig\n} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {RelationEditor} from '@reltio/components';\nimport EditableRelationItem from '../EditableRelationItem/EditableRelationItem';\nimport {getFirstRelationTypeObject} from '../../helpers/relation';\nimport {SecondLevelWrapper} from '../SecondLevelWrapper/SecondLevelWrapper';\nimport {useStyles} from './styles';\n\nexport type Props = {\n className?: string;\n noDataText: string;\n connections: Array<Connection>;\n config: RelationsViewConfig;\n mode: Mode;\n parentEntityUri?: string;\n};\n\nconst RelationsEditableContent = ({className, connections = [], config, mode, noDataText, parentEntityUri}: Props) => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const relationToAdd = useSelector((state) => mdmModule.selectors.getRelationToAddByViewId(state, config.id));\n const relationsToEdit = useSelector((state) => mdmModule.selectors.getRelationsToEditByViewId(state, config.id));\n const entity = useSelector(mdmModule.selectors.getEntity);\n const checkIfCanAddRelations = useSelector((state) =>\n mdmModule.selectors.getCheckIfCanAddRelations(state, config.content)\n );\n\n const dispatch = useDispatch();\n const styles = useStyles();\n\n const onAddRelation = useCallback(() => {\n const newConnection = createNewConnectionWithDefaultRelationType({config, mode, metadata, parentEntityUri});\n pipe(profile.relations.actions.openRelationEditor(config.id), dispatch)(newConnection);\n }, [config, mode, metadata, dispatch, parentEntityUri]);\n\n const onRemoveRelation = useCallback(\n (relationUri) => {\n dispatch(profile.relations.actions.closeRelationEditor(config.id, relationUri));\n dispatch(profile.relations.actions.removeRelation(config.id, relationUri));\n const connectionToRemove = connections.find(\n (connection) => profile.relations.selectors.getRelationUriFromConnection(connection) === relationUri\n );\n const entityUri = profile.relations.selectors.getEntityUriFromConnection(connectionToRemove);\n if (isTempUri(entityUri)) {\n dispatch(profile.modifiedEntities.actions.entityDeleted(entityUri));\n }\n },\n [config, connections, dispatch]\n );\n const content = config.content;\n const defaultRelationTypeObject = getFirstRelationTypeObject(content.inRelations, content.outRelations);\n const onAcceptRelation = useCallback(\n (connection) => {\n const connectionWithDefaultRelationType = pipe(\n omit(['suggested']),\n evolve({\n relation: {\n relationType: always(defaultRelationTypeObject.type),\n object: evolve({type: always(defaultRelationTypeObject.type), attributes: always(null)})\n }\n })\n )(connection);\n dispatch(profile.relations.actions.addRelation(config.id, connectionWithDefaultRelationType));\n },\n [dispatch, config, defaultRelationTypeObject]\n );\n\n const onIgnoreRelation = useCallback(\n (connection) => {\n dispatch(\n profile.relations.actions.ignoreRelation(config.id, {\n relationType: defaultRelationTypeObject.type,\n relationDirection: defaultRelationTypeObject.direction,\n entityUri: connection.entity.entityUri,\n relationUri: connection.relation.relationUri\n })\n );\n },\n [dispatch, config, defaultRelationTypeObject]\n );\n\n const [newConnections, currentConnections] = partition(checkNew, connections);\n const canAddRelations = entity && checkIfCanAddRelations;\n\n const isEmptyRelationList = newConnections.length === 0 && currentConnections.length === 0;\n\n const getRelationEditableContent = (connection: Connection) => {\n const openedRelation = relationsToEdit.find(\n (openedRelation) => openedRelation?.relation?.relationUri === connection?.relation?.relationUri\n );\n const showControls = !config.allowOnlyCreateNew || checkNew(connection);\n const itemKey = `${connection?.relation?.relationUri}-${connection?.relation?.direction}`;\n return (\n <SecondLevelWrapper config={config} connection={connection} key={itemKey}>\n {(renderRelationArrowButton) => {\n return openedRelation ? (\n <RelationEditor connection={openedRelation} config={config} mode={mode} metadata={metadata} />\n ) : (\n <EditableRelationItem\n renderRelationArrowButton={renderRelationArrowButton}\n connection={connection}\n metadata={metadata}\n showControls={showControls}\n onRemoveRelation={onRemoveRelation}\n onEditRelation={pipe(profile.relations.actions.openRelationEditor(config.id), dispatch)}\n onAcceptRelation={onAcceptRelation}\n onIgnoreRelation={onIgnoreRelation}\n />\n );\n }}\n </SecondLevelWrapper>\n );\n };\n\n const shouldShowAddRelationButton =\n canAddRelations && (!relationToAdd || (relationToAdd && relationToAdd.parentEntityUri === parentEntityUri));\n\n const shouldShowRelationEditorToAdd = relationToAdd && relationToAdd.parentEntityUri === parentEntityUri;\n\n return (\n <div className={className}>\n {shouldShowAddRelationButton && (\n <Button color=\"primary\" onClick={onAddRelation} className={styles.moreButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {shouldShowRelationEditorToAdd && (\n <RelationEditor connection={relationToAdd} config={config} mode={mode} metadata={metadata} />\n )}\n {newConnections.map(getRelationEditableContent)}\n {newConnections.length > 0 && currentConnections.length > 0 && <Divider className={styles.divider} />}\n {currentConnections.map(getRelationEditableContent)}\n {isEmptyRelationList && <Typography className={styles.noData}>{noDataText}</Typography>}\n </div>\n );\n};\n\nexport default RelationsEditableContent;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n attributesList: {\n paddingLeft: '46px',\n paddingRight: '16px',\n marginBottom: '10px',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0\n }\n}));\n","import React, {useContext, useEffect, useMemo} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n AttributeType,\n CollaborationObjectTypes,\n Connection,\n createRelatedObjectUris,\n Entity,\n getActivenessAttributes,\n getAttributesListForReadMode,\n getAttributeValuesUris,\n getRelationAttributesList,\n isEmptyValue,\n Metadata\n} from '@reltio/mdm-sdk';\nimport {CollaborationContext, ReadOnlyAttributesList, RelatedObjectUrisContext} from '@reltio/components';\nimport {useStyles} from './styles';\nimport {isEmpty} from 'ramda';\n\ntype Props = {\n connection: Connection;\n className?: string;\n};\n\nexport const RelationAttributes = ({connection, className}: Props) => {\n const styles = useStyles();\n\n const {relation} = connection;\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n\n const firstLevelRelationAttrTypes = useMemo(\n () => getRelationAttributesList(metadata, relation?.relationType) as AttributeType[],\n [relation?.relationType, metadata]\n );\n\n const attributeListEntity = useMemo(\n () => ({\n attributes: {\n ...profile.relations.selectors.getRelationAttributesFromConnection(connection)\n },\n ...getActivenessAttributes(connection?.relation || {})\n }),\n [connection]\n );\n\n const attributesList = useMemo(\n () => getAttributesListForReadMode(firstLevelRelationAttrTypes, attributeListEntity as Entity),\n [firstLevelRelationAttrTypes, attributeListEntity]\n );\n\n const showAttributesList = attributesList.filter(({values}) => !isEmptyValue(values)).length > 0;\n\n const objectIds = useMemo(() => getAttributeValuesUris(attributeListEntity.attributes), [attributeListEntity]);\n\n const {getCommentsCount} = useContext(CollaborationContext);\n useEffect(() => {\n !isEmpty(objectIds) && getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n const additionalRelatedObjectUris = useMemo(\n () => createRelatedObjectUris(CollaborationObjectTypes.RELATION, {entityUri: currentEntityUri, connection}),\n [connection, currentEntityUri]\n );\n\n return showAttributesList ? (\n <RelatedObjectUrisContext.Provider value={additionalRelatedObjectUris}>\n <ReadOnlyAttributesList\n className={classnames(styles.attributesList, className)}\n entity={attributeListEntity}\n attrTypes={firstLevelRelationAttrTypes}\n />\n </RelatedObjectUrisContext.Provider>\n ) : (\n <div className={classnames(styles.attributesList, className)}>{i18n.text('No attributes')}</div>\n );\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\nimport InfoIconSelected from '@material-ui/icons/InfoRounded';\nimport InfoIcon from '@material-ui/icons/InfoOutlined';\n\ntype Props = {\n show: boolean;\n onToggle: () => void;\n className?: string;\n};\n\nexport const ShowDetailsButton = ({show, onToggle, className}: Props) => {\n return (\n <SmallIconButtonWithTooltip\n className={className}\n tooltipTitle={\n show\n ? i18n.text('Hide attributes of the relationship')\n : i18n.text('Show attributes of the relationship')\n }\n tooltipPlacement=\"bottom-end\"\n size=\"XXS\"\n icon={show ? InfoIconSelected : InfoIcon}\n onClick={onToggle}\n />\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {inactiveBackground: string; suggested: string}) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n paddingBottom: '2px'\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row',\n minHeight: '16px',\n padding: '3px 11px 3px 16px'\n },\n rowInactive: {\n background: theme.inactiveBackground\n },\n entityAvatar: {\n height: '12px',\n width: '12px',\n fontSize: '11px',\n marginRight: '8px'\n },\n entityLabelContainer: {\n textDecoration: 'none',\n cursor: 'pointer',\n wordBreak: 'break-all',\n paddingRight: '8px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n showDetails: {\n marginLeft: 'auto',\n paddingRight: '5px'\n },\n attributesList: {\n paddingLeft: '46px',\n marginBottom: '10px',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0\n },\n suggestedWrapper: {\n backgroundColor: theme.suggested\n },\n commentsContainer: {\n marginLeft: 'auto',\n alignItems: 'center',\n '& + $showDetails': {\n marginLeft: '4px'\n }\n },\n additionalButtonsWrapper: {\n marginLeft: 'auto',\n display: 'flex'\n },\n labelWrapper: {\n display: 'flex',\n alignItems: 'center'\n }\n}));\n","import React, {memo, useState} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {\n Connection,\n Metadata,\n isActiveObject,\n createRelatedObjectUris,\n CollaborationObjectTypes,\n getConnectionRelationUriForLink\n} from '@reltio/mdm-sdk';\nimport {isEmpty} from 'ramda';\nimport {COMMENTS_CONTAINER_VISIBILITY_AREA, CommentsContainer, EntityTypeIcon, EntityUriLink} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport RelationTooltip from '../../RelationTooltip/RelationTooltip';\nimport {RelationAttributes} from '../RelationAttributes/RelationAttributes';\nimport {ShowDetailsButton} from '../ShowDetailsButton/ShowDetailsButton';\nimport {useRelationInfo} from '../../../hooks/useRelationInfo';\nimport {useStyles} from './styles';\nimport {SuggestedButtons} from '../../SuggestedButtons/SuggestedButtons';\n\ntype Props = {\n connection: Connection;\n acceptRelation?: (connection: Connection) => () => void;\n ignoreRelation?: (connection: Connection) => () => void;\n renderRelationArrowButton: () => React.ReactNode;\n};\n\nconst RelationItem = memo(({connection, renderRelationArrowButton, acceptRelation, ignoreRelation}: Props) => {\n const styles = useStyles();\n const isSuggested = connection.suggested;\n const {entity, relation} = connection;\n const [showDetails, setShowDetails] = useState(false);\n\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n const {entityType, entityLabel, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const isActive = isActiveObject(relation) && isActiveObject(entity);\n\n const toggleShowDetails = () => {\n setShowDetails((show) => !show);\n };\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n const relatedObjectUris =\n (entity &&\n relation &&\n createRelatedObjectUris(CollaborationObjectTypes.RELATION, {\n entityUri: currentEntityUri,\n connection\n })) ||\n [];\n return (\n <div\n className={classnames(\n styles.container,\n {[styles.rowInactive]: !isActive},\n {[styles.suggestedWrapper]: isSuggested}\n )}\n >\n <div className={classnames(styles.row, COMMENTS_CONTAINER_VISIBILITY_AREA)}>\n {renderRelationArrowButton && renderRelationArrowButton()}\n <div className={styles.labelWrapper}>\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n {relationLabel && <span className={styles.relationLabel}>{`, ${relationLabel}`}</span>}\n </EntityUriLink>\n </div>\n <div className={styles.additionalButtonsWrapper}>\n {!isEmpty(relatedObjectUris) && (\n <CommentsContainer\n className={styles.commentsContainer}\n uri={getConnectionRelationUriForLink(relation)}\n relatedObjectUris={relatedObjectUris}\n objectType={CollaborationObjectTypes.RELATION}\n allowOnlyOneComment\n />\n )}\n {isSuggested && (\n <SuggestedButtons\n size=\"small\"\n acceptRelation={acceptRelation(connection)}\n ignoreRelation={ignoreRelation(connection)}\n />\n )}\n {!isSuggested && (\n <ShowDetailsButton\n show={showDetails}\n onToggle={toggleShowDetails}\n className={styles.showDetails}\n />\n )}\n </div>\n </div>\n {showDetails && <RelationAttributes connection={connection} />}\n </div>\n );\n});\n\nRelationItem.displayName = 'RelationItem';\n\nexport default RelationItem;\n","import {pluck, mean, pipe, defaultTo} from 'ramda';\nimport {Rating} from '@reltio/mdm-sdk';\n\nexport const calcAverageRating = (ratings: Rating[]) => {\n return pipe(pluck('value'), mean, defaultTo(0))(ratings);\n};\n\nexport const getCountOfLikes = (ratings: Rating[]) => {\n return ratings.filter((rating) => rating.value === 5).length;\n};\n\nexport const getCountOfDislikes = (ratings: Rating[]) => {\n return ratings.filter((rating) => rating.value === 1).length;\n};\n\nexport const calcWidthOfLikesScale = (ratings: Rating[]) => {\n if (ratings.length === 0) {\n return '0%';\n }\n\n return (getCountOfLikes(ratings) / ratings.length) * 100 + '%';\n};\n\nexport const calcWidthOfDislikesScale = (ratings: Rating[]) => {\n if (ratings.length === 0) {\n return '0%';\n }\n\n return (getCountOfDislikes(ratings) / ratings.length) * 100 + '%';\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end'\n },\n averageRating: {\n marginBottom: '7px',\n fontSize: '16px',\n letterSpacing: '0.15px',\n lineHeight: '19px',\n color: theme.palette.text.primary\n },\n scale: {\n display: 'flex',\n marginBottom: '6px',\n width: '128px',\n height: '4px'\n },\n likesScale: {\n height: '100%',\n backgroundColor: '#8CC152'\n },\n dislikesScale: {\n height: '100%',\n backgroundColor: 'rgb(255, 112, 112)'\n },\n counts: {\n display: 'flex'\n },\n likesCount: {\n marginRight: '32px'\n },\n count: {\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n icon: {\n marginRight: '4px',\n width: '14px',\n height: '14px',\n color: 'rgba(0,0,0,0.38)'\n }\n}));\n","import React from 'react';\nimport classnames from 'classnames';\nimport {Rating} from '@reltio/mdm-sdk';\nimport {Typography as Typography} from '@material-ui/core';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport ThumbDownIcon from '@material-ui/icons/ThumbDown';\nimport {\n calcAverageRating,\n calcWidthOfDislikesScale,\n calcWidthOfLikesScale,\n getCountOfDislikes,\n getCountOfLikes\n} from '../../../helpers/ratings';\nimport {useStyles} from './styles';\n\ntype Props = {\n ratings: Rating[];\n className?: string;\n};\n\nexport const Ratings = ({ratings, className}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.wrapper, className)}>\n <Typography className={styles.averageRating}>{calcAverageRating(ratings).toFixed(1)}</Typography>\n <div className={styles.scale}>\n <div className={styles.likesScale} style={{width: calcWidthOfLikesScale(ratings)}} />\n <div className={styles.dislikesScale} style={{width: calcWidthOfDislikesScale(ratings)}} />\n </div>\n <div className={styles.counts}>\n <div className={classnames(styles.likesCount, styles.count)}>\n <ThumbUpIcon className={styles.icon} />\n {getCountOfLikes(ratings)}\n </div>\n <div className={styles.count}>\n <ThumbDownIcon className={styles.icon} />\n {getCountOfDislikes(ratings)}\n </div>\n </div>\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex'\n },\n button: {\n fontSize: '14px',\n textTransform: 'none',\n color: theme.palette.text.secondary\n },\n likeButton: {\n marginLeft: '-12px',\n marginRight: '8px'\n },\n isActive: {\n color: theme.palette.text.primary\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Rating} from '@reltio/mdm-sdk';\nimport {DropDownMenuButton} from '@reltio/components';\nimport {Button as Button} from '@material-ui/core';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport {useStyles} from './styles';\n\ntype Props = {\n ratings: Rating[];\n onAgree: () => void;\n onDisagree: (comment: string) => void;\n};\n\nexport const RatingsButtons = ({ratings, onAgree, onDisagree}: Props) => {\n const styles = useStyles();\n\n const username = useSelector(mdmModule.selectors.getUserName) as string;\n const ratingOfCurrentUser = ratings.find(({user}) => user === username);\n\n const menuItems = [\n {\n text: i18n.text('Has left the practice'),\n onClick: () => onDisagree(i18n.text('Has left the practice'))\n },\n {\n text: i18n.text('Has moved away'),\n onClick: () => onDisagree(i18n.text('Has moved away'))\n },\n {\n text: i18n.text('Has passed away'),\n onClick: () => onDisagree(i18n.text('Has passed away'))\n },\n {\n text: i18n.text('Has retired'),\n onClick: () => onDisagree(i18n.text('Has retired'))\n },\n {\n text: i18n.text('Other'),\n onClick: () => onDisagree(i18n.text('Other'))\n }\n ];\n\n return (\n <div className={styles.wrapper}>\n <Button\n onClick={onAgree}\n variant=\"text\"\n size=\"small\"\n className={classnames(styles.button, styles.likeButton, {\n [styles.isActive]: ratingOfCurrentUser?.value === 5\n })}\n >\n Agree\n </Button>\n <DropDownMenuButton\n buttonProps={{\n endIcon: <ArrowDropDownIcon />,\n variant: 'text',\n size: 'small',\n className: classnames(styles.button, {\n [styles.isActive]: ratingOfCurrentUser?.value === 1\n })\n }}\n buttonContent={ratingOfCurrentUser?.value === 1 ? ratingOfCurrentUser.comment : 'Disagree'}\n menuItems={menuItems}\n menuId=\"disagree-dropdown-menu-button\"\n />\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {suggested: string}) => ({\n wrapper: {\n padding: '6px 16px 6px'\n },\n entityTypeIcon: {\n marginRight: '16px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '14px',\n letterSpacing: 0,\n lineHeight: '16px'\n },\n entityLabelContainer: {\n wordBreak: 'break-all',\n textDecoration: 'none'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n ratings: {\n marginLeft: 'auto'\n },\n showDetailsButton: {\n marginLeft: '16px',\n marginTop: '18px'\n },\n relationAttributes: {\n paddingLeft: '60px'\n },\n suggestedWrapper: {\n padding: '6px 8px 6px 16px',\n backgroundColor: theme.suggested\n },\n commentsContainer: {\n alignSelf: 'center',\n '& + $ratings': {\n marginLeft: '16px'\n }\n },\n additionalButtonsWrapper: {\n marginLeft: 'auto',\n display: 'flex'\n }\n}));\n","import React, {useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport {isEmpty} from 'ramda';\nimport {COMMENTS_CONTAINER_VISIBILITY_AREA, CommentsContainer, EntityTypeIcon, EntityUriLink} from '@reltio/components';\nimport {\n Metadata,\n Connection,\n rateRelation,\n createRelatedObjectUris,\n CollaborationObjectTypes,\n getConnectionRelationUriForLink\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {Box as Box} from '@material-ui/core';\nimport RelationTooltip from '../../RelationTooltip/RelationTooltip';\nimport {RelationAttributes} from '../RelationAttributes/RelationAttributes';\nimport {ShowDetailsButton} from '../ShowDetailsButton/ShowDetailsButton';\nimport {Ratings} from '../Ratings/Ratings';\nimport {useRelationInfo} from '../../../hooks/useRelationInfo';\nimport {RatingsButtons} from '../RatingsButtons/RatingsButtons';\nimport {SuggestedButtons} from '../../SuggestedButtons/SuggestedButtons';\nimport {useStyles} from './styles';\n\ntype Props = {\n connection: Connection;\n loadRelations: () => void;\n acceptRelation?: (connection: Connection) => () => void;\n ignoreRelation?: (connection: Connection) => () => void;\n renderRelationArrowButton: () => React.ReactNode;\n};\n\nexport const RelationComplexItem = ({\n connection,\n loadRelations,\n renderRelationArrowButton,\n acceptRelation,\n ignoreRelation\n}: Props) => {\n const styles = useStyles();\n const isSuggested = connection.suggested;\n\n const [showDetails, setShowDetails] = useState(false);\n\n const {entity, relation} = connection;\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n const {entityLabel, entityType, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const ratings = relation?.ratings || [];\n\n const toggleShowDetails = () => {\n setShowDetails((show) => !show);\n };\n\n const handleAgree = () => {\n rateRelation(relation?.relationUri, {\n comment: '',\n value: 5\n }).then(loadRelations);\n };\n\n const handleDisagree = (comment: string) => {\n rateRelation(relation?.relationUri, {\n comment,\n value: 1\n }).then(loadRelations);\n };\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n const relatedObjectUris =\n (entity &&\n relation &&\n createRelatedObjectUris(CollaborationObjectTypes.RELATION, {\n entityUri: currentEntityUri,\n connection\n })) ||\n [];\n\n return (\n <div className={classnames(styles.wrapper, {[styles.suggestedWrapper]: isSuggested})}>\n <Box display=\"flex\" minHeight=\"44px\" className={COMMENTS_CONTAINER_VISIBILITY_AREA}>\n <Box display=\"flex\" alignItems=\"center\">\n <Box display=\"flex\" alignItems=\"center\">\n {renderRelationArrowButton && renderRelationArrowButton()}\n <EntityTypeIcon entityType={entityType} className={styles.entityTypeIcon} />\n </Box>\n <Box display=\"flex\" flexDirection=\"column\">\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n </EntityUriLink>\n {relationLabel && <span className={styles.relationLabel}>{relationLabel}</span>}\n {!isSuggested && (\n <RatingsButtons ratings={ratings} onAgree={handleAgree} onDisagree={handleDisagree} />\n )}\n </Box>\n </Box>\n <div className={styles.additionalButtonsWrapper}>\n {!isEmpty(relatedObjectUris) && (\n <CommentsContainer\n className={styles.commentsContainer}\n uri={getConnectionRelationUriForLink(relation)}\n relatedObjectUris={relatedObjectUris}\n objectType={CollaborationObjectTypes.RELATION}\n allowOnlyOneComment\n />\n )}\n {isSuggested && (\n <SuggestedButtons\n acceptRelation={acceptRelation(connection)}\n ignoreRelation={ignoreRelation(connection)}\n />\n )}\n {!isSuggested && (\n <>\n <Ratings ratings={ratings} className={styles.ratings} />\n <ShowDetailsButton\n show={showDetails}\n onToggle={toggleShowDetails}\n className={styles.showDetailsButton}\n />\n </>\n )}\n </div>\n </Box>\n {showDetails && <RelationAttributes connection={connection} className={styles.relationAttributes} />}\n </div>\n );\n};\n","import React, {useMemo, useContext, useEffect} from 'react';\nimport {Connection, getRelationshipsObjectIdsForCollaboration, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {CollaborationContext} from '@reltio/components';\nimport RelationItem from './RelationItem/RelationItem';\nimport {RelationComplexItem} from './RelationCompexItem/RelationComplexItem';\nimport {useSuggestedRelations} from '../../hooks/useSuggestedRelations';\nimport {SecondLevelWrapper} from '../SecondLevelWrapper/SecondLevelWrapper';\n\ntype Props = {\n className?: string;\n connections: Array<Connection>;\n loadRelations: () => void;\n config?: RelationsViewConfig;\n mainEnityUri?: string;\n};\n\nconst RelationsList = ({className, connections = [], loadRelations, config, mainEnityUri}: Props) => {\n const {isComplex, content} = config;\n const {ignoreRelation, acceptRelation} = useSuggestedRelations(content, loadRelations, mainEnityUri);\n\n const objectIds = useMemo(() => {\n return getRelationshipsObjectIdsForCollaboration(connections);\n }, [connections]);\n\n const {getCommentsCount} = useContext(CollaborationContext);\n\n useEffect(() => {\n getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n return (\n <div className={className}>\n {connections.map((connection) => {\n const itemKey = `${connection?.relation?.relationUri}-${connection?.relation?.direction}`;\n\n return (\n <SecondLevelWrapper config={config} connection={connection} key={itemKey}>\n {(renderRelationArrowButton) => {\n if (isComplex) {\n return (\n <RelationComplexItem\n loadRelations={loadRelations}\n connection={connection}\n acceptRelation={acceptRelation}\n ignoreRelation={ignoreRelation}\n renderRelationArrowButton={renderRelationArrowButton}\n />\n );\n }\n\n return (\n <RelationItem\n acceptRelation={acceptRelation}\n ignoreRelation={ignoreRelation}\n connection={connection}\n renderRelationArrowButton={renderRelationArrowButton}\n />\n );\n }}\n </SecondLevelWrapper>\n );\n })}\n </div>\n );\n};\n\nRelationsList.displayName = 'RelationsList';\n\nexport default RelationsList;\n","import {useDispatch} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {\n Connection,\n ignoreSuggestedRelation,\n createRelation,\n getRequestErrorMessage,\n Directions,\n RelationsContent\n} from '@reltio/mdm-sdk';\nimport {ui} from '@reltio/mdm-module';\nimport {getFirstRelationTypeObject} from '../helpers/relation';\n\nexport const useSuggestedRelations = (content: RelationsContent, loadRelations: () => void, mainEnityUri: string) => {\n const relationTypeObject = getFirstRelationTypeObject(content.inRelations, content.outRelations);\n const dispatch = useDispatch();\n const ignoreRelation = (connection: Connection) => () => {\n const {entity} = connection;\n ignoreSuggestedRelation(mainEnityUri, {\n relatedEntityUri: entity.entityUri,\n relationType: relationTypeObject.type,\n relationDirection: relationTypeObject.direction\n })\n .then(loadRelations)\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n });\n };\n\n const acceptRelation = (connection: Connection) => () => {\n const {entity, relation} = connection;\n const {startDate, endDate} = relation;\n const isInDirection = relationTypeObject.direction === Directions.IN;\n const startEntityUri = isInDirection ? entity.entityUri : mainEnityUri;\n const endEntityUri = isInDirection ? mainEnityUri : entity.entityUri;\n createRelation({\n startEntityUri,\n endEntityUri,\n relationType: relationTypeObject.type,\n attributes: null,\n startDate,\n endDate\n })\n .then(loadRelations)\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n });\n };\n\n return {\n ignoreRelation,\n acceptRelation\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n list: {\n paddingTop: '8px',\n paddingBottom: '10px',\n overflow: 'auto',\n flexGrow: 1\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {isEditableMode, Connection, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {LinearLoadIndicator} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport RelationsEditableContent from '../RelationsEditableContent/RelationsEditableContent';\nimport RelationsList from '../RelationsList/RelationsList';\nimport {useStyles} from './styles';\n\ntype Props = {\n isLoading: boolean;\n config: RelationsViewConfig;\n loadRelations: () => void;\n connections: Connection[];\n total: number;\n parentEntityUri?: string;\n};\n\nexport const RelationsContent = ({isLoading, config, loadRelations, connections, total, parentEntityUri}: Props) => {\n const styles = useStyles();\n\n const {selectors} = mdmModule;\n const entity = useSelector(selectors.getEntity);\n const mode = useSelector(selectors.getMode);\n\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n if (isLoading) {\n return <LinearLoadIndicator />;\n }\n\n if (isEditableMode(mode)) {\n return (\n <RelationsEditableContent\n connections={connections}\n className={styles.list}\n key={entity?.uri}\n config={config}\n mode={mode}\n noDataText={noDataText}\n parentEntityUri={parentEntityUri}\n />\n );\n }\n\n if (total > 0) {\n return (\n <RelationsList\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n className={styles.list}\n key={entity?.uri}\n mainEnityUri={entity.uri}\n />\n );\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n container: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0\n },\n content: {\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n flexDirection: 'column',\n minHeight: 0\n },\n pagination: {\n height: '52px',\n flexGrow: 0,\n flexShrink: 0\n }\n});\n","import React, {useContext, useEffect, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {ActivityFilter, Connection, getEntitiesMapForConnections, RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {BasicTablePagination, BasicView, EntitiesMapContext, useRelationsLoader} from '@reltio/components';\nimport RelationsHeader from '../RelationsHeader/RelationsHeader';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {ImportDTContext} from '../../contexts/ImportDTContext';\nimport {buildRelationsFilter} from '../../helpers/filters';\nimport {RelationsContent} from '../RelationsContent/RelationsContent';\nimport {pick} from 'ramda';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: RelationsViewConfig;\n className?: string;\n};\n\nconst RelationsView = ({config, className}: Props) => {\n const styles = useStyles();\n\n const {\n page,\n setPage,\n rowsPerPage,\n sortOrder,\n sortOption,\n showInactive,\n searchQuery,\n changeSearchQuery\n } = useContext(RelationsViewStateContext);\n const {selectors} = mdmModule;\n const connections = useSelector((state) =>\n selectors.getConnectionsWithDraftsByViewId(state, config.id)\n ) as Connection[];\n const entity = useSelector(selectors.getEntity);\n const total = useSelector((state) => selectors.getTotalByViewId(state, config.id));\n const mode = useSelector(selectors.getMode);\n const sorting = useMemo(\n () => ({\n order: sortOrder,\n field: sortOption\n }),\n [sortOrder, sortOption]\n );\n\n useEffect(() => {\n changeSearchQuery('');\n }, [entity?.uri]); //eslint-disable-line react-hooks/exhaustive-deps\n\n const filter = useMemo(() => buildRelationsFilter(searchQuery), [searchQuery]);\n\n const {isLoading, reload: loadRelations} = useRelationsLoader({\n sorting,\n filter,\n page,\n rowsPerPage,\n config,\n entity,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY,\n mode\n });\n\n const entitiesMap = useMemo(() => getEntitiesMapForConnections(connections), [connections]);\n\n const importDTContextValue = useMemo(\n () => ({\n reloadRelations: loadRelations,\n config: pick(['content', 'importFromDT', 'maxDtssImport'], config)\n }),\n [loadRelations, config]\n );\n\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <BasicView className={className}>\n <div className={styles.container}>\n <ImportDTContext.Provider value={importDTContextValue}>\n <RelationsHeader title={config.caption} total={total} />\n </ImportDTContext.Provider>\n <div className={styles.content}>\n <RelationsContent\n isLoading={isLoading}\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n total={total}\n />\n {total > rowsPerPage && (\n <BasicTablePagination\n classes={{root: styles.pagination}}\n count={total}\n rowsPerPageOptions={[]}\n rowsPerPage={rowsPerPage}\n page={page}\n onChangePage={setPage}\n />\n )}\n </div>\n </div>\n </BasicView>\n </EntitiesMapContext.Provider>\n );\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(searchQuery)\n .map(filterValueToQueryStringWithQuotes)\n .map(\n (queryString) =>\n `containsWordStartingWith(entity.label,${queryString})` +\n ' or ' +\n `containsWordStartingWith(relation.label,${queryString})`\n )\n .orSome('');\n\n return new FilterBuilder().addClause(queryClause).build();\n};\n\nexport {buildRelationsFilter};\n","import {useCallback, useMemo, useState} from 'react';\nimport {RelationsViewConfig, SortOrder} 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 Object.entries(config.sortOptions || {}).map(([key, value]) => ({\n value: key,\n label: value\n })),\n [config.sortOptions]\n );\n\n const rowsPerPage = Number(config.max) || DEFAULT_ROWS_PER_PAGE;\n const [page, setPage] = useState(0);\n const [sortOrder, setSortOrder] = useState(config.sortOrder || DEFAULT_SORT_ORDER);\n const [sortOption, setSortOption] = useState(sortOptions[0]?.value);\n const [searchQuery, setSearchQuery] = useState('');\n const [showInactive, setShowInactive] = useState(DEFAULT_SHOW_INACTIVE);\n\n const toggleShowInactive = useCallback(() => {\n setPage(0);\n setShowInactive((showInactive) => !showInactive);\n }, []);\n\n const toggleSortOrder = useCallback(() => {\n setPage(0);\n setSortOrder((order) => {\n return order === 'asc' ? 'desc' : 'asc';\n });\n }, []);\n\n const changeSortOption = useCallback((option: string) => {\n setPage(0);\n setSortOption(option);\n }, []);\n\n const changeSearchQuery = useCallback((value: string) => {\n setPage(0);\n setSearchQuery(value);\n }, []);\n\n return {\n searchQuery,\n changeSearchQuery,\n sortOrder,\n toggleSortOrder,\n sortOption,\n changeSortOption,\n sortOptions,\n page,\n setPage,\n rowsPerPage,\n showInactive,\n toggleShowInactive\n };\n};\n\nexport default useRelationsState;\n","import React from 'react';\nimport {AttributeValue, AttributeType} 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: AttributeValue[];\n page: number;\n setPage: (page: number) => void;\n isLoading: boolean;\n visibleColumns: string[];\n onChangeColumns: (cols: string[]) => void;\n onToggleFilters: () => void;\n onSort: (payload) => void;\n onFilter: (payload) => void;\n hasPaging: boolean;\n totalVisibleValues: number;\n showTable: boolean;\n filters: {\n [key: string]: {\n filter: string;\n values: [string];\n };\n };\n sorting: {\n order: 'desc' | 'asc';\n field: string;\n };\n attributeType: AttributeType;\n allColumnsData: ColumnsDataType;\n }>(null);\n\nTableAttributeContext.displayName = 'TableAttributeContext';\n","import {basicTableViewState, createStandardAction} from '@reltio/components';\n\nconst CHANGE_SEARCH_QUERY = 'CHANGE_SEARCH_QUERY';\n\nconst actions = {\n ...basicTableViewState.actions,\n changeSearchQuery: createStandardAction(CHANGE_SEARCH_QUERY)\n};\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case CHANGE_SEARCH_QUERY:\n return {...state, searchQuery: action.payload, page: 0};\n default:\n return basicTableViewState.reducer(state, action);\n }\n};\n\nexport {reducer as default, actions};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst removedStyle = {\n textDecoration: 'line-through',\n color: 'rgba(0,0,0,.54)'\n};\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 rowCell: {\n fontSize: '13px',\n overflow: 'hidden'\n },\n 'row-cell--sorted': {\n color: 'rgba(0,0,0,0.87)'\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 headCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n fontSize: '12px'\n },\n 'row-cell--removed': {\n pointerEvents: 'none',\n '& > div': removedStyle\n }\n}));\n","import React from 'react';\n\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {withFilterAtBottom} from '@reltio/components';\nimport {useStyles} from './styles';\n\nconst HeadCellRenderer = (props) => {\n const styles = useStyles();\n return (\n <div className={styles.headCell}>\n <DefaultHeadCellRenderer {...props} />\n </div>\n );\n};\n\nexport default withFilterAtBottom(HeadCellRenderer);\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 getOvAttributeValuesByPath,\n isAttributeSearchUri,\n Metadata,\n SearchParent\n} from '@reltio/mdm-sdk';\nimport HeadCellRenderer from '../components/AttributeTable/HeadCellRenderer';\nimport {DefaultCellValueRenderer} from '@reltio/components';\n\nexport const getColumnsDataFromAttributeNode = (attrNode: AttributeNode, parents: SearchParent[]) => {\n const {uri, label, children, name} = attrNode;\n return reject(isNil, {\n id: attributeUriToSearchUri(uri, parents),\n label,\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) => pipe(path(['value']), getOvAttributeValuesByPath(attrPath))(value);\n\nconst getRowValueByColumnId = (columnId, value) => {\n const attrPath = getAttrPathFromColumnId(columnId);\n return getAttributeValues(attrPath, value);\n};\n\nexport const getBasicTableRowsData = (values, columnsData) =>\n values.map((value) =>\n pipe(\n reduce((acc, {id}) => assoc(id, getRowValueByColumnId(id, value), acc), {}),\n assoc('value', value)\n )(columnsData)\n );\n\nconst getNestedPathByColumnId = (columnId) => {\n if (isAttributeSearchUri(columnId)) {\n const attrPath = getAttrPathFromColumnId(columnId);\n return attrPath.length > 1 ? attrPath.slice(0, -1) : null;\n } else {\n return null;\n }\n};\n\nconst getColumnDataByColumnId = (columnData) => ({\n ...columnData,\n sortable: true,\n resizable: true,\n nestedPath: getNestedPathByColumnId(columnData.id),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: DefaultCellValueRenderer\n});\n\nexport const getBasicTableColumnsData = map(getColumnDataByColumnId);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n header: {\n padding: '0 4px 0 16px'\n }\n}));\n","import React from 'react';\nimport {\n FacetViewHeader,\n ColumnsSettings,\n FilterButton,\n VerticalDivider,\n ExpandableSearchInput\n} from '@reltio/components';\nimport {useStyles} from './styles';\nimport {ColumnsDataType} from '../types';\n\ntype Props = {\n title: string;\n total: number;\n columnsData: ColumnsDataType;\n selectedColumns: string[];\n onChangeColumns: (cols: string[]) => void;\n searchQuery: string;\n onChangeSearchQuery: (val: string) => void;\n filtersEnabled: boolean;\n onToggleFilters: () => void;\n};\nconst AttributeTableHeader = ({\n title,\n searchQuery,\n onChangeSearchQuery,\n filtersEnabled,\n onToggleFilters,\n columnsData,\n selectedColumns,\n onChangeColumns\n}: Props) => {\n const styles = useStyles();\n return (\n <FacetViewHeader title={title} className={styles.header}>\n <ExpandableSearchInput query={searchQuery} onChange={onChangeSearchQuery} />\n <FilterButton enabled={filtersEnabled} onClick={onToggleFilters} />\n <VerticalDivider height={24} margin={4} />\n <ColumnsSettings\n columnsData={columnsData}\n selectedColumns={selectedColumns}\n onChangeColumns={onChangeColumns}\n />\n </FacetViewHeader>\n );\n};\n\nexport default AttributeTableHeader;\n","import React from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\nimport {withTableContext} from '@reltio/components';\n\ntype Props = {\n cell: {values: string[]};\n isSorted: boolean;\n CellValueRenderer: React.ElementType;\n isRemoved: boolean;\n};\nconst RowCellRenderer = ({cell, CellValueRenderer, isRemoved, isSorted, ...otherProps}: Props) => {\n const styles = useStyles();\n return (\n <div\n className={classnames(\n {\n [styles['row-cell--sorted']]: isSorted,\n [styles['row-cell--removed']]: isRemoved\n },\n styles.rowCell\n )}\n >\n {cell.values.map((value, index) => (\n <CellValueRenderer key={index} value={value} {...otherProps} />\n ))}\n </div>\n );\n};\n\nexport default withTableContext(({deletedUris}, {rowValue: {value}}) => ({\n isRemoved: Boolean(deletedUris.find((uri) => value.uri === uri))\n}))(RowCellRenderer);\n","import React from 'react';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport i18n from 'ui-i18n';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\n\ntype Props = {\n onEdit?: () => void;\n onRemove?: () => void;\n};\n\nexport const EditButtons = ({onEdit, onRemove}: Props) => (\n <>\n {onEdit && (\n <SmallIconButtonWithTooltip tooltipTitle={i18n.text('Edit')} icon={EditIcon} size=\"L\" onClick={onEdit} />\n )}\n {onRemove && (\n <SmallIconButtonWithTooltip\n tooltipTitle={i18n.text('Remove')}\n icon={DeleteIcon}\n size=\"L\"\n onClick={onRemove}\n />\n )}\n </>\n);\n\nexport default EditButtons;\n","import React, {useCallback, useContext, useMemo, useState} from 'react';\nimport RowCellRenderer from './RowCellRenderer';\nimport {BasicTable, useConfigPermissions} from '@reltio/components';\nimport {getBasicTableColumnsData, getBasicTableRowsData} from '../../helpers/tableAttributeHelpers';\nimport {useStyles} from './styles';\nimport {\n AttributeValue,\n checkCanEditAttribute,\n checkCanDeleteAttribute,\n SearchFilter,\n isReltioCrosswalk,\n Entity,\n isEditableMode as checkIsEditableMode,\n AttributeItem,\n TableAttributeViewConfig\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: AttributeValue[];\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<AttributeValue>;\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: AttributeValue) =>\n canUpdate(config) &&\n checkCanEditAttribute({\n attributeType,\n mode,\n attributeValue,\n isReltioCrosswalk: isReltioCrosswalk(modifiedEntity.crosswalks, attributeValue)\n });\n const checkCanRemove = (attributeValue: AttributeValue) =>\n canDelete(config) &&\n checkCanDeleteAttribute({\n attributeType,\n mode,\n attributeValue,\n metadata,\n isReltioCrosswalk: isReltioCrosswalk(modifiedEntity.crosswalks, attributeValue)\n });\n\n const hideRightContent = useMemo(\n () =>\n typeof hoverRowIndex === 'number' && isEditableMode\n ? deletedUris.includes(pipe(path([hoverRowIndex]), prop('uri'))(values))\n : true,\n [hoverRowIndex, deletedUris, values, isEditableMode]\n );\n const canRemove = typeof hoverRowIndex === 'number' && checkCanRemove(path([hoverRowIndex], values));\n const canEdit = typeof hoverRowIndex === 'number' && checkCanEdit(path([hoverRowIndex], values));\n\n const handleEditAttribute = useCallback(() => {\n const attributeValue = path([hoverRowIndex], values);\n if (!canEdit) return;\n onEdit(attributeValue);\n }, [onEdit, hoverRowIndex, values, canEdit]);\n\n const handleRemoveAttribute = useCallback(() => {\n const attributeValue = path([hoverRowIndex], values);\n if (!canRemove) return;\n const attribute: AttributeItem = {\n parentUri: entityUri,\n attributeType,\n uri: attributeValue.uri,\n value: attributeValue\n };\n onDeleteAttribute(attribute);\n setHoverRowIndex(null);\n }, [hoverRowIndex, values, onDeleteAttribute, canRemove, attributeType, entityUri]);\n\n const hoveredRowRightContent =\n !hideRightContent && (canRemove || canEdit) ? (\n <EditButtons\n onEdit={canEdit ? handleEditAttribute : undefined}\n onRemove={canRemove ? handleRemoveAttribute : undefined}\n />\n ) : undefined;\n const context = useMemo(() => ({deletedUris}), [deletedUris]);\n return (\n <div className={styles.tableContainer}>\n <BasicTable\n autosizing\n maxHeight={MAX_HEIGHT}\n columnsData={tableColumnsData}\n rowsData={tableRowsData}\n sorting={sorting}\n onSort={onSort}\n filters={filters}\n onFilter={onFilter}\n hoverStateEnabled={true}\n defaultColumnWidth={250}\n defaultColumnMinWidth={200}\n headRowHeight={56}\n resizeDebounceDelay={150}\n renderRowCell={renderRowCell}\n onRowHover={setHoverRowIndex}\n hoverRowIndex={hoverRowIndex}\n hoveredRowRightContent={hoveredRowRightContent}\n context={context}\n classes={{\n hoveredRowRightContentWrapper: styles['row-cell__buttons-wrapper'],\n hoveredRowRightContentContainer: styles['row-cell__buttons-container']\n }}\n />\n </div>\n );\n};\n\nexport default AttributeTable;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n actionButtons: {\n display: 'flex',\n justifyContent: 'flex-end',\n margin: '0 8px 10px',\n\n '& > button': {\n fontSize: '14px',\n lineHeight: '16px',\n marginLeft: '8px',\n padding: '10px 8px',\n backgroundColor: 'rgba(98, 2, 238, 0)'\n }\n }\n}));\n","import {Button as Button} from '@material-ui/core';\nimport React, {useCallback, useContext} from 'react';\nimport {useStyles} from './styles';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {AttributeValue, Entity, isTempUri, getAttributeOwnError, AttributeItem} from '@reltio/mdm-sdk';\nimport {pipe} from 'ramda';\nimport {EditableAttribute, ViewIdContext} from '@reltio/components';\nimport i18n from 'ui-i18n';\n\ntype Props = {\n hasChanges: boolean;\n onChangeAttribute: (attribute: AttributeItem) => void;\n onDeleteAttribute: (attribute: AttributeItem) => void;\n onCancel: (attributeValue: AttributeValue) => void;\n onApply: (attributeValue: AttributeValue) => void;\n attributeValue: AttributeValue;\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 entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const {attributeType} = useContext(TableAttributeContext);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n const mode = useSelector(mdmModule.selectors.getMode);\n\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\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 showEmptyEditors = isTempUri(entityUri);\n\n const errors = useSelector((state) =>\n mdmModule.selectors.getActiveErrorsForAttributesPager(state, entityUri, attributeType)\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\n onClick={() => {\n onCancel(attributeValue);\n }}\n >\n {i18n.text('Cancel')}\n </Button>\n <Button\n color=\"primary\"\n disabled={!hasChanges}\n onClick={() => {\n onApply(attributeValue);\n }}\n >\n {i18n.text('Apply')}\n </Button>\n </div>\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n padding: '4px 16px 9px',\n flex: 1,\n overflow: 'auto'\n },\n noData: {\n fontSize: '13px',\n paddingLeft: '20px',\n color: 'rgba(0,0,0,0.54)'\n },\n\n tableContainer: {\n height: '477px',\n display: 'flex',\n fontFamily: 'Roboto',\n color: 'rgba(0,0,0,0.54)'\n },\n\n header: {\n padding: '0 4px 0 16px'\n },\n\n addButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n editor: {\n padding: '4px 16px'\n }\n}));\n","import {useCallback, useContext, useState, useMemo, useEffect} from 'react';\nimport {\n AttributeValue,\n createNewAttribute,\n Entity,\n getAttributeSource,\n isEditableMode as checkIsEditableMode,\n NestedAttributeValue,\n AttributeItem\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<AttributeValue[]>([]);\n const mode = useSelector(mdmModule.selectors.getMode);\n\n useEffect(() => {\n setOriginalValues([]);\n setNewAttributeUri(null);\n }, [mode]);\n\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const {attributeType, values} = useContext(TableAttributeContext);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const onChangeAttribute = useCallback(\n (params: AttributeItem) => {\n pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId});\n },\n [viewId, dispatch]\n );\n const onDeleteAttribute = useCallback(\n (params: AttributeItem) => pipe(profile.actions.removeAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const onAdd = useCallback(() => {\n const newAttribute = createNewAttribute({\n parentUri: entityUri,\n attributeType\n });\n setNewAttributeUri(newAttribute.uri);\n onChangeAttribute({\n ...newAttribute,\n value: createDefaultValues({\n attributeTypes: attributeType.attributes,\n parentUri: newAttribute.uri,\n mode,\n metadata\n }),\n attributeType\n });\n }, [entityUri, attributeType]);\n\n const onStartEditing = useCallback(\n (attributeValue: AttributeValue) => {\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: AttributeValue) => {\n const editingValueOriginal = originalValues.find(propEq('uri', attributeValue.uri));\n if (editingValueOriginal) {\n const attributeItem = {\n ...attributeValue,\n value: editingValueOriginal,\n attributeType,\n uri: attributeValue.uri\n };\n setOriginalValues((prev) => without([editingValueOriginal], prev));\n onChangeAttribute(attributeItem);\n } else {\n const attributeItem = {\n value: attributeValue,\n attributeType,\n uri: attributeValue.uri\n };\n setNewAttributeUri(null);\n onDeleteAttribute(attributeItem);\n }\n },\n [onDeleteAttribute, onChangeAttribute, setOriginalValues, originalValues]\n );\n\n const onApply = useCallback(\n (attributeValue: AttributeValue) => {\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 [setOriginalValues, setNewAttributeUri]\n );\n\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n const isEditableMode = checkIsEditableMode(mode);\n const attributeSource = getAttributeSource(attributeType);\n\n const modifiedEntityValues: NestedAttributeValue[] = pathOr(\n emptyArray,\n [attributeSource, attributeType?.name],\n modifiedEntity\n );\n\n const modifiedValues = useMemo(() => {\n const newValues = modifiedEntityValues.filter(\n pipe(prop('uri'), both(isTempUri, pipe(equals(newAttributeUri), not)))\n );\n\n const oldValues = map(\n (originalValue) => modifiedEntityValues.find(propEq('uri', originalValue.uri)) || originalValue\n )(values);\n return [...newValues, ...oldValues].map((value) => originalValues.find(propEq('uri', value.uri)) ?? value);\n }, [modifiedEntityValues, originalValues, newAttributeUri, values]);\n\n const deletedUris = useMemo(\n () =>\n isEditableMode\n ? pipe(\n map(prop('uri')),\n filter((uri) => !modifiedEntityValues.find(propEq('uri', uri)))\n )(values)\n : [],\n [modifiedEntityValues, values]\n );\n\n const editingValues = modifiedEntityValues.filter(\n ({uri}) => uri === newAttributeUri || originalValues.find(propEq('uri', uri))\n );\n\n const checkHasChanges = (value) => originalValues.find(propEq('uri', value.uri)) !== value;\n\n return {\n checkHasChanges,\n onChangeAttribute,\n onDeleteAttribute,\n onAdd,\n onCancel,\n onApply,\n onStartEditing,\n modifiedValues,\n editingValues,\n deletedUris\n };\n};\n","import React, {useContext, useMemo} from 'react';\nimport classnames from 'classnames';\nimport {\n BasicView,\n BasicTablePagination,\n LinearLoadIndicator,\n FacetViewHeader,\n useConfigPermissions\n} from '@reltio/components';\nimport {propEq} from 'ramda';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport AttributeTableHeader from '../AttributeTableHeader/AttributeTableHeader';\nimport AttributeTable from '../AttributeTable/AttributeTable';\nimport {Typography as Typography} from '@material-ui/core';\nimport i18n from 'ui-i18n';\nimport {AttributeEditing} from '../AttributeEditing/AttributeEditing';\n\nimport {useStyles} from './styles';\nimport {\n checkCanCreateAttribute,\n isEditableMode as checkIsEditableMode,\n TableAttributeViewConfig\n} from '@reltio/mdm-sdk';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {useEditableAttribute} from './hooks/useEditableAttribute';\n\ntype Props = {\n config: TableAttributeViewConfig;\n className?: string;\n};\n\nexport const TableAttributeView = ({config, className}: Props) => {\n const {caption, max} = config;\n const styles = useStyles();\n\n const {\n values,\n page,\n setPage,\n isLoading,\n searchQuery,\n setSearchQuery,\n visibleColumns,\n onFilter,\n onSort,\n onToggleFilters,\n onChangeColumns,\n filters,\n sorting,\n totalVisibleValues,\n hasPaging,\n attributeType,\n showTable,\n allColumnsData\n } = useContext(TableAttributeContext);\n\n const {\n checkHasChanges,\n onChangeAttribute,\n onDeleteAttribute,\n onAdd,\n onCancel,\n onApply,\n onStartEditing,\n modifiedValues,\n editingValues,\n deletedUris\n } = useEditableAttribute();\n\n const mode = useSelector(mdmModule.selectors.getMode);\n const isEditableMode = checkIsEditableMode(mode);\n\n const preparedValues = isEditableMode ? modifiedValues : values;\n\n const {canCreate: hasConfigToCreate} = useConfigPermissions();\n\n const canCreate =\n hasConfigToCreate(config) &&\n attributeType &&\n checkCanCreateAttribute({attributeType, mode}) &&\n !editingValues.length;\n\n const visibleColumnsData = useMemo(\n () => visibleColumns.map((id) => allColumnsData.find(propEq('id', id))),\n [visibleColumns, allColumnsData]\n );\n\n return (\n <BasicView className={classnames(styles.root, className)}>\n {showTable ? (\n <>\n <AttributeTableHeader\n title={caption}\n total={totalVisibleValues}\n columnsData={allColumnsData}\n selectedColumns={visibleColumns}\n onChangeColumns={onChangeColumns}\n searchQuery={searchQuery}\n onChangeSearchQuery={setSearchQuery}\n filtersEnabled={!!filters}\n onToggleFilters={onToggleFilters}\n />\n <div style={{position: 'relative'}}>\n {isEditableMode && (\n <div className={styles.editor}>\n {canCreate && (\n <Button color=\"primary\" onClick={onAdd} className={styles.addButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {editingValues.map((value) => (\n <AttributeEditing\n key={value.uri}\n attributeValue={value}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onDeleteAttribute}\n onCancel={onCancel}\n onApply={onApply}\n hasChanges={checkHasChanges(value)}\n />\n ))}\n </div>\n )}\n {visibleColumnsData.length > 0 && (\n <AttributeTable\n columnsData={visibleColumnsData}\n config={config}\n values={preparedValues}\n filters={filters}\n onFilter={onFilter}\n sorting={sorting}\n onSort={onSort}\n onEdit={onStartEditing}\n onDeleteAttribute={onDeleteAttribute}\n deletedUris={deletedUris}\n />\n )}\n {hasPaging && (\n <BasicTablePagination\n count={totalVisibleValues}\n rowsPerPageOptions={[]}\n rowsPerPage={max}\n page={page}\n onChangePage={setPage}\n />\n )}\n {isLoading && <LinearLoadIndicator />}\n </div>\n </>\n ) : (\n <>\n <FacetViewHeader title={caption} className={styles.header} />\n <Typography className={styles.noData}>{i18n.text('No data')}</Typography>\n </>\n )}\n </BasicView>\n );\n};\n","import {useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {pick, prop} from 'ramda';\nimport {Entity, getPathsTree, isTempUri, updateTreesWithNewEntity} from '@reltio/mdm-sdk';\nimport {useDidUpdateEffect, useSafePromise} from '@reltio/components';\nimport {Response, Node} from '../types';\n\nlet nodeCounter = 0;\nexport const generateId = () => nodeCounter++;\n\nconst processResponse = (response: Response) => {\n const fakeRoot = {\n children: [] as Node[],\n nodeId: generateId()\n };\n if (response.parentPaths) {\n for (let i = 0; i < response.parentPaths.length; i++) {\n const path = response.parentPaths[i];\n let nextRoot = fakeRoot;\n for (let j = path.length - 1; j >= 0; j--) {\n const nextParent = path[j];\n const entity = response.entities[nextParent.entityUri];\n const isRoot = j === path.length - 1;\n const node: Node = {\n entity,\n children: [],\n nodeId: generateId(),\n expanded: true,\n rootIndex: isRoot ? i + 1 : undefined\n };\n if (isRoot) {\n node.root = isRoot;\n }\n nextRoot.children.push(node);\n nextRoot = node;\n }\n }\n }\n return fakeRoot.children;\n};\nexport const useLoadPaths = (entityUri: string, graphUri: string) => {\n const safePromise = useSafePromise();\n const [treeData, setTreeData] = useState<Node[]>([]);\n const 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 safePromise(getPathsTree({uri: entityUri, graphUri}))\n .then(processResponse)\n .then(setTreeData)\n .catch((e) => {\n console.warn(e);\n });\n }\n return () => {\n setTreeData([]);\n };\n }, [entityUri, graphUri, safePromise]);\n return {treeData, setTreeData};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n fontSize: '13px',\n display: 'flex',\n paddingTop: '6px',\n position: 'relative'\n },\n title: {\n flexGrow: 1,\n minHeight: '15px',\n color: theme.palette.primary.main,\n lineHeight: '15px'\n },\n link: {\n cursor: 'pointer',\n color: theme.palette.primary.main,\n lineHeight: '15px'\n },\n selected: {\n fontWeight: 'bold'\n },\n wrapper: {\n width: '100%'\n },\n avatar: {\n height: '16px',\n width: '16px',\n marginRight: '8px',\n marginLeft: '8px'\n },\n header: {\n padding: '0 4px 0 16px'\n },\n treeContainer: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n minHeight: '372px',\n maxHeight: '507px',\n overflow: 'auto'\n },\n tree: {\n flexGrow: 1,\n height: 0\n },\n buttonsContainer: {\n flexShrink: 0,\n marginLeft: 'auto',\n '& > * + *': {\n marginLeft: '-4px'\n }\n },\n button: {\n padding: '8px'\n }\n}));\n","import React from 'react';\nimport {HierarchyPathsViewConfig} from '@reltio/mdm-sdk';\n\nexport const ConfigContext = React.createContext<HierarchyPathsViewConfig>(null);\n","import React, {memo, useCallback, useContext} from 'react';\nimport classnames from 'classnames';\nimport {Avatar as Avatar} from '@material-ui/core';\nimport {useStyles} from './styles';\nimport DEFAULT_ICON from './defaultTypeIcon.png';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdm, {ui} from '@reltio/mdm-module';\nimport {ConfigContext} from './ConfigContext';\nimport {getAbsoluteImageUrl, getEntityType, getPropWithInheritance, getEntityLink} from '@reltio/mdm-sdk';\nimport {Link} from '@reltio/components';\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 styles = useStyles();\n const dispatch = useDispatch();\n const uri = node.entity.uri;\n const absoluteImagePath = useSelector(mdm.selectors.getAbsoluteImagePath);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const config = useContext(ConfigContext);\n const uiPath = useSelector(mdm.selectors.getUIPath);\n const {uri: currentEntityUri} = useSelector(mdm.selectors.getEntity);\n const entityLink = getEntityLink({uiPath, uri});\n const isSelected = uri === currentEntityUri;\n const onTitleClick = useCallback(() => {\n dispatch(ui.actions.openEntity({uri, viewId: config.id}));\n }, [dispatch, config, uri]);\n const {\n entity: {label: title},\n nodeId\n } = node;\n const entityType = getEntityType(metadata, node.entity.type) || {};\n const entityTypeGraphIcon = getPropWithInheritance(metadata, entityType, 'typeGraphIcon');\n const icon = entityTypeGraphIcon && getAbsoluteImageUrl(absoluteImagePath, entityTypeGraphIcon);\n return (\n <div className={styles.wrapper} data-node-id={nodeId}>\n <div className={styles.container}>\n <Avatar className={classnames(styles.avatar)} src={icon || DEFAULT_ICON} onError={onImageLoadFail} />\n <span className={classnames(styles.link, {[styles.selected]: isSelected})}>\n <Link to={entityLink} onClick={onTitleClick}>\n {title}\n </Link>\n </span>\n </div>\n </div>\n );\n};\n\nexport default memo(Node);\n","export const getNodeKey = ({node}) => node.nodeId;\n","import {makeStyles} from '@material-ui/core/styles';\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 },\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: '50%',\n top: 0,\n height: '50%',\n position: 'absolute',\n backgroundColor: 'rgba(0,122,193,0.3)'\n },\n horizontalLineRight: {\n height: '1px',\n top: '14px',\n left: '50%',\n width: '24%',\n position: 'absolute',\n backgroundColor: 'rgba(0,122,193,0.3)'\n },\n node: {\n minWidth: '100%',\n position: 'relative',\n textAlign: 'left',\n padding: '0 24px 0 18px',\n boxSizing: 'border-box',\n whiteSpace: 'normal',\n '&:hover': {\n backgroundColor: 'rgba(0,0,0,0.06)'\n }\n },\n nodeContent: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n paddingLeft: '18px',\n boxSizing: 'border-box'\n },\n row: {\n display: 'flex'\n },\n rowContents: {\n position: 'relative',\n borderLeft: 'none',\n paddingLeft: '4px',\n flex: '1 1 auto',\n width: 0,\n display: 'flex',\n verticalAlign: 'middle',\n boxSizing: 'border-box'\n },\n buttonWrapper: {\n display: 'flex',\n paddingTop: '13px',\n width: '12px',\n cursor: 'pointer'\n },\n collapsedButton: {\n transform: 'rotate(-90deg)'\n },\n expandedButton: {\n transform: 'rotate(0deg)'\n },\n button: {\n transition: 'transform .15s ease',\n width: 0,\n height: 0,\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n borderTop: '4px solid rgba(0, 0, 0, 0.54)'\n },\n rowTitle: {\n flex: '1 1 auto',\n width: 0,\n paddingRight: '11px'\n }\n}));\n","import React from 'react';\nimport {useStyles} from './styles';\nimport classnames from 'classnames';\nimport {omit} from 'ramda';\nimport {Node} from '../types';\n\ntype Props = {\n treeIndex: number;\n scaffoldBlockPxWidth: number;\n node: Node;\n path: Array<string | number>;\n style?: Record<string, unknown>;\n title: React.ReactElement;\n toggleChildrenVisibility: (props) => void;\n};\n\nconst NodeRendererDefault = (props: Props) => {\n const {scaffoldBlockPxWidth, toggleChildrenVisibility, node, title, path, treeIndex, style, ...otherProps} = omit(\n [\n 'connectDragPreview',\n 'connectDragSource',\n 'isDragging',\n 'canDrop',\n 'canDrag',\n 'draggedNode',\n 'isSearchMatch',\n 'isSearchFocus',\n 'buttons',\n 'didDrop',\n 'children',\n 'treeId',\n 'isOver',\n 'parentNode',\n 'rowDirection'\n ],\n props\n );\n const nodeTitle = title;\n\n const showToggleChildrenButton =\n toggleChildrenVisibility && !node.root && node.children && node.children.length > 0;\n\n const onToggle = () => {\n toggleChildrenVisibility({\n node,\n path,\n treeIndex\n });\n };\n const styles = useStyles();\n return (\n <div style={{height: '100%'}} {...otherProps} key={node.nodeId}>\n {showToggleChildrenButton && node.expanded && (\n <div style={{width: scaffoldBlockPxWidth - 2}} className={styles.lineChildren} />\n )}\n <div className={styles.row} style={style}>\n <div className={styles.rowContents}>\n {showToggleChildrenButton && (\n <div className={styles.buttonWrapper} onClick={onToggle}>\n <div\n aria-label={node.expanded ? 'Collapse' : 'Expand'}\n className={classnames(\n styles.button,\n node.expanded ? styles.expandedButton : styles.collapsedButton\n )}\n />\n </div>\n )}\n <div className={styles.rowTitle}>\n {typeof nodeTitle === 'function'\n ? nodeTitle({\n node,\n path,\n treeIndex\n })\n : nodeTitle}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default NodeRendererDefault;\n","import treeNodeRenderer from './tree-node-data-renderer';\nimport nodeContentRenderer from './node-content-renderer';\n\nconst scaffoldBlockPxWidth = 16;\nconst rowHeight = 28;\nconst slideRegionSize = 50;\n\nexport const theme = {nodeContentRenderer, treeNodeRenderer, scaffoldBlockPxWidth, rowHeight, slideRegionSize};\n","import React from 'react';\nimport {useStyles} from './styles';\nimport {omit} from 'ramda';\nimport {Node} from '../types';\n\nconst MIN_NODE_CONTENT_WIDTH = 250;\n\ntype Props = {\n scaffoldBlockPxWidth: number;\n lowerSiblingCounts: number[];\n\n node: Node;\n children: React.ReactElement;\n style?: Record<string, unknown>;\n};\n\nconst TreeNode = (props: Props) => {\n const {children, scaffoldBlockPxWidth, lowerSiblingCounts, node, ...otherProps} = omit(\n [\n 'listIndex',\n 'swapFrom',\n 'swapLength',\n 'swapDepth',\n 'draggedNode',\n 'getPrevRow',\n 'connectDropTarget',\n 'isOver',\n 'canDrop',\n 'treeIndex',\n 'treeId',\n 'path',\n 'rowDirection'\n ],\n props\n );\n const styles = useStyles();\n // Construct the scaffold representing the structure of the tree\n const scaffoldBlockCount = lowerSiblingCounts.length;\n const scaffold = [];\n lowerSiblingCounts.forEach((lowerSiblingCount, i) => {\n scaffold.push(\n <div key={`pre_${1 + i}`} style={{width: scaffoldBlockPxWidth}} className={styles.lineBlock}>\n {node.root && <div className={styles.rootIndex}>{node.rootIndex}.</div>}\n {i === scaffoldBlockCount - 1 && i !== 0 && (\n <>\n <div className={styles.verticalLine} />\n <div className={styles.horizontalLineRight} />\n </>\n )}\n </div>\n );\n });\n\n const shift = node.root ? scaffoldBlockPxWidth - 4 : 0; //4px - shifting for rootIndex\n const scaffoldWidth = scaffoldBlockPxWidth * scaffoldBlockCount - shift;\n const style = {left: scaffoldWidth, width: `calc(100% - ${scaffoldWidth}px`};\n const width = `${scaffoldWidth + MIN_NODE_CONTENT_WIDTH}px`;\n const nodeStyle = {...otherProps.style, width};\n return (\n <div {...otherProps} className={styles.node} style={nodeStyle}>\n {scaffold}\n\n <div className={styles.nodeContent} style={style}>\n {children}\n </div>\n </div>\n );\n};\n\nexport default TreeNode;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\",\n fillOpacity: \".54\"\n}, React.createElement(\"path\", {\n d: \"M14.5 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm4 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm-17 1a1.5 1.5 0 110-3 1.5 1.5 0 010 3zM4 4a2 2 0 110-4 2 2 0 010 4zm1 16a2 2 0 110-4 2 2 0 010 4zm4.5-6a4.5 4.5 0 110-9 4.5 4.5 0 010 9zm0-2a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm6 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3z\",\n fill: \"#000\"\n}))));","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {FacetViewHeader, SmallIconButtonWithTooltip} from '@reltio/components';\nimport ShowGraphIcon from './icons/ShowGraph.svg';\nimport {useStyles} from './styles';\n\ntype Props = {\n title?: string;\n onGraphOpen: () => void;\n};\n\nconst HierarchyPathsHeader = ({title, onGraphOpen}: Props) => {\n const styles = useStyles();\n return (\n <FacetViewHeader title={title} className={styles.header}>\n <div className={styles.buttonsContainer}>\n <SmallIconButtonWithTooltip\n className={styles.button}\n tooltipTitle={i18n.text('Show Graph')}\n icon={ShowGraphIcon}\n onClick={onGraphOpen}\n size=\"L\"\n />\n </div>\n </FacetViewHeader>\n );\n};\n\nexport default HierarchyPathsHeader;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n position: 'relative'\n },\n bodyWrapper: {\n paddingTop: '21px'\n }\n}));\n","import React, {useRef, useEffect, useState} from 'react';\nimport {useAPI} from '@reltio/components';\nimport {CustomActionViewConfig} from '@reltio/mdm-sdk';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {Dialog as Dialog} from '@material-ui/core';\nimport {isNil, reject} from 'ramda';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: CustomActionViewConfig;\n className?: string;\n};\n\nexport const CustomView = ({config, className}: Props) => {\n const basicViewRef = useRef<HTMLDivElement>();\n const dialogRef = useRef<HTMLDivElement>();\n const [showModal, setShowModal] = useState<boolean>(false);\n const {height, width, tooltip: defaultTooltip} = config;\n const {html, visible, tooltip: updatedTooltip, customStyles, popup} = useAPI(config);\n const styles = useStyles();\n const tooltip = updatedTooltip || defaultTooltip;\n useEffect(() => {\n if (basicViewRef.current && html) {\n basicViewRef.current.innerHTML = '';\n Array.from(html.childNodes).forEach((child) => {\n basicViewRef.current.appendChild(child);\n });\n }\n }, [html]);\n useEffect(() => {\n setShowModal(!!popup);\n }, [popup]);\n\n useEffect(() => {\n if (showModal && dialogRef.current) {\n dialogRef.current.innerHTML = '';\n if (popup) {\n Array.from(popup.childNodes).forEach((child) => {\n dialogRef.current.appendChild(child);\n });\n }\n }\n }, [showModal, popup]);\n\n const style: {width?: number; height?: number} = reject(isNil, {width, height});\n return visible ? (\n <div className={styles.bodyWrapper}>\n <Dialog ref={dialogRef} open={!!popup} />\n <Tooltip title={tooltip || ''}>\n <div\n ref={basicViewRef}\n style={{...style, ...customStyles}}\n className={classnames(styles.root, className)}\n />\n </Tooltip>\n </div>\n ) : null;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n dragHandleContainer: {\n position: 'relative',\n width: '100%',\n height: 'inherit'\n },\n dragHandleVisibilityArea: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '24px',\n zIndex: 11,\n '&:hover $dragHandle': {\n visibility: 'visible'\n },\n '.react-grid-item.static &:hover $dragHandle': {\n visibility: 'hidden'\n }\n },\n dragHandle: {\n position: 'absolute',\n width: '100%',\n display: 'flex',\n justifyContent: 'center',\n top: '-3px',\n zIndex: 11,\n cursor: 'move',\n visibility: 'hidden'\n },\n dragIcon: {\n transform: 'translateX(-50%) rotate(90deg)',\n color: 'rgba(0, 0, 0, 0.3)'\n }\n});\n","import React, {ComponentType} from 'react';\nimport classnames from 'classnames';\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\n\nimport {useStyles} from './styles';\n\nconst withDragHandle = <P extends Record<string, unknown>>(Component: ComponentType<P>) => {\n const WithDragHandle = (props: P) => {\n const styles = useStyles();\n return (\n <div className={styles.dragHandleContainer}>\n <div className={styles.dragHandleVisibilityArea}>\n <div className={classnames('viewDraggableHandle', styles.dragHandle)}>\n <DragIndicatorIcon className={styles.dragIcon} />\n </div>\n </div>\n <Component {...props} />\n </div>\n );\n };\n\n WithDragHandle.displayName = 'WithDragHandle';\n return WithDragHandle;\n};\n\nexport default withDragHandle;\n","import React, {ComponentType} from 'react';\nimport i18n from 'ui-i18n';\nimport {EMPTY_STATE_ICONS, EMPTY_STATE_VARIANTS, EmptyState, ErrorBoundary} from '@reltio/components';\n\nconst withErrorBoundary = <P extends Record<string, unknown>>(Component: ComponentType<P>) => {\n const WithErrorBoundary = (props: P) => {\n return (\n <ErrorBoundary\n error={\n <EmptyState\n LogoRenderer={EMPTY_STATE_ICONS.ERROR}\n text=\"\"\n secondaryText={i18n.text('Something went wrong')}\n variant={EMPTY_STATE_VARIANTS.small}\n />\n }\n >\n <Component {...props} />\n </ErrorBoundary>\n );\n };\n\n WithErrorBoundary.displayName = 'WithErrorBoundary';\n return WithErrorBoundary;\n};\n\nexport default withErrorBoundary;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n stubView: {\n padding: '20px'\n },\n fullHeight: {\n height: '100%'\n },\n component: {\n boxSizing: 'border-box',\n overflow: 'auto',\n boxShadow: 'none',\n borderRadius: 'unset'\n }\n});\n","import {useEffect, useState} from 'react';\nimport {both, gt, lt, path, pipe} from 'ramda';\nimport {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, metadata, mapKey) => {\n const [markers, setMarkers] = useState([]);\n const [loading, setLoading] = useState(true);\n const safePromise = useSafePromise();\n useEffect(() => {\n setLoading(true);\n safePromise(resolve(metadata, [entity], mapKey))\n .then((markers) => {\n setMarkers(markers.filter(filterWrongLat));\n })\n .catch(() => {\n setMarkers([]);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [entity, metadata, mapKey, safePromise]);\n\n return {markers, loading};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles(() => ({\n root: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column'\n },\n fullHeight: {\n height: '100%'\n },\n fullscreenBtn: {\n position: 'absolute',\n right: '5px',\n top: '5px',\n zIndex: 100\n }\n}));\n\nexport default useStyles;\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n caption: {\n color: theme.palette.text.secondary,\n fontSize: '13px'\n }\n}));\n\nexport default useStyles;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport useStyles from './styles';\n\ntype ImageLineCaptionProps = {\n totalImages: number;\n};\n\nexport const ImageLineCaption = ({totalImages}: ImageLineCaptionProps) => {\n const styles = useStyles();\n const photoWord = totalImages > 1 ? i18n.text('photos') : i18n.text('photo');\n return (\n <Typography variant=\"caption\" className={styles.caption}>\n {`${totalImages} ${photoWord}`}\n </Typography>\n );\n};\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pipe, pathOr} from 'ramda';\nimport {EditableImageAttributesLine} from '@reltio/components';\nimport {AttributeType, Entity, Paging, AttributeItem, ImageAttributeViewConfig} from '@reltio/mdm-sdk';\nimport mdmModule, {profile, RequestNextPageOfAttributeValuesPayload} from '@reltio/mdm-module';\nimport {IMAGE_SIZE} from '../ImageAttributeView';\nimport {ImageLineCaption} from '../ImageLineCaption/ImageLineCaption';\n\ntype ImageAttributeViewEditableContentProps = {\n config: ImageAttributeViewConfig;\n attributeType: AttributeType;\n paging?: Paging;\n requestNextPageOfAttributeValues?: (payload: RequestNextPageOfAttributeValuesPayload) => void;\n};\n\nexport const ImageAttributeViewEditableContent = ({\n config,\n attributeType,\n paging,\n requestNextPageOfAttributeValues\n}: ImageAttributeViewEditableContentProps) => {\n const dispatch = useDispatch();\n const entity = useSelector(mdmModule.selectors.getEntity);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entity.uri) || ({} as Entity)\n );\n const modifiedEntityValues = pathOr([], ['attributes', attributeType.name], modifiedEntity);\n const viewId = config.id;\n\n const onChangeAttribute = (params: AttributeItem) =>\n pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId});\n\n const onDeleteAttribute = (params: AttributeItem) =>\n pipe(profile.actions.removeAttribute, dispatch)({...params, viewId});\n\n return (\n <>\n <EditableImageAttributesLine\n attributeValues={modifiedEntityValues}\n attributeType={attributeType}\n onDeleteAttribute={onDeleteAttribute}\n parentUri={modifiedEntity.uri}\n onChangeAttribute={onChangeAttribute}\n imageSize={IMAGE_SIZE}\n paging={paging}\n requestNextPageOfAttributeValues={requestNextPageOfAttributeValues}\n />\n <ImageLineCaption totalImages={modifiedEntityValues.length} />\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n padding: '8px 16px'\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary\n }\n}));\n\nexport default useStyles;\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pathOr, path} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport {BasicView, FacetViewHeader, ImageAttributesLine} from '@reltio/components';\nimport {findAttributeTypeByUri, isEditableMode, ImageAttributeViewConfig} from '@reltio/mdm-sdk';\nimport mdmModule, {profile, RequestNextPageOfAttributeValuesPayload} from '@reltio/mdm-module';\nimport {ImageAttributeViewEditableContent} from './ImageAttributeViewEditableContent/ImageAttributeViewEditableContent';\nimport {ImageLineCaption} from './ImageLineCaption/ImageLineCaption';\nimport useStyles from './styles';\n\ntype ImageAttributeViewProps = {\n config: ImageAttributeViewConfig;\n className?: string;\n};\n\nexport const IMAGE_SIZE = {\n imageMargin: 4,\n imageWidth: 162,\n imageHeight: 162\n};\n\nexport const ImageAttributeView = ({config, className}: ImageAttributeViewProps) => {\n const {attributeUri} = config;\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const mode = useSelector(mdmModule.selectors.getMode);\n const entity = useSelector(mdmModule.selectors.getEntityWithDiff);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n\n const attributeType = findAttributeTypeByUri(metadata, attributeUri);\n const entityValues = pathOr([], ['attributes', attributeType?.name], entity);\n const paging = path(['attributes', 'paging', attributeUri], entity);\n const totalValues = entityValues.length;\n\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n const requestNextPageOfAttributeValues = useCallback(\n (payload: RequestNextPageOfAttributeValuesPayload) =>\n dispatch(profile.actions.requestNextPageOfAttributeValues(payload)),\n [dispatch]\n );\n\n const renderContent = () => {\n if (attributeType) {\n if (isEditableMode(mode)) {\n const props = {\n attributeType,\n config,\n paging,\n requestNextPageOfAttributeValues\n };\n return <ImageAttributeViewEditableContent {...props} />;\n }\n if (totalValues > 0) {\n const props = {\n attributeValues: entityValues,\n attributeType,\n imageSize: IMAGE_SIZE,\n paging,\n parentUri: entity.uri,\n requestNextPageOfAttributeValues\n };\n return (\n <>\n <ImageAttributesLine {...props} />\n <ImageLineCaption totalImages={totalValues} />\n </>\n );\n }\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n };\n return (\n <BasicView className={className}>\n <FacetViewHeader title={config.caption} />\n <div className={styles.container}>{renderContent()}</div>\n </BasicView>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\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 {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 React, {useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {isEmpty, map} from 'ramda';\nimport {Link as Link} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {\n BasicView,\n CollaborationContext,\n EntitiesMapContext,\n FacetViewHeader,\n LinearLoadIndicator,\n useMatchesLoader,\n ViewIdContext\n} from '@reltio/components';\nimport mdmModule, {ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {\n getEntityUriForLink,\n getEntityUriFromMatchObject,\n getPotentialMatchesObjectIdsForCollaboration,\n Order,\n ProfilePotentialMatchesViewConfig\n} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\nimport {MatchCard} from './MatchCard';\n\ntype Props = {\n config: ProfilePotentialMatchesViewConfig;\n className?: string;\n};\n\nexport const DEFAULT_MATCHES_LIMIT = 3;\nexport const DEFAULT_OPTIONS = {\n showTransitiveMatches: true,\n showInactiveEntities: false\n};\nexport const DEFAULT_SORTING = {order: Order.asc, field: 'score'};\nenum ComponentStates {\n Loading,\n NoData,\n Loaded\n}\nexport const ProfilePotentialMatchesView = ({config, className}: Props) => {\n const styles = useStyles();\n const entity = useSelector(mdmModule.selectors.getEntity);\n const entityUri = getEntityUriForLink(entity);\n\n const [isLoading, setIsLoading] = useState(false);\n const turnOnDisableSpinner = useCallback(() => {\n setIsLoading(true);\n }, []);\n const turnOffDisableSpinner = useCallback(() => {\n setIsLoading(false);\n }, []);\n\n const {matches, entitiesMap, loadMatches, total} = useMatchesLoader({\n enabled: !!entityUri,\n entity,\n options: DEFAULT_OPTIONS,\n filter: '',\n page: 0,\n sorting: DEFAULT_SORTING,\n rowsPerPage: DEFAULT_MATCHES_LIMIT,\n onStartLoading: turnOnDisableSpinner,\n onFinishLoading: turnOffDisableSpinner\n });\n const onFinishMatchAction = useCallback(() => {\n loadMatches();\n }, [loadMatches]);\n\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const openPotentialMatchPerspective = useCallback(() => {\n dispatch(mdmModuleUi.actions.openPerspective({perspectiveId: 'potentialMatches', viewId}));\n }, [dispatch, viewId]);\n\n const objectIds = useMemo(\n () => getPotentialMatchesObjectIdsForCollaboration(entityUri, map(getEntityUriFromMatchObject, matches)),\n [entityUri, matches]\n );\n\n const {getCommentsCount} = useContext(CollaborationContext);\n useEffect(() => {\n getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n const showSeeAll = total > DEFAULT_MATCHES_LIMIT && !isEmpty(matches);\n const getComponentState = () => {\n if (isLoading) {\n return ComponentStates.Loading;\n }\n if (isEmpty(matches)) {\n return ComponentStates.NoData;\n }\n return ComponentStates.Loaded;\n };\n const state = getComponentState();\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <BasicView className={classnames(styles.root, className)}>\n <FacetViewHeader title={config.caption} />\n <div className={styles.matchesContainer}>\n {state === ComponentStates.Loading && <LinearLoadIndicator />}\n {state === ComponentStates.NoData && (\n <Typography className={styles.noData}>{i18n.text('No matches found')}</Typography>\n )}\n {state === ComponentStates.Loaded &&\n matches.map((match) => (\n <MatchCard\n config={config}\n entitiesMap={entitiesMap}\n match={match}\n onFinishRequest={onFinishMatchAction}\n onStartRequest={turnOnDisableSpinner}\n key={match.object.uri}\n />\n ))}\n </div>\n {showSeeAll && (\n <>\n <div className={styles.footer}>\n <Link\n component=\"button\"\n variant=\"caption\"\n onClick={openPotentialMatchPerspective}\n underline=\"none\"\n >\n {i18n.text('See all')}\n </Link>\n </div>\n </>\n )}\n </BasicView>\n </EntitiesMapContext.Provider>\n );\n};\n","import React, {lazy} from 'react';\nimport {Store} from 'redux';\nimport {\n ProfileViewConfig,\n ProfileViewTypes,\n AttributeViewConfig,\n EntityMapViewConfig,\n ProfilePotentialMatchesViewConfig,\n RelationsViewConfig,\n ImageAttributeViewConfig,\n SingleAttributeViewConfig,\n HierarchyPathsViewConfig,\n HierarchyTreeViewConfig,\n CustomActionViewConfig\n} from '@reltio/mdm-sdk';\nimport {pipe} from 'ramda';\nimport {ProfileAttributesView} from '../ProfileAttributesView/ProfileAttributesView';\nimport {ProfileSingleAttributeView} from '../ProfileSingleAttributeView/ProfileSingleAttributeView';\nimport {ProfileRelationsView} from '../ProfileRelationsView/ProfileRelationsView';\nimport {ProfileTableAttributeView} from '../ProfileTableAttributeView/ProfileTableAttributeView';\nimport {HierarchyPathsView} from '../HierarchyPathsView';\nimport {CustomView} from '../Sandbox/CustomView';\nimport withDragHandle from './HOCs/withDragHandle';\nimport withErrorBoundary from './HOCs/withErrorBoundary';\nimport {StubView} from './StubView';\nimport EntityMapView from '../EntityMapView/EntityMapView';\nimport {ImageAttributeView} from '../ImageAttributeView/ImageAttributeView';\nimport {ProfilePotentialMatchesView} from '../ProfilePotentialMatchesView/ProfilePotentialMatchesView';\n\nconst wrapView = <P extends unknown>(component: P): P => pipe(withErrorBoundary, withDragHandle)(component);\n\nconst WrappedStubView = wrapView(StubView);\nexport const WrappedProfileAttributesView = wrapView(ProfileAttributesView);\nexport const WrappedProfileSingleAttributeView = wrapView(ProfileSingleAttributeView);\nexport const WrappedProfileTableAttributeView = wrapView(ProfileTableAttributeView);\nexport const WrappedProfileRelationsView = wrapView(ProfileRelationsView);\nexport const WrappedCustomView = wrapView(CustomView);\nexport const WrappedHierarchyPathView = wrapView(HierarchyPathsView);\nexport const WrappedProfilePotentialMatchesView = wrapView(ProfilePotentialMatchesView);\n\nexport const WrappedHierarchyTreeView = lazy(() =>\n import(/* webpackMode: \"eager\" */ '@reltio/hierarchy-tree').then((importedModule) => ({\n default: wrapView(importedModule.HierarchyTreeView)\n }))\n);\n\nexport const WrappedRelationshipsTableView = lazy(() =>\n import(/* webpackMode: \"eager\" */ '@reltio/relations-table').then((importedModule) => ({\n default: wrapView(importedModule.RelationshipsTableView)\n }))\n);\nexport const WrappedEntityMapView = wrapView(EntityMapView);\nexport const WrappedImageAttributeView = wrapView(ImageAttributeView);\n\nexport type ViewComponentProps = {\n store: Store<unknown>;\n config:\n | ProfileViewConfig\n | AttributeViewConfig\n | SingleAttributeViewConfig\n | RelationsViewConfig\n | EntityMapViewConfig\n | ImageAttributeViewConfig;\n className?: string;\n isFullscreen: boolean;\n isAutosize?: boolean;\n onToggleFullscreen: (id: string) => void;\n};\n\nclass ViewsFactory {\n static ViewTypes = ProfileViewTypes;\n static getComponentBy = (\n propName: string,\n {store, config, className, isFullscreen, onToggleFullscreen}: ViewComponentProps\n ) => {\n switch (config[propName]) {\n case ViewsFactory.ViewTypes.HierarchyTree:\n return (\n <WrappedHierarchyTreeView\n config={config as HierarchyTreeViewConfig}\n store={store}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.HierarchyPaths:\n return <WrappedHierarchyPathView config={config as HierarchyPathsViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.RelationsTable:\n return (\n <WrappedRelationshipsTableView\n config={config as RelationsViewConfig}\n store={store}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.Relations:\n return <WrappedProfileRelationsView config={config as RelationsViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.Attributes:\n return <WrappedProfileAttributesView className={className} config={config as AttributeViewConfig} />;\n case ViewsFactory.ViewTypes.SingleAttribute:\n return (\n <WrappedProfileSingleAttributeView\n config={config as SingleAttributeViewConfig}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.AttributeTable:\n return (\n <WrappedProfileTableAttributeView\n config={config as SingleAttributeViewConfig}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.Map:\n return (\n <WrappedEntityMapView\n config={config as EntityMapViewConfig}\n isFullscreen={isFullscreen}\n onToggleFullscreen={onToggleFullscreen}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.Custom:\n return <WrappedCustomView config={config as CustomActionViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.ImageAttribute:\n return <WrappedImageAttributeView config={config as ImageAttributeViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.PotentialMatches:\n return (\n <WrappedProfilePotentialMatchesView\n config={config as ProfilePotentialMatchesViewConfig}\n className={className}\n />\n );\n }\n };\n static getComponent = (props: ViewComponentProps) => {\n return (\n ViewsFactory.getComponentBy('class', props) ||\n ViewsFactory.getComponentBy('react-class', props) || <WrappedStubView className={props.className} />\n );\n };\n}\n\nexport default ViewsFactory;\n","import React from 'react';\nimport classnames from 'classnames';\nimport {BasicView} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst StubView = ({className}: Props) => {\n const styles = useStyles();\n return (\n <BasicView className={classnames(styles.stubView, 'viewDraggableHandle', className)}>NOT IMPLEMENTED</BasicView>\n );\n};\n\nexport {StubView};\n","import React from 'react';\nimport {SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {SingleAttributeContext} from './contexts/SingleAttributeContext';\nimport {SingleAttributeView} from './components/SingleAttributeView/SingleAttributeView';\nimport {useSingleAttribute} from './hooks/useSingleAttribute';\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileSingleAttributeView = ({className, config}: Props) => {\n const singleAttribute = useSingleAttribute(config);\n\n return (\n <SingleAttributeContext.Provider value={singleAttribute}>\n <SingleAttributeView config={config} className={className} />\n </SingleAttributeContext.Provider>\n );\n};\n","import {useState, useMemo, useCallback} from 'react';\nimport {SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {useSingleAttributeLoader} from '../../hooks/useSingleAttributeLoader';\n\nexport const useSingleAttribute = (config: SingleAttributeViewConfig) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [page, setPage] = useState(0);\n const [showInactive, setShowInactive] = useState(false);\n const params = useMemo(() => ({page, searchQuery, showInactive}), [page, searchQuery, showInactive]);\n const attribute = useSingleAttributeLoader(config, params, true);\n const toggleShowInactive = useCallback(() => {\n setPage(0);\n setShowInactive((showInactive) => !showInactive);\n }, []);\n\n return {\n setSearchQuery,\n searchQuery,\n setPage,\n page,\n toggleShowInactive,\n showInactive,\n ...attribute\n };\n};\n","import React from 'react';\nimport {TableAttributeViewConfig} from '@reltio/mdm-sdk';\nimport {TableAttributeContext} from './contexts/TableAttributeContext';\nimport {useTableAttribute} from './hooks/useTableAttribute';\nimport {TableAttributeView} from './components/TableAttributeView/TableAttributeView';\n\ntype Props = {\n config: TableAttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileTableAttributeView = ({config, className}: Props) => {\n const tableAttribute = useTableAttribute(config);\n\n return (\n <TableAttributeContext.Provider value={tableAttribute}>\n {config && <TableAttributeView config={config} className={className} />}\n </TableAttributeContext.Provider>\n );\n};\n","import {useMemo, useReducer} from 'react';\nimport {reject, isNil, pipe, not, prop} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {findAttributeTypeByUri, isComplexAttribute, SingleAttributeViewConfig} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {useActions} from '@reltio/components';\nimport reducer, {actions} from './reducer';\nimport {getColumnsData} from '../helpers/tableAttributeHelpers';\nimport {useSingleAttributeLoader} from '../../hooks/useSingleAttributeLoader';\nimport {buildMDMFilters} from './helpers';\n\nconst DEFAULT_COUNT_COLUMN = 5;\n\nexport const useTableAttribute = (config: SingleAttributeViewConfig) => {\n const {attributeUri} = config;\n const metadata = useSelector(mdm.selectors.getMetadata);\n const attributeType = useMemo(() => findAttributeTypeByUri(metadata, attributeUri), [metadata, attributeUri]);\n const allColumnsData = useMemo(\n () => (attributeType ? getColumnsData(metadata, attributeType) : []),\n [metadata, attributeType]\n );\n const initialState = useMemo(\n () => ({\n searchQuery: '',\n filters: null,\n sorting: undefined,\n visibleColumns: allColumnsData\n .filter(pipe(prop('dataTypeDefinition'), isComplexAttribute, not))\n .map(({id}) => id)\n .slice(0, DEFAULT_COUNT_COLUMN),\n page: 0\n }),\n [allColumnsData]\n );\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n const {searchQuery, filters, sorting, page} = state;\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode);\n\n const requestFilters = useMemo(() => {\n const mdmFilters = buildMDMFilters(allColumnsData, filters);\n return mdmFilters.length ? mdmFilters : null;\n }, [filters, allColumnsData]);\n\n const params = useMemo(\n () => reject(isNil, {filters: requestFilters, page, sorting, searchQuery}),\n [requestFilters, page, sorting, searchQuery]\n );\n const {changeSearchQuery, changePage, toggleSort, changeFilter, toggleFilters, changeColumns} = useActions({\n actions,\n dispatch\n });\n const attribute = useSingleAttributeLoader(config, params, false);\n const showTable = Boolean(\n (attribute?.values?.length || requestFilters || searchQuery || isEditableMode) &&\n attributeType &&\n !attributeType.hidden\n );\n return {\n ...state,\n setSearchQuery: changeSearchQuery,\n setPage: changePage,\n onSort: toggleSort,\n onFilter: changeFilter,\n onToggleFilters: toggleFilters,\n onChangeColumns: changeColumns,\n showTable,\n allColumnsData,\n ...attribute\n };\n};\n","import {propEq} from 'ramda';\nimport {Maybe} from '@reltio/mdm-sdk';\nimport {ColumnData, ColumnFilter, columnFilterToMdmFilter} from '@reltio/components';\n\nexport const buildMDMFilters = (columnsData: ColumnData[], filters: {[key: string]: ColumnFilter}) =>\n Maybe.fromNull(filters)\n .map((filters) =>\n Object.entries(filters).map(([columnId, columnFilter]) => {\n const columnData = columnsData.find(propEq('id', columnId));\n return columnFilterToMdmFilter(columnData, columnFilter);\n })\n )\n .orSome([]);\n","import React from 'react';\nimport RelationsView from './components/RelationsView';\nimport {RelationsViewStateContext} from './contexts/RelationsViewStateContext';\nimport useRelationsState from './hooks/useRelationsState';\nimport {RelationsViewConfig} from '@reltio/mdm-sdk';\n\ntype Props = {\n config: RelationsViewConfig;\n onResize?: (width: number, height: number) => void;\n className?: string;\n};\n\nexport const ProfileRelationsView = ({config, className}: Props) => {\n const relationsState = useRelationsState(config);\n return (\n <RelationsViewStateContext.Provider value={relationsState}>\n <RelationsView config={config} className={className} />\n </RelationsViewStateContext.Provider>\n );\n};\n","import React, {useCallback} from 'react';\nimport {BasicView, ReactSortableTree} from '@reltio/components';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {ui} from '@reltio/mdm-module';\nimport {useLoadPaths} from './hooks/useLoadPaths';\nimport {Node} from './Node';\nimport {useStyles} from './styles';\nimport {ConfigContext} from './ConfigContext';\nimport {HierarchyPathsViewConfig} from '@reltio/mdm-sdk';\nimport {getNodeKey} from './helpers';\nimport {theme} from './theme';\nimport HierarchyPathsHeader from './HierarchyPathsHeader';\n\ntype Props = {\n className?: string;\n config: HierarchyPathsViewConfig;\n};\n\nexport const HierarchyPathsView = ({config, className}: Props) => {\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const {treeData, setTreeData} = useLoadPaths(entityUri, config.graph.type);\n const styles = useStyles();\n const dispatch = useDispatch();\n const {id, graph} = config;\n const openGraph = useCallback(() => {\n dispatch(ui.actions.openGraph({viewId: id, graphType: graph.type, entityUri}));\n }, [dispatch, id, graph, entityUri]);\n const generateNodeProps = useCallback(\n (rowInfo) => ({\n title: <Node node={rowInfo.node} />\n }),\n []\n );\n return (\n <BasicView className={className}>\n <HierarchyPathsHeader onGraphOpen={openGraph} title={config.caption} />\n <ConfigContext.Provider value={config}>\n <div className={styles.treeContainer}>\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 />\n </div>\n </div>\n </ConfigContext.Provider>\n </BasicView>\n );\n};\n","import React, {useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport mdm from '@reltio/mdm-module';\nimport FullscreenIcon from '@material-ui/icons/Fullscreen';\nimport FullscreenExitIcon from '@material-ui/icons/FullscreenExit';\nimport {BasicView, LinearLoadIndicator, ReltioMap} from '@reltio/components';\nimport {SmallIconButton} from '@reltio/components';\n\nimport {AttributeViewConfig} from '@reltio/mdm-sdk';\nimport {useMarkers} from './useMarkers';\nimport useStyles from './styles';\n\ntype EntityMapViewProps = {\n config: AttributeViewConfig;\n className?: string;\n isFullscreen: boolean;\n onToggleFullscreen: (id: string) => void;\n};\n\nexport const EntityMapView = ({config, isFullscreen, onToggleFullscreen, className}: EntityMapViewProps) => {\n const styles = useStyles();\n const metadata = useSelector(mdm.selectors.getMetadata);\n const entity = useSelector(mdm.selectors.getEntity);\n const mapKey = useSelector(mdm.selectors.getGoogleMapKey);\n const {markers, loading} = useMarkers(entity, metadata, mapKey);\n const loadingElement = useMemo(\n () => (\n <div className={styles.fullHeight}>\n <LinearLoadIndicator />\n </div>\n ),\n [styles]\n );\n\n const defaultCenter = useMemo(() => ({lat: 0, lng: 0}), []);\n const mapOptions = useMemo(() => ({mapTypeControl: true}), []);\n\n return (\n mapKey && (\n <BasicView className={classnames(styles.root, className)}>\n {loading && <LinearLoadIndicator />}\n <SmallIconButton\n size=\"S\"\n icon={isFullscreen ? FullscreenExitIcon : FullscreenIcon}\n onClick={() => onToggleFullscreen(config.id)}\n className={styles.fullscreenBtn}\n />\n\n <ReltioMap\n loadingElement={loadingElement}\n defaultZoom={1}\n defaultCenter={defaultCenter}\n markers={markers}\n mapContainerClassName={styles.fullHeight}\n mapKey={mapKey}\n mapOptions={mapOptions}\n />\n </BasicView>\n )\n );\n};\n\nexport default EntityMapView;\n","import React, {memo, Suspense} from 'react';\nimport classnames from 'classnames';\nimport ViewsFactory, {ViewComponentProps} from './ViewsFactory';\nimport {useStyles} from './styles';\n\nconst Fallback = () => null;\n\nconst ViewComponent = memo(({config, store, isFullscreen, isAutosize, onToggleFullscreen}: ViewComponentProps) => {\n const styles = useStyles();\n return (\n <Suspense fallback={<Fallback />}>\n {ViewsFactory.getComponent({\n config,\n store,\n className: classnames(styles.component, {[styles.fullHeight]: !isAutosize}),\n isFullscreen,\n onToggleFullscreen\n })}\n </Suspense>\n );\n});\n\nViewComponent.displayName = 'ViewComponent';\n\nexport {ViewComponent};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {basicView: Record<string, string | number>}) => ({\n item: theme.basicView,\n fixedSizeContainer: {\n height: '100%'\n }\n}));\n","import React, {ReactChildren, ReactNode, useContext} from 'react';\nimport {omit} from 'ramda';\nimport {ReactReduxContext, useSelector} from 'react-redux';\nimport {ReactGridLayoutItem} from '@reltio/components';\nimport {CustomScript, CustomScriptPlatform, ProfileViewConfig, ProfileViewTypes} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {ViewComponent} from '../views/ViewComponent';\nimport ViewsFactory from '../views/ViewsFactory';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n layoutItemConfig: ReactGridLayoutItem;\n views: ProfileViewConfig[];\n className?: string;\n children?: ReactChildren;\n style?: Record<string, unknown>;\n isFullscreen: boolean;\n onToggleFullscreen: (id: string) => void;\n AutosizeComponent?: ReactNode;\n};\n\nconst omittingProps = ['onConfigChanged', 'onRemove'];\n\nconst getViewTypeByClass = (className: string) =>\n Object.entries(ProfileViewTypes).find(([_, value]) => className === value)?.[0];\n\nconst ProfileLayoutItem = ({\n layoutItemConfig,\n views,\n className,\n children: ResizeComponent,\n style,\n isFullscreen,\n onToggleFullscreen,\n AutosizeComponent,\n ...props\n}: Props) => {\n const config = views.find(({id}) => layoutItemConfig.i === id);\n const styles = useStyles();\n const mapKey = useSelector(mdm.selectors.getGoogleMapKey);\n\n const {store} = useContext(ReactReduxContext);\n if (!config) {\n return null;\n }\n const isCustomView = config.class === ViewsFactory.ViewTypes.Custom;\n if (isCustomView && (config?.action as CustomScript)?.platform === CustomScriptPlatform.CLASSIC) {\n return null;\n }\n\n const isMapView = config.class === ViewsFactory.ViewTypes.Map;\n if (isMapView && !mapKey) {\n return null;\n }\n\n const reltioClass = getViewTypeByClass(config.class);\n return (\n <div\n {...omit(omittingProps, props)}\n data-reltio-id={config.id}\n data-reltio-class={reltioClass || ''}\n style={style}\n className={classnames(className, {[styles.item]: !isCustomView})}\n >\n <div className={classnames({[styles.fixedSizeContainer]: !AutosizeComponent})}>\n {AutosizeComponent}\n <ViewComponent\n store={store}\n config={config}\n isFullscreen={isFullscreen}\n onToggleFullscreen={onToggleFullscreen}\n isAutosize={Boolean(AutosizeComponent)}\n />\n </div>\n {ResizeComponent}\n </div>\n );\n};\n\nexport {ProfileLayoutItem};\n","import React from 'react';\nimport {ReltioGridLayout} from '@reltio/components';\nimport {ProfileViewConfig} from '@reltio/mdm-sdk';\n\nimport {Layout} from '../../types';\nimport {ProfileLayoutItem} from '../ProfileLayoutItem';\n\ntype Props = {\n views: ProfileViewConfig[];\n layout?: Layout;\n layoutOptions?: Record<string, unknown>;\n onLayoutChanged: (layout: Layout) => void;\n};\n\nconst ProfileLayout = ({views, layout, layoutOptions, onLayoutChanged}: Props) => {\n return (\n <ReltioGridLayout\n LayoutItem={ProfileLayoutItem}\n views={views}\n layout={layout}\n layoutOptions={layoutOptions}\n onLayoutChanged={onLayoutChanged}\n draggableHandle=\".viewDraggableHandle\"\n />\n );\n};\n\nexport {ProfileLayout};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n closeIcon: {\n paddingRight: '12px',\n boxSizing: 'content-box',\n '& path': {\n fill: '#fff'\n }\n },\n snackbar: {\n '& > div': {\n flexWrap: 'nowrap',\n alignItems: 'baseline'\n }\n }\n}));\n","import {Snackbar as Snackbar} from '@material-ui/core';\nimport {Portal as Portal} from '@material-ui/core';\nimport React, {useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport {ConfirmationDialog, SmallIconButton} from '@reltio/components';\nimport {NotificationItem, Action} from './types';\nimport {useStyles} from './styles';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {ui as mdmModuleUi} from '@reltio/mdm-module';\n\ntype Props = {\n notification: NotificationItem;\n};\n\nconst AUTO_HIDE_DURATION = 5000;\n\nexport const Notification = ({notification}: Props) => {\n const styles = useStyles({});\n const dispatch = useDispatch();\n const autoCloseInterval: number = useSelector(mdmModule.selectors.getAutoCloseInterval);\n const autoHideDuration =\n notification.autoHideDuration || (autoCloseInterval && autoCloseInterval * 1000) || AUTO_HIDE_DURATION;\n const [action, setAction] = useState<Action>();\n const [show, setShow] = useState(true);\n const closeSnackbar = useCallback(\n (_e?: unknown, reason?: string) => {\n if (reason !== 'clickaway') {\n dispatch(mdmModuleUi.actions.closeNotification(notification.id));\n setShow(false);\n }\n },\n [notification]\n );\n const onDiscard = useCallback(() => {\n action.cancelAction && dispatch(action.cancelAction);\n setAction(undefined);\n }, [action]);\n const onConfirm = useCallback(() => {\n dispatch(action.applyAction);\n setAction(undefined);\n dispatch(mdmModuleUi.actions.closeNotification(notification.id));\n }, [action, notification]);\n\n const actions = (\n <>\n {notification.actions.map((action) => (\n <Button\n key={action.label}\n color=\"primary\"\n size=\"small\"\n onClick={() => {\n if (action.needConfirmation) {\n setAction(action);\n } else {\n dispatch(action.applyAction);\n }\n setShow(false);\n }}\n >\n {action.label}\n </Button>\n ))}\n </>\n );\n const message = (\n <>\n <SmallIconButton className={styles.closeIcon} size=\"S\" icon={CloseIcon} onClick={closeSnackbar} />\n {notification.text}\n </>\n );\n\n return (\n <>\n <Portal container={document.body}>\n <Snackbar\n autoHideDuration={autoHideDuration}\n open={show}\n classes={{root: styles.snackbar}}\n action={actions}\n onClose={closeSnackbar}\n anchorOrigin={{vertical: 'bottom', horizontal: 'center'}}\n message={message}\n />\n </Portal>\n <ConfirmationDialog\n open={!!action}\n title={action?.confirmationText}\n content={action?.confirmationDescription}\n onSave={onConfirm}\n onDiscard={onDiscard}\n saveCaption={i18n.text('Proceed')}\n discardCaption={i18n.text('Cancel')}\n />\n </>\n );\n};\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {NotificationItem} from './types';\nimport {Notification} from './Notification';\n\nexport const Notifications = () => {\n const notifications: NotificationItem[] = useSelector(mdm.selectors.getNotifications);\n if (!notifications) return null;\n return (\n <>\n {notifications.slice(-1).map((n) => (\n <Notification key={n.id} notification={n} />\n ))}\n </>\n );\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"19\",\n height: \"17\",\n viewBox: \"0 0 19 17\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M14 17v2H4v-2h10zm6-4v2H4v-2l12.884.001H17l.116-.002L20 13zm-8.457-2H4V9h5.82a8.465 8.465 0 001.723 2zM9.139 6.178l-.289.733.035.088L4 7V5l5.713-.002c-.22.375-.412.768-.574 1.18zM17 2.82a6.451 6.451 0 00-6 4.09 6.451 6.451 0 006 4.092 6.451 6.451 0 006-4.091 6.451 6.451 0 00-6-4.091zm0 6.815a2.728 2.728 0 010-5.455 2.728 2.728 0 010 5.455zm0-4.365c-.905 0-1.636.73-1.636 1.636 0 .906.73 1.637 1.636 1.637.905 0 1.636-.731 1.636-1.637 0-.905-.73-1.636-1.636-1.636z\",\n id: \"svg1467685497a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"g\", {\n transform: \"translate(-4 -2.5)\"\n}, React.createElement(\"mask\", {\n id: \"svg1467685497b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg1467685497a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg1467685497b)\",\n d: \"M0 0h24v24H0z\"\n})))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M20.222 6C21.21 6 22 6.8 22 7.778v12.444C22 21.2 21.209 22 20.222 22H7.778C6.79 22 6 21.2 6 20.222V7.778C6 6.8 6.791 6 7.778 6h12.444zM20 8H8v12h12V8zM4 18H2V4c0-1.1.9-2 2-2h14v2H4v14z\",\n id: \"svg2383396984a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg2383396984b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2383396984a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2383396984b)\",\n d: \"M0 0h24v24H0z\"\n}))));","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n editingButtons: {\n display: 'flex',\n '& button + button': {\n width: '88px',\n marginLeft: '8px'\n }\n },\n searchResults: {\n width: '150px',\n height: '25px',\n backgroundColor: '#ccc'\n },\n comments: {\n display: 'flex',\n justifyContent: 'flex-end',\n marginTop: '10px'\n }\n});\n","import {useCallback, useMemo} from 'react';\nimport {\n includes,\n pipe,\n isNil,\n propOr,\n filter,\n map,\n prop,\n cond,\n identity,\n omit,\n find,\n complement,\n when,\n either,\n pick,\n always,\n T\n} from 'ramda';\nimport {\n BaseCloneAction,\n CloneAction,\n Entity,\n getEntityType,\n isReference,\n isRelationWithEntityType,\n getRelationTypeUriFromAttrType\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\n\ntype Props = {\n cloneAction?: CloneAction[];\n onCloneDiscard: () => void;\n};\n\nexport const useCloneAction = ({cloneAction: cloneActionProp, onCloneDiscard}: Props) => {\n const entity: Entity = useSelector(mdm.selectors.getEntityWithoutDiff);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const dispatch = useDispatch();\n const entityTypeUri = entity?.type;\n const relationTypes = metadata.relationTypes;\n const isRelationSuitableForEntityType = useCallback(isRelationWithEntityType(metadata, entityTypeUri), [\n metadata,\n entityTypeUri\n ]);\n const entityType = getEntityType(metadata, entityTypeUri);\n const cloneAction = useMemo<BaseCloneAction>(\n () =>\n when(\n complement(isNil),\n pipe(\n find(pipe(propOr([], 'entityTypeUris'), either(includes(entityTypeUri), includes('*')))),\n when(complement(isNil), omit(['entityTypeUris']))\n )\n )(cloneActionProp),\n [cloneActionProp, entityTypeUri]\n );\n const onClone = useCallback(() => {\n if (cloneAction) {\n const modifiedRelationTypes: string[] = pipe(\n prop('relationshipTypesToCopy'),\n cond([\n [\n isNil,\n pipe(\n always(entityType),\n propOr([], 'attributes'),\n filter(isReference),\n map(getRelationTypeUriFromAttrType)\n )\n ],\n [\n includes('*'),\n pipe(always(relationTypes || []), map(prop('uri')), filter(isRelationSuitableForEntityType))\n ],\n [T, identity]\n ])\n )(cloneAction);\n dispatch(\n profile.entity.actions.entityCloneRequested({\n data: {\n ...pick(['attributeReplacementMapping'], cloneAction),\n relationshipTypesToCopy: modifiedRelationTypes\n },\n entityUri: entity.uri\n })\n );\n }\n onCloneDiscard();\n }, [cloneAction, onCloneDiscard, entityType, relationTypes, entity.uri, isRelationSuitableForEntityType]);\n return cloneAction ? onClone : undefined;\n};\n","import React, {useCallback, useMemo, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {Box as Box} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport {SvgIcon as SvgIcon} from '@material-ui/core';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CreateIcon from '@material-ui/icons/Create';\n\nimport {\n getEntityType,\n Entity,\n checkMetadataPermission,\n isDataTenantEntity,\n isTempUri,\n MetadataPermissions,\n ModeTypes,\n Mode,\n isSuggestMode,\n isEditableMode,\n CollaborationObjectTypes,\n createRelatedObjectUris,\n Operation,\n ProfileBandConfig\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {\n ProfileBand,\n ModeSwitcherSelect,\n CommentsContainer,\n COMMENTS_CONTAINER_VISIBILITY_AREA,\n ProfileBandNavigation,\n ProfileBandHistory,\n ConfirmationDialog\n} from '@reltio/components';\n\nimport SuggestSvg from './suggest.svg';\nimport CopySvg from './copy.svg';\n\nimport {useStyles} from './styles';\nimport {useCloneAction} from './hooks/useCloneAction';\n\ntype Props = {\n className?: string;\n profileBandConfig?: ProfileBandConfig;\n};\n\nconst SuggestIcon = (props) => (\n <SvgIcon {...props}>\n <SuggestSvg />\n </SvgIcon>\n);\n\nconst CopyIcon = (props) => (\n <SvgIcon {...props}>\n <CopySvg />\n </SvgIcon>\n);\n\ntype Group = {\n label: string;\n value: string;\n description: string;\n icon: React.ElementType;\n permission: string;\n onClick?: (value: string) => void;\n};\n\nconst filterGroupByPermissions = <T extends Group>(\n group: T[],\n entityType,\n isTempEntity: boolean,\n isWorkflowEnabled?: boolean,\n canStartProcessInstanceSearchQuery?: boolean\n): T[] =>\n group.filter(({value, permission}) => {\n if (isTempEntity && !isEditableMode(value)) return false;\n if ((!isWorkflowEnabled || !canStartProcessInstanceSearchQuery) && isSuggestMode(value)) return false;\n return checkMetadataPermission(permission, entityType);\n });\n\nconst hasOnlyReadPermission = (entityType) => {\n return (\n checkMetadataPermission(MetadataPermissions.READ, entityType) &&\n !checkMetadataPermission(MetadataPermissions.UPDATE, entityType) &&\n !checkMetadataPermission(MetadataPermissions.DELETE, entityType) &&\n !checkMetadataPermission(MetadataPermissions.INITIATE_CHANGE_REQUEST, entityType)\n );\n};\n\nexport const PerspectiveProfileBand = ({className, profileBandConfig}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n const canStartProcessInstanceSearchQuery = useSelector(mdm.selectors.getCanUserStartProcessFromQuery);\n const entity = useSelector(mdm.selectors.getEntityWithoutDiff) as Entity;\n const modifiedEntity = useSelector((state) => mdm.selectors.getModifiedEntity(state, entity.uri));\n const metadata = useSelector(mdm.selectors.getMetadata);\n const isWorkflowEnabled = useSelector(mdm.selectors.isWorkflowEnabled) as boolean;\n const mode = useSelector(mdm.selectors.getMode) as Mode;\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode) as boolean;\n const isViewMode = useSelector(mdm.selectors.getIsViewMode) as boolean;\n const isHistoryModeEnabled = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const profileOperation = useSelector(mdm.selectors.getProfileOperation);\n const entityTypeUri = entity?.type;\n const entityType = useMemo(() => getEntityType(metadata, entityTypeUri), [entityTypeUri, metadata]);\n const isOperationSaving = profileOperation === Operation.Saving;\n const isOperationCloning = profileOperation === Operation.Cloning;\n const isDisabledButtons = isOperationCloning || isOperationSaving;\n const [openCloneConfirmationDialog, setOpenCloneConfirmationDialog] = useState(false);\n const onCloneDiscard = useCallback(() => {\n setOpenCloneConfirmationDialog(false);\n }, []);\n const onClone = useCloneAction({cloneAction: profileBandConfig?.cloneAction, onCloneDiscard});\n const OPTIONS_GROUP = useMemo(\n () => [\n {\n label: i18n.text('Editing'),\n value: ModeTypes.EDITING,\n description: i18n.text('Edit profile directly'),\n icon: CreateIcon,\n permission: 'UPDATE'\n },\n {\n label: i18n.text('Suggesting'),\n value: ModeTypes.SUGGESTING,\n description: i18n.text('Suggest changes and initiate a workflow review'),\n icon: SuggestIcon,\n permission: 'INITIATE_CHANGE_REQUEST'\n },\n {\n label: i18n.text('Viewing'),\n value: ModeTypes.VIEWING,\n description: i18n.text('Read or print profile'),\n icon: VisibilityIcon,\n permission: 'READ'\n }\n ],\n []\n );\n\n const BUTTONS_GROUP = useMemo(\n () => [\n ...(onClone\n ? [\n {\n label: i18n.text('Clone'),\n value: 'Clone',\n description: i18n.text('Create a copy of the profile'),\n icon: CopyIcon,\n onClick: () => setOpenCloneConfirmationDialog(true),\n permission: 'CREATE'\n }\n ]\n : []),\n {\n label: i18n.text('Delete'),\n value: 'Delete',\n description: i18n.text('Permanently delete profile'),\n icon: DeleteIcon,\n onClick: () => {\n const conf = window.confirm(i18n.text('Are you sure you want to delete this?'));\n if (conf) {\n dispatch(profile.entity.actions.entityRemoveRequested({entityUri: entity.uri}));\n }\n },\n permission: 'DELETE'\n }\n ],\n [dispatch, entity.uri, onClone]\n );\n\n const shouldShowSelect = !isHistoryModeEnabled && !isDataTenantEntity(entity) && !hasOnlyReadPermission(entityType);\n\n const isTempEntity = isTempUri(entity?.uri);\n\n const accessibleOptionsGroup = useMemo(() => {\n return filterGroupByPermissions(\n OPTIONS_GROUP,\n entityType,\n isTempEntity,\n isWorkflowEnabled,\n canStartProcessInstanceSearchQuery\n );\n }, [OPTIONS_GROUP, entityType, isWorkflowEnabled, canStartProcessInstanceSearchQuery, isTempEntity]);\n const accessibleButtonsGroup = useMemo(() => {\n return filterGroupByPermissions(\n BUTTONS_GROUP,\n entityType,\n isTempEntity,\n isWorkflowEnabled,\n canStartProcessInstanceSearchQuery\n );\n }, [BUTTONS_GROUP, entityType, isWorkflowEnabled, canStartProcessInstanceSearchQuery, isTempEntity]);\n\n const handleChange = useCallback(\n (value: Mode) => {\n dispatch(profile.mode.actions.modeUpdated(value));\n },\n [dispatch]\n );\n\n const onCancel = useCallback(() => {\n dispatch(profile.mode.actions.modeCancelEditing());\n }, [dispatch]);\n\n const handleSave = useCallback(() => {\n dispatch(profile.actions.saveProfile());\n }, [dispatch]);\n\n return (\n <>\n <ProfileBand\n className={classnames(className, COMMENTS_CONTAINER_VISIBILITY_AREA)}\n entity={isEditableMode && modifiedEntity ? modifiedEntity : entity}\n >\n <Box display=\"flex\" alignItems=\"center\">\n <Box mr={3}>\n {isEditableMode && (\n <Box className={styles.editingButtons}>\n <Button\n variant=\"outlined\"\n onClick={onCancel}\n data-reltio-id=\"reltio-profile-cancel-editing\"\n disabled={isDisabledButtons}\n >\n {i18n.text('Cancel')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n data-reltio-id=\"reltio-profile-save-profile\"\n onClick={handleSave}\n disabled={isDisabledButtons}\n >\n {isSuggestMode(mode) ? i18n.text('Suggest') : i18n.text('Save')}\n </Button>\n </Box>\n )}\n {isHistoryModeEnabled && isViewMode ? (\n <ProfileBandHistory />\n ) : (\n isViewMode && <ProfileBandNavigation />\n )}\n </Box>\n {shouldShowSelect && (\n <ModeSwitcherSelect\n optionsGroup={accessibleOptionsGroup}\n buttonsGroup={accessibleButtonsGroup}\n value={mode}\n onChange={handleChange}\n disabled={isDisabledButtons}\n />\n )}\n </Box>\n <Box className={styles.comments}>\n <CommentsContainer\n uri={entity.uri}\n relatedObjectUris={createRelatedObjectUris(CollaborationObjectTypes.ENTITY, {\n entityUri: entity.uri\n })}\n objectType={CollaborationObjectTypes.ENTITY}\n />\n </Box>\n </ProfileBand>\n {!!onClone && (\n <ConfirmationDialog\n open={openCloneConfirmationDialog}\n title={i18n.text('Do you want to create a clone of the profile?')}\n content={i18n.text(\n 'Cloning will create a copy of the current profile. You can modify the cloned profile in the next step. Are you sure you want to proceed?'\n )}\n onSave={onClone}\n onDiscard={onCloneDiscard}\n saveCaption={i18n.text('Proceed')}\n discardCaption={i18n.text('Cancel')}\n />\n )}\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n display: 'flex',\n overflow: 'hidden',\n marginLeft: 'auto',\n flexShrink: 0\n },\n badge: {\n fontSize: '12px',\n height: '18px',\n minWidth: '18px',\n backgroundColor: '#FF4081',\n color: '#FFF'\n },\n badgePosition: {\n right: '5px'\n }\n});\n","import React, {useContext, VFC} from 'react';\nimport {Badge as Badge} from '@material-ui/core';\nimport {WorkflowTasksContext} from '@reltio/components';\nimport InboxIcon from '@material-ui/icons/Inbox';\nimport {useStyles} from '../../styles';\n\nexport const WorkflowButton: VFC = () => {\n const {total} = useContext(WorkflowTasksContext);\n const styles = useStyles();\n return (\n <Badge\n badgeContent={total}\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <InboxIcon />\n </Badge>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n overflow: 'auto',\n paddingRight: '12px'\n },\n showMoreLink: {\n display: 'flex',\n margin: '16px'\n },\n showMoreIcon: {\n fontSize: '1rem'\n }\n});\n","import React, {useContext, useEffect} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {CollaborationContext, CollaborationItem, EntitiesMapContext, useCommentsEntitiesMap} from '@reltio/components';\nimport {Box as Box} from '@material-ui/core';\nimport {Link as Link} from '@material-ui/core';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport {useStyles} from './styles';\n\nexport const CollaborationList = () => {\n const styles = useStyles();\n const {getComments, comments, pageToken} = useContext(CollaborationContext);\n const entityUri = useSelector(mdm.selectors.getEntityUriWithDataTenant);\n\n useEffect(() => {\n getComments(entityUri);\n }, [getComments, entityUri]);\n\n const handleShowMoreComments = () => {\n getComments(entityUri, pageToken);\n };\n\n const entitiesMap = useCommentsEntitiesMap(comments);\n\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <Box className={styles.wrapper}>\n {comments.map((comment) => {\n const {objectId, relatedObjectUris, objectType, commentId} = comment;\n return (\n <CollaborationItem\n key={commentId}\n uri={objectId}\n relatedObjectUris={relatedObjectUris}\n objectType={objectType}\n comment={comment}\n />\n );\n })}\n {pageToken && (\n <Link\n component=\"button\"\n variant=\"caption\"\n className={styles.showMoreLink}\n onClick={handleShowMoreComments}\n underline=\"none\"\n >\n <KeyboardArrowDownIcon className={styles.showMoreIcon} />\n {i18n.text('Show more')}\n </Link>\n )}\n </Box>\n </EntitiesMapContext.Provider>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n overflow: 'auto',\n position: 'relative',\n height: '100%'\n }\n});\n","import React, {useContext} from 'react';\nimport {LinearLoadIndicator, WorkflowTaskCard, WorkflowTasksContext} from '@reltio/components';\nimport {useStyles} from './styles';\n\nexport const WorkflowList = () => {\n const styles = useStyles();\n const {tasks, loading} = useContext(WorkflowTasksContext);\n\n return (\n <div className={styles.wrapper}>\n {loading && <LinearLoadIndicator />}\n {tasks &&\n tasks.map((task) => {\n return <WorkflowTaskCard key={task.taskId} task={task} />;\n })}\n </div>\n );\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M4 17.17L5.17 16H20V4H4v13.17zM20 2c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H6l-4 4V4c0-1.1.9-2 2-2h16zm-3 9H7v2h10v-2zm0-4H7v2h10V7z\",\n id: \"svg2697213709a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"g\", null, React.createElement(\"g\", {\n transform: \"translate(-2 -2)\"\n}, React.createElement(\"mask\", {\n id: \"svg2697213709b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2697213709a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2697213709b)\",\n d: \"M0 0h24v24H0z\"\n}))))));","import React, {useContext, VFC} from 'react';\nimport {Badge as Badge} from '@material-ui/core';\nimport CollaborationIcon from '../../icons/CollaborationIcon.svg';\nimport {CollaborationContext} from '@reltio/components';\nimport {calcTotalCommentItems} from '@reltio/mdm-sdk';\nimport {useStyles} from '../../styles';\n\nexport const CollaborationButton: VFC = () => {\n const {commentsMap} = useContext(CollaborationContext);\n const styles = useStyles();\n return (\n <Badge\n badgeContent={calcTotalCommentItems(commentsMap)}\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <CollaborationIcon />\n </Badge>\n );\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SidePanelEmptyState} from '@reltio/components';\n\nconst WorkflowPanelEmptyState = () => (\n <SidePanelEmptyState\n text={i18n.text('Ready to go with the flow?')}\n secondaryText={i18n.text(\n 'Suggest a change or submit a match review, and we’ll kick off a workflow task to get things going.'\n )}\n />\n);\n\nexport default WorkflowPanelEmptyState;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SidePanelEmptyState} from '@reltio/components';\n\nconst CollaborationPanelEmptyState = () => (\n <SidePanelEmptyState\n text={i18n.text('Care to join the conversation?')}\n secondaryText={i18n.text(\n 'Leave comments for team members anywhere in the Profile page, and we’ll record it here.'\n )}\n />\n);\n\nexport default CollaborationPanelEmptyState;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"path\", {\n d: \"M14.101 16A5.003 5.003 0 0016 18.987V20H2v-4h12.101zM22 18.987V20v-1.013zM4 17v2h2v-2H4zM16 4v1.013A5.004 5.004 0 0014.101 8H2V4h14zm6 0v1.013V4zM6 7V5H4v2h2zm8 3v4H2v-4h12zM4 11v2h2v-2H4zm12 4v-2h6v2c0 1.3-.84 2.4-2 2.82V22h-2v-4.18c-1.16-.42-2-1.52-2-2.82zm0-6c0-1.3.84-2.4 2-2.82V2h2v4.18c1.16.42 2 1.52 2 2.82v2h-6V9z\",\n fill: \"#000\",\n fillOpacity: \".54\"\n})));","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n display: 'flex',\n flexDirection: 'column'\n },\n itemWrapper: {\n paddingLeft: '19px',\n paddingRight: '19px'\n }\n});\n","import React from 'react';\nimport {CustomActionViewConfig} from '@reltio/mdm-sdk';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {CustomView} from '../../../Sandbox/CustomView';\nimport {useStyles} from './styles';\n\nexport const DBConnectorsList = () => {\n const styles = useStyles();\n const dBConnectorSideViews = useSelector(mdm.selectors.getDBConnectorSideViews) as CustomActionViewConfig[];\n\n return (\n <div className={styles.wrapper}>\n {dBConnectorSideViews.map((sideView) => (\n <CustomView key={sideView.id} config={sideView} className={styles.itemWrapper} />\n ))}\n </div>\n );\n};\n","import React, {useCallback, useContext, useEffect, useState, VFC} from 'react';\nimport {pipe, propEq, reject, pluck} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport {\n CollaborationContext,\n SideButtonsPanel,\n SidePanelContentHeader,\n SidePanel,\n WorkflowTasksContext,\n AddWorkflowButton,\n HistoryView,\n HistoryHeader,\n HistoryPanelEmptyState,\n useHistory,\n useHistoryEnabled\n} from '@reltio/components';\nimport {calcTotalCommentItems, Entity, getEntityType, isTempUri, Metadata} from '@reltio/mdm-sdk';\nimport mdm, {HistoryEvent} from '@reltio/mdm-module';\nimport HistoryIcon from '@material-ui/icons/History';\nimport {WorkflowButton} from './components/WorkflowButton/WorkflowButton';\nimport {CollaborationList} from './components/CollaborationList/CollaborationList';\nimport {WorkflowList} from './components/WorkflowList/WorkflowList';\nimport {CollaborationButton} from './components/CollaborationButton/CollaborationButton';\nimport WorkflowPanelEmptyState from './components/WorkflowPanelEmptyState/WorkflowPanelEmptyState';\nimport CollaborationPanelEmptyState from './components/CollaborationPanelEmptyState/CollaborationPanelEmptyState';\nimport ConnectorsIcon from './icons/ConnectorsIcon.svg';\nimport {DBConnectorsList} from './components/DBConnectorsList/DBConnectorsList';\n\nimport {useStyles} from './styles';\n\nconst DEFAULT_PANEL_WIDTH = 480;\nexport enum ActivePanel {\n Workflow,\n Collaboration,\n History,\n DBConnector\n}\nconst getSecondTitle = (total: number): string => {\n if (total) {\n return total === 1 ? i18n.text('${total} item', {total}) : i18n.text('${total} items', {total});\n }\n};\n\nexport const RightSidePanel: VFC = () => {\n const styles = useStyles();\n const isWorkflowSideViewEnabled = useSelector(mdm.selectors.isWorkflowSideViewEnabled) as boolean;\n const isWorkflowEnabled = useSelector(mdm.selectors.isWorkflowEnabled) as boolean;\n const isCollaborationSideViewEnabled = useSelector(mdm.selectors.isCollaborationSideViewEnabled) as boolean;\n const isDBConnectorSideViewEnabled = useSelector(mdm.selectors.isDBConnectorSideViewEnabled) as boolean;\n const isCollaborationEnabled = useSelector(mdm.selectors.isCollaborationEnabled) as boolean;\n const historyEvent: HistoryEvent = useSelector(mdm.selectors.getHistoryEvent);\n const metadata: Metadata = useSelector(mdm.selectors.getMetadata);\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n\n const workflowTasksContext = useContext(WorkflowTasksContext);\n const collaborationContext = useContext(CollaborationContext);\n\n const [active, setActive] = useState<ActivePanel>(null);\n const toggleActive = useCallback((newId: ActivePanel): void => {\n setActive((active) => (active === newId ? null : newId));\n }, []);\n const resetActive = useCallback((): void => {\n setActive(null);\n }, []);\n const isOpen = active !== null;\n const isHistoryTabActive = active === ActivePanel.History;\n const {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({isHistoryTabActive, entity});\n\n const {historyFilter, onApplyFilter, isLoading, historicUris, historyWithTotal, canLoadMore, onLoadMore} =\n useHistory({entity, enabled: isHistoryEnabled});\n\n const enabledWorkflowButton = isWorkflowSideViewEnabled && isWorkflowEnabled && !isTempUri(entity?.uri);\n const enabledCollaborationButton = isCollaborationSideViewEnabled && isCollaborationEnabled;\n const collaborationTotal = calcTotalCommentItems(collaborationContext?.commentsMap);\n\n const elements = [\n {\n buttonProps: {\n id: ActivePanel.Workflow,\n icon: WorkflowButton,\n tooltipTitle: i18n.text('Workflow')\n },\n content: workflowTasksContext?.total ? <WorkflowList /> : <WorkflowPanelEmptyState />,\n headerProps: {\n mainTitle: i18n.text('Workflow'),\n secondTitle: getSecondTitle(workflowTasksContext?.total),\n rightContent: <AddWorkflowButton />\n },\n hidden: !enabledWorkflowButton\n },\n {\n buttonProps: {\n id: ActivePanel.Collaboration,\n icon: CollaborationButton,\n tooltipTitle: i18n.text('Collaboration')\n },\n content: collaborationTotal ? <CollaborationList /> : <CollaborationPanelEmptyState />,\n headerProps: {\n mainTitle: i18n.text('Collaboration'),\n secondTitle: getSecondTitle(collaborationTotal)\n },\n hidden: !enabledCollaborationButton\n },\n {\n buttonProps: {\n id: ActivePanel.History,\n icon: HistoryIcon,\n tooltipTitle: i18n.text('History')\n },\n content: isProfilePersisted ? (\n <HistoryView\n isLoading={isLoading}\n historyWithTotal={historyWithTotal}\n contributorsUris={historicUris}\n entityUri={entity?.uri}\n historyEvent={historyEvent}\n onLoadMore={onLoadMore}\n canLoadMore={canLoadMore}\n />\n ) : (\n <HistoryPanelEmptyState />\n ),\n headerProps: {\n content: (\n <HistoryHeader\n total={isProfilePersisted ? (historicUris?.length || 0) + 1 : undefined}\n entityType={getEntityType(metadata, entity?.type)}\n filter={historyFilter}\n onApplyFilter={onApplyFilter}\n />\n )\n }\n },\n {\n buttonProps: {\n id: ActivePanel.DBConnector,\n icon: ConnectorsIcon,\n tooltipTitle: i18n.text('D&B Connector')\n },\n content: <DBConnectorsList />,\n headerProps: {\n mainTitle: i18n.text('D&B Connector')\n },\n hidden: !isDBConnectorSideViewEnabled\n }\n ];\n\n const visibleElements = reject(propEq('hidden', true))(elements);\n\n useEffect(() => {\n if (elements[active]?.hidden) {\n resetActive();\n }\n }, [active, elements, resetActive, visibleElements]);\n\n return (\n <div className={styles.wrapper}>\n <SidePanel open={isOpen} width={DEFAULT_PANEL_WIDTH}>\n {!elements[active]?.hidden && (\n <>\n <SidePanelContentHeader {...elements[active]?.headerProps} onClose={resetActive} />\n {elements[active]?.content}\n </>\n )}\n </SidePanel>\n <SideButtonsPanel\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(elements)}\n onButtonClick={toggleActive}\n activeIndexId={active}\n />\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst accordionSummaryHeight = '48px';\nconst defaultBorderStyle = '1px solid rgba(0, 0, 0, .125)';\n\nconst useStyles = makeStyles((theme) => ({\n accordion: {\n borderTop: defaultBorderStyle,\n borderBottom: defaultBorderStyle,\n fontSize: '13px',\n boxShadow: 'none',\n '&:not(:first-child)': {\n borderTop: 0\n },\n '&:before': {\n display: 'none'\n },\n '&$accordionExpanded': {\n margin: 'auto'\n }\n },\n accordionExpanded: {},\n accordionSummary: {\n display: 'flex',\n alignItems: 'center',\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight,\n '&$accordionSummaryExpanded': {\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight\n }\n },\n accordionSummaryHeading: {\n flex: 1,\n fontSize: theme.typography.pxToRem(13),\n fontWeight: theme.typography.fontWeightRegular\n },\n accordionSummaryExpanded: {},\n accordionSummaryContent: {\n display: 'flex',\n alignItems: 'center'\n },\n accordionDetails: {\n maxHeight: '21vh',\n overflow: 'auto',\n paddingTop: 0,\n paddingBottom: 0,\n '& ul': {\n paddingLeft: '23px',\n marginTop: '3px'\n },\n '& li': {\n paddingLeft: '9px',\n paddingBottom: '8px'\n }\n },\n parents: {\n color: theme.palette.text.primary\n },\n errorWrapper: {\n lineHeight: '18px',\n display: 'flex',\n flexDirection: 'column'\n },\n errorTitle: {\n display: 'flex',\n alignItems: 'center'\n },\n goToIcon: {\n marginLeft: '4px'\n },\n errorsAccordion: {\n backgroundColor: '#FFF4F6',\n borderColor: '#FFB8B3'\n },\n errorsAccordionDetails: {\n color: '#DD2C00'\n },\n warningsAccordion: {\n backgroundColor: '#FFF9ED',\n borderColor: '#FFDD91'\n },\n warningsAccordionDetails: {\n color: '#CC7500'\n },\n icon: {\n marginRight: '8px'\n },\n errorIcon: {\n fill: '#FF1744'\n },\n warningIcon: {\n fill: '#F9A825'\n }\n}));\n\nexport default useStyles;\n","import React, {memo, ReactNode, ElementType} from 'react';\nimport classnames from 'classnames';\nimport {Accordion as Accordion} from '@material-ui/core';\nimport {AccordionSummary as AccordionSummary} from '@material-ui/core';\nimport {AccordionDetails as AccordionDetails} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport useStyles from '../styles';\n\nimport {AttributeError} from '@reltio/mdm-sdk';\n\ntype Props = {\n panels: {\n id: string;\n title: string;\n icon: ReactNode;\n items: AttributeError[];\n accordionClassName: string;\n accordionDetailsClassName: string;\n }[];\n expandedPanelId: string;\n onToggle: (id: string) => (e, isExpanded: boolean) => void;\n ErrorComponent: ElementType;\n};\n\nexport const ErrorsPanel = memo(({panels, expandedPanelId, onToggle, ErrorComponent}: Props) => {\n const styles = useStyles();\n\n return panels.length > 0 ? (\n <div>\n {panels.map(({id, icon, title, items, accordionClassName, accordionDetailsClassName}) => (\n <Accordion\n key={id}\n square\n expanded={expandedPanelId === id}\n onChange={onToggle(id)}\n className={accordionClassName}\n classes={{root: styles.accordion, expanded: styles.accordionExpanded}}\n >\n <AccordionSummary\n classes={{\n root: styles.accordionSummary,\n expanded: styles.accordionSummaryExpanded,\n content: styles.accordionSummaryContent\n }}\n expandIcon={<ExpandMoreIcon />}\n >\n {icon}\n <Typography className={styles.accordionSummaryHeading}>{title}</Typography>\n </AccordionSummary>\n <AccordionDetails className={classnames(styles.accordionDetails, accordionDetailsClassName)}>\n <ul>\n {items.map((error, i) => (\n <ErrorComponent key={i} error={error} />\n ))}\n </ul>\n </AccordionDetails>\n </Accordion>\n ))}\n </div>\n ) : null;\n});\n\nErrorsPanel.displayName = 'ErrorsPanel';\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"18\",\n height: \"18\",\n viewBox: \"0 0 18 18\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M14.245 12.75c0 .825-.467 1.5-1.045 1.5H4.8c-.583 0-1.05-.675-1.05-1.5v-7.5c0-.832.467-1.5 1.05-1.5h8.4c.578 0 1.05.668 1.05 1.5l-.005 7.5zM9.75 9.96v1.642l3-2.805L9.75 6v1.598c-2.918.404-4.08 2.4-4.5 4.402 1.043-1.402 2.415-2.04 4.5-2.04z\",\n fill: \"#000\",\n fillOpacity: \".54\"\n})));","import {equals, identity, omit} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {\n AttributeError,\n AttributeType,\n AttributeValuePathItemType,\n ErrorSource,\n ErrorType,\n findAttributeTypeByUri,\n Metadata\n} from '@reltio/mdm-sdk';\n\nconst clearError = omit(['deactivated', 'path']);\nexport const areErrorsEqual = (errors1: AttributeError[] = [], errors2: AttributeError[] = []) =>\n errors1.length === errors2.length && equals(errors1.map(clearError), errors2.map(clearError));\n\nexport const getDisplayedErrorMessage = (\n metadata: Metadata,\n {type, source, message, attributeTypeUri = '', attributeType}: AttributeError\n) => {\n if (type === ErrorType.missed && source === ErrorSource.local) {\n const attrType: AttributeType = attributeType || findAttributeTypeByUri(metadata, attributeTypeUri);\n return attrType ? i18n.text('${attribute} is required', {attribute: attrType.label}) : message;\n }\n return message;\n};\n\nexport const getDisplayedErrorPath = ({path: errorPath, uri}: AttributeError) => {\n return errorPath\n ?.slice(0, uri ? errorPath.length - 1 : errorPath.length)\n .filter(({type}) =>\n [AttributeValuePathItemType.attributeValue, AttributeValuePathItemType.relationConnection].includes(type)\n )\n .map(({label}) => label)\n .filter(identity)\n .join(' / ');\n};\n","import React, {memo, useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {AttributeError, Metadata} from '@reltio/mdm-sdk';\nimport HyperlinkIcon from '../icons/hyperlink.svg';\nimport {SmallIconButtonWithTooltip, ScrollToErrorContext} from '@reltio/components';\nimport {getDisplayedErrorMessage, getDisplayedErrorPath} from '../helpers';\n\nimport useStyles from '../styles';\n\ntype Props = {\n error: AttributeError;\n};\n\nexport const Error = memo(({error}: Props) => {\n const styles = useStyles();\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const isEditableMode: boolean = useSelector(mdmModule.selectors.getIsEditableMode);\n const displayedMessage = getDisplayedErrorMessage(metadata, error);\n const displayedErrorPath = getDisplayedErrorPath(error);\n const {highlightError} = useContext(ScrollToErrorContext);\n const showLink = error.uri || (error.parentUri && error.attributeTypeUri);\n\n return (\n <li>\n <div className={styles.errorWrapper}>\n <span className={styles.errorTitle}>\n {displayedMessage}\n {showLink && isEditableMode && (\n <SmallIconButtonWithTooltip\n icon={HyperlinkIcon}\n size=\"XXS\"\n onClick={() => highlightError(error)}\n tooltipTitle={i18n.text('Go to error')}\n className={styles.goToIcon}\n />\n )}\n </span>\n {displayedErrorPath && <span className={styles.parents}>{displayedErrorPath}</span>}\n </div>\n </li>\n );\n});\n\nError.displayName = 'Error';\n","import {useRef} from 'react';\nimport {areErrorsEqual} from './helpers';\n\nexport const useCachedErrors = (allErrors) => {\n const cacheForAllErrors = useRef(allErrors);\n const areEqualErrors = areErrorsEqual(allErrors, cacheForAllErrors.current);\n if (!areEqualErrors) {\n cacheForAllErrors.current = allErrors;\n }\n return cacheForAllErrors.current;\n};\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {partition} from 'ramda';\nimport ErrorIcon from '@material-ui/icons/Warning';\nimport WarningIcon from '@material-ui/icons/Error';\nimport mdmModule from '@reltio/mdm-module';\nimport {AttributeError, isCriticalError} from '@reltio/mdm-sdk';\n\nimport useStyles from './styles';\n\nimport {ErrorsPanel} from './components/ErrorsPanel';\nimport {Error} from './components/Error';\nimport {useCachedErrors} from './useCachedErrors';\n\nexport const ProfileErrorsPanel = () => {\n const styles = useStyles();\n const allErrors = useSelector(mdmModule.selectors.getProfileErrors);\n const cachedAllErrors = useCachedErrors(allErrors);\n\n const [errors, warnings]: [AttributeError[], AttributeError[]] = useMemo(\n () => partition(isCriticalError, cachedAllErrors),\n [cachedAllErrors]\n );\n const [expandedPanelId, setExpandedPanelId] = useState(null);\n const panels = useMemo(\n () =>\n [\n {\n id: 'errors',\n title: i18n.text('${number} ${errors}', {\n number: errors.length,\n errors: errors.length === 1 ? i18n.text('error') : i18n.text('errors')\n }),\n icon: <ErrorIcon className={classnames(styles.icon, styles.errorIcon)} />,\n items: errors,\n accordionClassName: styles.errorsAccordion,\n accordionDetailsClassName: styles.errorsAccordionDetails\n },\n {\n id: 'warnings',\n title: i18n.text('${number} ${warnings}', {\n number: warnings.length,\n warnings: warnings.length === 1 ? i18n.text('warning') : i18n.text('warnings')\n }),\n icon: <WarningIcon className={classnames(styles.icon, styles.warningIcon)} />,\n items: warnings,\n accordionClassName: styles.warningsAccordion,\n accordionDetailsClassName: styles.warningsAccordionDetails\n }\n ].filter(({items}) => items.length > 0),\n [errors, warnings, styles]\n );\n\n useEffect(() => {\n setExpandedPanelId('errors');\n }, [errors]);\n\n const handleChange = useCallback(\n (panelId: string) => (event, isExpanded: boolean) => {\n setExpandedPanelId(isExpanded ? panelId : null);\n },\n []\n );\n\n return panels.length > 0 ? (\n <ErrorsPanel panels={panels} expandedPanelId={expandedPanelId} onToggle={handleChange} ErrorComponent={Error} />\n ) : null;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\ntype Props = {\n maxWidth?: number;\n};\n\nexport const useStyles = makeStyles((theme) => ({\n perspectiveView: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\n overflowX: 'hidden',\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.palette.background.default\n },\n scrollWrapper: {\n flexGrow: 1,\n overflowY: 'auto'\n },\n emptyState: {\n backgroundColor: '#FAFAFA',\n height: '100%'\n },\n profileWrapper: ({maxWidth}: Props) => ({\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n flexGrow: 1,\n maxWidth: maxWidth ? `${maxWidth}px` : '100%'\n }),\n profileContainer: {\n display: 'flex',\n overflow: 'hidden',\n flexGrow: 1\n },\n '@global div[role=tooltip]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n '@global div[role=presentation]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n }\n}));\n","import React, {memo, useCallback, useContext, useEffect, useMemo, useState, useRef} from 'react';\nimport i18n from 'ui-i18n';\nimport {useDispatch, useSelector} from 'react-redux';\nimport hash from 'object-hash';\nimport {\n debounce,\n Entity,\n fixNonUniqViewsIds,\n getProfileObjectIdsForCollaboration,\n ProfilePerspectiveConfig\n} from '@reltio/mdm-sdk';\nimport mdm, {HistoryEvent, profile} from '@reltio/mdm-module';\nimport {\n CollaborationContext,\n WorkflowTasksContext,\n UsersContext,\n EMPTY_STATE_ICONS,\n EMPTY_STATE_VARIANTS,\n EmptyState,\n LinearLoadIndicator,\n ProfilePerspectiveViewContext,\n PopupBoundariesContext,\n SearchValueContext,\n useSavedStateForEntityType,\n useCollaboration,\n useUsers,\n useWorkflowTasks,\n HistoryDiffContext,\n useHistoryDiff,\n useHistorySlice,\n ScrollToErrorProvider\n} from '@reltio/components';\n\nimport {ProfileSavedState, Layout} from '../../types';\n\nimport {ProfileLayout} from '../ProfileLayout';\nimport {Notifications} from '../Notifications';\nimport {PerspectiveProfileBand} from '../PerspectiveProfileBand';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\nimport {ProfileErrorsPanel} from '../ProfileErrorsPanel';\nimport {useProfileValidation} from '../hooks/useProfileValidation';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: ProfilePerspectiveConfig;\n saveState: (state: Record<string, ProfileSavedState>) => void;\n getSavedState: () => Promise<Record<string, ProfileSavedState>>;\n};\n\nconst SAVE_STATE_DEBOUNCE_DELAY = 1000;\nconst emptyState = {} as ProfileSavedState;\nconst ProfilePerspectiveView = memo(({config, saveState, getSavedState}: Props) => {\n const styles = useStyles({maxWidth: config?.maxWidth});\n const dispatch = useDispatch();\n const getSavedStateAndFix = useCallback(() => {\n return getSavedState().then((state) => (state.layout ? {} : state));\n }, [getSavedState]);\n const scrollWrapperRef = useRef<HTMLDivElement>();\n const debouncedSaveState = useCallback(debounce(saveState, SAVE_STATE_DEBOUNCE_DELAY), [saveState]) as (\n state: Record<string, ProfileSavedState>\n ) => void;\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n const nestedRoute = config?.nestedRoute ? `/${config.nestedRoute}` : '';\n const entityTypeUri = entity ? entity.type : null;\n const savedStateKey = entityTypeUri && config ? entityTypeUri + nestedRoute : null;\n\n const {\n isLoaded,\n savedState = emptyState,\n updateSavedState\n } = useSavedStateForEntityType<ProfileSavedState>({\n getSavedState: getSavedStateAndFix,\n saveState: debouncedSaveState,\n entityTypeUri: savedStateKey\n });\n const [layout, setLayout] = useState<Layout>([]);\n const [views, setViews] = useState<ProfilePerspectiveConfig['views']>([]);\n\n const configHash = useMemo(() => hash(config), [config]);\n\n const isHistoryActive = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const objectIds = useMemo(() => getProfileObjectIdsForCollaboration(entity), [entity]);\n const collaboration = useCollaboration({objectIds});\n const emptyCollaboration = useContext(CollaborationContext);\n const users = useUsers();\n const workflowTasks = useWorkflowTasks(config?.workflow);\n const historyEvent: HistoryEvent = useSelector(mdm.selectors.getHistoryEvent);\n useHistorySlice({entity, historyEvent});\n const historyDiff = useHistoryDiff();\n\n const keywordValue = useSelector(mdm.selectors.getSearchKeyword)?.value || '';\n\n useEffect(() => {\n if (isLoaded) {\n const isConfigChanged = configHash !== savedState.configHash;\n const {views: fixedViews, layout: fixedLayout} = fixNonUniqViewsIds({\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 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 if (scrollWrapperRef.current) {\n scrollWrapperRef.current.scrollTop = 0;\n }\n }, [entity?.uri]);\n\n useProfileValidation();\n\n const handleLayoutChange = useCallback(\n (layout: Layout) => {\n updateSavedState({layout, views, configHash});\n setLayout(layout);\n },\n [updateSavedState, configHash, views]\n );\n const boundariesElement = scrollWrapperRef.current;\n\n const popupBoundariesValue = useMemo(\n () => ({\n element: boundariesElement,\n priority: ['top', 'bottom']\n }),\n [boundariesElement]\n );\n return (\n <ProfilePerspectiveViewContext.Provider value={true}>\n <UsersContext.Provider value={users}>\n <CollaborationContext.Provider value={isHistoryActive ? emptyCollaboration : collaboration}>\n <WorkflowTasksContext.Provider value={workflowTasks}>\n <HistoryDiffContext.Provider value={historyDiff}>\n <SearchValueContext.Provider value={keywordValue}>\n <ScrollToErrorProvider>\n <div className={styles.perspectiveView}>\n {(!isLoaded || !entity?.uri) && <LinearLoadIndicator />}\n {isLoaded && entity?.uri ? (\n <div className={styles.profileContainer}>\n <div className={styles.profileWrapper}>\n <PerspectiveProfileBand profileBandConfig={config.profileBand} />\n {!isHistoryActive && <ProfileErrorsPanel />}\n <div ref={scrollWrapperRef} className={styles.scrollWrapper}>\n <PopupBoundariesContext.Provider value={popupBoundariesValue}>\n <ProfileLayout\n layout={layout}\n onLayoutChanged={handleLayoutChange}\n views={views}\n />\n </PopupBoundariesContext.Provider>\n </div>\n </div>\n <RightSidePanel />\n </div>\n ) : (\n <div className={styles.emptyState}>\n <EmptyState\n LogoRenderer={EMPTY_STATE_ICONS.NO_DATA}\n text={i18n.text('No data to display.')}\n variant={EMPTY_STATE_VARIANTS.embedded}\n />\n </div>\n )}\n <Notifications />\n </div>\n </ScrollToErrorProvider>\n </SearchValueContext.Provider>\n </HistoryDiffContext.Provider>\n </WorkflowTasksContext.Provider>\n </CollaborationContext.Provider>\n </UsersContext.Provider>\n </ProfilePerspectiveViewContext.Provider>\n );\n});\n\nProfilePerspectiveView.displayName = 'ProfilePerspectiveView';\n\nexport {ProfilePerspectiveView};\n","import {useCallback, useEffect} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {debounce, Entity, isDataTenantEntity, isTempUri, Mode} from '@reltio/mdm-sdk';\n\nexport const useProfileValidation = () => {\n const dispatch = useDispatch();\n const isValidateReadMode: boolean = useSelector(mdmModule.selectors.getValidateReadMode);\n const entity: Entity = useSelector(mdmModule.selectors.getEntity) || ({} as Entity);\n const {uri, updatedTime} = entity;\n const isDTEntity = isDataTenantEntity(entity);\n const mode: Mode = useSelector(mdmModule.selectors.getMode);\n const profileViews = useSelector(mdmModule.selectors.getProfileViews);\n const hasProfileViews = profileViews && profileViews.length > 0;\n\n const validate = useCallback(\n debounce((needDispatch: boolean) => {\n if (needDispatch) {\n dispatch(profile.actions.validateProfile());\n }\n }, 500),\n [dispatch]\n );\n\n useEffect(() => {\n const needDispatch =\n isValidateReadMode && !isDTEntity && uri && !isTempUri(uri) && mode === Mode.Viewing && hasProfileViews;\n validate(needDispatch);\n }, [validate, isDTEntity, isValidateReadMode, updatedTime, uri, mode, hasProfileViews]);\n};\n","import React, {useCallback, useMemo} from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport MomentUtils from '@date-io/moment';\nimport {identity} from 'ramda';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport {ErrorPopup, SandboxAPIContext, SnackbarContext, useSnackbar, ViewIdContext} from '@reltio/components';\nimport {convertOldProfileConfig, ProfilePerspectiveConfig, promisifyCallback, QxSandboxApi} from '@reltio/mdm-sdk';\nimport {ProfileSavedState} from '../types';\nimport ProfilePerspectiveView from '../components/ProfilePerspectiveView';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'profilePerspective',\n disableGlobal: true\n});\n\ntype Props = {\n config: ProfilePerspectiveConfig;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n saveState: (state: Record<string, ProfileSavedState>) => void;\n getSavedState: (clb: (state: Record<string, ProfileSavedState>) => void) => void;\n qxSandboxApi?: QxSandboxApi;\n};\n\nconst ProfilePerspective = ({config, store, onResize = identity, saveState, getSavedState, qxSandboxApi}: Props) => {\n const getSavedStatePromisified: () => Promise<Record<string, ProfileSavedState>> = useCallback(\n promisifyCallback(getSavedState),\n [getSavedState]\n );\n const {SnackbarRenderer, showSnackbarMessage} = useSnackbar();\n\n const processedConfig = useMemo(() => config && convertOldProfileConfig(config), [config]);\n\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={processedConfig?.id}>\n <SnackbarContext.Provider value={showSnackbarMessage}>\n <SandboxAPIContext.Provider value={qxSandboxApi}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <>\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 />\n )}\n <ErrorPopup showErrorFromStore={true} />\n <SnackbarRenderer />\n </>\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </SandboxAPIContext.Provider>\n </SnackbarContext.Provider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default ProfilePerspective;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n titleContainer: {\n overflow: 'hidden',\n fontSize: '16px',\n fontWeight: 'normal',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n alignItems: 'center',\n display: 'flex',\n minHeight: '48px',\n color: theme.palette.text.secondary\n },\n link: {\n fontSize: '16px',\n fontWeight: 'normal'\n },\n icon: {\n height: '18px',\n color: theme.palette.text.secondary\n },\n totalCaption: {\n lineHeight: 'inherit',\n fontSize: '14px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px'\n },\n totalNumber: {\n fontSize: '16px',\n color: 'rgba(0,0,0,0.87)',\n marginRight: '5px',\n fontWeight: 500\n }\n}));\n","import React, {useCallback, useContext} from 'react';\nimport {useDispatch} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {FacetViewHeader, Spacer, ViewIdContext} from '@reltio/components';\nimport {Link as Link} from '@material-ui/core';\nimport ArrowForwardIosRoundedIcon from '@material-ui/icons/ArrowForwardIosRounded';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n total?: number;\n};\n\nexport const TagListHeader = ({total = 0}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const viewId = useContext(ViewIdContext);\n\n const switchToProfile = useCallback(() => {\n dispatch(mdmModuleUi.actions.openPerspective({perspectiveId: 'profile', viewId}));\n }, [dispatch, viewId]);\n\n return (\n <FacetViewHeader title=\"\">\n <div className={styles.titleContainer}>\n <Link\n component=\"button\"\n variant=\"caption\"\n className={styles.link}\n onClick={switchToProfile}\n underline=\"none\"\n >\n {i18n.text('Profile')}\n </Link>\n <ArrowForwardIosRoundedIcon className={styles.icon} />\n {i18n.text('Tags')}\n </div>\n <Spacer />\n <Typography className={styles.totalCaption} variant=\"caption\">\n <span className={styles.totalNumber}>{i18n.number(total, '0,0')}</span>\n {i18n.text('total profiles')}\n </Typography>\n </FacetViewHeader>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n toolbar: {\n display: 'flex',\n flexShrink: 0,\n background: 'white',\n borderBottom: '1px solid rgba(0,0,0,0.1)',\n boxSizing: 'border-box',\n paddingLeft: '16px'\n },\n avatar: {\n color: 'rgba(0, 0, 0, 0.38)',\n marginRight: '12px'\n },\n label: {\n fontSize: '20px',\n letterSpacing: '0.25px',\n lineHeight: '1.2',\n fontWeight: 500,\n color: theme.palette.text.primary,\n wordBreak: 'break-word'\n }\n}));\n","import React from 'react';\nimport TagIcon from '@material-ui/icons/LocalOffer';\nimport {Toolbar as Toolbar} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {useStyles} from './styles';\n\ntype Props = {\n label: string;\n};\n\nexport const TagProfileBand = ({label}: Props) => {\n const styles = useStyles();\n return (\n <Toolbar className={styles.toolbar}>\n <TagIcon className={styles.avatar} />\n <Typography variant=\"h6\" className={styles.label}>\n {label}\n </Typography>\n </Toolbar>\n );\n};\n","import {useCallback, useMemo} from 'react';\nimport {map} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n Entity,\n getFilteredEntities,\n getFilteredEntitiesFromDataTenant,\n getTotals,\n getTotalFromDataTenant,\n TotalResponse,\n SearchFilter,\n GlobalSearchRequestOptions,\n getDataTenantFromEntityUri,\n enrichEntityWithDataTenant\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\n\ntype Props = {\n entityUri: string;\n tag: string;\n};\n\nexport const useTagsProvider = ({entityUri, tag}: Props) => {\n const globalSearchRequestOptions: GlobalSearchRequestOptions = useSelector(\n mdmModule.selectors.getGlobalSearchRequestOptions\n );\n const tenant: string = useSelector(mdmModule.selectors.getTenant);\n const dtssPath: string = useSelector(mdmModule.selectors.getDtssPath);\n const dataTenant = useMemo(() => getDataTenantFromEntityUri(entityUri), [entityUri]);\n const filters: SearchFilter[] = useMemo(() => {\n return [\n {\n filter: 'equals',\n fieldName: 'tags',\n values: [tag]\n }\n ];\n }, [tag]);\n\n const isDT = !!dataTenant;\n\n const getEntities = useCallback(\n (filters: SearchFilter[] = [], options = {}): Promise<Entity[]> => {\n const requestOptions = {\n select: 'uri,label,type,secondaryLabel,defaultProfilePicValue,startDate,endDate',\n ...options\n };\n return isDT\n ? getFilteredEntitiesFromDataTenant({\n filters,\n options: requestOptions,\n customerTenant: tenant,\n dataTenant,\n dtssPath\n }).then(map(enrichEntityWithDataTenant(dataTenant)))\n : getFilteredEntities(filters, requestOptions);\n },\n [isDT, dataTenant, tenant, dtssPath]\n );\n\n const requestEntities = useCallback(\n (max, offset): Promise<Entity[]> => {\n return getEntities(filters, {offset, max, ...globalSearchRequestOptions});\n },\n [filters, globalSearchRequestOptions, getEntities]\n );\n\n const requestTotal = useCallback((): Promise<number> => {\n const options = globalSearchRequestOptions;\n return (isDT\n ? getTotalFromDataTenant({\n filters,\n options,\n customerTenant: tenant,\n dataTenant,\n dtssPath\n })\n : getTotals(filters, options)\n ).then((json) => (json as TotalResponse).total);\n }, [filters, globalSearchRequestOptions, isDT, dataTenant, tenant, dtssPath]);\n\n return {requestEntities, requestTotal};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n perspectiveView: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.palette.background.default\n },\n tagsContainer: {\n display: 'flex'\n },\n fullHeight: {\n flexGrow: 1,\n height: 0\n },\n tagsView: {\n margin: '16px',\n width: '100%',\n paddingTop: '4px'\n },\n listContainer: {\n flex: 1,\n display: 'flex',\n overflow: 'hidden',\n position: 'relative',\n flexDirection: 'column',\n minHeight: '4px'\n },\n entitiesList: {\n overflowY: 'auto',\n flexGrow: 1\n },\n pagination: {\n flexGrow: 0\n }\n}));\n","import React, {memo, useEffect, useRef, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport mdmModule from '@reltio/mdm-module';\nimport {GlobalSearchRequestOptions} from '@reltio/mdm-sdk';\nimport {BasicTablePagination, BasicView, LinearLoadIndicator, ProfilesList} from '@reltio/components';\nimport {TagListHeader} from './components/TagListHeader';\nimport {TagProfileBand} from './components/TagProfileBand';\nimport {useTag} from './hooks/useTag';\n\nimport {useStyles} from './styles';\n\nconst ROWS_PER_PAGE_OPTIONS = [25, 50, 100];\n\ntype Props = {\n tag?: string;\n entityUri?: string;\n};\n\nconst TagPerspectiveView = memo(({tag, entityUri}: Props) => {\n const styles = useStyles();\n\n const [rowsPerPage, setRowsPerPage] = useState(ROWS_PER_PAGE_OPTIONS[0]);\n const [page, setPage] = useState(0);\n\n const globalSearchRequestOptions: GlobalSearchRequestOptions = useSelector(\n mdmModule.selectors.getGlobalSearchRequestOptions\n );\n\n useEffect(() => {\n setPage(0);\n }, [tag, entityUri, globalSearchRequestOptions]);\n\n const {isLoading, total, entities} = useTag({tag, entityUri, page, rowsPerPage});\n const refScrollBlock = useRef(null);\n\n useEffect(() => {\n if (refScrollBlock.current) {\n refScrollBlock.current.scrollTop = 0;\n }\n }, [entities]);\n\n const hasPagination = total > ROWS_PER_PAGE_OPTIONS[0];\n\n return (\n <div className={styles.perspectiveView}>\n <TagProfileBand label={tag} />\n <div className={classnames(styles.tagsContainer, {[styles.fullHeight]: hasPagination})}>\n <BasicView className={styles.tagsView}>\n <TagListHeader total={total} />\n <div className={styles.listContainer}>\n {isLoading && <LinearLoadIndicator />}\n {total > 0 && (\n <div className={styles.entitiesList} ref={refScrollBlock}>\n <ProfilesList entities={entities} />\n </div>\n )}\n {hasPagination && (\n <div className={styles.pagination}>\n <BasicTablePagination\n count={total}\n rowsPerPageOptions={ROWS_PER_PAGE_OPTIONS}\n rowsPerPage={rowsPerPage}\n page={page}\n onChangePage={setPage}\n onChangeRowsPerPage={setRowsPerPage}\n />\n </div>\n )}\n </div>\n </BasicView>\n </div>\n </div>\n );\n});\n\nTagPerspectiveView.displayName = 'TagPerspectiveView';\n\nexport {TagPerspectiveView};\n","import {useCallback, useEffect, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {useDispatch} from 'react-redux';\nimport {useSafePromise} from '@reltio/components';\nimport {ui} from '@reltio/mdm-module';\nimport {Entity, getRequestErrorMessage} from '@reltio/mdm-sdk';\nimport {useTagsProvider} from './useTagsProvider';\n\ntype Props = {\n tag: string;\n entityUri: string;\n page: number;\n rowsPerPage: number;\n};\n\nexport const useTag = ({tag, entityUri, page = 0, rowsPerPage = 50}: Props) => {\n const dispatch = useDispatch();\n\n const safeRequestTotalPromise = useSafePromise();\n const safeRequestEntitiesPromise = useSafePromise();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [total, setTotal] = useState<number>(0);\n const [entities, setEntities] = useState<Entity[]>([]);\n\n const {requestEntities, requestTotal} = useTagsProvider({entityUri, tag});\n\n const onError = useCallback(\n (e) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(e, i18n.text('Something went wrong'))));\n setTotal(0);\n },\n [dispatch]\n );\n\n useEffect(() => {\n safeRequestTotalPromise(requestTotal()).then(setTotal).catch(onError);\n }, [requestTotal, safeRequestTotalPromise, onError]);\n\n useEffect(() => {\n setIsLoading(true);\n safeRequestEntitiesPromise(requestEntities(rowsPerPage, page * rowsPerPage))\n .then(setEntities)\n .catch(onError)\n .finally(() => setIsLoading(false));\n }, [page, rowsPerPage, requestEntities, safeRequestEntitiesPromise, onError]);\n\n return {isLoading, total, entities};\n};\n","import React from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport {identity} from 'ramda';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {TagPerspectiveConfig} from '@reltio/mdm-sdk';\nimport TagPerspectiveView from '../components/TagPerspectiveView';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'tagPerspective',\n disableGlobal: true\n});\n\ntype Props = {\n config: TagPerspectiveConfig;\n tag?: string;\n entityUri?: string;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n};\n\nconst TagPerspective = ({config, tag, entityUri, store, onResize = identity}: Props) => {\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n {config && <TagPerspectiveView tag={tag} entityUri={entityUri} />}\n <ErrorPopup showErrorFromStore={true} />\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default TagPerspective;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n addButton: {\n marginLeft: '12px',\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)'\n },\n label: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n }\n});\n","import AddIcon from '@material-ui/icons/Add';\nimport {Button as Button} from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport i18n from 'ui-i18n';\nimport {useStyles} from './styles';\n\nconst AddRelationButton = ({onClick}) => {\n const styles = useStyles();\n return (\n <Button color=\"primary\" className={styles.addButton} onClick={onClick}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.label}>{i18n.text('Add')}</div>\n </Button>\n );\n};\n\nAddRelationButton.propTypes = {\n onClick: PropTypes.func\n};\n\nexport default AddRelationButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst removedStyle = {\n textDecoration: 'line-through',\n color: 'rgba(0,0,0,.54)'\n};\n\nconst inactiveStyle = {\n color: 'rgba(0,0,0,.54)'\n};\n\nexport const useStyles = makeStyles((theme) => ({\n headCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n fontSize: '12px'\n },\n entityCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%'\n },\n entityLabel: {\n fontSize: '15px',\n color: theme.palette.primary.main,\n cursor: 'pointer',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n '$row-cell--removed &': removedStyle,\n '$row-cell--inactive &': inactiveStyle\n },\n entityAvatar: {\n transform: 'scale(0.7)',\n margin: '0 10px'\n },\n rowCell: {\n fontSize: '13px',\n overflow: 'hidden'\n },\n 'row-cell--sorted': {\n color: 'rgba(0,0,0,0.87)'\n },\n 'row-cell--removed': {\n pointerEvents: 'none',\n '& > :not($entityCell)': removedStyle\n },\n 'row-cell--inactive': inactiveStyle\n}));\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport classnames from 'classnames';\nimport {checkRemoved, isActiveObject} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\nconst RowCellRenderer = ({cell, CellValueRenderer, rowValue: {connection}, isSorted, ...otherProps}) => {\n const styles = useStyles();\n const isRemoved = checkRemoved(connection);\n const isActive = isActiveObject(connection.relation) && isActiveObject(connection.entity);\n\n return (\n <div\n className={classnames(\n {\n [styles['row-cell--sorted']]: isSorted,\n [styles['row-cell--removed']]: isRemoved,\n [styles['row-cell--inactive']]: !isActive\n },\n styles.rowCell\n )}\n >\n {cell.values.map((value, index) => (\n <CellValueRenderer key={index} value={value} {...otherProps} />\n ))}\n </div>\n );\n};\n\nRowCellRenderer.propTypes = {\n rowValue: PropTypes.object,\n cell: PropTypes.object,\n CellValueRenderer: PropTypes.elementType,\n isSorted: PropTypes.bool\n};\n\nexport default RowCellRenderer;\n","import PropTypes from 'prop-types';\nimport React, {useContext} from 'react';\nimport {ui} from '@reltio/mdm-module';\nimport {always, pipe} from 'ramda';\nimport {useDispatch} from 'react-redux';\nimport {useStyles} from './styles';\nimport {EntityTypeType, getEntityUriForLink, getLabel} from '@reltio/mdm-sdk';\nimport {EntityTypeIcon, ExpandedValueTooltip, ViewIdContext} from '@reltio/components';\n\nconst EntityProfileRenderer = ({value: {entityType, entity}}) => {\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const styles = useStyles();\n const entityLabel = getLabel(entity.entityLabel);\n const preparedUri = getEntityUriForLink({uri: entity.entityUri, dataTenant: entity.dataTenant});\n return (\n <div className={styles.entityCell}>\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <ExpandedValueTooltip value={entityLabel}>\n <span\n className={styles.entityLabel}\n onClick={pipe(always({uri: preparedUri, viewId}), ui.actions.openEntity, dispatch)}\n >\n {entityLabel}\n </span>\n </ExpandedValueTooltip>\n </div>\n );\n};\n\nEntityProfileRenderer.propTypes = {\n value: PropTypes.shape({\n entity: PropTypes.shape({\n entityUri: PropTypes.string,\n entityLabel: PropTypes.string\n }),\n entityType: EntityTypeType\n })\n};\n\nexport default EntityProfileRenderer;\n","import React from 'react';\n\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {withFilterAtBottom} from '@reltio/components';\nimport {useStyles} from './styles';\n\nconst HeadCellRenderer = (props) => {\n const styles = useStyles();\n return (\n <div className={styles.headCell}>\n <DefaultHeadCellRenderer {...props} />\n </div>\n );\n};\n\nexport default withFilterAtBottom(HeadCellRenderer);\n","import {getOvAttributeValuesByPath, getReadableAttributesList} from '@reltio/mdm-sdk';\nimport {chain, find, map, path, pipe, propEq, uniq} from 'ramda';\n\nconst getRelationTypes = pipe(\n map((rel) => rel.uri || rel),\n uniq\n);\n\nconst getRelationsAttributesFromMetadata = ({content: {inRelations = [], outRelations = []}}, {relationTypes}) =>\n pipe(\n getRelationTypes,\n chain((relationType) => pipe(find(propEq('uri', relationType)), getReadableAttributesList)(relationTypes))\n )([...inRelations, ...outRelations]);\n\nconst getRelationAttributeValues = (attrPath, relation) =>\n pipe(path(['object', 'attributes']), getOvAttributeValuesByPath(attrPath))(relation);\n\nexport {getRelationsAttributesFromMetadata, getRelationAttributeValues};\n","import EntityProfileRenderer from '../cell-renderers/EntityProfileRenderer';\nimport HeadCellRenderer from '../cell-renderers/HeadCellRenderer';\nimport {DefaultCellValueRenderer} from '@reltio/components';\nimport {assoc, map, pipe, reduce, slice, split} from 'ramda';\nimport {getEntityType, getRelationTypeLabelFromMetadata} from '@reltio/mdm-sdk';\nimport {getRelationAttributeValues} from '../../../core/relations';\n\nconst getAttrPathFromColumnId = pipe(split('.'), slice(2, Infinity));\n\nconst getRowValueByColumnId = (columnId, {entity, relation}, metadata) => {\n switch (columnId) {\n case 'entity.label':\n return {entity, entityType: getEntityType(metadata, entity.entityType)};\n case 'relation.label':\n return relation.relationLabel || getRelationTypeLabelFromMetadata(metadata, relation.relationType);\n case 'relation.activeness.startDate':\n return relation.startDate;\n case 'relation.activeness.endDate':\n return relation.endDate;\n default: {\n const attrPath = getAttrPathFromColumnId(columnId);\n return getRelationAttributeValues(attrPath, relation);\n }\n }\n};\n\nconst getBasicTableRowsData = (connections, columnsData, metadata) =>\n connections.map((connection) =>\n pipe(\n reduce((acc, {id}) => assoc(id, getRowValueByColumnId(id, connection, metadata), acc), {}),\n assoc('connection', connection)\n )(columnsData)\n );\n\nconst getNestedPathByColumnId = (columnId) => {\n if (columnId.startsWith('relation.attributes')) {\n const attrPath = getAttrPathFromColumnId(columnId);\n return attrPath.length > 1 ? attrPath.slice(0, -1) : null;\n } else {\n return null;\n }\n};\n\nconst getCellValueRenderer = (columnId) => {\n switch (columnId) {\n case 'entity.label':\n return EntityProfileRenderer;\n default:\n return DefaultCellValueRenderer;\n }\n};\n\nconst getColumnDataByColumnId = (columnData) => ({\n ...columnData,\n sortable: true,\n resizable: true,\n nestedPath: getNestedPathByColumnId(columnData.id),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: getCellValueRenderer(columnData.id)\n});\n\nconst getBasicTableColumnsData = map(getColumnDataByColumnId);\n\nexport {getBasicTableRowsData, getBasicTableColumnsData};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n tableContainer: {\n display: 'flex',\n fontFamily: 'Roboto',\n color: 'rgba(0,0,0,0.54)'\n },\n\n emptyData: {\n marginBottom: '30px'\n },\n\n '@global div[role=tooltip]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n\n '@global div[role=presentation]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n 'row-cell__buttons-container': {\n position: 'absolute'\n },\n 'row-cell__buttons-wrapper': {\n display: 'flex',\n paddingLeft: '10px',\n '& > button': {\n marginLeft: '-10px',\n transform: 'scale(0.9)'\n }\n }\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {IconButton as IconButton} from '@material-ui/core';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport i18n from 'ui-i18n';\n\nexport const EditButtons = ({canUpdate, canRemove, handleEditRelation, handleRemoveRelation}) => (\n <>\n {canUpdate && (\n <Tooltip title={i18n.text('Edit')}>\n <IconButton onClick={handleEditRelation}>\n <EditIcon />\n </IconButton>\n </Tooltip>\n )}\n {canRemove && (\n <Tooltip title={i18n.text('Remove')}>\n <IconButton onClick={handleRemoveRelation}>\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n )}\n </>\n);\nEditButtons.propTypes = {\n canUpdate: PropTypes.bool,\n canRemove: PropTypes.bool,\n handleEditRelation: PropTypes.func,\n handleRemoveRelation: PropTypes.func\n};\n\nexport default EditButtons;\n","import PropTypes from 'prop-types';\nimport React, {useCallback, useMemo, useState} from 'react';\nimport RowCellRenderer from './cell-renderers/RowCellRenderer';\nimport {BasicTable, ColumnFilterType, ColumnsDataType, SortingType} from '@reltio/components';\nimport {getBasicTableColumnsData, getBasicTableRowsData} from './helpers/dataHelpers';\nimport {useStyles} from './styles';\nimport {ConnectionType, MetadataType} from '@reltio/mdm-sdk';\nimport {path} from 'ramda';\nimport {checkRelationPermission} from './helpers/buttonsHelper';\nimport EditButtons from './EditButtons';\n\nconst MAX_HEIGHT = 477;\n\nconst RelationsTable = ({\n mode,\n columnsData,\n connections,\n metadata,\n sorting,\n onSort,\n filters,\n onFilter,\n onEditRelation,\n onRemoveRelation,\n basicTableRef,\n allowOnlyCreateNew\n}) => {\n const tableRowsData = useMemo(() => getBasicTableRowsData(connections, columnsData, metadata), [\n connections,\n columnsData,\n metadata\n ]);\n const tableColumnsData = useMemo(() => getBasicTableColumnsData(columnsData), [columnsData]);\n\n const styles = useStyles();\n\n const renderRowCell = useCallback(\n (props) => (\n <RowCellRenderer\n {...props}\n isSorted={!!sorting && sorting.field === props.columnData.id} /* eslint-disable-line react/prop-types */\n />\n ),\n [sorting]\n );\n\n const [hoverRowIndex, setHoverRowIndex] = useState(null);\n const {canRemove, canUpdate} = checkRelationPermission({\n mode,\n onRemoveRelation,\n onEditRelation,\n metadata,\n allowOnlyCreateNew,\n connection: path([hoverRowIndex, 'connection'], tableRowsData)\n });\n\n const handleOnRowHover = useCallback((rowIndex) => setHoverRowIndex(rowIndex), []);\n const handleEditRelation = useCallback(() => onEditRelation(path([hoverRowIndex, 'connection'], tableRowsData)), [\n hoverRowIndex,\n onEditRelation,\n tableRowsData\n ]);\n const handleRemoveRelation = useCallback(\n () => onRemoveRelation(path([hoverRowIndex, 'connection', 'relation', 'relationUri'], tableRowsData)),\n [hoverRowIndex, onRemoveRelation, tableRowsData]\n );\n\n const hoveredRowRightContent =\n canRemove || canUpdate ? (\n <EditButtons\n handleEditRelation={handleEditRelation}\n handleRemoveRelation={handleRemoveRelation}\n canRemove={canRemove}\n canUpdate={canUpdate}\n />\n ) : undefined;\n return (\n <div className={styles.tableContainer}>\n <BasicTable\n autosizing\n maxHeight={MAX_HEIGHT}\n columnsData={tableColumnsData}\n rowsData={tableRowsData}\n sorting={sorting}\n onSort={onSort}\n filters={filters}\n onFilter={onFilter}\n hoverStateEnabled={true}\n defaultColumnWidth={250}\n defaultColumnMinWidth={200}\n headRowHeight={56}\n renderRowCell={renderRowCell}\n onRowHover={handleOnRowHover}\n hoverRowIndex={hoverRowIndex}\n hoveredRowRightContent={hoveredRowRightContent}\n classes={{\n hoveredRowRightContentWrapper: styles['row-cell__buttons-wrapper'],\n hoveredRowRightContentContainer: styles['row-cell__buttons-container']\n }}\n ref={basicTableRef}\n resizeDebounceDelay={150}\n />\n </div>\n );\n};\n\nRelationsTable.propTypes = {\n mode: PropTypes.string,\n columnsData: ColumnsDataType,\n connections: PropTypes.arrayOf(ConnectionType),\n metadata: MetadataType,\n filters: PropTypes.objectOf(ColumnFilterType),\n onFilter: PropTypes.func,\n sorting: SortingType,\n onSort: PropTypes.func,\n onEditRelation: PropTypes.func,\n onRemoveRelation: PropTypes.func,\n basicTableRef: PropTypes.shape({current: PropTypes.object}),\n allowOnlyCreateNew: PropTypes.bool\n};\n\nexport default RelationsTable;\n","import {profile} from '@reltio/mdm-module';\nimport {checkMetadataForDelete, checkMetadataForUpdate, checkNew, checkRemoved, getRelationType} from '@reltio/mdm-sdk';\n\nconst checkRelationPermission = ({\n metadata,\n mode,\n connection,\n onRemoveRelation,\n onEditRelation,\n allowOnlyCreateNew\n}) => {\n const isNew = checkNew(connection);\n const isEditableMode = profile.mode.selectors.getIsEditableMode(mode);\n if (isEditableMode && connection && (!allowOnlyCreateNew || isNew)) {\n const {\n relation: {relationType}\n } = connection;\n const isRemoved = checkRemoved(connection);\n const relationTypeMetadata = getRelationType(metadata, relationType);\n const canRemove = onRemoveRelation && !isRemoved && checkMetadataForDelete(mode, relationTypeMetadata);\n const canUpdate = onEditRelation && !isRemoved && checkMetadataForUpdate(mode, relationTypeMetadata);\n return {canRemove, canUpdate};\n } else {\n return {canRemove: false, canUpdate: false};\n }\n};\n\nexport {checkRelationPermission};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n popupContent: {\n padding: '19px 23px'\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n }\n}));\n","import React, {useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Popover as Popover} from '@material-ui/core';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n showInactive: boolean;\n onShowInactiveChange: (value: boolean) => void;\n};\n\nconst MoreButton = ({className, showInactive, onShowInactiveChange}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const [isOpen, setIsOpen] = useState(false);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n return (\n <>\n <SmallIconButtonWithTooltip\n className={className}\n ref={buttonRef}\n tooltipTitle={i18n.text('More')}\n icon={MoreVertIcon}\n onClick={togglePopup}\n size=\"L\"\n />\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive || false}\n onChange={(e) => onShowInactiveChange(e.target.checked)}\n />\n }\n label={i18n.text('Show inactive Relationships')}\n />\n </Popover>\n </>\n );\n};\n\nexport default MoreButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n header: {\n padding: '0 4px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px',\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n },\n moreButton: {\n marginLeft: '-6px'\n }\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport {\n FacetViewHeader,\n ColumnsDataType,\n ColumnsSettings,\n FilterButton,\n HideOnShrink,\n VerticalDivider,\n ExpandableSearchInput\n} from '@reltio/components';\nimport MoreButton from './MoreButton/MoreButton';\nimport {useStyles} from './styles';\n\nconst RelationsTableHeader = ({\n title,\n total,\n searchQuery,\n onChangeSearchQuery,\n filtersEnabled,\n onToggleFilters,\n columnsData,\n selectedColumns,\n onChangeColumns,\n showInactive,\n onChangeShowInactive\n}) => {\n const styles = useStyles();\n return (\n <FacetViewHeader title={title} className={styles.header}>\n <HideOnShrink widthToHide={500}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {total > 1\n ? i18n.text('${count} entities', {count: total})\n : i18n.text('${count} entity', {count: total})}\n </Typography>\n </HideOnShrink>\n <ExpandableSearchInput query={searchQuery} onChange={onChangeSearchQuery} />\n <FilterButton enabled={filtersEnabled} onClick={onToggleFilters} />\n <VerticalDivider height={24} margin={4} />\n <ColumnsSettings\n columnsData={columnsData}\n selectedColumns={selectedColumns}\n onChangeColumns={onChangeColumns}\n />\n <MoreButton\n className={styles.moreButton}\n showInactive={showInactive}\n onShowInactiveChange={onChangeShowInactive}\n />\n </FacetViewHeader>\n );\n};\n\nRelationsTableHeader.propTypes = {\n title: PropTypes.string,\n total: PropTypes.number,\n columnsData: ColumnsDataType,\n selectedColumns: PropTypes.arrayOf(PropTypes.string),\n onChangeColumns: PropTypes.func,\n searchQuery: PropTypes.string,\n onChangeSearchQuery: PropTypes.func,\n filtersEnabled: PropTypes.bool,\n onToggleFilters: PropTypes.func,\n showInactive: PropTypes.bool,\n onChangeShowInactive: PropTypes.func\n};\n\nexport default RelationsTableHeader;\n","import {basicTableViewState, createStandardAction} from '@reltio/components';\n\nconst CHANGE_SEARCH_QUERY = 'CHANGE_SEARCH_QUERY';\nconst CHANGE_SHOW_INACTIVE = 'CHANGE_SHOW_INACTIVE';\n\nconst actions = {\n ...basicTableViewState.actions,\n changeSearchQuery: createStandardAction(CHANGE_SEARCH_QUERY),\n changeShowInactive: createStandardAction(CHANGE_SHOW_INACTIVE)\n};\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case CHANGE_SEARCH_QUERY:\n return {...state, searchQuery: action.payload, page: 0};\n case CHANGE_SHOW_INACTIVE:\n return {...state, showInactive: action.payload};\n default:\n return basicTableViewState.reducer(state, action);\n }\n};\n\nexport {reducer as default, actions};\n","import {ActivenessAttrTypes, attributeUriToSearchUri, DataTypes, getAttrDataTypeDefinition} from '@reltio/mdm-sdk';\nimport {concat, map, pipe, prop, subtract, uniqBy} from 'ramda';\nimport {getRelationsAttributesFromMetadata} from '../../core/relations';\nimport i18n from 'ui-i18n';\n\nconst ROWS_PER_PAGE_OPTIONS = [10, 25, 50, 100];\nconst getRowsPerPageOptions = (defaultRowsPerPage) =>\n ROWS_PER_PAGE_OPTIONS.filter((option) => option !== defaultRowsPerPage)\n .concat(defaultRowsPerPage)\n .sort(subtract);\n\nconst DEFAULT_COLUMNS_DATA = [\n {\n id: 'entity.label',\n get label() {\n return i18n.text('Entity label');\n },\n dataTypeDefinition: {\n type: DataTypes.TYPE_STRING\n },\n hideable: false\n },\n {\n id: 'relation.label',\n get label() {\n return i18n.text('Directional label');\n },\n dataTypeDefinition: {\n type: DataTypes.TYPE_STRING\n }\n },\n {\n id: 'relation.activeness.startDate',\n get label() {\n return i18n.text('Start date');\n },\n dataTypeDefinition: ActivenessAttrTypes.startDate\n },\n {\n id: 'relation.activeness.endDate',\n get label() {\n return i18n.text('End date');\n },\n dataTypeDefinition: ActivenessAttrTypes.endDate\n }\n];\n\nconst getColumnIdFromAttrUri = pipe(attributeUriToSearchUri, concat('relation.'));\n\nconst getColumnsDataFromRelationAttributes = pipe(\n map((attr) => ({\n id: getColumnIdFromAttrUri(attr.uri),\n label: attr.label,\n dataTypeDefinition: getAttrDataTypeDefinition(attr)\n })),\n uniqBy(prop('id'))\n);\n\nconst getColumnsData = pipe(\n getRelationsAttributesFromMetadata,\n getColumnsDataFromRelationAttributes,\n concat(DEFAULT_COLUMNS_DATA)\n);\n\nexport {getRowsPerPageOptions, DEFAULT_COLUMNS_DATA, getColumnsData};\n","import {buildColumnsFilter} from '@reltio/components';\nimport {\n checkMetadataPermission,\n FilterBuilder,\n filterValueToQueryStringWithQuotes,\n Maybe,\n MetadataPermissions\n} from '@reltio/mdm-sdk';\nimport {curry, either, evolve, indexBy, keys, path, pipe, prop, unless} from 'ramda';\n\nconst getUri = (item) => item.uri || item;\nconst containsUri = (uri) => (item) => getUri(item) === uri;\n\nexport const parseUris = curry((metadata, data) => {\n const parseUri = (acc, item) => {\n let uri = getUri(item),\n shouldSkipDescendantUris = false;\n if (uri.startsWith('!')) {\n uri = uri.slice(1);\n shouldSkipDescendantUris = true;\n }\n const hasValidMetadata = metadata[uri] && checkMetadataPermission(MetadataPermissions.READ, metadata[uri]);\n const nextAcc =\n acc.find(containsUri(uri)) || !hasValidMetadata ? acc : acc.concat(item.uri ? {...item, uri} : uri);\n // prettier-ignore\n return shouldSkipDescendantUris\n ? nextAcc\n : keys(metadata).reduce(\n (acc, descUri) =>\n metadata[descUri].extendsTypeURI === uri && !acc.find(containsUri(descUri))\n ? parseUri(acc, descUri)\n : acc,\n nextAcc\n );\n };\n\n return data.reduce(parseUri, []);\n});\n\nexport const deriveEntityTypesFromRelations = curry((relationTypes, content) => {\n const deriveEntitiesFromRelationsMetadata = (objectType, relations = []) =>\n relations.reduce((acc, relation) => {\n const relationTypeUri = getUri(relation);\n const entityTypeUri = path([relationTypeUri, objectType, 'objectTypeUri'], relationTypes);\n return !entityTypeUri || acc.find(containsUri(entityTypeUri)) ? acc : acc.concat(entityTypeUri);\n }, []);\n\n return {\n ...content,\n entityTypes: [\n ...deriveEntitiesFromRelationsMetadata('startObject', content.inRelations),\n ...deriveEntitiesFromRelationsMetadata('endObject', content.outRelations)\n ]\n };\n});\n\nconst indexByUri = indexBy(prop('uri'));\n\nexport const parseRelationsConfigContent = curry((metadata, content) => {\n const relationTypes = indexByUri(metadata.relationTypes);\n const entityTypes = indexByUri(metadata.entityTypes);\n\n const parseEntryUris = (entry) =>\n evolve(\n {\n inRelations: parseUris(relationTypes),\n outRelations: parseUris(relationTypes),\n entityTypes: parseUris(entityTypes),\n nextEntry: parseEntryUris\n },\n entry\n );\n\n return pipe(\n unless(either(prop('nextEntry'), prop('entityTypes')), deriveEntityTypesFromRelations(relationTypes)),\n parseEntryUris\n )(content);\n});\n\nexport const parseRelationsConfig = (metadata, config) =>\n evolve({content: parseRelationsConfigContent(metadata)}, config);\n\nexport const buildRelationsFilter = (searchQuery, filters, columnsData) => {\n const queryClause = Maybe.fromFalsy(searchQuery)\n .map(filterValueToQueryStringWithQuotes)\n .map(\n (queryString) =>\n `containsWordStartingWith(entity.label,${queryString})` +\n ' or ' +\n `containsWordStartingWith(relation.label,${queryString})`\n )\n .orSome('');\n\n const filtersClause = buildColumnsFilter(columnsData, filters);\n\n return new FilterBuilder().addClause(queryClause).addClause(filtersClause).build();\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n addArea: {\n display: 'flex',\n alignItems: 'center',\n height: '48px',\n borderBottom: '1px solid rgba(0, 0, 0, 0.12)'\n },\n noData: {\n fontSize: '13px',\n paddingLeft: '20px',\n marginBottom: '20px',\n marginTop: '10px',\n color: 'rgba(0,0,0,0.54)'\n }\n});\n","import React, {useCallback, useContext, useEffect, useMemo, useReducer, useRef} from 'react';\nimport AddRelationButton from './AddRelationButton/AddRelationButton';\nimport RelationsTable from './RelationsTable/RelationsTable';\nimport RelationsTableHeader from './RelationsTableHeader/RelationsTableHeader';\nimport reducer, {actions} from './stateReducer';\nimport {\n BasicTablePagination,\n BasicView,\n LinearLoadIndicator,\n ProfilePerspectiveViewContext,\n useConfigPermissions,\n useRelationsLoader,\n RelationEditor\n} from '@reltio/components';\nimport {DEFAULT_COLUMNS_DATA, getColumnsData, getRowsPerPageOptions} from './helpers/tableHelpers';\nimport {pipe, pluck, propEq} from 'ramda';\nimport {buildRelationsFilter} from './helpers/relationsHelpers';\nimport {profile} from '@reltio/mdm-module';\nimport {\n isTempUri,\n ModeTypes,\n createNewConnectionWithDefaultRelationType,\n RelationsViewConfig,\n Entity,\n Metadata,\n Connection,\n Mode,\n ActivityFilter\n} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\nimport {Typography as Typography} from '@material-ui/core';\nimport i18n from 'ui-i18n';\nimport {Dispatch} from 'redux';\n\nconst DEFAULT_ROWS_PER_PAGE = 15;\nconst DEFAULT_SORT_ORDER = 'asc';\nconst DEFAULT_COLUMNS_TO_SHOW = pluck('id', DEFAULT_COLUMNS_DATA);\nconst [DEFAULT_SORT_FIELD] = DEFAULT_COLUMNS_TO_SHOW;\nconst DEFAULT_SHOW_INACTIVE = false;\n\ntype Props = {\n config: RelationsViewConfig;\n entity: Entity;\n metadata: Metadata;\n connections: Connection[];\n total: number;\n mode: Mode;\n className?: string;\n relationToAdd: Connection;\n relationsToEdit: Connection[];\n checkIfCanAddRelations: boolean;\n dispatch: Dispatch;\n readOnlyMode?: boolean;\n};\nconst RelationsTableView = ({\n className,\n config,\n entity,\n metadata,\n connections = [],\n total = 0,\n mode: modeProp,\n relationToAdd,\n relationsToEdit = [],\n checkIfCanAddRelations,\n dispatch: reduxDispatch,\n readOnlyMode\n}: Props) => {\n const initialState = {\n searchQuery: '',\n filters: null,\n visibleColumns: DEFAULT_COLUMNS_TO_SHOW,\n sorting: {\n order: config.sortOrder || DEFAULT_SORT_ORDER,\n field: config.sortColumn || DEFAULT_SORT_FIELD\n },\n page: 0,\n rowsPerPage: config.max || DEFAULT_ROWS_PER_PAGE,\n showInactive: DEFAULT_SHOW_INACTIVE\n };\n\n const styles = useStyles();\n const isProfilePerspectiveView = useContext(ProfilePerspectiveViewContext);\n const mode = isProfilePerspectiveView ? modeProp : ModeTypes.VIEWING;\n\n const [state, dispatch] = useReducer(reducer, initialState);\n const changeSearchQuery = pipe(actions.changeSearchQuery, dispatch);\n const changeShowInactive = pipe(actions.changeShowInactive, dispatch);\n const clearSearchQuery = () => {\n changeSearchQuery('');\n };\n useEffect(clearSearchQuery, [entity?.uri]); //eslint-disable-line react-hooks/exhaustive-deps\n\n const {visibleColumns, searchQuery, filters, sorting, page, rowsPerPage, showInactive} = state;\n\n const allColumnsData = useMemo(() => getColumnsData(config, metadata), [config, metadata]);\n\n const visibleColumnsData = useMemo(\n () => visibleColumns.map((id) => allColumnsData.find(propEq('id', id))),\n [visibleColumns, allColumnsData]\n );\n\n const filter = useMemo(\n () => buildRelationsFilter(searchQuery, filters, visibleColumnsData),\n [filters, searchQuery] // eslint-disable-line\n );\n\n const {isLoading} = useRelationsLoader({\n sorting,\n filter,\n page,\n rowsPerPage,\n config,\n entity,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY,\n mode: modeProp\n });\n\n const rowsPerPageOptions = useMemo(() => getRowsPerPageOptions(initialState.rowsPerPage), []); // eslint-disable-line\n const {handleRowsPerPageChange, handlePageChange} = useMemo(\n () => ({\n handleRowsPerPageChange: pipe(actions.changeRowsPerPage, dispatch),\n handlePageChange: pipe(actions.changePage, dispatch)\n }),\n []\n );\n\n const onAddRelation = useCallback(() => {\n const newConnection = createNewConnectionWithDefaultRelationType({\n config,\n mode,\n metadata,\n parentEntityUri: undefined\n });\n pipe(profile.relations.actions.openRelationEditor(config.id), reduxDispatch)(newConnection);\n }, [config, mode, metadata, reduxDispatch]);\n\n const onRemoveRelation = useCallback(\n (relationUri) => {\n reduxDispatch(profile.relations.actions.closeRelationEditor(config.id, relationUri));\n reduxDispatch(profile.relations.actions.removeRelation(config.id, relationUri));\n const connectionToRemove = connections.find(\n (connection) => profile.relations.selectors.getRelationUriFromConnection(connection) === relationUri\n );\n const entityUri = profile.relations.selectors.getEntityUriFromConnection(connectionToRemove);\n if (isTempUri(entityUri)) {\n reduxDispatch(profile.modifiedEntities.actions.entityDeleted(entityUri));\n }\n },\n [config, connections, reduxDispatch]\n );\n\n const canAddRelations = entity && checkIfCanAddRelations && !readOnlyMode;\n const openedRelations = relationToAdd ? [relationToAdd, ...relationsToEdit] : relationsToEdit;\n const {canUpdate, canDelete} = useConfigPermissions();\n const canEditRelations = canUpdate(config) && !readOnlyMode;\n const canRemoveRelations = canDelete(config) && !readOnlyMode;\n const basicTableRef = useRef(null);\n\n return (\n <BasicView className={className}>\n <RelationsTableHeader\n title={config.caption}\n total={total}\n columnsData={allColumnsData}\n selectedColumns={visibleColumns}\n onChangeColumns={pipe(actions.changeColumns, dispatch)}\n searchQuery={searchQuery}\n onChangeSearchQuery={changeSearchQuery}\n filtersEnabled={!!filters}\n onToggleFilters={pipe(actions.toggleFilters, dispatch)}\n showInactive={showInactive}\n onChangeShowInactive={changeShowInactive}\n />\n {canAddRelations && (\n <div className={styles.addArea}>\n <AddRelationButton onClick={onAddRelation} />\n </div>\n )}\n {openedRelations.map((relation) => (\n <RelationEditor\n key={profile.relations.selectors.getRelationUriFromConnection(relation)}\n connection={relation}\n config={config}\n mode={mode}\n metadata={metadata}\n />\n ))}\n <div style={{position: 'relative'}}>\n <RelationsTable\n mode={mode}\n columnsData={visibleColumnsData}\n connections={connections}\n metadata={metadata}\n filters={filters}\n onFilter={pipe(actions.changeFilter, dispatch)}\n sorting={sorting}\n onSort={pipe(actions.toggleSort, dispatch)}\n onEditRelation={\n canEditRelations\n ? pipe(profile.relations.actions.openRelationEditor(config.id), reduxDispatch)\n : null\n }\n onRemoveRelation={canRemoveRelations ? onRemoveRelation : null}\n basicTableRef={basicTableRef}\n allowOnlyCreateNew={config.allowOnlyCreateNew}\n />\n {connections.length ? (\n <BasicTablePagination\n count={total}\n rowsPerPageOptions={rowsPerPageOptions}\n rowsPerPage={rowsPerPage}\n onChangeRowsPerPage={handleRowsPerPageChange}\n page={page}\n onChangePage={handlePageChange}\n basicTableRef={basicTableRef}\n />\n ) : (\n <Typography className={styles.noData}>{i18n.text('No data found')}</Typography>\n )}\n {isLoading && <LinearLoadIndicator />}\n </div>\n </BasicView>\n );\n};\n\nexport default RelationsTableView;\n","import {memoizeWith} from 'ramda';\nimport {connect} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport RelationsTableView from './RelationsTableView';\nimport {parseRelationsConfig} from './helpers/relationsHelpers';\n\nconst mapStateToProps = (state, ownProps) => {\n const {config} = ownProps;\n\n return {\n connections: mdm.selectors.getConnectionsWithDraftsByViewId(state, config.id),\n total: mdm.selectors.getTotalByViewId(state, config.id),\n entity: mdm.selectors.getEntity(state),\n metadata: mdm.selectors.getMetadata(state),\n mode: mdm.selectors.getMode(state),\n relationToAdd: mdm.selectors.getRelationToAddByViewId(state, config.id),\n relationsToEdit: mdm.selectors.getRelationsToEditByViewId(state, config.id),\n checkIfCanAddRelations: mdm.selectors.getCheckIfCanAddRelations(state, config.content)\n };\n};\n\nconst memoizedParseRelationsConfig = memoizeWith((metadata, config) => config.id, parseRelationsConfig);\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => ({\n ...stateProps,\n ...dispatchProps,\n ...ownProps,\n config: memoizedParseRelationsConfig(stateProps.metadata, ownProps.config)\n});\n\nexport default connect(mapStateToProps, undefined, mergeProps)(RelationsTableView);\n","import MomentUtils from '@date-io/moment';\nimport React from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport RelationsTableView from './RelationsTableView';\nimport {StylesProvider, createGenerateClassName} from '@material-ui/core/styles';\n\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport {Provider} from 'react-redux';\nimport {RelationsViewConfig} from '@reltio/mdm-sdk';\nimport {identity} from 'ramda';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {Store} from 'redux';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'relTable',\n disableGlobal: true\n});\n\ntype Props = {\n config: RelationsViewConfig;\n store: Store;\n onResize?: (width: number, height: number) => void;\n className?: string;\n readOnlyMode?: boolean;\n};\n\nconst StandaloneRelationsTableView = ({config, store, onResize = identity, className, readOnlyMode}: Props) => (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n {config && <RelationsTableView config={config} className={className} readOnlyMode={readOnlyMode} />}\n <ErrorPopup />\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n);\n\nexport default StandaloneRelationsTableView;\n"],"names":["customStyles","input","currentStyles","fontSize","menuPortal","zIndex","useStyles","makeStyles","root","flex","title","paddingBottom","paddingLeft","dropDownInput","width","justifyContent","backgroundColor","borderTop","option","height","noOptionsMessage","entityType","selectedAttributes","className","onChange","disableUnderline","menuPlacement","metadata","useSelector","mdmModule","styles","prepareItems","useCallback","data","level","prevLabel","reduce","acc","item","hidden","chipLabel","label","push","value","uri","attrType","subAttributes","getAttributeTypeSubAttributes","concat","options","useMemo","attributes","classnames","Typography","variant","i18n","MultiSelect","TextFieldProps","InputProps","classes","components","DropdownIndicator","DropdownIndicatorWithIconButton","MultiValue","props","Option","isFocused","isSelected","innerProps","AttributeListItem","checked","labelInText","pipe","defaultTo","menuPortalTarget","document","body","display","paddingRight","inputNumber","minWidth","marginRight","inputUnit","periods","interval","unit","onFocus","onNumberChange","getValue","parseInt","newValue","onUnitChange","newUnit","TextField","type","inputProps","min","SimpleDropDownSelector","placeholder","capitalize","map","ErrorBoundary","React","constructor","super","this","state","error","componentDidCatch","setState","console","render","children","withMuiSkin","CreatableSelect","innerRef","selectProps","MenuItem","classNames","ref","selected","component","Checkbox","color","ExpandedValueTooltip","propTypes","PropTypes","id","key","onClick","onMouseMove","onMouseOver","tabIndex","isRequired","current","theme","top","left","undefined","fontWeight","clearIndicator","padding","spacing","margin","dropdownIndicator","creatable","getOptions","loadingIndicator","componentsProp","classesProp","stylesProp","onChangeProp","onInputChange","onInputChangeProp","reactSelectProps","SelectComponent","AsyncSelect","Select","inputValue","setInputValue","useState","multiSelectClasses","omit","inputId","multiSelectComponents","mergeClasses","indicatorSeparator","base","loadingMessage","fontFamily","labelProps","InputLabelProps","htmlFor","shrink","length","isMulti","actionMeta","action","closeMenuOnSelect","hideSelectedOptions","loadOptions","defaultProps","cacheOptions","defaultOptions","ClearIndicator","Control","DownChevron","CrossIcon","Group","GroupHeading","IndicatorsContainer","IndicatorSeparator","Input","LoadingIndicator","Menu","MenuList","MenuPortal","LoadingMessage","NoOptionsMessage","MultiValueContainer","MultiValueLabel","MultiValueRemove","Placeholder","SelectContainer","SingleValue","ValueContainer","control","valueContainer","multiValue","singleValue","menu","container","group","groupHeading","indicatorsContainer","menuList","multiValueLabel","multiValueRemove","getOptionValue","isSearchable","inputRef","style","selectedUsers","valueToOption","prepareValues","values","tenant","servicesPath","cachedRequest","useRef","pluck","getAllUsersForTenant","then","prop","users","filter","username","utils","filterUsers","ActivityTypes","getItemDataType","path","getActivityType","activity","items","firstItem","removeIgnoredItems","isImplementedItem","isValidActivityType","includes","filteredItems","reject","itemsTotal","splitActivityByType","propOr","groupBy","ifElse","stringifyDeltaValue","deltaValue","attributeTypeUri","attributePresentations","attributeType","findAttributeTypeByUri","dataTypeDefinition","getAttrDataTypeDefinition","formatValue","formatDataTypeValue","isNil","Object","entries","flatMap","attributeTypeName","deltaValues","makeAttrTypeUri","join","getActivityLabel","transition","inputRoot","dateOptionLabel","paper","localeFormat","moment","longDateFormat","open","setOpen","handleToggle","onCancel","fullWidth","DataTypes","endAdornment","menuIsOpen","readOnly","autoFocus","anchorEl","onClose","anchorOrigin","vertical","horizontal","transformOrigin","elevation","getContentAnchorEl","MenuListProps","autoFocusItem","DateRangePicker","onApply","DateRangeTypes","RequestStates","SingleAttributeContext","displayName","triggerButton","popupContent","paddingTop","maxWidth","checkboxControlRoot","marginTop","marginLeft","checkboxControlLabel","checkboxControlCheckbox","buttonRef","isOpen","setIsOpen","showInactive","toggleShowInactive","useContext","togglePopup","Button","Popover","FormControlLabel","e","target","totalCaption","lineHeight","letterSpacing","flexShrink","ovIcon","SingleAttributeHeader","caption","totalVisibleValues","showInactiveValuesMenu","searchQuery","setSearchQuery","setPage","totalNonVisibleValues","nonVisibleValues","FacetViewHeader","HideOnShrink","widthToHide","VerticalDivider","OvIcon","nonOvTotal","nonOvValues","ExpandableSearchInput","query","moreButton","marginBottom","buttonLabel","icon","divider","ovFalse","inactive","noData","palette","text","secondary","getAttributeNameFromAttributeUri","getLastUriPart","search","some","String","getPagedLocalEntity","async","entity","defaultMaxValues","Infinity","offset","findAttributeValuesByTypeUri","ovValues","isOv","getAttributeSource","slice","paging","totalOvValues","totalValues","emptyArray","SingleAttributeEditableContent","parentUri","noDataText","required","cardinality","name","dispatch","useDispatch","viewId","ViewIdContext","modifiedEntity","errors","errorMessage","getAttributePagerActiveTypeErrorMessage","mode","attributeSource","entityValuesUris","pathOr","modifiedEntityValues","modifiedEntityValuesUris","showEmptyEditors","isTempUri","emptyEditorValue","createNewAttribute","isModifiedEntityValuesEmpty","isEmptyValue","showEmpty","newValues","onAddAttributes","params","profile","param","onChangeAttribute","onDeleteAttribute","onDeactivateError","onAdd","attribute","isComplexAttribute","canCreate","checkCanCreateAttribute","commonProps","crosswalks","showNonOv","isEmptyAttributeList","CardinalityMessage","ErrorMessage","message","Add","idx","attributeValue","lazy","ownError","getAttributeOwnError","Divider","originalValue","modifiedEntityValue","find","propEq","deleted","edited","value1","value2","cleanser","is","over","lensPath","cleanAttributesWith","valueTransformer","unless","deleteEmptyComplex","identity","equals","areValuesEqual","cond","always","SingleAttributeReadableContent","flexDirection","content","position","overflow","flexGrow","pagination","SingleAttributeView","config","max","page","isLoading","hasPaging","entityUri","mdm","isViewMode","isEditableMode","pivotingAttributes","hasValues","PivotingAttributeContext","BasicView","Box","LinearLoadIndicator","renderContent","BasicTablePagination","count","rowsPerPage","rowsPerPageOptions","onChangePage","useSingleAttributeLoader","canShowHistoryDiff","attributeUri","setValues","setPaging","setIsLoading","safePromise","useSafePromise","attributeValuesRef","apiPath","entitySelector","isHistoryModeEnabled","diff","attributeTypeSource","findAttributeValues","globalFilter","loadAttributes","isReadableAttribute","isFirstLevelAttributeUri","rest","request","isDataTenantEntity","getPagedEntity","response","loadedValue","finally","useEffect","useDidUpdateEffect","partitionByOv","partition","totalProp","has","RelationsViewStateContext","button","sortControls","alignItems","sortSelectorRoot","sortSelectorMenuItem","sortOrderButton","FilterButton","sortOrder","toggleSortOrder","sortOption","changeSortOption","sortOptions","hasSortOptions","isAsc","DropDownEditor","menuItem","MenuProps","SmallIconButton","tooltipTitle","ArrowUpwardIcon","ArrowDownwardIcon","size","header","ImportDTContext","MAX","Math","pow","cursor","userSelect","badge","badgePosition","right","MultipleImportIcon","Badge","anchorOriginTopRightRectangle","badgeContent","CloudDownload","ImportFromDT","tenants","selectedTenant","onConfirmImport","onCancelConfirmation","onImportClick","dataTenants","reloadRelations","setTenants","setSelectedTenant","dtssPath","customerTenant","maxDtssImport","checkHasNonImportedConnections","importFromDT","Promise","all","hasNonImportedRelations","dataTenant","hasNonImportedConnections","modifiedTenants","importDTConnections","catch","ui","getRequestErrorMessage","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","getDataTenantEntitySecondaryLabel","getEntitySecondaryLabel","CircularProgress","colorPrimary","Tooltip","disableFocusListener","useRelationInfo","connection","relation","getEntityType","entityLabel","getLabel","preparedUri","getEntityUriForLink","relationLabel","getRelationTypeLabelFromMetadata","relationType","SuggestedButtons","acceptRelation","ignoreRelation","alignSelf","row","minHeight","rowInactive","background","inactiveBackground","entityAvatar","entityLabelContainer","textDecoration","primary","main","editButtonsContent","editButtons","removed","editedLabel","fontStyle","EditableRelationItem","memo","showControls","onRemoveRelation","onEditRelation","onAcceptRelation","onIgnoreRelation","renderRelationArrowButton","checkRemoved","checkEdited","ignored","checkIgnored","isActive","isActiveObject","canRemove","canUpdate","Mode","isRemoved","relationTypeMetadata","getRelationType","checkMetadataForDelete","checkMetadataForUpdate","checkRelationPermission","handleRemoveRelation","relationUri","handleEditRelation","handleAcceptRelation","handleIgnoreRelation","suggested","EditIcon","DeleteIcon","suggustedButtonsContent","disabled","captionText","EntityTypeIcon","EntityUriLink","getFirstRelationTypeObject","inRelations","outRelations","prepareRelation","direction","relations","wrapInArrayIfNeeded","Directions","arrowIcon","RelationArrowButton","showSecondLevel","parentEntityUri","contentSecondLevel","checkNew","ArrowDropDown","ArrowRight","secondLevelContent","SecondLevelWrapper","connections","toggleShowSecondLevel","loadRelations","loading","relationActivityFilter","setShowSecondLevel","setLoading","activityFilter","requestConfig","returnObjects","returnDates","activeness","ActivityFilter","getRelationsForEntity","show","useSecondLevelConnections","entitiesMap","getEntitiesMapForConnections","EntitiesMapContext","RelationsContent","relationToAdd","relationsToEdit","checkIfCanAddRelations","onAddRelation","newConnection","createNewConnectionWithDefaultRelationType","connectionToRemove","defaultRelationTypeObject","connectionWithDefaultRelationType","evolve","object","relationDirection","newConnections","currentConnections","canAddRelations","isEmptyRelationList","getRelationEditableContent","openedRelation","allowOnlyCreateNew","itemKey","RelationEditor","shouldShowAddRelationButton","shouldShowRelationEditorToAdd","attributesList","RelationAttributes","currentEntityUri","firstLevelRelationAttrTypes","getRelationAttributesList","attributeListEntity","getActivenessAttributes","showAttributesList","getAttributesListForReadMode","objectIds","getAttributeValuesUris","getCommentsCount","CollaborationContext","isEmpty","additionalRelatedObjectUris","createRelatedObjectUris","CollaborationObjectTypes","RelatedObjectUrisContext","attrTypes","ShowDetailsButton","onToggle","tooltipPlacement","InfoIconSelected","InfoIcon","wordBreak","showDetails","suggestedWrapper","commentsContainer","additionalButtonsWrapper","labelWrapper","RelationItem","isSuggested","setShowDetails","relatedObjectUris","COMMENTS_CONTAINER_VISIBILITY_AREA","CommentsContainer","getConnectionRelationUriForLink","objectType","allowOnlyOneComment","getCountOfLikes","ratings","rating","getCountOfDislikes","calcWidthOfLikesScale","calcWidthOfDislikesScale","wrapper","averageRating","scale","likesScale","dislikesScale","counts","likesCount","Ratings","mean","calcAverageRating","toFixed","ThumbUp","ThumbDown","textTransform","likeButton","RatingsButtons","onAgree","onDisagree","ratingOfCurrentUser","user","endIcon","buttonContent","comment","entityTypeIcon","showDetailsButton","relationAttributes","RelationComplexItem","rateRelation","RelationsList","mainEnityUri","isComplex","relationTypeObject","ignoreSuggestedRelation","relatedEntityUri","startDate","endDate","isInDirection","startEntityUri","endEntityUri","createRelation","useSuggestedRelations","getRelationshipsObjectIdsForCollaboration","list","selectors","getEntity","getMode","RelationsView","getConnectionsWithDraftsByViewId","getTotalByViewId","sorting","order","field","queryClause","Maybe","filterValueToQueryStringWithQuotes","queryString","orSome","FilterBuilder","addClause","build","buildRelationsFilter","reload","useRelationsLoader","importDTContextValue","pick","Provider","TableAttributeContext","CHANGE_SEARCH_QUERY","actions","basicTableViewState","createStandardAction","reducer","payload","removedStyle","tableContainer","rowCell","transform","headCell","pointerEvents","withFilterAtBottom","DefaultHeadCellRenderer","getColumnsDataFromAttributeNode","attrNode","parents","attributeUriToSearchUri","childNode","getAttrPathFromColumnId","split","getNestedPathByColumnId","columnId","isAttributeSearchUri","attrPath","getBasicTableColumnsData","columnData","sortable","resizable","nestedPath","headCellRenderer","HeadCellRenderer","rowCellValueRenderer","DefaultCellValueRenderer","onChangeSearchQuery","filtersEnabled","onToggleFilters","columnsData","selectedColumns","onChangeColumns","enabled","ColumnsSettings","withTableContext","deletedUris","rowValue","Boolean","cell","CellValueRenderer","isSorted","otherProps","index","onEdit","onRemove","onSort","filters","onFilter","tableRowsData","assoc","getOvAttributeValuesByPath","getAttributeValues","getRowValueByColumnId","getBasicTableRowsData","tableColumnsData","checkIsEditableMode","renderRowCell","hoverRowIndex","setHoverRowIndex","canDelete","useConfigPermissions","hideRightContent","checkCanDeleteAttribute","isReltioCrosswalk","canEdit","checkCanEditAttribute","checkCanEdit","handleEditAttribute","handleRemoveAttribute","hoveredRowRightContent","context","BasicTable","autosizing","maxHeight","rowsData","hoverStateEnabled","defaultColumnWidth","defaultColumnMinWidth","headRowHeight","resizeDebounceDelay","onRowHover","hoveredRowRightContentWrapper","hoveredRowRightContentContainer","actionButtons","AttributeEditing","hasChanges","expanded","addButton","editor","TableAttributeView","visibleColumns","showTable","allColumnsData","checkHasChanges","onStartEditing","modifiedValues","editingValues","newAttributeUri","setNewAttributeUri","originalValues","setOriginalValues","newAttribute","createDefaultValues","attributeTypes","prev","editingValueOriginal","attributeItem","without","original","both","not","useEditableAttribute","preparedValues","hasConfigToCreate","visibleColumnsData","nodeCounter","generateId","processResponse","fakeRoot","nodeId","parentPaths","i","nextRoot","j","nextParent","entities","isRoot","node","rootIndex","link","avatar","treeContainer","tree","buttonsContainer","ConfigContext","onImageLoadFail","src","DEFAULT_ICON","Node","absoluteImagePath","uiPath","entityLink","getEntityLink","onTitleClick","entityTypeGraphIcon","getPropWithInheritance","getAbsoluteImageUrl","Avatar","onError","Link","to","getNodeKey","lineBlock","lineChildren","verticalLine","horizontalLineRight","textAlign","boxSizing","whiteSpace","nodeContent","bottom","rowContents","borderLeft","verticalAlign","buttonWrapper","collapsedButton","expandedButton","borderRight","rowTitle","nodeContentRenderer","scaffoldBlockPxWidth","toggleChildrenVisibility","treeIndex","nodeTitle","showToggleChildrenButton","treeNodeRenderer","lowerSiblingCounts","scaffoldBlockCount","scaffold","forEach","lowerSiblingCount","shift","scaffoldWidth","nodeStyle","rowHeight","slideRegionSize","_extends","assign","arguments","source","prototype","hasOwnProperty","call","apply","viewBox","version","xmlns","stroke","strokeWidth","fill","fillRule","fillOpacity","d","onGraphOpen","ShowGraphIcon","bodyWrapper","CustomView","basicViewRef","dialogRef","showModal","setShowModal","defaultTooltip","html","visible","updatedTooltip","popup","useAPI","innerHTML","Array","from","childNodes","child","appendChild","Dialog","dragHandleContainer","dragHandleVisibilityArea","visibility","dragHandle","dragIcon","Component","WithDragHandle","DragIndicator","WithErrorBoundary","EmptyState","LogoRenderer","EMPTY_STATE_ICONS","secondaryText","EMPTY_STATE_VARIANTS","stubView","fullHeight","boxShadow","borderRadius","filterWrongLat","gt","lt","fullscreenBtn","ImageLineCaption","totalImages","photoWord","ImageAttributeViewEditableContent","requestNextPageOfAttributeValues","attributeValues","imageSize","IMAGE_SIZE","imageMargin","imageWidth","imageHeight","matchesContainer","footer","ActionButtons","match","onStartRequest","onFinishRequest","canMerge","canMark","getActionPermissionForMatch","matchRules","actionButtonProps","ActionButtonMode","onMergeFinish","MergeButton","NotMatchButton","MatchCard","ProfileMatchCard","createObjectIdForPM","matchEntityUri","DEFAULT_OPTIONS","showTransitiveMatches","showInactiveEntities","DEFAULT_SORTING","Order","ComponentStates","wrapView","withErrorBoundary","withDragHandle","WrappedStubView","WrappedProfileAttributesView","AttributesView","excludeUris","includeUris","attributesCount","pinnedAttributes","WrappedProfileSingleAttributeView","singleAttribute","setShowInactive","useSingleAttribute","WrappedProfileTableAttributeView","tableAttribute","getAttributeTypesTree","chain","flatAttributeTreeNode","uniqBy","getColumnsData","initialState","useReducer","requestFilters","mdmFilters","columnFilter","columnFilterToMdmFilter","buildMDMFilters","changePage","toggleSort","changeFilter","toggleFilters","changeColumns","useActions","useTableAttribute","WrappedProfileRelationsView","relationsState","Number","setSortOrder","setSortOption","useRelationsState","WrappedCustomView","WrappedHierarchyPathView","treeData","setTreeData","graphUri","forest","newTrees","updateTreesWithNewEntity","updatedTime","getPathsTree","warn","useLoadPaths","graph","openGraph","graphType","generateNodeProps","rowInfo","ReactSortableTree","isVirtualized","canDrag","WrappedProfilePotentialMatchesView","turnOnDisableSpinner","turnOffDisableSpinner","matches","loadMatches","useMatchesLoader","onStartLoading","onFinishLoading","onFinishMatchAction","openPotentialMatchPerspective","mdmModuleUi","perspectiveId","getPotentialMatchesObjectIdsForCollaboration","getEntityUriFromMatchObject","showSeeAll","Loading","NoData","Loaded","underline","WrappedHierarchyTreeView","importedModule","default","HierarchyTreeView","WrappedRelationshipsTableView","RelationshipsTableView","WrappedEntityMapView","isFullscreen","onToggleFullscreen","mapKey","markers","setMarkers","resolve","useMarkers","loadingElement","defaultCenter","lat","lng","mapOptions","mapTypeControl","FullscreenExitIcon","FullscreenIcon","ReltioMap","defaultZoom","mapContainerClassName","WrappedImageAttributeView","entityValues","ImageAttributesLine","ViewsFactory","ViewTypes","ProfileViewTypes","getComponentBy","propName","store","HierarchyTree","HierarchyPaths","RelationsTable","Relations","Attributes","SingleAttribute","AttributeTable","Map","Custom","ImageAttribute","PotentialMatches","getComponent","Fallback","ViewComponent","isAutosize","Suspense","fallback","basicView","fixedSizeContainer","omittingProps","ProfileLayoutItem","layoutItemConfig","views","ResizeComponent","AutosizeComponent","ReactReduxContext","isCustomView","class","platform","CustomScriptPlatform","reltioClass","_","getViewTypeByClass","ProfileLayout","layout","layoutOptions","onLayoutChanged","ReltioGridLayout","LayoutItem","draggableHandle","closeIcon","snackbar","flexWrap","Notification","notification","autoCloseInterval","autoHideDuration","setAction","setShow","closeSnackbar","_e","reason","cancelAction","onConfirm","applyAction","needConfirmation","CloseIcon","Portal","Snackbar","confirmationText","confirmationDescription","Notifications","notifications","n","xmlnsXlink","xlinkHref","mask","editingButtons","searchResults","comments","SuggestIcon","SvgIcon","CopyIcon","filterGroupByPermissions","isTempEntity","isWorkflowEnabled","canStartProcessInstanceSearchQuery","permission","isSuggestMode","checkMetadataPermission","PerspectiveProfileBand","profileBandConfig","profileOperation","entityTypeUri","isOperationSaving","Operation","isDisabledButtons","openCloneConfirmationDialog","setOpenCloneConfirmationDialog","onCloneDiscard","onClone","cloneAction","cloneActionProp","relationTypes","isRelationSuitableForEntityType","isRelationWithEntityType","when","complement","either","modifiedRelationTypes","isReference","getRelationTypeUriFromAttrType","T","relationshipTypesToCopy","useCloneAction","OPTIONS_GROUP","ModeTypes","description","CreateIcon","VisibilityIcon","BUTTONS_GROUP","window","confirm","shouldShowSelect","MetadataPermissions","hasOnlyReadPermission","accessibleOptionsGroup","accessibleButtonsGroup","handleChange","handleSave","ProfileBand","mr","ProfileBandHistory","ProfileBandNavigation","ModeSwitcherSelect","optionsGroup","buttonsGroup","WorkflowButton","WorkflowTasksContext","Inbox","showMoreLink","showMoreIcon","CollaborationList","getComments","pageToken","useCommentsEntitiesMap","objectId","commentId","CollaborationItem","KeyboardArrowDown","WorkflowList","tasks","task","WorkflowTaskCard","taskId","CollaborationButton","commentsMap","calcTotalCommentItems","CollaborationIcon","SidePanelEmptyState","itemWrapper","DBConnectorsList","dBConnectorSideViews","sideView","ActivePanel","getSecondTitle","RightSidePanel","isWorkflowSideViewEnabled","isCollaborationSideViewEnabled","isDBConnectorSideViewEnabled","isCollaborationEnabled","historyEvent","workflowTasksContext","collaborationContext","active","setActive","toggleActive","newId","resetActive","isHistoryTabActive","History","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","historyFilter","onApplyFilter","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","enabledWorkflowButton","enabledCollaborationButton","collaborationTotal","elements","Workflow","headerProps","mainTitle","secondTitle","rightContent","AddWorkflowButton","Collaboration","HistoryIcon","HistoryView","contributorsUris","HistoryPanelEmptyState","HistoryHeader","DBConnector","ConnectorsIcon","visibleElements","SidePanel","SidePanelContentHeader","SideButtonsPanel","buttonsProps","onButtonClick","activeIndexId","accordionSummaryHeight","defaultBorderStyle","accordion","borderBottom","accordionExpanded","accordionSummary","accordionSummaryHeading","typography","pxToRem","fontWeightRegular","accordionSummaryExpanded","accordionSummaryContent","accordionDetails","errorWrapper","errorTitle","goToIcon","errorsAccordion","borderColor","errorsAccordionDetails","warningsAccordion","warningsAccordionDetails","errorIcon","warningIcon","ErrorsPanel","panels","expandedPanelId","ErrorComponent","accordionClassName","accordionDetailsClassName","Accordion","square","AccordionSummary","expandIcon","ExpandMore","AccordionDetails","clipRule","clearError","Error","displayedMessage","ErrorType","ErrorSource","getDisplayedErrorMessage","displayedErrorPath","errorPath","AttributeValuePathItemType","getDisplayedErrorPath","highlightError","ScrollToErrorContext","showLink","HyperlinkIcon","ProfileErrorsPanel","cachedAllErrors","allErrors","cacheForAllErrors","errors1","errors2","areErrorsEqual","useCachedErrors","warnings","isCriticalError","setExpandedPanelId","number","panelId","event","isExpanded","perspectiveView","overflowX","overflowY","scrollWrapper","emptyState","profileWrapper","profileContainer","ProfilePerspectiveView","saveState","getSavedState","getSavedStateAndFix","scrollWrapperRef","debouncedSaveState","debounce","nestedRoute","savedStateKey","isLoaded","savedState","updateSavedState","useSavedStateForEntityType","setLayout","setViews","configHash","hash","isHistoryActive","getProfileObjectIdsForCollaboration","collaboration","useCollaboration","emptyCollaboration","useUsers","workflowTasks","useWorkflowTasks","workflow","useHistorySlice","historyDiff","useHistoryDiff","keywordValue","isConfigChanged","fixedViews","fixedLayout","fixNonUniqViewsIds","sidePanelViews","scrollTop","isValidateReadMode","isDTEntity","profileViews","hasProfileViews","validate","needDispatch","useProfileValidation","handleLayoutChange","boundariesElement","popupBoundariesValue","element","priority","ProfilePerspectiveViewContext","UsersContext","SearchValueContext","profileBand","PopupBoundariesContext","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","onResize","qxSandboxApi","getSavedStatePromisified","promisifyCallback","SnackbarRenderer","showSnackbarMessage","useSnackbar","processedConfig","convertOldProfileConfig","SnackbarContext","S","SandboxAPIContext","StylesProvider","MuiPickersUtilsProvider","MomentUtils","handleHeight","floor","ErrorPopup","showErrorFromStore","titleContainer","textOverflow","totalNumber","TagListHeader","switchToProfile","ArrowForwardIosRounded","Spacer","toolbar","TagProfileBand","Toolbar","tagsContainer","tagsView","listContainer","entitiesList","ROWS_PER_PAGE_OPTIONS","TagPerspectiveView","tag","setRowsPerPage","globalSearchRequestOptions","safeRequestTotalPromise","safeRequestEntitiesPromise","setTotal","setEntities","requestEntities","requestTotal","getDataTenantFromEntityUri","fieldName","isDT","getEntities","requestOptions","select","getFilteredEntitiesFromDataTenant","enrichEntityWithDataTenant","getFilteredEntities","getTotalFromDataTenant","getTotals","json","useTagsProvider","useTag","refScrollBlock","hasPagination","ProfilesList","onChangeRowsPerPage","AddRelationButton","inactiveStyle","entityCell","RowCellRenderer","EntityProfileRenderer","EntityTypeType","getRelationTypes","rel","uniq","startsWith","emptyData","EditButtons","IconButton","Edit","Delete","basicTableRef","getRelationAttributeValues","isNew","handleOnRowHover","rowIndex","ColumnsDataType","ConnectionType","MetadataType","ColumnFilterType","SortingType","onShowInactiveChange","MoreVertIcon","RelationsTableHeader","onChangeShowInactive","CHANGE_SHOW_INACTIVE","changeShowInactive","DEFAULT_COLUMNS_DATA","hideable","ActivenessAttrTypes","getColumnIdFromAttrUri","getColumnsDataFromRelationAttributes","attr","getReadableAttributesList","getUri","containsUri","parseUris","curry","parseUri","shouldSkipDescendantUris","hasValidMetadata","nextAcc","keys","descUri","extendsTypeURI","deriveEntityTypesFromRelations","deriveEntitiesFromRelationsMetadata","relationTypeUri","entityTypes","indexByUri","indexBy","parseRelationsConfigContent","parseEntryUris","entry","nextEntry","addArea","DEFAULT_COLUMNS_TO_SHOW","DEFAULT_SORT_FIELD","memoizedParseRelationsConfig","memoizeWith","connect","ownProps","stateProps","dispatchProps","modeProp","reduxDispatch","readOnlyMode","sortColumn","filtersClause","buildColumnsFilter","getRowsPerPageOptions","defaultRowsPerPage","sort","subtract","handleRowsPerPageChange","handlePageChange","changeRowsPerPage","openedRelations","canEditRelations","canRemoveRelations"],"sourceRoot":""}