@reltio/profile 1.4.1585 → 1.4.1586-mui5

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 (335) hide show
  1. package/.DS_Store +0 -0
  2. package/index.ts +4 -0
  3. package/package.json +40 -23
  4. package/public/bundle.js +205 -0
  5. package/{bundle.js.LICENSE.txt → public/bundle.js.LICENSE.txt} +44 -16
  6. package/public/package.json +24 -0
  7. package/scripts/build/index.js +20 -0
  8. package/src/.DS_Store +0 -0
  9. package/src/components/.DS_Store +0 -0
  10. package/src/components/BackgroundProcessIndicator/BackgroundProcessIndicator.tsx +101 -0
  11. package/src/components/BackgroundProcessIndicator/styles.ts +50 -0
  12. package/src/components/DCRReviewPerspectiveView/DCRReviewPerspectiveView.tsx +77 -0
  13. package/src/components/DCRReviewPerspectiveView/__tests__/DCRReviewPerspectiveView.test.tsx +156 -0
  14. package/src/components/DCRReviewPerspectiveView/components/DCRProfileBand/DCRProfileBand.tsx +22 -0
  15. package/src/components/DCRReviewPerspectiveView/components/DCRProfileBand/__tests__/DCRProfileBand.test.tsx +92 -0
  16. package/src/components/DCRReviewPerspectiveView/components/DCRProfileBand/styles.ts +11 -0
  17. package/src/components/DCRReviewPerspectiveView/hooks/useWorkflowTasks.ts +31 -0
  18. package/src/components/DCRReviewPerspectiveView/index.ts +1 -0
  19. package/src/components/DCRReviewPerspectiveView/styles.ts +33 -0
  20. package/src/components/EntityMapView/EntityMapView.tsx +64 -0
  21. package/src/components/EntityMapView/__tests__/EntityMapView.spec.js +121 -0
  22. package/src/components/EntityMapView/styles.ts +20 -0
  23. package/src/components/EntityMapView/useMarkers.ts +27 -0
  24. package/src/components/HierarchyPathsView/ConfigContext.ts +4 -0
  25. package/src/components/HierarchyPathsView/HierarchyPathsHeader.tsx +32 -0
  26. package/src/components/HierarchyPathsView/HierarchyPathsView.tsx +90 -0
  27. package/src/components/HierarchyPathsView/Node.tsx +62 -0
  28. package/src/components/HierarchyPathsView/__tests__/HierarchyPathsView.test.tsx +547 -0
  29. package/src/components/HierarchyPathsView/__tests__/IntegrationHierarchyPathsView.test.tsx +47 -0
  30. package/src/components/HierarchyPathsView/__tests__/Node.test.tsx +152 -0
  31. package/src/components/HierarchyPathsView/__tests__/data/metadata.data.ts +33 -0
  32. package/src/components/HierarchyPathsView/__tests__/data/store.data.ts +37 -0
  33. package/src/components/HierarchyPathsView/__tests__/data/treePaths.data.ts +63 -0
  34. package/src/components/HierarchyPathsView/defaultTypeIcon.png +0 -0
  35. package/src/components/HierarchyPathsView/helpers.ts +3 -0
  36. package/src/components/HierarchyPathsView/hooks/useDynamicNodesHeights.ts +33 -0
  37. package/src/components/HierarchyPathsView/hooks/useLoadPaths.ts +76 -0
  38. package/src/components/HierarchyPathsView/icons/ShowGraph.svg +10 -0
  39. package/src/components/HierarchyPathsView/index.ts +1 -0
  40. package/src/components/HierarchyPathsView/styles.ts +60 -0
  41. package/src/components/HierarchyPathsView/theme/__tests__/node-content-renderer.test.tsx +78 -0
  42. package/src/components/HierarchyPathsView/theme/__tests__/tree-node-data-renderer.test.tsx +72 -0
  43. package/src/components/HierarchyPathsView/theme/index.ts +8 -0
  44. package/src/components/HierarchyPathsView/theme/node-content-renderer.tsx +84 -0
  45. package/src/components/HierarchyPathsView/theme/styles.ts +102 -0
  46. package/src/components/HierarchyPathsView/theme/tree-node-data-renderer.tsx +70 -0
  47. package/src/components/HierarchyPathsView/types.ts +17 -0
  48. package/src/components/ImageAttributeView/ImageAttributeView.tsx +87 -0
  49. package/src/components/ImageAttributeView/ImageAttributeViewEditableContent/ImageAttributeViewEditableContent.tsx +52 -0
  50. package/src/components/ImageAttributeView/ImageAttributeViewEditableContent/__tests__/ImageAttributeViewEditableContent.test.tsx +136 -0
  51. package/src/components/ImageAttributeView/ImageLineCaption/ImageLineCaption.tsx +18 -0
  52. package/src/components/ImageAttributeView/ImageLineCaption/__tests__/ImageLineCaption.test.tsx +15 -0
  53. package/src/components/ImageAttributeView/ImageLineCaption/styles.ts +10 -0
  54. package/src/components/ImageAttributeView/__tests__/ImageAttributeView.test.tsx +151 -0
  55. package/src/components/ImageAttributeView/__tests__/IntegrationImageAttributeView.test.tsx +36 -0
  56. package/src/components/ImageAttributeView/__tests__/data/store.data.ts +22 -0
  57. package/src/components/ImageAttributeView/styles.ts +13 -0
  58. package/src/components/Notifications/Notification.tsx +98 -0
  59. package/src/components/Notifications/Notifications.tsx +17 -0
  60. package/src/components/Notifications/__tests__/Notification.spec.tsx +230 -0
  61. package/src/components/Notifications/__tests__/Notifications.spec.tsx +37 -0
  62. package/src/components/Notifications/index.ts +1 -0
  63. package/src/components/Notifications/styles.ts +17 -0
  64. package/src/components/Notifications/types.ts +21 -0
  65. package/src/components/PerspectiveProfileBand/PerspectiveProfileBand.tsx +304 -0
  66. package/src/components/PerspectiveProfileBand/__tests__/PerspectiveProfileBand.specs.tsx +526 -0
  67. package/src/components/PerspectiveProfileBand/__tests__/data/collaboration.data.ts +23 -0
  68. package/src/components/PerspectiveProfileBand/__tests__/data/store.data.ts +162 -0
  69. package/src/components/PerspectiveProfileBand/copy.svg +14 -0
  70. package/src/components/PerspectiveProfileBand/hooks/useCloneAction.ts +94 -0
  71. package/src/components/PerspectiveProfileBand/index.ts +1 -0
  72. package/src/components/PerspectiveProfileBand/styles.ts +27 -0
  73. package/src/components/PerspectiveProfileBand/suggest.svg +16 -0
  74. package/src/components/ProfileAttributesView/ProfileAttributesView.tsx +21 -0
  75. package/src/components/ProfileAttributesView/__tests__/ProfileAttributesView.test.tsx +70 -0
  76. package/src/components/ProfileErrorsPanel/ProfileErrorsPanel.tsx +70 -0
  77. package/src/components/ProfileErrorsPanel/__tests__/ProfileErrorsPanel.specs.tsx +140 -0
  78. package/src/components/ProfileErrorsPanel/components/Error.tsx +50 -0
  79. package/src/components/ProfileErrorsPanel/components/ErrorsPanel.tsx +65 -0
  80. package/src/components/ProfileErrorsPanel/components/__tests__/Error.specs.tsx +264 -0
  81. package/src/components/ProfileErrorsPanel/components/__tests__/ErrorsPanel.specs.tsx +93 -0
  82. package/src/components/ProfileErrorsPanel/helpers.ts +45 -0
  83. package/src/components/ProfileErrorsPanel/icons/hyperlink.svg +4 -0
  84. package/src/components/ProfileErrorsPanel/index.ts +1 -0
  85. package/src/components/ProfileErrorsPanel/styles.ts +100 -0
  86. package/src/components/ProfileErrorsPanel/useCachedErrors.ts +11 -0
  87. package/src/components/ProfileLayout/ProfileLayout.tsx +56 -0
  88. package/src/components/ProfileLayout/__tests__/ProfileLayout.specs.tsx +56 -0
  89. package/src/components/ProfileLayout/index.ts +1 -0
  90. package/src/components/ProfileLayout/styles.ts +19 -0
  91. package/src/components/ProfileLayoutItem/ProfileLayoutItem.tsx +89 -0
  92. package/src/components/ProfileLayoutItem/__tests__/ProfileLayoutItem.test.tsx +165 -0
  93. package/src/components/ProfileLayoutItem/__tests__/data/store.data.ts +29 -0
  94. package/src/components/ProfileLayoutItem/index.ts +1 -0
  95. package/src/components/ProfileLayoutItem/styles.ts +13 -0
  96. package/src/components/ProfilePerspectiveResizablePanes/ProfilePerspectiveResizablePanes.tsx +34 -0
  97. package/src/components/ProfilePerspectiveResizablePanes/styles.ts +9 -0
  98. package/src/components/ProfilePerspectiveView/ProfilePerspectiveView.tsx +193 -0
  99. package/src/components/ProfilePerspectiveView/__tests__/IntegrationProfilePerspective.test.tsx +417 -0
  100. package/src/components/ProfilePerspectiveView/__tests__/ProfilePerspectiveView.specs.tsx +1503 -0
  101. package/src/components/ProfilePerspectiveView/__tests__/data/entities.data.ts +19 -0
  102. package/src/components/ProfilePerspectiveView/__tests__/data/entity.data.ts +25 -0
  103. package/src/components/ProfilePerspectiveView/__tests__/data/metadata.data.ts +33 -0
  104. package/src/components/ProfilePerspectiveView/__tests__/data/profile.data.ts +22 -0
  105. package/src/components/ProfilePerspectiveView/__tests__/data/store.data.ts +51 -0
  106. package/src/components/ProfilePerspectiveView/hooks/data/backgroundUpdateDalay.ts +2 -0
  107. package/src/components/ProfilePerspectiveView/hooks/useBackgroundProcessIndicator.ts +121 -0
  108. package/src/components/ProfilePerspectiveView/hooks/useProfileLayout.ts +101 -0
  109. package/src/components/ProfilePerspectiveView/hooks/useProfileRightSidePanelElements.tsx +167 -0
  110. package/src/components/ProfilePerspectiveView/hooks/useWorkflowTasks.ts +15 -0
  111. package/src/components/ProfilePerspectiveView/index.ts +1 -0
  112. package/src/components/ProfilePerspectiveView/styles.ts +38 -0
  113. package/src/components/ProfilePotentialMatchesView/ActionButtons.tsx +39 -0
  114. package/src/components/ProfilePotentialMatchesView/MatchCard.tsx +53 -0
  115. package/src/components/ProfilePotentialMatchesView/ProfilePotentialMatchesView.tsx +137 -0
  116. package/src/components/ProfilePotentialMatchesView/__tests__/ActionButtons.specs.tsx +89 -0
  117. package/src/components/ProfilePotentialMatchesView/__tests__/MatchCard.specs.tsx +62 -0
  118. package/src/components/ProfilePotentialMatchesView/__tests__/ProfilePotentialMatchesView.specs.tsx +267 -0
  119. package/src/components/ProfilePotentialMatchesView/__tests__/commonData.ts +91 -0
  120. package/src/components/ProfilePotentialMatchesView/styles.ts +30 -0
  121. package/src/components/ProfileRelationsView/ProfileRelationsView.tsx +24 -0
  122. package/src/components/ProfileRelationsView/__tests__/ProfileRelationsView.test.tsx +112 -0
  123. package/src/components/ProfileRelationsView/components/EditableRelationItem/EditableRelationItem.tsx +133 -0
  124. package/src/components/ProfileRelationsView/components/EditableRelationItem/__tests__/EditableRelationItem.specs.tsx +222 -0
  125. package/src/components/ProfileRelationsView/components/EditableRelationItem/styles.ts +59 -0
  126. package/src/components/ProfileRelationsView/components/RelationArrowButton/RelationArrowButton.tsx +29 -0
  127. package/src/components/ProfileRelationsView/components/RelationArrowButton/__tests__/RelationArrowButton.specs.tsx +99 -0
  128. package/src/components/ProfileRelationsView/components/RelationArrowButton/styles.ts +8 -0
  129. package/src/components/ProfileRelationsView/components/RelationTooltip/RelationTooltip.tsx +83 -0
  130. package/src/components/ProfileRelationsView/components/RelationTooltip/__tests__/RelationTooltip.test.tsx +155 -0
  131. package/src/components/ProfileRelationsView/components/RelationTooltip/styles.ts +27 -0
  132. package/src/components/ProfileRelationsView/components/RelationsContent/RelationsContent.tsx +62 -0
  133. package/src/components/ProfileRelationsView/components/RelationsContent/__tests__/RelationsContent.specs.tsx +148 -0
  134. package/src/components/ProfileRelationsView/components/RelationsContent/styles.ts +15 -0
  135. package/src/components/ProfileRelationsView/components/RelationsEditableContent/RelationsEditableContent.tsx +153 -0
  136. package/src/components/ProfileRelationsView/components/RelationsEditableContent/__tests__/RelationsEditableContent.specs.tsx +367 -0
  137. package/src/components/ProfileRelationsView/components/RelationsEditableContent/styles.ts +28 -0
  138. package/src/components/ProfileRelationsView/components/RelationsHeader/FilterButton/FilterButton.tsx +113 -0
  139. package/src/components/ProfileRelationsView/components/RelationsHeader/FilterButton/styles.ts +43 -0
  140. package/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/ImportFromDT.tsx +65 -0
  141. package/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/MultipleImportIcon.tsx +23 -0
  142. package/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/__tests__/ImportFromDT.test.tsx +500 -0
  143. package/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/__tests__/MultipleImportIcon.test.tsx +20 -0
  144. package/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/hooks/useImportFromDTLoader.ts +84 -0
  145. package/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/styles.ts +37 -0
  146. package/src/components/ProfileRelationsView/components/RelationsHeader/RelationsHeader.tsx +39 -0
  147. package/src/components/ProfileRelationsView/components/RelationsHeader/__tests__/RelationsHeader.test.tsx +82 -0
  148. package/src/components/ProfileRelationsView/components/RelationsHeader/styles.ts +18 -0
  149. package/src/components/ProfileRelationsView/components/RelationsList/Ratings/Ratings.tsx +60 -0
  150. package/src/components/ProfileRelationsView/components/RelationsList/Ratings/__tests__/Ratings.test.tsx +64 -0
  151. package/src/components/ProfileRelationsView/components/RelationsList/Ratings/styles.ts +48 -0
  152. package/src/components/ProfileRelationsView/components/RelationsList/RatingsButtons/RatingsButtons.tsx +74 -0
  153. package/src/components/ProfileRelationsView/components/RelationsList/RatingsButtons/__tests__/RatingsButtons.test.tsx +72 -0
  154. package/src/components/ProfileRelationsView/components/RelationsList/RatingsButtons/styles.ts +20 -0
  155. package/src/components/ProfileRelationsView/components/RelationsList/RatingsPopup/RatingsPopup.tsx +109 -0
  156. package/src/components/ProfileRelationsView/components/RelationsList/RatingsPopup/__tests__/RatingsPopup.test.tsx +106 -0
  157. package/src/components/ProfileRelationsView/components/RelationsList/RatingsPopup/styles.ts +133 -0
  158. package/src/components/ProfileRelationsView/components/RelationsList/RelationAttributes/RelationAttributes.tsx +81 -0
  159. package/src/components/ProfileRelationsView/components/RelationsList/RelationAttributes/__tests__/RelationAttributes.test.tsx +218 -0
  160. package/src/components/ProfileRelationsView/components/RelationsList/RelationAttributes/styles.ts +12 -0
  161. package/src/components/ProfileRelationsView/components/RelationsList/RelationCompexItem/RelationComplexItem.tsx +129 -0
  162. package/src/components/ProfileRelationsView/components/RelationsList/RelationCompexItem/__tests__/RelationComplexItem.test.tsx +303 -0
  163. package/src/components/ProfileRelationsView/components/RelationsList/RelationCompexItem/styles.ts +51 -0
  164. package/src/components/ProfileRelationsView/components/RelationsList/RelationItem/RelationItem.tsx +103 -0
  165. package/src/components/ProfileRelationsView/components/RelationsList/RelationItem/__tests__/RelationItem.test.tsx +222 -0
  166. package/src/components/ProfileRelationsView/components/RelationsList/RelationItem/styles.ts +72 -0
  167. package/src/components/ProfileRelationsView/components/RelationsList/RelationsList.tsx +69 -0
  168. package/src/components/ProfileRelationsView/components/RelationsList/ShowDetailsButton/ShowDetailsButton.tsx +28 -0
  169. package/src/components/ProfileRelationsView/components/RelationsList/ShowDetailsButton/__tests__/ShowDetailsButton.test.tsx +33 -0
  170. package/src/components/ProfileRelationsView/components/RelationsList/__tests__/RelationsList.test.tsx +143 -0
  171. package/src/components/ProfileRelationsView/components/RelationsView/RelationsView.tsx +108 -0
  172. package/src/components/ProfileRelationsView/components/RelationsView/__tests__/RelationsView.test.tsx +183 -0
  173. package/src/components/ProfileRelationsView/components/RelationsView/index.ts +1 -0
  174. package/src/components/ProfileRelationsView/components/RelationsView/styles.ts +22 -0
  175. package/src/components/ProfileRelationsView/components/SecondLevelWrapper/SecondLevelWrapper.tsx +66 -0
  176. package/src/components/ProfileRelationsView/components/SecondLevelWrapper/__tests__/SecondLevelWrapper.test.tsx +234 -0
  177. package/src/components/ProfileRelationsView/components/SecondLevelWrapper/styles.ts +12 -0
  178. package/src/components/ProfileRelationsView/components/SuggestedButtons/SuggestedButtons.tsx +23 -0
  179. package/src/components/ProfileRelationsView/components/SuggestedButtons/__tests__/SuggestedButtons.test.tsx +33 -0
  180. package/src/components/ProfileRelationsView/components/SuggestedButtons/styles.ts +7 -0
  181. package/src/components/ProfileRelationsView/contexts/ImportDTContext.ts +7 -0
  182. package/src/components/ProfileRelationsView/contexts/RelationsViewStateContext.ts +6 -0
  183. package/src/components/ProfileRelationsView/helpers/__tests__/filters.test.tsx +10 -0
  184. package/src/components/ProfileRelationsView/helpers/__tests__/ratings.test.ts +92 -0
  185. package/src/components/ProfileRelationsView/helpers/__tests__/relation.test.tsx +27 -0
  186. package/src/components/ProfileRelationsView/helpers/filters.ts +17 -0
  187. package/src/components/ProfileRelationsView/helpers/permissions.ts +17 -0
  188. package/src/components/ProfileRelationsView/helpers/ratings.ts +35 -0
  189. package/src/components/ProfileRelationsView/helpers/relation.ts +15 -0
  190. package/src/components/ProfileRelationsView/hooks/useRelationInfo.ts +25 -0
  191. package/src/components/ProfileRelationsView/hooks/useRelationsState.ts +92 -0
  192. package/src/components/ProfileRelationsView/hooks/useSecondLevelConnections.ts +76 -0
  193. package/src/components/ProfileRelationsView/hooks/useSuggestedRelations.ts +54 -0
  194. package/src/components/ProfileSingleAttributeView/ProfileSingleAttributeView.tsx +20 -0
  195. package/src/components/ProfileSingleAttributeView/__tests__/IntegrationProfileSingleAttribute.test.tsx +368 -0
  196. package/src/components/ProfileSingleAttributeView/__tests__/ProfileSingleAttributeView.test.tsx +933 -0
  197. package/src/components/ProfileSingleAttributeView/__tests__/data/metadata.data.ts +103 -0
  198. package/src/components/ProfileSingleAttributeView/__tests__/data/store.data.ts +42 -0
  199. package/src/components/ProfileSingleAttributeView/components/FilterButton/FilterButton.tsx +63 -0
  200. package/src/components/ProfileSingleAttributeView/components/FilterButton/__tests__/FilterButton.spec.tsx +93 -0
  201. package/src/components/ProfileSingleAttributeView/components/FilterButton/styles.ts +27 -0
  202. package/src/components/ProfileSingleAttributeView/components/SingleAttributeEditableContent/SingleAttributeEditableContent.tsx +204 -0
  203. package/src/components/ProfileSingleAttributeView/components/SingleAttributeEditableContent/__tests__/SingleAttributeEditableContent.specs.tsx +559 -0
  204. package/src/components/ProfileSingleAttributeView/components/SingleAttributeEditableContent/styles.ts +28 -0
  205. package/src/components/ProfileSingleAttributeView/components/SingleAttributeHeader/SingleAttributeHeader.tsx +58 -0
  206. package/src/components/ProfileSingleAttributeView/components/SingleAttributeHeader/__tests__/SingleAttributeHeader.test.tsx +188 -0
  207. package/src/components/ProfileSingleAttributeView/components/SingleAttributeHeader/styles.ts +21 -0
  208. package/src/components/ProfileSingleAttributeView/components/SingleAttributeReadableContent/SingleAttributeReadableContent.tsx +31 -0
  209. package/src/components/ProfileSingleAttributeView/components/SingleAttributeReadableContent/__tests__/SingleAttributeReadableContent.spec.tsx +42 -0
  210. package/src/components/ProfileSingleAttributeView/components/SingleAttributeReadableContent/styles.ts +9 -0
  211. package/src/components/ProfileSingleAttributeView/components/SingleAttributeView/SingleAttributeView.tsx +90 -0
  212. package/src/components/ProfileSingleAttributeView/components/SingleAttributeView/__tests__/SingleAttributeView.test.tsx +346 -0
  213. package/src/components/ProfileSingleAttributeView/components/SingleAttributeView/styles.ts +22 -0
  214. package/src/components/ProfileSingleAttributeView/contexts/SingleAttributeContext.ts +20 -0
  215. package/src/components/ProfileSingleAttributeView/hooks/useSingleAttribute.ts +25 -0
  216. package/src/components/ProfileSingleAttributeView/styles.ts +26 -0
  217. package/src/components/ProfileTableAttributeView/ProfileTableAttributeView.tsx +20 -0
  218. package/src/components/ProfileTableAttributeView/__tests__/IntegrationProfileTableAttributeView.test.tsx +278 -0
  219. package/src/components/ProfileTableAttributeView/__tests__/ProfileTableAttributeView.test.tsx +744 -0
  220. package/src/components/ProfileTableAttributeView/__tests__/data/metadata.data.ts +141 -0
  221. package/src/components/ProfileTableAttributeView/__tests__/data/store.data.ts +48 -0
  222. package/src/components/ProfileTableAttributeView/components/AttributeEditing/AttributeEditing.tsx +97 -0
  223. package/src/components/ProfileTableAttributeView/components/AttributeEditing/__tests__/AttributeEditing.test.tsx +409 -0
  224. package/src/components/ProfileTableAttributeView/components/AttributeEditing/styles.ts +17 -0
  225. package/src/components/ProfileTableAttributeView/components/AttributeTable/AttributeTable.tsx +171 -0
  226. package/src/components/ProfileTableAttributeView/components/AttributeTable/EditButtons.tsx +28 -0
  227. package/src/components/ProfileTableAttributeView/components/AttributeTable/__tests__/AttributeTable.test.tsx +431 -0
  228. package/src/components/ProfileTableAttributeView/components/AttributeTable/__tests__/EditButtons.test.tsx +54 -0
  229. package/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/BlobRenderer.tsx +20 -0
  230. package/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/DefaultCellValueRenderer.tsx +43 -0
  231. package/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/HeadCellRenderer.tsx +19 -0
  232. package/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/RowCellRenderer.tsx +33 -0
  233. package/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/__tests__/BlobRenderer.test.tsx +29 -0
  234. package/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/__tests__/DefaultCellValueRenderer.test.tsx +149 -0
  235. package/src/components/ProfileTableAttributeView/components/AttributeTable/cell-renderers/styles.ts +61 -0
  236. package/src/components/ProfileTableAttributeView/components/AttributeTable/styles.ts +21 -0
  237. package/src/components/ProfileTableAttributeView/components/AttributeTableHeader/AttributeTableHeader.tsx +53 -0
  238. package/src/components/ProfileTableAttributeView/components/AttributeTableHeader/__tests__/AttributeTableHeader.test.tsx +96 -0
  239. package/src/components/ProfileTableAttributeView/components/AttributeTableHeader/styles.ts +7 -0
  240. package/src/components/ProfileTableAttributeView/components/TableAttributeContent/TableAttributeContent.tsx +123 -0
  241. package/src/components/ProfileTableAttributeView/components/TableAttributeContent/__tests__/TableAttributeContent.test.tsx +600 -0
  242. package/src/components/ProfileTableAttributeView/components/TableAttributeContent/hooks/useEditableAttribute.ts +212 -0
  243. package/src/components/ProfileTableAttributeView/components/TableAttributeEditableContent/TableAttributeEditableContent.tsx +96 -0
  244. package/src/components/ProfileTableAttributeView/components/TableAttributeEditableContent/__tests__/TableAttributeEditableContent.test.tsx +450 -0
  245. package/src/components/ProfileTableAttributeView/components/TableAttributeEditableContent/hooks/__tests__/useExpandAttributes.test.tsx +92 -0
  246. package/src/components/ProfileTableAttributeView/components/TableAttributeEditableContent/hooks/useExpandAttributes.ts +88 -0
  247. package/src/components/ProfileTableAttributeView/components/TableAttributeEditableContent/styles.ts +21 -0
  248. package/src/components/ProfileTableAttributeView/components/TableAttributeView/TableAttributeView.tsx +64 -0
  249. package/src/components/ProfileTableAttributeView/components/TableAttributeView/__tests__/TableAttributeView.test.tsx +139 -0
  250. package/src/components/ProfileTableAttributeView/components/TableAttributeView/styles.ts +20 -0
  251. package/src/components/ProfileTableAttributeView/components/types.ts +16 -0
  252. package/src/components/ProfileTableAttributeView/contexts/TableAttributeContext.tsx +34 -0
  253. package/src/components/ProfileTableAttributeView/helpers/tableAttributeHelpers.ts +72 -0
  254. package/src/components/ProfileTableAttributeView/hooks/__tests__/helpers.test.ts +97 -0
  255. package/src/components/ProfileTableAttributeView/hooks/helpers.ts +13 -0
  256. package/src/components/ProfileTableAttributeView/hooks/reducer.ts +19 -0
  257. package/src/components/ProfileTableAttributeView/hooks/useTableAttribute.ts +77 -0
  258. package/src/components/RightSidePanel/RightSidePanel.tsx +43 -0
  259. package/src/components/RightSidePanel/__tests__/RightSidePanel.spec.tsx +149 -0
  260. package/src/components/RightSidePanel/components/CollaborationButton/CollaborationButton.tsx +22 -0
  261. package/src/components/RightSidePanel/components/CollaborationButton/__tests__/CollaborationButton.spec.tsx +24 -0
  262. package/src/components/RightSidePanel/components/CollaborationList/CollaborationList.tsx +56 -0
  263. package/src/components/RightSidePanel/components/CollaborationList/__tests__/CollaborationList.spec.tsx +104 -0
  264. package/src/components/RightSidePanel/components/CollaborationList/styles.ts +15 -0
  265. package/src/components/RightSidePanel/components/CollaborationPanelEmptyState/CollaborationPanelEmptyState.tsx +14 -0
  266. package/src/components/RightSidePanel/components/CollaborationPanelEmptyState/__tests__/CollaborationPanelEmptyState.specs.tsx +16 -0
  267. package/src/components/RightSidePanel/components/DBConnectorsList/DBConnectorsList.tsx +19 -0
  268. package/src/components/RightSidePanel/components/DBConnectorsList/__tests__/DBConnectorsList.spec.tsx +42 -0
  269. package/src/components/RightSidePanel/components/DBConnectorsList/styles.ts +12 -0
  270. package/src/components/RightSidePanel/components/WorkflowButton/WorkflowButton.tsx +21 -0
  271. package/src/components/RightSidePanel/components/WorkflowButton/__tests__/WorkflowButton.spec.tsx +23 -0
  272. package/src/components/RightSidePanel/components/WorkflowList/WorkflowList.tsx +18 -0
  273. package/src/components/RightSidePanel/components/WorkflowList/__tests__/WorkflowList.spec.tsx +46 -0
  274. package/src/components/RightSidePanel/components/WorkflowList/styles.ts +9 -0
  275. package/src/components/RightSidePanel/components/WorkflowPanelEmptyState/WorkflowPanelEmptyState.tsx +14 -0
  276. package/src/components/RightSidePanel/components/WorkflowPanelEmptyState/__tests__/WorkflowPanelEmptyState.specs.tsx +17 -0
  277. package/src/components/RightSidePanel/icons/CollaborationIcon.svg +18 -0
  278. package/src/components/RightSidePanel/icons/ConnectorsIcon.svg +3 -0
  279. package/src/components/RightSidePanel/styles.ts +21 -0
  280. package/src/components/Sandbox/CustomView.tsx +59 -0
  281. package/src/components/Sandbox/__tests__/CustomView.test.tsx +294 -0
  282. package/src/components/Sandbox/styles.ts +10 -0
  283. package/src/components/TagPerspectiveView/TagPerspectiveView.tsx +79 -0
  284. package/src/components/TagPerspectiveView/__tests__/TagPerspectiveView.test.tsx +146 -0
  285. package/src/components/TagPerspectiveView/components/TagListHeader/TagListHeader.tsx +48 -0
  286. package/src/components/TagPerspectiveView/components/TagListHeader/__tests__/TagListHeader.test.tsx +60 -0
  287. package/src/components/TagPerspectiveView/components/TagListHeader/index.ts +1 -0
  288. package/src/components/TagPerspectiveView/components/TagListHeader/styles.ts +36 -0
  289. package/src/components/TagPerspectiveView/components/TagProfileBand/TagProfileBand.tsx +21 -0
  290. package/src/components/TagPerspectiveView/components/TagProfileBand/__tests__/TagProfileBand.test.tsx +14 -0
  291. package/src/components/TagPerspectiveView/components/TagProfileBand/index.ts +1 -0
  292. package/src/components/TagPerspectiveView/components/TagProfileBand/styles.ts +24 -0
  293. package/src/components/TagPerspectiveView/hooks/__tests__/useTag.test.tsx +166 -0
  294. package/src/components/TagPerspectiveView/hooks/__tests__/useTagsProvider.test.tsx +208 -0
  295. package/src/components/TagPerspectiveView/hooks/useTag.ts +48 -0
  296. package/src/components/TagPerspectiveView/hooks/useTagsProvider.ts +83 -0
  297. package/src/components/TagPerspectiveView/index.ts +1 -0
  298. package/src/components/TagPerspectiveView/styles.ts +43 -0
  299. package/src/components/hooks/helpers/__tests__/helpers.test.ts +688 -0
  300. package/src/components/hooks/helpers/index.ts +77 -0
  301. package/src/components/hooks/useProfileValidation.ts +30 -0
  302. package/src/components/hooks/useSingleAttributeLoader.ts +164 -0
  303. package/src/components/views/HOCs/styles.ts +37 -0
  304. package/src/components/views/HOCs/withDragHandle.tsx +26 -0
  305. package/src/components/views/HOCs/withErrorBoundary.tsx +27 -0
  306. package/src/components/views/StubView.tsx +18 -0
  307. package/src/components/views/ViewComponent.tsx +25 -0
  308. package/src/components/views/ViewsFactory.tsx +143 -0
  309. package/src/components/views/__tests__/ViewComponent.specs.tsx +47 -0
  310. package/src/components/views/__tests__/ViewsFactory.specs.tsx +256 -0
  311. package/src/components/views/styles.ts +16 -0
  312. package/src/perspectives/DCRReviewPerspective.tsx +51 -0
  313. package/src/perspectives/ProfilePerspective.tsx +104 -0
  314. package/src/perspectives/TagPerspective.tsx +42 -0
  315. package/src/perspectives/__tests__/DCRReviewPerspective.spec.tsx +54 -0
  316. package/src/perspectives/__tests__/ProfilePerspective.spec.tsx +76 -0
  317. package/src/perspectives/__tests__/helpers.spec.ts +131 -0
  318. package/src/perspectives/helpers.ts +29 -0
  319. package/src/types/index.ts +9 -0
  320. package/stories/Profile.stories.tsx +35 -0
  321. package/stories/utils/entity.ts +80 -0
  322. package/stories/utils/hierarchyTree/config.ts +13 -0
  323. package/stories/utils/hierarchyTree/hopsResponse.ts +182 -0
  324. package/stories/utils/hierarchyTree/treeResponse.ts +412 -0
  325. package/stories/utils/mdmStore.ts +64 -0
  326. package/stories/utils/metadata.ts +701 -0
  327. package/stories/utils/profilePerspectiveConfig.ts +95 -0
  328. package/stories/utils/relationsTableView/config.ts +18 -0
  329. package/stories/utils/relationsTableView/connections.ts +647 -0
  330. package/stories/utils/responses.ts +62 -0
  331. package/tsconfig.json +4 -0
  332. package/webpack.config.js +10 -0
  333. package/bundle.js +0 -2
  334. /package/{5271a9e7b6651c852e93.png → public/5271a9e7b6651c852e93.png} +0 -0
  335. /package/{main.css → public/main.css} +0 -0
@@ -0,0 +1,19 @@
1
+ export const createEntities = () => {
2
+ return [
3
+ {
4
+ label: 'entity label 1',
5
+ type: 'configuration/entityTypes/HCP',
6
+ uri: 'entities/2qhASmd'
7
+ },
8
+ {
9
+ label: 'entity label 2',
10
+ type: 'configuration/entityTypes/HCP',
11
+ uri: 'entities/1fEU3PtH'
12
+ },
13
+ {
14
+ label: 'entity label 3',
15
+ type: 'configuration/entityTypes/HCP',
16
+ uri: 'entities/1fEUpfyR'
17
+ }
18
+ ];
19
+ };
@@ -0,0 +1,25 @@
1
+ export const createEntity = () => {
2
+ return {
3
+ uri: 'entities/1ywlDdLM',
4
+ type: 'configuration/entityTypes/HCP',
5
+ label: 'Entity label',
6
+ attributes: {
7
+ SimpleRequiredString: [
8
+ {
9
+ type: 'configuration/entityTypes/HCP/attributes/SimpleRequiredString',
10
+ ov: true,
11
+ value: '4444',
12
+ uri: 'entities/1ywlDdLM/attributes/SimpleRequiredString/5sXNaNib2'
13
+ }
14
+ ],
15
+ SimpleString: [
16
+ {
17
+ type: 'configuration/entityTypes/HCP/attributes/SimpleString',
18
+ ov: true,
19
+ value: '8888',
20
+ uri: 'entities/1ywlDdLM/attributes/SimpleString/5sXNaNVoG'
21
+ }
22
+ ]
23
+ }
24
+ };
25
+ };
@@ -0,0 +1,33 @@
1
+ export const getMetadata = ({tenant}) => ({
2
+ [tenant]: {
3
+ uri: 'configuration',
4
+ entityTypes: [
5
+ {
6
+ uri: 'configuration/entityTypes/HCP',
7
+ attributes: [
8
+ {
9
+ label: 'SimpleRequiredString',
10
+ name: 'SimpleRequiredString',
11
+ uri: 'configuration/entityTypes/HCP/attributes/SimpleRequiredString',
12
+ type: 'String',
13
+ required: true
14
+ },
15
+ {
16
+ label: 'SimpleRequiredString2',
17
+ name: 'SimpleRequiredString2',
18
+ uri: 'configuration/entityTypes/HCP/attributes/SimpleRequiredString2',
19
+ type: 'String',
20
+ required: true
21
+ },
22
+ {
23
+ label: 'SimpleString',
24
+ name: 'SimpleString',
25
+ uri: 'configuration/entityTypes/HCP/attributes/SimpleString',
26
+ type: 'String'
27
+ }
28
+ ]
29
+ }
30
+ ],
31
+ relationTypes: []
32
+ }
33
+ });
@@ -0,0 +1,22 @@
1
+ import {Mode} from '@reltio/mdm-sdk';
2
+ import {createEntity} from './entity.data';
3
+
4
+ export const createEmptyProfile = ({mode = Mode.Viewing} = {}) => {
5
+ return {
6
+ entity: {},
7
+ modifiedEntities: {},
8
+ views: [],
9
+ history: {},
10
+ mode
11
+ };
12
+ };
13
+
14
+ export const createProfile = ({mode = Mode.Viewing} = {}) => {
15
+ return {
16
+ entity: createEntity(),
17
+ modifiedEntities: {},
18
+ views: [],
19
+ history: {},
20
+ mode
21
+ };
22
+ };
@@ -0,0 +1,51 @@
1
+ import {Mode} from '@reltio/mdm-sdk';
2
+ import {getMetadata} from './metadata.data';
3
+ import {createEmptyProfile, createProfile} from './profile.data';
4
+
5
+ export const createInitialState = ({mode = Mode.Viewing, isEmptyProfile = false} = {}) => {
6
+ const tenant = 't1';
7
+ const metadata = getMetadata({tenant});
8
+ const profile = isEmptyProfile ? createEmptyProfile({mode}) : createProfile({mode});
9
+
10
+ return {
11
+ metadata,
12
+ profile,
13
+ tenant: {
14
+ id: tenant
15
+ },
16
+ ui: {
17
+ paths: {
18
+ apiPath: '/nui/reltioAPI',
19
+ dtssPath: '/nui/dtss/'
20
+ },
21
+ newConfig: {
22
+ properties: {
23
+ profileCheckUpdate: {
24
+ autoUpdateInReadMode: ['configuration/entityTypes/HCO'],
25
+ entityTypes: [
26
+ 'configuration/entityTypes/Company',
27
+ 'configuration/entityTypes/HCO',
28
+ 'configuration/entityTypes/HCP',
29
+ 'configuration/entityTypes/HCA'
30
+ ]
31
+ }
32
+ }
33
+ }
34
+ },
35
+ search: {
36
+ searchProviderData: {
37
+ type: 'search',
38
+ data: {
39
+ query: "equals(type,'configuration/entityTypes/HCP')"
40
+ }
41
+ },
42
+ searchNavigationData: {
43
+ uri: 'entities/1ywlDdLM',
44
+ index: 25,
45
+ total: 483,
46
+ tenant,
47
+ cache: ['entities/1ywlDdLM', 'entities/2qhASmd']
48
+ }
49
+ }
50
+ };
51
+ };
@@ -0,0 +1,2 @@
1
+ const BACKGROUND_UPDATE_DELAY = 6000;
2
+ export const getBackgroundUpdateDelay = (delay?: number) => delay || BACKGROUND_UPDATE_DELAY;
@@ -0,0 +1,121 @@
1
+ import {useCallback, useContext, useEffect, useRef, useState} from 'react';
2
+ import {useDispatch, useSelector} from 'react-redux';
3
+ import {isNil} from 'ramda';
4
+ import {useActionsHook, useSafePromise, ViewIdContext} from '@reltio/components';
5
+ import {getEntityUpdatedTime, ProfileCheckUpdate} from '@reltio/mdm-sdk';
6
+ import mdm, {profile} from '@reltio/mdm-module';
7
+ import {BackgroundUpdateStatus} from '../../BackgroundProcessIndicator/BackgroundProcessIndicator';
8
+ import {getBackgroundUpdateDelay} from './data/backgroundUpdateDalay';
9
+
10
+ const NUMBER_OF_RETRY = 5;
11
+
12
+ const isEntityTypeInBackgroundProcess = (entityTypeList?: string[], entityType?: string) => {
13
+ if (entityTypeList?.[0] === '*') {
14
+ return true;
15
+ }
16
+ if (isNil(entityTypeList)) {
17
+ return false;
18
+ }
19
+ return entityTypeList.includes(entityType);
20
+ };
21
+
22
+ const checkEntityTypeInList = (entityTypeList: string[], entityType: string) =>
23
+ isEntityTypeInBackgroundProcess(entityTypeList, entityType);
24
+
25
+ type Props = {
26
+ entityUri: string;
27
+ entityTypeUri: string;
28
+ entityUpdatedTime: number;
29
+ };
30
+
31
+ export const useBackgroundProcessIndicator = ({entityUri, entityTypeUri, entityUpdatedTime}: Props) => {
32
+ const dispatch = useDispatch();
33
+ const {autoUpdateInReadMode, entityTypes: entityTypesForUpdate}: ProfileCheckUpdate =
34
+ useSelector(mdm.selectors.getProfileCheckUpdate) || {};
35
+
36
+ const needBackgroundProcess = checkEntityTypeInList(entityTypesForUpdate, entityTypeUri);
37
+ const isAutoUpdated = checkEntityTypeInList(autoUpdateInReadMode, entityTypeUri);
38
+
39
+ const timerId = useRef(null);
40
+ const safePromise = useSafePromise();
41
+ const listenToActions = useActionsHook();
42
+ const viewId = useContext(ViewIdContext);
43
+
44
+ const [isOpenBackgroundProcessIndicator, setIsOpenBackgroundProcessIndicator] = useState(false);
45
+ const [backgroundUpdateStatus, setBackgroundUpdateStatus] = useState(BackgroundUpdateStatus.loading);
46
+ const backgroundUpdateDelay = getBackgroundUpdateDelay();
47
+
48
+ const onRefreshProfile = useCallback(() => {
49
+ // entity refreshing
50
+ dispatch(profile.entity.actions.loadEntity({viewId, uri: entityUri}));
51
+ setIsOpenBackgroundProcessIndicator(false);
52
+ }, [dispatch, entityUri, viewId]);
53
+
54
+ const onCloseBackgroundProcessIndicator = useCallback(() => {
55
+ setIsOpenBackgroundProcessIndicator(false);
56
+ }, []);
57
+
58
+ const cancelUpdateProcess = useCallback(() => {
59
+ clearTimeout(timerId.current);
60
+ setIsOpenBackgroundProcessIndicator(false);
61
+ safePromise(Promise.resolve());
62
+ }, [safePromise]);
63
+
64
+ const getUpdatedTime = useCallback(
65
+ (numberOfRetry) => {
66
+ safePromise(getEntityUpdatedTime(entityUri))
67
+ .then((result) => {
68
+ if (result.updatedTime > entityUpdatedTime) {
69
+ setBackgroundUpdateStatus(BackgroundUpdateStatus.success);
70
+ if (isAutoUpdated) {
71
+ onRefreshProfile();
72
+ } else {
73
+ setIsOpenBackgroundProcessIndicator(true);
74
+ }
75
+ numberOfRetry = -1;
76
+ }
77
+ })
78
+ .catch(() => {})
79
+ .finally(() => {
80
+ if (numberOfRetry < 0) {
81
+ return;
82
+ }
83
+ if (!numberOfRetry) {
84
+ setBackgroundUpdateStatus(BackgroundUpdateStatus.error);
85
+ setIsOpenBackgroundProcessIndicator(true);
86
+ } else {
87
+ numberOfRetry = numberOfRetry - 1;
88
+ timerId.current = setTimeout(getUpdatedTime, backgroundUpdateDelay, numberOfRetry);
89
+ }
90
+ });
91
+ },
92
+ [entityUpdatedTime, entityUri, isAutoUpdated, onRefreshProfile, safePromise, backgroundUpdateDelay]
93
+ );
94
+
95
+ const runBackgroundUpdate = useCallback(() => {
96
+ if (needBackgroundProcess) {
97
+ setBackgroundUpdateStatus(BackgroundUpdateStatus.loading);
98
+ setIsOpenBackgroundProcessIndicator(true);
99
+ timerId.current = setTimeout(getUpdatedTime, backgroundUpdateDelay, NUMBER_OF_RETRY - 1);
100
+ }
101
+ }, [getUpdatedTime, needBackgroundProcess]);
102
+
103
+ useEffect(() => {
104
+ const stopListeningActions = listenToActions((action) => {
105
+ if (action.type === profile.constants.ProfileActions.PROFILE_SAVED) {
106
+ runBackgroundUpdate();
107
+ }
108
+ });
109
+ return () => {
110
+ stopListeningActions();
111
+ };
112
+ }, [listenToActions, safePromise, runBackgroundUpdate]);
113
+
114
+ return {
115
+ onRefreshProfile,
116
+ onCloseBackgroundProcessIndicator,
117
+ cancelUpdateProcess,
118
+ isOpenBackgroundProcessIndicator,
119
+ backgroundUpdateStatus
120
+ };
121
+ };
@@ -0,0 +1,101 @@
1
+ import {useCallback, useEffect, useMemo, useRef, useState} from 'react';
2
+ import hash from 'object-hash';
3
+ import {useSavedStateForEntityType, useConfigPermissions} from '@reltio/components';
4
+ import {
5
+ debounce,
6
+ fixNonUniqViewsIds,
7
+ ProfilePerspectiveConfig,
8
+ ProfileViewConfig,
9
+ ReltioGridLayoutItem,
10
+ removeUnsupportedLayoutItems
11
+ } from '@reltio/mdm-sdk';
12
+ import {ProfileSavedState, Layout} from '../../../types';
13
+
14
+ type Props = {
15
+ config: ProfilePerspectiveConfig;
16
+ entityTypeUri?: string;
17
+ saveState: (state: Record<string, ProfileSavedState>) => void;
18
+ getSavedState: () => Promise<Record<string, ProfileSavedState>>;
19
+ };
20
+
21
+ const SAVE_STATE_DEBOUNCE_DELAY = 1000;
22
+ const emptyState = {} as ProfileSavedState;
23
+ export const useProfileLayout = ({config: profileConfig, entityTypeUri, saveState, getSavedState}: Props) => {
24
+ const [layout, setLayout] = useState<Layout>([]);
25
+ const [views, setViews] = useState<ProfilePerspectiveConfig['views']>([]);
26
+
27
+ const {canRead} = useConfigPermissions();
28
+ const config: ProfilePerspectiveConfig = useMemo(() => {
29
+ const validatedViews = profileConfig.views.filter(canRead);
30
+ const validatedLayout = removeUnsupportedLayoutItems(profileConfig.layout, validatedViews);
31
+ return {...profileConfig, views: validatedViews, layout: validatedLayout};
32
+ }, [profileConfig, canRead]);
33
+
34
+ const configHash = useMemo(() => hash(config), [config]);
35
+ const nestedRoute = config?.nestedRoute ? `/${config.nestedRoute}` : '';
36
+ const savedStateKey = entityTypeUri && config ? entityTypeUri + nestedRoute : null;
37
+
38
+ const getSavedStateAndFix = useCallback(() => {
39
+ return getSavedState().then((state) => (state.layout ? {} : state));
40
+ }, [getSavedState]);
41
+ const debouncedSaveState = useCallback(debounce(saveState, SAVE_STATE_DEBOUNCE_DELAY), [saveState]) as (
42
+ state: Record<string, ProfileSavedState>
43
+ ) => void;
44
+ const {
45
+ isLoaded,
46
+ savedState = emptyState,
47
+ updateSavedState
48
+ } = useSavedStateForEntityType<ProfileSavedState>({
49
+ getSavedState: getSavedStateAndFix,
50
+ saveState: debouncedSaveState,
51
+ entityTypeUri: savedStateKey
52
+ });
53
+
54
+ const handleLayoutChange = useCallback(
55
+ (layout: Layout) => {
56
+ updateSavedState({layout, views, configHash});
57
+ setLayout(layout);
58
+ },
59
+ [updateSavedState, configHash, views]
60
+ );
61
+
62
+ const tempConfig = useRef<{views: ProfilePerspectiveConfig['views']; layout: Layout}>();
63
+ const handleResetUndo = useCallback(() => {
64
+ setViews(tempConfig.current.views);
65
+ handleLayoutChange(tempConfig.current.layout);
66
+ }, [handleLayoutChange]);
67
+
68
+ const handleLayoutReset = useCallback(() => {
69
+ tempConfig.current = {views, layout};
70
+ const {views: fixedViews, layout: fixedLayout} = fixNonUniqViewsIds<ProfileViewConfig, ReltioGridLayoutItem>({
71
+ views: config.views,
72
+ layout: config.layout
73
+ });
74
+ setViews(fixedViews);
75
+ handleLayoutChange(fixedLayout);
76
+ }, [config, layout, views, handleLayoutChange]);
77
+
78
+ useEffect(() => {
79
+ if (isLoaded) {
80
+ const isConfigChanged = configHash !== savedState.configHash;
81
+ const {views: fixedViews, layout: fixedLayout} = fixNonUniqViewsIds<
82
+ ProfileViewConfig,
83
+ ReltioGridLayoutItem
84
+ >({
85
+ views: isConfigChanged || !savedState.views ? config.views : savedState.views,
86
+ layout: isConfigChanged ? config.layout : savedState.layout
87
+ });
88
+ setViews(fixedViews);
89
+ setLayout(fixedLayout);
90
+ }
91
+ }, [isLoaded, savedState, savedStateKey]); // eslint-disable-line
92
+
93
+ return {
94
+ views,
95
+ layout,
96
+ isLoaded,
97
+ onLayoutReset: handleLayoutReset,
98
+ onResetUndo: handleResetUndo,
99
+ handleLayoutChange
100
+ };
101
+ };
@@ -0,0 +1,167 @@
1
+ import React, {useContext, useMemo} from 'react';
2
+ import {useSelector} from 'react-redux';
3
+ import {isTempUri, getEntityType, Metadata, Entity, calcTotalCommentItems} from '@reltio/mdm-sdk';
4
+ import mdm, {HistoryEvent} from '@reltio/mdm-module';
5
+ import {CollaborationContext, RightPanelTab, WorkflowTasksContext} from '@reltio/components';
6
+ import {
7
+ AddWorkflowButton,
8
+ HistoryHeader,
9
+ HistoryPanelEmptyState,
10
+ HistoryView,
11
+ useHistory,
12
+ useHistoryEnabled
13
+ } from '@reltio/components';
14
+ import i18n from 'ui-i18n';
15
+ import HistoryIcon from '@mui/icons-material/History';
16
+ import {ActivePanel} from '../../RightSidePanel/RightSidePanel';
17
+ import {DBConnectorsList} from '../../RightSidePanel/components/DBConnectorsList/DBConnectorsList';
18
+ import {WorkflowButton} from '../../RightSidePanel/components/WorkflowButton/WorkflowButton';
19
+ import {CollaborationButton} from '../../RightSidePanel/components/CollaborationButton/CollaborationButton';
20
+ import ConnectorsIcon from '../../RightSidePanel/icons/ConnectorsIcon.svg';
21
+
22
+ import {WorkflowList} from '../../RightSidePanel/components/WorkflowList/WorkflowList';
23
+ import WorkflowPanelEmptyState from '../../RightSidePanel/components/WorkflowPanelEmptyState/WorkflowPanelEmptyState';
24
+ import {CollaborationList} from '../../RightSidePanel/components/CollaborationList/CollaborationList';
25
+ import CollaborationPanelEmptyState from '../../RightSidePanel/components/CollaborationPanelEmptyState/CollaborationPanelEmptyState';
26
+
27
+ const getSecondTitle = (total: number): string => {
28
+ if (total) {
29
+ return total === 1 ? i18n.text('${total} item', {total}) : i18n.text('${total} items', {total});
30
+ }
31
+ };
32
+
33
+ type Props = {
34
+ perspectiveId: string;
35
+ commentId?: string;
36
+ hideHistory?: boolean;
37
+ };
38
+
39
+ export const useProfileRightSidePanelElements = ({
40
+ commentId,
41
+ hideHistory,
42
+ perspectiveId
43
+ }: Props): {tabs: Array<RightPanelTab>; defaultTab?: number} => {
44
+ const isWorkflowSideViewEnabled = useSelector(mdm.selectors.isWorkflowSideViewEnabled) as boolean;
45
+ const isWorkflowEnabled = useSelector(mdm.selectors.isWorkflowEnabled) as boolean;
46
+ const isCollaborationSideViewEnabled = useSelector(mdm.selectors.isCollaborationSideViewEnabled) as boolean;
47
+ const isDBConnectorSideViewEnabled = useSelector(mdm.selectors.isDBConnectorSideViewEnabled) as boolean;
48
+ const isCollaborationEnabled = useSelector(mdm.selectors.isCollaborationEnabled) as boolean;
49
+
50
+ const defaultTab = commentId ? ActivePanel.Collaboration : undefined;
51
+
52
+ const historyEvent: HistoryEvent = useSelector(mdm.selectors.getHistoryEvent);
53
+ const metadata: Metadata = useSelector(mdm.selectors.getMetadata);
54
+ const entity: Entity = useSelector(mdm.selectors.getEntity);
55
+
56
+ const workflowTasksContext = useContext(WorkflowTasksContext);
57
+ const collaborationContext = useContext(CollaborationContext);
58
+
59
+ const {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({
60
+ perspectiveId,
61
+ entity,
62
+ historyButtonId: ActivePanel.History
63
+ });
64
+
65
+ const {historyFilter, onApplyFilter, isLoading, historicUris, historyWithTotal, canLoadMore, onLoadMore} =
66
+ useHistory({entity, enabled: isHistoryEnabled});
67
+
68
+ const enabledWorkflowButton = isWorkflowSideViewEnabled && isWorkflowEnabled && !isTempUri(entity?.uri);
69
+ const enabledCollaborationButton = isCollaborationSideViewEnabled && isCollaborationEnabled;
70
+ const collaborationTotal = calcTotalCommentItems(collaborationContext?.commentsMap);
71
+
72
+ const tabs = useMemo(
73
+ () => [
74
+ {
75
+ buttonProps: {
76
+ id: ActivePanel.Workflow,
77
+ icon: WorkflowButton,
78
+ tooltipTitle: i18n.text('Workflow')
79
+ },
80
+ content: workflowTasksContext?.total ? <WorkflowList /> : <WorkflowPanelEmptyState />,
81
+ headerProps: {
82
+ mainTitle: i18n.text('Workflow'),
83
+ secondTitle: getSecondTitle(workflowTasksContext?.total),
84
+ rightContent: <AddWorkflowButton />
85
+ },
86
+ hidden: !enabledWorkflowButton
87
+ },
88
+ {
89
+ buttonProps: {
90
+ id: ActivePanel.Collaboration,
91
+ icon: CollaborationButton,
92
+ tooltipTitle: i18n.text('Collaboration')
93
+ },
94
+ content: collaborationTotal ? <CollaborationList /> : <CollaborationPanelEmptyState />,
95
+ headerProps: {
96
+ mainTitle: i18n.text('Collaboration'),
97
+ secondTitle: getSecondTitle(collaborationTotal)
98
+ },
99
+ hidden: !enabledCollaborationButton
100
+ },
101
+ {
102
+ buttonProps: {
103
+ id: ActivePanel.History,
104
+ icon: HistoryIcon,
105
+ tooltipTitle: i18n.text('History')
106
+ },
107
+ content: isProfilePersisted ? (
108
+ <HistoryView
109
+ isLoading={isLoading}
110
+ historyWithTotal={historyWithTotal}
111
+ contributorsUris={historicUris}
112
+ entityUri={entity?.uri}
113
+ historyEvent={historyEvent}
114
+ onLoadMore={onLoadMore}
115
+ canLoadMore={canLoadMore}
116
+ />
117
+ ) : (
118
+ <HistoryPanelEmptyState />
119
+ ),
120
+ headerProps: {
121
+ content: (
122
+ <HistoryHeader
123
+ total={isProfilePersisted ? (historicUris?.length || 0) + 1 : undefined}
124
+ entityType={getEntityType(metadata, entity?.type)}
125
+ filter={historyFilter}
126
+ onApplyFilter={onApplyFilter}
127
+ />
128
+ )
129
+ },
130
+ hidden: hideHistory
131
+ },
132
+ {
133
+ buttonProps: {
134
+ id: ActivePanel.DBConnector,
135
+ icon: ConnectorsIcon,
136
+ tooltipTitle: i18n.text('D&B Connector')
137
+ },
138
+ content: <DBConnectorsList />,
139
+ headerProps: {
140
+ mainTitle: i18n.text('D&B Connector')
141
+ },
142
+ hidden: !isDBConnectorSideViewEnabled
143
+ }
144
+ ],
145
+ [
146
+ workflowTasksContext?.total,
147
+ enabledWorkflowButton,
148
+ collaborationTotal,
149
+ enabledCollaborationButton,
150
+ isProfilePersisted,
151
+ isLoading,
152
+ historyWithTotal,
153
+ historicUris,
154
+ entity?.uri,
155
+ entity?.type,
156
+ historyEvent,
157
+ onLoadMore,
158
+ canLoadMore,
159
+ metadata,
160
+ historyFilter,
161
+ onApplyFilter,
162
+ isDBConnectorSideViewEnabled
163
+ ]
164
+ );
165
+
166
+ return {tabs, defaultTab};
167
+ };
@@ -0,0 +1,15 @@
1
+ import {useWorkflowDefaultActionSuccessHandler, useWorkflowTasks as useCommonWorkflowTasks} from '@reltio/components';
2
+ import {useMemo} from 'react';
3
+
4
+ export const useWorkflowTasks = (workflowConfig: Parameters<typeof useCommonWorkflowTasks>[0]) => {
5
+ const commonWorkflowTasks = useCommonWorkflowTasks(workflowConfig);
6
+ const defaultActionSuccessHandler = useWorkflowDefaultActionSuccessHandler();
7
+
8
+ return useMemo(
9
+ () => ({
10
+ ...commonWorkflowTasks,
11
+ onActionSuccess: defaultActionSuccessHandler
12
+ }),
13
+ [commonWorkflowTasks, defaultActionSuccessHandler]
14
+ );
15
+ };
@@ -0,0 +1 @@
1
+ export {ProfilePerspectiveView as default} from './ProfilePerspectiveView';
@@ -0,0 +1,38 @@
1
+ import {makeStyles} from '@mui/styles';
2
+
3
+ type Props = {
4
+ maxWidth?: number;
5
+ };
6
+
7
+ export const useStyles = makeStyles((theme) => ({
8
+ perspectiveView: {
9
+ position: 'absolute',
10
+ top: 0,
11
+ left: 0,
12
+ right: 0,
13
+ bottom: 0,
14
+ fontFamily: 'Roboto, Helvetica, Arial, sans-serif',
15
+ overflowX: 'hidden',
16
+ overflowY: 'auto',
17
+ display: 'flex',
18
+ flexDirection: 'column',
19
+ backgroundColor: theme.palette.background.default
20
+ },
21
+ emptyState: {
22
+ backgroundColor: '#FAFAFA',
23
+ height: '100%'
24
+ },
25
+ profileWrapper: ({maxWidth}: Props) => ({
26
+ display: 'flex',
27
+ flexDirection: 'column',
28
+ overflow: 'hidden',
29
+ flexGrow: 1,
30
+ maxWidth: maxWidth ? `${maxWidth}px` : '100%'
31
+ }),
32
+ '@global div[role=tooltip]': {
33
+ fontFamily: 'Roboto, Helvetica, Arial, sans-serif'
34
+ },
35
+ '@global div[role=presentation]': {
36
+ fontFamily: 'Roboto, Helvetica, Arial, sans-serif'
37
+ }
38
+ }));
@@ -0,0 +1,39 @@
1
+ import {useDispatch, useSelector} from 'react-redux';
2
+ import mdmModule, {profile} from '@reltio/mdm-module';
3
+ import {getActionPermissionForMatch, Match, ProfilePotentialMatchesViewConfig} from '@reltio/mdm-sdk';
4
+ import React, {useCallback, useContext, useMemo} from 'react';
5
+ import {ActionButtonMode, MergeButton, NotMatchButton, ViewIdContext} from '@reltio/components';
6
+
7
+ type Props = {
8
+ config: ProfilePotentialMatchesViewConfig;
9
+ match: Match;
10
+ onStartRequest: () => void;
11
+ onFinishRequest: () => void;
12
+ };
13
+ export const ActionButtons = ({config, match, onStartRequest, onFinishRequest}: Props) => {
14
+ const dispatch = useDispatch();
15
+ const metadata = useSelector(mdmModule.selectors.getMetadata);
16
+ const entity = useSelector(mdmModule.selectors.getEntity);
17
+ const {canMerge, canMark} = getActionPermissionForMatch(metadata, config, match.object, entity, match.matchRules);
18
+ const entities = useMemo(() => {
19
+ return [match.object];
20
+ }, [match.object]);
21
+
22
+ const actionButtonProps = {
23
+ entity,
24
+ entities,
25
+ mode: ActionButtonMode.iconButton,
26
+ onStartRequest
27
+ };
28
+ const viewId = useContext(ViewIdContext);
29
+ const onMergeFinish = useCallback(() => {
30
+ onFinishRequest();
31
+ dispatch(profile.entity.actions.loadEntity({viewId, uri: entity.uri}));
32
+ }, [dispatch, entity.uri, onFinishRequest, viewId]);
33
+ return (
34
+ <>
35
+ {canMerge && <MergeButton {...actionButtonProps} onFinishRequest={onMergeFinish} />}
36
+ {canMark && <NotMatchButton {...actionButtonProps} onFinishRequest={onFinishRequest} />}
37
+ </>
38
+ );
39
+ };