@reltio/remotes 1.4.1621 → 1.4.1623

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 (107) hide show
  1. package/1039.js +1 -1
  2. package/1146.js +1 -1
  3. package/1148.js +1 -1
  4. package/1334.js +1 -1
  5. package/1425.js +1 -1
  6. package/1572.js +1 -1
  7. package/1572.js.map +1 -1
  8. package/1664.js +1 -1
  9. package/1707.js +1 -1
  10. package/1790.js +1 -1
  11. package/1840.js +1 -1
  12. package/1925.js +1 -1
  13. package/1925.js.map +1 -1
  14. package/2049.js +1 -1
  15. package/2066.js +1 -1
  16. package/2066.js.map +1 -1
  17. package/2201.js +1 -1
  18. package/2400.js +1 -1
  19. package/2400.js.map +1 -1
  20. package/2404.js +1 -1
  21. package/2404.js.map +1 -1
  22. package/2463.js +1 -1
  23. package/2641.js +1 -1
  24. package/2641.js.map +1 -1
  25. package/3096.js +1 -1
  26. package/3348.js +1 -1
  27. package/3358.js +1 -1
  28. package/3358.js.map +1 -1
  29. package/3373.js +1 -1
  30. package/3381.js +1 -1
  31. package/3383.js +1 -1
  32. package/3463.js +1 -1
  33. package/3469.js +1 -1
  34. package/3538.js +1 -1
  35. package/3538.js.map +1 -1
  36. package/356.js +1 -1
  37. package/3875.js +1 -1
  38. package/3902.js +1 -1
  39. package/3902.js.map +1 -1
  40. package/3926.js +1 -1
  41. package/3926.js.map +1 -1
  42. package/415.js +1 -1
  43. package/4212.js +1 -1
  44. package/4390.js +1 -1
  45. package/4481.js +1 -1
  46. package/4703.js +1 -1
  47. package/4780.js +1 -1
  48. package/4806.js +1 -1
  49. package/4838.js +1 -1
  50. package/50.js +1 -1
  51. package/5034.js +1 -1
  52. package/5039.js +1 -1
  53. package/5053.js +1 -1
  54. package/5108.js +1 -1
  55. package/5163.js +1 -1
  56. package/5163.js.map +1 -1
  57. package/5617.js +1 -1
  58. package/6020.js +1 -1
  59. package/6173.js +1 -1
  60. package/6228.js +1 -1
  61. package/6280.js +1 -1
  62. package/6287.js +1 -1
  63. package/6531.js +1 -1
  64. package/6606.js +1 -1
  65. package/6606.js.map +1 -1
  66. package/6799.js +1 -1
  67. package/6844.js +1 -1
  68. package/6853.js +1 -1
  69. package/6860.js +1 -1
  70. package/6903.js +1 -1
  71. package/7340.js +1 -1
  72. package/735.js +1 -1
  73. package/7422.js +1 -1
  74. package/7626.js +1 -1
  75. package/764.js +1 -1
  76. package/7896.js +1 -1
  77. package/8168.js +1 -1
  78. package/820.js +1 -1
  79. package/8207.js +1 -1
  80. package/8322.js +1 -1
  81. package/8481.js +2 -0
  82. package/8481.js.map +1 -0
  83. package/8565.js +1 -1
  84. package/8741.js +1 -1
  85. package/9016.js +1 -1
  86. package/9028.js +1 -1
  87. package/9028.js.map +1 -1
  88. package/9283.js +1 -1
  89. package/9309.js +1 -1
  90. package/9328.js +1 -1
  91. package/9387.js +1 -1
  92. package/9719.js +1 -1
  93. package/9736.js +1 -1
  94. package/9861.js +1 -1
  95. package/987.js +1 -1
  96. package/99.js +1 -1
  97. package/9945.js +2 -0
  98. package/9945.js.map +1 -0
  99. package/9960.js +1 -1
  100. package/main.js +1 -1
  101. package/package.json +1 -1
  102. package/remoteEntry.js +1 -1
  103. package/remoteEntry.js.map +1 -1
  104. package/3727.js +0 -2
  105. package/3727.js.map +0 -1
  106. package/673.js +0 -2
  107. package/673.js.map +0 -1
package/8481.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"8481.js","mappings":"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AC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,GAAI,IAAK,GACf,CAAC,IAAK,EAAG,GAAI,GACb,CAAC,IAAK,GAAI,GAAI,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,GAAI,IAAK,GACf,CAAC,IAAK,GAAI,IAAK,GACf,CAAC,IAAK,GAAI,IAAK,GACf,CAAC,IAAK,GAAI,IAAK,GACf,CAAC,IAAK,GAAI,IAAK,GACf,CAAC,GAAI,GAAI,IAAK,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,GAAI,IAAK,GACf,CAAC,IAAK,EAAG,IAAK,GACd,CAAC,IAAK,EAAG,IAAK,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,GAAI,IAAK,GACf,CAAC,IAAK,GAAI,IAAK,GACf,CAAC,GAAI,GAAI,IAAK,GACd,CAAC,GAAI,GAAI,IAAK,GACd,CAAC,GAAI,GAAI,IAAK,GACd,CAAC,GAAI,GAAI,IAAK,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,GAAI,IAAK,GACf,CAAC,IAAK,GAAI,IAAK,GACf,CAAC,GAAI,EAAG,IAAK,GACb,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,GAAI,GAAI,IAAK,GACd,CAAC,GAAI,GAAI,IAAK,GACd,CAAC,GAAI,GAAI,IAAK,GACd,CAAC,GAAI,GAAI,IAAK,GACd,CAAC,GAAI,GAAI,IAAK,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,GAAI,GAAI,IAAK,GACd,CAAC,GAAI,GAAI,IAAK,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,GAAI,GAAI,IAAK,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,GAAI,GAAI,IAAK,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,EAAG,GAAI,IAAK,GACb,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,EAAG,GAAI,IAAK,GACb,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,EAAG,IAAK,GAAI,GACb,CAAC,EAAG,GAAI,GAAI,GACZ,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,GAAI,IAAK,IAAK,GACf,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,GAAI,IAAK,GAAI,GACd,CAAC,GAAI,IAAK,GAAI,GACd,CAAC,GAAI,IAAK,GAAI,GACd,CAAC,GAAI,IAAK,GAAI,GACd,CAAC,GAAI,GAAI,GAAI,GACb,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,EAAG,IAAK,IAAK,GACd,CAAC,EAAG,IAAK,GAAI,GACb,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,GAAI,IAAK,GAAI,GACd,CAAC,GAAI,IAAK,GAAI,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,GAAI,EAAG,GACb,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,GAAI,GACf,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,EAAG,GACd,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK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","sources":["webpack://@reltio/remotes/../mdm-sdk/src/utils/strings.js","webpack://@reltio/remotes/../mdm-sdk/src/utils/general.ts","webpack://@reltio/remotes/../mdm-sdk/src/utils/dates.js","webpack://@reltio/remotes/../mdm-sdk/src/utils/hashGenerators.ts","webpack://@reltio/remotes/../mdm-sdk/src/utils/Maybe.ts","webpack://@reltio/remotes/../mdm-sdk/src/utils/debounce.js","webpack://@reltio/remotes/../mdm-sdk/src/utils/arrays.ts","webpack://@reltio/remotes/../mdm-sdk/src/utils/urls.ts","webpack://@reltio/remotes/../mdm-sdk/src/utils/boolean.ts","webpack://@reltio/remotes/../mdm-sdk/src/utils/objects.js","webpack://@reltio/remotes/../mdm-sdk/src/constants/filterOptions.ts","webpack://@reltio/remotes/../mdm-sdk/src/constants/filter-values.ts","webpack://@reltio/remotes/../mdm-sdk/src/constants/marks.ts","webpack://@reltio/remotes/../mdm-sdk/src/constants/activityFilters.ts","webpack://@reltio/remotes/../mdm-sdk/src/constants/common.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/errors.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/dateRange.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/attributes.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/collaboration.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/metadata.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/search/search.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/search/searchState.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/crosswalks.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/trees.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/workflow.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/dq.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/relation.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/dvf.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/components/chartTypes.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/dashboard/viewTypes.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/profile/viewTypes.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/history.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/network/validation.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/uiConfiguration/layout.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/uiConfiguration/properties.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/graph.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/customScript.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/dcr.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/numberFormat.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/data-types.ts","webpack://@reltio/remotes/../mdm-sdk/src/types/index.ts","webpack://@reltio/remotes/../mdm-sdk/src/constants/special-attr-types.ts","webpack://@reltio/remotes/../mdm-sdk/src/constants/match-rules.ts","webpack://@reltio/remotes/../mdm-sdk/src/mode/index.js","webpack://@reltio/remotes/../mdm-sdk/src/constants/prop-types.js","webpack://@reltio/remotes/../mdm-sdk/src/constants/operatorOptions.ts","webpack://@reltio/remotes/../mdm-sdk/src/constants/network.ts","webpack://@reltio/remotes/../mdm-sdk/src/utils/errors.ts","webpack://@reltio/remotes/../mdm-sdk/src/utils/numbers.ts","webpack://@reltio/remotes/../mdm-sdk/src/utils/imageUtils.ts","webpack://@reltio/remotes/../mdm-sdk/src/utils/dateInterval.ts","webpack://@reltio/remotes/../mdm-sdk/src/entity/editMode/AttributesEditor.ts","webpack://@reltio/remotes/../mdm-sdk/src/uris/constants.js","webpack://@reltio/remotes/../mdm-sdk/src/uris/index.js","webpack://@reltio/remotes/../mdm-sdk/src/metadata/referenceAttribute.js","webpack://@reltio/remotes/../mdm-sdk/src/metadata/attributes.ts","webpack://@reltio/remotes/../mdm-sdk/src/permissions/configPermissions.ts","webpack://@reltio/remotes/../mdm-sdk/src/metadata/entityTypes.ts","webpack://@reltio/remotes/../mdm-sdk/src/metadata/relations.js","webpack://@reltio/remotes/../mdm-sdk/src/permissions/metadataPermissions.ts","webpack://@reltio/remotes/../mdm-sdk/src/permissions/attributesPermissions.js","webpack://@reltio/remotes/../mdm-sdk/src/permissions/permissions.js","webpack://@reltio/remotes/../mdm-sdk/src/permissions/userPermissions.js","webpack://@reltio/remotes/../mdm-sdk/src/metadata/attributesList.ts","webpack://@reltio/remotes/../mdm-sdk/src/metadata/parseMetadata.js","webpack://@reltio/remotes/../mdm-sdk/src/metadata/validateMetadata.ts","webpack://@reltio/remotes/../mdm-sdk/src/metadata/graphTypes.ts","webpack://@reltio/remotes/../mdm-sdk/src/metadata/matchGroups.js","webpack://@reltio/remotes/../mdm-sdk/src/metadata/interactionTypes.ts","webpack://@reltio/remotes/../mdm-sdk/src/metadata/required.js","webpack://@reltio/remotes/../mdm-sdk/src/metadata/entityAttributeTypesSelectionStrategies.js","webpack://@reltio/remotes/../mdm-sdk/src/localization/localization.js","webpack://@reltio/remotes/../mdm-sdk/src/metadata/localizeMetadata.js","webpack://@reltio/remotes/../mdm-sdk/src/metadata/normalizeMetadata.ts","webpack://@reltio/remotes/../mdm-sdk/src/metadata/sources.ts","webpack://@reltio/remotes/../mdm-sdk/src/metadata/roles.js","webpack://@reltio/remotes/../mdm-sdk/src/metadata/attributesTree.ts","webpack://@reltio/remotes/../mdm-sdk/src/metadata/groupTypes.ts","webpack://@reltio/remotes/../mdm-sdk/src/metadata/survivorshipStrategies.ts","webpack://@reltio/remotes/../mdm-sdk/src/metadata/availableTypes.ts","webpack://@reltio/remotes/../mdm-sdk/src/attributes/general.ts","webpack://@reltio/remotes/../mdm-sdk/src/attributes/referenceAttribute.ts","webpack://@reltio/remotes/../mdm-sdk/src/attributes/findValue.ts","webpack://@reltio/remotes/../mdm-sdk/src/attributes/activeness.ts","webpack://@reltio/remotes/../mdm-sdk/src/attributes/special.ts","webpack://@reltio/remotes/../mdm-sdk/src/attributes/editing.ts","webpack://@reltio/remotes/../mdm-sdk/src/attributes/pinned.ts","webpack://@reltio/remotes/../mdm-sdk/src/attributes/imageAttribute.ts","webpack://@reltio/remotes/../mdm-sdk/src/attributes/attributesList.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/index.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/lookups.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/utils.ts","webpack://@reltio/remotes/../mdm-sdk/src/filters/filterOptionsHelpers.js","webpack://@reltio/remotes/../mdm-sdk/src/filters/getFilterOptionsForDataTypeDefinition.js","webpack://@reltio/remotes/../mdm-sdk/src/search/operators.ts","webpack://@reltio/remotes/../mdm-sdk/src/filters/bracketsUtils.ts","webpack://@reltio/remotes/../mdm-sdk/src/filters/FilterBuilder.js","webpack://@reltio/remotes/../mdm-sdk/src/filters/filterValueHelpers.ts","webpack://@reltio/remotes/../mdm-sdk/src/globalContextValue/index.ts","webpack://@reltio/remotes/../mdm-sdk/src/filters/basicFilterBuildRules.js","webpack://@reltio/remotes/../mdm-sdk/src/filters/validation.js","webpack://@reltio/remotes/../mdm-sdk/src/filters/buildFilterQueryString.ts","webpack://@reltio/remotes/../mdm-sdk/src/filters/globalFilter.js","webpack://@reltio/remotes/../mdm-sdk/src/filters/getFilterOptions.js","webpack://@reltio/remotes/../mdm-sdk/src/entity/label.ts","webpack://@reltio/remotes/../mdm-sdk/src/entity/utils.ts","webpack://@reltio/remotes/../mdm-sdk/src/entity/image.ts","webpack://@reltio/remotes/../mdm-sdk/src/entity/entity.ts","webpack://@reltio/remotes/../mdm-sdk/src/entity/dcrRequests.ts","webpack://@reltio/remotes/../mdm-sdk/src/relations/relationUriProcessor.ts","webpack://@reltio/remotes/../mdm-sdk/src/relations/commands.ts","webpack://@reltio/remotes/../mdm-sdk/src/relations/connections.ts","webpack://@reltio/remotes/../mdm-sdk/src/relations/attributesList.js","webpack://@reltio/remotes/../mdm-sdk/src/relations/config.ts","webpack://@reltio/remotes/../mdm-sdk/src/relations/index.ts","webpack://@reltio/remotes/../mdm-sdk/src/validation/errors.ts","webpack://@reltio/remotes/../mdm-sdk/src/validation/required.ts","webpack://@reltio/remotes/../mdm-sdk/src/validation/entities.ts","webpack://@reltio/remotes/../mdm-sdk/src/validation/connections.ts","webpack://@reltio/remotes/../mdm-sdk/src/validation/hierarchy.ts","webpack://@reltio/remotes/../mdm-sdk/src/validation/validationServiceRequest.ts","webpack://@reltio/remotes/../mdm-sdk/src/validation/validationServiceResponse.ts","webpack://@reltio/remotes/../mdm-sdk/src/validation/dateRange.ts","webpack://@reltio/remotes/../mdm-sdk/src/filters/basicFilterClauses.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/search.js","webpack://@reltio/remotes/../mdm-sdk/src/network/api/facetedAttributesData.js","webpack://@reltio/remotes/../mdm-sdk/src/network/api/entities.js","webpack://@reltio/remotes/../mdm-sdk/src/network/api/interactions.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/file.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/savedSearches.js","webpack://@reltio/remotes/../mdm-sdk/src/network/api/helpers/relations.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/relations.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/recentSearches.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/tree.js","webpack://@reltio/remotes/../mdm-sdk/src/network/api/activities.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/workflow.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/matches.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/dtss.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/metadata.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/graphSearch.js","webpack://@reltio/remotes/../mdm-sdk/src/network/api/collaboration.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/services.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/imageService.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/dcr.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/export.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/crosswalks.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/dq.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/dvf.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/mlDq.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/tenantPermissions.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/attributes.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/history.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/customSandbox.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/validation.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/tenants.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/preferences.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/token.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/exportDQ.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/api/helpers/entities.ts","webpack://@reltio/remotes/../mdm-sdk/src/entity/temporary.ts","webpack://@reltio/remotes/../mdm-sdk/src/entity/objectsHierarchy.ts","webpack://@reltio/remotes/../mdm-sdk/src/attributes/valuePath.ts","webpack://@reltio/remotes/../mdm-sdk/src/attributes/historyAppearance.ts","webpack://@reltio/remotes/../mdm-sdk/src/crosswalks/crosswalksTree.ts","webpack://@reltio/remotes/../mdm-sdk/src/crosswalks/index.ts","webpack://@reltio/remotes/../mdm-sdk/src/entity/editMode/AttributesDiff.ts","webpack://@reltio/remotes/../mdm-sdk/src/entity/history/HistoryManager.ts","webpack://@reltio/remotes/../mdm-sdk/src/collaboration/objectIds.ts","webpack://@reltio/remotes/../mdm-sdk/src/collaboration/relatedObjectUris.ts","webpack://@reltio/remotes/../mdm-sdk/src/collaboration/common.ts","webpack://@reltio/remotes/../mdm-sdk/src/interactions/index.ts","webpack://@reltio/remotes/../mdm-sdk/src/ui/popups.js","webpack://@reltio/remotes/../mdm-sdk/src/ui/colorsGenerator.ts","webpack://@reltio/remotes/../mdm-sdk/src/ui/uniqueColorsGenerator.ts","webpack://@reltio/remotes/../mdm-sdk/src/uiConfiguration/utils/converter.ts","webpack://@reltio/remotes/../mdm-sdk/src/uiConfiguration/dashboard/configConverters.ts","webpack://@reltio/remotes/../mdm-sdk/src/uiConfiguration/utils/perspective.ts","webpack://@reltio/remotes/../mdm-sdk/src/uiConfiguration/profile/profileConverter.ts","webpack://@reltio/remotes/../mdm-sdk/src/uiConfiguration/profile/views.ts","webpack://@reltio/remotes/../mdm-sdk/src/uiConfiguration/oldUIConfigConverter/extensions.ts","webpack://@reltio/remotes/../mdm-sdk/src/uiConfiguration/oldUIConfigConverter/layout/preparePerspectives.ts","webpack://@reltio/remotes/../mdm-sdk/src/uiConfiguration/oldUIConfigConverter/layout/constants.ts","webpack://@reltio/remotes/../mdm-sdk/src/uiConfiguration/oldUIConfigConverter/layout/convertOldUIConfigToLayout.ts","webpack://@reltio/remotes/../mdm-sdk/src/uiConfiguration/oldUIConfigConverter/pivoting/convertOldUIConfigToPivotingItems.ts","webpack://@reltio/remotes/../mdm-sdk/src/uiConfiguration/oldUIConfigConverter/properties/convertOldUIConfigToProperties.ts","webpack://@reltio/remotes/../mdm-sdk/src/uiConfiguration/oldUIConfigConverter/convertOldUIConfigToNewConfig.ts","webpack://@reltio/remotes/../mdm-sdk/src/uiConfiguration/utils/grid.ts","webpack://@reltio/remotes/../mdm-sdk/src/worker/index.ts","webpack://@reltio/remotes/../mdm-sdk/src/tenant/index.ts","webpack://@reltio/remotes/../mdm-sdk/src/attributePresentation/percentStrategy.ts","webpack://@reltio/remotes/../mdm-sdk/src/attributePresentation/attributePresentation.ts","webpack://@reltio/remotes/../mdm-sdk/src/intl/number.ts","webpack://@reltio/remotes/../mdm-sdk/src/intl/index.ts","webpack://@reltio/remotes/../mdm-sdk/src/formatting/numbers.js","webpack://@reltio/remotes/../mdm-sdk/src/formatting/file.js","webpack://@reltio/remotes/../mdm-sdk/src/lookups/codes.js","webpack://@reltio/remotes/../mdm-sdk/src/lookups/lists.js","webpack://@reltio/remotes/../mdm-sdk/src/formatting/index.ts","webpack://@reltio/remotes/../mdm-sdk/src/theme/index.ts","webpack://@reltio/remotes/../mdm-sdk/src/network/requestProvider.ts","webpack://@reltio/remotes/../mdm-sdk/src/marks/index.js","webpack://@reltio/remotes/../mdm-sdk/src/trees/utils.ts","webpack://@reltio/remotes/../mdm-sdk/src/trees/sorting.js","webpack://@reltio/remotes/../mdm-sdk/src/map/googleGeocoder.ts","webpack://@reltio/remotes/../mdm-sdk/src/map/utils.ts","webpack://@reltio/remotes/../mdm-sdk/src/map/fromReferenceStrategy.ts","webpack://@reltio/remotes/../mdm-sdk/src/map/fromNestedStrategy.ts","webpack://@reltio/remotes/../mdm-sdk/src/map/resolve.ts","webpack://@reltio/remotes/../mdm-sdk/src/search/facets.js","webpack://@reltio/remotes/../mdm-sdk/src/search/placeholders.js","webpack://@reltio/remotes/../mdm-sdk/src/search/links.ts","webpack://@reltio/remotes/../mdm-sdk/src/search/map.js","webpack://@reltio/remotes/../mdm-sdk/src/search/readableQuery/primitives.ts","webpack://@reltio/remotes/../mdm-sdk/src/search/readableQuery/builderHelpers.ts","webpack://@reltio/remotes/../mdm-sdk/src/search/readableQuery/operationsBuilder.ts","webpack://@reltio/remotes/../mdm-sdk/src/search/groups.js","webpack://@reltio/remotes/../mdm-sdk/src/search/readableQuery/attributeHelpers.ts","webpack://@reltio/remotes/../mdm-sdk/src/search/readableQuery/readableAttribute.ts","webpack://@reltio/remotes/../mdm-sdk/src/search/readableQuery/readableQueryBuilder.ts","webpack://@reltio/remotes/../mdm-sdk/src/search/readableQuery/hierarchyBuilder.ts","webpack://@reltio/remotes/../mdm-sdk/src/search/searchState/parseTransitionAdvancedSearch.js","webpack://@reltio/remotes/../mdm-sdk/src/search/searchState/parseAdvancedSearch.js","webpack://@reltio/remotes/../mdm-sdk/src/search/searchState/newSearchState.ts","webpack://@reltio/remotes/../mdm-sdk/src/search/searchState/oldSearchState.ts","webpack://@reltio/remotes/../mdm-sdk/src/search/searchState/index.ts","webpack://@reltio/remotes/../mdm-sdk/src/matches/transitiveMatches.js","webpack://@reltio/remotes/../mdm-sdk/src/matches/matchRuleSummaries.ts","webpack://@reltio/remotes/../mdm-sdk/src/dependentLookups/structure.ts","webpack://@reltio/remotes/../mdm-sdk/src/dependentLookups/valuesHierarchy.ts","webpack://@reltio/remotes/../mdm-sdk/src/dependentLookups/config.ts","webpack://@reltio/remotes/../mdm-sdk/src/dependentLookups/utils.ts","webpack://@reltio/remotes/../mdm-sdk/src/pivoting/index.ts","webpack://@reltio/remotes/../mdm-sdk/src/preferences/index.ts","webpack://@reltio/remotes/../mdm-sdk/src/index.ts","webpack://@reltio/remotes/../mdm-sdk/src/utils/Colors.js","webpack://@reltio/remotes/../mdm-sdk/src/utils/DependencyManager.js"],"sourcesContent":["import {curry, replace} from 'ramda';\n\nconst normalize = (str) =>\n typeof str === 'string' && typeof str.normalize === 'function'\n ? str.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '')\n : str;\n\nconst search = (whereStr, whatStr) => {\n whatStr = (normalize(whatStr) || '').toLowerCase();\n whereStr = (normalize(whereStr) || '').toLowerCase();\n return whereStr.includes(whatStr);\n};\n\nconst sort = curry((sortOrder, strA = '', strB = '') => {\n const isAsc = sortOrder.toLowerCase() === 'asc';\n strA = strA.toLowerCase();\n strB = strB.toLowerCase();\n if (strA < strB) return isAsc ? -1 : 1;\n if (strA > strB) return isAsc ? 1 : -1;\n return 0;\n});\n\nconst removeLineBreaks = replace(/(\\r\\n|\\n|\\r)/gm, '');\n\nexport {normalize, removeLineBreaks, search, sort};\n","import {anyPass, isEmpty, isNil} from 'ramda';\n\nconst isActiveObject = (object: {startDate?: number; endDate?: number} = {}) => {\n const {startDate, endDate} = object;\n const now = Date.now();\n return !((endDate && endDate < now) || (startDate && startDate > now));\n};\n\nconst isEmptyValue: <T>(agr: T) => boolean = anyPass([isEmpty, isNil]);\nconst promisifyCallback = <T>(fn) => (): Promise<T> => new Promise(fn);\nconst promiseAllSettled = <T>(promises: Array<Promise<T>>): Promise<{status: string; value?: T; reason?: string}[]> =>\n Promise.all(\n promises.map((promise) =>\n promise\n .then((value) => ({\n status: 'fulfilled',\n value\n }))\n .catch((reason) => ({\n status: 'rejected',\n reason\n }))\n )\n );\n\nexport {isActiveObject, isEmptyValue, promisifyCallback, promiseAllSettled};\n","import {\n either,\n isNil,\n equals,\n test,\n always,\n cond,\n T,\n pipe,\n last,\n propOr,\n both,\n indexOf,\n splitAt,\n inc,\n map,\n trim,\n __,\n join,\n isEmpty,\n reject,\n append,\n when,\n init\n} from 'ramda';\nimport moment from 'moment';\nimport {isEmptyValue} from './general';\n\nconst isValidMomentDate = (moment) => moment && moment.isValid();\nconst isValidMomentDateOrNull = either(isValidMomentDate, isNil);\nconst isDateInRange = (min, max) => (date) => {\n if (isNil(date)) {\n return true;\n }\n const momentDate = moment(date);\n return momentDate.isBetween(min, max, 'days', '[]');\n};\nconst momentToDate = (moment) => moment && moment.toDate();\n\nconst clearDateTime = (date) => {\n if (date) {\n date.setHours(0, 0, 0, 0);\n }\n return date;\n};\n\nconst getLocaleFormat = () => {\n const dateFormat = moment.localeData().longDateFormat('L');\n const timeFormat = moment.localeData().longDateFormat('LTS');\n return `${dateFormat} ${timeFormat}`;\n};\n\nconst isToday = (momentable) => moment(momentable).isSame(Date.now(), 'day');\n\nconst toLocalDate = (timestamp) => {\n const date = new Date(timestamp);\n // We are using here safe date to avoid incorrect month/date setting\n // 01 day breaks by negative timezone, 31st may be missed in the month\n // moment can't be used here, because it is working incorrect for 1900-01-01 date\n const localDate = new Date('2023-01-05');\n localDate.setFullYear(date.getUTCFullYear());\n localDate.setMonth(date.getUTCMonth());\n localDate.setDate(date.getUTCDate());\n\n localDate.setHours(date.getUTCHours());\n localDate.setMinutes(date.getUTCMinutes());\n localDate.setSeconds(date.getUTCSeconds());\n localDate.setMilliseconds(date.getUTCMilliseconds());\n\n return localDate;\n};\n\nconst toUtcDate = (timestamp) => {\n const date = new Date(timestamp);\n const utcTimestamp = Date.UTC(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds()\n );\n return new Date(utcTimestamp);\n};\n\nconst getBoundOfDay = (bound) => (date, inUtc) =>\n (inUtc ? moment.utc(date) : moment(date))\n [bound]('day') //eslint-disable-line\n .valueOf();\n\nconst getStartOfDay = getBoundOfDay('startOf');\n\nconst getEndOfDay = getBoundOfDay('endOf');\n\nconst formatDate = (date) => {\n return moment(date).format(moment.localeData().longDateFormat('L'));\n};\n\nconst formatTime = (date) => {\n return moment(date).format(moment.localeData().longDateFormat('LTS'));\n};\n\nconst formatDateTime = (date) => {\n return `${formatDate(date)} ${formatTime(date)}`;\n};\n\nconst isOneDigitMask = equals('9');\nconst isTwoDigitMask = equals('99');\nconst isFourDigitMask = equals('9999');\nconst isThreeCharsMask = test(/^[az][az][az]$/);\nconst isFourCharsMask = test(/^[az][az][az][az]$/);\nconst isDigitOnlyMask = test(/^9+$/);\nconst isDigitWithCharsMask = test(/^[9az]+$/);\n\nconst getMomentFormatFromMonthMask = cond([\n [isOneDigitMask, always('M')],\n [isTwoDigitMask, always('MM')],\n [isThreeCharsMask, always('MMM')],\n [isFourCharsMask, always('MMMM')],\n [isDigitWithCharsMask, always('Mo')],\n [T, always('MM')]\n]);\n\nconst getMomentFormatFromDayMask = cond([\n [isOneDigitMask, always('D')],\n [isTwoDigitMask, always('DD')],\n [isDigitWithCharsMask, always('Do')],\n [T, always('DD')]\n]);\n\nconst getMomentFormatFromYearMask = cond([\n [isOneDigitMask, always('y')],\n [isTwoDigitMask, always('YY')],\n [isFourDigitMask, always('YYYY')],\n [isDigitOnlyMask, always('YYYYYY')],\n [T, always('YYYY')]\n]);\n\nconst getMomentFormatFromHourMask = (mask, is12HourClock) =>\n cond([\n [both(always(is12HourClock), isOneDigitMask), always('h')],\n [both(always(is12HourClock), isTwoDigitMask), always('hh')],\n [isOneDigitMask, always('H')],\n [isTwoDigitMask, always('HH')],\n [T, always(is12HourClock ? 'hh' : 'HH')]\n ])(mask);\n\nconst getMomentFormatFromMinuteMask = cond([\n [isOneDigitMask, always('m')],\n [isTwoDigitMask, always('mm')],\n [T, always('mm')]\n]);\n\nconst getMomentFormatFromSecondsMask = cond([\n [isOneDigitMask, always('s')],\n [isTwoDigitMask, always('ss')],\n [T, always('ss')]\n]);\n\nconst dateMaskRegExp = /([9az]+)([^9az]+)*/g;\nconst getMomentFormatFromDateMask = (mask) => {\n const maskMatchGroups = [...mask.toLowerCase().matchAll(dateMaskRegExp)];\n if (isEmptyValue(mask) || maskMatchGroups.length > 0) {\n const [, monthMask = '', monthDelimiter = ''] = propOr([], 0, maskMatchGroups);\n const [, dayMask = '', dayDelimiter = ''] = propOr([], 1, maskMatchGroups);\n const [, yearMask = '', yearDelimiter = ''] = propOr([], 2, maskMatchGroups);\n return join('', [\n getMomentFormatFromMonthMask(monthMask),\n monthDelimiter,\n getMomentFormatFromDayMask(dayMask),\n dayDelimiter,\n getMomentFormatFromYearMask(yearMask),\n yearDelimiter\n ]);\n } else {\n return mask;\n }\n};\n\nconst timeMaskRegExp = /(9+)([^9]+)*/g;\nconst getMomentFormatFromTimeMask = (mask) => {\n const maskMatchGroups = [...mask.toLowerCase().matchAll(timeMaskRegExp)];\n if (isEmptyValue(mask) || maskMatchGroups.length > 0) {\n const [, hourMask = '', hourDelimiter = ''] = propOr([], 0, maskMatchGroups);\n const [, minuteMask = '', minuteDelimiter = ''] = propOr([], 1, maskMatchGroups);\n const [, secondsMask = '', secondsDelimiter = ''] = propOr([], 2, maskMatchGroups);\n const is12HourClock = pipe(last, propOr('', 2), test(/^[^9]+$/))(maskMatchGroups);\n const formatArray = reject(isEmpty, [\n getMomentFormatFromHourMask(hourMask, is12HourClock),\n hourDelimiter,\n getMomentFormatFromMinuteMask(minuteMask),\n minuteDelimiter,\n secondsMask ? getMomentFormatFromSecondsMask(secondsMask) : '',\n secondsDelimiter\n ]);\n const period = is12HourClock ? ' A' : '';\n const appendPeriodFormat = pipe(init, append(period));\n return pipe(when(always(is12HourClock), appendPeriodFormat), join(''))(formatArray);\n } else {\n return mask;\n }\n};\nconst getMomentFormatFromDateTimeMask = (mask) => {\n const [dateMask = '', timeMask = ''] = pipe(indexOf(' '), inc, splitAt(__, mask), map(trim))(mask);\n return `${getMomentFormatFromDateMask(dateMask)} ${getMomentFormatFromTimeMask(timeMask)}`;\n};\n\nconst parseTimestamp = (str) => {\n const timestamp = Number(str);\n return Number.isNaN(timestamp) ? str : timestamp;\n};\n\nconst durationToTimestamp = (period) => {\n const [amount, unit] = period;\n return moment().subtract(amount, unit).valueOf();\n};\n\nexport {\n isValidMomentDate,\n isDateInRange,\n isValidMomentDateOrNull,\n momentToDate,\n clearDateTime,\n isToday,\n toLocalDate,\n toUtcDate,\n getStartOfDay,\n getEndOfDay,\n formatDate,\n formatDateTime,\n formatTime,\n getLocaleFormat,\n getMomentFormatFromDateMask,\n getMomentFormatFromTimeMask,\n getMomentFormatFromDateTimeMask,\n parseTimestamp,\n durationToTimestamp\n};\n","export const getHash = (str?: string): string => {\n if (!str || str.length == 0) {\n return '0';\n }\n return (\n str\n .split('')\n .map((val) => val.charCodeAt(0))\n .reduce((hash, chr) => {\n hash = (hash << 5) - hash + chr;\n hash |= 0;\n return hash;\n }, 0) + ''\n );\n};\n","import {isNil} from 'ramda';\nimport {isEmptyValue} from './general';\n\nconst isNone = (value) => value === null || value === undefined;\n\nexport class Maybe<T> {\n private value: T | null | undefined;\n\n private constructor(value: T | null | undefined) {\n this.value = value;\n }\n public isNone(): boolean {\n return isNil(this.value);\n }\n public extract(): T {\n return this.value;\n }\n public orSome<U>(defaultValue: U): T | U {\n return isNil(this.value) ? defaultValue : this.value;\n }\n public map<U>(transformer: (val: NonNullable<T>) => U): Maybe<U> {\n return !isNil(this.value) ? Maybe.Some<U>(transformer(this.value)) : Maybe.None();\n }\n static Some<T>(value: T | null | undefined) {\n return new Maybe<T>(value);\n }\n static None() {\n return new Maybe<null>(null);\n }\n static fromFalsy<T>(value: T | null | undefined) {\n return !value ? Maybe.None() : Maybe.Some<T>(value);\n }\n static fromNull<T>(value: T | null | undefined) {\n return isNone(value) ? Maybe.None() : Maybe.Some<T>(value);\n }\n static fromUndefined<T>(value: T | null | undefined) {\n return value === undefined ? Maybe.None() : Maybe.Some<T>(value);\n }\n static fromEmpty<T>(value: T | null | undefined) {\n return isEmptyValue(value) ? Maybe.None() : Maybe.Some<T>(value);\n }\n}\n","export const debounce = (f, ms) => {\n let timer = null;\n return function (...args) {\n const onComplete = () => {\n f.apply(this, args);\n timer = null;\n };\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(onComplete, ms);\n };\n};\n","import {identity, prop, when, is} from 'ramda';\n\ntype ComparatorFunction = <T>(a: T, b: T) => number;\n\nexport const orderByArrayComparator = <T>(arrayWithReferenceOrder: Array<T>, property?: string): ComparatorFunction => (\n a: unknown,\n b: unknown\n): number => {\n const getter = property ? prop(property) : identity;\n return arrayWithReferenceOrder.indexOf(getter(a)) - arrayWithReferenceOrder.indexOf(getter(b));\n};\nexport const getFirstElementIfArray = when(is(Array), prop(0));\n\nexport const wrapInArrayIfNeeded = <T>(x: T | T[]): T[] => (Array.isArray(x) ? x : [x]);\nexport const wrapInArray = <T>(x: T): Array<T> => [x];\n","import {PrimitiveValue} from '../types';\n\nconst isUrl = (value: PrimitiveValue) =>\n value // consistent implementation with old mdm ui\n ? ['www.', 'http://', 'https://', 'ftp://', 'ftps://', 'smb://', 'data:'].some((scheme) =>\n String(value).toLowerCase().startsWith(scheme)\n )\n : false;\n\nconst isEmail = (email: PrimitiveValue) => /^\\S+@\\S+\\.\\S+$/.test(String(email).toLowerCase());\n\nconst addProtocolToLink = (link: string) => {\n link = link || '';\n if (isEmail(link)) {\n return `mailto:${link}`;\n }\n // consistent implementation with old mdm ui\n // if starts with www, or has more than one dot, then append http to form an absolute url\n if (!link.includes('://') && (link.toLowerCase().startsWith('www.') || link.split('.').length > 2)) {\n return `http://${link}`;\n }\n return link;\n};\n\nexport {isUrl, isEmail, addProtocolToLink};\n","import {is, when} from 'ramda';\n\nconst stringToBoolean = (str) => (str === '' ? undefined : str.toLowerCase() === 'true');\n\nconst parseBoolean: (value: string | boolean) => boolean = when(is(String), stringToBoolean);\n\nexport {parseBoolean};\n","//Checks if value is the language type of Object (see lodash isObject)\nexport const isObject = (value) => {\n const type = typeof value;\n return value != null && ['object', 'function'].includes(type);\n};\n\nexport const iterate = (object, fn, _level = 0) => {\n if (!object || !fn) {\n return;\n }\n if (Array.isArray(object)) {\n for (let i = 0; i < object.length; i++) {\n fn.call(null, [i, object[i]], object, _level);\n iterate(object[i], fn, _level + 1);\n }\n } else if (isObject(object)) {\n for (let [key, value] of Object.entries(object)) {\n fn.call(null, [key, value], object, _level);\n iterate(value, fn, _level + 1);\n }\n }\n};\nexport const getAllPaths = function (tree) {\n const leaves = [];\n const walk = (obj, path) => {\n path = path || [];\n for (let n in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, n)) {\n if (Array.isArray(obj)) {\n n = parseInt(n, 10);\n }\n if (isObject(obj[n])) {\n walk(obj[n], path.concat(n));\n } else {\n leaves.push(path.concat(n));\n }\n }\n }\n };\n walk(tree);\n return leaves;\n};\n","const FilterOptionsValues = {\n EQUALS: 'equals',\n NOT_EQUALS: 'not equals',\n EXISTS: 'exists',\n FULL_TEXT: 'fullText',\n HAS_ALL: 'hasAll',\n //IN: 'in',\n //NOT_IN: 'notIn',\n MISSING_VALUE: 'missing',\n IN_RANGE: 'range',\n // NOT_IN_RANGE: 'not range',\n LT: 'lt',\n LTE: 'lte',\n GT: 'gt',\n GTE: 'gte',\n STARTS_WITH: 'startsWith',\n COUNT_EQUALS: 'count.equals',\n COUNT_NOT_EQUALS: 'count.not.equals',\n COUNT_LT: 'count.less',\n COUNT_LTE: 'count.less.or.equals',\n COUNT_GT: 'count.greater',\n COUNT_GTE: 'count.greater.or.equals',\n COUNT_RANGE: 'count.range',\n IN_FILE: 'in.file',\n NOT_IN_FILE: 'not.in.file',\n CONTAINS: 'contains',\n ON: 'on',\n BEFORE: 'before',\n AFTER: 'after',\n WITHIN: 'within'\n};\nconst AdditionalFilterOptionsValues = {\n LIST_EQUALS: 'listEquals',\n NOT_LIST_EQUALS: 'not listEquals',\n LIST_EQUALS_CASE_SENSITIVE: 'listEqualsCaseSensitive',\n NOT_LIST_EQUALS_CASE_SENSITIVE: 'not listEqualsCaseSensitive'\n};\nconst FilterOptionsLabels = {\n [FilterOptionsValues.EQUALS]: 'equals',\n [FilterOptionsValues.NOT_EQUALS]: 'not',\n [FilterOptionsValues.STARTS_WITH]: 'starts with',\n // [FilterOptionsValues.IN]: 'in',\n // [FilterOptionsValues.NOT_IN]: 'not in',\n [FilterOptionsValues.MISSING_VALUE]: 'missing value',\n [FilterOptionsValues.IN_RANGE]: 'in range',\n // [FilterOptionsValues.NOT_IN_RANGE]: 'not in range',\n [FilterOptionsValues.HAS_ALL]: 'has all',\n [FilterOptionsValues.FULL_TEXT]: 'full text',\n [FilterOptionsValues.EXISTS]: 'exists',\n [FilterOptionsValues.COUNT_EQUALS]: 'count equals',\n [FilterOptionsValues.COUNT_NOT_EQUALS]: 'count not equal',\n [FilterOptionsValues.COUNT_LT]: 'count less',\n [FilterOptionsValues.COUNT_LTE]: 'count less or equal',\n [FilterOptionsValues.COUNT_GT]: 'count greater',\n [FilterOptionsValues.COUNT_GTE]: 'count greater or equal',\n [FilterOptionsValues.COUNT_RANGE]: 'count in range',\n [FilterOptionsValues.LT]: 'less than',\n [FilterOptionsValues.LTE]: 'less than or equal',\n [FilterOptionsValues.GT]: 'greater than',\n [FilterOptionsValues.GTE]: 'greater than or equal',\n [FilterOptionsValues.IN_FILE]: 'in file',\n [FilterOptionsValues.NOT_IN_FILE]: 'not in file',\n [FilterOptionsValues.CONTAINS]: 'contains',\n [FilterOptionsValues.ON]: 'on',\n [FilterOptionsValues.BEFORE]: 'before',\n [FilterOptionsValues.AFTER]: 'after',\n [FilterOptionsValues.WITHIN]: 'within'\n};\n\nenum OldFilterOptions {\n IN = 'in',\n NOT_IN = 'notIn',\n NOT_IN_RANGE = 'not range'\n}\n\nconst convertOldFilterOption = (filter: OldFilterOptions | string): string => {\n const convertedOldFilterOptions = {\n [OldFilterOptions.IN]: FilterOptionsValues.EQUALS,\n [OldFilterOptions.NOT_IN]: FilterOptionsValues.NOT_EQUALS\n };\n return convertedOldFilterOptions[filter] || filter;\n};\n\nexport {\n FilterOptionsValues as default,\n FilterOptionsLabels,\n AdditionalFilterOptionsValues,\n OldFilterOptions,\n convertOldFilterOption\n};\n","enum DateRangeValue {\n LAST_DAY = 'lastDay',\n LAST_WEEK = 'lastWeek',\n LAST_MONTH = 'lastMonth',\n LAST_6MONTHS = 'last6Months',\n LAST_YEAR = 'lastYear',\n PICK_DATE = 'pickDate'\n}\n\nenum SearchDrivenDateRangeValues {\n LAST_3DAYS = 'last3Days'\n}\n\nexport type DatePeriod = Omit<DateRangeValue, 'PICK_DATE'> | SearchDrivenDateRangeValues | [Date, Date];\n\nconst AllDateRangeOrder = [\n 'LAST_DAY',\n 'LAST_3DAYS',\n 'LAST_WEEK',\n 'LAST_MONTH',\n 'LAST_6MONTHS',\n 'LAST_YEAR',\n 'PICK_DATE'\n];\nconst AllDateRangeValues: Record<string, DateRangeValue | SearchDrivenDateRangeValues> = AllDateRangeOrder.reduce(\n (acc, rangeKey) => {\n acc[rangeKey] = DateRangeValue[rangeKey] || SearchDrivenDateRangeValues[rangeKey];\n return acc;\n },\n {}\n);\n\nconst DateRangeLabels = {\n [DateRangeValue.LAST_DAY]: 'Last 24 hours',\n [SearchDrivenDateRangeValues.LAST_3DAYS]: 'Last 3 days',\n [DateRangeValue.LAST_WEEK]: 'Last 7 days',\n [DateRangeValue.LAST_MONTH]: 'Last month',\n [DateRangeValue.LAST_6MONTHS]: 'Last 6 months',\n [DateRangeValue.LAST_YEAR]: 'Last year',\n [DateRangeValue.PICK_DATE]: 'Pick date'\n};\n\nexport {DateRangeValue as default, DateRangeLabels, SearchDrivenDateRangeValues, AllDateRangeValues};\n","const DraftMarks = {\n NEW: 'new',\n REMOVED: 'removed',\n EDITED: 'edited',\n IGNORED: 'ignored'\n};\n\nexport {DraftMarks};\n","export default {\n ACTIVE_ONLY: 'active',\n INACTIVE_ONLY: 'not_active',\n ALL: 'all'\n};\n","const NO_LABEL = '<No label>';\nconst LOCALE_ATTRIBUTE_PRESENTATION = '__number';\n\nenum Directions {\n IN = 'in',\n OUT = 'out'\n}\n\nexport {Directions, LOCALE_ATTRIBUTE_PRESENTATION, NO_LABEL};\n","import {AttributeValuePathItem} from './attributes';\nimport {AttributeType} from './metadata';\n\nexport enum ErrorType {\n missed = 'missed',\n missedRefEntity = 'missedRefEntity',\n invalid = 'invalid'\n}\n\nexport enum ErrorSource {\n local = 'local',\n validationService = 'validationService'\n}\n\nexport type ErrorPathItem = AttributeValuePathItem & {\n label: string;\n};\n\nexport type AttributeError = {\n type: ErrorType;\n attributeType?: AttributeType;\n attributeTypeUri: string;\n parentUri: string;\n uri?: string;\n message?: string;\n deactivated?: boolean;\n severity?: ErrorSeverity;\n path?: ErrorPathItem[];\n source?: ErrorSource;\n};\n\nexport enum ErrorSeverity {\n ERROR = 'ERROR',\n WARNING = 'WARNING'\n}\n\nexport type ValidationServiceError = {\n errorType: 'INCORRECT' | 'MISSED';\n objectParentUri: string;\n objectTypeUri: string;\n objectUri: string | null;\n message: string;\n severity: ErrorSeverity;\n};\n\nexport enum ApiErrorCode {\n OBJECT_NOT_FOUND = 101,\n CROSSWALK_NOT_FOUND = 102,\n TENANT_NOT_CONFIGURED = 127,\n ACCESS_DENIED = 403,\n DVF_NOT_CONFIGURED = 902,\n DCR_ALREADY_EXISTS = 10015,\n WORKFLOW_IS_NOT_REGISTERED_ERROR = 10061\n}\n\nexport type ApiError = {\n errorCode?: ApiErrorCode;\n errorMessage?: string;\n errorData?: Record<string, unknown>;\n errorDetailMessage?: string;\n};\n\nexport type WorkflowApiError = {\n error?: ApiError;\n status?: string;\n};\n","export 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","import {AttributeType, Connection, Entity, TEntityType, TRelationType, PrimitiveValue} from './index';\nimport DataTypes from './data-types';\n\nexport type Paging = {\n totalOvValues?: number;\n totalValues?: number;\n};\n\ntype PagingRecord = {[attributeUri: string]: Paging};\n\nexport type RecordAttributesType = {\n [attributeName: string]: AttributeValue[] | {paging?: PagingRecord};\n};\nexport type AttributeValue = SimpleAttributeValue | ComplexAttributeValue;\n\nexport type AttributeItem = {\n uri?: string;\n parentUri?: string;\n index?: number;\n attributeType: AttributeType;\n value?: Partial<AttributeValue> | ImageAttributeValue['value'] | PrimitiveValue;\n};\n\nexport type SimpleAttributeValue = {\n value: PrimitiveValue;\n ov?: boolean;\n type?: string;\n uri: string;\n lookupCode?: string;\n lookupRawValue?: string;\n pin?: boolean;\n ignored?: boolean;\n};\n\nexport type NestedAttributeValue = {\n value: RecordAttributesType;\n label?: string;\n ov?: boolean;\n uri: string;\n pin?: boolean;\n ignored?: boolean;\n};\n\nexport type ComplexAttributeValue = NestedAttributeValue | ReferenceAttributeValue | ImageAttributeValue;\n\nexport type BasicImageAttributesValue = {\n CdnUrl?: SimpleAttributeValue[];\n CdnUrlPreview?: SimpleAttributeValue[];\n CdnUrlThumbnail?: SimpleAttributeValue[];\n CreationTimestamp?: SimpleAttributeValue[];\n Height?: SimpleAttributeValue[];\n MimeType?: SimpleAttributeValue[];\n Size?: SimpleAttributeValue[];\n Url?: SimpleAttributeValue[];\n UrlPreview?: SimpleAttributeValue[];\n UrlThumbnail?: SimpleAttributeValue[];\n Width?: SimpleAttributeValue[];\n};\n\nexport type RecordImageAttributeValue = {\n [attributeName: string]: SimpleAttributeValue[] | NestedAttributeValue[];\n};\n\nexport type ImageAttributeValue = {\n value: BasicImageAttributesValue & RecordImageAttributeValue;\n ov?: boolean;\n type?: string;\n uri: string;\n pin?: boolean;\n ignored?: boolean;\n};\n\nexport type CrosswalkExternalInfo = {\n dtssInfo?: {\n tenantId: string;\n operationId: string;\n updatedBy: string;\n updatedTime: number;\n status: string;\n };\n proxyTenants?: unknown[];\n updatedBy?: string;\n};\n\nexport type CrosswalkBase = {\n type: string;\n uri: string;\n value: string;\n reltioLoadDate?: string;\n createDate?: string;\n updateDate?: string;\n sourceTable?: string;\n deleteDate?: string;\n sourcePublishDate?: string;\n ownerType?: string;\n crosswalkExternalInfo?: CrosswalkExternalInfo;\n};\n\nexport type Crosswalk = CrosswalkBase & {\n attributes?: string[];\n singleAttributeUpdateDates?: Record<string, string>;\n};\n\nexport type RelationCrosswalk = CrosswalkBase & {\n attributeURIs: string[];\n};\n\nexport type RefEntity = {\n crosswalks: RelationCrosswalk[];\n objectURI: string;\n type: string;\n};\n\nexport type RefRelation = RefEntity & {\n endRefIgnored?: boolean;\n endRefPinned?: boolean;\n startRefIgnored?: boolean;\n startRefPinned?: boolean;\n};\n\nexport type StrictReferenceAttributeValue = Omit<ReferenceAttributeValue, 'refEntity' | 'refRelation'> & {\n refEntity: RefEntity;\n refRelation: RefRelation;\n};\n\nexport type ReferenceAttributeValue = {\n ov?: boolean;\n uri: string;\n label?: string;\n refEntity: RefEntity | RefEntity[];\n refRelation: RefRelation | RefRelation[];\n value: RecordAttributesType;\n relationshipLabel: string;\n startObjectCrosswalks: {\n type: string;\n value: string;\n }[];\n pin?: boolean;\n ignored?: boolean;\n};\n\nexport type AttributesDiffItem =\n | {\n uri: string;\n type: 'UPDATE_ATTRIBUTE' | 'DELETE_ATTRIBUTE' | 'IGNORE_ATTRIBUTE';\n newValue?: Partial<AttributeValue>;\n crosswalk?: Partial<CrosswalkBase>;\n }\n | {\n uri: string;\n type: 'INSERT_ATTRIBUTE';\n newValue?: Partial<AttributeValue>[];\n crosswalk?: Partial<CrosswalkBase>;\n };\nexport type AttributesDiff = AttributesDiffItem[];\n\nexport enum AttributeValuePathItemType {\n attributeValue = 'attributeValue',\n tempEntity = 'tempEntity',\n relationConnection = 'relationConnection'\n}\n\nexport type AttributeValuePathItem = {\n type: AttributeValuePathItemType;\n value: AttributeValue | Entity | Connection;\n valueType: AttributeType | TEntityType | TRelationType;\n};\n\nexport type DataTypeDefinition = {\n type: DataTypes;\n values?: string[];\n lookupCode?: string;\n uri?: string;\n name?: string;\n dependentLookupCode?: string;\n singleValue?: boolean;\n options?: Array<unknown>; //todo: it is due to select, we have to refactor it\n};\n\nexport type SearchParent = {\n name: string;\n label?: string;\n};\n\nexport type PinnedAttribute = {\n attributes: string[];\n roles?: string[];\n};\n","export type Reply = {\n selfLink: string;\n replyId: string;\n createdBy: string;\n createdTime: number;\n modifiedTime: number;\n deleted: boolean;\n action: 'none' | 'resolve' | 'reopen';\n content: string;\n namedUsers: string[];\n};\n\nexport type Comment = {\n selfLink: string;\n commentId: string;\n createdBy: string;\n createdTime: number;\n modifiedTime: number;\n deleted: boolean;\n visibility: string;\n status: 'open' | 'resolved';\n objectId: string;\n objectType: CollaborationObjectTypes;\n permanentLink: string;\n content: string;\n namedUsers: string[];\n replies: Reply[];\n relatedObjectUris: string[];\n};\n\nexport type CommentSummary = Pick<Comment, 'commentId' | 'status'> & {\n replies: number;\n};\n\nexport type CommentsMap = {\n [uri: string]: CommentSummary[];\n};\n\nexport enum CollaborationObjectTypes {\n ENTITY_ATTRIBUTE = 'entityAttribute',\n ENTITY = 'entity',\n RELATION = 'relation',\n POTENTIAL_MATCH = 'potentialMatch',\n RELATION_ATTRIBUTE = 'relationAttribute'\n}\n\nexport type CommentState = {\n mentions?: string[];\n plainTextValue?: string;\n value?: string;\n isEditing?: boolean;\n};\n\nexport type CollaborationStateMap = Record<string, Record<string, CommentState>>;\n","import {PrimitiveValue} from '../index';\n\nexport type SurvivorshipMappingType = {\n attribute: string;\n survivorshipStrategy: string;\n primaryAttributeUri?: string;\n comparisonAttributeUri?: string;\n sourcesUriOrder?: string[];\n};\n\nexport type SurvivorshipGroupType = {\n uri: string;\n mapping: SurvivorshipMappingType[];\n label?: string;\n description?: string;\n default?: boolean;\n sourcesUriOrder?: string[];\n};\n\nexport type MatchGroupType = {\n uri: string;\n label: string;\n type: string;\n scope?: string;\n rule: Record<string, unknown>;\n};\n\nexport type TEntityType = {\n abstract?: boolean;\n access?: string[];\n analyticsAttributes?: AttributeType[];\n attributes?: AttributeType[];\n businessCardAttributeURIs?: string[];\n cleanseConfig?: unknown;\n dataLabelPattern?: string;\n dataTooltipPattern?: string;\n defaultFacetedAttributes?: string[];\n description?: string;\n entityTypeRoleURIs?: string[];\n extendsTypeURI?: string;\n forceOvForUiUpdates?: boolean;\n forceValidate?: boolean;\n geoLocationAttributes?: {\n latitude: string;\n longitude: string;\n }[];\n hidden?: Partial<TEntityType>;\n imageAttributeURIs?: string[];\n label?: string;\n lifecycleActions?: {\n validate: string[];\n };\n matchGroups?: MatchGroupType[];\n secondaryLabelPattern?: string;\n survivorshipGroups?: SurvivorshipGroupType[];\n typeColor?: string;\n typeGraphIcon?: string;\n typeIcon?: string;\n typeImage?: string;\n uri: string;\n};\n\nexport type GraphType = {\n label: string;\n extendsTypeUri?: string;\n relationshipTypeURIs: string[];\n uri: string;\n};\n\ntype DirectionalObject = {\n directionalContext?: {\n labelPattern: string;\n uri: string;\n }[];\n objectTypeURI: string;\n uri: string;\n};\n\nexport enum RelationTypeDirection {\n directed = 'directed',\n undirected = 'undirected',\n bidirectional = 'bidirectional'\n}\n\nexport type TRelationType = {\n attributes?: AttributeType[];\n access?: string[];\n description?: string;\n endObject?: DirectionalObject;\n direction?: RelationTypeDirection;\n implicit?: boolean;\n label: string;\n startObject?: DirectionalObject;\n typeColor?: string;\n uri: string;\n survivorshipGroups?: SurvivorshipGroupType[];\n extendsTypeURI?: string;\n};\n\ntype MemberType = {\n label: string;\n primaryMember: boolean;\n uri: string;\n objectTypeURI: string;\n};\n\nexport type InteractionType = {\n attributes: AttributeType[];\n extendsTypeURI?: string;\n label: string;\n memberTypes: MemberType[];\n uri: string;\n};\n\ntype GroupElements = {\n entityTypeURIs: string[];\n uri: string;\n};\n\ntype GroupType = {\n attributes?: AttributeType[];\n dataLabelPattern: string;\n dataTooltipPattern: string;\n description: string;\n groupElements: GroupElements;\n hasPrimaryMember: boolean;\n label: string;\n memberTypes: MemberType[];\n multiplePrimaryMembers: boolean;\n type: string;\n uri: string;\n};\n\ntype Role = {\n description: string;\n label: string;\n uri: string;\n};\n\nexport type Source = {\n abbreviation: string;\n icon: string;\n label: string;\n uri: string;\n priority?: number;\n};\n\ntype MetadataAttributeType = {\n comparatorClass: {\n class: string;\n };\n matchTokenClass: {\n class: string;\n };\n uri: string;\n valueType: string;\n};\n\ntype CategoryType = {\n acceptableEntityTypes: string[];\n attributes: AttributeType[];\n dataLabelPattern: string;\n description: string;\n label: string;\n uri: string;\n};\n\nexport type SurvivorStrategy = {\n label: string;\n uri: string;\n winnerSourceAttributes?: string[];\n winnerSourceType?: string;\n};\n\nexport type Metadata = {\n abstract?: boolean;\n rdmTenantId?: string;\n attributeTypes?: MetadataAttributeType[];\n categoryTypes?: CategoryType[];\n changeRequestTypes?: {\n uri: string;\n }[];\n description?: string;\n entityTypes: TEntityType[];\n graphTypes?: GraphType[];\n groupTypes?: GroupType[];\n interactionTypes?: InteractionType[];\n label?: string;\n referenceConfigurationURI?: string;\n relationTypes?: TRelationType[];\n roles?: Role[];\n schemaVersion?: string;\n sources?: Source[];\n survivorshipStrategies?: SurvivorStrategy[];\n uri?: string;\n};\n\ntype CardinalityType = {\n minValue: number;\n maxValue: number;\n};\n\nexport type AttributeType = {\n access?: string[];\n analyticsAttributes?: AttributeType[];\n attributeOrdering?: {\n orderType: string;\n orderingStrategy: string;\n };\n attributes?: AttributeType[];\n autoGenerated?: boolean;\n cardinality?: CardinalityType;\n description?: string;\n dependentLookupAttributes?: string[];\n dependentLookupCode?: string;\n lookupCode?: string;\n faceted?: boolean;\n hidden?: boolean;\n important?: boolean;\n label?: string;\n name: Exclude<string, 'paging'>;\n parentAutoGenerated?: boolean;\n relationshipLabelPattern?: string;\n referencedAttributeURIs?: string[];\n referencedEntityTypeURI?: string;\n relationshipTypeURI?: string;\n searchable?: boolean;\n skipInDataAccess?: boolean;\n system?: boolean;\n type: string;\n uri: string;\n required?: boolean;\n singleValue?: boolean;\n defaultValue?: PrimitiveValue;\n dataLabelPattern?: string;\n values?: string[];\n};\n\nexport type AttributeNode = AttributeType & {\n children?: AttributeNode[];\n};\n","import {PrimitiveValue, SimpleAttributeValue} from '..';\n\ntype FilterValue = Pick<SimpleAttributeValue, 'lookupCode' | 'value'> | PrimitiveValue;\n\nexport type SearchFilter = {\n fieldName?: string;\n filter?: string;\n values?: [FilterValue[]] | FilterValue[];\n rawFilter?: string;\n operator?: SearchOperator;\n};\n\nexport enum Order {\n asc = 'asc',\n desc = 'desc'\n}\n\nexport type SortingField = {\n field: string;\n order?: Order;\n};\n\nexport type Keyword = {\n value: string;\n isRawFilter?: boolean;\n};\n\nexport enum ActivityFilter {\n ACTIVE_ONLY = 'active',\n INACTIVE_ONLY = 'not_active',\n ALL = 'all'\n}\n\nexport type GlobalSearchRequestOptions = {\n activityFilter?: ActivityFilter;\n globalFilter?: string;\n searchOptions?: string;\n};\n\nexport type SavedSearchesOptions = {\n containsWordStartingWith?: string;\n countResults?: boolean;\n favoriteOnly?: boolean;\n findPublic?: boolean;\n includes?: string[];\n sortBy?: string;\n sortOrder?: string;\n startsWith?: string;\n};\n\nexport type SavedSearchData = {\n uri: string;\n name: string;\n query: string;\n isFavorite: boolean;\n uiState: Record<string, any>;\n createDate: number;\n updateDate: number;\n isPublic: boolean;\n count: number;\n owner: string;\n};\n\nexport type SavedSearchesResponse = {\n favoriteOnly: boolean;\n max: number;\n offset: number;\n sortBy: 'NAME' | 'CREATE_DATE' | 'UPDATE_DATE';\n sortOrder: 'ASC' | 'DESC';\n total: number;\n result: SavedSearchData[];\n};\n\nexport type RecentSearch = {\n createdDate: number;\n environment: string;\n name: string;\n query: string;\n state: string;\n tenant: string;\n user: string;\n};\n\nexport enum SearchOperator {\n or = 'or',\n orNot = 'or not',\n and = 'and',\n andNot = 'and not'\n}\n\nexport enum MapSearch {\n geoPolygon = 'geoPolygon',\n geoLocation = 'geoLocation',\n onMapMove = 'onMapMove'\n}\n\nexport type MapSearchData = {\n values: Array<Array<Array<number>>>;\n searchType: MapSearch;\n};\n\nexport type SearchFile = {\n downloadLink: string;\n link: string;\n expirationDate: number;\n};\n\nexport type TotalResponse = {\n total: number;\n};\n","import {AdvancedSearchAttributesGroup, AdvancedSearchAttributeData, AdvancedSearchAttribute} from './advancedSearch';\nimport {Keyword, MapSearchData} from './search';\nimport {AttributeType} from '../metadata';\nimport {SearchValue} from './values';\n\ntype SearchStateAttributeData = Pick<AdvancedSearchAttributeData, 'uri' | 'entityTypeUri' | 'fieldName'>;\n\ntype SearchStateAttribute = Omit<AdvancedSearchAttribute, 'data'> & {\n data: SearchStateAttributeData;\n};\n\nexport type SearchStateAttributesGroup = Omit<AdvancedSearchAttributesGroup, 'attributes'> & {\n attributes: SearchStateAttribute[];\n};\n\nexport type SearchOptions = {\n searchByOv?: boolean;\n ovOnly?: boolean;\n strictTypeSearch?: boolean;\n};\n\nexport enum SearchResultMode {\n TABLE = 'table',\n List = 'list',\n MAP = 'map'\n}\n\nexport enum PreviewPanelMode {\n PROFILE = 'profile',\n MAP = 'map'\n}\n\nexport type SearchStateViewTab = {\n id: string;\n label: string;\n size?: number;\n attrType?: AttributeType;\n};\n\nexport type SearchStateView = {\n entityTypeTab: string;\n searchResultsMode: SearchResultMode;\n previewPanelMode: PreviewPanelMode;\n sortField: string;\n sortOrder: string;\n tabs: Record<string, SearchStateViewTab[]>;\n};\n\nexport type SearchStateFacet = {\n entityTypeUri: string;\n fieldName: string;\n values: SearchValue;\n};\n\nexport type SearchState = {\n keyword?: Keyword;\n advanced?: SearchStateAttributesGroup[];\n searchOptions?: SearchOptions;\n currentTenant?: string;\n currentSavedSearchUri?: string;\n facets?: Record<string, SearchStateFacet>;\n map?: MapSearchData;\n view?: SearchStateView;\n version?: string;\n};\n\nexport type ParsedSearchStateView = Omit<SearchStateView, 'tabs'> & {\n searchResultsColumns: Record<string, SearchStateViewTab[]>;\n};\n","import {CrosswalkBase} from './index';\n\ntype Loser = {\n uri: string;\n crosswalks?: CrosswalkBase[];\n phantomEntity?: boolean;\n merges?: Merge[];\n};\n\ntype Merge = {\n time: number;\n losers?: Loser[];\n user?: string;\n mergeReason?: string;\n mergeRules?: string;\n};\n\nexport type CrosswalkTree = {\n uri: string;\n crosswalks?: CrosswalkBase[];\n merges?: Merge[];\n};\n\nexport type Contributor = {\n uri: string;\n crosswalks?: CrosswalkBase[];\n merges?: Merge[];\n};\n\nexport enum UnmergeOperation {\n Unmerge = 'unmerge',\n TreeUnmerge = 'treeUnmerge'\n}\n","import {Entity, Relation} from './index';\nimport {Command} from './relation';\n\nexport enum NODE_EDITING_MODES {\n editing = 'editing',\n addingParent = 'addingParent',\n addingChild = 'addingChild'\n}\n\nexport type TreeNode = {\n children?: TreeNode[];\n directParentUri?: string;\n editingMode?: NODE_EDITING_MODES;\n entity?: Entity;\n expanded?: boolean;\n initialConnection?: {\n entity?: Entity;\n relation?: Relation;\n };\n loading?: boolean;\n nodeId?: number;\n parent?: string[];\n pending?: boolean;\n relatedEntity?: Entity;\n relatedNodeId?: number;\n relation?: Relation;\n relations?: Relation[];\n showDetails?: boolean;\n cycled?: boolean;\n total?: number;\n formatted?: boolean;\n};\n\nexport type TreesCommon = {\n commands?: Command[];\n};\n\nexport type TreeEntityElement = {\n entity?: Entity;\n parent?: string[];\n relations?: Relation[];\n};\n\nexport type TreeEntityMap = {\n [entityUri: string]: TreeEntityElement;\n};\n\nexport type ScrollTo = {\n nodeId?: number;\n entity?: Entity;\n};\n\nexport type EditingConnection = {\n entity?: Entity;\n relation?: Relation;\n};\n\nexport type EditingConnections = {\n [relationUri: string]: EditingConnection;\n};\n\nexport type Tree = {\n activenessDate?: number;\n editingConnections?: EditingConnections;\n entitiesMap?: TreeEntityMap;\n expanded?: boolean;\n graphTypes?: string;\n loading?: boolean;\n root?: TreeNode;\n scrollTo?: ScrollTo;\n showSecondaryLabel?: boolean;\n sortField?: string;\n sortOrder?: 'asc' | 'desc';\n total?: number;\n isReversed?: boolean;\n errorMessage?: string;\n};\n\nexport type TreesState = {\n common?: TreesCommon;\n trees?: {\n [id: string]: Tree;\n };\n initialTrees?: {\n [id: string]: Tree;\n };\n};\n\nexport type TreesStateToSave = {\n [id: string]: {showSecondaryLabel?: boolean};\n};\n","export type WorkflowAction = {\n action: string;\n label: string;\n};\n\nexport enum PredefinedWorkflowProcessType {\n potentialMatchReview = 'potentialMatchReview',\n dataChangeRequestReview = 'dataChangeRequestReview',\n recommendForDelete = 'recommendForDelete'\n}\n\nexport enum WorkflowPriority {\n low = 1,\n medium = 50,\n high = 100,\n urgent = 1000\n}\n\nexport type WorkflowComment = {\n author: string;\n id: string;\n message: string;\n time: number;\n};\n\nexport type WorkflowTaskData = {\n assignee: string;\n processInstanceId?: string;\n processType?: PredefinedWorkflowProcessType | string;\n objectURIs: string[];\n suspended?: boolean;\n createdBy: string;\n priorityClass: string;\n taskType: string;\n createTime: number;\n dueDate: number;\n taskId: string;\n displayName: string;\n processDefinitionDisplayName: string;\n processInstanceComments?: WorkflowComment[];\n possibleActions?: WorkflowAction[];\n priority?: number;\n preferredAction?: WorkflowAction;\n repeatingTask?: boolean;\n valid?: boolean;\n isOpen?: boolean;\n};\n\nexport type WorkflowTasksResponse = {\n status: string | 'OK';\n data: WorkflowTaskData[];\n total?: number;\n offset?: number;\n size?: number;\n};\n\nexport type WorkflowConfiguration = {\n enabled?: boolean;\n path?: string;\n};\n","export enum FillRateState {\n EXISTS = 'exists',\n MISSING = 'missing'\n}\nexport type FillRateData = Record<FillRateState, number>;\n\nexport enum UniquenessAnalysisState {\n UNIQUE = 'unique',\n NOT_UNIQUE = 'notUnique'\n}\nexport type UniquenessData = Record<UniquenessAnalysisState, number>;\n\ntype Data = Record<string, number>;\n\nexport type ConsolidationRateData = {\n totalCrosswalks: number;\n totalCrosswalksBySource: Data;\n totalEntities: number;\n totalEntitiesBySource: Data;\n};\n\nexport type DQChartsData = {\n fillRate?: FillRateData;\n uniqueness?: UniquenessData;\n frequency?: Data;\n dataValidationFunctions?: Data;\n lengthStatistics?: {\n data: Data;\n avg: number;\n min: number;\n max: number;\n };\n crosswalkAnalysis?: {\n numberOfSources: number;\n minNumberOfProfiles: number;\n maxNumberOfProfiles: number;\n avgNumberOfProfiles: number;\n data: Data;\n };\n monthDistribution?: {data: Data};\n dayOfWeekDistribution?: {data: Data};\n dayOfMonthDistribution?: {data: Data};\n valueDistribution?: {data: Data};\n summary?: {\n activeProfiles: number;\n inactiveProfiles: number;\n sourceSystems: number;\n };\n pattern?: Data;\n consolidationRate?: ConsolidationRateData;\n error?: Record<string, string>;\n};\nexport enum DQMetric {\n FILL_RATE = 'fillRate',\n LENGTH_STATISTIC = 'lengthStatistics',\n VALUE_DISTRIBUTION = 'valueDistribution',\n CROSSWALK_ANALYSIS = 'crosswalkAnalysis',\n DATA_VALIDATION = 'dataValidationFunctions',\n FREQUENCY = 'frequency',\n UNIQUENESS = 'uniqueness',\n PATTERN = 'pattern',\n CONSOLIDATION_RATE = 'consolidationRate'\n}\n\nexport enum DQDataLevel {\n ENTITY_TYPE = 'entityLevel',\n ATTRIBUTE_TYPE = 'attributeLevel'\n}\n","import {\n createRelationCreateCommand,\n createRelationDeleteCommand,\n createRelationIgnoreCommand,\n createRelationRepointCommand,\n createRelationUpdateCommand,\n createRelationUriProcessor\n} from '../relations';\n\nexport enum Operations {\n DELETE_RELATION = 'DELETE_RELATION',\n CREATE_RELATION = 'CREATE_RELATION',\n UPDATE_RELATION = 'UPDATE_RELATION',\n REPOINT_RELATION = 'REPOINT_RELATION',\n IGNORE_RELATION = 'IGNORE_RELATION'\n}\n\nexport enum RelationDirections {\n IN = 'in',\n OUT = 'out'\n}\n\nexport type Command =\n | ReturnType<typeof createRelationCreateCommand>\n | ReturnType<typeof createRelationDeleteCommand>\n | ReturnType<typeof createRelationUpdateCommand>\n | ReturnType<typeof createRelationRepointCommand>\n | ReturnType<typeof createRelationIgnoreCommand>;\n\nexport type ComplexInOutRelationItem = {uri: string; label: string};\nexport type InOutRelation = (string | ComplexInOutRelationItem)[];\nexport type RelationUriProcessor = ReturnType<typeof createRelationUriProcessor>;\n","export enum StatusVF {\n ACTIVE = 'ACTIVE',\n INACTIVE = 'INACTIVE'\n}\n\nexport type DataValidationFunction = {\n uri: string;\n name: string;\n label: string;\n description: string;\n expression: string;\n action: string;\n message: string;\n createdBy: string;\n createdTime: number;\n updatedBy: string;\n updatedTime: number;\n status: StatusVF;\n attribute: string;\n};\n","export enum ChartTypes {\n BAR = 'bar',\n DONUT = 'donut',\n PIE = 'pie',\n TREE = 'tree',\n TABLE = 'table',\n BUBBLE = 'bubble',\n LINE = 'line',\n MAP = 'map',\n CLOUD = 'cloud'\n}\n","export enum DashboardViewTypes {\n ActivitiesViewFacet = 'ActivitiesViewFacet',\n CustomActionViewFacet = 'CustomActionViewFacet',\n DashboardFacet = 'DashboardFacet',\n EntitiesByTypeViewFacet = 'EntitiesByTypeViewFacet',\n FilteredSavedSearchesFacet = 'FilteredSavedSearchesFacet',\n FilteredEntitiesViewFacet = 'FilteredEntitiesViewFacet',\n NotificationInboxFacet = 'NotificationInboxFacet',\n ProfileStatsFacet = 'ProfileStatsFacet'\n}\n","import {InOutRelation} from '../relation';\nimport {CustomScript, ViewExtension} from '../uiConfiguration';\nimport {UIPermissions} from '../uiPermissions';\n\nexport enum ProfileViewTypes {\n Attributes = 'com.reltio.plugins.entity.attributes.AttributesView',\n HierarchyTree = 'com.reltio.plugins.react.ReactHierarchyTreeView',\n HierarchyPaths = 'com.reltio.plugins.entity.HierarchyPathsView',\n RelationsTable = 'com.reltio.plugins.react.ReactRelationshipTableView',\n Relations = 'com.reltio.plugins.entity.relations.RelationsView',\n SingleAttribute = 'com.reltio.plugins.entity.attributes.SingleAttributeView',\n AttributeTable = 'com.reltio.plugins.entity.attributes.AttributeTableView',\n Custom = 'com.reltio.plugins.ui.CustomActionView',\n Map = 'com.reltio.plugins.react.EntityMapView',\n ImageAttribute = 'com.reltio.plugins.entity.attributes.ImageAttributeView',\n PotentialMatches = 'com.reltio.plugins.entity.PotentialMatchesView'\n}\n\nexport type ProfileViewConfig = ViewExtension & {\n class: ProfileViewTypes;\n 'react-class'?: string;\n};\n\nexport type RelationsContent = {\n inRelations?: InOutRelation;\n outRelations?: InOutRelation;\n groups?: string[];\n entityTypes?: string[];\n nextEntry?: RelationsContent;\n};\n\nexport type AttributeViewConfig = ProfileViewConfig & {\n pinnedAttributes?: {\n attributes: string[];\n roles?: string[];\n }[];\n includeUris?: string[];\n excludeUris?: string[];\n attributesCount?: number;\n 'text-empty'?: string;\n icon?: string;\n caption?: string;\n};\n\nexport type HierarchyPathsViewConfig = ProfileViewConfig & {\n caption: string;\n graph: {\n type: string;\n };\n _showNavigateToGraph?: boolean;\n};\n\nexport type HierarchyTreeViewConfig = ProfileViewConfig & {\n graph: {\n type: string;\n layout?: number;\n deep?: number;\n limit?: number;\n uri?: string;\n options?: {\n reverseRelations?: boolean;\n };\n };\n showPath?: boolean;\n sortBy?: 'relationTypeLabel' | 'entityLabel';\n sortOrder?: SortOrder;\n max?: number;\n icon?: string;\n caption?: string;\n attributes?: string[];\n _showNavigateToGraph?: boolean;\n};\n\nexport type SortOrder = 'asc' | 'desc';\n\nexport type RelationsViewConfig = ProfileViewConfig & {\n content: RelationsContent;\n contentSecondLevel?: RelationsContent;\n suggested?: RelationsContent | Array<RelationsContent>;\n allowOnlyCreateNew?: boolean;\n allowOnlyCreateNewSecondLevel?: boolean;\n sortOptions?: Record<string, string>;\n sortOrder?: SortOrder;\n isComplex?: boolean;\n maxDtssImport?: number;\n importFromDT?: boolean;\n type?: string;\n disableAutoVote?: boolean;\n autoVote?: number;\n autoComment?: string;\n negativeComments?: string[];\n 'text-empty'?: string;\n max?: number;\n icon?: string;\n caption?: string;\n recordClass?: string;\n defaultRelationType?: {\n name: string;\n direction: string;\n };\n};\n\nexport type SingleAttributeViewConfig = ProfileViewConfig & {\n attributeUri: string;\n caption?: string;\n max?: number;\n icon?: string;\n 'text-empty'?: string;\n showInactiveValuesMenu?: boolean;\n};\n\nexport type EntityMapViewConfig = Pick<ProfileViewConfig, 'point' | 'id' | 'class'>;\n\nexport type ImageAttributeViewConfig = ProfileViewConfig & {\n attributeUri: string;\n caption?: string;\n 'text-empty'?: string;\n};\n\nexport type ProfilePotentialMatchesViewConfig = ProfileViewConfig & {\n caption: string;\n};\n\nexport type CustomActionViewConfig = ProfileViewConfig & {\n tooltip?: string;\n width?: number;\n height?: number;\n action: CustomScript;\n canRead?: UIPermissions;\n};\n\nexport type TableAttributeViewConfig = ProfileViewConfig & {\n attributeUri: string;\n caption?: string;\n max?: number;\n};\n","import {Entity, RecordAttributesType} from './index';\n\nexport type HistoryAppearanceActions =\n | 'UPDATE_ATTRIBUTE'\n | 'UNDO_IGNORE_ATTRIBUTE'\n | 'INSERT_ATTRIBUTE'\n | 'IGNORE_ATTRIBUTE'\n | 'DELETE_ATTRIBUTE';\n\nexport type HistoryDiff = {\n appearance: {\n [attributeValueUriOrSpecialTypeUri: string]:\n | HistoryAppearanceActions\n | {\n [value: string]: HistoryAppearanceActions;\n };\n };\n attributes: RecordAttributesType;\n roles: string[];\n tags: string[];\n};\n\nexport type HistoryChange = {\n timestamp: number;\n type: string;\n user: string;\n uri?: string;\n uris?: string[];\n mergeType?: string;\n mergeReason?: string;\n matchGroups?: string[];\n matchGroupsUris?: string[];\n};\n\nexport type HistoryWithTotal = {\n total: number;\n changes?: HistoryChange[];\n};\n\nexport type HistoryEvent = {\n aStamp: number;\n bStamp?: number;\n overrideUri?: string;\n};\n\nexport type HistorySlice = {\n aEntity: Entity;\n bEntity?: Entity;\n};\n\nexport enum HistoryMode {\n Current = 'Current',\n Previous = 'Previous'\n}\n\nexport type History = {\n diff?: HistoryDiff;\n event?: HistoryEvent;\n slice?: HistorySlice;\n mode: HistoryMode;\n};\n","export enum ValidationServiceOption {\n preserveURIs = 'preserveURIs',\n updateAttributeUpdateDates = 'updateAttributeUpdateDates',\n validateDataPermissions = 'validateDataPermissions'\n}\n","import {UIPermissions} from '../uiPermissions';\nimport {ProfilePerspectiveConfig} from './perspectives';\n\nexport enum PerspectiveClass {\n DQDashboard = 'DQDashboardView',\n Dashboard = 'DashboardView',\n RelationshipSearch = 'RelationshipSearch',\n ProfileActivityLog = 'ProfileActivityLogView',\n Interactions = 'InteractionsView',\n Graph = 'GraphView',\n Relationships = 'RelationshipsView',\n PotentialMatches = 'PotentialMatchesView',\n Sources = 'SourcesView',\n Profile = 'ProfileView',\n NestedProfile = 'NestedProfileView',\n Search = 'SearchView',\n Tags = 'Tags',\n Pivoting = 'Pivoting',\n DCRReview = 'DCRReview',\n Authoring = 'Authoring'\n}\n\nexport enum ScreenItemType {\n CustomAction = 'CustomAction',\n ConsoleAppAction = 'ConsoleAppAction'\n}\n\nexport type ScreenItem = {\n class?: PerspectiveClass;\n id: string;\n [key: string]: any;\n};\n\nexport type LayoutConfigSubMenuItem = {\n show?: string[];\n label: string;\n icon?: string;\n screen?: ScreenItem;\n canRead?: UIPermissions;\n entityTypes?: string[];\n};\n\nexport type LayoutConfigSubMenu = {\n type: 'side' | 'tabs';\n items: LayoutConfigSubMenuItem[];\n};\n\nexport type LayoutConfigItem = {\n label: string;\n icon?: string;\n menu?: LayoutConfigSubMenu;\n screen?: ScreenItem;\n canRead?: UIPermissions;\n};\n\nexport type ProfileScreenItem = {\n id: string;\n class: PerspectiveClass;\n entityTypes: {\n [entityType: string]: ProfilePerspectiveConfig;\n };\n nested?: NestedProfileScreenItem[];\n};\n\nexport type NestedProfileScreenItem = Omit<ProfileScreenItem, 'nested'> & {nestedRoute: string};\n","import {AttributePresentations, DateMasks, Preview, WorkflowConfiguration} from '..';\n\nexport type ImageAttributeFieldsOrder = {\n [entityTypeUri: string]: {\n order?: string[];\n includeNames?: string[];\n excludeNames?: string[];\n };\n};\n\nexport enum CustomScriptPlatform {\n NEW = 'new',\n CLASSIC = 'classic'\n}\n\nexport enum SortingStrategy {\n ASC_BY_NAME = 'ascByName'\n}\n\nexport type CustomScript = {\n processApiRequest?: string[];\n processApiResponse?: string[];\n files?: string[];\n permissions?: string[];\n platform?: CustomScriptPlatform;\n [key: string]: unknown;\n};\n\nexport type RequestProviderConfiguration = {\n attemptsThreshold?: number;\n attemptsTimeWindowSize?: number;\n excludedServices?: string[];\n};\n\nexport type ProfileCheckUpdate = {\n autoUpdateInReadMode?: string[];\n entityTypes?: string[];\n};\n\nexport type PropertiesConfig = {\n i18n?: {\n translations: {\n [lang: string]: string;\n };\n verbose: boolean;\n };\n entity: {\n requestSettings: {\n defaultMaxValues?: number;\n };\n };\n image: {\n attributeFieldsOrder?: ImageAttributeFieldsOrder;\n };\n lookups: {\n autocomplete?: {\n includeAttributes?: string[];\n excludeAttributes?: string[];\n };\n showCode: boolean;\n };\n validate: {\n levels?: string[];\n validateReadMode?: boolean;\n };\n attributePresentations: AttributePresentations;\n masks?: DateMasks;\n requestProvider?: RequestProviderConfiguration;\n workflow: WorkflowConfiguration;\n defaultRoute?: string;\n attributesSorting?: SortingStrategy;\n customScripts: CustomScript[];\n checkUser?: boolean;\n checkIdle?: boolean | number;\n showSearchByOv?: boolean;\n showSwitchToClassic?: boolean;\n showEntityId?: boolean;\n preview?: Preview;\n logo?: string;\n showAttributeDescription?: boolean;\n headerColor?: string;\n profileCheckUpdate?: ProfileCheckUpdate;\n};\n","import {Entity, Relation, RelationTypeDirection} from './index';\n\nexport type HopsResponse = {\n entities: HopEntity[];\n relations?: HopRelation[];\n};\n\nexport type HopRelation = Omit<Relation, 'startObject' | 'endObject'> & {\n startObject?: {\n objectURI: string;\n directionalLabel?: string;\n };\n endObject?: {\n objectURI: string;\n directionalLabel?: string;\n };\n direction?: RelationTypeDirection;\n};\n\nexport type HopEntity = Pick<\n Entity,\n 'uri' | 'type' | 'label' | 'secondaryLabel' | 'attributes' | 'startDate' | 'endDate'\n> & {\n traversedRelations?: number;\n untraversedRelations?: number;\n};\n\nexport enum GraphLayout {\n SIMPLE_NETWORK = 'Simple network',\n VERTICAL_TB = 'Vertical hierarchy',\n HORIZONTAL_LR = 'Horizontal hierarchy',\n DIRECTED_NETWORK = 'Directed Network',\n TREE = 'Tree'\n}\n","import {PrimitiveValue} from '..';\nimport {CustomActionExtension, CustomScriptExtension} from './uiConfiguration';\nimport {CustomActionViewConfig} from './profile/viewTypes';\n\nexport enum CustomAction {\n SET_HTML = 'setHtml',\n SHOW_POPUP = 'showPopup',\n HIDE_POPUP = 'hidePopup',\n LOG = 'log',\n SET_VISIBILITY = 'setVisibility',\n MESSAGE = 'message',\n SET_ENABLED = 'setEnabled',\n SET_TOOLTIP = 'setToolTip',\n SET_LABEL = 'setLabel',\n SET_HEIGHT = 'setHeight',\n SET_WIDTH = 'setWidth',\n RETURN_PROCESSED_API_RESPONSE = 'returnProcessedApiResponse',\n RETURN_PROCESSED_API_REQUEST = 'returnProcessedApiRequest',\n REQUEST = 'request',\n EVENT = 'event'\n}\n\nexport enum RequestAction {\n WORKFLOW = 'workflow',\n WORKFLOW_START_PROCESS_FROM_QUERY = 'workflow/startProcessFromQuery',\n API = 'api',\n GET_ENTITY_URI = 'getEntityUri',\n GET_ENTITY = 'getEntity',\n GET_API_PATH = 'getApiPath',\n WORKFLOW_GET_WORKFLOW_PATH = 'workflow/getWorkflowPath',\n GET_SEARCH_QUERY = 'getSearchQuery',\n GET_TENANT = 'getTenant',\n GET_USER = 'getUser',\n GET_PERSPECTIVE = 'getPerspective',\n SET_PERSPECTIVE = 'setPerspective',\n SET_ENTITY_URI = 'setEntityUri',\n ALERT = 'alert',\n CONFIRM = 'confirm',\n PROMPT = 'prompt',\n OPEN_WINDOW = 'openWindow',\n GET_CONFIGURATION = 'getConfiguration',\n GET_UI_CONFIGURATION = 'getUiConfiguration',\n OPEN_SEARCH = 'openSearch',\n WORKFLOW_CHECK_PERMISSION = 'workflow/checkPermission',\n RELOAD_PAGE = 'reloadPage'\n}\n\nexport type CustomActionTaskParams = {\n url?: string;\n name?: RequestAction;\n id?: string | number;\n method?: 'PUT' | 'DELETE' | 'GET' | 'POST';\n data?: Record<string, unknown>;\n headers?: Record<string, string>;\n processDefinitionId?: string;\n searchString?: string;\n perspective?: string;\n permission?: string;\n entityUri?: string;\n searchState?: unknown;\n defaultText?: string;\n text?: string;\n html?: string;\n type?: string;\n validationUrl?: string;\n};\n\nexport type CustomActionTask = {\n action: CustomAction;\n params: CustomActionTaskParams | PrimitiveValue;\n};\n\nexport type ProcessParams = {\n task: CustomActionTask;\n worker: Worker;\n config?: CustomScriptExtension | CustomActionViewConfig | CustomActionExtension;\n};\n","import {\n Crosswalk,\n Entity,\n NestedAttributeValue,\n PrimitiveValue,\n ReferenceAttributeValue,\n Relation,\n SimpleAttributeValue\n} from './index';\n\nexport enum DCRTypes {\n INSERT_ATTRIBUTE = 'INSERT_ATTRIBUTE',\n UPDATE_ATTRIBUTE = 'UPDATE_ATTRIBUTE',\n DELETE_ATTRIBUTE = 'DELETE_ATTRIBUTE',\n PIN_ATTRIBUTE = 'PIN_ATTRIBUTE',\n IGNORE_ATTRIBUTE = 'IGNORE_ATTRIBUTE',\n CREATE_ENTITY = 'CREATE_ENTITY',\n CREATE_RELATIONSHIP = 'CREATE_RELATIONSHIP',\n UPDATE_TAGS = 'UPDATE_TAGS',\n UPDATE_ROLES = 'UPDATE_ROLES',\n UPDATE_START_DATE = 'UPDATE_START_DATE',\n UPDATE_END_DATE = 'UPDATE_END_DATE',\n UPDATE_PROFILE_PIC_BY_URL = 'UPDATE_PROFILE_PIC_BY_URL',\n UPDATE_PROFILE_PIC_BY_URI = 'UPDATE_PROFILE_PIC_BY_URI',\n DELETE_RELATIONSHIP = 'DELETE_RELATIONSHIP'\n}\n\nexport enum DCRChangeRequestState {\n AWAITING_REVIEW = 'AWAITING_REVIEW',\n APPLIED = 'APPLIED',\n REJECTED = 'REJECTED'\n}\n\nexport type ChangeRequest = {\n changes: DCRChanges;\n createdBy: string;\n createdTime: number;\n objectsInfo: DCRObjectsInfo;\n state: DCRChangeRequestState;\n type: string;\n updatedBy: string;\n updatedTime: number;\n uri: string;\n};\n\nexport type GroupedObjectsInfo = {\n entity: DCREntityInfo;\n relations: DCRRelationInfo[];\n};\n\nexport type DCREntityInfo = {\n isExist: boolean;\n label: string;\n secondaryLabel: string;\n type: string;\n uri: string;\n};\n\nexport type DCRRelationInfo = {\n type: string;\n startObjectLabel: string;\n startObjectUri: string;\n endObjectLabel: string;\n endObjectUri: string;\n isExist: boolean;\n uri?: string;\n};\n\nexport type DCRObjectInfo = DCREntityInfo | DCRRelationInfo;\n\nexport type DCRObjectsInfo = {\n [key: string]: DCRObjectInfo;\n};\n\nexport type DCRAttributes = {\n [attributeName: string]: (ChangeValue | DCRChange)[];\n};\n\nexport type DCRValue = DCRAttributes | DCRChange | PrimitiveValue;\n\nexport type DCRAttributeValue = Omit<\n SimpleAttributeValue | NestedAttributeValue | ReferenceAttributeValue,\n 'uri' | 'value'\n> & {\n value: DCRValue;\n label?: string;\n refObjectURI?: string;\n refEntity?: {objectURI: string};\n uri?: string;\n};\n\nexport type ChangeValue = DCRAttributeValue | string[] | DCREntityObject | Relation;\n\nexport type DCRChange = {\n attributePath?: string;\n attributeType?: string;\n conflict?: string;\n conflictDetails?: string;\n createdBy?: string;\n createdTime?: number;\n crosswalk?: Crosswalk;\n id?: string;\n newPinOrIgnoreValue?: boolean;\n newValue?: ChangeValue;\n oldValue?: ChangeValue;\n type?: DCRTypes;\n refAttributeType?: string;\n refObjectURI?: string;\n};\n\nexport type DCRChanges = {\n [key: string]: DCRChange[];\n};\n\nexport enum DCROperationTypes {\n ADDED = 'added',\n EDITED = 'edited',\n DELETED = 'deleted',\n PINNED = 'pinned',\n IGNORED = 'ignored',\n PIN_DELETED = 'pin_deleted',\n IGNORE_DELETED = 'ignore_deleted'\n}\n\nexport type DCREntityObject = Omit<Entity, 'attributes'> & {\n attributes: DCRAttributes;\n};\n","export enum NumberPresentationStrategy {\n percent = 'percent'\n}\n\nexport type NumberFormat = {\n thousandSeparator?: string;\n decimalSeparator?: string;\n prefix?: string;\n suffix?: string;\n groupSize?: number;\n decimalScale?: number;\n strategy?: NumberPresentationStrategy;\n};\n\nexport type NumberLocale = {\n groupSeparator?: string;\n decimalSeparator?: string;\n prefix?: string;\n suffix?: string;\n groupSize?: number;\n digitsAfterDecimalSeparator?: number;\n};\n","enum DataTypes {\n TYPE_STRING = 'String',\n TYPE_TEXT = 'Text',\n TYPE_PASSWORD = 'Password',\n TYPE_LONG = 'Long',\n TYPE_INT = 'Int',\n TYPE_DOLLAR = 'Dollar',\n TYPE_FLOAT = 'Float',\n TYPE_DOUBLE = 'Double',\n TYPE_NUMBER = 'Number',\n TYPE_BOOLEAN = 'Boolean',\n TYPE_BOOLEAN_RADIO = 'Boolean_Radio',\n TYPE_DATE = 'Date',\n TYPE_TIMESTAMP = 'Timestamp',\n TYPE_ACTIVENESS_DATE = 'ActivenessDate',\n TYPE_LOCAL_DATE = 'LocalDate',\n TYPE_BLOB = 'Blob',\n TYPE_ENUM = 'Enum',\n TYPE_CIK_ID = 'cik id',\n TYPE_LOOKUP = 'Lookup',\n TYPE_TYPEAHEAD = 'Typeahead',\n TYPE_URL = 'URL',\n TYPE_BLOG_URL = 'Blog URL',\n TYPE_IMAGE_URL = 'Image URL',\n TYPE_EMAIL = 'Email',\n TYPE_DEPENDENT_LOOKUP = 'DependentLookup',\n TYPE_ENTITY_ID = 'EntityId',\n TYPE_RDM_LOOKUPS_NOT_RESOLVED = 'RdmLookupsNotResolved',\n TYPE_COUNT = 'Count',\n TYPE_FILE = 'File',\n TYPE_SELECT = 'Select',\n // Complex types\n TYPE_NESTED = 'Nested',\n TYPE_REFERENCE = 'Reference',\n TYPE_IMAGE = 'Image',\n TYPE_SSN = 'SSN'\n}\n\nexport default DataTypes;\n","import {Crosswalk, ImageAttributeValue, RecordAttributesType} from './attributes';\nimport {NumberFormat} from './numberFormat';\n\nexport type PrimitiveValue = string | number | boolean;\n\nexport type Entity = {\n uri: string;\n type: string;\n label?: string;\n dataTenant?: string;\n attributes?: RecordAttributesType;\n analyticsAttributes?: RecordAttributesType;\n secondaryLabel?: string;\n crosswalks?: Crosswalk[];\n createdBy?: string;\n createdTime?: number;\n updatedBy?: string;\n updatedTime?: number;\n defaultProfilePic?: string;\n defaultProfilePicValue?: ImageAttributeValue;\n roles?: string[];\n tags?: string[];\n startDate?: number;\n endDate?: number;\n ctSubscribedUris?: string[];\n};\n\nexport type EntitiesMap<TEntity = Entity> = Record<string, TEntity>;\n\nexport type Rating = {\n comment: string;\n timestamp: string;\n user: string;\n userRoles: string;\n value: number;\n};\n\nexport type Relation = {\n uri: string;\n type: string;\n attributes?: RecordAttributesType;\n startObject?: {\n objectURI: string;\n crosswalks?: Crosswalk[];\n type?: string;\n label?: string;\n };\n endObject?: {\n objectURI: string;\n crosswalks?: Crosswalk[];\n type?: string;\n label?: string;\n };\n startDate?: number;\n endDate?: number;\n crosswalks?: Crosswalk[];\n ratings?: Rating[];\n direction?: string;\n};\n\nexport enum Mode {\n Viewing = 'Viewing',\n Editing = 'Editing',\n Suggesting = 'Suggesting'\n}\n\nexport type Member = {\n type: string;\n label?: string;\n objectURI: string;\n};\ntype InteractionMembers = {\n members: Member[];\n type: string;\n uri: string;\n};\nexport type Interaction = {\n attributes?: RecordAttributesType;\n crosswalks?: Crosswalk[];\n createdBy?: string;\n createdTime?: number;\n updatedBy?: string;\n updatedTime?: number;\n isFavorite?: boolean;\n timestamp?: number;\n type: string;\n uri: string;\n members?: Record<string, InteractionMembers>;\n};\n\nexport enum Operation {\n Saving = 'Saving',\n Cloning = 'Cloning'\n}\n\nexport type AttributePresentations = Record<string, NumberFormat>;\nexport type DateMasks = {\n dateMask?: string;\n dateTimeMask?: string;\n};\nexport type Lookups = Record<string, Record<string, {displayName: string}>>;\nexport type Flatten<T> = T extends Array<infer U> ? Flatten<U> : T;\n\nexport * from './errors';\nexport * from './dateRange';\nexport * from './attributes';\nexport * from './collaboration';\nexport * from './dependentLookups';\nexport * from './imageHosting';\nexport * from './metadata';\nexport * from './search';\nexport * from './crosswalks';\nexport * from './trees';\nexport * from './users';\nexport * from './workflow';\nexport * from './dq';\nexport * from './relation';\nexport * from './connection';\nexport * from './dvf';\nexport * from './components';\nexport * from './dashboard';\nexport * from './uiPermissions';\nexport * from './profile';\nexport * from './history';\nexport * from './network';\nexport * from './uiConfiguration';\nexport * from './graph';\nexport * from './services';\nexport * from './tenants';\nexport * from './pivoting';\nexport * from './mlDq';\nexport * from './customScript';\nexport * from './matches';\nexport * from './qxSandbox';\nexport * from './map';\nexport * from './dcr';\nexport * from './numberFormat';\nexport * from './tenantPermissions';\nexport * from './typeUtils';\nexport {default as DataTypes} from './data-types';\n","import i18n from 'ui-i18n';\nimport {DataTypes} from '../types';\n\nexport const ActivenessAttrTypes = {\n startDate: {\n type: DataTypes.TYPE_ACTIVENESS_DATE,\n get label() {\n return i18n.text('Start date');\n },\n uri: 'startDate',\n name: 'activeness.startDate',\n defaultValue: null,\n singleValue: true,\n faceted: true\n },\n endDate: {\n type: DataTypes.TYPE_ACTIVENESS_DATE,\n get label() {\n return i18n.text('End date');\n },\n uri: 'endDate',\n name: 'activeness.endDate',\n defaultValue: null,\n singleValue: true,\n faceted: true\n }\n};\n\nexport const EntityAttrTypes = {\n id: {\n type: DataTypes.TYPE_ENTITY_ID,\n get label() {\n return i18n.text('Entity ID');\n },\n uri: 'id',\n name: 'id',\n singleValue: true\n },\n ...ActivenessAttrTypes,\n roles: {\n type: DataTypes.TYPE_STRING,\n get label() {\n return i18n.text('Roles');\n },\n uri: 'roles',\n name: 'roles',\n faceted: true\n },\n tags: {\n type: DataTypes.TYPE_STRING,\n get label() {\n return i18n.text('Tags');\n },\n uri: 'tags',\n name: 'tags',\n faceted: true\n }\n};\n\nexport const WorkflowAttrTypes = {\n workflow: {\n type: DataTypes.TYPE_STRING,\n get label() {\n return i18n.text('Workflow');\n },\n uri: 'workflow',\n name: 'businessProcessData.businessProcessName',\n faceted: true\n },\n assignee: {\n type: DataTypes.TYPE_STRING,\n get label() {\n return i18n.text('Assignee');\n },\n uri: 'assignee',\n name: 'businessProcessData.tasks.taskAssignee',\n faceted: true\n },\n step: {\n type: DataTypes.TYPE_STRING,\n get label() {\n return i18n.text('Step');\n },\n uri: 'step',\n name: 'businessProcessData.tasks.taskName',\n faceted: true\n },\n dueDate: {\n type: DataTypes.TYPE_TIMESTAMP,\n get label() {\n return i18n.text('Due Date');\n },\n uri: 'dueDate',\n name: 'businessProcessData.tasks.taskDueDate'\n }\n};\n\nexport const CollaborationAttrTypes = {\n commenter: {\n type: DataTypes.TYPE_STRING,\n get label() {\n return i18n.text('Commenter');\n },\n uri: 'commenter',\n name: 'attributes.Commenters',\n faceted: true\n }\n};\n\nexport const RdmAttrTypes = {\n notResolved: {\n type: DataTypes.TYPE_RDM_LOOKUPS_NOT_RESOLVED,\n get label() {\n return i18n.text('Records with RDM Transcode Error');\n },\n uri: 'notResolved',\n name: 'rdmLookups.resolved'\n }\n};\n\nexport const AuditAttrTypes = {\n createdBy: {\n type: DataTypes.TYPE_STRING,\n get label() {\n return i18n.text('Created by');\n },\n uri: 'createdBy',\n name: 'createdBy',\n singleValue: true,\n faceted: true\n },\n updatedBy: {\n type: DataTypes.TYPE_STRING,\n get label() {\n return i18n.text('Updated by');\n },\n uri: 'updatedBy',\n name: 'updatedBy',\n singleValue: true,\n faceted: true\n },\n createdTime: {\n type: DataTypes.TYPE_TIMESTAMP,\n get label() {\n return i18n.text('Created time');\n },\n uri: 'createdTime',\n name: 'createdTime',\n singleValue: true,\n faceted: true\n },\n updatedTime: {\n type: DataTypes.TYPE_TIMESTAMP,\n get label() {\n return i18n.text('Updated time');\n },\n uri: 'updatedTime',\n name: 'updatedTime',\n singleValue: true,\n faceted: true\n }\n};\n\nexport const PotentialMatchesAttrTypes = {\n matches: {\n type: DataTypes.TYPE_COUNT,\n get label() {\n return i18n.text('Potential Matches');\n },\n uri: 'matches',\n name: 'matches',\n singleValue: true,\n hideForDataTenant: true,\n faceted: true\n },\n matchScore: {\n type: DataTypes.TYPE_COUNT,\n get label() {\n return i18n.text('Match scores');\n },\n uri: 'matchScore',\n name: 'potentialMatches.matchScore',\n singleValue: true,\n hideForDataTenant: true,\n faceted: true\n },\n relevanceScore: {\n type: DataTypes.TYPE_FLOAT,\n get label() {\n return i18n.text('Relevance scores');\n },\n uri: 'relevanceScore',\n name: 'relevanceScores.relevance',\n singleValue: true,\n hideForDataTenant: true,\n faceted: true\n },\n matchAction: {\n type: DataTypes.TYPE_STRING,\n get label() {\n return i18n.text('Match action');\n },\n uri: 'matchAction',\n name: 'relevanceScores.actionLabel',\n singleValue: true,\n hideForDataTenant: true,\n faceted: true\n }\n};\n\nexport const CrosswalksAttrTypes = {\n sourceSystems: {\n type: DataTypes.TYPE_STRING,\n get label() {\n return i18n.text('Source System Name');\n },\n uri: 'sourceSystems',\n name: 'sourceSystems',\n singleValue: true,\n faceted: true\n },\n value: {\n type: DataTypes.TYPE_STRING,\n get label() {\n return i18n.text('ID Value');\n },\n uri: 'value',\n name: 'crosswalks.value'\n },\n count: {\n type: DataTypes.TYPE_INT,\n get label() {\n return i18n.text('Crosswalk Count');\n },\n uri: 'count',\n name: 'crosswalks_count'\n },\n reltioLoadDate: {\n type: DataTypes.TYPE_TIMESTAMP,\n get label() {\n return i18n.text('Reltio Load Date');\n },\n uri: 'reltioLoadDate',\n name: 'crosswalks.reltioLoadDate'\n },\n createDate: {\n type: DataTypes.TYPE_TIMESTAMP,\n get label() {\n return i18n.text('Create Date');\n },\n uri: 'createDate',\n name: 'crosswalks.createDate'\n },\n updateDate: {\n type: DataTypes.TYPE_TIMESTAMP,\n get label() {\n return i18n.text('Update Date');\n },\n uri: 'updateDate',\n name: 'crosswalks.updateDate'\n },\n deleteDate: {\n type: DataTypes.TYPE_TIMESTAMP,\n get label() {\n return i18n.text('Delete Date');\n },\n uri: 'deleteDate',\n name: 'crosswalks.deleteDate'\n },\n publishDate: {\n type: DataTypes.TYPE_TIMESTAMP,\n get label() {\n return i18n.text('Publish Date');\n },\n uri: 'publishDate',\n name: 'crosswalks.sourcePublishDate'\n },\n sourceTable: {\n type: DataTypes.TYPE_STRING,\n get label() {\n return i18n.text('Source Table');\n },\n uri: 'sourceTable',\n name: 'crosswalks.sourceTable'\n }\n};\n\nexport enum MatchRulesAttrNames {\n matchRules = 'matchRules',\n MLRecommendedMatch = 'MLRecommendedMatch'\n}\n\nexport const MatchRulesAttrTypes = {\n [MatchRulesAttrNames.matchRules]: {\n type: DataTypes.TYPE_STRING,\n get label() {\n return i18n.text('Match Rules');\n },\n uri: MatchRulesAttrNames.matchRules,\n name: MatchRulesAttrNames.matchRules,\n faceted: true,\n hideForDataTenant: true\n },\n [MatchRulesAttrNames.MLRecommendedMatch]: {\n type: DataTypes.TYPE_STRING,\n get label() {\n return i18n.text('Match IQ');\n },\n uri: MatchRulesAttrNames.MLRecommendedMatch,\n name: MatchRulesAttrNames.MLRecommendedMatch,\n faceted: true,\n hideForDataTenant: true\n }\n};\n\nexport default {\n ...EntityAttrTypes,\n ...WorkflowAttrTypes,\n ...CollaborationAttrTypes,\n ...RdmAttrTypes,\n ...AuditAttrTypes,\n ...PotentialMatchesAttrTypes,\n ...CrosswalksAttrTypes,\n ...MatchRulesAttrTypes,\n type: {\n type: DataTypes.TYPE_STRING,\n get label() {\n return i18n.text('Type');\n },\n uri: 'type',\n name: 'type',\n singleValue: true,\n faceted: true\n }\n};\n","export const MatchRuleComparisonOperators = {\n EXACT: 'exact',\n EXACT_OR_NULL: 'exactOrNull',\n EXACT_OR_ALL_NULL: 'exactOrAllNull',\n NOT_EXACT_SAME: 'notExactSame',\n FUZZY: 'fuzzy'\n};\n\nexport const MatchRuleHelperOperators = {\n EQUALS: 'equals',\n IN: 'in',\n AND: 'and',\n OR: 'or',\n NOT_EQUALS: 'notEquals',\n NULL_VALUES: 'nullValues',\n NOT: 'not'\n};\n\nexport const NOT_MATCH = 'NOT_MATCH';\n","import {either, equals} from 'ramda';\n\nexport const ModeTypes = {\n EDITING: 'Editing',\n SUGGESTING: 'Suggesting',\n VIEWING: 'Viewing'\n};\n\nexport const isSuggestMode = equals(ModeTypes.SUGGESTING);\nexport const isEditMode = equals(ModeTypes.EDITING);\nexport const isViewMode = equals(ModeTypes.VIEWING);\nexport const isEditableMode = either(isEditMode, isSuggestMode);\n","import PropTypes from 'prop-types';\nimport {ModeTypes} from '../mode';\nimport {values} from 'ramda';\nimport {ErrorType} from '../types';\n\nconst DeviceType = PropTypes.oneOf(['mobile', 'tablet', 'desktop']);\n\nconst UIPermissions = PropTypes.shape({\n deviceTypes: PropTypes.oneOfType([DeviceType, PropTypes.arrayOf(DeviceType)]),\n roles: PropTypes.arrayOf(PropTypes.string)\n});\n\nconst LookupValueType = PropTypes.shape({\n value: PropTypes.string,\n lookupCode: PropTypes.string\n});\nconst SimpleLookupType = PropTypes.shape({\n displayName: PropTypes.string,\n parent: PropTypes.string\n});\n\nconst FilterValueTypeType = PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.bool, LookupValueType]);\nconst FilterValueType = PropTypes.oneOfType([FilterValueTypeType, PropTypes.arrayOf(FilterValueTypeType)]);\n\nconst FilterType = PropTypes.shape({\n fieldName: PropTypes.string,\n values: PropTypes.arrayOf(FilterValueType),\n filter: PropTypes.string,\n type: PropTypes.string\n});\n\nconst CardinalityType = PropTypes.shape({\n minValue: PropTypes.number,\n maxValue: PropTypes.number\n});\n\nconst AttributeTypeType = PropTypes.shape({\n label: PropTypes.string,\n name: PropTypes.string,\n description: PropTypes.string,\n type: PropTypes.string,\n hidden: PropTypes.bool,\n faceted: PropTypes.bool,\n searchable: PropTypes.bool,\n uri: PropTypes.string,\n access: PropTypes.arrayOf(PropTypes.string),\n cardinality: CardinalityType\n});\n\nconst RelationTypeType = PropTypes.shape({\n label: PropTypes.string,\n uri: PropTypes.string,\n typeColor: PropTypes.string,\n direction: PropTypes.string,\n startObject: PropTypes.object,\n endObject: PropTypes.object\n});\n\nconst EntityTypeType = PropTypes.shape({\n typeColor: PropTypes.string,\n typeIcon: PropTypes.string,\n typeImage: PropTypes.string,\n label: PropTypes.string,\n uri: PropTypes.string,\n attributes: PropTypes.arrayOf(AttributeTypeType)\n});\n\nconst InteractionTypeType = PropTypes.shape({\n uri: PropTypes.string,\n label: PropTypes.string,\n memberTypes: PropTypes.array,\n extendsTypeUri: PropTypes.string,\n attributes: PropTypes.arrayOf(AttributeTypeType)\n});\n\nconst GraphTypeType = PropTypes.shape({\n uri: PropTypes.string,\n label: PropTypes.string,\n extendsTypeUri: PropTypes.string,\n relationshipTypeURIs: PropTypes.arrayOf(PropTypes.string)\n});\n\nconst MetadataType = PropTypes.shape({\n uri: PropTypes.string,\n description: PropTypes.string,\n label: PropTypes.string,\n schemaVersion: PropTypes.string,\n entityTypes: PropTypes.arrayOf(EntityTypeType),\n roles: PropTypes.arrayOf(PropTypes.object),\n groupTypes: PropTypes.arrayOf(PropTypes.object),\n relationTypes: PropTypes.arrayOf(RelationTypeType),\n graphTypes: PropTypes.arrayOf(GraphTypeType),\n interactionTypes: PropTypes.arrayOf(InteractionTypeType),\n sources: PropTypes.arrayOf(PropTypes.object)\n});\n\nconst EntityType = PropTypes.shape({\n uri: PropTypes.string,\n type: PropTypes.string\n});\n\nconst RelationType = PropTypes.shape({\n uri: PropTypes.string,\n type: PropTypes.string\n});\n\nconst NestedAttributeValueType = PropTypes.shape({\n value: PropTypes.object,\n ov: PropTypes.bool,\n type: PropTypes.string,\n uri: PropTypes.string\n});\n\nconst ReferenceAttributeValueType = PropTypes.shape({\n refEntity: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n refRelation: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n value: PropTypes.object,\n ov: PropTypes.bool,\n type: PropTypes.string,\n uri: PropTypes.string\n});\n\nconst ModeType = PropTypes.oneOf(values(ModeTypes));\n\nconst AttributeErrorType = PropTypes.shape({\n type: PropTypes.oneOf(Object.values(ErrorType)).isRequired,\n attributeTypeUri: PropTypes.string.isRequired,\n parentUri: PropTypes.string.isRequired,\n uri: PropTypes.string,\n message: PropTypes.string\n});\n\nconst ComplexAttributeType = {\n attributeType: AttributeTypeType,\n showEmptyEditors: PropTypes.bool,\n lazy: PropTypes.bool,\n mode: ModeType,\n metadata: MetadataType,\n ownError: AttributeErrorType,\n errors: PropTypes.arrayOf(AttributeErrorType),\n crosswalks: PropTypes.array,\n onAddAttributes: PropTypes.func,\n onAddOneMore: PropTypes.func,\n onDeleteAttribute: PropTypes.func,\n onChangeAttribute: PropTypes.func,\n additionalControlsRenderer: PropTypes.func,\n hideDeleteButton: PropTypes.bool,\n showNonOv: PropTypes.bool,\n state: PropTypes.oneOf(['deleted', 'edited']),\n expanded: PropTypes.bool\n};\n\nconst NestedAttributeType = {\n attributeValue: NestedAttributeValueType,\n ...ComplexAttributeType\n};\n\nconst ReferenceAttributeType = {\n attributeValue: ReferenceAttributeValueType,\n ...ComplexAttributeType\n};\n\nconst SimpleAttributeValueType = PropTypes.shape({\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.number]),\n ov: PropTypes.bool,\n type: PropTypes.string,\n uri: PropTypes.string,\n lookupCode: PropTypes.string,\n lookupRawValue: PropTypes.string\n});\n\nconst RelationsConfigContentType = PropTypes.shape({\n inRelations: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.string])),\n outRelations: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.string])),\n groups: PropTypes.arrayOf(PropTypes.string),\n entityTypes: PropTypes.arrayOf(PropTypes.string),\n nextEntry: PropTypes.object\n});\n\nconst SortOrderType = PropTypes.oneOf(['asc', 'desc']);\n\nconst RelationsConfigType = PropTypes.shape({\n id: PropTypes.string,\n content: RelationsConfigContentType,\n allowOnlyCreateNew: PropTypes.bool,\n sortColumn: PropTypes.string,\n sortOrder: SortOrderType,\n 'text-empty': PropTypes.string,\n max: PropTypes.number,\n icon: PropTypes.string,\n caption: PropTypes.string,\n canCreate: UIPermissions,\n canRead: UIPermissions,\n canUpdate: UIPermissions,\n canDelete: UIPermissions,\n editingEnabled: PropTypes.bool // TODO: remove after https://reltio.jira.com/browse/RP-62867 implemented\n});\n\nconst ConnectionEntityType = PropTypes.shape({\n entityUri: PropTypes.string,\n entityType: PropTypes.string,\n entityLabel: PropTypes.string,\n object: EntityType\n});\n\nconst ConnectionRelationType = PropTypes.shape({\n relationUri: PropTypes.string,\n relationType: PropTypes.string,\n relationLabel: PropTypes.string,\n direction: PropTypes.string,\n object: RelationType\n});\n\nconst ConnectionType = PropTypes.shape({\n entity: ConnectionEntityType,\n relation: ConnectionRelationType\n});\n\nconst KeywordSearchType = PropTypes.shape({\n value: PropTypes.string,\n isRawFilter: PropTypes.bool\n});\n\nconst DataTenantType = PropTypes.shape({\n id: PropTypes.string,\n label: PropTypes.string,\n name: PropTypes.string,\n availableEntityTypes: PropTypes.array\n});\n\nexport {\n LookupValueType,\n SimpleLookupType,\n FilterValueType,\n FilterType,\n RelationTypeType,\n EntityTypeType,\n MetadataType,\n EntityType,\n RelationType,\n CardinalityType,\n AttributeTypeType,\n NestedAttributeValueType,\n NestedAttributeType,\n SimpleAttributeValueType,\n ModeType,\n ReferenceAttributeValueType,\n ReferenceAttributeType,\n ComplexAttributeType,\n AttributeErrorType,\n RelationsConfigType,\n ConnectionRelationType,\n ConnectionType,\n SortOrderType,\n ConnectionEntityType,\n KeywordSearchType,\n InteractionTypeType,\n DataTenantType\n};\n","import i18n from 'ui-i18n';\n\nexport const operatorOptions = [\n {\n label: i18n.text('And'),\n value: 'and'\n },\n {\n label: i18n.text('Or'),\n value: 'or'\n },\n {\n label: i18n.text('And not'),\n value: 'and not'\n },\n {\n label: i18n.text('Or not'),\n value: 'or not'\n }\n];\n","export const STATUS_CODE_FIELD = '___!status_code!___';\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\nimport {T, always, cond, is, pipe, prop, when, path} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {STATUS_CODE_FIELD} from '../constants';\n\nconst stringifyIfObject = when(is(Object), JSON.stringify);\n\nconst getStatusTextByStatusCode = (statusCode: number, defaultError?: string) => {\n switch (statusCode) {\n case 400:\n return i18n.text('Bad Request');\n case 403:\n return i18n.text('Forbidden');\n case 404:\n return i18n.text('Not Found');\n case 405:\n return i18n.text('Method Not Allowed');\n case 408:\n return i18n.text('Request Timeout');\n case 500:\n return i18n.text('Internal Server Error');\n case 502:\n return i18n.text('Bad Gateway');\n case 503:\n return i18n.text('Service Unavailable');\n case 504:\n return i18n.text('Gateway Timeout');\n default:\n return defaultError || i18n.text('Something went wrong');\n }\n};\n\nexport const getRequestErrorStatusCode = (error: any) => error?.[STATUS_CODE_FIELD] || error?.originalResponse?.status;\n\nexport const getRequestErrorMessage = (error: any, defaultError?: string, preferredErrorFieldName?: string): string => {\n const fieldsByPriority = [preferredErrorFieldName, 'errorDetailMessage', 'errorMessage', 'error'];\n\n return cond([\n [\n prop('originalResponse'),\n pipe(path(['originalResponse', 'status']), (status) => getStatusTextByStatusCode(status, defaultError))\n ],\n ...fieldsByPriority.map((fieldName) => [prop(fieldName), pipe(prop(fieldName), stringifyIfObject)]),\n [always(defaultError), always(defaultError)],\n [T, stringifyIfObject]\n ])(error);\n};\n\nexport const isAbortError = (e: Error) => e.name === 'AbortError';\n","import {pipe, pluck, prop, sortBy, sum} from 'ramda';\n\nexport const countPercents = (numbers: number[], fractionDigits = 0) => {\n const total = sum(numbers);\n if (total === 0) {\n return [];\n }\n\n const toPrecision = (num) => +num.toFixed(fractionDigits);\n const percentsData = numbers.map((num, index) => {\n const percent = (num / total) * 100;\n const fixedPercent = toPrecision(percent);\n return {\n index,\n percent: fixedPercent,\n diff: fixedPercent - percent\n };\n });\n const percentsTotal = percentsData.reduce((acc, {percent}) => acc + percent, 0);\n let delta = toPrecision(100 - percentsTotal);\n if (delta === 0) {\n return pluck('percent', percentsData);\n }\n\n const deltaSign = Math.sign(delta);\n const sortedPercentsData = percentsData.sort((a, b) => (a.diff - b.diff) * deltaSign || a.index - b.index);\n const deltaFix = (fractionDigits === 0 ? 1 : 1 / Math.pow(10, fractionDigits)) * deltaSign;\n for (let i = 0; delta !== 0 && i < sortedPercentsData.length; i++) {\n sortedPercentsData[i].percent = toPrecision(sortedPercentsData[i].percent + deltaFix);\n delta = toPrecision(delta - deltaFix);\n }\n return pipe(sortBy(prop('index')), pluck('percent'))(sortedPercentsData);\n};\n","const symbols = /[\\n\\r%#()<>?[\\\\\\]^`{}|]/g;\n\nconst encodeSVG = (data) => {\n data = data.replace(/'/g, '\"');\n data = data.replace(/>\\s{1,}</g, '><');\n data = data.replace(/\\s{2,}/g, ' ');\n\n return data.replace(symbols, encodeURIComponent);\n};\nexport const svg2Url = (str: string) => {\n const svg = encodeSVG(str.replace(/[\"']\\);{0,}$/, ''));\n return `data:image/svg+xml;utf8,${svg}`;\n};\nexport const gif2Url = (gif: string) => {\n return `data:image/gif;base64,${gif}`;\n};\n","import i18n from 'ui-i18n';\n\nexport const getIntervalUnitLabel = (unit: string) => {\n switch (unit) {\n case 'minutes':\n return i18n.text('minutes');\n case 'hours':\n return i18n.text('hours');\n case 'days':\n return i18n.text('days');\n case 'weeks':\n return i18n.text('weeks');\n case 'months':\n return i18n.text('months');\n case 'years':\n return i18n.text('years');\n default:\n return '';\n }\n};\n","import {\n AttributeType,\n AttributeValue,\n ComplexAttributeValue,\n Crosswalk,\n Entity,\n NestedAttributeValue,\n PrimitiveValue,\n RecordAttributesType,\n ReferenceAttributeValue,\n Relation,\n SimpleAttributeValue\n} from '../../types';\nimport {isObject} from '../../utils';\n\n/**\n * Use this module to modify objects with attributes (in most cases, entities or relations).\n * Most functions in this module have a similar signature. All functions have the following required arguments:\n * <ol>\n * <li>attributes: entity.attributes or relation.attributes. In all the examples in this topic, the 'attributes' object directly skips entities and relations.</li>\n * <li>attrType: The attribute type from metadata.</li>\n * <li>uri: The URI of an attribute value.</li>\n * </ol>\n *\n * @module entity/editMode/AttributesEditor\n */\nexport {addAttribute, editAttribute, removeAttribute, editRoles, editTags, editStartDate, editEndDate};\n\ntype PartInfo = {\n name: string;\n valueUri: string;\n uri?: string;\n hasChildren?: boolean;\n};\nfunction getPartInfo(name: string, uri: string, fullUri: string, attrType?: AttributeType) {\n //DEBUG:\n if (uri === null || uri === undefined) {\n const errorMessage = `\n Uri is null or undefined.\n getPartInfo parameters when the error occurred:\n 1. name - ${name}\n 2. uri - ${uri}\n 3. fullUri - ${fullUri}\n 4. attrType - ${isObject(attrType) ? JSON.stringify(attrType) : attrType}\n `;\n\n console.error(errorMessage);\n }\n\n const result: PartInfo = {\n name: name,\n valueUri: fullUri.substr(0, fullUri.indexOf(uri) + uri.length)\n };\n\n if (attrType && attrType.uri) {\n result.uri = attrType.uri.substr(0, attrType.uri.indexOf(name) + name.length);\n }\n\n result.hasChildren = result.valueUri !== fullUri;\n\n return result;\n}\n\nfunction getInfoByUri(uri: string, attrType?: AttributeType) {\n const s = uri.substr(uri.indexOf('/attributes/') + 12); // magic is everywhere, especially in strings and numbers\n const parts = s.split('/');\n\n const info: PartInfo[] = [];\n\n for (let i = 0; i < parts.length; i = i + 2) {\n info.push(getPartInfo(parts[i], parts[i + 1], uri, attrType));\n }\n\n return info;\n}\n\nfunction isReference(value: Partial<AttributeValue> | PrimitiveValue): value is ReferenceAttributeValue {\n return (value as ReferenceAttributeValue).refEntity !== undefined;\n}\n\n/**\n * Use this function to define attribute values.\n * Alternatively, you can use editAttribute function for the same purpose.\n * If you define an attribute value with a passed URI that is not found, the URI is added.\n *\n * @param {Object} attributes - The attributes object for new value\n * @param {Object} attrType - Attribute type from metadata\n * @param {string} uri - The uri (temporary in this case) of added value\n * @param {string|Object} value - Added value\n * @param {Array} [crosswalks] - Optional crosswalks array. Used for working with reference attributes.\n * @param {number} [nestingLevel] - Optional. Current nesting level of processing.\n * @param {number} [index] - Optional. Used for adding value to specific place in array.\n * @static\n * @example\n * ```\n * var attributes = {\n * FirstName: [{\n * type: '/attributes/FirstName',\n * uri: '/attributes/FirstName/1',\n * value: 'Jon'\n * }],\n * LastName: [{\n * type: '/attributes/LastName',\n * uri: '/attributes/LastName/1',\n * value: 'Snow'\n * }]\n * };\n *\n * AttributesEditor.addAttribute(\n * attributes,\n * {name: 'LastName', uri: '/attributes/LastName'},\n * '/attributes/LastName/$uri_123',\n * 'Stark');\n *\n * expect(attributes).toEqual({\n * FirstName: [{\n * type: '/attributes/FirstName',\n * uri: '/attributes/FirstName/1',\n * value: 'Jon'\n * }],\n * LastName: [{\n * type: '/attributes/LastName',\n * uri: '/attributes/LastName/1',\n * value: 'Snow'\n * }, {\n * type: '/attributes/LastName',\n * uri: '/attributes/LastName/$uri_123',\n * value: 'Stark'\n * }]\n * });\n * ```\n */\nfunction addAttribute(\n attributes: RecordAttributesType,\n attrType: AttributeType,\n uri: string,\n value: Partial<AttributeValue> | PrimitiveValue,\n crosswalks: Crosswalk[],\n nestingLevel?: number,\n index?: number\n) {\n if (nestingLevel === undefined) {\n nestingLevel = 0;\n }\n\n const info = getInfoByUri(uri, attrType)[nestingLevel];\n\n //DEBUG\n if (!info) {\n const errorMessage = `\n getInfoByUri(uri, attrType)[nestingLevel] returned undefined.\n getInfoByUri(uri, attrType): ${JSON.stringify(getInfoByUri(uri, attrType))}\n addAttribute params when error occurred:\n attributes: ${JSON.stringify(attributes)}\n attrType: ${JSON.stringify(attrType)}\n uri: ${uri}\n value: ${JSON.stringify(value)}\n crosswalks: ${JSON.stringify(crosswalks)}\n nestingLevel: ${nestingLevel}\n index: ${index}\n `;\n console.error(errorMessage);\n }\n\n if (info.hasChildren) {\n if (!attributes[info.name]) {\n attributes[info.name] = [\n {\n uri: info.valueUri,\n value: {},\n type: info.uri\n }\n ];\n }\n\n const attrValue = (attributes[info.name] as ComplexAttributeValue[]).find(function (val) {\n return val.uri === info.valueUri;\n });\n\n return addAttribute(attrValue.value, attrType, uri, value, crosswalks, nestingLevel + 1, index);\n } else {\n if (!attributes[info.name]) {\n attributes[info.name] = [];\n }\n if (value == null) {\n return;\n }\n const values = attributes[attrType.name] as AttributeValue[];\n const complexAttributeValue = value as ComplexAttributeValue;\n const referenceAttributeValue = value as ReferenceAttributeValue;\n let val = {\n value:\n (value as ReferenceAttributeValue).refEntity ||\n (isObject(complexAttributeValue.value) && !Array.isArray(complexAttributeValue.value))\n ? complexAttributeValue.value\n : value,\n uri: uri,\n type: attrType.uri\n } as AttributeValue & {crosswalks?: Crosswalk[]};\n\n if ((value as SimpleAttributeValue).lookupCode) {\n const lookupVal = val as SimpleAttributeValue;\n const lookupValue = value as SimpleAttributeValue;\n lookupVal.value = lookupValue.value;\n lookupVal.lookupCode = lookupValue.lookupCode;\n val = lookupVal;\n }\n\n if (referenceAttributeValue.refEntity) {\n const refVal = val as ReferenceAttributeValue;\n refVal.refEntity = referenceAttributeValue.refEntity;\n refVal.label = referenceAttributeValue.label;\n val = refVal;\n }\n\n if (referenceAttributeValue.refRelation) {\n const refVal = val as ReferenceAttributeValue;\n refVal.refRelation = referenceAttributeValue.refRelation;\n val = refVal;\n }\n\n if (crosswalks) {\n val.crosswalks = crosswalks;\n }\n\n values.splice(index || 0, 0, val);\n\n return value;\n }\n}\n\n/**\n * Use this function to edit attribute values.\n * If you edit an attribute value with a passed URI that is not be found, the URI is added.\n *\n * @param {Object} attributes - The attributes object for edited value\n * @param {Object} attrType - Attribute type from metadata\n * @param {string} uri - The uri of attribute value\n * @param {string|Object} value - New value\n * @param {Array} [crosswalks] - Optional crosswalks array. Used for working with reference attributes.\n * @static\n * @example\n * ```\n * var attributes = {\n * FirstName: [{\n * type: '/attributes/FirstName',\n * uri: '/attributes/FirstName/1',\n * value: 'Jon'\n * }],\n * LastName: [{\n * type: '/attributes/LastName',\n * uri: '/attributes/LastName/1',\n * value: 'Snow'\n * }]\n * };\n *\n * AttributesEditor.editAttribute(\n * attributes,\n * {name: 'LastName', uri: '/attributes/LastName'},\n * '/attributes/LastName/1',\n * 'Stark');\n *\n * expect(attributes).toEqual({\n * FirstName: [{\n * type: '/attributes/FirstName',\n * uri: '/attributes/FirstName/1',\n * value: 'Jon'\n * }],\n * LastName: [{\n * type: '/attributes/LastName',\n * uri: '/attributes/LastName/1',\n * value: 'Stark'\n * }]\n * });\n * ```\n */\nfunction editAttribute(\n attributes: RecordAttributesType,\n attrType: AttributeType,\n uri: string,\n value: Partial<AttributeValue> | PrimitiveValue,\n crosswalks: Crosswalk[],\n nestingLevel?: number\n) {\n if (nestingLevel === undefined) {\n nestingLevel = 0;\n }\n\n const info = getInfoByUri(uri, attrType)[nestingLevel];\n\n //DEBUG\n if (!info) {\n const errorMessage = `\n getInfoByUri(uri, attrType)[nestingLevel] returned undefined.\n getInfoByUri(uri, attrType): ${JSON.stringify(getInfoByUri(uri, attrType))}\n editAttribute params when error occurred:\n attributes: ${JSON.stringify(attributes)}\n attrType: ${JSON.stringify(attrType)}\n uri: ${uri}\n value: ${JSON.stringify(value)}\n crosswalks: ${JSON.stringify(crosswalks)}\n nestingLevel: ${nestingLevel}\n `;\n console.error(errorMessage);\n }\n\n if (info.hasChildren) {\n const parent = editAttribute(\n attributes,\n info as unknown as AttributeType,\n info.valueUri,\n {} as AttributeValue,\n crosswalks,\n nestingLevel\n );\n editAttribute(parent, attrType, uri, value, crosswalks, nestingLevel + 1);\n } else {\n const values = attributes[attrType.name];\n let valueToEdit =\n values &&\n ((values as AttributeValue[]).find(function (val) {\n return val.uri === uri;\n }) as AttributeValue & {crosswalks?: Crosswalk[]});\n let result: RecordAttributesType;\n if (!valueToEdit) {\n result = addAttribute(attributes, attrType, uri, value, crosswalks, nestingLevel) as RecordAttributesType;\n } else {\n if (valueToEdit.value.toString() !== '[object Object]') {\n // edit values only for simple attributes\n updateAttrValue(value, valueToEdit as SimpleAttributeValue);\n\n if (crosswalks) {\n valueToEdit.crosswalks = crosswalks;\n }\n\n if (\n attrType.cardinality &&\n attrType.cardinality.minValue === 1 &&\n attrType.cardinality.maxValue === 1\n ) {\n (values as AttributeValue[])\n .filter(function (val) {\n return val.ov === false;\n })\n .forEach(updateAttrValue.bind(null, value));\n }\n } else if (isReference(value)) {\n const refValueToEdit = valueToEdit as ReferenceAttributeValue;\n refValueToEdit.refRelation = value.refRelation;\n refValueToEdit.refEntity = value.refEntity;\n refValueToEdit.value = value.value;\n refValueToEdit.label = value.label;\n valueToEdit = refValueToEdit;\n } else if (\n (value as ComplexAttributeValue).value !== null &&\n (value as ComplexAttributeValue).value !== undefined &&\n valueToEdit.value !== null &&\n typeof valueToEdit.value === 'object'\n ) {\n valueToEdit.value = (value as ComplexAttributeValue).value;\n (valueToEdit as NestedAttributeValue).label = (value as NestedAttributeValue).label;\n }\n result = valueToEdit.value as RecordAttributesType;\n }\n return result;\n }\n}\n\nfunction isSimpleAttributeValue(value: Partial<AttributeValue> | PrimitiveValue): value is SimpleAttributeValue {\n return isObject(value);\n}\n\nfunction updateAttrValue(value: Partial<AttributeValue> | PrimitiveValue, attrValue: SimpleAttributeValue) {\n if (isSimpleAttributeValue(value)) {\n attrValue.value = value.value;\n attrValue.lookupCode = value.lookupCode;\n } else {\n attrValue.value = value as PrimitiveValue;\n\n if (attrValue.lookupCode) {\n attrValue.lookupCode = value as string;\n }\n }\n}\n\n/**\n * Use this function to remove attribute values.\n *\n * @param {Object} attributes - The attributes object\n * @param {Object} attrType - Attribute type from metadata\n * @param {string} uri - The uri of attribute to remove\n * @static\n * @example\n * ```\n * var attributes = {\n * FirstName: [{\n * type: '/attributes/FirstName',\n * uri: '/attributes/FirstName/1',\n * value: 'Jon'\n * }],\n * LastName: [{\n * type: '/attributes/LastName',\n * uri: '/attributes/LastName/1',\n * value: 'Snow'\n * }]\n * };\n *\n * AttributesEditor.removeAttribute(\n * attributes,\n * {name: 'LastName', uri: '/attributes/LastName'},\n * '/attributes/LastName/1');\n *\n * expect(attributes).toEqual({\n * FirstName: [{\n * type: '/attributes/FirstName',\n * uri: '/attributes/FirstName/1',\n * value: 'Jon'\n * }]\n * });\n * ```\n */\nfunction removeAttribute(\n attributes: RecordAttributesType,\n attrType: AttributeType,\n uri: string,\n nestingLevel?: number\n) {\n if (nestingLevel === undefined) {\n nestingLevel = 0;\n }\n\n const info = getInfoByUri(uri)[nestingLevel];\n\n //DEBUG\n if (!info) {\n const errorMessage = `\n getInfoByUri(uri, attrType)[nestingLevel] returned undefined.\n getInfoByUri(uri, attrType): ${JSON.stringify(getInfoByUri(uri, attrType))}\n removeAttribute params when error occurred:\n attributes: ${JSON.stringify(attributes)}\n attrType: ${JSON.stringify(attrType)}\n uri: ${uri}\n nestingLevel: ${nestingLevel}\n `;\n console.error(errorMessage);\n }\n\n if (info.hasChildren) {\n const complexAttribute = ((attributes[info.name] || []) as ComplexAttributeValue[]).find(function (attr) {\n return attr.uri === info.valueUri;\n });\n if (complexAttribute) {\n removeAttribute(complexAttribute.value, attrType, uri, nestingLevel + 1);\n }\n } else {\n const values = attributes[attrType.name] as AttributeValue[];\n if (values) {\n values.forEach(function (val, index) {\n if (val.uri === uri) {\n values.splice(index, 1);\n }\n });\n\n if (values.length === 0) {\n delete attributes[attrType.name];\n }\n }\n }\n}\n\n/**\n * Use this function to set the roles for an entity.\n * NOTE: To set this value correctly, use the whole entity object.\n *\n * @param {Object} entity - The entity to modify roles\n * @param {Array|null} value - The string array with roles or null to remove all roles\n * @static\n * @example\n * ```\n * var entity = {\n * roles: null\n * };\n *\n * AttributesEditor.editRoles(entity, ['Rat Cook', 'Arson Iceaxe', 'First King']);\n * expect(entity.roles).toEqual(['Rat Cook', 'Arson Iceaxe', 'First King']);\n *\n * AttributesEditor.editRoles(entity, null);\n * expect(entity.roles).toEqual([]);\n * ```\n */\nfunction editRoles(entity: Entity, value?: string[]) {\n entity['roles'] = value || [];\n}\n\n/**\n * Use this function to set tags for an entity.\n * NOTE: To set this value correctly, use the whole entity object.\n *\n * @param {Object} entity - The entity to modify roles\n * @param {Array|null} value - The string array with tags or null to remove all tags\n * @static\n * @example\n * ```\n * var entity = {\n * roles: null\n * };\n *\n * AttributesEditor.editTags(entity, ['Bolton', 'Targaryen', 'Stark']);\n * expect(entity.tags).toEqual(['Bolton', 'Targaryen', 'Stark']);\n *\n * AttributesEditor.editTags(entity, null);\n * expect(entity.tags).toEqual([]);\n * ```\n */\nfunction editTags(entity: Entity, value?: string[]) {\n entity['tags'] = value || [];\n}\n\n/**\n * Use this function to set the start date for a relation.\n * NOTE: To set this value correctly, use the whole relation object.\n *\n * @param {Object} entityOrRelation - Relation to modify start date\n * @param {number|null} value - The time in milliseconds or null to remove start date\n * @static\n * @example\n * ```\n * var relation = {\n * startDate: null\n * };\n *\n * AttributesEditor.editStartDate(relation, new Date().getTime());\n * ```\n */\nfunction editStartDate(entityOrRelation: Entity | Relation, value?: number) {\n entityOrRelation['startDate'] = value;\n}\n\n/**\n * Use this function to set an end date for a relation.\n * NOTE: To set this value correctly, use the whole relation object.\n *\n * @param {Object} entityOrRelation - Relation to modify end date\n * @param {number|null} value - The time in milliseconds or null to remove end date\n * @static\n * @example\n * ```\n * var relation = {\n * endDate: null\n * };\n *\n * AttributesEditor.editEndDate(relation, new Date().getTime());\n * ```\n */\nfunction editEndDate(entityOrRelation: Entity | Relation, value?: number) {\n entityOrRelation['endDate'] = value;\n}\n","export const TEMP_URI = 'uri$$';\nexport const TEMP_URI_FOR_API = '1Tempo4rary';\nexport const TEMP_URI_FOR_API_RELATIONS = '1Tepmo4Rel';\nexport const TEMP_URI_FOR_DCR = '1Tempo4DCR';\n","import {\n __,\n always,\n concat,\n cond,\n curry,\n defaultTo,\n either,\n head,\n isNil,\n last,\n pipe,\n prop,\n split,\n startsWith,\n test\n} from 'ramda';\nimport {customAlphabet} from 'nanoid';\nimport {TEMP_URI, TEMP_URI_FOR_API, TEMP_URI_FOR_API_RELATIONS, TEMP_URI_FOR_DCR} from './constants';\n\nconst makeBaseUri = cond([\n [isNil, always('')],\n [test(/[^/]$/), concat(__, '/')]\n]);\n\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\nconst nanoid = customAlphabet(alphabet, 16);\nconst generateUniqPart = () => `${nanoid()}${Date.now()}`;\n\nconst generateTempDCRUri = () => `${TEMP_URI_FOR_DCR}${generateUniqPart()}`;\nconst generateTempUri = (uriPrefix) => `${uriPrefix}/${TEMP_URI}${generateUniqPart()}`;\nconst createTempUriGenerator = (uriPrefix) => () => generateTempUri(uriPrefix);\n\nconst generateUri = (parentUri, attributeTypeName) => {\n const baseUri = makeBaseUri(parentUri);\n const uriPrefix = baseUri + (baseUri.includes('/attributes/') ? '' : 'attributes/') + attributeTypeName;\n return generateTempUri(uriPrefix);\n};\n\nconst isTempUri = (uri) => uri && uri.includes(TEMP_URI);\n\nconst generateTempEntityUri = createTempUriGenerator('entities');\nconst generateNewRelationUri = createTempUriGenerator('relations');\n\nconst getBaseUri = pipe(split('/attributes/'), prop('0'));\n\nconst isRelationUri = startsWith('relations/');\nconst isEntityUri = startsWith('entities/');\nconst isEntityTypeUri = pipe(defaultTo(''), startsWith('configuration/entityTypes/'));\nconst isRelationTypeUri = pipe(defaultTo(''), startsWith('configuration/relationTypes/'));\n\nconst areOneHierarchyUris = curry(\n (childUri, parentUri) => childUri === parentUri || (childUri || '').startsWith(`${parentUri || ''}/`)\n);\n\nconst getFirstUriPart = pipe(split('/'), head);\nconst getLastUriPart = pipe(split('/'), last);\n\nconst getFirstLevelSearchUri = (searchUri) => searchUri.split('.').slice(0, 2).join('.');\n\nconst searchUriToAttrUri = (searchUri, entityTypeUri) => {\n const [collectionName, ...attributes] = searchUri.split('.');\n const attributesPart = attributes.join(`/${collectionName}/`);\n const attributeUri = collectionName + (attributesPart && `/${attributesPart}`);\n return `${entityTypeUri || ''}/${attributeUri}`;\n};\n\nconst makeAttrTypeUri = curry((parentTypeUri, attrTypeName) => `${parentTypeUri}/attributes/${attrTypeName}`);\n\nconst getAttributeTypeUriByValueUri = (valueUri, typeUri) => {\n const valueUriArr = valueUri.split('/');\n const entityTypeUriArr = typeUri.split('/');\n if (valueUriArr.length === 2) {\n return typeUri;\n }\n\n return [\n entityTypeUriArr,\n valueUriArr.slice(2, 3),\n valueUriArr.slice(3).map((value, idx) => (idx % 2 ? valueUriArr[2] : value))\n ]\n .flat()\n .slice(0, -1)\n .join('/');\n};\n\nconst getEntityUriFromAttributeUri = (attributeUri) => {\n return attributeUri.match(/.+?(?=\\/attributes|\\/analyticsAttributes)/gm)?.[0];\n};\nconst isAttributeSearchUri = either(startsWith('attributes.'), startsWith('analyticsAttributes.'));\nconst isTopLevelUri = (valueOrTypeUri) => {\n const isTypeUri = valueOrTypeUri.startsWith('configuration/');\n const numberOfRootParts = isTypeUri ? 3 : 2;\n return valueOrTypeUri.split('/').length === numberOfRootParts;\n};\nconst isFirstLevelAttributeUri = (valueUri) => valueUri.split('/').length === 5;\nconst getParentUri = (valueOrTypeUri) => {\n const isTypeUri = valueOrTypeUri.startsWith('configuration/');\n const numberOfRootParts = isTypeUri ? 3 : 2;\n const parts = valueOrTypeUri.split('/');\n const sliceTo = parts.length <= 5 ? numberOfRootParts : -2;\n return parts.slice(0, sliceTo).join('/');\n};\n\nconst tempUriToApiFormat = (uri) => uri.replace(/uri\\$\\$/g, TEMP_URI_FOR_API);\nconst tempUriFromApiFormat = (uri) =>\n uri.replace(new RegExp(TEMP_URI_FOR_API, 'g'), 'uri$$$$').replace(new RegExp(TEMP_URI_FOR_API_RELATIONS, 'g'), '');\n\nconst isChangeRequestUri = (uri) => uri?.startsWith('changeRequests/');\nconst isDCRUri = (uri) => isChangeRequestUri(uri) && uri.includes('/changes/');\n\nconst getEntityUriFromDCRUri = (uri) => uri.split('/changes/')[1];\n\nexport {\n generateNewRelationUri,\n generateTempEntityUri,\n generateTempDCRUri,\n generateTempUri,\n generateUri,\n isDCRUri,\n isChangeRequestUri,\n isTempUri,\n isRelationUri,\n isFirstLevelAttributeUri,\n getBaseUri,\n isEntityUri,\n areOneHierarchyUris,\n getFirstUriPart,\n getLastUriPart,\n isEntityTypeUri,\n searchUriToAttrUri,\n makeAttrTypeUri,\n getAttributeTypeUriByValueUri,\n getEntityUriFromAttributeUri,\n isRelationTypeUri,\n isAttributeSearchUri,\n getEntityUriFromDCRUri,\n getParentUri,\n tempUriToApiFormat,\n tempUriFromApiFormat,\n getFirstLevelSearchUri,\n isTopLevelUri\n};\n","import {pipe, prop, filter, startsWith, curry} from 'ramda';\nimport {areOneHierarchyUris} from '../uris';\n\nconst getReferencedEntityTypeUriFromAttrType = prop('referencedEntityTypeURI');\n\nconst getRelationTypeUriFromAttrType = prop('relationshipTypeURI');\n\nconst getReferencedAttrTypeUrisFromAttrType = prop('referencedAttributeURIs');\n\nconst getReferencedAttrTypesUrisStartingWith = curry((uriPrefix, attrType) =>\n pipe(getReferencedAttrTypeUrisFromAttrType, filter(startsWith(uriPrefix)))(attrType)\n);\n\nconst getReferencedRelationAttrTypesUris = getReferencedAttrTypesUrisStartingWith('configuration/relationTypes');\n\nconst getReferencedEntityAttrTypesUris = getReferencedAttrTypesUrisStartingWith('configuration/entityTypes');\n\nconst isRelationAttrType = pipe(prop('uri'), startsWith('configuration/relationTypes'));\n\nconst getReferencedRelationAttrTypes = filter(isRelationAttrType);\n\nconst isAllowedReferencedSubAttribute = (attrType, referencedUris) =>\n !referencedUris || referencedUris.some((uri) => areOneHierarchyUris(attrType.uri, uri));\n\nexport {\n getReferencedEntityTypeUriFromAttrType,\n getRelationTypeUriFromAttrType,\n getReferencedAttrTypeUrisFromAttrType,\n getReferencedRelationAttrTypesUris,\n getReferencedEntityAttrTypesUris,\n getReferencedRelationAttrTypes,\n isAllowedReferencedSubAttribute,\n isRelationAttrType\n};\n","import {DataTypes, SearchParent} from '../types';\nimport {\n allPass,\n always,\n anyPass,\n both,\n chain,\n cond,\n curry,\n either,\n equals,\n has,\n isNil,\n last,\n map,\n not,\n pick,\n pipe,\n prop,\n propEq,\n propSatisfies,\n reject,\n startsWith,\n T,\n test,\n type,\n when\n} from 'ramda';\nimport {getReferencedAttrTypeUrisFromAttrType, getReferencedRelationAttrTypes} from './referenceAttribute';\nimport {getFirstUriPart, isEntityTypeUri} from '../uris';\nimport {AttributeType, Metadata} from '../types/metadata';\n\nconst isTypeaheadAttrType = (attrType: AttributeType): boolean =>\n allPass([\n propSatisfies(anyPass([isNil, isSpecialAttribute, isEntityTypeUri]), 'uri'),\n prop('faceted'),\n propEq('type', DataTypes.TYPE_STRING)\n ])(attrType);\n\nconst isEnumAttrType = has('values');\n\nconst getAttrDataType = cond([\n [has('dependentLookupCode'), always(DataTypes.TYPE_DEPENDENT_LOOKUP)],\n [has('lookupCode'), always(DataTypes.TYPE_LOOKUP)],\n [isEnumAttrType, always(DataTypes.TYPE_ENUM)],\n [isTypeaheadAttrType, always(DataTypes.TYPE_TYPEAHEAD)],\n [propEq('type', DataTypes.TYPE_BOOLEAN), always(DataTypes.TYPE_BOOLEAN_RADIO)],\n [T, prop('type')]\n]);\n\nconst getAttrDataTypeDefinition = pipe(\n (attr) => ({...attr, type: getAttrDataType(attr)}),\n pick(['type', 'values', 'lookupCode', 'uri', 'name', 'dependentLookupCode', 'singleValue'])\n);\n\nconst isAutoGeneratedAttribute = (attrType: AttributeType): boolean =>\n !!attrType &&\n ((!!attrType.autoGenerated && attrType.type !== DataTypes.TYPE_NESTED) || !!attrType.parentAutoGenerated);\n\nconst isAnalyticAttribute = pipe(when(pipe(type, test(/Object/)), prop('uri')), test(/\\/analyticsAttributes\\//));\nconst isSpecialAttribute = pipe(when(pipe(type, test(/Object/)), prop('uri')), startsWith('configuration/'), not);\n\nconst getAttributeSource = (attrType) => {\n const isAnalytic = isAnalyticAttribute(attrType);\n return isAnalytic ? 'analyticsAttributes' : 'attributes';\n};\n\nconst isHiddenAttribute = propEq('hidden', true);\n\nconst isSpecificAttributeType = curry((typeName, attrType) =>\n pipe(when(pipe(type, test(/Object/)), prop('type')), equals(typeName))(attrType)\n);\n\nconst isNested = isSpecificAttributeType(DataTypes.TYPE_NESTED);\nconst isReference = isSpecificAttributeType(DataTypes.TYPE_REFERENCE);\nconst isImage = isSpecificAttributeType(DataTypes.TYPE_IMAGE);\n\nconst isComplexAttribute = either(isNested, isReference);\n\nconst attributeUriToSearchUri = (attrUri: string, parents?: SearchParent[]) => {\n const collectionName = isAnalyticAttribute(attrUri) ? 'analyticsAttributes' : 'attributes';\n const uriParts = attrUri.split(`/${collectionName}/`);\n const parts = Array.isArray(parents) ? [...chain(prop('name'), parents), last(uriParts)] : [...uriParts.slice(1)];\n return [collectionName, ...parts].join('.');\n};\n\nconst getAttrTypeLookupCode = either(prop('lookupCode'), prop('dependentLookupCode'));\nconst isLookupAttrType = pipe(getAttrTypeLookupCode, Boolean);\nconst isDependentLookupAttrType = pipe(prop('dependentLookupCode'), Boolean);\n\nconst isUriStartingWith = (uriPrefix: string) => pipe(getFirstUriPart, equals(uriPrefix));\nconst isRDMLookupAttrType = both(isLookupAttrType, pipe(getAttrTypeLookupCode, isUriStartingWith('rdm')));\n\nconst getAttributeTypesHierarchyByUri = (metadata: Metadata, uri: string, rootUri: string = null) => {\n const sourceProp = getAttributeSource({uri});\n const getLevel = (uri) => uri.split(`/${sourceProp}/`).length;\n const allTypes = (metadata.entityTypes || []).concat(metadata.relationTypes || []);\n const rootType = rootUri ? allTypes.find(propEq('uri', rootUri)) : null;\n const rootLevel = rootType ? getLevel(rootType.uri) : 0;\n\n const getHierarchyForType = (parentType, level) => {\n const currentLevelUri = uri\n .split(`/${sourceProp}/`)\n .slice(0, level + 1)\n .join(`/${sourceProp}/`);\n const currentLevelName = last(currentLevelUri.split(`/${sourceProp}/`));\n const currentLevelType = (\n parentType ? parentType[sourceProp] || getAttributeTypeSubAttributes(metadata, parentType) || [] : allTypes\n ).find(({uri, name}) => uri === currentLevelUri || name === currentLevelName);\n\n const result = currentLevelType ? [currentLevelType] : [];\n if (currentLevelType && currentLevelUri !== uri) {\n result.push(...getHierarchyForType(currentLevelType, level + 1));\n }\n return result;\n };\n\n const result = getHierarchyForType(rootType, rootLevel);\n const isResultValid = result.length === getLevel(uri) - rootLevel;\n return isResultValid ? result : [];\n};\n\nconst findAttributeTypeByUri = (metadata: Metadata, uri: string, parentUri: string = null): AttributeType => {\n const hierarchy = getAttributeTypesHierarchyByUri(metadata, uri, parentUri);\n return hierarchy.length ? last(hierarchy) : null;\n};\n\nconst getAttributeTypeSubAttributes = (metadata: Metadata = {entityTypes: []}, attrType: AttributeType) =>\n cond([\n [has('analyticsAttributes'), prop('analyticsAttributes')],\n [anyPass([propEq('type', DataTypes.TYPE_NESTED), propEq('type', DataTypes.TYPE_IMAGE)]), prop('attributes')],\n [\n propEq('type', DataTypes.TYPE_REFERENCE),\n pipe(\n getReferencedAttrTypeUrisFromAttrType,\n map((attrTypeUri) => findAttributeTypeByUri(metadata, attrTypeUri)),\n reject(isNil)\n )\n ],\n [T, always(null)]\n ])(attrType);\n\nconst getEditableAttributeTypeSubAttributes = (metadata: Metadata = {entityTypes: []}, attrType: AttributeType) => {\n const allSubAttributes = getAttributeTypeSubAttributes(metadata, attrType);\n return allSubAttributes && isReference(attrType)\n ? getReferencedRelationAttrTypes(allSubAttributes)\n : allSubAttributes;\n};\n\nconst DATE_TYPES = [\n DataTypes.TYPE_ACTIVENESS_DATE,\n DataTypes.TYPE_DATE,\n DataTypes.TYPE_TIMESTAMP,\n DataTypes.TYPE_LOCAL_DATE\n];\nconst TIMESTAMP_BASED_TYPES = [DataTypes.TYPE_ACTIVENESS_DATE, DataTypes.TYPE_TIMESTAMP, DataTypes.TYPE_LOCAL_DATE];\nconst isDateType = (type) => DATE_TYPES.includes(type);\nconst isTimestampBasedType = (type) => TIMESTAMP_BASED_TYPES.includes(type);\n\nconst NUMERIC_TYPES = [\n DataTypes.TYPE_INT,\n DataTypes.TYPE_LONG,\n DataTypes.TYPE_NUMBER,\n DataTypes.TYPE_FLOAT,\n DataTypes.TYPE_DOUBLE,\n DataTypes.TYPE_COUNT\n];\nconst isNumericType = (type: DataTypes | string): boolean => NUMERIC_TYPES.includes(type as DataTypes);\nconst isFloatingType = (type: DataTypes | string): boolean =>\n [DataTypes.TYPE_FLOAT, DataTypes.TYPE_DOUBLE].includes(type as DataTypes);\n\nconst BOOLEAN_TYPES = [DataTypes.TYPE_BOOLEAN, DataTypes.TYPE_BOOLEAN_RADIO, DataTypes.TYPE_RDM_LOOKUPS_NOT_RESOLVED];\nconst isBooleanType = (type: DataTypes | string): boolean => BOOLEAN_TYPES.includes(type as DataTypes);\n\nconst URL_TYPES = [DataTypes.TYPE_URL, DataTypes.TYPE_BLOG_URL, DataTypes.TYPE_IMAGE_URL];\n\nconst isUrlType = (type: string | DataTypes): boolean => URL_TYPES.includes(type as DataTypes);\nconst isEmailType = isSpecificAttributeType(DataTypes.TYPE_EMAIL);\n\nconst isSSNType = (type: string | DataTypes): boolean => DataTypes.TYPE_SSN === type;\n\nexport {\n attributeUriToSearchUri,\n getAttrDataTypeDefinition,\n isComplexAttribute,\n isNested,\n isReference,\n isImage,\n isDateType,\n isTimestampBasedType,\n isBooleanType,\n isNumericType,\n isAnalyticAttribute,\n isSpecialAttribute,\n isAutoGeneratedAttribute,\n isHiddenAttribute,\n getAttributeSource,\n getAttrTypeLookupCode,\n findAttributeTypeByUri,\n getAttributeTypeSubAttributes,\n getEditableAttributeTypeSubAttributes,\n getAttributeTypesHierarchyByUri,\n isTypeaheadAttrType,\n isEnumAttrType,\n isLookupAttrType,\n isDependentLookupAttrType,\n isRDMLookupAttrType,\n isUrlType,\n isEmailType,\n isFloatingType,\n isSSNType\n};\n","import {curry} from 'ramda';\n\nenum ConfigPermissions {\n CREATE = 'canCreate',\n READ = 'canRead',\n UPDATE = 'canUpdate',\n DELETE = 'canDelete'\n}\n\nconst checkConfigPermission = curry((permission: ConfigPermissions, roles: string[], config: Record<string, any>) => {\n const hardcodedRoles =\n permission === ConfigPermissions.READ ? ['ROLE_UI_ALL', 'ROLE_UI_ALL_READONLY'] : ['ROLE_UI_ALL'];\n const configRoles = config[permission]?.roles as string[];\n return !configRoles || configRoles.concat(hardcodedRoles).some((role) => roles.includes(role));\n});\n\nexport {ConfigPermissions, checkConfigPermission};\n","import {curry, find, intersection, pipe, prop, propEq} from 'ramda';\nimport {CurriedFunction2, CurriedFunction3, Metadata, TEntityType} from '../types';\n\nexport const getEntityType: CurriedFunction2<Metadata, string, TEntityType | undefined> = curry(\n ({entityTypes}, entityTypeUri) => find(propEq('uri', entityTypeUri), entityTypes)\n);\n\nconst getExtendsTypeUri: CurriedFunction2<Metadata, string, string | undefined> = curry((metadata, typeUri) =>\n pipe(getEntityType(metadata), prop('extendsTypeURI'))(typeUri)\n);\n\nexport const isInHierarchy: CurriedFunction3<Metadata, string, string, boolean> = curry(\n (metadata, uriOrParent, uri) => {\n const isAncestorUri = (typeUri) =>\n !!typeUri && (typeUri === uriOrParent || isAncestorUri(getExtendsTypeUri(metadata, typeUri)));\n\n return isAncestorUri(uri);\n }\n);\n\nexport const getInheritancePath: CurriedFunction2<Metadata, string, string[]> = curry((metadata, typeUri) => {\n const result = [];\n let currentTypeUri = typeUri;\n while (currentTypeUri) {\n result.push(currentTypeUri);\n currentTypeUri = getExtendsTypeUri(metadata, currentTypeUri);\n }\n return result;\n});\n\nexport const getPropWithInheritance = <T extends keyof TEntityType>(\n metadata: Metadata,\n type: TEntityType,\n property: T\n): TEntityType[T] | undefined => {\n if (prop(property, type)) {\n return type[property];\n } else if (prop('extendsTypeURI', type)) {\n return getPropWithInheritance(metadata, getEntityType(metadata, type.extendsTypeURI), property);\n }\n return undefined;\n};\n\nexport const findClosestCommonAncestor = (metadata: Metadata, entityTypeUris: string[]): string => {\n const inheritancePaths = entityTypeUris.map(getInheritancePath(metadata));\n const commonUris = inheritancePaths.length ? inheritancePaths.reduce(intersection) : [];\n return commonUris[0];\n};\nexport const getEntityTypeImage = (metadata: Metadata, type: TEntityType | string): string => {\n return getPropWithInheritance(\n metadata,\n typeof type === 'string' ? getEntityType(metadata, type) : type,\n 'typeImage'\n );\n};\n\nexport const getDescendantEntityTypes = (metadata, parentTypeUri) =>\n metadata.entityTypes.reduce(\n (entityTypeUris, entityType) =>\n entityType.uri !== parentTypeUri && isInHierarchy(metadata, parentTypeUri, entityType.uri)\n ? entityTypeUris.concat(entityType.uri)\n : entityTypeUris,\n []\n );\n","import {curry, find, path, pathOr, pipe, propEq, propOr, reduce, prop} from 'ramda';\nimport {isInHierarchy} from './entityTypes';\nimport {Directions} from '../constants';\n\nexport const getRelationType = curry(({relationTypes}, relationTypeUri) =>\n find(propEq('uri', relationTypeUri), relationTypes)\n);\n\nexport const getRelationTypeLabelFromMetadata = pipe(getRelationType, propOr('', 'label'));\n\nexport const getRelationEntityTypesUris = curry((metadata, relationTypeUri) => {\n const relationType = getRelationType(metadata, relationTypeUri);\n const startUri = path(['startObject', 'objectTypeURI'], relationType);\n const endUri = path(['endObject', 'objectTypeURI'], relationType);\n return [startUri, endUri];\n});\n\nexport const isRelationWithEntityType = curry((metadata, entityTypeUri, relationTypeUri) => {\n const [startUri, endUri] = getRelationEntityTypesUris(metadata, relationTypeUri);\n return isInHierarchy(metadata, startUri, entityTypeUri) || isInHierarchy(metadata, endUri, entityTypeUri);\n});\n\nexport const createRelationTypesLabelsMap = pipe(\n propOr([], 'relationTypes'),\n reduce((result, {uri, label}) => ({...result, [uri]: label}), {})\n);\n\nexport const inOutRelationsDeduplicator = ({reversedContextLabels} = {}) => {\n const labelsMap = {};\n const filterRelations = (targetDirection) => (relationType) => {\n let {label} = relationType;\n const objectId =\n targetDirection === (reversedContextLabels ? Directions.OUT : Directions.IN) ? 'startObject' : 'endObject';\n const {directionalContext} = relationType[objectId];\n if (relationType.direction === 'directed' && propOr(0, 'length', directionalContext) === 1) {\n label += ` (${directionalContext[0].labelPattern})`;\n }\n if (label in labelsMap) {\n return false;\n } else {\n labelsMap[label] = true;\n return true;\n }\n };\n const isNotDuplicatedInRelation = filterRelations(Directions.IN);\n const isNotDuplicatedOutRelation = filterRelations(Directions.OUT);\n return {isNotDuplicatedInRelation, isNotDuplicatedOutRelation};\n};\n\nexport const getDirectionalLabelFromObject = pathOr('', ['directionalContext', 0, 'labelPattern']);\n\nexport const getRelationTypePropWithInheritance = (metadata, type, property) => {\n if (prop(property, type)) {\n return type[property];\n } else if (prop('extendsTypeURI', type)) {\n return getRelationTypePropWithInheritance(metadata, getRelationType(metadata, type.extendsTypeURI), property);\n }\n return undefined;\n};\n","import {and, curry, defaultTo, filter, find, identity, map, mergeWith, pipe, prop, propEq, propOr, reduce} from 'ramda';\n\nimport {isAutoGeneratedAttribute} from '../metadata/attributes';\nimport {isSuggestMode} from '../mode';\nimport {getEntityType, isInHierarchy} from '../metadata/entityTypes';\nimport {getRelationEntityTypesUris, getRelationType} from '../metadata/relations';\nimport {AttributeType, TEntityType, TRelationType} from '../types';\n\ntype CheckPermission = (type: TEntityType | TRelationType | AttributeType) => boolean;\n\nenum MetadataPermissions {\n CREATE = 'CREATE',\n READ = 'READ',\n UPDATE = 'UPDATE',\n DELETE = 'DELETE',\n INITIATE_CHANGE_REQUEST = 'INITIATE_CHANGE_REQUEST',\n MERGE = 'MERGE',\n UNMERGE = 'UNMERGE'\n}\n\nconst checkMetadataPermissions = curry((permissions, metadataType) =>\n permissions.every((permission) => checkMetadataPermission(permission, metadataType))\n);\n\nconst checkMetadataPermission = curry((permission, metadataType) => {\n const isReadOnly = isAutoGeneratedAttribute(metadataType);\n return (\n checkBasicMetadataPermission(permission, metadataType) &&\n (permission === MetadataPermissions.READ || !isReadOnly)\n );\n});\n\nconst checkBasicMetadataPermission = (permission: MetadataPermissions, metadataType: {access?: string[]}) => {\n return !metadataType || !metadataType.access || metadataType.access.includes(permission);\n};\n\nconst checkMetadataPermissionForCurrentMode = curry(\n (permission, mode, metadataType) =>\n checkMetadataPermission(MetadataPermissions.READ, metadataType) &&\n (isSuggestMode(mode)\n ? checkMetadataPermission(MetadataPermissions.INITIATE_CHANGE_REQUEST, metadataType)\n : checkMetadataPermission(permission, metadataType))\n);\n\nconst checkMetadataForCreate = checkMetadataPermissionForCurrentMode(MetadataPermissions.CREATE);\nconst checkMetadataForDelete = checkMetadataPermissionForCurrentMode(MetadataPermissions.DELETE);\nconst checkMetadataForUpdate = checkMetadataPermissionForCurrentMode(MetadataPermissions.UPDATE);\n\nconst checkCanImportEntityOfType: CheckPermission = checkMetadataPermissions([\n MetadataPermissions.CREATE,\n MetadataPermissions.MERGE,\n MetadataPermissions.READ,\n MetadataPermissions.UPDATE\n]);\n\nconst checkCanCreateCrosswalk: CheckPermission = checkMetadataPermissions([\n MetadataPermissions.UPDATE,\n MetadataPermissions.READ,\n MetadataPermissions.CREATE\n]);\n\nconst checkCanEditCrosswalk: CheckPermission = checkMetadataPermissions([\n MetadataPermissions.UPDATE,\n MetadataPermissions.READ\n]);\n\nconst checkCanDeleteCrosswalk: CheckPermission = checkMetadataPermissions([\n MetadataPermissions.DELETE,\n MetadataPermissions.UPDATE,\n MetadataPermissions.READ\n]);\n\nconst getMatchType = (entityType: TEntityType, matchRuleUri: string) =>\n pipe(propOr([], 'matchGroups'), find(propEq('uri', matchRuleUri)), defaultTo({}), prop('type'))(entityType);\n\nconst findMatchActionConfig = curry((matchActionConfig, entityType, matchRuleUri) => {\n return (\n matchActionConfig[matchRuleUri] ||\n matchActionConfig[getMatchType(entityType, matchRuleUri)] ||\n matchActionConfig['*']\n );\n});\n\nconst getRulesConfig = (matchActionConfig, entityType, matchRules) =>\n pipe(map(findMatchActionConfig(matchActionConfig, entityType)), filter(identity))(matchRules);\n\nconst checkMergePermission = (matchActionConfig, matchRules, entityType) => {\n const rulesConfig = getRulesConfig(matchActionConfig, entityType, matchRules);\n const isMergeAllowed = rulesConfig.length === 0 || rulesConfig.some(({allowMerge}) => allowMerge !== false);\n return isMergeAllowed && checkMetadataPermission(MetadataPermissions.MERGE, entityType);\n};\n\nconst canCreateRelationBetweenEntities = curry((metadata, startEntity, endEntity, relationTypeUri) => {\n const relationType = getRelationType(metadata, relationTypeUri);\n const [startUri, endUri] = getRelationEntityTypesUris(metadata, relationTypeUri);\n return (\n relationType &&\n checkMetadataPermission(MetadataPermissions.CREATE, relationType) &&\n isInHierarchy(metadata, startUri, startEntity.type) &&\n isInHierarchy(metadata, endUri, endEntity.type)\n );\n});\n\nconst checkCreateRelationPermission = (metadata, matchActionConfig, matchRules, entity, mainEntity) => {\n const entityType = getEntityType(metadata, entity.type);\n const rulesConfig = getRulesConfig(matchActionConfig, entityType, matchRules);\n const createRelationConfigs = rulesConfig.map(({createRelation}) => createRelation).filter(identity);\n return createRelationConfigs.some(({inRelations = [], outRelations = []}) => {\n return (\n inRelations.some(canCreateRelationBetweenEntities(metadata, entity, mainEntity)) ||\n outRelations.some(canCreateRelationBetweenEntities(metadata, mainEntity, entity))\n );\n });\n};\n\nconst getActionPermissionForMatch = (metadata, uiConfig, entity, mainEntity, matchRules = []) => {\n const entityType = getEntityType(metadata, entity.type);\n const matchActionConfig = propOr({}, 'matchActions', uiConfig);\n return {\n canMerge: checkMergePermission(matchActionConfig, matchRules, entityType),\n canAddRelation: checkCreateRelationPermission(metadata, matchActionConfig, matchRules, entity, mainEntity),\n canMark:\n checkMetadataPermission(MetadataPermissions.UPDATE, entityType) &&\n checkMetadataPermission(MetadataPermissions.READ, entityType)\n };\n};\n\nconst getActionPermissionForMatches = (metadata, config, entity, matches) => {\n return pipe(\n map((match) => getActionPermissionForMatch(metadata, config, match.object, entity, match.matchRules)),\n reduce(mergeWith(and), {})\n )(matches);\n};\n\nexport {\n MetadataPermissions,\n checkMetadataPermission,\n checkBasicMetadataPermission,\n checkMetadataPermissions,\n checkMetadataForCreate,\n checkMetadataForDelete,\n checkMetadataForUpdate,\n checkCanImportEntityOfType,\n checkCanCreateCrosswalk,\n checkCanEditCrosswalk,\n checkCanDeleteCrosswalk,\n canCreateRelationBetweenEntities,\n getActionPermissionForMatch,\n checkCreateRelationPermission,\n checkMergePermission,\n getRulesConfig,\n getActionPermissionForMatches\n};\n","import {allPass, always, both, complement, cond, curry, F, map, of, pipe, prop, T, unless} from 'ramda';\n\nimport {getAttributeTypeSubAttributes, isAnalyticAttribute, isHiddenAttribute} from '../metadata/attributes';\nimport {isSuggestMode} from '../mode';\nimport {isTempUri} from '../uris';\nimport {\n checkMetadataForCreate,\n checkMetadataForDelete,\n checkMetadataForUpdate,\n checkMetadataPermission,\n checkBasicMetadataPermission,\n MetadataPermissions\n} from './metadataPermissions';\n\nconst checkCanNotOperate = isAnalyticAttribute;\nconst checkCanOperate = complement(checkCanNotOperate);\n\nconst checkCanReadAttribute = checkMetadataPermission(MetadataPermissions.READ);\n\nconst checkCanCreateAttribute = ({attributeType, mode}) =>\n checkCanOperate(attributeType) && checkMetadataForCreate(mode, attributeType) && !isHiddenAttribute(attributeType);\n\nconst checkCanEditAttribute = ({attributeType, attributeValue, mode, isReltioCrosswalk = true}) => {\n const isNew = isTempUri(attributeValue.uri);\n const checkUpdate = checkMetadataForUpdate(mode);\n const checkCreate = checkMetadataForCreate(mode);\n return cond([\n [checkCanNotOperate, F],\n [always(isNew), T],\n [always(isReltioCrosswalk), checkUpdate],\n [T, allPass([checkUpdate, checkCreate])]\n // in case of non Reltio Crosswalk UPDATE permission is needed for ignoring attribute\n ])(attributeType);\n};\n\nconst checkCanDeleteAttribute = ({attributeType, attributeValue, mode, isReltioCrosswalk = true, metadata}) => {\n const isNew = isTempUri(attributeValue.uri);\n const checkUpdate = checkMetadataForUpdate(mode);\n const checkDelete = checkMetadataForDelete(mode);\n const checkUpdateForSubAttributes = checkSubAttributesPermissionsForCurrentMode(\n MetadataPermissions.UPDATE,\n mode,\n metadata,\n attributeValue\n );\n const checkDeleteForSubAttributes = checkSubAttributesPermissionsForCurrentMode(\n MetadataPermissions.DELETE,\n mode,\n metadata,\n attributeValue\n );\n return cond([\n [checkCanNotOperate, F],\n [always(isNew), T],\n [always(isReltioCrosswalk), allPass([checkDelete, checkDeleteForSubAttributes])],\n [T, allPass([checkUpdate, checkDelete, checkUpdateForSubAttributes, checkDeleteForSubAttributes])]\n // in case of non Reltio Crosswalk UPDATE permission is needed for ignoring attribute\n ])(attributeType);\n};\n\nconst checkSubAttributesPermissions = curry((permission, metadata, attributeValue, attributeType) => {\n const subAttributesTypes =\n attributeType.type !== 'Reference' && getAttributeTypeSubAttributes(metadata, attributeType);\n if (subAttributesTypes) {\n const attrValues = pipe(unless(Array.isArray, of), map(prop('value')))(attributeValue);\n return !attrValues.some((value) =>\n subAttributesTypes\n .filter((subAttrType) => value && !!value[subAttrType.name])\n .some(\n (subAttrType) =>\n !checkBasicMetadataPermission(permission, subAttrType) ||\n !checkSubAttributesPermissions(permission, metadata, value[subAttrType.name], subAttrType)\n )\n );\n }\n return true;\n});\n\nconst checkSubAttributesPermissionsForCurrentMode = curry((permission, mode, metadata, attributeValue, attributeType) =>\n isSuggestMode(mode)\n ? checkSubAttributesPermissions(\n MetadataPermissions.INITIATE_CHANGE_REQUEST,\n metadata,\n attributeValue,\n attributeType\n )\n : checkSubAttributesPermissions(permission, metadata, attributeValue, attributeType)\n);\n\nconst isReadableAttribute = both(complement(isHiddenAttribute), checkCanReadAttribute);\n\nexport {\n checkCanCreateAttribute,\n checkCanEditAttribute,\n checkCanDeleteAttribute,\n checkCanReadAttribute,\n isReadableAttribute\n};\n","import {startsWith, endsWith, path, F, T} from 'ramda';\n\nconst SUPER_USER_SERVICE_ID = 'SuperUser';\nconst ALL_TENANTS_ID = 'allTenants';\nconst SUPER_USER_RESOURCES = [ALL_TENANTS_ID, 'allCustomers'];\n\nconst superUserCheck = (serviceId, allowedResourcePath, superUserEnvironments) => {\n if (serviceId === SUPER_USER_SERVICE_ID) {\n const superUserResources = superUserEnvironments\n ? SUPER_USER_RESOURCES.concat(superUserEnvironments.map((env) => `${ALL_TENANTS_ID}.${env}`))\n : SUPER_USER_RESOURCES;\n const usersAllowedResourcePath =\n superUserEnvironments && allowedResourcePath[0] === ALL_TENANTS_ID\n ? allowedResourcePath.slice(0, 2) //consider only ['allTenants', <env>]\n : allowedResourcePath.slice(0, 1); //consider only ['allTenants']/['allCustomers']\n return superUserResources\n .map((path) => path.split('.'))\n .some((pathArray) => startsWith(usersAllowedResourcePath, pathArray));\n }\n};\n\nconst checkTenantOrSuperAdmin = (tenantId) => (entry) =>\n entry === tenantId || entry === 'SuperUser:*' || entry.startsWith('SuperUser:allTenants');\n\nconst checkResourcePermission = (userInfo, tenantId, permissionToCheck, superUserEnvironments) => {\n const userPermissions = path(['userPermissions', 'permissions'], userInfo) || {};\n\n return Object.keys(userPermissions)\n .filter((permissionPath) => {\n const serviceAndResources = permissionPath.split(':');\n const [serviceId] = serviceAndResources;\n return serviceId === permissionToCheck.serviceId || serviceId === SUPER_USER_SERVICE_ID;\n })\n .filter((permissionPath) => {\n const serviceAndResources = permissionPath.split(':');\n const [serviceId, allowedResourcePathStr = ''] = serviceAndResources;\n\n let allowedResourcePath = allowedResourcePathStr.split('.');\n allowedResourcePath = endsWith(['*'], allowedResourcePath)\n ? allowedResourcePath.slice(0, -1)\n : allowedResourcePath;\n\n return (\n startsWith(allowedResourcePath, permissionToCheck.resourcePath) ||\n superUserCheck(serviceId, allowedResourcePath, superUserEnvironments)\n );\n })\n .some((permissionPath) => {\n const userPrivileges = userPermissions[permissionPath];\n return permissionToCheck.privileges.every((privilege) => {\n const allowedTenants = userPrivileges[privilege];\n const privilegeExists = Array.isArray(allowedTenants);\n return tenantId\n ? Array.isArray(allowedTenants) && allowedTenants.some(checkTenantOrSuperAdmin(tenantId))\n : privilegeExists;\n });\n });\n};\n\nconst getRules = ({allowedPermissionsNames, permissionsNames, permissionsConfig, superUserEnvironments}) => {\n const containsRole = (role) => (userInfo) => (userInfo?.roles || []).includes(role);\n const containsPermission = (permission) =>\n permission\n ? (userInfo, {params}) =>\n checkResourcePermission(userInfo, params.tenant, permission, superUserEnvironments)\n : F;\n return allowedPermissionsNames.map((role) => {\n switch (role) {\n case permissionsNames.NON_SECURED:\n return T;\n case permissionsNames.SECURED:\n return (userInfo) => userInfo.userPermissions !== undefined || userInfo?.roles !== undefined;\n case permissionsNames.ADMIN:\n return containsRole(permissionsNames.ADMIN);\n default:\n return containsPermission(permissionsConfig[role]);\n }\n });\n};\n\nexport {getRules};\n","import {getRules} from './permissions';\nimport {curry} from 'ramda';\n\nconst UserPermissions = {\n NON_SECURED: 'NON_SECURED',\n SECURED: 'SECURED',\n ADMIN: 'ROLE_ADMIN',\n CAN_EXPORT: 'CAN_EXPORT',\n CAN_EXPORT_ACTIVITIES: 'CAN_EXPORT_ACTIVITIES',\n CAN_IMPORT_ENTITIES_FROM_DT: 'CAN_IMPORT_ENTITIES_FROM_DT',\n CAN_READ_ENTITIES_FROM_DT: 'CAN_READ_ENTITIES_FROM_DT',\n CAN_START_PROCESS_INSTANCE_SEARCH_QUERY: 'CAN_START_PROCESS_INSTANCE_SEARCH_QUERY',\n CAN_VIEW_PROCESS_INSTANCE_SEARCH_QUERY: 'CAN_VIEW_PROCESS_INSTANCE_SEARCH_QUERY',\n CAN_CREATE_ENVIRONMENT_CONFIG_JAR: 'CAN_CREATE_ENVIRONMENT_CONFIG_JAR',\n CAN_CREATE_CONFIG_JAR: 'CAN_CREATE_CONFIG_JAR',\n CAN_VIEW_ENVIRONMENT_CONFIG_JAR: 'CAN_VIEW_ENVIRONMENT_CONFIG_JAR',\n CAN_VIEW_CONFIG_JAR: 'CAN_VIEW_CONFIG_JAR',\n CAN_MANAGE_WORKFLOW_DEFINITION: 'CAN_MANAGE_WORKFLOW_DEFINITION',\n CAN_VIEW_WORKFLOW_DEFINITION: 'CAN_VIEW_WORKFLOW_DEFINITION',\n CAN_MANAGE_WORKFLOW_ENVIRONMENT_DEFINITION: 'CAN_MANAGE_WORKFLOW_ENVIRONMENT_DEFINITION',\n CAN_UPDATE_WORKFLOW_DATA_TASK: 'CAN_UPDATE_WORKFLOW_DATA_TASK',\n CAN_READ_WORKFLOW_DATA_TASK: 'CAN_READ_WORKFLOW_DATA_TASK',\n CAN_CONFIG_ENVIRONMENT_REGISTER: 'CAN_CONFIG_ENVIRONMENT_REGISTER',\n CAN_UPDATE_PROCESS_INSTANCE: 'CAN_UPDATE_PROCESS_INSTANCE',\n CAN_EXECUTE_WORKFLOW_JOBS: 'CAN_EXECUTE_WORKFLOW_JOBS',\n CAN_EXECUTE_WORKFLOW_JOBS_TERMINATE_PROCESS_INSTANCE: 'CAN_EXECUTE_WORKFLOW_JOBS_TERMINATE_PROCESS_INSTANCE',\n CAN_EXECUTE_WORKFLOW_JOBS_UPDATE_TASKS: 'CAN_EXECUTE_WORKFLOW_JOBS_UPDATE_TASKS',\n CAN_EXECUTE_WORKFLOW_JOBS_VALIDATE_TASKS: 'CAN_EXECUTE_WORKFLOW_JOBS_VALIDATE_TASKS',\n CAN_EXECUTE_WORKFLOW_JOBS_SYNC_BUSINESS_PROCESS_DATA: 'CAN_EXECUTE_WORKFLOW_JOBS_SYNC_BUSINESS_PROCESS_DATA',\n CAN_VIEW_WORKFLOW_JOBS: 'CAN_VIEW_WORKFLOW_JOBS',\n CAN_MAKE_BULK_UPDATE: 'CAN_MAKE_BULK_UPDATE',\n CAN_OPEN_DATA_LOADER_EXECUTE: 'CAN_OPEN_DATA_LOADER_EXECUTE',\n CAN_OPEN_DATA_LOADER_READ: 'CAN_OPEN_DATA_LOADER_READ',\n CAN_BULK_DELETE_PROFILES: 'CAN_BULK_DELETE_PROFILES',\n CAN_READ_MDM_DATA_ENTITIES: 'CAN_READ_MDM_DATA_ENTITIES',\n IS_FREEMIUM_ADMIN: 'IS_FREEMIUM_ADMIN',\n CAN_READ_DVF: 'CAN_READ_DVF',\n CAN_READ_PREFERENCES: 'CAN_READ_PREFERENCES',\n CAN_UPDATE_PREFERENCES: 'CAN_UPDATE_PREFERENCES',\n CAN_CREATE_PREFERENCES: 'CAN_CREATE_PREFERENCES',\n CAN_DELETE_PREFERENCES: 'CAN_DELETE_PREFERENCES'\n};\n\nconst resourcePermissionsConfig = {\n [UserPermissions.CAN_DELETE_PREFERENCES]: {\n serviceId: 'MDM',\n resourcePath: ['ui', 'preferences'],\n privileges: ['DELETE']\n },\n [UserPermissions.CAN_CREATE_PREFERENCES]: {\n serviceId: 'MDM',\n resourcePath: ['ui', 'preferences'],\n privileges: ['CREATE']\n },\n [UserPermissions.CAN_UPDATE_PREFERENCES]: {\n serviceId: 'MDM',\n resourcePath: ['ui', 'preferences'],\n privileges: ['UPDATE']\n },\n [UserPermissions.CAN_READ_PREFERENCES]: {\n serviceId: 'MDM',\n resourcePath: ['ui', 'preferences'],\n privileges: ['READ']\n },\n [UserPermissions.CAN_EXPORT]: {\n serviceId: 'export',\n resourcePath: ['data', 'entities'],\n privileges: ['EXECUTE']\n },\n [UserPermissions.CAN_EXPORT_ACTIVITIES]: {\n serviceId: 'export',\n resourcePath: ['data', 'activities'],\n privileges: ['EXECUTE']\n },\n [UserPermissions.CAN_IMPORT_ENTITIES_FROM_DT]: {\n serviceId: 'dtss',\n resourcePath: ['data', 'entities'],\n privileges: ['READ', 'UPDATE']\n },\n [UserPermissions.CAN_READ_ENTITIES_FROM_DT]: {\n serviceId: 'dtss',\n resourcePath: ['data', 'entities'],\n privileges: ['READ']\n },\n [UserPermissions.CAN_START_PROCESS_INSTANCE_SEARCH_QUERY]: {\n serviceId: 'workflow',\n resourcePath: ['data', 'process'],\n privileges: ['CREATE']\n },\n [UserPermissions.CAN_VIEW_PROCESS_INSTANCE_SEARCH_QUERY]: {\n serviceId: 'workflow',\n resourcePath: ['data', 'process'],\n privileges: ['READ']\n },\n [UserPermissions.CAN_CREATE_CONFIG_JAR]: {\n serviceId: 'workflow',\n resourcePath: ['config', 'jar'],\n privileges: ['CREATE', 'DELETE']\n },\n [UserPermissions.CAN_CREATE_ENVIRONMENT_CONFIG_JAR]: {\n serviceId: 'workflow',\n resourcePath: ['environment', 'config', 'jar'],\n privileges: ['CREATE', 'DELETE']\n },\n [UserPermissions.CAN_VIEW_CONFIG_JAR]: {\n serviceId: 'workflow',\n resourcePath: ['config', 'jar'],\n privileges: ['READ']\n },\n [UserPermissions.CAN_VIEW_ENVIRONMENT_CONFIG_JAR]: {\n serviceId: 'workflow',\n resourcePath: ['environment', 'config', 'jar'],\n privileges: ['READ']\n },\n [UserPermissions.CAN_MANAGE_WORKFLOW_DEFINITION]: {\n serviceId: 'workflow',\n resourcePath: ['config', 'definition'],\n privileges: ['CREATE', 'DELETE']\n },\n [UserPermissions.CAN_VIEW_WORKFLOW_DEFINITION]: {\n serviceId: 'workflow',\n resourcePath: ['config', 'definition'],\n privileges: ['READ']\n },\n [UserPermissions.CAN_MANAGE_WORKFLOW_ENVIRONMENT_DEFINITION]: {\n serviceId: 'workflow',\n resourcePath: ['environment', 'config', 'definition'],\n privileges: ['CREATE', 'DELETE']\n },\n [UserPermissions.CAN_UPDATE_WORKFLOW_DATA_TASK]: {\n serviceId: 'workflow',\n resourcePath: ['data', 'tasks'],\n privileges: ['UPDATE']\n },\n [UserPermissions.CAN_READ_WORKFLOW_DATA_TASK]: {\n serviceId: 'workflow',\n resourcePath: ['data', 'tasks'],\n privileges: ['READ']\n },\n [UserPermissions.CAN_CONFIG_ENVIRONMENT_REGISTER]: {\n serviceId: 'workflow',\n resourcePath: ['environment', 'config', 'register'],\n privileges: ['CREATE', 'DELETE']\n },\n [UserPermissions.CAN_UPDATE_PROCESS_INSTANCE]: {\n serviceId: 'workflow',\n resourcePath: ['data', 'process'],\n privileges: ['UPDATE', 'DELETE']\n },\n [UserPermissions.CAN_EXECUTE_WORKFLOW_JOBS]: {\n serviceId: 'workflow',\n resourcePath: ['jobs'],\n privileges: ['EXECUTE']\n },\n [UserPermissions.CAN_EXECUTE_WORKFLOW_JOBS_TERMINATE_PROCESS_INSTANCE]: {\n serviceId: 'workflow',\n resourcePath: ['jobs', 'terminateProcessInstances'],\n privileges: ['EXECUTE']\n },\n [UserPermissions.CAN_EXECUTE_WORKFLOW_JOBS_UPDATE_TASKS]: {\n serviceId: 'workflow',\n resourcePath: ['jobs', 'updateTasks'],\n privileges: ['EXECUTE']\n },\n [UserPermissions.CAN_EXECUTE_WORKFLOW_JOBS_VALIDATE_TASKS]: {\n serviceId: 'workflow',\n resourcePath: ['jobs', 'validateTasks'],\n privileges: ['EXECUTE']\n },\n [UserPermissions.CAN_EXECUTE_WORKFLOW_JOBS_SYNC_BUSINESS_PROCESS_DATA]: {\n serviceId: 'workflow',\n resourcePath: ['jobs', 'syncBusinessProcessData'],\n privileges: ['EXECUTE']\n },\n [UserPermissions.CAN_VIEW_WORKFLOW_JOBS]: {\n serviceId: 'workflow',\n resourcePath: ['jobs'],\n privileges: ['READ']\n },\n [UserPermissions.CAN_MAKE_BULK_UPDATE]: {\n serviceId: 'MDM',\n resourcePath: ['tasks', 'bulk'],\n privileges: ['EXECUTE']\n },\n [UserPermissions.CAN_OPEN_DATA_LOADER_EXECUTE]: {\n serviceId: 'dataloader',\n resourcePath: ['tasks', 'jobs'],\n privileges: ['EXECUTE']\n },\n [UserPermissions.CAN_OPEN_DATA_LOADER_READ]: {\n serviceId: 'dataloader',\n resourcePath: ['tasks', 'jobs'],\n privileges: ['READ']\n },\n [UserPermissions.CAN_BULK_DELETE_PROFILES]: {\n serviceId: 'MDM',\n resourcePath: ['tasks', 'bulk'],\n privileges: ['DELETE']\n },\n [UserPermissions.IS_FREEMIUM_ADMIN]: {\n serviceId: 'pms',\n resourcePath: ['config', 'freetier', 'user'],\n privileges: ['CREATE', 'DELETE', 'UPDATE']\n },\n [UserPermissions.CAN_READ_MDM_DATA_ENTITIES]: {\n serviceId: 'MDM',\n resourcePath: ['data', 'entities'],\n privileges: ['READ']\n },\n [UserPermissions.CAN_READ_DVF]: {\n serviceId: 'DVF',\n resourcePath: ['functionsManagement'],\n privileges: ['READ']\n }\n};\n\nconst checkUserPermissions = curry((allowedPermissionsNames, userInfo, tenant) => {\n const rules = getRules({\n allowedPermissionsNames,\n permissionsNames: UserPermissions,\n permissionsConfig: resourcePermissionsConfig\n });\n return rules.some((rule) => rule(userInfo, {params: {tenant}}));\n});\n\nconst canUserMakeExport = checkUserPermissions([UserPermissions.CAN_EXPORT]);\nconst canUserMakeActivitiesExport = checkUserPermissions([UserPermissions.CAN_EXPORT_ACTIVITIES]);\nconst canUserImportEntitiesFromDT = checkUserPermissions([UserPermissions.CAN_IMPORT_ENTITIES_FROM_DT]);\nconst canUserReadEntitiesFromDT = checkUserPermissions([UserPermissions.CAN_READ_ENTITIES_FROM_DT]);\nconst canUserStartProcessInstanceFromQuery = checkUserPermissions([\n UserPermissions.CAN_START_PROCESS_INSTANCE_SEARCH_QUERY\n]);\nconst canUserUpdateProcessInstance = checkUserPermissions([UserPermissions.CAN_UPDATE_PROCESS_INSTANCE]);\nconst canUserViewWorkflowDefinition = checkUserPermissions([UserPermissions.CAN_VIEW_WORKFLOW_DEFINITION]);\nconst canUserRegisterConfigEnvironments = checkUserPermissions([UserPermissions.CAN_CONFIG_ENVIRONMENT_REGISTER]);\nconst canUserUpdateWorkflowDataTask = checkUserPermissions([UserPermissions.CAN_UPDATE_WORKFLOW_DATA_TASK]);\nconst canUserReadWorkflowDataTask = checkUserPermissions([UserPermissions.CAN_READ_WORKFLOW_DATA_TASK]);\nconst canUserManageWorkflowDefinition = checkUserPermissions([UserPermissions.CAN_MANAGE_WORKFLOW_DEFINITION]);\nconst canUserManageWorkflowEnvironmentDefinition = checkUserPermissions([\n UserPermissions.CAN_MANAGE_WORKFLOW_ENVIRONMENT_DEFINITION\n]);\nconst canUserExecuteWorkflowJobsSyncBusinessProcessData = checkUserPermissions([\n UserPermissions.CAN_EXECUTE_WORKFLOW_JOBS_SYNC_BUSINESS_PROCESS_DATA\n]);\nconst canUserExecuteWorkflowJobsValidateTasks = checkUserPermissions([\n UserPermissions.CAN_EXECUTE_WORKFLOW_JOBS_VALIDATE_TASKS\n]);\nconst canUserExecuteWorkflowJobsUpdateTasks = checkUserPermissions([\n UserPermissions.CAN_EXECUTE_WORKFLOW_JOBS_UPDATE_TASKS\n]);\nconst canUserExecuteWorkflowJobsTerminateProcessInstance = checkUserPermissions([\n UserPermissions.CAN_EXECUTE_WORKFLOW_JOBS_TERMINATE_PROCESS_INSTANCE\n]);\nconst canUserExecuteWorkflowJobs = checkUserPermissions([UserPermissions.CAN_EXECUTE_WORKFLOW_JOBS]);\nconst canUserCreateWorkflowEnvironmentConfigJar = checkUserPermissions([\n UserPermissions.CAN_CREATE_ENVIRONMENT_CONFIG_JAR\n]);\nconst canUserCreateWorkflowConfigJar = checkUserPermissions([UserPermissions.CAN_CREATE_CONFIG_JAR]);\nconst canUserViewWorkflowEnvironmentConfigJar = checkUserPermissions([UserPermissions.CAN_VIEW_ENVIRONMENT_CONFIG_JAR]);\nconst canUserViewWorkflowConfigJar = checkUserPermissions([UserPermissions.CAN_VIEW_CONFIG_JAR]);\nconst canUserViewProcessInstanceSearchQuery = checkUserPermissions([\n UserPermissions.CAN_VIEW_PROCESS_INSTANCE_SEARCH_QUERY\n]);\nconst canUserViewWorkflowJobs = checkUserPermissions([UserPermissions.CAN_VIEW_WORKFLOW_JOBS]);\nconst canUserMakeBulkUpdate = checkUserPermissions([UserPermissions.CAN_MAKE_BULK_UPDATE]);\nconst canUserOpenDataLoader = checkUserPermissions([\n UserPermissions.CAN_OPEN_DATA_LOADER_EXECUTE,\n UserPermissions.CAN_OPEN_DATA_LOADER_READ\n]);\nconst canUserDeleteProfiles = checkUserPermissions([UserPermissions.CAN_BULK_DELETE_PROFILES]);\nconst canUserGetDQStatistic = checkUserPermissions([UserPermissions.CAN_READ_MDM_DATA_ENTITIES]);\nconst canUserReadDVF = checkUserPermissions([UserPermissions.CAN_READ_DVF]);\nconst isFreemiumAdmin = checkUserPermissions([UserPermissions.IS_FREEMIUM_ADMIN]);\nexport {\n UserPermissions,\n checkUserPermissions,\n canUserMakeExport,\n canUserMakeActivitiesExport,\n canUserImportEntitiesFromDT,\n canUserReadEntitiesFromDT,\n canUserStartProcessInstanceFromQuery,\n canUserMakeBulkUpdate,\n canUserOpenDataLoader,\n canUserDeleteProfiles,\n canUserGetDQStatistic,\n canUserReadDVF,\n isFreemiumAdmin,\n canUserRegisterConfigEnvironments,\n canUserCreateWorkflowConfigJar,\n canUserCreateWorkflowEnvironmentConfigJar,\n canUserExecuteWorkflowJobs,\n canUserExecuteWorkflowJobsSyncBusinessProcessData,\n canUserExecuteWorkflowJobsTerminateProcessInstance,\n canUserExecuteWorkflowJobsUpdateTasks,\n canUserExecuteWorkflowJobsValidateTasks,\n canUserManageWorkflowDefinition,\n canUserManageWorkflowEnvironmentDefinition,\n canUserReadWorkflowDataTask,\n canUserUpdateProcessInstance,\n canUserUpdateWorkflowDataTask,\n canUserViewProcessInstanceSearchQuery,\n canUserViewWorkflowConfigJar,\n canUserViewWorkflowDefinition,\n canUserViewWorkflowEnvironmentConfigJar,\n canUserViewWorkflowJobs\n};\n","import {chain, curry, defaultTo, filter, has, pipe, propOr, when, reject, converge, concat} from 'ramda';\nimport {checkCanCreateAttribute, isReadableAttribute} from '../permissions';\nimport {isHiddenAttribute} from './attributes';\nimport {AttributeType, Mode} from '../types';\nimport {getEntityType} from './entityTypes';\n\nexport const filterOutHiddenAttributes = reject(isHiddenAttribute);\n\nconst getFilteredAttributeTypes = (isAcceptableFn: (attrType: AttributeType) => boolean, attrTypes: AttributeType[]) =>\n pipe(defaultTo([]), filterOutHiddenAttributes, filter(isAcceptableFn))(attrTypes);\n\nexport const getCreatableAttributeTypes = curry((mode: Mode, attrTypes: AttributeType[]) =>\n getFilteredAttributeTypes((attributeType) => checkCanCreateAttribute({attributeType, mode}), attrTypes)\n);\n\nexport const getCreatableOrReadableAttributeTypes = curry((mode: Mode, attrTypes: AttributeType[]) =>\n getFilteredAttributeTypes(\n (attributeType) => checkCanCreateAttribute({attributeType, mode}) || isReadableAttribute(attributeType),\n attrTypes\n )\n);\n\nexport const getReadableAttributeTypes = pipe(defaultTo([]), filter(isReadableAttribute));\n\nexport const getAttributesList = pipe(\n propOr([], 'attributes'),\n chain(when(has('attributes'), (data) => [data, ...getAttributesList(data)]))\n);\n\nexport const getReadableAttributesList = pipe(\n propOr([], 'attributes'),\n filter(isReadableAttribute),\n chain(when(has('attributes'), (data) => [data, ...getReadableAttributesList(data)]))\n);\n\nexport const getAnalyticsAttributesList = pipe(\n propOr([], 'analyticsAttributes'),\n chain(when(has('analyticsAttributes'), (data) => [data, ...getAnalyticsAttributesList(data)]))\n);\n\nexport const getEntityAttributesFromMetadata = pipe(\n getEntityType,\n converge(concat, [getReadableAttributesList, getAnalyticsAttributesList])\n);\n","import {always, both, chain, curry, dissoc, evolve, has, map, pipe, uniq, when} from 'ramda';\nimport memoizeOne from 'memoize-one';\nimport {getAttributesList} from './attributesList';\n\nconst mapAttributes = curry((clb, data) =>\n evolve(\n {\n attributes: map(pipe(clb, mapAttributes(clb)))\n },\n data\n )\n);\n\nconst concatMatchGroupsWithHiddenGroups = (data) => ({\n ...data,\n matchGroups: uniq((data.matchGroups || []).concat(data.hidden?.matchGroups || []))\n});\n\nconst hasValuesAndLookups = both(has('values'), has('lookupCode'));\nconst removeValuesFromLookup = when(hasValuesAndLookups, dissoc('values'));\n\nconst renameLookupCodeToDependentLookupCode = when(has('lookupCode'), ({lookupCode, ...attr}) => ({\n ...attr,\n dependentLookupCode: lookupCode\n}));\n\nconst parseLookupAttribute = (useDependentLookups) =>\n mapAttributes(\n pipe(removeValuesFromLookup, when(always(useDependentLookups), renameLookupCodeToDependentLookupCode))\n );\n\nconst hasDependentLookupAttribute = ({hidden, dependentLookupAttributes}) => !hidden && dependentLookupAttributes;\n\nconst hasDependentLookupAttributes = memoizeOne((metadata) => {\n const {entityTypes = [], relationTypes = []} = metadata;\n return chain(getAttributesList, entityTypes)\n .concat(chain(getAttributesList, relationTypes))\n .some(hasDependentLookupAttribute);\n});\n\nconst processAttributesCardinality = (entityType) => {\n let forceValidate = false;\n const updatedEntityType = mapAttributes((attributeType) => {\n if (attributeType.cardinality) {\n forceValidate = true;\n if (attributeType.cardinality.minValue) {\n return {\n ...attributeType,\n required: true\n };\n }\n }\n return attributeType;\n })(entityType);\n if (forceValidate) {\n updatedEntityType.forceValidate = true;\n }\n return updatedEntityType;\n};\n\nconst parseMetadata = (metadata) => {\n const useDependentLookups = hasDependentLookupAttributes(metadata);\n\n const parseLookups = map(parseLookupAttribute(useDependentLookups));\n const processHiddenMatchGroups = map(concatMatchGroupsWithHiddenGroups);\n const processCardinality = map(processAttributesCardinality);\n return evolve(\n {\n entityTypes: pipe(parseLookups, processHiddenMatchGroups, processCardinality),\n relationTypes: pipe(parseLookups, processCardinality)\n },\n metadata\n );\n};\n\nexport {hasDependentLookupAttributes};\nexport default parseMetadata;\n","import {evolve} from 'ramda';\nimport {AttributeType, Metadata, TEntityType, TRelationType} from '../types';\nimport {getLastUriPart} from '../uris';\n\nconst forEachAttributeType =\n (callback: (attrType: AttributeType) => void) => (metadataType: TEntityType[] | TRelationType[]) => {\n (metadataType || []).forEach((metadataType) => {\n (metadataType?.attributes || []).forEach(callback);\n });\n return metadataType;\n };\n\nconst validateAttributeName = (errors: string[]) => (attributeType: AttributeType) => {\n if (!attributeType.name || attributeType.name.includes('/')) {\n errors.push(`Attribute name '${attributeType.name}' is incorrect. Attribute uri is '${attributeType.uri}'`);\n }\n const lastUriPart = getLastUriPart(attributeType.uri);\n if (lastUriPart !== attributeType.name) {\n errors.push(\n `Attribute name '${attributeType.name}' is not the same as last uri part of '${attributeType.uri}'`\n );\n }\n};\n\nexport const validateMetadata = (metadata: Metadata): string[] => {\n const errors: string[] = [];\n evolve(\n {\n entityTypes: forEachAttributeType(validateAttributeName(errors)),\n relationTypes: forEachAttributeType(validateAttributeName(errors))\n },\n metadata\n );\n return errors;\n};\n","import {defaultTo, chain, curry, find, isNil, map, pipe, propEq, prop, reject, uniq} from 'ramda';\nimport {isRelationWithEntityType, getRelationEntityTypesUris} from './relations';\nimport {getEntityType} from './entityTypes';\nimport {CurriedFunction2, GraphType, Metadata, TEntityType} from '../types';\n\nexport const getGraphType: CurriedFunction2<Metadata, string, GraphType | undefined> = curry(\n ({graphTypes = []}, graphTypeUri) => find(propEq('uri', graphTypeUri), graphTypes)\n);\n\nexport const getRelationshipTypeUrisFromGraphType: (graphType: GraphType) => GraphType['relationshipTypeURIs'] =\n prop('relationshipTypeURIs');\n\nexport const getGraphTypesForEntityType: CurriedFunction2<Metadata, string, GraphType[]> = curry(\n (metadata, entityTypeUri) => metadata.graphTypes?.filter(hasRelationsWithEntityType(metadata, entityTypeUri)) || []\n);\n\nconst hasRelationsWithEntityType =\n (metadata: Metadata, entityTypeUri: string) =>\n ({relationshipTypeURIs}: GraphType) =>\n relationshipTypeURIs?.some(isRelationWithEntityType(metadata, entityTypeUri));\n\nexport const getAllEntityTypesForGraphType = (metadata: Metadata, graphTypeUri: string): TEntityType[] =>\n pipe(\n getGraphType,\n defaultTo({}),\n getRelationshipTypeUrisFromGraphType,\n defaultTo([]),\n chain(getRelationEntityTypesUris(metadata)),\n reject(isNil),\n uniq,\n map(getEntityType(metadata))\n )(metadata, graphTypeUri);\n","import {\n __,\n allPass,\n any,\n anyPass,\n chain,\n complement,\n curry,\n defaultTo,\n filter,\n find,\n includes,\n map,\n partition,\n pipe,\n pluck,\n prop,\n propEq,\n propOr,\n toPairs,\n uniq,\n values,\n without\n} from 'ramda';\nimport {getEntityType} from './entityTypes';\nimport {MatchRuleComparisonOperators, MatchRuleHelperOperators} from '../constants/match-rules';\nimport {isEntityTypeUri} from '../uris';\n\nconst isMLMatchRule = allPass([\n propEq('matchMethod', 'match_iq'),\n anyPass([propEq('scope', 'ALL'), propEq('scope', 'INTERNAL')])\n]);\n\nconst checkMatchGroups = (checkFunction) => pipe(defaultTo({}), prop('matchGroups'), defaultTo([]), any(checkFunction));\n\nexport const hasMatchRulesWithoutML = (entityType = {}) => checkMatchGroups(complement(isMLMatchRule))(entityType);\n\nexport const hasMlMatchRule = (entityType = {}) => checkMatchGroups(isMLMatchRule)(entityType);\nexport const getMatchGroups = pipe(getEntityType, propOr([], 'matchGroups'));\nexport const getMatchRule = (metadata, entityTypeUri, matchRuleUri) => {\n return pipe(getMatchGroups, find(propEq('uri', matchRuleUri)))(metadata, entityTypeUri);\n};\nexport const getMatchRuleLabel = curry((metadata, entityTypeUri, value) => {\n return pipe(getMatchRule, propOr(value, 'label'))(metadata, entityTypeUri, value);\n});\n\nexport const getMatchRules = curry((metadata, entityTypeUri, matchRuleUris) => {\n const metadataRules = pipe(getMatchGroups, filter(pipe(prop('uri'), includes(__, matchRuleUris))))(\n metadata,\n entityTypeUri\n );\n const otherRules = pipe(\n map(prop('uri')),\n without(__, matchRuleUris),\n map((matchName) => ({uri: matchName, label: matchName}))\n )(metadataRules);\n return [...metadataRules, ...otherRules];\n});\n\nexport const partitionByMlMatch = (matchRules) => {\n return partition(isMLMatchRule, matchRules);\n};\n\nconst isMatchRuleLogicOperator = includes(__, [\n MatchRuleHelperOperators.AND,\n MatchRuleHelperOperators.OR,\n MatchRuleHelperOperators.NOT\n]);\nconst isMatchRuleComparisonOperator = includes(__, values(MatchRuleComparisonOperators));\nconst isMatchRuleOperatorWithValues = includes(__, [\n MatchRuleHelperOperators.EQUALS,\n MatchRuleHelperOperators.NOT_EQUALS,\n MatchRuleHelperOperators.IN\n]);\n\nconst getEntityAttributesFromMatchRule = pipe(\n toPairs,\n chain(([key, value]) => {\n if (isMatchRuleLogicOperator(key)) {\n return getEntityAttributesFromMatchRule(value);\n }\n if (isMatchRuleComparisonOperator(key)) {\n return value.filter(isEntityTypeUri);\n }\n if (isMatchRuleOperatorWithValues(key)) {\n return value.map(prop('uri')).filter(isEntityTypeUri);\n }\n return [];\n }),\n uniq\n);\n\nconst getEntityAttributesFromMatchRules = pipe(pluck('rule'), chain(getEntityAttributesFromMatchRule), uniq);\n\nexport const getEntityTypeMatchAttributes = pipe(getMatchGroups, getEntityAttributesFromMatchRules);\n\nexport const getAttributesForMatchRules = pipe(getMatchRules, getEntityAttributesFromMatchRules);\n","import {find, pipe, propEq} from 'ramda';\nimport {AttributeType, InteractionType, Metadata} from '../types';\nimport {getReadableAttributesList} from './attributesList';\nimport {isInHierarchy} from './entityTypes';\n\nconst getInteractionType = (\n {interactionTypes = []}: Pick<Metadata, 'interactionTypes'>,\n interactionTypeUri: string\n): InteractionType | null => find(propEq('uri', interactionTypeUri), interactionTypes);\n\nconst getInteractionAttributesFromMetadata: (metadata: Metadata, interactionTypeUri: string) => AttributeType[] = pipe(\n getInteractionType,\n getReadableAttributesList\n);\n\nconst hasEntityType =\n (metadata: Metadata, entityTypeUri: string) =>\n ({objectTypeURI}): boolean =>\n objectTypeURI === entityTypeUri || isInHierarchy(metadata, objectTypeURI, entityTypeUri);\n\nconst hasMembersWithEntityType =\n (metadata, entityTypeUri) =>\n ({memberTypes}: Pick<InteractionType, 'memberTypes'>) =>\n memberTypes.some(hasEntityType(metadata, entityTypeUri));\n\nconst getInteractionTypesForEntityType = (metadata: Metadata, entityTypeUri: string) =>\n (metadata.interactionTypes || []).filter(hasMembersWithEntityType(metadata, entityTypeUri));\n\nexport {getInteractionAttributesFromMetadata, getInteractionType, getInteractionTypesForEntityType};\n","import {cond, identity} from 'ramda';\n\nimport {getEntityType} from './entityTypes';\nimport {getRelationType} from './relations';\nimport {isAutoGeneratedAttribute} from './attributes';\nimport {areOneHierarchyUris, isEntityTypeUri, isRelationTypeUri} from '../uris';\nimport {getReferencedAttrTypeUrisFromAttrType, getRelationTypeUriFromAttrType} from './referenceAttribute';\nimport {DataTypes} from '../types';\n\nconst isRequired = (attrType) => !!attrType.required;\n\nconst getRequiredAttributeTypesByTypeUri = (\n metadata,\n typeUri,\n deep,\n attrTypesFilter = identity,\n parentAttrTypes = []\n) => {\n const type = cond([\n [isEntityTypeUri, getEntityType(metadata)],\n [isRelationTypeUri, getRelationType(metadata)]\n ])(typeUri);\n return getRequiredAttributeTypes(metadata, type, deep, attrTypesFilter, parentAttrTypes);\n};\n\nconst getRequiredAttributeTypes = (metadata, type, deep, attrTypesFilter, parentAttrTypes = []) => {\n const isEntityType = (type) => type.uri && isEntityTypeUri(type.uri) && type.uri.split('/').length === 3;\n if (!type || (type.hidden && !isEntityType(type))) {\n return [];\n }\n if (type.attributes) {\n return type.attributes\n .filter(\n (attrType) =>\n !attrType.hidden &&\n !isAutoGeneratedAttribute(attrType) &&\n attrTypesFilter(attrType, parentAttrTypes)\n )\n .flatMap((attrType) => {\n const result = attrType.required ? [attrType] : [];\n if (deep) {\n let attrs;\n if (attrType.type === DataTypes.TYPE_REFERENCE) {\n const relationTypeUri = getRelationTypeUriFromAttrType(attrType);\n const referencedAttrTypeUris = getReferencedAttrTypeUrisFromAttrType(attrType);\n attrs = getRequiredAttributeTypesByTypeUri(metadata, relationTypeUri, deep, attrTypesFilter, [\n ...parentAttrTypes,\n attrType\n ]).filter((relationAttrType) =>\n referencedAttrTypeUris.some(areOneHierarchyUris(relationAttrType.uri))\n );\n } else if (attrType.attributes) {\n attrs = getRequiredAttributeTypes(metadata, attrType, deep, attrTypesFilter, [\n ...parentAttrTypes,\n attrType\n ]);\n }\n if (attrs) {\n result.push(...attrs);\n }\n }\n return result;\n });\n } else if (type.type === DataTypes.TYPE_REFERENCE) {\n return getRequiredAttributeTypesByTypeUri(\n metadata,\n getRelationTypeUriFromAttrType(type),\n deep,\n attrTypesFilter,\n [...parentAttrTypes, type]\n );\n }\n return [];\n};\n\nexport {isRequired, getRequiredAttributeTypesByTypeUri, getRequiredAttributeTypes};\n","import {any, anyPass, filter, identity, includes, pick, pipe, sort, values} from 'ramda';\nimport {isRequired} from './required';\nimport {getReferencedEntityAttrTypesUris} from './referenceAttribute';\n\nexport const relationEditorAttributeTypesSelectionStrategy = (entityType) => {\n const patterns = pipe(\n pick(['dataLabelPattern', 'dataTooltipPattern', 'secondaryLabelPattern']),\n values,\n filter(identity)\n )(entityType);\n const isUsedInPatterns = (attrType) => {\n const complexPattern = `{${attrType.name}.`,\n pattern = `{${attrType.name}}`;\n return any(anyPass([includes(pattern), includes(complexPattern)]), patterns);\n };\n const isBusinessCardAttribute = (attrType) => (entityType.businessCardAttributeURIs || []).includes(attrType.uri);\n\n return filter(anyPass([isUsedInPatterns, isBusinessCardAttribute, isRequired]), entityType.attributes || []);\n};\n\nexport const referencedEntityAttributeTypesSelectionStrategy = (referenceAttrType, entityType) => {\n const allowedUris = getReferencedEntityAttrTypesUris(referenceAttrType);\n const isAllowedAttrType = (attrType) => allowedUris.includes(attrType.uri);\n const orderComparator = (order) => (item1, item2) => order.indexOf(item1.uri) - order.indexOf(item2.uri);\n return pipe(filter(isAllowedAttrType), sort(orderComparator(allowedUris)))(entityType.attributes || []);\n};\n","import i18n from 'ui-i18n';\nimport {curry} from 'ramda';\n\nconst localizeDataFields = curry((fieldSet, data) => {\n const localizeFieldValue = (field, value) => {\n if (Array.isArray(value)) {\n return value.map((item) => localizeFieldValue(field, item));\n }\n if (value && typeof value === 'object') {\n const result = {};\n for (let key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n result[key] = localizeFieldValue(key, value[key]);\n }\n }\n return result;\n }\n if (typeof value === 'string' && fieldSet.includes(field)) {\n return i18n.text(value);\n }\n\n return value;\n };\n\n return localizeFieldValue(null, data);\n});\n\nexport {localizeDataFields};\n","import {localizeDataFields} from '../localization/localization';\n\nconst LOCALIZABLE_METADATA_KEYS = ['label', 'description', 'abbreviation', 'caption', 'toolTip'];\n\nconst localizeMetadata = (metadata) => localizeDataFields(LOCALIZABLE_METADATA_KEYS, metadata);\n\nexport default localizeMetadata;\n","import {mergeRight} from 'ramda';\n\nconst DEFAULT_METADATA = {\n attributeTypes: [],\n categoryTypes: [],\n changeRequestTypes: [],\n entityTypes: [],\n graphTypes: [],\n groupTypes: [],\n interactionTypes: [],\n relationTypes: [],\n roles: [],\n sources: [],\n survivorshipStrategies: []\n};\n\nexport const normalizeMetadata = mergeRight(DEFAULT_METADATA);\n","import {curry, isNil, pipe, propEq, propOr, unless, __} from 'ramda';\nimport {Metadata, Source} from '../types/metadata';\nimport {getLastUriPart} from '../uris';\n\nexport const findSourceSystemByUri = curry((metadata: Metadata, uri: string): Source => {\n const {sources} = metadata;\n const value = getLastUriPart(uri);\n return sources.find(({uri}) => getLastUriPart(uri) === value);\n});\n\nexport const getSourceSystemLabel = curry((metadata: Metadata, value: string) => {\n const lastUriPart = getLastUriPart(value);\n return pipe(findSourceSystemByUri(__, value), unless(isNil, propOr(lastUriPart, 'label')))(metadata);\n});\n\nexport const getCrosswalksTypes = ({sources}: Metadata) => {\n const hasReltioSource = sources?.find(propEq('uri', 'configuration/sources/Reltio'));\n return hasReltioSource\n ? sources\n : sources?.concat({\n uri: 'configuration/sources/Reltio',\n label: 'Reltio',\n icon: 'images/source/reltio.png',\n abbreviation: 'Reltio'\n });\n};\n\nexport const getCrosswalkType = ({sources = []}: Metadata, name: string) => {\n return sources.find(\n ({uri, label}) => uri === name || label === name || uri.substring(uri.lastIndexOf('/') + 1) === name\n );\n};\n","import {curry, find, pipe, prop, propEq} from 'ramda';\nimport {getEntityType} from './entityTypes';\n\nexport const getRoleLabel = curry(({roles = []}, uri) => {\n return pipe(find(propEq('uri', uri)), prop('label'))(roles);\n});\n\nexport const getRolesForEntityType = (metadata, entityType) => {\n const roles = metadata.roles || [];\n\n return roles.filter((role) => {\n const entityTypeRoleURIs = getEntityType(metadata, entityType)?.entityTypeRoleURIs || [];\n return entityTypeRoleURIs.includes(role.uri);\n });\n};\n","import {complement, either, identity, prop} from 'ramda';\n\nimport {Maybe} from '../utils';\nimport {getAttributeTypeSubAttributes, isComplexAttribute, isReference} from './attributes';\nimport {isReadableAttribute} from '../permissions';\nimport {AttributeNode, AttributeType, Metadata, TEntityType} from '../types';\n\nconst getAttributesTree = (\n metadata: Metadata,\n entityOrAttrType: TEntityType | AttributeType,\n isAcceptableAttributeFn = identity,\n collectionNames = ['attributes']\n) => {\n const attributes = collectionNames.reduce(\n (attributes, collectionName) => attributes.concat(entityOrAttrType[collectionName] || []),\n []\n );\n return getAttributesTreeFromAttributes(\n attributes,\n metadata,\n entityOrAttrType,\n isAcceptableAttributeFn,\n collectionNames\n );\n};\n\nexport const getAttributesTreeFromAttributes = (\n attributes: AttributeType[],\n metadata: Metadata,\n attrType?: TEntityType | AttributeType,\n isAcceptableAttributeFn = identity,\n collectionNames = ['attributes']\n): AttributeNode[] => {\n return Maybe.fromNull<AttributeType[]>(\n attributes && attributes.length\n ? attributes\n : getAttributeTypeSubAttributes(metadata, attrType as AttributeType)?.filter(complement(isReference))\n )\n .map<AttributeNode[]>((attributes) =>\n attributes.map((attribute) => {\n const children = getAttributesTree(metadata, attribute, isAcceptableAttributeFn, collectionNames);\n return children.length ? {...attribute, children} : attribute;\n })\n )\n .orSome([])\n .filter(either(complement(isComplexAttribute), prop('children')))\n .filter(isReadableAttribute)\n .filter(isAcceptableAttributeFn)\n .filter(either(prop('label'), prop('name')));\n};\n\nexport const getAllAttributeTypesTree = (\n metadata: Metadata,\n entityOrAttrType: TEntityType | AttributeType,\n isAcceptableAttributeFn = identity\n) => getAttributesTree(metadata, entityOrAttrType, isAcceptableAttributeFn, ['attributes', 'analyticsAttributes']);\n\nexport const getAttributeTypesTree = (\n metadata: Metadata,\n entityOrAttrType: TEntityType | AttributeType,\n isAcceptableAttributeFn = identity\n) => getAttributesTree(metadata, entityOrAttrType, isAcceptableAttributeFn, ['attributes']);\n\nexport const getAnalyticsAttributeTypesTree = (\n metadata: Metadata,\n entityOrAttrType: TEntityType | AttributeType,\n isAcceptableAttributeFn = identity\n) => getAttributesTree(metadata, entityOrAttrType, isAcceptableAttributeFn, ['analyticsAttributes']);\n\nexport const flatAttributeTreeNodeWithSimplesOnly = <T extends {children?: T[]}>(node: T) =>\n node.children ? node.children.flatMap(flatAttributeTreeNodeWithSimplesOnly) : node;\n\nexport const flatAttributeTreeNode = <T extends {children?: T[]}>(node: T) =>\n node.children ? [node, ...node.children.flatMap(flatAttributeTreeNode)] : node;\n","import {curry, find, pipe, prop, propEq} from 'ramda';\nimport {Metadata} from '../types/metadata';\n\nexport const getGroupLabelByTypeUri = curry(({groupTypes}: Metadata, uri: string) => {\n return pipe(find(propEq('uri', uri)), prop('label'))(groupTypes);\n});\n","import {Metadata, SurvivorStrategy} from '../types';\nimport {curry, defaultTo, either, find, pipe, propEq} from 'ramda';\nimport {getLastUriPart} from '../uris';\n\nconst getSurvivorshipStrategyWithName = curry((name: string, survivorshipStrategies: SurvivorStrategy[]) =>\n (survivorshipStrategies || []).find(({uri}: SurvivorStrategy) => getLastUriPart(uri) === name)\n);\n\nexport const getDefaultSurvivorshipStrategy = ({survivorshipStrategies}: Metadata): SurvivorStrategy => {\n const [firstStrategy] = survivorshipStrategies || [];\n return pipe(\n either(find(propEq('default', true)), getSurvivorshipStrategyWithName('LUD')),\n defaultTo(firstStrategy)\n )(survivorshipStrategies || []);\n};\n\nexport const getSurvivorshipStrategy = ({survivorshipStrategies}: Metadata, name: string): SurvivorStrategy => {\n return getSurvivorshipStrategyWithName(name, survivorshipStrategies);\n};\n","import {allPass, anyPass, complement, curryN, isNil, pipe, prop, propEq} from 'ramda';\nimport {checkMetadataPermission, MetadataPermissions} from '../permissions/metadataPermissions';\nimport {getEntityType} from './entityTypes';\nimport {getRelationType} from './relations';\n\nexport const isAvailableRelationType = allPass([complement(isNil), checkMetadataPermission(MetadataPermissions.READ)]);\nexport const isAvailableEntityType = allPass([\n complement(isNil),\n complement(prop('abstract')),\n complement(propEq('uiConfigHiddenType', true)),\n checkMetadataPermission(MetadataPermissions.READ)\n]);\nexport const isCreatableEntityType = allPass([\n complement(isNil),\n complement(prop('abstract')),\n complement(propEq('uiConfigHiddenType', true)),\n anyPass([\n checkMetadataPermission(MetadataPermissions.CREATE),\n checkMetadataPermission(MetadataPermissions.INITIATE_CHANGE_REQUEST)\n ])\n]);\nexport const isAvailableEntityTypeUri = curryN(2, pipe(getEntityType, isAvailableEntityType));\nexport const isAvailableRelationTypeUri = curryN(2, pipe(getRelationType, isAvailableRelationType));\n","import {isEmailType, isUrlType} from '../metadata';\nimport {AttributeType, PrimitiveValue} from '../types';\nimport {isEmail, isUrl} from '../utils';\n\ntype WithOv = {ov?: boolean};\nconst isOv = ({ov}: WithOv) => ov !== false;\n\nconst isAttributeValueUrl = (attrType: AttributeType, value: PrimitiveValue) =>\n isUrlType(attrType.type) && isUrl(value);\nconst isAttributeValueEmail = (attrType: AttributeType, value: PrimitiveValue) =>\n isEmailType(attrType.type) && isEmail(value);\nconst isAttributeValueLink = (attrType: AttributeType, value: PrimitiveValue) =>\n isAttributeValueUrl(attrType, value) || isAttributeValueEmail(attrType, value);\n\nexport {isOv, isAttributeValueLink};\n","import {always, cond, defaultTo, evolve, isEmpty, isNil, last, path, pipe, prop, split, T} from 'ramda';\nimport {getFirstElementIfArray} from '../utils';\nimport {\n Crosswalk,\n Entity,\n RefEntity,\n ReferenceAttributeValue,\n RefRelation,\n StrictReferenceAttributeValue\n} from '../types';\n\nconst getReferencedPropFromAttrValue =\n <T extends keyof ReferenceAttributeValue>(propName: T) =>\n (attrValue: ReferenceAttributeValue) =>\n cond([\n [isNil, always(null)],\n [pipe(prop(propName), Array.isArray), path([propName, 0])],\n [T, prop(propName)]\n ])(attrValue) as StrictReferenceAttributeValue[T] | null;\n\nconst getReferencedEntityFromAttrValue = getReferencedPropFromAttrValue('refEntity');\nconst getReferencedRelationFromAttrValue = getReferencedPropFromAttrValue('refRelation');\n\nconst convertReferencedEntityForAttrValue = (entity?: Entity) =>\n !isEmpty(entity)\n ? [\n {\n objectURI: entity.uri,\n type: entity.type\n } as RefEntity\n ]\n : [];\n\nconst createReferencedRelationForAttrValue = ({uri}) => [\n {\n type: 'configuration/sources/Reltio', // todo: should be relation type (currently keeped MDM UI behavior)\n objectURI: `relations/${pipe(split('/'), last)(uri)}`\n } as RefRelation\n];\n\nconst getReferencedEntityUri: (value: RefEntity) => string = prop('objectURI');\nconst getReferencedRelationUri: (value: RefRelation) => string = prop('objectURI');\nconst getReferencedEntityTypeUri: (value: RefEntity) => string = prop('type');\n\nconst getReferencedEntityUriFromAttrValue = pipe(\n getReferencedEntityFromAttrValue,\n defaultTo({}),\n getReferencedEntityUri\n);\n\nconst getReferencedRelationUriFromAttrValue: (value: ReferenceAttributeValue) => string = pipe(\n getReferencedRelationFromAttrValue,\n defaultTo({}),\n getReferencedRelationUri\n);\n\nconst getReferencedEntityTypeUriFromAttrValue: (value: ReferenceAttributeValue) => string = pipe(\n getReferencedEntityFromAttrValue,\n defaultTo({}),\n getReferencedEntityTypeUri\n);\n\nconst addReferencedRelationCrosswalks = (crosswalks: Crosswalk[], referencedRelation: RefRelation): Crosswalk[] => {\n const refCrosswalks = ((referencedRelation && referencedRelation.crosswalks) || []).map((crosswalk) => ({\n attributes: crosswalk.attributeURIs || [],\n type: crosswalk.type,\n uri: crosswalk.uri,\n value: crosswalk.value\n }));\n return (crosswalks || []).concat(refCrosswalks);\n};\n\nconst prepareReferencedPropsForAPI: (value: ReferenceAttributeValue) => StrictReferenceAttributeValue = evolve({\n refEntity: getFirstElementIfArray,\n refRelation: getFirstElementIfArray\n});\n\nexport {\n getReferencedEntityFromAttrValue,\n getReferencedRelationFromAttrValue,\n getReferencedEntityUriFromAttrValue,\n getReferencedEntityTypeUriFromAttrValue,\n getReferencedRelationUriFromAttrValue,\n getReferencedEntityUri,\n getReferencedEntityTypeUri,\n convertReferencedEntityForAttrValue,\n createReferencedRelationForAttrValue,\n addReferencedRelationCrosswalks,\n prepareReferencedPropsForAPI\n};\n","import {\n both,\n cond,\n curry,\n defaultTo,\n dropLast,\n equals,\n find,\n flatten,\n has,\n ifElse,\n is,\n last,\n map,\n pick,\n pipe,\n prop,\n propOr,\n split,\n T,\n values,\n when\n} from 'ramda';\nimport {\n getAttributeSource,\n getAttributeTypesHierarchyByUri,\n getEntityType,\n getReferencedEntityTypeUriFromAttrType,\n getRelationType,\n getRelationTypeUriFromAttrType,\n isAllowedReferencedSubAttribute\n} from '../metadata';\nimport {isOv} from './general';\nimport {getReferencedEntityUriFromAttrValue} from './referenceAttribute';\nimport {getParentUri, isRelationTypeUri, isTopLevelUri} from '../uris';\nimport {\n AttributeType,\n AttributeValue,\n ChangeValue,\n ComplexAttributeValue,\n CurriedFunction2,\n CurriedFunction3,\n DCRValue,\n Entity,\n Metadata,\n PrimitiveValue,\n RecordAttributesType,\n ReferenceAttributeValue,\n Relation,\n RequiredPick,\n SimpleAttributeValue\n} from '../types';\n\ntype GroupedValue = {\n attrValues: AttributeValue[];\n parent: AttributeValue | Entity | Relation;\n attrType: AttributeType;\n parentType: AttributeType;\n typePath: AttributeType[];\n};\n//todo: refactor this method\nfunction findAttributeValuesByTypeUri(\n metadata: Metadata,\n entityOrRelation: Entity | Relation,\n attrTypeUri: string,\n group: boolean\n): GroupedValue[];\nfunction findAttributeValuesByTypeUri(\n metadata: Metadata,\n entityOrRelation: Entity | Relation,\n attrTypeUri: string\n): AttributeValue[];\nfunction findAttributeValuesByTypeUri(\n metadata: Metadata,\n entityOrRelation: Entity | Relation,\n attrTypeUri: string,\n group?: boolean\n): AttributeValue[] | GroupedValue[] {\n //NOSONAR\n const attrTypeChain = getAttributeTypesHierarchyByUri(metadata, attrTypeUri);\n const entityOrRelationType =\n getEntityType(metadata, entityOrRelation.type) || getRelationType(metadata, entityOrRelation.type);\n if (attrTypeChain.length === 0) {\n return null;\n }\n\n const attrCollectionName = getAttributeSource(attrTypeUri);\n let parentObjects: Relation[] | Entity[] | AttributeValue[] = [entityOrRelation];\n let startIndex = 1;\n if (attrTypeChain[0].uri !== entityOrRelation.type) {\n startIndex = 0;\n }\n let result: AttributeValue[] = null;\n const groups: GroupedValue[] = group ? [] : null;\n let referencedUris = null;\n\n for (let i = startIndex; i < attrTypeChain.length; ++i) {\n const last = i === attrTypeChain.length - 1;\n const currentAttrType = attrTypeChain[i];\n let newParentObjects: AttributeValue[] = [];\n if (!isAllowedReferencedSubAttribute(currentAttrType, referencedUris)) {\n result = group ? [] : null;\n break;\n }\n if (Array.isArray(parentObjects)) {\n parentObjects.forEach((parentObject) => {\n const objValue = parentObject.value || parentObject[attrCollectionName] || {};\n let parentAttrTypes = [];\n // Check if currentAttrType is relation attribute of some reference attribute\n if (\n (currentAttrType.startObject && currentAttrType.endObject) ||\n both(isTopLevelUri, isRelationTypeUri)(currentAttrType.uri)\n ) {\n parentAttrTypes = (entityOrRelationType?.attributes || []).filter(\n (attr) =>\n getRelationTypeUriFromAttrType(attr) === currentAttrType.uri ||\n getReferencedEntityTypeUriFromAttrType(attr) === currentAttrType.uri\n );\n referencedUris = parentAttrTypes.reduce((result, attr) => {\n const uris =\n attr.referencedAttributeURIs &&\n attr.referencedAttributeURIs.filter(function (uri) {\n return result.indexOf(uri) === -1;\n });\n return uris ? result.concat(uris) : result;\n }, []);\n } else {\n parentAttrTypes.push(currentAttrType);\n referencedUris = null;\n }\n\n parentAttrTypes.forEach((parentAttrType) => {\n const attrValues = objValue[parentAttrType.name];\n if (attrValues) {\n newParentObjects = newParentObjects.concat(attrValues);\n }\n if (group && last) {\n groups.push({\n attrValues: attrValues || [],\n parent: parentObject,\n attrType: currentAttrType,\n parentType: attrTypeChain[i - 1],\n typePath: attrTypeChain\n });\n }\n });\n });\n parentObjects = newParentObjects;\n }\n if (last) {\n result = parentObjects;\n }\n }\n\n return groups || result;\n}\n\nconst findValueInAttributesByUriSuffix = (attributes: RecordAttributesType, uriSuffix: string): AttributeValue => {\n const [name, currentLevelUri, ...rest] = uriSuffix.split('/');\n const currentLevelValue = ((attributes[name] as AttributeValue[]) || []).find(({uri}) =>\n uri.endsWith('/' + currentLevelUri)\n );\n const restUri = rest.join('/');\n return !restUri || !currentLevelValue\n ? currentLevelValue\n : findValueInAttributesByUriSuffix((currentLevelValue as ComplexAttributeValue).value, restUri);\n};\n\nconst findAttributeValueByUri: CurriedFunction2<Entity, string, AttributeValue | undefined> = curry((entity, uri) => {\n if (!uri.startsWith(entity.uri)) {\n return undefined;\n }\n const [collectionName, ...uriParts] = uri.slice(entity.uri.length + 1).split('/');\n const restUri = uriParts.join('/');\n\n return findValueInAttributesByUriSuffix(entity[collectionName], restUri);\n});\ntype PartialLookup = RequiredPick<SimpleAttributeValue, 'value' | 'lookupCode'>;\ntype PartialRef = RequiredPick<ReferenceAttributeValue, 'value' | 'refEntity' | 'label'>;\ntype PartialAttributeValue = PartialLookup | PartialRef | PrimitiveValue | RecordAttributesType;\n\nfunction getAttributeValue(attributeValue: AttributeValue): PartialAttributeValue;\nfunction getAttributeValue(attributeValue: ChangeValue): DCRValue;\nfunction getAttributeValue(attributeValue: AttributeValue | ChangeValue): PartialAttributeValue | DCRValue {\n return cond([\n [has('lookupCode'), pick(['value', 'lookupCode'])],\n [has('refEntity'), pick(['refEntity', 'label', 'value'])],\n [T, prop('value')]\n ])(attributeValue);\n}\n\ntype GetAttributeValueWith<T> = (attributeValue: AttributeValue) => PartialAttributeValue & T;\nconst getAttributeValueWithOvFlag: GetAttributeValueWith<Pick<AttributeValue, 'ov'>> = cond([\n [has('lookupCode'), pick(['value', 'lookupCode', 'ov'])],\n [has('refEntity'), pick(['refEntity', 'label', 'value', 'ov'])],\n [T, pick(['value', 'ov'])]\n]);\n\nconst getAttributeValueWithUri: GetAttributeValueWith<Pick<AttributeValue, 'uri'>> = cond([\n [has('lookupCode'), pick(['value', 'lookupCode', 'uri'])],\n [has('refEntity'), pick(['refEntity', 'label', 'value', 'uri'])],\n [T, pick(['value', 'uri'])]\n]);\n\nconst getFilteredAttributeValuesByPath: CurriedFunction3<\n (value: AttributeValue) => boolean,\n string[],\n RecordAttributesType,\n AttributeValue[]\n> = curry((filterFn, attrPath, data) => {\n const [attrName, ...nextPath] = attrPath;\n const applyFilter = (arr) => (filterFn ? arr.filter(filterFn) : arr);\n const hasNextPath = () => nextPath.length > 0;\n return pipe(\n defaultTo({}),\n propOr([], attrName),\n applyFilter,\n when(hasNextPath, pipe(map(prop('value')), map(getFilteredAttributeValuesByPath(filterFn, nextPath))))\n )(data);\n});\n\nconst getValueByFn = curry((getAttributeValueFn, data) => {\n return ifElse(is(Array), map(getValueByFn(getAttributeValueFn)), getAttributeValueFn)(data);\n});\n\ntype FilterFn = (value: AttributeValue) => boolean | null;\ntype PickFn<T> = (value: AttributeValue) => T;\n\nconst getFilteredPickedAttributeValuesByPath = <T extends PartialAttributeValue>(\n filterFn: FilterFn,\n pickFn: PickFn<T>\n): CurriedFunction2<string[], AttributeValue[], ReturnType<typeof pickFn>> =>\n curry((attrPath, data) => {\n return pipe(getFilteredAttributeValuesByPath(filterFn, attrPath), getValueByFn(pickFn))(data);\n });\n\nconst getAttributeValuesByPath = getFilteredPickedAttributeValuesByPath<PartialAttributeValue>(null, getAttributeValue);\nconst getOvAttributeValuesByPath = getFilteredPickedAttributeValuesByPath<PartialAttributeValue>(\n isOv,\n getAttributeValue\n);\nconst getAttributeValuesByPathWithOvFlag = getFilteredPickedAttributeValuesByPath(null, getAttributeValueWithOvFlag);\nconst getOvAttributeValuesByPathWithOvFlag = getFilteredPickedAttributeValuesByPath(isOv, getAttributeValueWithOvFlag);\nconst getOvAttributeValuesByPathWithUri = getFilteredPickedAttributeValuesByPath(isOv, getAttributeValueWithUri);\n\nconst findAttributeValues = (\n entity: Entity,\n parentUri: string,\n attributeName: string\n): AttributeValue[] | undefined => {\n if (entity.uri === parentUri) {\n return entity.attributes?.[attributeName] as AttributeValue[];\n } else {\n return findAttributeValueByUri(entity, parentUri)?.value?.[attributeName];\n }\n};\n\nconst findReferenceAttributeByRefEntityUri = (\n entity: Entity,\n refEntityUri: string\n): ReferenceAttributeValue | undefined =>\n pipe(\n values,\n flatten,\n find(pipe(getReferencedEntityUriFromAttrValue, equals(refEntityUri)))\n )(entity?.attributes || {});\n\nconst findSiblingsAttributeValues = (entity: Entity, valueUri: string) => {\n const parentUri = getParentUri(valueUri);\n const attributeName = pipe(split('/'), dropLast(1), last)(valueUri);\n return findAttributeValues(entity, parentUri, attributeName);\n};\n\nexport {\n findAttributeValuesByTypeUri,\n findAttributeValueByUri,\n findValueInAttributesByUriSuffix,\n getAttributeValue,\n getAttributeValuesByPath,\n getAttributeValuesByPathWithOvFlag,\n getOvAttributeValuesByPathWithOvFlag,\n getOvAttributeValuesByPathWithUri,\n getOvAttributeValuesByPath,\n findAttributeValues,\n findReferenceAttributeByRefEntityUri,\n findSiblingsAttributeValues\n};\n","import {assoc, includes, __} from 'ramda';\nimport {ActivenessAttrTypes} from '../constants';\nimport {ConnectionEntity, ConnectionRelation, Entity, Relation} from '../types';\n\nconst ACTIVENESS_ATTR_TYPES = Object.values(ActivenessAttrTypes);\n\nconst isActivenessAttrType = includes(__, ACTIVENESS_ATTR_TYPES);\n\nconst getActivenessAttributes = (entity: Entity | Relation | ConnectionRelation | ConnectionEntity) =>\n ACTIVENESS_ATTR_TYPES.reduce(\n (acc, {uri}) => (typeof entity[uri] !== 'undefined' ? assoc(uri, entity[uri], acc) : acc),\n {}\n );\n\nexport {ACTIVENESS_ATTR_TYPES, isActivenessAttrType, getActivenessAttributes};\n","import {\n CrosswalksAttrTypes,\n EntityAttrTypes,\n MatchRulesAttrTypes,\n SpecialAttrTypes,\n WorkflowAttrTypes\n} from '../constants';\nimport {\n __,\n concat,\n curry,\n dissoc,\n either,\n evolve,\n F,\n always,\n find,\n includes,\n pipe,\n prop,\n propEq,\n values,\n reject,\n when\n} from 'ramda';\nimport {AttributeType, DataTenant, Entity, Relation} from '../types';\n\nexport const getDataTenantSpecialAttributeFieldName = (fieldNameForRequest: string, dataTenantId: string) =>\n `${fieldNameForRequest}_${dataTenantId}`;\n\nconst SPECIAL_ATTRIBUTES_NAMES_WITH_DATA_TENANTS = [SpecialAttrTypes.matches.name, SpecialAttrTypes.matchRules.name];\n\nconst SPECIAL_ATTRIBUTES_NAMES_WORKFLOW = values(WorkflowAttrTypes).map((t) => t.name);\n\nconst filterWorkflowAttrTypes = (canUserReadWorkflowDataTask: boolean) =>\n when(\n always(!canUserReadWorkflowDataTask),\n reject(pipe(prop('name'), includes(__, SPECIAL_ATTRIBUTES_NAMES_WORKFLOW)))\n );\n\nconst addSpecialDataTenantsAttrTypes = curry((dataTenants: DataTenant[], attrTypes: AttributeType[]) => {\n const attrTypesToAdd = attrTypes.filter(\n pipe(prop('name'), includes(__, SPECIAL_ATTRIBUTES_NAMES_WITH_DATA_TENANTS))\n );\n return (dataTenants || [])\n .flatMap((dataTenant) =>\n attrTypesToAdd.map(\n evolve({\n label: concat(`${dataTenant.label} `),\n name: (name) => getDataTenantSpecialAttributeFieldName(`dtPotentialMatches.${name}`, dataTenant.id)\n })\n )\n )\n .concat(attrTypes);\n});\n\nexport const getSpecialAttrTypeByFieldName = (\n fieldName: string,\n dataTenants?: DataTenant[],\n canUserReadWorkflowDataTask = true\n) =>\n pipe(\n values,\n filterWorkflowAttrTypes(canUserReadWorkflowDataTask),\n addSpecialDataTenantsAttrTypes(dataTenants),\n find(\n either(\n propEq('name', fieldName),\n dataTenants\n ? F\n : (attrType) =>\n fieldName.startsWith(\n getDataTenantSpecialAttributeFieldName(`dtPotentialMatches.${attrType.name}`, '')\n )\n )\n )\n )(SpecialAttrTypes);\n\nexport const isTypeAttrType = propEq('uri', SpecialAttrTypes.type.uri);\n\nexport const isMatchRuleAttrType = (attrType: AttributeType) =>\n values(MatchRulesAttrTypes).some(propEq('uri', attrType?.uri));\n\nexport const isSourceSystemAttrType = propEq('uri', CrosswalksAttrTypes.sourceSystems.uri);\n\ntype AddEntitySpecialAttribute = {\n entity: Entity | Relation;\n attributeType: AttributeType;\n value?: number | string[];\n};\n\ntype RemoveEntitySpecialAttribute = Omit<AddEntitySpecialAttribute, 'value'>;\n\ntype EditEntitySpecialAttribute = Required<AddEntitySpecialAttribute>;\n\nconst ENTITY_SPECIAL_ATTR_TYPES = Object.values(EntityAttrTypes);\n\nexport const isEntitySpecialAttrType = includes(__, ENTITY_SPECIAL_ATTR_TYPES);\n\nexport const addEntitySpecialAttribute = ({entity, attributeType, value}: AddEntitySpecialAttribute) => ({\n ...entity,\n [attributeType.uri]: typeof value === 'undefined' ? attributeType.defaultValue : value\n});\n\nexport const removeEntitySpecialAttribute = ({entity, attributeType}: RemoveEntitySpecialAttribute) =>\n dissoc(attributeType.uri, entity);\n\nexport const editEntitySpecialAttribute = ({entity, attributeType, value}: EditEntitySpecialAttribute) => ({\n ...entity,\n [attributeType.uri]: value\n});\n\nexport const isRoleAttrType = propEq('uri', EntityAttrTypes.roles.uri);\nexport const isTagAttrType = propEq('uri', EntityAttrTypes.tags.uri);\n","import {\n always,\n anyPass,\n both,\n cond,\n curry,\n either,\n evolve,\n filter,\n has,\n identity,\n is,\n isEmpty,\n isNil,\n map,\n mapObjIndexed,\n omit,\n pipe,\n prop,\n propEq,\n propOr,\n propSatisfies,\n reject,\n T,\n F,\n when,\n complement\n} from 'ramda';\nimport produce from 'immer';\nimport * as AttributesEditor from '../entity/editMode/AttributesEditor';\nimport {areOneHierarchyUris, generateUri, getParentUri} from '../uris';\nimport {\n getCreatableAttributeTypes,\n getEditableAttributeTypeSubAttributes,\n getRequiredAttributeTypesByTypeUri,\n isComplexAttribute,\n isLookupAttrType,\n isDependentLookupAttrType,\n isDateType,\n isImage\n} from '../metadata';\nimport {DataTypes} from '../types';\nimport {findAttributeValuesByTypeUri, getAttributeValue} from './findValue';\nimport {prepareReferencedPropsForAPI} from './referenceAttribute';\nimport {\n AttributeType,\n AttributeValue,\n ComplexAttributeValue,\n Crosswalk,\n Entity,\n Metadata,\n Mode,\n RecordAttributesType,\n SimpleAttributeValue,\n PrimitiveValue,\n AttributeItem,\n Relation\n} from '../types';\nimport {isActivenessAttrType} from './activeness';\nimport {addEntitySpecialAttribute, editEntitySpecialAttribute, removeEntitySpecialAttribute} from './special';\n\ntype CreateNewAttribute = {\n parentUri: string;\n attributeType: AttributeType;\n};\n\ntype CleanAttributesWith = {\n deleteEmptyComplex?: boolean;\n valueTransformer?: (\n value: SimpleAttributeValue | ComplexAttributeValue\n ) => Partial<SimpleAttributeValue | ComplexAttributeValue>;\n};\n\ntype AddAttribute<T extends Entity | ComplexAttributeValue> = {\n entity: T;\n attributeType: AttributeType;\n parentUri: string;\n index: number;\n crosswalks?: Crosswalk[];\n value?: PrimitiveValue | Partial<AttributeValue>;\n nestingLevel?: number;\n};\n\ntype AddNewAttribute<T extends Entity | ComplexAttributeValue> = {\n entity: T;\n attributeType: AttributeType;\n newAttribute: AttributeValue;\n index: number;\n crosswalks?: Crosswalk[];\n nestingLevel?: number;\n};\n\ntype EditAttribute<T extends Entity | ComplexAttributeValue> = {\n entity: T;\n attributeType: AttributeType;\n uri: string;\n crosswalks?: Crosswalk[];\n value?: PrimitiveValue | Partial<AttributeValue>;\n nestingLevel?: number;\n};\n\ntype RemoveAttribute<T extends Entity | ComplexAttributeValue> = {\n entity: T;\n attributeType: AttributeType;\n uri: string;\n nestingLevel?: number;\n};\n\ntype CreateDefaultValues = {\n attributeTypes: AttributeType[];\n parentUri: string;\n metadata: Metadata;\n mode: Mode;\n};\n\ntype AddToEntityRequiredAttributes = {\n entity: Entity;\n metadata: Metadata;\n mode: Mode;\n attrTypeFilter?: (attrType: AttributeType, parentAttrTypes: AttributeType[]) => boolean;\n};\n\nconst createNewAttributeValue = (attrType: AttributeType) => {\n const defaultValue = propOr('', 'defaultValue', attrType);\n return cond([\n [either(isComplexAttribute, isImage), always({value: {}})],\n [isLookupAttrType, () => (defaultValue ? {value: '', lookupCode: defaultValue} : {value: ''})],\n [both(propEq('defaultValue', 'now'), pipe(prop('type'), isDateType)), always({value: Date.now()})],\n [T, always({value: defaultValue})]\n ])(attrType);\n};\n\nconst createNewAttribute = ({parentUri, attributeType}: CreateNewAttribute) => {\n return {\n uri: generateUri(parentUri, attributeType.name),\n ov: true,\n type: attributeType.uri,\n ...createNewAttributeValue(attributeType)\n };\n};\n\nconst createDefaultValues = ({attributeTypes, parentUri, metadata, mode}: CreateDefaultValues) => {\n const attributeTypesWithDefaultValues = pipe(\n getCreatableAttributeTypes(mode),\n filter(anyPass([has('defaultValue'), isDependentLookupAttrType, propEq('required', true)]))\n )(attributeTypes);\n const defaultValues = {};\n for (const attributeType of attributeTypesWithDefaultValues) {\n const {name} = attributeType;\n const attribute = createNewAttribute({parentUri, attributeType});\n const subAttributes = getEditableAttributeTypeSubAttributes(metadata, attributeType);\n if (subAttributes) {\n attribute.value = createDefaultValues({\n parentUri: attribute.uri,\n attributeTypes: subAttributes,\n metadata,\n mode\n });\n }\n if (!isEmpty(attribute.value) || Boolean(attribute.lookupCode) || isDependentLookupAttrType(attributeType)) {\n defaultValues[name] = [attribute];\n }\n }\n return defaultValues;\n};\n\nconst addToEntityRequiredAttributes = ({entity, metadata, mode, attrTypeFilter}: AddToEntityRequiredAttributes) => {\n const requiredAttrTypes: AttributeType[] = getRequiredAttributeTypesByTypeUri(\n metadata,\n entity.type,\n true,\n attrTypeFilter\n );\n return requiredAttrTypes.reduce((entity, attributeType) => {\n const name = attributeType.name;\n const parentTypeUri = getParentUri(attributeType.uri);\n const parentAttributes =\n parentTypeUri === entity.type\n ? [\n {\n parentUri: entity.uri,\n attributes: entity.attributes\n }\n ]\n : (\n (findAttributeValuesByTypeUri(metadata, entity, parentTypeUri) as ComplexAttributeValue[]) || []\n ).map(({value, uri}) => ({parentUri: uri, attributes: value}));\n return parentAttributes.reduce((entity, {parentUri, attributes}) => {\n if (!attributes[name] || (attributes[name] as AttributeValue[]).length === 0) {\n let updatedEntity = addAttribute({entity, attributeType, parentUri, index: 0});\n if (isComplexAttribute(attributeType)) {\n const subAttributes = getEditableAttributeTypeSubAttributes(metadata, attributeType);\n updatedEntity = addDefaultValuesToComplexAttribute(\n {attributeType, subAttributes, metadata, mode, parentUri},\n updatedEntity\n );\n }\n return updatedEntity;\n }\n return entity;\n }, entity);\n }, entity);\n};\n\ntype AddDefaultValuesToComplexAttribute = {\n attributeType: AttributeType;\n subAttributes: AttributeType[];\n metadata: Metadata;\n mode: Mode;\n parentUri: string;\n};\n\nconst addDefaultValuesToComplexAttribute = curry(\n (\n {attributeType, subAttributes, metadata, mode, parentUri}: AddDefaultValuesToComplexAttribute,\n object: Entity | Relation\n ) => {\n const valueToEdit = findAttributeValuesByTypeUri(metadata, object, attributeType.uri).find(({uri}) =>\n areOneHierarchyUris(uri, parentUri)\n );\n const defaultValue = {\n ...valueToEdit,\n value: createDefaultValues({attributeTypes: subAttributes, parentUri: valueToEdit.uri, mode, metadata})\n };\n return editAttribute({entity: object, attributeType, uri: valueToEdit.uri, value: defaultValue});\n }\n);\n\nconst addDefaultValuesToAttributes = curry(\n ({metadata, attributeTypes, parentUri, mode}: CreateDefaultValues, attributes: RecordAttributesType) => {\n const attrTypesWithoutValues = attributeTypes.filter(({name}) => !attributes[name]);\n const checkExistedValues = mapObjIndexed((attrValues, attrName) => {\n const {type, attributes: attrTypes} = attributeTypes.find((type) => attrName === type.name);\n return attrValues.map((attrValue) => {\n const {value, uri} = attrValue;\n if (type === DataTypes.TYPE_NESTED) {\n return {\n ...attrValue,\n value: addDefaultValuesToAttributes(\n {\n attributeTypes: attrTypes,\n parentUri: uri,\n metadata,\n mode\n },\n value\n )\n };\n } else {\n return attrValue;\n }\n });\n });\n return {\n ...checkExistedValues(attributes),\n ...createDefaultValues({attributeTypes: attrTypesWithoutValues, parentUri, metadata, mode})\n };\n }\n);\n\nconst addAttribute = <T extends Entity | ComplexAttributeValue>({\n entity,\n attributeType,\n parentUri,\n index,\n crosswalks,\n value,\n nestingLevel\n}: AddAttribute<T>): T => {\n const newAttribute = createNewAttribute({\n parentUri,\n attributeType\n });\n const defaultValue = getAttributeValue(newAttribute);\n\n return produce(entity, (draftEntity) => {\n AttributesEditor.addAttribute(\n (draftEntity as Entity).attributes || (draftEntity as ComplexAttributeValue).value,\n attributeType,\n newAttribute.uri,\n value !== undefined ? value : defaultValue,\n crosswalks,\n nestingLevel,\n index\n );\n });\n};\n\nconst addNewAttribute = <T extends Entity | ComplexAttributeValue>({\n entity,\n attributeType,\n newAttribute,\n index,\n crosswalks,\n nestingLevel\n}: AddNewAttribute<T>): T => {\n return produce(entity, (draftEntity) => {\n AttributesEditor.addAttribute(\n (draftEntity as Entity).attributes || (draftEntity as ComplexAttributeValue).value,\n attributeType,\n newAttribute.uri,\n getAttributeValue(newAttribute),\n crosswalks,\n nestingLevel,\n index\n );\n });\n};\n\nconst editAttribute = <T extends Entity | ComplexAttributeValue>({\n entity,\n attributeType,\n uri,\n value,\n crosswalks,\n nestingLevel\n}: EditAttribute<T>): T =>\n produce(entity, (draftEntity) => {\n AttributesEditor.editAttribute(\n (draftEntity as Entity).attributes || (draftEntity as ComplexAttributeValue).value,\n attributeType,\n uri,\n value,\n crosswalks,\n nestingLevel\n );\n });\n\nconst removeAttribute = <T extends Entity | ComplexAttributeValue>({\n entity,\n attributeType,\n uri,\n nestingLevel\n}: RemoveAttribute<T>): T =>\n produce(entity, (draftEntity) => {\n AttributesEditor.removeAttribute(\n (draftEntity as Entity).attributes || (draftEntity as ComplexAttributeValue).value,\n attributeType,\n uri,\n nestingLevel\n );\n });\n\nconst isEmptyString = (value) => value === '';\n\nconst isEmptyValue = cond([\n [propSatisfies(complement(anyPass([isEmptyString, isNil])), 'lookupCode'), F],\n [propSatisfies(anyPass([isEmptyString, isNil]), 'value'), T],\n [both(propSatisfies(isEmpty, 'value'), propSatisfies(either(isNil, isEmpty), 'refEntity')), T],\n [T, F]\n]);\n\nconst rejectEmptyValues = reject(isEmptyValue);\n\nconst cleanAttributesWith = ({deleteEmptyComplex, valueTransformer = identity}: CleanAttributesWith) =>\n pipe(\n map(\n pipe(\n map(\n pipe(\n valueTransformer,\n evolve({\n value: when(is(Object), (value) =>\n cleanAttributesWith({deleteEmptyComplex, valueTransformer})(value)\n )\n })\n )\n ),\n rejectEmptyValues\n )\n ),\n when(always(deleteEmptyComplex), reject(isEmpty))\n );\n\nconst prepareStructureForApi = (deleteEmptyComplex = false) =>\n cleanAttributesWith({\n valueTransformer: pipe(omit(['type', 'uri']), prepareReferencedPropsForAPI),\n deleteEmptyComplex\n });\n\nconst cleanAttributes = (deleteEmptyComplex = false) =>\n pipe(prepareStructureForApi(deleteEmptyComplex), reject(isEmpty));\n\nconst addEntityAttributes = curry((entity: Relation | Entity, attributes: AttributeItem[]) => {\n return attributes.reduce((entity, attribute) => {\n const {attributeType, parentUri, index} = attribute;\n if (isActivenessAttrType(attributeType)) {\n return addEntitySpecialAttribute({entity, attributeType});\n }\n return addAttribute({\n entity,\n attributeType,\n parentUri,\n index\n });\n }, entity);\n});\n\nconst changeEntityAttribute = curry((entity: Relation | Entity, attribute: AttributeItem) => {\n const {attributeType, uri, value} = attribute;\n if (isActivenessAttrType(attributeType)) {\n return editEntitySpecialAttribute({\n entity,\n attributeType,\n value: value as number\n });\n }\n return editAttribute({\n entity,\n attributeType,\n uri,\n value: value as Partial<AttributeValue>\n });\n});\n\nconst removeEntityAttribute = curry((entity: Relation | Entity, attribute: AttributeItem) => {\n const {attributeType, uri} = attribute;\n if (isActivenessAttrType(attributeType)) {\n return removeEntitySpecialAttribute({entity, attributeType});\n }\n return removeAttribute({entity, attributeType, uri});\n});\n\nexport {\n createNewAttribute,\n addAttribute,\n addNewAttribute,\n editAttribute,\n removeAttribute,\n createDefaultValues,\n addDefaultValuesToAttributes,\n cleanAttributes,\n cleanAttributesWith,\n addToEntityRequiredAttributes,\n addDefaultValuesToComplexAttribute,\n removeEntityAttribute,\n addEntityAttributes,\n changeEntityAttribute\n};\n","import {either, pipe, propEq, any, pathOr, filter, map, flatten} from 'ramda';\nimport {PinnedAttribute} from '../types';\n\nexport const getPinnedAttributesForUser = (\n pinnedAttributes: PinnedAttribute[] = [],\n userRoles: string[] = []\n): string[] =>\n pipe(\n filter(\n pipe(\n pathOr([], ['roles']),\n either(\n propEq('length', 0),\n any((role) => userRoles.includes(role))\n )\n )\n ),\n map(pathOr([], ['attributes'])),\n flatten\n )(pinnedAttributes);\n","import {defaultTo, filter, head, identity, pipe, prop, propOr} from 'ramda';\nimport {isOv} from './general';\nimport {ImageAttributeValue} from '../types';\n\nconst IMAGES_SUB_ATTRIBUTES = {\n URL: 'Url',\n URL_PREVIEW: 'UrlPreview',\n URL_THUMBNAIL: 'UrlThumbnail',\n CDN_URL: 'CdnUrl',\n CDN_URL_PREVIEW: 'CdnUrlPreview',\n CDN_URL_THUMBNAIL: 'CdnUrlThumbnail',\n WIDTH: 'Width',\n HEIGHT: 'Height',\n SIZE: 'Size',\n MIMETYPE: 'MimeType',\n CREATION_TIMESTAMP: 'CreationTimestamp'\n};\n\nconst getImageSubAttributeValue = (subAttribute, imageValue, ovOnly) => {\n const subAttributeValue = prop(subAttribute, imageValue);\n\n if (Array.isArray(subAttributeValue)) {\n const firstValue = ovOnly ? subAttributeValue.find(isOv) : head(subAttributeValue);\n return firstValue && firstValue.value;\n }\n\n return null;\n};\n\ntype GetImageAttributeFirstUrl = (\n subAttributes: string[],\n ovOnly: boolean\n) => (value: Pick<ImageAttributeValue, 'value'>) => string;\nconst getImageAttributeFirstUrl: GetImageAttributeFirstUrl = (subAttributes, ovOnly) =>\n pipe(\n propOr({}, 'value'),\n (value) => subAttributes.map((subAttribute) => getImageSubAttributeValue(subAttribute, value, ovOnly)),\n filter(identity),\n head,\n defaultTo('')\n );\n\nconst getImageAttributeOvUrl = getImageAttributeFirstUrl(\n [IMAGES_SUB_ATTRIBUTES.CDN_URL, IMAGES_SUB_ATTRIBUTES.URL],\n true\n);\n\nconst getImageAttributeOvPreviewUrl = getImageAttributeFirstUrl(\n [IMAGES_SUB_ATTRIBUTES.CDN_URL_PREVIEW, IMAGES_SUB_ATTRIBUTES.URL_PREVIEW],\n true\n);\n\nconst getImageAttributeOvThumbnailUrl = getImageAttributeFirstUrl(\n [IMAGES_SUB_ATTRIBUTES.CDN_URL_THUMBNAIL, IMAGES_SUB_ATTRIBUTES.URL_THUMBNAIL],\n true\n);\n\nconst getImageAttributeThumbnailUrl = getImageAttributeFirstUrl(\n [IMAGES_SUB_ATTRIBUTES.CDN_URL_THUMBNAIL, IMAGES_SUB_ATTRIBUTES.URL_THUMBNAIL],\n false\n);\n\nexport {\n getImageAttributeOvThumbnailUrl,\n getImageAttributeThumbnailUrl,\n getImageAttributeOvPreviewUrl,\n getImageAttributeOvUrl\n};\n","import {\n getReadableAttributeTypes,\n isAnalyticAttribute,\n isSpecialAttribute,\n getCreatableAttributeTypes,\n getCreatableOrReadableAttributeTypes\n} from '../metadata';\nimport {isOv} from './general';\nimport {always, any, append, both, cond, has, defaultTo, pipe, prop, T, when} from 'ramda';\nimport {wrapInArrayIfNeeded} from '../utils';\nimport {AttributeType, AttributeValue, Entity, Mode, Relation} from '../types';\nimport {isTempUri} from '../uris';\nimport {checkCanCreateAttribute} from '../permissions';\nimport {isActivenessAttrType} from './activeness';\n\nexport const getFilteredAttributesList = (\n attrTypes: AttributeType[],\n entity: Partial<Entity> | Partial<Relation>,\n checkValues: (values: AttributeValue[], attrType: AttributeType) => boolean\n): {\n attrType: AttributeType;\n values: AttributeValue[];\n}[] => {\n const {attributes = {}} = entity;\n const {analyticsAttributes = {}} = entity as Partial<Entity>;\n return attrTypes.reduce((result, attrType) => {\n const source = cond([\n [isSpecialAttribute, always(entity)],\n [both(isAnalyticAttribute, always(analyticsAttributes)), always(analyticsAttributes)],\n [T, always(attributes)]\n ])(attrType);\n const nameProp = isSpecialAttribute(attrType) ? 'uri' : 'name';\n const values = pipe(\n prop(attrType[nameProp]),\n when(\n both(always(isActivenessAttrType(attrType)), (value) => value === null),\n always([''])\n ),\n defaultTo([]),\n wrapInArrayIfNeeded\n )(source);\n return when(\n always(checkValues(values, attrType)),\n append({\n attrType,\n values\n }),\n result\n );\n }, []);\n};\n\nexport const getAttributesListForReadMode = (\n attrTypes: AttributeType[],\n entity: Partial<Entity> | Partial<Relation>,\n showNonOv?: boolean\n) => {\n const readableAttrTypes = getReadableAttributeTypes(attrTypes);\n const checkValues = any(showNonOv ? T : isOv);\n return getFilteredAttributesList(readableAttrTypes, entity, checkValues);\n};\n\nexport const getAttributesListForEditMode = (\n attrTypes: AttributeType[],\n mode: Mode,\n entity: Partial<Entity> | Partial<Relation>,\n showEmptyEditors?: boolean,\n showNonOv?: boolean,\n pinnedAttributes?: string[]\n) => {\n const isTemporaryEntity = isTempUri(entity?.uri);\n const attributeTypes = isTemporaryEntity\n ? getCreatableAttributeTypes(mode, attrTypes)\n : getCreatableOrReadableAttributeTypes(mode, attrTypes);\n\n const checkValues = (values, attrType) => {\n const canCreate = checkCanCreateAttribute({attributeType: attrType, mode});\n return (\n (showEmptyEditors && canCreate) ||\n (attrType.required && canCreate) ||\n any(showNonOv ? T : isOv, values) ||\n (isSpecialAttribute(attrType) && has(attrType.uri, entity)) ||\n pinnedAttributes?.includes(attrType.uri)\n );\n };\n return getFilteredAttributesList(attributeTypes, entity, checkValues);\n};\n","import {when, is, always} from 'ramda';\n\nlet provider;\nexport const setRequestProvider = (_provider) => {\n provider = _provider;\n};\n\nexport function rawRequest<R>(url: string, options: Record<string, unknown>): Promise<R> {\n return provider(url, options);\n}\n\nexport const promisifyProvider = (provider) => (url, options) =>\n new Promise((resolve, reject) => {\n provider(\n url,\n options,\n (res) => {\n resolve(res);\n },\n (err, status) => {\n reject(when(is(String), always({errorMessage: err, errorCode: status}))(err));\n },\n null\n );\n });\n","import {rawRequest} from '../index';\nimport {once} from 'ramda';\nimport {\n CascadeUpdateResponseStateValue,\n CascadeUpdateStateValue,\n CascadeUpdateUpdatedValue,\n DependentLookupsParentForApi,\n Order\n} from '../../types';\n\ntype GetDependentLookups = {\n type: string;\n parents: DependentLookupsParentForApi[];\n displayNamePrefix: string;\n max: number;\n offset?: number;\n sortByDisplayName?: boolean;\n sortOrder?: Order;\n};\n\ntype LookupListItemForResolve = {\n type: string;\n codeValue: string;\n};\n\ntype ResolvedLookupListItem = {\n [lookupTypeCode: string]: {\n [lookupCode: string]: {displayName: string};\n };\n};\n\nexport const MAX_DEPENDENT_LOOKUP_VALUES = 50;\n\nconst getDependentLookups = ({\n type,\n parents = [],\n displayNamePrefix,\n max = MAX_DEPENDENT_LOOKUP_VALUES,\n offset = 0,\n sortByDisplayName = true,\n sortOrder = Order.asc\n}: GetDependentLookups) =>\n rawRequest('/lookups/list', {\n method: 'POST',\n body: JSON.stringify({\n type,\n parents,\n displayNamePrefix,\n max,\n offset,\n sortByDisplayName,\n sortOrder\n }),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n\nconst getLookups = once(() =>\n rawRequest('/lookups', {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n })\n);\n\nconst resolveLookupsList = (lookupsList: LookupListItemForResolve[]): Promise<ResolvedLookupListItem[]> =>\n rawRequest('/lookups/resolveList', {\n method: 'POST',\n body: JSON.stringify(lookupsList),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n\nconst cascadeUpdate = (state: CascadeUpdateStateValue[], updatedValue: CascadeUpdateUpdatedValue) =>\n rawRequest<CascadeUpdateResponseStateValue[]>('/lookups/cascadeUpdate', {\n method: 'POST',\n body: JSON.stringify({\n state,\n updatedValue\n }),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n\nexport {getDependentLookups, getLookups, resolveLookupsList, cascadeUpdate};\n","import {compose, isEmpty, join, map, pipe, reject, toPairs, unless} from 'ramda';\nimport {isEmptyValue} from '../../utils';\n\ntype GenerateQueryFn = (query: Record<string, unknown>) => string;\nexport const generateQuery: GenerateQueryFn = compose(join('&'), map(join('=')), map(map(encodeURIComponent)), toPairs);\n\nexport const generateQueryString: GenerateQueryFn = compose(\n unless(isEmpty, (s) => `?${s}`),\n generateQuery\n);\n\nexport const generateValuableQueryString: GenerateQueryFn = pipe(reject(isEmptyValue), generateQueryString);\n\nexport const isAbsoluteUrl = (url?: string): boolean =>\n url ? url.startsWith('http:') || url.startsWith('https:') : false;\n\nexport const getServiceName = (url: string): string => {\n const [path] = url.split('?');\n const paths = path.split('/');\n return paths[2];\n};\n","import i18n from 'ui-i18n';\nimport FilterOptions, {FilterOptionsLabels} from '../constants/filterOptions';\nimport {Maybe} from '../utils';\nimport {curry, cond, always, T, complement, split, includes} from 'ramda';\n\nconst getFilterOptionLabel = (option) => Maybe.fromNull(FilterOptionsLabels[option]).map(i18n.text).orSome('');\n\nconst COMPOSITE_OPTION_DELIMITER = '_';\nconst makeCompositeFilterOption = curry((prefix, option) => `${prefix}${COMPOSITE_OPTION_DELIMITER}${option}`);\nconst parseCompositeFilterOption = split(COMPOSITE_OPTION_DELIMITER);\nconst isCompositeFilterOption = includes(COMPOSITE_OPTION_DELIMITER);\n\nconst isEquivalentToBasicOption = curry(\n (option, basicOption) =>\n option && (option === basicOption || option.endsWith(`${COMPOSITE_OPTION_DELIMITER}${basicOption}`))\n);\n\nconst isEquivalentToOneOfOptions = curry((basicOptions, option) =>\n basicOptions.some(isEquivalentToBasicOption(option))\n);\n\nconst isRangeFilterOption = isEquivalentToOneOfOptions([\n FilterOptions.IN_RANGE,\n FilterOptions.COUNT_RANGE,\n FilterOptions.WITHIN\n]);\n\nconst isFilterOptionWithoutValues = isEquivalentToOneOfOptions([FilterOptions.EXISTS, FilterOptions.MISSING_VALUE]);\n\nconst getFilterOptionArity = cond([\n [isFilterOptionWithoutValues, always(0)],\n [isRangeFilterOption, always(2)],\n [T, always(1)]\n]);\n\nconst checkIfOptionHasValues = complement(isFilterOptionWithoutValues);\n\nconst isMultiValueOption = isEquivalentToOneOfOptions([\n FilterOptions.HAS_ALL,\n FilterOptions.EQUALS,\n FilterOptions.NOT_EQUALS\n]);\n\nconst isCountFilterOption = isEquivalentToOneOfOptions([\n FilterOptions.COUNT_EQUALS,\n FilterOptions.COUNT_NOT_EQUALS,\n FilterOptions.COUNT_LT,\n FilterOptions.COUNT_LTE,\n FilterOptions.COUNT_GT,\n FilterOptions.COUNT_GTE,\n FilterOptions.COUNT_RANGE\n]);\n\nconst isFileFilterOption = isEquivalentToOneOfOptions([FilterOptions.IN_FILE, FilterOptions.NOT_IN_FILE]);\n\nconst countOptionToRegularOption = (countOption) => {\n switch (countOption) {\n case FilterOptions.COUNT_EQUALS:\n return FilterOptions.EQUALS;\n case FilterOptions.COUNT_NOT_EQUALS:\n return FilterOptions.NOT_EQUALS;\n case FilterOptions.COUNT_LT:\n return FilterOptions.LT;\n case FilterOptions.COUNT_LTE:\n return FilterOptions.LTE;\n case FilterOptions.COUNT_GT:\n return FilterOptions.GT;\n case FilterOptions.COUNT_GTE:\n return FilterOptions.GTE;\n case FilterOptions.COUNT_RANGE:\n return FilterOptions.IN_RANGE;\n }\n};\n\nconst isDateFilterOption = isEquivalentToOneOfOptions([\n FilterOptions.ON,\n FilterOptions.BEFORE,\n FilterOptions.AFTER,\n FilterOptions.WITHIN,\n FilterOptions.NOT_EQUALS\n]);\n\nconst isDateRangeFilterOption = isEquivalentToOneOfOptions([FilterOptions.WITHIN]);\n\n// Each group contains filters with the same type of editors\nconst CompatibleFilterGroups = [\n [\n FilterOptions.COUNT_EQUALS,\n FilterOptions.COUNT_NOT_EQUALS,\n FilterOptions.COUNT_LT,\n FilterOptions.COUNT_LTE,\n FilterOptions.COUNT_GT,\n FilterOptions.COUNT_GTE\n ],\n [FilterOptions.NOT_IN_FILE, FilterOptions.IN_FILE],\n [FilterOptions.EQUALS, FilterOptions.NOT_EQUALS, FilterOptions.HAS_ALL],\n [FilterOptions.LT, FilterOptions.LTE, FilterOptions.GT, FilterOptions.GTE],\n [FilterOptions.MISSING_VALUE, FilterOptions.EXISTS],\n [FilterOptions.COUNT_RANGE],\n [FilterOptions.IN_RANGE],\n [FilterOptions.STARTS_WITH, FilterOptions.CONTAINS],\n [FilterOptions.FULL_TEXT],\n [FilterOptions.ON, FilterOptions.BEFORE, FilterOptions.AFTER, FilterOptions.NOT_EQUALS],\n [FilterOptions.WITHIN]\n];\n\nconst isCompatibleFilters = (filter1, filter2) =>\n CompatibleFilterGroups.some((filterGroup) => filterGroup.includes(filter1) && filterGroup.includes(filter2));\n\nexport {\n getFilterOptionLabel,\n getFilterOptionArity,\n checkIfOptionHasValues,\n isMultiValueOption,\n isCountFilterOption,\n isRangeFilterOption,\n isDateRangeFilterOption,\n countOptionToRegularOption,\n isCompatibleFilters,\n isFileFilterOption,\n isDateFilterOption,\n makeCompositeFilterOption,\n parseCompositeFilterOption,\n isCompositeFilterOption\n};\n","import DataTypes from '../types/data-types';\nimport FilterOptions from '../constants/filterOptions';\nimport {omit, pipe, reject, values} from 'ramda';\nimport {isCountFilterOption} from './filterOptionsHelpers';\n\nconst propsExcept = pipe(omit, values);\n\nconst FilterOptionsGroups = {\n OPTIONS_FOR_STRING: propsExcept(\n ['IN_RANGE', 'LT', 'LTE', 'GT', 'GTE', 'ON', 'BEFORE', 'AFTER', 'WITHIN'],\n FilterOptions\n ),\n OPTIONS_FOR_DATE: [\n FilterOptions.ON,\n FilterOptions.BEFORE,\n FilterOptions.AFTER,\n FilterOptions.WITHIN,\n FilterOptions.NOT_EQUALS,\n FilterOptions.MISSING_VALUE,\n FilterOptions.EXISTS,\n FilterOptions.COUNT_EQUALS,\n FilterOptions.COUNT_NOT_EQUALS,\n FilterOptions.COUNT_LT,\n FilterOptions.COUNT_LTE,\n FilterOptions.COUNT_GT,\n FilterOptions.COUNT_GTE,\n FilterOptions.COUNT_RANGE,\n FilterOptions.IN_FILE,\n FilterOptions.NOT_IN_FILE\n ],\n OPTIONS_FOR_BOOLEAN: propsExcept(\n [\n 'STARTS_WITH',\n 'IN',\n 'NOT_IN',\n 'HAS_ALL',\n 'IN_RANGE',\n 'FULL_TEXT',\n 'LT',\n 'LTE',\n 'GT',\n 'GTE',\n 'CONTAINS',\n 'ON',\n 'BEFORE',\n 'AFTER',\n 'WITHIN'\n ],\n FilterOptions\n ),\n OPTIONS_FOR_BLOB: propsExcept(\n [\n 'EQUALS',\n 'NOT_EQUALS',\n 'STARTS_WITH',\n 'IN',\n 'NOT_IN',\n 'HAS_ALL',\n 'IN_RANGE',\n 'LT',\n 'LTE',\n 'GT',\n 'GTE',\n 'ON',\n 'BEFORE',\n 'AFTER',\n 'WITHIN'\n ],\n FilterOptions\n ),\n OPTIONS_FOR_NUMBER: propsExcept(\n ['STARTS_WITH', 'FULL_TEXT', 'CONTAINS', 'ON', 'BEFORE', 'AFTER', 'WITHIN'],\n FilterOptions\n ),\n OPTIONS_FOR_LOOKUP: propsExcept(\n [\n 'STARTS_WITH',\n 'FULL_TEXT',\n 'IN_RANGE',\n 'LT',\n 'LTE',\n 'GT',\n 'GTE',\n 'ON',\n 'BEFORE',\n 'AFTER',\n 'WITHIN',\n 'CONTAINS'\n ],\n FilterOptions\n ),\n OPTIONS_FOR_ENUM: propsExcept(\n ['STARTS_WITH', 'FULL_TEXT', 'IN_RANGE', 'LT', 'LTE', 'GT', 'GTE', 'ON', 'BEFORE', 'AFTER', 'WITHIN'],\n FilterOptions\n ),\n OPTIONS_FOR_ID: [FilterOptions.EQUALS, FilterOptions.NOT_EQUALS, FilterOptions.IN_FILE, FilterOptions.NOT_IN_FILE],\n OPTIONS_FOR_COUNT: [\n FilterOptions.EQUALS,\n FilterOptions.NOT_EQUALS,\n FilterOptions.LT,\n FilterOptions.LTE,\n FilterOptions.GT,\n FilterOptions.GTE,\n FilterOptions.IN_RANGE\n ],\n OPTIONS_FOR_COMPLEX: [\n FilterOptions.COUNT_EQUALS,\n FilterOptions.COUNT_NOT_EQUALS,\n FilterOptions.COUNT_LT,\n FilterOptions.COUNT_LTE,\n FilterOptions.COUNT_GT,\n FilterOptions.COUNT_GTE,\n FilterOptions.COUNT_RANGE,\n FilterOptions.EXISTS,\n FilterOptions.MISSING_VALUE\n ],\n OPTIONS_FOR_UNKNOWN_TYPE: [\n FilterOptions.EQUALS,\n FilterOptions.NOT_EQUALS,\n FilterOptions.EXISTS,\n FilterOptions.MISSING_VALUE\n ]\n};\n\nconst dataTypeToFilterOptions = (dataType) => {\n switch (dataType) {\n case DataTypes.TYPE_TYPEAHEAD:\n case DataTypes.TYPE_STRING:\n case DataTypes.TYPE_PASSWORD:\n case DataTypes.TYPE_TEXT:\n case DataTypes.TYPE_CIK_ID:\n case DataTypes.TYPE_URL:\n case DataTypes.TYPE_BLOG_URL:\n case DataTypes.TYPE_IMAGE_URL:\n case DataTypes.TYPE_EMAIL:\n return FilterOptionsGroups.OPTIONS_FOR_STRING;\n\n case DataTypes.TYPE_LOOKUP:\n case DataTypes.TYPE_DEPENDENT_LOOKUP:\n return FilterOptionsGroups.OPTIONS_FOR_LOOKUP;\n case DataTypes.TYPE_ENUM:\n return FilterOptionsGroups.OPTIONS_FOR_ENUM;\n\n case DataTypes.TYPE_DATE:\n case DataTypes.TYPE_ACTIVENESS_DATE:\n case DataTypes.TYPE_TIMESTAMP:\n case DataTypes.TYPE_LOCAL_DATE:\n return FilterOptionsGroups.OPTIONS_FOR_DATE;\n\n case DataTypes.TYPE_BOOLEAN:\n case DataTypes.TYPE_BOOLEAN_RADIO:\n return FilterOptionsGroups.OPTIONS_FOR_BOOLEAN;\n\n case DataTypes.TYPE_BLOB:\n return FilterOptionsGroups.OPTIONS_FOR_BLOB;\n\n case DataTypes.TYPE_LONG:\n case DataTypes.TYPE_INT:\n case DataTypes.TYPE_FLOAT:\n case DataTypes.TYPE_DOUBLE:\n case DataTypes.TYPE_NUMBER:\n return FilterOptionsGroups.OPTIONS_FOR_NUMBER;\n\n case DataTypes.TYPE_ENTITY_ID:\n return FilterOptionsGroups.OPTIONS_FOR_ID;\n\n case DataTypes.TYPE_RDM_LOOKUPS_NOT_RESOLVED:\n return [FilterOptions.EQUALS];\n\n case DataTypes.TYPE_COUNT:\n return FilterOptionsGroups.OPTIONS_FOR_COUNT;\n\n case DataTypes.TYPE_NESTED:\n case DataTypes.TYPE_REFERENCE:\n case DataTypes.TYPE_IMAGE:\n return FilterOptionsGroups.OPTIONS_FOR_COMPLEX;\n\n default:\n return FilterOptionsGroups.OPTIONS_FOR_UNKNOWN_TYPE;\n }\n};\n\nexport const getFilterOptionsForDataTypeDefinition = (dataTypeDefinition) => {\n const {type, singleValue = false} = dataTypeDefinition;\n\n const filterOptions = dataTypeToFilterOptions(type);\n\n return singleValue ? reject(isCountFilterOption, filterOptions) : filterOptions;\n};\n\nexport default getFilterOptionsForDataTypeDefinition;\n","import {assoc, pipe, prop} from 'ramda';\nimport {SearchOperator} from '../types';\n\nconst isAndOperator = (operator: SearchOperator) => [SearchOperator.and, SearchOperator.andNot].includes(operator);\nconst isOrOperator = (operator: SearchOperator) => [SearchOperator.or, SearchOperator.orNot].includes(operator);\nconst isNegationOperator = (operator: SearchOperator) =>\n [SearchOperator.andNot, SearchOperator.orNot].includes(operator);\n\nconst hasOrInOperations = <T extends {operator: SearchOperator}>(operations: Array<T>): boolean =>\n operations.slice(0, -1).some(pipe(prop('operator'), isOrOperator));\n\nconst areAllOperators = (validOperators: SearchOperator[]) => <T extends {operator: SearchOperator}>(\n items: Array<T>\n): boolean => items.slice(0, -1).every((item) => validOperators.includes(item.operator));\nconst areAllOperatorsAnd = areAllOperators([SearchOperator.and]);\n\nconst shiftDownOperators = <T extends {operator: SearchOperator}>(itemsWithOperators: Array<T>): Array<T> =>\n itemsWithOperators.map((content, contentIndex, currentContentsWithOperator) => {\n const isFirst = contentIndex === 0;\n return assoc('operator', isFirst ? null : currentContentsWithOperator[contentIndex - 1].operator, content);\n }, []);\n\nconst shiftUpOperators = <T extends {operator: SearchOperator}>(itemsWithOperators: Array<T>): Array<T> =>\n itemsWithOperators.map((content, contentIndex, currentContentsWithOperator) => {\n const isLast = contentIndex === currentContentsWithOperator.length - 1;\n return assoc('operator', isLast ? null : currentContentsWithOperator[contentIndex + 1].operator, content);\n }, []);\n\nexport {\n isAndOperator,\n isNegationOperator,\n isOrOperator,\n hasOrInOperations,\n areAllOperatorsAnd,\n shiftDownOperators,\n shiftUpOperators\n};\n","import {head, invertObj, last} from 'ramda';\nimport {SearchOperator} from '../types';\n\nexport const wrapInBrackets = (value: string) => `(${value})`;\n\nexport const areBracketsBalanced = (str: string) => {\n const stack = [];\n const openToClosedMap = {\n '{': '}',\n '[': ']',\n '(': ')'\n };\n const closedToOpenMap = invertObj(openToClosedMap);\n\n for (let i = 0; i < str.length; i++) {\n const char = str[i];\n if (openToClosedMap[char]) {\n stack.push(char);\n } else if (closedToOpenMap[char] && openToClosedMap[stack.pop()] !== char) {\n return false;\n }\n }\n return stack.length === 0;\n};\n\nexport const wrapQueryWithBrackets = (query: string, wrapAnyOperator = true) => {\n const orOperators = [SearchOperator.or, SearchOperator.orNot];\n const operators = wrapAnyOperator ? [SearchOperator.and, SearchOperator.andNot, ...orOperators] : orOperators;\n const hasOperator = operators.map((value) => ` ${value} `).some((operator) => query.includes(operator));\n const startsWithNot = query.startsWith('not');\n const alreadyWrapped = head(query) === '(' && last(query) === ')' && areBracketsBalanced(query.slice(1, -1));\n return (hasOperator || startsWithNot) && !alreadyWrapped ? wrapInBrackets(query) : query;\n};\n","import {propOr} from 'ramda';\nimport {isNegationOperator} from '../search/operators';\nimport {wrapQueryWithBrackets} from './bracketsUtils';\n\nexport const DEFAULT_OPERATOR = 'and';\n\nclass FilterBuilder {\n constructor() {\n this.clauses = [];\n }\n addClause(clause) {\n if (clause) {\n this.clauses = this.clauses.concat(clause);\n }\n return this;\n }\n\n build() {\n return this.clauses.join(` ${DEFAULT_OPERATOR} `);\n }\n\n orBuild() {\n return `(${this.clauses.join(' or ')})`;\n }\n\n buildWithOperators(operators) {\n return this.clauses.reduce((result, clause, clauseIndex) => {\n const isFirstClause = result.length === 0;\n const operator = propOr(DEFAULT_OPERATOR, clauseIndex, operators);\n const newClause = isNegationOperator(operator) ? wrapQueryWithBrackets(clause) : clause;\n return isFirstClause ? newClause : `${result} ${operator} ${newClause}`;\n }, '');\n }\n}\n\nexport default FilterBuilder;\n","import {T, allPass, always, cond, curry, identity, isNil, is, pipe, replace, unless, map, join} from 'ramda';\nimport moment from 'moment';\nimport i18n from 'ui-i18n';\nimport {\n isCountFilterOption,\n isDateFilterOption,\n isDateRangeFilterOption,\n isFileFilterOption,\n isRangeFilterOption\n} from './filterOptionsHelpers';\nimport {DataTypes} from '../types';\nimport {isTimestampBasedType} from '../metadata';\nimport DateRangeValue, {\n AllDateRangeValues,\n DatePeriod,\n DateRangeLabels,\n SearchDrivenDateRangeValues\n} from '../constants/filter-values';\n\nconst mapFilterValue = curry((mapFn, value) => {\n const mapValue = unless(isNil, mapFn);\n return Array.isArray(value) ? value.map(mapValue) : mapValue(value);\n});\n\nconst filterValueToString = (value) => {\n if (Array.isArray(value)) {\n return value.map(filterValueToString).toString();\n }\n if (typeof value === 'object' && 'lookupCode' in value) {\n return value.lookupCode;\n }\n return value.toString().trim();\n};\n\nconst escapeQueryValue = replace(/./g, (c) => {\n switch (c) {\n case '\\\\':\n c = '\\\\\\\\';\n break;\n case \"'\": //eslint-disable-line\n c = \"\\\\'\"; //eslint-disable-line\n break;\n case '\"':\n c = '\\\\\"';\n break;\n }\n return c;\n});\n\nconst wrapInQuotes = (value) => `'${value}'`;\nconst wrapInDoubleQuotes = (value) => `\"${value}\"`;\n\nconst multiValueFilter = (filterClauseFn) => pipe(map(filterClauseFn), join(' or '));\n\nconst filterValueToQueryString = pipe(filterValueToString, escapeQueryValue);\n\nconst filterValueToQueryStringWithQuotes = pipe(filterValueToQueryString, wrapInQuotes);\n\nconst getFilterValueLabel = curry((option, value) => {\n return cond([\n [allPass([always(isRangeFilterOption(option)), Array.isArray]), () => `${value[0]} - ${value[1]}`],\n [Array.isArray, () => value.join(', ')],\n [T, identity]\n ])(value);\n});\n\nconst getDataTypeDefinitionForFilterValue = (valueDataTypeDefinition, filter) => {\n if (isCountFilterOption(filter)) {\n return {type: DataTypes.TYPE_INT};\n }\n if (isFileFilterOption(filter)) {\n return {type: DataTypes.TYPE_FILE};\n }\n if (\n isDateFilterOption(filter) &&\n !isDateRangeFilterOption(filter) &&\n isTimestampBasedType(valueDataTypeDefinition.type)\n ) {\n return {type: DataTypes.TYPE_LOCAL_DATE};\n }\n return valueDataTypeDefinition;\n};\n\nconst DATE_RANGE_VALUES = Object.values(AllDateRangeValues);\n\nconst isOutdatedDateRangeValue = (value) => !Object.values(AllDateRangeValues).includes(value);\n\nconst isDateRangeValue = (value: string) => DATE_RANGE_VALUES.includes(value as DateRangeValue);\n\nconst getRangeOptionLabel = (option: string, dateRangeLabels: Record<string, string> = DateRangeLabels) =>\n i18n.text(dateRangeLabels[option]);\n\nconst getDateRangeOptions = (\n dateRangeValues: string[] = Object.values(DateRangeValue),\n dateRangeLabels: Record<string, string> = DateRangeLabels\n) =>\n dateRangeValues.map((value) => {\n return {\n value,\n get label() {\n return getRangeOptionLabel(value, dateRangeLabels);\n }\n };\n });\n\ntype GetDateRangeByValue = (value: DatePeriod | [number, number]) => [number, number];\nconst getDateRangeByValue: GetDateRangeByValue = (value) => {\n const currentDate = moment().startOf('minute');\n switch (value) {\n case DateRangeValue.LAST_DAY:\n return [moment(currentDate).subtract(1, 'day').valueOf(), currentDate.valueOf()];\n case DateRangeValue.LAST_WEEK:\n return [moment(currentDate).subtract(1, 'week').valueOf(), currentDate.valueOf()];\n case DateRangeValue.LAST_MONTH:\n return [moment(currentDate).subtract(1, 'month').valueOf(), currentDate.valueOf()];\n case DateRangeValue.LAST_6MONTHS:\n return [moment(currentDate).subtract(6, 'months').valueOf(), currentDate.valueOf()];\n case DateRangeValue.LAST_YEAR:\n return [moment(currentDate).subtract(1, 'year').valueOf(), currentDate.valueOf()];\n case SearchDrivenDateRangeValues.LAST_3DAYS:\n return [moment(currentDate).subtract(3, 'day').valueOf(), currentDate.valueOf()];\n default:\n return value as [number, number];\n }\n};\n\nconst getDateInterval = ([start, end]: [Date, Date]) => [moment(start).valueOf(), moment(end).endOf('date').valueOf()];\n\nconst getDateRangeByDatePeriod = (period: DatePeriod, getDateRange: GetDateRangeByValue = getDateRangeByValue) => {\n return is(String, period) ? getDateRange(period) : getDateInterval(period as [Date, Date]);\n};\n\nexport {\n mapFilterValue,\n escapeQueryValue,\n filterValueToString,\n filterValueToQueryString,\n filterValueToQueryStringWithQuotes,\n getFilterValueLabel,\n wrapInQuotes,\n wrapInDoubleQuotes,\n multiValueFilter,\n getDataTypeDefinitionForFilterValue,\n isDateRangeValue,\n isOutdatedDateRangeValue,\n getRangeOptionLabel,\n getDateRangeByValue,\n getDateRangeOptions,\n getDateRangeByDatePeriod\n};\n","export enum GlobalContextValue {\n CurrentUser = 'currentUser'\n}\n\nconst globalContextValues: Partial<Record<GlobalContextValue, unknown>> = {};\n\nexport const setGlobalContextValue = (key: GlobalContextValue, value: unknown) => {\n globalContextValues[key] = value;\n};\n\nexport const getGlobalContextValue = (key: GlobalContextValue) => globalContextValues[key];\n","import {curry, flatten, isEmpty, join, map, pipe, prop, propEq, propSatisfies, T} from 'ramda';\n\nimport FilterBuilder from './FilterBuilder';\nimport FilterOptions from '../constants/filterOptions';\nimport {isTimestampBasedType} from '../metadata';\nimport {\n countOptionToRegularOption,\n getFilterOptionArity,\n isCountFilterOption,\n isDateFilterOption,\n isFileFilterOption,\n isRangeFilterOption\n} from './filterOptionsHelpers';\nimport {\n filterValueToQueryString,\n filterValueToQueryStringWithQuotes,\n filterValueToString,\n getDateRangeByValue\n} from './filterValueHelpers';\nimport {getEndOfDay, getStartOfDay} from '../utils/dates';\nimport {getGlobalContextValue, GlobalContextValue} from '../globalContextValue';\n\nconst COUNT_POSTFIX = '.count';\n\nconst replaceCurrentUserVariableToUsername = (query) =>\n query.split('{CurrentUser}').join(getGlobalContextValue(GlobalContextValue.CurrentUser) || '');\n\nconst joinFilterStrings = curry((joinString, filterStrings) =>\n filterStrings.length > 1 ? `(${filterStrings.join(joinString)})` : filterStrings.toString()\n);\n\nconst buildFilterClause = curry((filter, fieldName, values) => {\n const valuesString = values\n .map(\n isRangeFilterOption(filter) || fieldName.endsWith(COUNT_POSTFIX)\n ? filterValueToQueryString\n : filterValueToQueryStringWithQuotes\n )\n .join(',');\n return valuesString ? `${filter}(${fieldName},${valuesString})` : `${filter}(${fieldName})`;\n});\n\nconst getFilterValuesByArity = (arity) => (values) => {\n switch (arity) {\n case 0:\n return [[]];\n case 1:\n return values.map((value) => [value]);\n default:\n return values;\n }\n};\n\nconst buildBasicFilterString = ({filter, fieldName, values}) => {\n const filterArity = getFilterOptionArity(filter);\n return pipe(\n getFilterValuesByArity(filterArity),\n map(buildFilterClause(filter, fieldName)),\n joinFilterStrings(' or ')\n )(values);\n};\n\nconst buildTypeNotEqualsFilterString = ({filter, fieldName, values}) => {\n const filterArity = getFilterOptionArity(filter);\n return pipe(\n getFilterValuesByArity(filterArity),\n map(buildFilterClause(filter, fieldName)),\n joinFilterStrings(' and ')\n )(values);\n};\n\nconst buildComplexFilterString = ({filter, fieldName, values}) => {\n return `${filter}(${fieldName},${flatten(values).map(filterValueToQueryStringWithQuotes).join(',')})`;\n};\n\nconst buildHasAllFilterString = ({fieldName, values}) =>\n pipe(\n map((value) =>\n value\n .reduce(\n (filterBuilder, value) =>\n filterBuilder.addClause(\n buildBasicFilterString({\n filter: FilterOptions.EQUALS,\n fieldName,\n values: [value]\n })\n ),\n new FilterBuilder()\n )\n .build()\n ),\n joinFilterStrings(' or ')\n )(values);\n\nconst wrapInWildCards = (value) => `*${value}*`;\n\nconst addURLPrefix = (value) => `URL:${value}`;\n\nconst buildContainsFilterString = ({filter, fieldName, values}) =>\n buildBasicFilterString({\n fieldName,\n filter,\n values: values.map(pipe(filterValueToString, wrapInWildCards))\n });\n\nconst buildCountFilterString = ({filter, fieldName, values}) =>\n buildBasicFilterString({\n fieldName: `${fieldName}${COUNT_POSTFIX}`,\n values,\n filter: countOptionToRegularOption(filter)\n });\n\nconst isMultiValue = (values) => {\n return values.length > 1 || (Array.isArray(values[0]) && values[0].length > 1);\n};\n\nconst buildEqualsFilterString = (filter) => {\n const {fieldName, values} = filter;\n\n if (fieldName === 'type') {\n return buildBasicFilterString({...filter, values: flatten(values)});\n } else if (isMultiValue(values)) {\n return buildComplexFilterString({...filter, filter: 'listEquals'});\n } else {\n return buildBasicFilterString(filter);\n }\n};\n\nconst buildNotEqualsFilterString = (filter) => {\n const {values} = filter;\n\n if (filter.fieldName === 'type') {\n return buildTypeNotEqualsFilterString({...filter, values: flatten(filter.values)});\n } else if (isFilterForTimestampBasedAttribute(filter)) {\n return buildTimestampNotEqualsFilterString(filter);\n } else if (isMultiValue(values)) {\n return buildComplexFilterString({...filter, filter: 'not listEquals'});\n } else {\n return buildBasicFilterString(filter);\n }\n};\n\nconst getFileFilterString = (filter, fieldName) => {\n const filterString = fieldName === 'id' ? 'listEqualsCaseSensitive' : 'listEquals';\n return filter === FilterOptions.IN_FILE ? filterString : `not ${filterString}`;\n};\nconst buildFileFilterString = ({filter, fieldName, values}) =>\n buildBasicFilterString({\n fieldName,\n filter: getFileFilterString(filter, fieldName),\n values: values.map(prop('link')).map(addURLPrefix)\n });\n\nconst transformTimestampValue = (date, isUTC) => [getStartOfDay(date, isUTC), getEndOfDay(date, isUTC)];\n\nconst transformDateFilter = (filter) => {\n const {values, filter: filterOption} = filter;\n const isUTC = !isFilterForTimestampBasedAttribute(filter);\n\n if (!isEmpty(values)) {\n const [date] = values;\n switch (filterOption) {\n case FilterOptions.ON: {\n if (isUTC) {\n return {\n ...filter,\n filter: FilterOptions.EQUALS\n };\n } else {\n return {\n ...filter,\n filter: FilterOptions.IN_RANGE,\n values: [transformTimestampValue(date, isUTC)]\n };\n }\n }\n case FilterOptions.BEFORE:\n return {...filter, filter: FilterOptions.LTE, values: [[getEndOfDay(date, isUTC)]]};\n case FilterOptions.AFTER:\n return {...filter, filter: FilterOptions.GTE, values: [[getStartOfDay(date, isUTC)]]};\n case FilterOptions.WITHIN:\n return {...filter, filter: FilterOptions.IN_RANGE, values: [getDateRangeByValue(date)]};\n }\n }\n\n return filter;\n};\n\nconst buildTimestampNotEqualsFilterString = (filter) => {\n const {values} = filter;\n const isUTC = !isFilterForTimestampBasedAttribute(filter);\n const [date] = values;\n\n return new FilterBuilder()\n .addClause(\n buildBasicFilterString({\n ...filter,\n filter: FilterOptions.LT,\n values: [getStartOfDay(date, isUTC)]\n })\n )\n .addClause(\n buildBasicFilterString({\n ...filter,\n filter: FilterOptions.GT,\n values: [getEndOfDay(date, isUTC)]\n })\n )\n .orBuild();\n};\n\nconst buildDateFilterString = pipe(transformDateFilter, buildBasicFilterString);\n\nconst buildGeoPolygonFilterString = ({fieldName, values: [value]}) => {\n const preparedValue = pipe(\n map(([lng, ltd]) => `${lng},${ltd}`),\n join(';')\n )(value);\n return buildFilterClause(fieldName, preparedValue, []);\n};\n\nconst buildGeoLocationFilterString = ({fieldName, values: [[lng, ltd, radius]], filter}) => {\n const fieldNameWithValues = `${fieldName},'${lng},${ltd}',0,${radius}`;\n return buildFilterClause(filter, fieldNameWithValues, []);\n};\n\nconst isFilterForTimestampBasedAttribute = propSatisfies(isTimestampBasedType, 'type');\n\nconst BASIC_FILTER_BUILD_RULES = [\n [prop('rawFilter'), pipe(prop('rawFilter'), replaceCurrentUserVariableToUsername)],\n [propEq('filter', FilterOptions.HAS_ALL), pipe(buildHasAllFilterString, replaceCurrentUserVariableToUsername)],\n [propEq('filter', FilterOptions.CONTAINS), pipe(buildContainsFilterString, replaceCurrentUserVariableToUsername)],\n [propEq('filter', FilterOptions.EQUALS), pipe(buildEqualsFilterString, replaceCurrentUserVariableToUsername)],\n [\n propEq('filter', FilterOptions.NOT_EQUALS),\n pipe(buildNotEqualsFilterString, replaceCurrentUserVariableToUsername)\n ],\n [propSatisfies(isFileFilterOption, 'filter'), buildFileFilterString],\n [propSatisfies(isCountFilterOption, 'filter'), buildCountFilterString],\n [propSatisfies(isDateFilterOption, 'filter'), buildDateFilterString],\n [propEq('fieldName', 'geoPolygon'), buildGeoPolygonFilterString],\n [propEq('fieldName', 'geoLocation'), buildGeoLocationFilterString],\n [T, pipe(buildBasicFilterString, replaceCurrentUserVariableToUsername)]\n];\n\nexport {BASIC_FILTER_BUILD_RULES as default, buildBasicFilterString, buildComplexFilterString, joinFilterStrings};\n","import {isNil} from 'ramda';\nimport {FilterOptions} from '../constants';\nimport {checkIfOptionHasValues} from './filterOptionsHelpers';\nimport {filterValueToString, isDateRangeValue} from './filterValueHelpers';\n\nconst validateFilter = ({filter, fieldName, values, rawFilter} = {}) =>\n rawFilter || (filter && fieldName && (!checkIfOptionHasValues(filter) || validateFilterValues(filter, values)));\n\nconst validateFilterValue = (filter, value) => {\n if (Array.isArray(value)) return validateFilterValues(filter, value);\n if (filter === FilterOptions.WITHIN) return isDateRangeValue(value) || Number.isInteger(value);\n return !isNil(value) && filterValueToString(value).length > 0;\n};\n\nconst validateFilterValues = (filter, values) =>\n values && values.length > 0 && values.every((value) => validateFilterValue(filter, value));\n\nexport {validateFilter, validateFilterValue};\n","import BASIC_FILTER_BUILD_RULES from './basicFilterBuildRules';\nimport FilterBuilder, {DEFAULT_OPERATOR} from './FilterBuilder';\nimport {\n adjust,\n append,\n cond,\n filter,\n has,\n join,\n map,\n mergeDeepWithKey,\n pipe,\n prop,\n propEq,\n propOr,\n reduce,\n slice,\n split,\n splitAt,\n when\n} from 'ramda';\nimport {validateFilter} from './validation';\nimport {isCompositeFilterOption, isMultiValueOption, parseCompositeFilterOption} from './filterOptionsHelpers';\nimport {SearchFilter, SearchOperator} from '../types';\nimport {wrapQueryWithBrackets} from './bracketsUtils';\n\nconst specialAttributesRoots = ['relevanceScores'];\n\nconst getRootFieldName = ({fieldName = ''}) => {\n const fieldNamePath = fieldName.split('.');\n if (specialAttributesRoots.includes(fieldNamePath[0])) {\n return fieldNamePath[0];\n }\n const attrsIndex = fieldNamePath.indexOf('attributes');\n return attrsIndex >= 0 ? fieldNamePath.slice(0, attrsIndex + 2).join('.') : fieldName;\n};\n\nconst getParentFieldName = pipe(propOr('', 'fieldName'), split('.'), slice(0, -1), join('.'));\n\ntype FilterHierarchy = SearchFilter & {\n children: Array<FilterHierarchy>;\n};\nconst buildFilterHierarchy = (filter: SearchFilter): FilterHierarchy => {\n const rootFieldName = getRootFieldName(filter);\n const addParent = (filterHierarchy) =>\n filterHierarchy.fieldName === rootFieldName\n ? filterHierarchy\n : addParent({fieldName: getParentFieldName(filterHierarchy), children: [filterHierarchy]});\n\n return addParent(filter);\n};\n\nconst mergeChildren = (key: string, left: Array<FilterHierarchy>, right: Array<FilterHierarchy>) =>\n key === 'children' ? mergeFilterHierarchyToList(right, [...left][0], true) : right;\nconst mergeValues = (key: string, left: Array<FilterHierarchy>, right: Array<FilterHierarchy>) =>\n key === 'values' ? [...right, ...left] : right;\n\nconst mergeFilterHierarchyToList = (filterHierarchyList, filterHierarchy, isChildList = false) => {\n const filterHierarchyIndex = filterHierarchyList.findIndex(propEq('fieldName', filterHierarchy.fieldName));\n\n if (filterHierarchyIndex >= 0) {\n const existingFilterHierarchy = filterHierarchyList[filterHierarchyIndex];\n if ('children' in existingFilterHierarchy && 'children' in filterHierarchy) {\n return adjust(filterHierarchyIndex, mergeDeepWithKey(mergeChildren, filterHierarchy), filterHierarchyList);\n } else if (\n !isChildList &&\n isMultiValueOption(filterHierarchy.filter) &&\n filterHierarchy.filter === existingFilterHierarchy.filter\n ) {\n return adjust(filterHierarchyIndex, mergeDeepWithKey(mergeValues, filterHierarchy), filterHierarchyList);\n }\n }\n return append(filterHierarchy, filterHierarchyList);\n};\n\nconst buildFilterHierarchyList = reduce((filterHierarchyList, filter) => {\n const filterHierarchy = buildFilterHierarchy(filter);\n return mergeFilterHierarchyToList(filterHierarchyList, filterHierarchy);\n}, []);\n\nconst canWrapInSameAttribute = (children) => {\n return (\n children &&\n children.length > 1 &&\n !children.some(({fieldName}) => fieldName?.startsWith('parent.')) &&\n !children.every(has('rawFilter'))\n );\n};\n\nconst getFirstOperatorFromHierarchy = ([filterHierarchy]: FilterHierarchy[]): SearchOperator => {\n return filterHierarchy.children\n ? getFirstOperatorFromHierarchy(filterHierarchy.children)\n : filterHierarchy.operator;\n};\n\nconst buildQueryStringByRules = (buildRules, disableInSameAttributeValue = false) => {\n function buildQueryStringForInSameAttributeValue(filterHierarchy: FilterHierarchy): string {\n const [firstFilter, otherFilters] = splitAt(1, filterHierarchy);\n const needFixNotOperator = getFirstOperatorFromHierarchy(firstFilter) === SearchOperator.andNot;\n const firstFilterClause = buildQueryString(firstFilter, false);\n const fixedFirstClause = needFixNotOperator\n ? `not ${wrapQueryWithBrackets(firstFilterClause)}`\n : firstFilterClause;\n const otherFiltersClause = buildQueryString(otherFilters, false);\n return `inSameAttributeValue(${fixedFirstClause} ${\n getFirstOperatorFromHierarchy(otherFilters) || DEFAULT_OPERATOR\n } ${otherFiltersClause})`;\n }\n\n function buildQueryString(filterHierarchyList, isRootLevel = true): string {\n return filterHierarchyList\n .reduce(\n (filterBuilder, filterHierarchy) =>\n filterBuilder.addClause(\n cond([\n [\n has('children'),\n ({children}) =>\n isRootLevel && canWrapInSameAttribute(children) && !disableInSameAttributeValue\n ? buildQueryStringForInSameAttributeValue(children)\n : buildQueryString(children, isRootLevel)\n ],\n ...buildRules\n ])(filterHierarchy)\n ),\n new FilterBuilder()\n )\n .buildWithOperators(filterHierarchyList.map(prop('operator')));\n }\n return buildQueryString;\n};\n\nconst isCompositeFilter = pipe(propOr('', 'filter'), isCompositeFilterOption);\n\nconst parseCompositeFilter = (filter: SearchFilter) => {\n const [prefix, option] = parseCompositeFilterOption(filter.filter);\n return {\n ...filter,\n fieldName: `${filter.fieldName}.${prefix}`,\n filter: option\n };\n};\n\nconst parseCompositeFilters = map(when(isCompositeFilter, parseCompositeFilter));\n\nconst buildFilterQueryString = (\n extraBuildRules = [],\n disableInSameAttributeValue = false\n): ReturnType<typeof buildQueryStringByRules> =>\n pipe(\n filter(validateFilter),\n parseCompositeFilters,\n buildFilterHierarchyList,\n buildQueryStringByRules([...extraBuildRules, ...BASIC_FILTER_BUILD_RULES], disableInSameAttributeValue)\n );\n\nexport {\n buildFilterQueryString as default,\n buildFilterHierarchyList,\n getRootFieldName,\n canWrapInSameAttribute,\n parseCompositeFilters\n};\n","import {curry} from 'ramda';\n\nexport const addGlobalFilterToQuery = curry((globalFilter, query) => {\n if (globalFilter) {\n query = query ? `(${query}) and (${globalFilter})` : globalFilter;\n }\n return query;\n});\n","import {\n ActivenessAttrTypes,\n AuditAttrTypes,\n CollaborationAttrTypes,\n CrosswalksAttrTypes,\n FilterOptions,\n PotentialMatchesAttrTypes,\n WorkflowAttrTypes\n} from '../constants';\nimport {getAttrDataTypeDefinition} from '../metadata';\nimport getFilterOptionsForDataTypeDefinition from './getFilterOptionsForDataTypeDefinition';\nimport {__, filter, includes, pipe} from 'ramda';\n\nconst dateOptions = [\n FilterOptions.ON,\n FilterOptions.BEFORE,\n FilterOptions.AFTER,\n FilterOptions.WITHIN,\n FilterOptions.NOT_EQUALS,\n FilterOptions.MISSING_VALUE,\n FilterOptions.EXISTS\n];\nconst stringOptions = [\n FilterOptions.EQUALS,\n FilterOptions.NOT_EQUALS,\n FilterOptions.STARTS_WITH,\n FilterOptions.MISSING_VALUE,\n FilterOptions.HAS_ALL,\n FilterOptions.FULL_TEXT,\n FilterOptions.EXISTS\n];\nconst numberOptions = [\n FilterOptions.EQUALS,\n FilterOptions.NOT_EQUALS,\n FilterOptions.LT,\n FilterOptions.LTE,\n FilterOptions.GT,\n FilterOptions.GTE,\n FilterOptions.IN_RANGE\n];\n\n// prettier-ignore\nconst fieldNameToFilterOptions = (fieldName) => { // NOSONAR\n switch (fieldName) {\n case ActivenessAttrTypes.startDate.name:\n case ActivenessAttrTypes.endDate.name:\n case WorkflowAttrTypes.dueDate.name:\n case AuditAttrTypes.createdTime.name:\n case AuditAttrTypes.updatedTime.name:\n case CrosswalksAttrTypes.reltioLoadDate.name:\n case CrosswalksAttrTypes.createDate.name:\n case CrosswalksAttrTypes.updateDate.name:\n case CrosswalksAttrTypes.deleteDate.name:\n case CrosswalksAttrTypes.publishDate.name:\n return dateOptions;\n case PotentialMatchesAttrTypes.matches.name:\n case CrosswalksAttrTypes.count.name:\n return numberOptions;\n case WorkflowAttrTypes.workflow.name:\n case WorkflowAttrTypes.assignee.name:\n case WorkflowAttrTypes.step.name:\n case CollaborationAttrTypes.commenter.name:\n case AuditAttrTypes.createdBy.name:\n case AuditAttrTypes.updatedBy.name:\n case CrosswalksAttrTypes.sourceSystems.name:\n case CrosswalksAttrTypes.value.name:\n return stringOptions;\n default:\n return null;\n }\n};\n\nexport const getFilterOptionsForQueryBuilder = (attrType, fieldName) => {\n const dataTypeDefinition = getAttrDataTypeDefinition(attrType);\n return fieldNameToFilterOptions(fieldName) || getFilterOptionsForDataTypeDefinition(dataTypeDefinition);\n};\nconst availableRelationshipFilters = [\n FilterOptions.EQUALS,\n FilterOptions.NOT_EQUALS,\n FilterOptions.CONTAINS,\n FilterOptions.STARTS_WITH,\n FilterOptions.MISSING_VALUE,\n FilterOptions.HAS_ALL,\n FilterOptions.IN_RANGE,\n FilterOptions.WITHIN,\n FilterOptions.EXISTS,\n FilterOptions.ON\n];\n\nexport const getFilterOptionsForRelationshipQueryBuilder = pipe(\n getFilterOptionsForQueryBuilder,\n filter(includes(__, availableRelationshipFilters))\n);\n","import {NO_LABEL} from '../constants';\nimport {isOv} from '../attributes/general';\nimport i18n from 'ui-i18n';\nimport {\n AttributeType,\n AttributeValue,\n ComplexAttributeValue,\n Entity,\n Metadata,\n PrimitiveValue,\n RecordAttributesType\n} from '../types';\n\nconst processLabel = (attributesValues: RecordAttributesType, attributes: string[]) => {\n return attributes.map((attributeName) => {\n let label: string;\n const names = attributeName.split('.');\n const name = names.shift();\n\n const attr = ((attributesValues[name] || []) as AttributeValue[]).filter(isOv);\n if (attr && attr[0]) {\n if (names.length > 0 && attr[0].value) {\n label = processLabel(attr[0].value as RecordAttributesType, [names.join('.')])[0].value;\n } else {\n if ('label' in attr[0] && typeof attr[0].label === 'string') {\n label = attr[0].label;\n } else if (Object.prototype.hasOwnProperty.call(attr[0], 'label')) {\n label = '';\n } else {\n label = (attr[0].value as string) ?? '';\n }\n }\n }\n return {key: attributeName, value: label};\n }, '');\n};\n\ntype LabelSource = ComplexAttributeValue & Entity;\nexport const evaluateDeepEntityLabel = (entity: Partial<LabelSource>, labelPattern: string) => {\n const re = new RegExp('{[^}]*}', 'g');\n let arr = [];\n let temp;\n while ((temp = re.exec(labelPattern)) != null) arr.push(temp[0]);\n arr = arr.map(function (item) {\n return item.substring(1, item.length - 1);\n });\n\n const values = processLabel(entity.attributes || entity.value, arr);\n const empty = values.every(function (value) {\n return typeof value.value == 'undefined';\n });\n\n let label: string;\n if (empty) {\n label = '';\n } else {\n label = labelPattern;\n label = label.replace(/\\[[^\\]]*]/g, (a) => {\n const m = a.match(/\\{[^}]*}/g);\n if (m) {\n //Check if at least one sub-attribute is absent\n const check = m.some(function (b) {\n b = b.substring(1, b.length - 1).trim();\n return values.some(function (obj) {\n return obj.key === b && obj.value === undefined;\n });\n });\n if (check) {\n return '';\n }\n return a.substring(1, a.length - 1);\n }\n return a;\n });\n values.forEach((obj) => {\n label = label.replace('{' + obj.key + '}', obj.value ?? '');\n });\n }\n\n return label;\n};\n\nconst removeCommaRegExp = /[,\\s]*$/;\n\nexport const getLabel = (label?: string) => {\n const noLabelLocalized = i18n.text(NO_LABEL);\n if (!label) {\n return noLabelLocalized;\n }\n const labelWithoutComma = label.replace(removeCommaRegExp, '');\n return labelWithoutComma.toString().trim() === '' ? noLabelLocalized : labelWithoutComma;\n};\n\nexport const findLabelPattern = ({entityTypes}: Metadata, entityTypeUri: string) => {\n const entityType = entityTypes.find(({uri}) => uri.endsWith(entityTypeUri));\n return entityType && entityType.dataLabelPattern;\n};\n\nexport const evaluateAttributeLabel = (\n metadata: Metadata,\n attrValue: AttributeValue | PrimitiveValue,\n attrType: AttributeType\n) => {\n if (typeof attrValue === 'string') {\n return attrValue;\n }\n\n if (attrType.type !== 'Reference' && attrType.type !== 'Nested' && attrType.type !== 'Image') {\n return '';\n }\n\n if (attrType.type === 'Reference') {\n const labelPattern = findLabelPattern(metadata, attrType.referencedEntityTypeURI);\n if (labelPattern) {\n return evaluateDeepEntityLabel(\n {\n attributes: attrValue || {}\n } as Entity,\n labelPattern\n );\n }\n } else if (attrType.type === 'Nested' || attrType.type === 'Image') {\n if (attrType.dataLabelPattern) {\n return evaluateDeepEntityLabel(\n {\n attributes: attrValue || {}\n } as Entity,\n attrType.dataLabelPattern\n );\n }\n }\n return '';\n};\n","type GenerateEntityUrlArgs = {\n uiPath: string;\n uri: string;\n};\n\nexport const generateEntityUrlForOldMode = ({uiPath, uri}: GenerateEntityUrlArgs) => {\n return `${uiPath}#p~com.reltio.plugins.entity.default.DefaultPerspective_e~${uri}`;\n};\n\ntype GeneratePivotingUrlArgs = {\n uiPath: string;\n value: string;\n uri: string;\n};\n\nexport const generatePivotingUrlForOldMode = ({uiPath, value, uri}: GeneratePivotingUrlArgs) =>\n `${uiPath}#p~com.reltio.plugins.pivoting.default.DefaultPivotingPerspective_ps~pivoting_a~${encodeURIComponent(\n uri\n )}_v~${encodeURIComponent(value)}`;\n\ntype GenerateTagUrlArgs = {\n uiPath: string;\n tag: string;\n entityUri: string;\n};\n\nexport const generateTagUrlForOldMode = ({uiPath, tag, entityUri}: GenerateTagUrlArgs) =>\n `${uiPath}#p~com.reltio.plugins.tags.TagPerspective_e~${encodeURIComponent(entityUri)}_tag~${encodeURIComponent(\n tag\n )}`;\n","import {defaultTo, head, identity, ifElse, isNil, is, map, pipe, prop, reject, uniq, when, curry} from 'ramda';\n\nimport {getEntityType, getEntityTypeImage} from '../metadata';\nimport {findAttributeValueByUri, findAttributeValuesByTypeUri, getImageAttributeOvThumbnailUrl} from '../attributes';\nimport {AttributeValue, CurriedFunction2, Entity, Metadata, TEntityType} from '../types';\n\nexport const getAbsoluteImageUrl: CurriedFunction2<string, string, string> = curry((storagePath, imagePath) => {\n if (!imagePath) {\n return '';\n }\n\n if (imagePath.startsWith('http:') || imagePath.startsWith('https:')) {\n return imagePath;\n }\n\n return storagePath + '/' + imagePath.replace(/^\\/+/, '');\n});\n\nconst getImageAttrValue = (attributeValue: AttributeValue): string =>\n when(\n is(Object),\n ifElse(pipe(prop('value'), is(Object)), getImageAttributeOvThumbnailUrl, prop('value'))\n )(attributeValue);\n\nconst getDefaultProfilePicValue = (entity: Entity): string =>\n pipe(prop('defaultProfilePicValue'), getImageAttrValue)(entity);\n\nconst getDefaultProfilePic = (entity: Entity): string =>\n pipe(prop('defaultProfilePic'), when(identity, pipe(findAttributeValueByUri(entity), getImageAttrValue)))(entity);\n\nconst getPossibleImagesAttributeTypeUris = (entityType: TEntityType): string[] => {\n entityType = entityType || ({} as TEntityType);\n const getAttributeTypeUriByName = (name: string) => `${entityType.uri}/attributes/${name}`;\n const imageAttributeURIs = entityType.imageAttributeURIs || [];\n return uniq([\n getAttributeTypeUriByName('ImageGallery'),\n ...imageAttributeURIs,\n getAttributeTypeUriByName('Image'),\n getAttributeTypeUriByName('ImageLinks')\n ]);\n};\n\nconst getEntityTypeImagesAttributes = (metadata: Metadata, entity: Entity): string => {\n const imagesAttrTypeUris = getPossibleImagesAttributeTypeUris(getEntityType(metadata, entity.type));\n return pipe(\n map(pipe((attrTypeUri) => findAttributeValuesByTypeUri(metadata, entity, attrTypeUri), defaultTo([]), head)),\n reject(isNil),\n head,\n when(identity, getImageAttrValue)\n )(imagesAttrTypeUris);\n};\n\nexport const getEntityImage = (metadata: Metadata, storagePath: string, entity: Entity): string => {\n const entityImage =\n getDefaultProfilePicValue(entity) ||\n getDefaultProfilePic(entity) ||\n getEntityTypeImagesAttributes(metadata, entity) ||\n getEntityTypeImage(metadata, entity.type);\n return getAbsoluteImageUrl(storagePath, entityImage);\n};\n","import {\n all,\n always,\n curry,\n evolve,\n identity,\n join,\n map,\n nth,\n pipe,\n prop,\n props,\n propOr,\n replace,\n split,\n startsWith,\n ifElse\n} from 'ramda';\nimport {evaluateAttributeLabel} from './label';\nimport {getEntityType} from '../metadata';\nimport {cleanAttributes, isOv} from '../attributes';\nimport {isEmptyValue} from '../utils';\nimport {\n AttributeValue,\n CurriedFunction2,\n Entity,\n HistoryDiff,\n HistorySlice,\n MatchRule,\n Metadata,\n ReferenceAttributeValue,\n SimpleAttributeValue,\n TEntityType\n} from '../types';\n\nconst DTSS_PREFIX = 'DTSS/';\nconst ENTITIES_PREFIX = 'entities/';\n\nconst stripEntityUri = (entityUri: string): string => replace(new RegExp(`^${ENTITIES_PREFIX}`), '', entityUri);\n\nexport const getDataTenantEntityUri = (entity: Pick<Entity, 'uri' | 'dataTenant'>): string =>\n DTSS_PREFIX + entity.dataTenant + '/' + entity.uri;\nexport const removeDtssPrefixFromEntityUri = (entityUri: string): string =>\n replace(new RegExp(`^${DTSS_PREFIX}.+?/`), '', entityUri);\n\nexport const isDataTenantEntity = (entity?: Pick<Entity, 'dataTenant'>) => !!(entity && entity.dataTenant);\n\nexport const isDataTenantEntityUri = (uri: string): boolean => startsWith(DTSS_PREFIX, uri);\n\nexport const getDataTenantFromEntityUri = (uri: string): string =>\n pipe(ifElse(isDataTenantEntityUri, pipe(split('/'), nth(1)), always(null)))(uri);\n\nexport const getEntityUriForLink = (entity: Pick<Entity, 'dataTenant' | 'uri'>): string =>\n ifElse(isDataTenantEntity, getDataTenantEntityUri, prop('uri'))(entity);\n\nexport const getEntityId = (entity: Pick<Entity, 'uri' | 'dataTenant'>) => {\n if (entity && entity.uri) {\n return entity.dataTenant ? getDataTenantEntityUri(entity) : stripEntityUri(entity.uri);\n }\n return '';\n};\n\nconst getEntityTypeProperty = <Key extends keyof TEntityType>(\n prop: Key\n): CurriedFunction2<Metadata, Pick<Entity, 'type'>, TEntityType[Key]> =>\n curry((metadata, entity) => {\n const entityType = getEntityType(metadata, entity.type) || ({} as TEntityType);\n return entityType[prop] || '';\n });\n\nexport const getEntityTypeLabel = getEntityTypeProperty('label');\nexport const getEntityTypeGraphIcon = getEntityTypeProperty('typeGraphIcon');\n\nexport const getBusinessCardAttributes = (metadata: Metadata, entity: Entity = {} as Entity) => {\n const entityType = getEntityType(metadata, entity.type) || ({} as TEntityType);\n\n const attrTypes = (entityType.attributes || []).reduce((result, attrType) => {\n result[attrType.uri] = attrType;\n result[attrType.name] = attrType;\n return result;\n }, {});\n\n if (entity.attributes && entityType.businessCardAttributeURIs) {\n return entityType.businessCardAttributeURIs\n .map((attrUri) => {\n const attrType = attrTypes[attrUri];\n if (!attrType) {\n return null;\n }\n const attr = entity.attributes[attrType.name];\n if (!attr) {\n return null;\n }\n const firstOV = (Array.isArray(attr) ? attr.find(isOv) || '' : attr) as AttributeValue;\n const referenceValue = firstOV as ReferenceAttributeValue;\n const simpleValue = firstOV as SimpleAttributeValue;\n const valueOrLabel =\n referenceValue.label != null\n ? (referenceValue.relationshipLabel ? referenceValue.relationshipLabel + ', ' : '') +\n referenceValue.label\n : simpleValue.value;\n\n return {\n text: evaluateAttributeLabel(metadata, valueOrLabel, attrType),\n uri: firstOV.uri\n };\n })\n .filter(identity);\n }\n return [];\n};\n\nexport const getBusinessCardAttributesText = (metadata: Metadata, entity: Entity): string =>\n pipe(getBusinessCardAttributes, map(prop('text')), join(', '))(metadata, entity);\n\nexport const isEntityImportedToCT = (entity?: Entity) =>\n !!entity && !!entity.ctSubscribedUris && entity.ctSubscribedUris.length > 0;\n\nexport const getEntityMatchRules = (entity?: Entity): MatchRule[] => propOr([], 'matchRules', entity);\n\nexport const getProfileEntityWithHistoryDiff = (\n entity: Entity,\n isViewMode: boolean,\n historySlice: HistorySlice,\n diff: HistoryDiff\n) => {\n return isViewMode && historySlice\n ? {\n ...historySlice.aEntity,\n attributes: diff?.attributes ?? {},\n roles: diff?.roles ?? [],\n tags: diff?.tags ?? []\n }\n : entity;\n};\n\nexport const getProfileEntityWithoutHistoryDiff = (entity: Entity, isViewMode: boolean, historySlice: HistorySlice) => {\n return isViewMode && historySlice ? historySlice.aEntity : entity;\n};\n\nexport const cleanEntityAttributes = (entity: Entity): Entity =>\n evolve({\n attributes: cleanAttributes(true)\n })(entity);\n\nexport const isEmptyEntity = pipe(\n cleanEntityAttributes,\n props(['attributes', 'startDate', 'endDate', 'roles', 'tags']),\n all(isEmptyValue)\n);\n\nexport const enrichEntityWithDataTenant: CurriedFunction2<string, Entity, Entity> = curry(\n (dataTenantId: string, entity: Entity) =>\n entity ? {...entity, dataTenant: dataTenantId} : {dataTenant: dataTenantId}\n);\n","import {\n applySpec,\n evolve,\n fromPairs,\n identity,\n isNil,\n keys,\n map,\n pipe,\n prop,\n propEq,\n propSatisfies,\n split,\n toPairs,\n unless,\n when\n} from 'ramda';\nimport {generateQuery} from '../network/api/utils';\nimport {\n AttributeValue,\n ChangeRequest,\n DCRAttributeValue,\n DCREntityInfo,\n DCREntityObject,\n DCRTypes,\n SimpleAttributeValue\n} from '../types';\nimport {isObject} from '../utils';\nimport {generateTempDCRUri, getLastUriPart} from '../uris';\n\ntype DCRInfoContainer = {\n dcrObjectUris: string[];\n dcrUri: string;\n};\ntype Response = {\n uri: string;\n};\ntype UpdateDCRUriFromResponse = (response: Response) => void;\ntype EnhanceUriWithDCR = (uri: string) => string;\ntype GetDCRObjectUris = () => DCRInfoContainer['dcrObjectUris'];\ntype GetDCRUri = () => DCRInfoContainer['dcrUri'];\ntype GetDcrUriAwait = () => Promise<void>;\nexport type DCRProcessor = {\n updateDCRUriFromResponse: UpdateDCRUriFromResponse;\n enhanceUriWithDCR: EnhanceUriWithDCR;\n getDCRObjectUris: GetDCRObjectUris;\n getDCRUri: GetDCRUri;\n getDcrUriAwait: GetDcrUriAwait;\n};\n\ntype CreateDCRProcessor = (_: {alwaysCreateDCR?: boolean; dcrUri?: string}) => DCRProcessor;\nexport const createDCRProcessor: CreateDCRProcessor = (\n {alwaysCreateDCR = false, dcrUri = null} = {alwaysCreateDCR: false, dcrUri: null}\n) => {\n const dcrInfoContainer: DCRInfoContainer = {\n dcrObjectUris: [],\n dcrUri\n };\n const hasChangeRequest: (str: string) => boolean = (str) => str && str.includes('changeRequest');\n const isChangeRequest: boolean = propSatisfies(hasChangeRequest, 'uri');\n const getDCRUris: (response: Response) => string[] = pipe(prop('changes'), keys);\n\n const getDCRUriFromResponse: (response: Response) => DCRInfoContainer = when(\n isChangeRequest,\n applySpec({\n dcrObjectUris: getDCRUris,\n dcrUri: prop('uri')\n })\n );\n\n const updateDCRUri: (_: DCRInfoContainer) => void = ({dcrObjectUris, dcrUri}) => {\n dcrInfoContainer.dcrObjectUris = dcrInfoContainer.dcrObjectUris.concat(dcrObjectUris);\n dcrInfoContainer.dcrUri = dcrInfoContainer.dcrUri || dcrUri;\n };\n\n const updateDCRUriFromResponse: UpdateDCRUriFromResponse = pipe(getDCRUriFromResponse, updateDCRUri, () =>\n resolveDcrUriAwait()\n );\n const getDcr: (_: DCRInfoContainer) => string = pipe(prop('dcrUri'), unless(isNil, pipe(split('/'), prop(1))));\n\n const append: (uri: string, parameter: Record<string, string | boolean>) => string = (uri, parameter) => {\n uri += uri.includes('?') ? '&' : '?';\n return uri + generateQuery(parameter);\n };\n const enhanceUriWithDCR = (uri) => {\n const dcrUri = getDcr(dcrInfoContainer);\n if (dcrUri) {\n return append(uri, {changeRequestId: dcrUri});\n } else if (alwaysCreateDCR) {\n return append(uri, {alwaysCreateDCR: true});\n } else {\n return uri;\n }\n };\n\n const getDCRObjectUris: GetDCRObjectUris = () => dcrInfoContainer.dcrObjectUris;\n const getDCRUri: GetDCRUri = () => dcrInfoContainer.dcrUri;\n\n let dcrUriAwait: Promise<void>;\n let resolveDcrUriAwait = identity;\n const getDcrUriAwait = () => {\n if (alwaysCreateDCR && !getDCRUri() && !dcrUriAwait) {\n dcrUriAwait = new Promise((resolve) => {\n resolveDcrUriAwait = resolve;\n });\n return Promise.resolve();\n }\n return dcrUriAwait || Promise.resolve();\n };\n\n return {\n updateDCRUriFromResponse,\n enhanceUriWithDCR,\n getDCRObjectUris,\n getDCRUri,\n getDcrUriAwait\n };\n};\n\ntype AttributePair = [string, DCRAttributeValue];\n\nconst isSimpleValue = (attribute): attribute is SimpleAttributeValue => {\n return !isObject(attribute.value);\n};\n\nexport const enhanceDCREntitiesFromResponse = (response: ChangeRequest) => {\n const enhanceValue =\n (attributeTypeUri: string, path: string) =>\n (attribute: DCRAttributeValue): AttributeValue => {\n if (!isSimpleValue(attribute)) {\n const nestedUri = `${path}/${\n attribute.refEntity?.objectURI\n ? getLastUriPart(attribute.refEntity.objectURI)\n : generateTempDCRUri()\n }`;\n let label;\n const objectInfo = response.objectsInfo[attribute.refEntity?.objectURI];\n if (objectInfo) {\n label = (objectInfo as DCREntityInfo).label;\n if (!objectInfo.isExist) {\n attribute.refEntity.objectURI = `${response.uri}/changes/${attribute.refEntity.objectURI}`;\n }\n }\n return {\n ...attribute,\n label,\n uri: nestedUri,\n value: fromPairs(map(enhanceAttribute(attributeTypeUri, nestedUri), toPairs(attribute.value)))\n };\n }\n\n return {\n ...attribute,\n uri: `${path}/${generateTempDCRUri()}`\n };\n };\n const enhanceAttribute =\n (parentAttributeType: string, path: string) =>\n ([fieldName, attribute]: AttributePair): AttributePair => {\n return [\n fieldName,\n map(enhanceValue(`${parentAttributeType}/attributes/${fieldName}`, `${path}/${fieldName}`), attribute)\n ];\n };\n const enhanceChangeValue = (newValue: DCREntityObject) => {\n const {uri, type} = newValue;\n return evolve(\n {\n attributes: pipe(toPairs, map(enhanceAttribute(type, `${uri}/attributes`)), fromPairs)\n },\n newValue\n );\n };\n\n return evolve(\n {\n changes: map(map(when(propEq('type', DCRTypes.CREATE_ENTITY), evolve({newValue: enhanceChangeValue}))))\n },\n response\n );\n};\n","import {assoc, isEmpty, pathOr} from 'ramda';\nimport {CreateRelationResponse} from '../types';\n\nexport const createRelationUriProcessor = () => {\n const infoContainer: {\n newUriMap: Record<string, string>;\n } = {\n newUriMap: {}\n };\n\n const getUri = (uri: string): string => pathOr(uri, ['newUriMap', uri], infoContainer);\n const setNewUri = (oldUri: string, newUri: string) => {\n infoContainer.newUriMap = assoc(oldUri, newUri, infoContainer.newUriMap);\n };\n const addUriFromCreateRequest = (oldUri: string) => (response: CreateRelationResponse) => {\n if (response?.[0]?.successful) {\n setNewUri(oldUri, response[0].object.uri);\n }\n return response;\n };\n\n const hasNewUri = () => {\n return !isEmpty(infoContainer.newUriMap);\n };\n\n return {\n getUri,\n addUriFromCreateRequest,\n hasNewUri\n };\n};\n","import {\n always,\n cond,\n count,\n curry,\n equals,\n evolve,\n F,\n filter,\n flatten,\n has,\n last,\n map,\n pathEq,\n pipe,\n reduce,\n T,\n uniq\n} from 'ramda';\nimport {createRelation, ignoreSuggestedRelation, removeRelation, updateRelation} from '../network/api';\nimport {Command, Operations, Relation, RelationUriProcessor} from '../types';\nimport {DCRProcessor, createDCRProcessor} from '../entity/dcrRequests';\nimport {replaceUriWhenTemporary} from '../entity/temporary';\nimport {createRelationUriProcessor} from './relationUriProcessor';\nimport {Directions} from '../constants';\n\ntype CreateRelationCreateCommand = {\n type: Operations.CREATE_RELATION;\n parameters: {\n parentUri: string;\n relation: Relation;\n entityUri: string;\n };\n};\n\ntype CreateRelationDeleteCommand = {\n type: Operations.DELETE_RELATION;\n parameters: {\n relationUri: string;\n };\n};\n\ntype CreateRelationIgnoreCommand = {\n type: Operations.IGNORE_RELATION;\n parameters: {\n parentUri: string;\n entityUri: string;\n relationType: string;\n relationDirection: Directions;\n };\n};\n\ntype CreateRelationUpdateCommand = {\n type: Operations.UPDATE_RELATION;\n parameters: {\n oldRelation: Relation;\n newRelation: Relation;\n };\n};\n\ntype CreateRelationRepointCommand = {\n type: Operations.REPOINT_RELATION;\n parameters: {\n entityUri: string;\n newEntityUri: string;\n relation: Relation;\n isReversed: boolean;\n };\n};\n\ntype CreateExecutableCommand = {\n type: Operations;\n parameters:\n | CreateRelationCreateCommand['parameters']\n | CreateRelationDeleteCommand['parameters']\n | CreateRelationUpdateCommand['parameters']\n | CreateRelationIgnoreCommand['parameters']\n | CreateRelationRepointCommand['parameters'];\n dcrProcessor: DCRProcessor;\n relationUriProcessor: RelationUriProcessor;\n};\n\nexport const createRelationCreateCommand = ({\n parentUri,\n relation,\n entityUri\n}: CreateRelationCreateCommand['parameters']): CreateRelationCreateCommand => ({\n type: Operations.CREATE_RELATION,\n parameters: {\n parentUri,\n relation,\n entityUri\n }\n});\n\nexport const createRelationDeleteCommand = ({\n relationUri\n}: CreateRelationDeleteCommand['parameters']): CreateRelationDeleteCommand => ({\n type: Operations.DELETE_RELATION,\n parameters: {\n relationUri\n }\n});\n\nexport const createRelationIgnoreCommand = ({\n parentUri,\n entityUri,\n relationType,\n relationDirection\n}: CreateRelationIgnoreCommand['parameters']): CreateRelationIgnoreCommand => ({\n type: Operations.IGNORE_RELATION,\n parameters: {\n parentUri,\n entityUri,\n relationType,\n relationDirection\n }\n});\n\nexport const createRelationUpdateCommand = ({\n oldRelation,\n newRelation\n}: CreateRelationUpdateCommand['parameters']): CreateRelationUpdateCommand => ({\n type: Operations.UPDATE_RELATION,\n parameters: {\n oldRelation,\n newRelation\n }\n});\n\nexport const createRelationRepointCommand = ({\n entityUri,\n newEntityUri,\n relation,\n isReversed\n}: CreateRelationRepointCommand['parameters']): CreateRelationRepointCommand => ({\n type: Operations.REPOINT_RELATION,\n parameters: {\n entityUri,\n newEntityUri,\n relation,\n isReversed\n }\n});\n\nexport const isRelationCommandForUri = curry((relationUri: string, command: Command): boolean =>\n cond([\n [pathEq(['parameters', 'relation', 'uri'], relationUri), T],\n [pathEq(['parameters', 'relationUri'], relationUri), T],\n [pathEq(['parameters', 'oldRelation', 'uri'], relationUri), T],\n [pathEq(['parameters', 'newRelation', 'uri'], relationUri), T],\n [T, F]\n ])(command)\n);\n\nconst isRelationDeleteCommand = (command: Command): command is CreateRelationDeleteCommand =>\n command.type === Operations.DELETE_RELATION;\nconst isRelationCreateCommand = (command: Command): command is CreateRelationCreateCommand =>\n command.type === Operations.CREATE_RELATION;\nconst isRelationRepointCommand = (command: Command): command is CreateRelationRepointCommand =>\n command.type === Operations.REPOINT_RELATION;\nconst isRelationUpdateCommand = (command: Command): command is CreateRelationUpdateCommand =>\n command.type === Operations.UPDATE_RELATION;\n\nconst runPromisesSequentially = async (fns: Array<() => Promise<unknown>>): Promise<unknown> => {\n const responses = [];\n for (const fn of fns) {\n const response = await fn();\n\n responses.push(response);\n\n const errorResponse = Array.isArray(response) && response.find(has('errors'));\n if (errorResponse) {\n throw errorResponse.errors;\n }\n }\n return responses.flat();\n};\n\nconst createExecutableCommand = ({type, parameters, dcrProcessor, relationUriProcessor}: CreateExecutableCommand) => {\n const {enhanceUriWithDCR: uriPreprocessor, updateDCRUriFromResponse} = dcrProcessor;\n const responseHandler = (response) => {\n updateDCRUriFromResponse(response);\n return response;\n };\n switch (type) {\n case Operations.CREATE_RELATION:\n return () => {\n const {parentUri, relation, entityUri} = parameters as CreateRelationCreateCommand['parameters'];\n const {type: relationType, attributes, startDate, endDate} = relation;\n return createRelation({\n startEntityUri: parentUri,\n endEntityUri: entityUri,\n relationType,\n attributes,\n startDate,\n endDate,\n uriPreprocessor\n })\n .then(responseHandler)\n .then(relationUriProcessor.addUriFromCreateRequest(relation.uri));\n };\n case Operations.DELETE_RELATION:\n return () => {\n const {relationUri} = parameters as CreateRelationDeleteCommand['parameters'];\n return removeRelation(relationUri, uriPreprocessor).then(responseHandler);\n };\n case Operations.IGNORE_RELATION:\n return () => {\n const {entityUri, parentUri, relationType, relationDirection} =\n parameters as CreateRelationIgnoreCommand['parameters'];\n return ignoreSuggestedRelation(parentUri, {\n relatedEntityUri: entityUri,\n relationType,\n relationDirection\n }).then(responseHandler);\n };\n\n case Operations.UPDATE_RELATION:\n return () => {\n const {oldRelation, newRelation} = parameters as CreateRelationUpdateCommand['parameters'];\n return updateRelation({oldRelation, newRelation, uriPreprocessor}).then(responseHandler);\n };\n case Operations.REPOINT_RELATION:\n return () => {\n const {\n entityUri,\n newEntityUri: parentUri,\n relation,\n isReversed\n } = parameters as CreateRelationRepointCommand['parameters'];\n const {uri: relationUri} = relation;\n const removeRelation = createRelationDeleteCommand({relationUri});\n const createRelation = createRelationCreateCommand({\n parentUri: isReversed ? entityUri : parentUri,\n relation,\n entityUri: isReversed ? parentUri : entityUri\n });\n const actions = [removeRelation, createRelation];\n const execute = pipe(\n map(injectAdditionalProps(dcrProcessor, relationUriProcessor)),\n map(createExecutableCommand),\n runPromisesSequentially\n );\n return execute(actions);\n };\n }\n};\n\nconst prependExecutableCommandWith =\n (prepend: () => Promise<unknown>) => (executableCommand: () => Promise<unknown>) => () =>\n prepend().then(executableCommand);\n\nconst injectAdditionalProps =\n (dcrProcessor: DCRProcessor, relationUriProcessor: RelationUriProcessor) => (command: Command) => ({\n dcrProcessor,\n relationUriProcessor,\n ...command\n });\n\ntype CreateCommandExecutor = {\n alwaysCreateDCR: boolean;\n dcrUri: string;\n};\ntype CreateCommandExecutorResult = {\n commandExecutor: (commands: Command[]) => Promise<unknown>;\n dcrProcessor: DCRProcessor;\n relationUriProcessor: RelationUriProcessor;\n};\nexport const createCommandExecutor = (\n {alwaysCreateDCR = false, dcrUri = null} = {alwaysCreateDCR: false, dcrUri: null} as CreateCommandExecutor\n): CreateCommandExecutorResult => {\n const dcrProcessor = createDCRProcessor({alwaysCreateDCR, dcrUri});\n const relationUriProcessor = createRelationUriProcessor();\n return {\n commandExecutor: (commands: Command[]): Promise<unknown> => {\n return pipe(\n flatten,\n map(injectAdditionalProps(dcrProcessor, relationUriProcessor)),\n map(createExecutableCommand),\n map(prependExecutableCommandWith(dcrProcessor.getDcrUriAwait)),\n runPromisesSequentially\n )(commands);\n },\n dcrProcessor,\n relationUriProcessor\n };\n};\n\nexport const replaceTempUriInCommands =\n (tempUrisMap: Record<string, string>) =>\n (commands: Command[]): Command[] =>\n map((command: Command) => {\n return {\n ...command,\n parameters: evolve(\n {\n parentUri: replaceUriWhenTemporary(tempUrisMap),\n entityUri: replaceUriWhenTemporary(tempUrisMap),\n newEntityUri: replaceUriWhenTemporary(tempUrisMap)\n },\n command.parameters\n )\n };\n }, commands);\n\nconst updateCommandByCondition =\n ({condition, updater}: {condition: (command: Command) => boolean; updater: (command: Command) => Command}) =>\n (command: Command): Command => {\n return condition(command) ? updater(command) : command;\n };\n\nconst keepOnlyCreateCommandForUri = (commands: Command[], relationUri: string): Command[] => {\n const createCommandForUri = commands.filter(isRelationCreateCommand).find(isRelationCommandForUri(relationUri));\n let updatedRelation: Relation = null;\n let updatedParentUri: string = null;\n let updatedEntityUri: string = null;\n const filteredCommands = commands.filter((command, index) => {\n if (isRelationUpdateCommand(command) && isRelationCommandForUri(relationUri, command)) {\n if (index > commands.indexOf(createCommandForUri)) {\n updatedRelation = command.parameters.newRelation;\n }\n return false;\n }\n if (isRelationRepointCommand(command) && isRelationCommandForUri(relationUri, command)) {\n if (index > commands.indexOf(createCommandForUri)) {\n updatedRelation = command.parameters.relation;\n updatedParentUri = command.parameters.isReversed\n ? command.parameters.entityUri\n : command.parameters.newEntityUri;\n updatedEntityUri = command.parameters.isReversed\n ? command.parameters.newEntityUri\n : command.parameters.entityUri;\n }\n return false;\n }\n return true;\n });\n\n return updatedRelation\n ? filteredCommands.map(\n updateCommandByCondition({\n condition: (command: Command) => createCommandForUri === command,\n updater: (command: Command) =>\n evolve({\n parameters: evolve({\n relation: always(updatedRelation),\n parentUri: (parentUri: string) => updatedParentUri || parentUri,\n entityUri: (entityUri: string) => updatedEntityUri || entityUri\n })\n })(command)\n })\n )\n : filteredCommands;\n};\n\nconst keepOnlyLastRepointCommandForUri = (commands: Command[], relationUri: string): Command[] => {\n const repointCommandsForSameUri = commands\n .filter(isRelationRepointCommand)\n .filter(isRelationCommandForUri(relationUri));\n let updatedRelation: Relation = null;\n const filteredCommands = commands.filter((command, index) => {\n if ((repointCommandsForSameUri as Command[]).includes(command)) {\n return last(repointCommandsForSameUri) === command;\n }\n if (isRelationUpdateCommand(command) && isRelationCommandForUri(relationUri, command)) {\n if (index > commands.indexOf(last(repointCommandsForSameUri))) {\n updatedRelation = command.parameters.newRelation;\n }\n return false;\n }\n return true;\n });\n\n return updatedRelation\n ? filteredCommands.map(\n updateCommandByCondition({\n condition: (command: Command) => last(repointCommandsForSameUri) === command,\n updater: (command: Command) =>\n evolve({\n parameters: evolve({\n relation: always(updatedRelation)\n })\n })(command)\n })\n )\n : filteredCommands;\n};\n\nconst keepOnlyLastDeleteCommandForUri = (commands: Command[], relationUri: string): Command[] => {\n const deleteCommandsForSameUri = commands\n .filter(isRelationDeleteCommand)\n .filter(isRelationCommandForUri(relationUri));\n return commands.filter((command) => {\n if ((deleteCommandsForSameUri as Command[]).includes(command)) {\n return last(deleteCommandsForSameUri) === command;\n } else if (isRelationCommandForUri(relationUri, command)) {\n return false;\n }\n return true;\n });\n};\n\nconst mergeSeveralUpdateCommandsForUri = (commands: Command[], relationUri: string): Command[] => {\n const updateCommandsForSameUri = commands\n .filter(isRelationUpdateCommand)\n .filter(isRelationCommandForUri(relationUri));\n let firstOldRelation: Relation = null;\n const filteredCommands = commands.filter((command) => {\n if ((updateCommandsForSameUri as Command[]).includes(command) && isRelationUpdateCommand(command)) {\n firstOldRelation = firstOldRelation || command.parameters.oldRelation;\n return last(updateCommandsForSameUri) === command;\n }\n return true;\n });\n return firstOldRelation\n ? filteredCommands.map(\n updateCommandByCondition({\n condition: (command: Command) => last(updateCommandsForSameUri) === command,\n updater: (command: Command) =>\n evolve({\n parameters: evolve({\n oldRelation: always(firstOldRelation)\n })\n })(command)\n })\n )\n : filteredCommands;\n};\n\nconst optimizeDeleteCommands = (commands: Command[]): Command[] => {\n const deletedRelationUris = commands\n .filter(isRelationDeleteCommand)\n .map(({parameters: {relationUri}}) => relationUri);\n return uniq(deletedRelationUris).reduce(keepOnlyLastDeleteCommandForUri, commands);\n};\n\nconst optimizeCreateCommands = (commands: Command[]): Command[] => {\n const createdRelationUris = commands.filter(isRelationCreateCommand).map(\n ({\n parameters: {\n relation: {uri}\n }\n }) => uri\n );\n return uniq(createdRelationUris).reduce(keepOnlyCreateCommandForUri, commands);\n};\n\nconst optimizeRepointCommands = (commands: Command[]): Command[] => {\n const repointedRelationUris = commands.filter(isRelationRepointCommand).map(\n ({\n parameters: {\n relation: {uri}\n }\n }) => uri\n );\n return uniq(repointedRelationUris).reduce(keepOnlyLastRepointCommandForUri, commands);\n};\n\nconst optimizeUpdateCommands = (commands: Command[]): Command[] => {\n const updatedRelationUris = commands.filter(isRelationUpdateCommand).map(\n ({\n parameters: {\n newRelation: {uri}\n }\n }) => uri\n );\n return pipe(\n filter((relationUri) => count(equals(relationUri), updatedRelationUris) > 1),\n uniq,\n reduce(mergeSeveralUpdateCommandsForUri, commands)\n )(updatedRelationUris);\n};\n\nexport const optimizeCommands = (commands: Command[]): Command[] =>\n pipe(optimizeDeleteCommands, optimizeCreateCommands, optimizeRepointCommands, optimizeUpdateCommands)(commands);\n","import {ifElse, has, path, pipe, prop} from 'ramda';\nimport {\n createRelationCreateCommand,\n createRelationDeleteCommand,\n createRelationIgnoreCommand,\n createRelationRepointCommand,\n createRelationUpdateCommand\n} from './commands';\nimport {replaceUriWhenTemporary} from '../entity/temporary';\nimport {\n findConnectionByRelationUri,\n getConnectionEntityUriPath,\n getConnectionRelationDirectionPath,\n getConnectionRelationEndDatePath,\n getConnectionRelationObjectPath,\n getConnectionRelationStartDatePath,\n getConnectionRelationUriPath,\n getEndObjectUri,\n getStartObjectUri\n} from './index';\nimport {Command, Connection, ConnectionDrafts, EntitiesMap, Relation, RelationDirections} from '../types';\n\nconst getRelationObjectFromConnection = (connection: Connection): Relation => ({\n ...path(getConnectionRelationObjectPath(), connection),\n startDate: path(getConnectionRelationStartDatePath(), connection),\n endDate: path(getConnectionRelationEndDatePath(), connection)\n});\n\nconst prepareEntityUriFromConnection = (connection: Connection, tempUrisMap: Record<string, string>): string =>\n pipe<Connection, string>(path(getConnectionEntityUriPath()), replaceUriWhenTemporary(tempUrisMap))(connection);\n\nexport const createRelationsCommandsFromConnections = (\n connections: Connection[],\n {removedUris = [], addedConnections = [], editedConnections = [], ignoredRelationData = []}: ConnectionDrafts,\n tempUrisMap: Record<string, string>,\n entityUri: string\n): Command[] => {\n const addedConnectionsCommands: Command[] = addedConnections.map((connection) => {\n const parentUri = prepareEntityUriFromConnection(connection, tempUrisMap);\n const direction: RelationDirections = path(getConnectionRelationDirectionPath(), connection);\n const isInDirection = direction === RelationDirections.IN;\n const newEntityUri = connection.parentEntityUri || entityUri;\n return createRelationCreateCommand({\n parentUri: isInDirection ? parentUri : newEntityUri,\n relation: getRelationObjectFromConnection(connection),\n entityUri: isInDirection ? newEntityUri : parentUri\n });\n });\n const editConnections: Command[] = editedConnections.map((connection) => {\n const newPointUri = prepareEntityUriFromConnection(connection, tempUrisMap);\n const direction: RelationDirections = path(getConnectionRelationDirectionPath(), connection);\n const isInDirection = direction === RelationDirections.IN;\n const oldPointUri = pipe(\n path(getConnectionRelationObjectPath()),\n isInDirection ? getStartObjectUri : getEndObjectUri\n )(connection);\n const isRepointRelation = newPointUri !== oldPointUri;\n const oldConnection = findConnectionByRelationUri(\n connections,\n path(getConnectionRelationUriPath(), connection)\n );\n const parentUri = connection.parentEntityUri || entityUri;\n const newEntityUri = replaceUriWhenTemporary(tempUrisMap, newPointUri);\n return isRepointRelation\n ? createRelationRepointCommand({\n entityUri: isInDirection ? parentUri : newEntityUri,\n newEntityUri: isInDirection ? newEntityUri : parentUri,\n relation: path(getConnectionRelationObjectPath(), connection),\n isReversed: false\n })\n : createRelationUpdateCommand({\n oldRelation: path(getConnectionRelationObjectPath(), oldConnection),\n newRelation: getRelationObjectFromConnection(connection)\n });\n });\n\n const removedConnections: Command[] = removedUris.map((relationUri) => createRelationDeleteCommand({relationUri}));\n const ignoredConnectionsCommands: Command[] = ignoredRelationData.map((item) =>\n createRelationIgnoreCommand({\n parentUri: entityUri,\n entityUri: item.entityUri,\n relationType: item.relationType,\n relationDirection: item.relationDirection\n })\n );\n return [...addedConnectionsCommands, ...editConnections, ...removedConnections, ...ignoredConnectionsCommands];\n};\n\nexport const getEntitiesMapForConnections = (connections) =>\n (connections || []).reduce((acc, {entity}) => {\n const dataTenant = entity.dataTenant;\n acc = {\n ...acc,\n [entity.entityUri]: {uri: entity.entityUri, label: entity.entityLabel, type: entity.entityType, dataTenant}\n };\n return acc;\n }, {} as EntitiesMap);\n\nconst isDataTenantRelation = has('dataTenant');\nconst getDataTenantRelationUri = ({relationUri, dataTenant}) => `DTSS/${dataTenant}/${relationUri}`;\nexport const getConnectionRelationUriForLink = ifElse(\n isDataTenantRelation,\n getDataTenantRelationUri,\n prop('relationUri')\n);\n","import {concat, defaultTo, pipe, propOr} from 'ramda';\nimport {filterOutHiddenAttributes, getRelationType} from '../metadata';\nimport {ACTIVENESS_ATTR_TYPES} from '../attributes';\n\nconst getRelationAttributesList = (metadata, relationTypeUri) =>\n pipe(\n getRelationType,\n defaultTo({}),\n propOr([], 'attributes'),\n concat(ACTIVENESS_ATTR_TYPES),\n filterOutHiddenAttributes\n )(metadata, relationTypeUri);\n\nexport {getRelationAttributesList};\n","import {curry, either, evolve, indexBy, keys, path, pipe, prop, unless} from 'ramda';\nimport {checkMetadataPermission, MetadataPermissions} from '../permissions';\nimport {\n ComplexInOutRelationItem,\n InOutRelation,\n Metadata,\n RelationsContent,\n RelationsViewConfig,\n TEntityType,\n TRelationType\n} from '../types';\n\ntype IndexedRelationTypes = {\n [relationTypeUri: string]: TRelationType;\n};\ntype IndexedEntityTypes = {\n [entityTypeUri: string]: TEntityType;\n};\ntype InOutRelationItem = InOutRelation[0];\n\nconst isComplexItem = (item: InOutRelationItem): item is ComplexInOutRelationItem => prop('uri', item);\nconst getUri = (item: InOutRelationItem): string => (isComplexItem(item) ? item.uri : item);\nconst containsUri = (uri: string) => (item: InOutRelationItem) => getUri(item) === uri;\n\nexport const parseUris = curry(\n (metadata: IndexedRelationTypes | IndexedEntityTypes, data: InOutRelation): InOutRelation => {\n const parseUri = (acc: InOutRelation, item: InOutRelationItem): InOutRelation => {\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\n ? acc\n : acc.concat(isComplexItem(item) ? {...item, uri} : data.find(containsUri(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);\n\nexport const deriveEntityTypesFromRelations = curry(\n (relationTypes: IndexedRelationTypes, content: RelationsContent) => {\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);\n\nconst indexByUri = indexBy(prop('uri'));\n\nexport const parseRelationsConfigContent = curry((metadata: Metadata, content: RelationsContent): RelationsContent => {\n const relationTypes: IndexedRelationTypes = indexByUri(metadata.relationTypes);\n const entityTypes: IndexedEntityTypes = indexByUri(metadata.entityTypes);\n\n const parseEntryUris = (entry: RelationsContent): RelationsContent =>\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: Metadata, config: RelationsViewConfig): RelationsViewConfig =>\n evolve({content: parseRelationsConfigContent(metadata)}, config);\n","import {\n __,\n allPass,\n always,\n assoc,\n both,\n complement,\n curry,\n equals,\n defaultTo,\n evolve,\n lensProp,\n over,\n path,\n pipe,\n assocPath,\n propOr,\n map,\n filter,\n identity,\n when,\n reject,\n prop,\n uniq\n} from 'ramda';\nimport {generateNewRelationUri} from '../uris';\nimport {evaluateDeepEntityLabel} from '../entity';\nimport {isEmptyValue} from '../utils';\nimport {checkMetadataForCreate, checkMetadataForUpdate} from '../permissions/metadataPermissions';\nimport {Directions} from '../constants/common';\nimport {getEntityType, isInHierarchy} from '../metadata/entityTypes';\nimport {getRelationType, inOutRelationsDeduplicator, getRelationEntityTypesUris} from '../metadata/relations';\nimport {isAvailableRelationType} from '../metadata/availableTypes';\nimport {Connection} from '../types';\n\nconst applyRelationTypeObject =\n ({type: {uri, label}, direction}) =>\n (relation) => {\n const relationUri = relation.relationUri;\n return pipe(\n assoc('relationType', uri),\n assoc('relationLabel', label),\n assoc('object', {type: uri, attributes: {}, uri: relationUri}),\n assoc('direction', direction)\n )(relation);\n };\n\nconst updateConnectionEntityLabel = (entityType, entity, connection) => {\n const newLabel = evaluateDeepEntityLabel(entity, entityType.dataLabelPattern);\n const entityLens = lensProp('entity');\n return over(\n entityLens,\n evolve({\n entityLabel: always(newLabel),\n object: {\n label: always(newLabel)\n }\n }),\n connection\n );\n};\n\nconst RELATION = 'relation';\nconst getConnectionRelationUriPath = always([RELATION, 'relationUri']);\nconst getConnectionRelationTypePath = always([RELATION, 'relationType']);\nconst getConnectionRelationObjectPath = always([RELATION, 'object']);\nconst getConnectionRelationDirectionPath = always([RELATION, 'direction']);\nconst getConnectionRelationAttributesPath = always([RELATION, 'object', 'attributes']);\nconst getConnectionEntityUriPath = always(['entity', 'entityUri']);\nconst getConnectionRelationStartDatePath = always([RELATION, 'startDate']);\nconst getConnectionRelationEndDatePath = always([RELATION, 'endDate']);\n\nconst getStartObjectUri = path(['startObject', 'objectURI']);\nconst getEndObjectUri = path(['endObject', 'objectURI']);\n\nconst getStartObjectTypeUri = path(['startObject', 'objectTypeURI']);\nconst getEndObjectTypeUri = path(['endObject', 'objectTypeURI']);\n\nconst findConnectionByRelationUri = (connections, uri) => {\n for (const connection of connections) {\n if (pipe(path(getConnectionRelationUriPath()), equals(uri))(connection)) {\n return connection;\n } else if (connection.connections) {\n const found = findConnectionByRelationUri(connection.connections, uri);\n\n if (found) {\n return found;\n }\n }\n }\n};\n\nconst findConnectionRelationObjectByRelationUri = pipe(\n findConnectionByRelationUri,\n path(getConnectionRelationObjectPath())\n);\n\nconst isValidRelationToAdd = allPass([\n pipe(path(getConnectionEntityUriPath()), complement(isEmptyValue)),\n pipe(path(getConnectionRelationTypePath()), complement(isEmptyValue))\n]);\n\nconst createNewConnection = () => ({\n relation: {\n relationUri: generateNewRelationUri()\n },\n entity: {},\n isNew: true\n});\n\nconst createNewConnectionWithDefaultRelationType = ({config, mode, metadata, parentEntityUri}) => {\n const newConnection: Connection = createNewConnection();\n const {relationType, direction} = newConnection.relation;\n const {inRelations, outRelations} = getInOutRelations({\n content: parentEntityUri ? config.contentSecondLevel : config.content,\n direction,\n relationType,\n mode,\n metadata\n });\n const defaultRelationTypeObject = getDefaultRelationTypeObject(inRelations, outRelations);\n return pipe(\n evolve({\n relation: defaultRelationTypeObject ? applyRelationTypeObject(defaultRelationTypeObject) : identity\n }),\n defaultTo({}),\n when(always(parentEntityUri), assoc('parentEntityUri', parentEntityUri))\n )(newConnection);\n};\n\nconst getDefaultRelationTypeObject = (inRelationTypes = [], outRelationTypes = []) =>\n inRelationTypes.length + outRelationTypes.length === 1\n ? inRelationTypes.length\n ? {type: inRelationTypes[0], direction: Directions.IN}\n : {type: outRelationTypes[0], direction: Directions.OUT}\n : null;\n\nconst getRelUri = (rel) => rel.uri || rel;\n\nconst getInOutRelations = ({content, direction, relationType, mode, metadata}) => {\n const labelsMap = {};\n const filterRelations = (targetDirection) => (relationTypeMetadata) => {\n const canCreateRelation =\n relationTypeMetadata &&\n checkMetadataForCreate(mode, relationTypeMetadata) &&\n checkMetadataForUpdate(mode, relationTypeMetadata);\n const isCurrentRelationType =\n relationTypeMetadata && relationType === relationTypeMetadata.uri && direction === targetDirection;\n if (canCreateRelation || isCurrentRelationType) {\n let {label} = relationTypeMetadata;\n const objectId = targetDirection === Directions.IN ? 'startObject' : 'endObject';\n const {directionalContext} = relationTypeMetadata[objectId];\n if (relationTypeMetadata.direction === 'directed' && propOr(0, 'length', directionalContext) === 1) {\n label += ` (${directionalContext[0].labelPattern})`;\n }\n if (label in labelsMap) {\n return false;\n } else {\n labelsMap[label] = true;\n return true;\n }\n } else {\n return false;\n }\n };\n const setObjectTypes = (relation) =>\n pipe(\n assocPath(['startObject', 'objectType'], getEntityType(metadata, relation.startObject.objectTypeURI)),\n assocPath(['endObject', 'objectType'], getEntityType(metadata, relation.endObject.objectTypeURI))\n )(relation);\n\n const getRelationTypeMetadata = pipe(getRelUri, getRelationType(metadata));\n return (\n evolve(\n {\n inRelations: pipe(\n map(getRelationTypeMetadata),\n filter(filterRelations(Directions.IN)),\n map(setObjectTypes)\n ),\n outRelations: pipe(\n map(getRelationTypeMetadata),\n filter(filterRelations(Directions.OUT)),\n map(setObjectTypes)\n )\n },\n content\n ) || {}\n );\n};\n\nconst getInOutRelationTypesForEntityTypeUri = (metadata, entityTypeUri, isAcceptableRelationType = identity) => {\n const {isNotDuplicatedInRelation, isNotDuplicatedOutRelation} = inOutRelationsDeduplicator({\n reversedContextLabels: true\n });\n\n const canHaveRelationBetweenEntityTypes = curry((metadata, startEntityTypeUri, endEntityTypeUri, relationType) => {\n const [startUri, endUri] = getRelationEntityTypesUris(metadata, relationType.uri);\n return (\n relationType &&\n (startEntityTypeUri ? isInHierarchy(metadata, startUri, startEntityTypeUri) : true) &&\n (endEntityTypeUri ? isInHierarchy(metadata, endUri, endEntityTypeUri) : true)\n );\n });\n\n const setObjectTypes = (relation) =>\n pipe(\n assocPath(['startObject', 'objectType'], getEntityType(metadata, relation.startObject.objectTypeURI)),\n assocPath(['endObject', 'objectType'], getEntityType(metadata, relation.endObject.objectTypeURI))\n )(relation);\n\n const availableRelationTypes = (metadata.relationTypes || []).filter(\n both(isAvailableRelationType, isAcceptableRelationType)\n );\n\n return {\n inRelations: pipe(\n filter(canHaveRelationBetweenEntityTypes(metadata, null, entityTypeUri)),\n filter(isNotDuplicatedInRelation),\n map(setObjectTypes)\n )(availableRelationTypes),\n outRelations: pipe(\n filter(canHaveRelationBetweenEntityTypes(metadata, entityTypeUri, null)),\n filter(isNotDuplicatedOutRelation),\n map(setObjectTypes)\n )(availableRelationTypes)\n };\n};\n\nconst isAvailableRelationBetweenEntities = curry(\n (isOutRelationForRelatedEntity, entity, relatedEntity, metadata, relationType) => {\n const isEntityInstanceOf = isInHierarchy(metadata, __, entity.type);\n const getEntityObjectUri = isOutRelationForRelatedEntity ? getEndObjectTypeUri : getStartObjectTypeUri;\n const isRelatedEntityInstanceOf = isInHierarchy(metadata, __, relatedEntity.type);\n const getRelatedEntityObjectUri = isOutRelationForRelatedEntity ? getStartObjectTypeUri : getEndObjectTypeUri;\n return both(\n pipe(getEntityObjectUri, isEntityInstanceOf),\n pipe(getRelatedEntityObjectUri, isRelatedEntityInstanceOf)\n )(relationType);\n }\n);\n\nconst getSuitableEntityTypeUrisForRelationTypes = (isOutRelationForRelatedEntity, metadata, relationTypes) => {\n const getEntityObjectUri = isOutRelationForRelatedEntity ? getEndObjectTypeUri : getStartObjectTypeUri;\n const entityTypeUrisFromRelations = pipe(map(getEntityObjectUri), uniq)(relationTypes);\n const isSuitableEntityType = ({uri}) => entityTypeUrisFromRelations.some(isInHierarchy(metadata, __, uri));\n return pipe(filter(isSuitableEntityType), reject(prop('abstract')), map(prop('uri')))(metadata.entityTypes || []);\n};\n\nexport {\n applyRelationTypeObject,\n updateConnectionEntityLabel,\n getSuitableEntityTypeUrisForRelationTypes,\n getConnectionRelationUriPath,\n getConnectionRelationObjectPath,\n getConnectionRelationAttributesPath,\n getConnectionRelationDirectionPath,\n getConnectionEntityUriPath,\n getConnectionRelationTypePath,\n getStartObjectUri,\n getEndObjectUri,\n getStartObjectTypeUri,\n getEndObjectTypeUri,\n getConnectionRelationStartDatePath,\n getConnectionRelationEndDatePath,\n findConnectionByRelationUri,\n findConnectionRelationObjectByRelationUri,\n isAvailableRelationBetweenEntities,\n isValidRelationToAdd,\n createNewConnectionWithDefaultRelationType,\n getInOutRelations,\n getDefaultRelationTypeObject,\n getInOutRelationTypesForEntityTypeUri\n};\nexport {\n createRelationUpdateCommand,\n createRelationDeleteCommand,\n createRelationCreateCommand,\n createRelationRepointCommand,\n createCommandExecutor,\n replaceTempUriInCommands,\n createRelationIgnoreCommand,\n optimizeCommands,\n isRelationCommandForUri\n} from './commands';\nexport {\n createRelationsCommandsFromConnections,\n getEntitiesMapForConnections,\n getConnectionRelationUriForLink\n} from './connections';\nexport {getRelationAttributesList} from './attributesList';\nexport {parseRelationsConfig} from './config';\nexport {createRelationUriProcessor} from './relationUriProcessor';\n","import {\n allPass,\n any,\n both,\n complement,\n cond,\n curry,\n F,\n filter,\n find,\n isNil,\n path,\n pipe,\n prop,\n propEq,\n T,\n unless\n} from 'ramda';\nimport {getConnectionRelationUriPath} from '../relations';\nimport {DataTypes, Entity, NestedAttributeValue} from '../types';\nimport {\n getEntityType,\n getReferencedAttrTypeUrisFromAttrType,\n getReferencedEntityTypeUriFromAttrType,\n getRelationTypeLabelFromMetadata,\n isNested,\n isReference\n} from '../metadata';\nimport {areOneHierarchyUris, isTempUri} from '../uris';\nimport {\n AttributeError,\n AttributeType,\n AttributeValue,\n AttributeValuePathItem,\n AttributeValuePathItemType,\n Connection,\n EntitiesMap,\n ErrorPathItem,\n ErrorSeverity,\n ErrorType,\n Metadata,\n ReferenceAttributeValue,\n TEntityType\n} from '../types';\nimport {getAttributeValuePath} from '../attributes/valuePath';\nimport {evaluateDeepEntityLabel, getLabel} from '../entity';\nimport {getReferencedEntityUriFromAttrValue} from '../attributes';\nimport {isEmptyValue} from '../utils';\n\nconst buildError = ({\n type,\n attributeType,\n attributeTypeUri,\n parentUri,\n uri,\n message,\n source\n}: AttributeError): AttributeError => ({\n type,\n uri,\n attributeTypeUri,\n attributeType,\n parentUri,\n message,\n source\n});\n\nconst isActiveError = (error: AttributeError) => !error.deactivated;\n\nconst getErrorId = ({attributeTypeUri, uri, parentUri}: AttributeError) => `${attributeTypeUri}-${uri}-${parentUri}`;\nconst getErrorUniqKey = (error: AttributeError) => getErrorId(error) + error.message;\n\nconst getErrorMessage = unless(isNil, prop('message'));\nconst getErrorType = unless(isNil, prop('type'));\n\nconst isPartOfErrorParentUri = curry((uri: string, error: AttributeError) => areOneHierarchyUris(error.parentUri, uri));\nconst isErrorParentUri = curry((uri: string, error: AttributeError) => error.parentUri === uri);\n\nconst isPartOfErrorAttributeTypeUri = curry((attributeType: AttributeType, error: AttributeError) => {\n return cond([\n [pipe(prop('uri'), areOneHierarchyUris(error.attributeTypeUri)), T],\n [\n both(\n propEq('type', DataTypes.TYPE_REFERENCE),\n pipe(getReferencedAttrTypeUrisFromAttrType, any(areOneHierarchyUris(error.attributeTypeUri)))\n ),\n T\n ],\n [T, F]\n ])(attributeType);\n});\nconst isErrorAttributeTypeUri = curry(\n (attributeTypeUri: string, error: AttributeError) => error.attributeTypeUri === attributeTypeUri\n);\n\n// Case - error for 1st level CountryCode attribute (parentUri is entities/123)\n// shouldn't be connected to 1st level HCPtoHCP reference attribute (parentUri is entities/123) even it has CountryCode as referenced attribute\nconst isErrorForSubattributeWithSameParentUri = curry(\n (parentUri: string, attributeTypeUri: string, error: AttributeError) =>\n parentUri === error.parentUri && attributeTypeUri !== error.attributeTypeUri\n);\n\nconst getAttributePagerActiveErrors = (\n parentUri: string,\n attributeType: AttributeType,\n errors: AttributeError[] = []\n) =>\n filter(\n allPass([\n isCriticalError,\n isActiveError,\n isPartOfErrorParentUri(parentUri),\n isPartOfErrorAttributeTypeUri(attributeType),\n complement(isErrorForSubattributeWithSameParentUri(parentUri, attributeType.uri))\n ])\n )(errors);\n\nconst getAttributePagerActiveTypeErrorMessage = (\n parentUri: string,\n attributeType: AttributeType,\n errors: AttributeError[] = []\n) => {\n const error: AttributeError = find(\n allPass([\n isCriticalError,\n isActiveError,\n isErrorParentUri(parentUri),\n isErrorAttributeTypeUri(attributeType.uri),\n complement(prop('uri')),\n complement(propEq('type', ErrorType.missed))\n ])\n )(errors);\n return (error && error.message) || '';\n};\n\nconst getAttributeOwnError = (\n value: AttributeValue,\n index: number,\n attributeTypeUri: string,\n errors: AttributeError[] = []\n) => {\n const {uri} = value;\n const error: AttributeError = find(propEq('uri', uri))(errors);\n if (!error && index === 0) {\n return errors.find((error) => error.attributeTypeUri === attributeTypeUri && error.type === ErrorType.missed);\n }\n return error;\n};\n\nconst getRelationEditorActiveError = (connection, errors = []) =>\n find(\n allPass([\n isActiveError,\n propEq('type', ErrorType.missedRefEntity),\n propEq('parentUri', path(getConnectionRelationUriPath(), connection))\n ])\n )(errors);\n\nconst getReferencedEntityActiveError = (attrValue, errors = []) =>\n find(allPass([isActiveError, propEq('type', ErrorType.missedRefEntity), propEq('parentUri', attrValue.uri)]))(\n errors\n );\n\nconst hasAttributeDescendantsWithErrors = ({uri}, errors = []) =>\n any(allPass([isActiveError, isPartOfErrorParentUri(uri)]))(errors);\n\nconst getHierarchyNodeEditorActiveError = (connection, errors = []) =>\n find(\n allPass([\n isActiveError,\n propEq('type', ErrorType.missedRefEntity),\n propEq('parentUri', path(['relation', 'uri'], connection))\n ])\n )(errors);\n\nconst getErrorPathItemLabel = (\n {entitiesMap, metadata}: {entitiesMap: EntitiesMap; metadata: Metadata},\n valuePathItem: AttributeValuePathItem\n) => {\n const {type, valueType, value} = valuePathItem;\n switch (type) {\n case AttributeValuePathItemType.attributeValue: {\n const attributeType = valueType as AttributeType;\n if (isNested(valueType)) {\n return evaluateDeepEntityLabel(value as NestedAttributeValue, attributeType.dataLabelPattern);\n }\n if (isReference(valueType)) {\n const referenceAttrValue = value as ReferenceAttributeValue;\n const refEntityUri: string = getReferencedEntityUriFromAttrValue(referenceAttrValue);\n const referencedEntityTypeUri: string = getReferencedEntityTypeUriFromAttrType(attributeType);\n const refEntityType: TEntityType = getEntityType(metadata, referencedEntityTypeUri);\n return isTempUri(refEntityUri)\n ? evaluateDeepEntityLabel(entitiesMap[refEntityUri], refEntityType.dataLabelPattern)\n : referenceAttrValue.label;\n }\n return '';\n }\n case AttributeValuePathItemType.tempEntity: {\n const entityType = valueType as TEntityType;\n return evaluateDeepEntityLabel(value as Entity, entityType.dataLabelPattern);\n }\n case AttributeValuePathItemType.relationConnection: {\n const {entity, relation} = value as Connection;\n const entityUri = entity?.entityUri;\n const entityType: TEntityType = getEntityType(metadata, entity?.entityType);\n const entityLabel = getLabel(\n entityUri && isTempUri(entityUri)\n ? evaluateDeepEntityLabel(entitiesMap[entityUri], entityType?.dataLabelPattern)\n : entity?.entityLabel\n );\n const relationLabel =\n relation?.relationLabel || getRelationTypeLabelFromMetadata(metadata, relation?.relationType);\n return `${entityLabel}, ${relationLabel}`;\n }\n }\n};\n\nconst evaluateErrorPath = (data: Parameters<typeof getAttributeValuePath>[0], uri: string): ErrorPathItem[] => {\n const {entitiesMap, metadata} = data;\n const valuePath = uri ? getAttributeValuePath(data, uri) : null;\n return (\n valuePath &&\n valuePath.map((pathItem) => {\n const label = getErrorPathItemLabel({entitiesMap, metadata}, pathItem);\n return {...pathItem, label: getLabel(label)};\n })\n );\n};\n\nconst isCriticalError = (error: AttributeError) => !error.severity || error.severity === ErrorSeverity.ERROR;\n\nconst isAttributeTypeError = (error: AttributeError, parentUri: string, attributeTypeUri: string) =>\n allPass([\n pipe(prop('uri'), isEmptyValue),\n propEq('parentUri', parentUri),\n propEq('attributeTypeUri', attributeTypeUri)\n ])(error);\n\nexport {\n buildError,\n getErrorId,\n getErrorUniqKey,\n getErrorMessage,\n getErrorType,\n evaluateErrorPath,\n getAttributePagerActiveErrors,\n getAttributePagerActiveTypeErrorMessage,\n getAttributeOwnError,\n hasAttributeDescendantsWithErrors,\n getRelationEditorActiveError,\n getReferencedEntityActiveError,\n getHierarchyNodeEditorActiveError,\n isCriticalError,\n isAttributeTypeError,\n isPartOfErrorAttributeTypeUri,\n isPartOfErrorParentUri\n};\n","import {identity, complement, curry, propEq} from 'ramda';\nimport i18n from 'ui-i18n';\n\nimport {getRequiredAttributeTypesByTypeUri} from '../metadata/required';\nimport {findAttributeValuesByTypeUri, getReferencedEntityFromAttrValue, isOv} from '../attributes';\nimport DataTypes from '../types/data-types';\nimport {buildError} from './errors';\nimport {\n AttributeError,\n AttributeType,\n AttributeValue,\n Entity,\n ErrorSource,\n ErrorType,\n Metadata,\n ReferenceAttributeValue,\n Relation\n} from '../types';\n\nconst hasAttributeSomeValue = curry((attrType: AttributeType, attrValue: AttributeValue) => {\n let value = attrValue.value;\n switch (attrType.type) {\n case DataTypes.TYPE_NESTED:\n return Object.keys(value).some((name) => {\n const subType = attrType.attributes.find(propEq('name', name));\n return value[name].some(hasAttributeSomeValue(subType));\n });\n case DataTypes.TYPE_REFERENCE:\n return !!getReferencedEntityFromAttrValue(attrValue as ReferenceAttributeValue);\n case DataTypes.TYPE_BOOLEAN:\n return value === true || value === false || value === 'true' || value === 'false';\n default:\n if (typeof value === 'string') {\n value = value.trim();\n }\n return value != null && value !== '';\n }\n});\n\nconst areAttributeValuesEmpty = (attrValues: AttributeValue[], attrType: AttributeType) =>\n attrValues.every(complement(hasAttributeSomeValue(attrType)));\n\nconst validateRequiredAttributes = (\n metadata: Metadata,\n entityOrRelation: Entity | Relation,\n attrTypesFilter: (attrType: AttributeType, parents: AttributeType[]) => boolean = identity\n): AttributeError[] => {\n const requiredAttrTypes: AttributeType[] = getRequiredAttributeTypesByTypeUri(\n metadata,\n entityOrRelation.type || (entityOrRelation as Relation & {relationType: string}).relationType,\n true,\n attrTypesFilter\n );\n return requiredAttrTypes.reduce((outputRecords, attrType) => {\n const attrValuesGroups = findAttributeValuesByTypeUri(metadata, entityOrRelation, attrType.uri, true);\n if (attrValuesGroups) {\n attrValuesGroups\n .filter(\n (group) =>\n !(\n group.parent &&\n ((group.parent as AttributeValue).ignored || !isOv(group.parent as AttributeValue))\n )\n )\n .forEach((group) => {\n if (areAttributeValuesEmpty(group.attrValues, attrType)) {\n outputRecords.push(\n buildError({\n type: ErrorType.missed,\n uri: '',\n attributeType: attrType,\n attributeTypeUri: attrType.uri,\n parentUri: group.parent.uri,\n message: i18n.text('Attribute is required'),\n source: ErrorSource.local\n })\n );\n }\n });\n }\n return outputRecords;\n }, []);\n};\n\nexport {validateRequiredAttributes};\n","import {curry, both, chain, defaultTo, filter, map, identity, pipe, propEq, prop, reject, has} from 'ramda';\nimport i18n from 'ui-i18n';\n\nimport {validateRequiredAttributes} from './required';\nimport {\n findAttributeTypeByUri,\n getEntityType,\n getReferencedAttrTypeUrisFromAttrType,\n getReferencedRelationAttrTypesUris,\n isReference\n} from '../metadata';\nimport {\n AttributeError,\n AttributeType,\n AttributeValue,\n ComplexAttributeValue,\n DataTypes,\n EntitiesMap,\n Entity,\n Metadata\n} from '../types';\nimport {findAttributeValuesByTypeUri, getReferencedEntityUriFromAttrValue} from '../attributes';\nimport {buildError} from './errors';\nimport {areOneHierarchyUris, getAttributeTypeUriByValueUri, getEntityUriFromAttributeUri, isTempUri} from '../uris';\nimport {ErrorSource, ErrorType} from '../types';\nimport {isHiddenAttribute} from '../metadata/attributes';\n\nconst findAttributeValuesByTypeUriC = curry((metadata: Metadata, entity: Entity, attrTypeUri: string) =>\n findAttributeValuesByTypeUri(metadata, entity, attrTypeUri, false)\n);\n\nconst validateIfReferencedEntitiesExists = (metadata: Metadata, entity: Entity): AttributeError[] => {\n const getRefAttributeValues = pipe(\n prop('type'),\n getEntityType(metadata),\n prop('attributes'),\n defaultTo([]),\n reject(isHiddenAttribute),\n filter(isReference),\n map(prop('uri')),\n chain(findAttributeValuesByTypeUriC(metadata, entity))\n );\n\n return pipe(\n getRefAttributeValues,\n reject(getReferencedEntityUriFromAttrValue),\n map(({uri}) =>\n buildError({\n type: ErrorType.missedRefEntity,\n uri: '',\n attributeTypeUri: getAttributeTypeUriByValueUri(uri, entity.type),\n parentUri: uri,\n message: i18n.text('Entity is required'),\n source: ErrorSource.local\n })\n )\n )(entity);\n};\n\nconst validateTempReferencedEntities = (\n metadata: Metadata,\n tempEntitiesMap: EntitiesMap,\n entity: Entity\n): AttributeError[] =>\n Object.values(entity.attributes || {})\n .flat()\n .filter(has('refEntity'))\n .filter(pipe(getReferencedEntityUriFromAttrValue, isTempUri))\n .flatMap((attrValue) => {\n const entityUri = getReferencedEntityUriFromAttrValue(attrValue);\n const tempEntity = tempEntitiesMap[entityUri];\n const referenceAttrType = findAttributeTypeByUri(\n metadata,\n getAttributeTypeUriByValueUri((attrValue as AttributeValue).uri, entity.type)\n );\n return validateTempReferencedEntity(metadata, tempEntitiesMap, referenceAttrType, tempEntity);\n });\n\nconst validateTempReferencedEntity = (\n metadata: Metadata,\n tempEntitiesMap: EntitiesMap,\n referenceAttrType: AttributeType,\n tempEntity: Entity\n): AttributeError[] => {\n const referencedAttrTypeUris: string[] = getReferencedAttrTypeUrisFromAttrType(referenceAttrType);\n // We should not validate required entity attributes which aren't included in referencedAttributeURIs of host Reference Attribute.\n // But referencedAttributeURIs can contain other reference attribute, so we should get their referencedAttributeURIs\n const allowedReferenceAttributes = referencedAttrTypeUris\n .map((typeUri) => findAttributeTypeByUri(metadata, typeUri))\n .filter(both(identity, propEq('type', DataTypes.TYPE_REFERENCE)))\n .flatMap(getReferencedRelationAttrTypesUris)\n .concat(referencedAttrTypeUris);\n\n const attrTypeFilter = (attrType) => allowedReferenceAttributes.some(areOneHierarchyUris(attrType.uri));\n\n return validateEntityLocally(metadata, tempEntitiesMap, tempEntity, attrTypeFilter);\n};\n\nconst validateEntityLocally = (\n metadata: Metadata,\n tempEntitiesMap: EntitiesMap,\n entity: Entity,\n attrTypeFilter: (attrType: AttributeType, parents: AttributeType[]) => boolean = identity\n): AttributeError[] => {\n const requiredAttributesErrors = validateRequiredAttributes(metadata, entity, attrTypeFilter);\n const emptyReferencedEntityErrors = validateIfReferencedEntitiesExists(metadata, entity);\n const tempReferencedEntityErrors = validateTempReferencedEntities(metadata, tempEntitiesMap, entity);\n return [...requiredAttributesErrors, ...emptyReferencedEntityErrors, ...tempReferencedEntityErrors];\n};\n\nconst getSingleAttributeEntity = (attributeType: AttributeType, attributeValue: AttributeValue): Entity => ({\n attributes: {\n [attributeType.name]: [attributeValue]\n },\n type: getEntityUriFromAttributeUri(attributeType.uri),\n uri: getEntityUriFromAttributeUri(attributeValue.uri)\n});\n\nconst validateComplexAttribute = (\n metadata: Metadata,\n attributeType: AttributeType,\n attributeValue: ComplexAttributeValue,\n tempEntitiesMap: EntitiesMap = {}\n): AttributeError[] => {\n const fakeEntity = getSingleAttributeEntity(attributeType, attributeValue);\n const attrTypeFilter = (attrType: AttributeType, parentAttrTypes: AttributeType[] = []) => {\n const uri = (parentAttrTypes[0] || attrType).uri;\n return attributeType.uri === uri;\n };\n return validateEntityLocally(metadata, tempEntitiesMap, fakeEntity, attrTypeFilter);\n};\n\nexport {validateEntityLocally, validateComplexAttribute, getSingleAttributeEntity};\n","import {always, path, pipe, ifElse} from 'ramda';\nimport i18n from 'ui-i18n';\n\nimport {validateRequiredAttributes} from './required';\nimport {\n getConnectionEntityUriPath,\n getConnectionRelationObjectPath,\n getConnectionRelationTypePath,\n getConnectionRelationUriPath\n} from '../relations';\nimport {buildError} from './errors';\nimport {validateEntityLocally} from './entities';\nimport {isTempUri} from '../uris';\nimport {AttributeError, Connection, EntitiesMap, Entity, ErrorSource, ErrorType, Metadata} from '../types';\n\nconst validateIfConnectionEntityExists = (connection: Connection): AttributeError[] => {\n const connectionEntityUri = path(getConnectionEntityUriPath(), connection);\n return connectionEntityUri\n ? []\n : [\n buildError({\n type: ErrorType.missedRefEntity,\n uri: '',\n attributeTypeUri: path(getConnectionRelationTypePath(), connection),\n parentUri: path(getConnectionRelationUriPath(), connection),\n message: i18n.text('Entity is required'),\n source: ErrorSource.local\n })\n ];\n};\n\nconst validateConnectionTempEntities = (\n metadata: Metadata,\n tempEntitiesMap: EntitiesMap,\n connectionTempEntity: Entity\n): AttributeError[] =>\n connectionTempEntity ? validateEntityLocally(metadata, tempEntitiesMap, connectionTempEntity) : [];\n\nconst validateConnectionRelation = (metadata: Metadata, connection: Connection): AttributeError[] => {\n const relationObject = path(getConnectionRelationObjectPath(), connection) || {};\n return validateRequiredAttributes(metadata, relationObject);\n};\n\nconst validateConnection = (\n metadata: Metadata,\n tempEntitiesMap: EntitiesMap,\n connection: Connection\n): AttributeError[] => {\n tempEntitiesMap = tempEntitiesMap || {};\n const connectionTempEntity = pipe(\n path(getConnectionEntityUriPath()),\n ifElse(isTempUri, (uri) => tempEntitiesMap[uri], always(null))\n )(connection);\n\n const relationRequiredAttributesErrors = validateConnectionRelation(metadata, connection);\n const connectionEntityExistsErrors = validateIfConnectionEntityExists(connection);\n const tempEntitiesErrors = validateConnectionTempEntities(metadata, tempEntitiesMap, connectionTempEntity);\n\n return [...relationRequiredAttributesErrors, ...connectionEntityExistsErrors, ...tempEntitiesErrors];\n};\n\nexport {validateConnection, validateConnectionRelation};\n","import {path} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {validateRequiredAttributes} from './required';\nimport {buildError} from './errors';\nimport {AttributeError, EditingConnection, ErrorSource, ErrorType, Metadata} from '../types';\n\nconst validateIfConnectionEntityExists = (connection: EditingConnection): AttributeError[] => {\n const connectionEntityUri = path(['entity', 'uri'], connection);\n return connectionEntityUri\n ? []\n : [\n buildError({\n type: ErrorType.missedRefEntity,\n uri: '',\n attributeTypeUri: path(['relation', 'type'], connection),\n parentUri: path(['relation', 'uri'], connection),\n message: i18n.text('Entity is required'),\n source: ErrorSource.local\n })\n ];\n};\n\nconst validateHierarchyConnection = (metadata: Metadata, connection: EditingConnection = {}): AttributeError[] => {\n const {relation} = connection;\n\n const relationRequiredAttributesErrors = validateRequiredAttributes(metadata, relation);\n const connectionEntityExistsErrors = validateIfConnectionEntityExists(connection);\n\n return [...relationRequiredAttributesErrors, ...connectionEntityExistsErrors];\n};\n\nexport {validateHierarchyConnection};\n","import {allPass, always, clone, evolve, filter, ifElse, is, map, not, pipe, prop, when} from 'ramda';\nimport {\n AttributesDiff,\n AttributeValue,\n EntitiesMap,\n Entity,\n Metadata,\n RecordAttributesType,\n ReferenceAttributeValue\n} from '../types';\nimport {getEntityType, hasDependentLookupAttributes} from '../metadata';\nimport {applyCrosswalks, collectCrosswalksFromAttributes, compareAttributes} from '../entity';\nimport {getLastUriPart, isTempUri, tempUriToApiFormat} from '../uris';\nimport {getReferencedEntityUriFromAttrValue, getReferencedRelationUriFromAttrValue} from '../attributes';\nimport {TEMP_URI_FOR_API_RELATIONS} from '../uris/constants';\nimport {prepareReferencedPropsForAPI} from '../attributes/referenceAttribute';\nimport {cleanAttributesWith} from '../attributes/editing';\nimport {collectSpecialAttributesDiff} from '../entity/temporary';\n\nconst shouldUseValidationService = (metadata: Metadata, entityTypeUri: string): boolean => {\n const entityType = getEntityType(metadata, entityTypeUri);\n const shouldValidateEntityType = entityType.forceValidate || !!entityType?.lifecycleActions?.validate?.length;\n return shouldValidateEntityType || hasDependentLookupAttributes(metadata);\n};\n\nconst transformValueUris = (transformFunction) =>\n evolve({\n uri: transformFunction,\n refEntity: {\n objectURI: transformFunction\n },\n refRelation: {\n objectURI: transformFunction\n }\n });\n\nconst createTransformUriFunction = (transformFunction) => {\n const transform = <T extends AttributeValue | AttributeValue[]>(value: T): T =>\n ifElse(\n Array.isArray,\n map(transform),\n pipe(\n transformValueUris(transformFunction),\n evolve({\n value: when(is(Object), map(transform))\n })\n )\n )(value);\n return transform;\n};\n\ntype FixReferenceAttrValueForValidation = (\n tempEntitiesMap: EntitiesMap,\n operation?: string\n) => (attributeValue: AttributeValue) => AttributeValue;\n\nconst fixReferenceAttrValueForValidation: FixReferenceAttrValueForValidation = (tempEntitiesMap, operation) =>\n when(\n prop('refEntity'),\n pipe(\n when(\n allPass([\n prop('refRelation'),\n always(operation === 'INSERT_ATTRIBUTE'),\n pipe(getReferencedRelationUriFromAttrValue, isTempUri, not)\n ]),\n (attrValue: ReferenceAttributeValue) => {\n const relationUriLastPart = pipe(getReferencedRelationUriFromAttrValue, getLastUriPart)(attrValue);\n const transform = createTransformUriFunction((uri) =>\n uri.replace(relationUriLastPart, relationUriLastPart + TEMP_URI_FOR_API_RELATIONS)\n );\n return transform(attrValue);\n }\n ),\n when(pipe(getReferencedEntityUriFromAttrValue, isTempUri), (attrValue: ReferenceAttributeValue) => {\n const tempEntityUri: string = getReferencedEntityUriFromAttrValue(attrValue);\n const tempEntity = tempEntitiesMap[tempEntityUri];\n const preparedTempEntity = tempEntity && prepareEntityForValidation(tempEntity, tempEntitiesMap);\n return preparedTempEntity?.attributes\n ? evolve({\n value: (value: RecordAttributesType) => ({\n ...value,\n ...preparedTempEntity.attributes\n })\n })(attrValue)\n : attrValue;\n })\n )\n );\n\nconst collectDiffForValidation = (\n entity: Entity,\n modifiedEntity: Entity,\n tempEntitiesMap: EntitiesMap,\n forceOvForUiUpdates: boolean\n): AttributesDiff => {\n const diff = compareAttributes(clone(entity.attributes), clone(modifiedEntity.attributes), true);\n const crosswalks = collectCrosswalksFromAttributes(\n clone(modifiedEntity.attributes),\n clone(modifiedEntity.crosswalks)\n );\n const diffWithCrosswalks = applyCrosswalks(diff, crosswalks, entity, forceOvForUiUpdates);\n return diffWithCrosswalks\n .map((item) =>\n evolve({\n newValue: when(\n Array.isArray,\n pipe(\n // filter reference attributes without refEntity\n filter((attrValue) => !attrValue.refRelation || attrValue.refEntity),\n map(fixReferenceAttrValueForValidation(tempEntitiesMap, item.type)),\n map(createTransformUriFunction(tempUriToApiFormat))\n )\n )\n })(item)\n )\n .concat(collectSpecialAttributesDiff(entity, modifiedEntity));\n};\n\nconst prepareEntityForValidation: (entity: Entity, tempEntitiesMap: EntitiesMap) => Entity = (\n entity,\n tempEntitiesMap\n) =>\n evolve({\n attributes: cleanAttributesWith({\n valueTransformer: pipe(\n prepareReferencedPropsForAPI,\n fixReferenceAttrValueForValidation(tempEntitiesMap),\n transformValueUris(tempUriToApiFormat)\n ),\n deleteEmptyComplex: true\n }),\n uri: tempUriToApiFormat\n })(entity);\n\nexport {collectDiffForValidation, prepareEntityForValidation, shouldUseValidationService};\n","import {evolve, isNil, last, map, pick, pipe, unless} from 'ramda';\nimport {\n AttributeError,\n AttributeType,\n AttributeValuePathItemType,\n ErrorPathItem,\n ErrorSource,\n ErrorType,\n Metadata,\n ValidationServiceError\n} from '../types';\nimport {getEntityType, getReferencedEntityAttrTypesUris} from '../metadata';\nimport {getParentUri, isFirstLevelAttributeUri, isTempUri, tempUriFromApiFormat} from '../uris';\nimport {getReferencedEntityUriFromAttrValue} from '../attributes';\nimport {evaluateErrorPath} from './errors';\nimport {findAttributeTypeByUri, isReference} from '../metadata/attributes';\n\nconst convertValidationServiceErrorType = (type: string): ErrorType => {\n type = (type || '').toUpperCase();\n switch (type) {\n case 'MISSED':\n return ErrorType.missed;\n case 'INVALID':\n default:\n return ErrorType.invalid;\n }\n};\n\nconst validationUriToRegularUri = unless(isNil, tempUriFromApiFormat);\n\nconst findErrorAttributeType = (\n metadata: Metadata,\n errorPath: ErrorPathItem[],\n {uri, attributeTypeUri}: AttributeError\n) => {\n let attributeType = attributeTypeUri && findAttributeTypeByUri(metadata, attributeTypeUri);\n if (!attributeType && uri && errorPath && errorPath.length) {\n const lastPathItem: ErrorPathItem = last(errorPath);\n if (lastPathItem.type === AttributeValuePathItemType.attributeValue) {\n attributeType = lastPathItem.valueType as AttributeType;\n }\n }\n return attributeType;\n};\n\nconst validationServiceErrorToAttributeError = (rawError: ValidationServiceError): AttributeError =>\n pipe(\n evolve({\n objectUri: validationUriToRegularUri,\n objectParentUri: validationUriToRegularUri\n }),\n (error: ValidationServiceError) => ({\n type: convertValidationServiceErrorType(error.errorType),\n attributeTypeUri: error.objectTypeUri,\n parentUri: error.objectParentUri || (error.objectUri && getParentUri(error.objectUri)),\n uri: error.objectUri,\n source: ErrorSource.validationService,\n ...pick(['message', 'severity'], error)\n })\n )(rawError);\n\nconst referenceAttributeErrorsPostProcessing =\n ({entitiesMap, metadata}) =>\n (error: AttributeError) => {\n const {uri, parentUri, path, attributeTypeUri} = error;\n if (!uri && path?.length && parentUri && isFirstLevelAttributeUri(parentUri)) {\n const parentPathItem: ErrorPathItem = last(path);\n const parentAttributeType = parentPathItem.valueType as AttributeType;\n if (\n isReference(parentAttributeType) &&\n getReferencedEntityAttrTypesUris(parentAttributeType).includes(attributeTypeUri)\n ) {\n const referencedEntityUri = getReferencedEntityUriFromAttrValue(parentPathItem.value);\n const tempEntity =\n referencedEntityUri && isTempUri(referencedEntityUri) ? entitiesMap[referencedEntityUri] : null;\n return tempEntity\n ? {\n ...error,\n parentUri: tempEntity.uri,\n path: path.concat({\n type: AttributeValuePathItemType.tempEntity,\n value: tempEntity,\n valueType: getEntityType(metadata, tempEntity.type),\n label: ''\n })\n }\n : error;\n }\n }\n return error;\n };\n\nconst convertValidationServiceErrors = (\n errors: ValidationServiceError[],\n data: Parameters<typeof evaluateErrorPath>[0]\n): AttributeError[] =>\n map(\n pipe(\n validationServiceErrorToAttributeError,\n (error: AttributeError) => {\n const {metadata} = data;\n const {uri, parentUri} = error;\n const errorPath = evaluateErrorPath(data, uri);\n const errorParentPath = errorPath?.length ? errorPath.slice(0, -1) : evaluateErrorPath(data, parentUri);\n const attributeType = findErrorAttributeType(metadata, errorPath, error);\n return {\n ...error,\n attributeType,\n attributeTypeUri: attributeType?.uri,\n uri: (errorPath && last(errorPath)?.value?.uri) || uri,\n parentUri: (errorParentPath && last(errorParentPath)?.value?.uri) || parentUri,\n path: uri ? errorPath : errorParentPath\n };\n },\n referenceAttributeErrorsPostProcessing(data)\n )\n )(errors);\n\nexport {convertValidationServiceErrors};\n","import {type} from 'ramda';\nimport {DateRangeFilter, DateRangeTypes} from '../types';\n\nexport const isDateRangeValid = (value: DateRangeFilter) => {\n if (value.type === DateRangeTypes.AGO || value.type === DateRangeTypes.WITHIN) {\n const [amount, unit] = value.period;\n return type(amount) === 'Number' && type(unit) === 'String' && (amount as number) > 0;\n } else if (value.type === DateRangeTypes.BETWEEN) {\n const [startDate, endDate] = value.period;\n return startDate instanceof Date && endDate instanceof Date;\n }\n};\n","import moment from 'moment';\nimport {DateRangeFilter, DateRangeTypes, Source, TEntityType} from '../types';\nimport {escapeQueryValue} from './filterValueHelpers';\nimport {isDateRangeValid} from '../validation';\nimport {durationToTimestamp} from '../utils';\n\nconst buildUserFilterClause = (user: string) => {\n return `equals(user, '${escapeQueryValue(user)}')`;\n};\n\nconst buildSourceFilterClause = (source: Source) => {\n return `equals(items.delta.sources, '${source.abbreviation}')`;\n};\n\nconst buildEntityTypeFilterClause = (entityType: TEntityType) => {\n return `equals(items.objectType, '${entityType.uri}')`;\n};\n\nconst buildDateRangeFilterClause = (dateRange: DateRangeFilter) => {\n const {period, type} = dateRange;\n if (!isDateRangeValid(dateRange)) return '';\n switch (type) {\n case DateRangeTypes.WITHIN: {\n return `gte(timestamp, ${durationToTimestamp(period)})`;\n }\n case DateRangeTypes.AGO: {\n return `lte(timestamp, ${durationToTimestamp(period)})`;\n }\n case DateRangeTypes.BETWEEN: {\n const [start, end] = period;\n return `range(timestamp, ${start.valueOf()}, ${moment(end).endOf('date').valueOf()})`;\n }\n default: {\n return '';\n }\n }\n};\n\nconst buildEntityUriFilterClause = (entityUri: string) => {\n const filters = [\n `equals(items.objectUri, '${entityUri}')`,\n `equals(items.startObjectUri, '${entityUri}')`,\n `equals(items.endObjectUri, '${entityUri}')`\n ];\n return filters.join(' or ');\n};\n\nexport {\n buildUserFilterClause,\n buildSourceFilterClause,\n buildEntityTypeFilterClause,\n buildEntityUriFilterClause,\n buildDateRangeFilterClause\n};\n","import {concat, pipe, startsWith, unless, prop, filter, map, reject} from 'ramda';\nimport {addGlobalFilterToQuery, buildFilterQueryString} from '../../filters';\nimport {ActivityFilters, FilterOptions} from '../../constants';\nimport {isAvailableEntityType} from '../../metadata';\nimport {rawRequest} from '../index';\nimport {isEmptyValue} from '../../utils';\n\nconst addQuestionSignIfNeeded = unless(startsWith('?'), concat('?'));\n\nexport const getFacets = ({query, body}) => {\n query = addQuestionSignIfNeeded(query);\n return rawRequest(`/entities/_facets${query}`, {\n method: 'POST',\n body: JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\nexport const collectSearchParamsForTotal = (filters, options = {}, value = '') => {\n const entityFilters = [...filters];\n if (value) {\n entityFilters.push({\n filter: 'containsWordStartingWith',\n fieldName: 'attributes',\n values: [value]\n });\n }\n const searchParams = {\n filter: pipe(buildFilterQueryString(), addGlobalFilterToQuery(options.globalFilter))(entityFilters),\n activeness: options.activityFilter || ActivityFilters.ACTIVE_ONLY,\n options: options.searchOptions\n };\n return reject(isEmptyValue, searchParams);\n};\n\nexport const getTotals = (filters = [], options, value) => {\n return rawRequest('/entities/_total', {\n method: 'POST',\n body: JSON.stringify(collectSearchParamsForTotal(filters, options, value))\n });\n};\n\nexport const getTotalsForQuery = (query) => {\n return rawRequest('/entities/_total', {\n method: 'POST',\n body: JSON.stringify(Object.fromEntries(new URLSearchParams(query).entries()))\n });\n};\n\nexport const typeAheadSearch = (entityTypes, searchValue, options = {}) => {\n const entitiesForRequest = pipe(filter(isAvailableEntityType), map(prop('uri')))(entityTypes);\n const entityFilter = {\n filter: FilterOptions.EQUALS,\n fieldName: 'type',\n values: entitiesForRequest\n };\n const searchFilter = options.isRawFilter\n ? {\n rawFilter: searchValue\n }\n : {\n filter: 'containsWordStartingWith',\n fieldName: 'attributes',\n values: [searchValue]\n };\n\n const typeAheadFilter = pipe(\n buildFilterQueryString(),\n addGlobalFilterToQuery(options.globalFilter)\n )([entityFilter, searchFilter]);\n\n const body = reject(isEmptyValue, {\n filter: typeAheadFilter,\n select: 'uri,label,type,roles,secondaryLabel,defaultProfilePicValue',\n scoreEnabled: true,\n activeness: options.activityFilter || ActivityFilters.ACTIVE_ONLY,\n max: options.max || 4,\n options: options.searchByOv ? 'searchByOv' : ''\n });\n\n return rawRequest('/entities/_typeAheadSearch', {\n method: 'POST',\n body: JSON.stringify(body)\n });\n};\n","import {isNil, pipe, reject} from 'ramda';\nimport {generateQueryString} from './utils';\nimport {addGlobalFilterToQuery, buildFilterQueryString} from '../../filters';\nimport {getFacets} from './search';\n\nconst getSearchQuery = pipe(reject(isNil), generateQueryString);\n\nconst getFacetedAttributeDataWithSearchParams = ({fieldName, searchParams = [], options = {}}) => {\n const {globalFilter, activityFilter, searchOptions, max, pageNo} = options;\n const filter = pipe(buildFilterQueryString(), addGlobalFilterToQuery(globalFilter))(searchParams);\n\n const searchQuery = {\n filter: filter || null,\n activeness: activityFilter || 'active',\n options: searchOptions || null\n };\n\n const query = getSearchQuery(searchQuery);\n\n const body = [\n {\n fieldName,\n pageSize: max || 20,\n pageNo: pageNo || 1,\n orderType: options.orderType || 'reversedCount'\n }\n ];\n\n return getFacets({query, body});\n};\n\nconst getFacetedAttributeData = ({fieldName, searchValue = '', options}) => {\n const searchParams = searchValue.length\n ? [\n {\n filter: 'containsWordStartingWith',\n fieldName,\n values: [searchValue]\n }\n ]\n : [];\n\n return getFacetedAttributeDataWithSearchParams({fieldName, searchParams, options});\n};\n\nexport {getFacetedAttributeData, getFacetedAttributeDataWithSearchParams};\n","import {rawRequest} from '../index';\nimport {generateValuableQueryString} from './utils';\nimport {addGlobalFilterToQuery, buildFilterQueryString} from '../../filters';\nimport {filter, pipe, prop, identity, isNil, reject} from 'ramda';\nimport {isTempUri} from '../../uris';\nimport {attributeUriToSearchUri} from '../../metadata';\nimport {generateQueryString} from './utils';\nimport {isEmptyValue} from '../../utils';\n\nconst SELECT_DEFAULT = 'uri,label,type,roles,secondaryLabel,defaultProfilePicValue';\n\nconst collectSearchParamsForFilteredEntities = (filters, options = {}, value = '') => {\n const entityFilters = [\n ...filters,\n {\n filter: 'containsWordStartingWith',\n fieldName: 'attributes',\n values: [value]\n }\n ];\n\n const searchParams = reject(isEmptyValue, {\n filter: pipe(buildFilterQueryString(), addGlobalFilterToQuery(options.globalFilter))(entityFilters),\n max: options.max || 5,\n offset: options.offset,\n activeness: options.activityFilter || 'active',\n select: options.select || SELECT_DEFAULT,\n scoreEnabled: options.scoreEnabled != null ? options.scoreEnabled : true,\n sort: options.sort || null,\n order: options.order || null,\n options: options.searchOptions\n });\n\n return searchParams;\n};\n\nexport const buildFilteredEntitiesUrl = (filters, options = {}, value = '') => {\n const searchParams = collectSearchParamsForFilteredEntities(filters, options, value);\n return `/entities${generateValuableQueryString(searchParams)}`;\n};\n\nconst getFilteredEntities = (filters = [], options, value) => {\n const searchParams = collectSearchParamsForFilteredEntities(filters, options, value);\n return rawRequest('/entities/_search', {\n method: 'POST',\n body: JSON.stringify(searchParams)\n });\n};\n\nconst getEntitySecondaryLabel = (uri) => getEntity(uri, {select: 'secondaryLabel'});\n\nconst getEntitiesByUris = (uris, options) => {\n const {select = SELECT_DEFAULT, searchOptions, defaultMaxValues} = options || {};\n\n const body = {\n select,\n uris,\n options: searchOptions\n };\n\n if (defaultMaxValues) {\n body.defaultMaxValues = defaultMaxValues;\n }\n\n return rawRequest('/entities/_byUris', {\n method: 'POST',\n body,\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\nconst getTmpValues = filter(pipe(prop('uri'), isTempUri));\n\nconst getPagedEntity = (params) => {\n const {\n parentUri,\n attributeTypeUri,\n values = [],\n offset,\n defaultMaxValues,\n tenant,\n apiPath,\n searchQuery,\n filters = [],\n sorting,\n options = 'ovOnly'\n } = params;\n const valuesCount = values.length;\n const tmpValuesCount = getTmpValues(values).length;\n\n const attributesPaging = {\n [attributeTypeUri]: {\n max: defaultMaxValues,\n offset: isNil(offset) ? valuesCount - tmpValuesCount : offset\n }\n };\n\n const attributeSearchUri = attributeUriToSearchUri(attributeTypeUri);\n\n const body = {\n attributesPaging,\n defaultMaxValues,\n options: options,\n select: 'crosswalks,' + attributeSearchUri\n };\n\n const filtersWithSearch = [\n ...filters,\n {\n filter: 'containsWordStartingWith',\n fieldName: attributeSearchUri,\n values: [searchQuery]\n }\n ];\n const filter = pipe(buildFilterQueryString(), addGlobalFilterToQuery(options.globalFilter))(filtersWithSearch);\n if (filter) {\n body.filter = filter;\n }\n if (sorting) {\n body.sort = sorting.field;\n body.order = sorting.order;\n }\n\n const data = {\n method: 'POST',\n body: JSON.stringify(body)\n };\n\n const url = `${apiPath}/api/${tenant}/${parentUri}/_object`;\n return rawRequest(url, data);\n};\n\nconst getDtssEntityUrl = (uri) => `entities?filter=equals(uri,'${uri}')&offset=0`;\n\nconst defaultGetEntityOptions = {\n options: 'sendHidden,addRefAttrUriToCrosswalk'\n};\n\nconst getEntity = (uri, options = defaultGetEntityOptions) =>\n rawRequest(`/${uri}${generateValuableQueryString(options)}`);\n\nconst getEntityBySurvivorshipGroupUri = (uri, survivorshipGroupUri) =>\n getEntity(uri, {...defaultGetEntityOptions, explicitSurvivorshipGroup: survivorshipGroupUri});\n\nconst saveEntity = (entity, uriPreprocessor = identity) => {\n const data = {\n method: 'POST',\n body: JSON.stringify([entity])\n };\n const url = uriPreprocessor('/entities');\n return rawRequest(url, data);\n};\n\nconst removeEntity = (entityUri) => {\n const data = {\n method: 'DELETE'\n };\n const url = `/${entityUri}?options=sendHidden,addRefAttrUriToCrosswalk`;\n return rawRequest(url, data);\n};\n\nconst cloneEntity = (entityUri, body, valuesToCopy) => {\n const data = {\n method: 'POST',\n body: JSON.stringify(body)\n };\n const url = `/${entityUri}/_clone${generateValuableQueryString({executeLCA: false, valuesToCopy})}`;\n return rawRequest(url, data);\n};\n\nconst getEntitiesStats = ({facet, startTime, endTime, types}) => {\n const query = generateQueryString({facet, startTime, endTime, types});\n return rawRequest(`/entities/_events/_total${query}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\nconst insertDefaultImageByAttrUri = (entityUri, attributeUri) => {\n return rawRequest(`/${entityUri}/_setDefaultProfilePicByAttributeValueURI`, {\n method: 'PUT',\n body: attributeUri\n });\n};\n\nconst entityCumulativeUpdate = ({uri, diff, uriPreprocessor = identity}) => {\n return rawRequest(\n uriPreprocessor(`/${uri}/_update?options=sendHidden,updateAttributeUpdateDates,addRefAttrUriToCrosswalk`),\n {\n method: 'POST',\n body: JSON.stringify(diff)\n }\n );\n};\n\nconst getEntityUpdatedTime = (uri) => getEntity(uri, {select: 'updatedTime'});\n\nexport {\n entityCumulativeUpdate,\n getEntitiesByUris,\n getFilteredEntities,\n getEntitySecondaryLabel,\n getEntityBySurvivorshipGroupUri,\n getEntityUpdatedTime,\n getPagedEntity,\n getEntity,\n getDtssEntityUrl,\n saveEntity,\n getEntitiesStats,\n insertDefaultImageByAttrUri,\n removeEntity,\n cloneEntity\n};\n","import {rawRequest} from '../index';\nimport {pipe, reject} from 'ramda';\nimport {generateQueryString} from './utils';\nimport {isEmptyValue} from '../../utils';\nimport {Interaction} from '../../types';\n\ntype InteractionsResponse = {\n fetchedAll: boolean;\n interactions: Interaction[];\n totalFetched: number;\n};\n\ntype GetInteractionsProps = {\n entityUri: string;\n offset: number;\n max: number;\n sort: string;\n order: string;\n filter: string;\n};\n\nconst getInteractions = ({entityUri, offset, max, filter, sort, order}: GetInteractionsProps) => {\n const options = {offset, max, filter, sort, order};\n const getSearchQuery = pipe(reject(isEmptyValue), generateQueryString);\n const query = getSearchQuery(options);\n return rawRequest<InteractionsResponse>(`/${entityUri}/_interactions${query}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\nexport {getInteractions};\n","import {rawRequest} from '../index';\nimport i18n from 'ui-i18n';\nimport {getRequestErrorMessage} from '../../utils/errors';\n\nexport const uploadFileForSearch = (file: File) => {\n const data = new FormData();\n data.append('file', file);\n\n return rawRequest('/valueList', {\n method: 'POST',\n headers: {\n 'Content-Type': null\n },\n body: data\n }).catch((error) => {\n const errorMessage = getRequestErrorMessage(error, i18n.text(\"Can't upload file\"));\n return Promise.reject(errorMessage);\n });\n};\n","import {rawRequest} from '../index';\nimport {always, evolve, pick, pipe} from 'ramda';\nimport {generateQueryString} from './utils';\n\nconst getSavedSearches = ({\n containsWordStartingWith,\n sortBy,\n sortOrder,\n favoriteOnly,\n offset,\n max,\n countResults = false,\n findPublic = true,\n includes,\n startsWith\n}) => {\n const options = {countResults, findPublic};\n const query = generateQueryString(options);\n return rawRequest(`/personal/findSavedSearches${query}`, {\n method: 'POST',\n body: JSON.stringify({\n containsWordStartingWith,\n sortBy,\n sortOrder,\n favoriteOnly,\n offset,\n max,\n includes,\n startsWith\n }),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\nconst getSavedSearch = (id) =>\n rawRequest(`/personal/savedSearches/${id}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n\nconst createSavedSearch = (savedSearch) =>\n rawRequest('/personal/savedSearches', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(savedSearch)\n });\n\nconst updateSavedSearch = (savedSearch) => {\n const {uri} = savedSearch;\n const getSavedSearchBody = pick(['description', 'isFavorite', 'isPublic', 'name', 'query', 'uiState']);\n return rawRequest(`/personal/${uri}`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(getSavedSearchBody(savedSearch))\n });\n};\n\nconst deleteSavedSearch = ({uri}) =>\n rawRequest(`/personal/${uri}`, {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n\nconst markSavedSearchAsPublic = (savedSearch, isPublic) =>\n pipe(evolve({isPublic: always(isPublic)}), updateSavedSearch)(savedSearch);\n\nconst markSavedSearchAsFavorite = (savedSearch, isFavorite) =>\n pipe(evolve({isFavorite: always(isFavorite)}), updateSavedSearch)(savedSearch);\n\nexport {\n getSavedSearches,\n getSavedSearch,\n createSavedSearch,\n updateSavedSearch,\n deleteSavedSearch,\n markSavedSearchAsPublic,\n markSavedSearchAsFavorite\n};\n","import {curry, evolve, map, omit, pathEq, pick, pipe, prop, when} from 'ramda';\nimport {generateValuableQueryString} from '../utils';\nimport {ActivityFilter, RelationsRequestConfig} from '../../../types';\n\nconst ENTRY_FIELDS = ['max', 'offset', 'filter'];\nconst processNextEntry = curry(\n (config: RelationsRequestConfig, entry: RelationsRequestConfig | RelationsRequestConfig['nextEntry']) => {\n return entry.nextEntry\n ? evolve({nextEntry: processNextEntry(config)}, entry)\n : {\n ...entry,\n ...pick(ENTRY_FIELDS, config)\n };\n }\n);\n\n// * remove after RP-49787 will be fixed *\nconst getActivenessEnabledValue = (configs: RelationsRequestConfig[]) => {\n if (\n configs.length === 1 &&\n (pathEq([0, 'activeness', 'entity'], ActivityFilter.ALL, configs) ||\n pathEq([0, 'activeness', 'relation'], ActivityFilter.ALL, configs))\n ) {\n return false;\n }\n};\nconst removeActivenessFromConfig = omit(['activeness']);\n// *\n\nconst buildRelationsForEntityRequest = (\n entityUri: string,\n configs: RelationsRequestConfig[],\n reqOptions: Record<string, unknown> = {}\n) => {\n const activenessEnabled = getActivenessEnabledValue(configs);\n const {searchByOv} = reqOptions;\n configs = map(\n pipe(\n when(prop('nextEntry'), (config) => pipe(processNextEntry(config), omit(ENTRY_FIELDS))(config)),\n removeActivenessFromConfig,\n omit(['labels'])\n )\n )(configs);\n\n const urlSearch = {\n limitCreditsConsumption: true,\n activeness_enabled: activenessEnabled,\n options: searchByOv ? 'searchByOv' : undefined\n };\n const url = `/${entityUri}/_connections${generateValuableQueryString(urlSearch)}`;\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(configs)\n };\n return {url, options};\n};\n\nconst processRelationsForEntityResponse = map((responseItem) => {\n let entry = responseItem;\n while (entry && entry.nextEntry) {\n entry = entry.nextEntry;\n }\n return entry;\n});\n\nexport {buildRelationsForEntityRequest, processRelationsForEntityResponse};\n","import {rawRequest} from '../index';\nimport {wrapInArrayIfNeeded} from '../../utils';\nimport {__, concat, identity, isNil, pipe, prop, reject, startsWith, unless} from 'ramda';\nimport {cleanAttributes} from '../../attributes';\nimport {compareActivenessAttributes, compareAttributes} from '../../entity/editMode/AttributesDiff';\nimport {buildRelationsForEntityRequest, processRelationsForEntityResponse} from './helpers/relations';\nimport {Directions} from '../../constants';\nimport {Relation, CreateRelationResponse, RecordAttributesType} from '../../types';\n\nconst removeEmptyValues = reject(isNil);\n\nconst addSlashIfNeeded = unless(startsWith('/'), concat('/'));\n\nconst getRelation = (relationUri: string) => {\n const uri = addSlashIfNeeded(relationUri);\n return rawRequest<Relation>(uri, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\nconst removeRelation = (relationUri: string, uriPreprocessor: (_: string) => string = identity) => {\n const getUri = pipe(uriPreprocessor, addSlashIfNeeded);\n return rawRequest(getUri(relationUri), {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\ntype CreateRelationProps = {\n startEntityUri: string;\n endEntityUri: string;\n relationType: string;\n attributes: RecordAttributesType;\n startDate: number;\n endDate: number;\n uriPreprocessor?: (uri: string) => string;\n};\n\nconst createRelation = ({\n startEntityUri,\n endEntityUri,\n relationType,\n attributes,\n startDate,\n endDate,\n uriPreprocessor = identity\n}: CreateRelationProps) => {\n const data = {\n type: relationType,\n startObject: {objectURI: startEntityUri},\n endObject: {objectURI: endEntityUri},\n attributes: attributes ? cleanAttributes()(attributes) : null,\n startDate,\n endDate\n };\n\n const prepareBody = pipe(removeEmptyValues, wrapInArrayIfNeeded, JSON.stringify);\n return rawRequest<CreateRelationResponse>(uriPreprocessor('/relations'), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: prepareBody(data)\n });\n};\n\ntype UpdateRelationProps = {\n oldRelation: Relation;\n newRelation: Relation;\n uriPreprocessor?: (uri: string) => string;\n};\n\nconst updateRelation = ({oldRelation, newRelation, uriPreprocessor = identity}: UpdateRelationProps) => {\n const getAttributes = prop('attributes');\n const getUri = pipe(\n prop('uri'),\n concat(__, '/_update?options=sendHidden,updateAttributeUpdateDates,addRefAttrUriToCrosswalk'),\n addSlashIfNeeded,\n uriPreprocessor\n );\n const diff = compareAttributes(getAttributes(oldRelation), getAttributes(newRelation), false).concat(\n compareActivenessAttributes(oldRelation, newRelation)\n );\n return rawRequest<Relation>(getUri(newRelation), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(diff)\n });\n};\n\ntype GetRelationsForEntity = (...args: Parameters<typeof buildRelationsForEntityRequest>) => Promise<Relation>;\n\nconst getRelationsForEntity: GetRelationsForEntity = (entityUri, configs, reqOptions) => {\n const {url, options} = buildRelationsForEntityRequest(entityUri, configs, reqOptions);\n return rawRequest(url, options).then(processRelationsForEntityResponse);\n};\n\ntype RateRelationBody = {\n comment: string;\n value: number;\n};\n\nconst rateRelation = (relationUri: string, body: RateRelationBody) => {\n return rawRequest(`/${relationUri}/rate`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n });\n};\n\ntype RelationProps = {\n relatedEntityUri: string;\n relationType: string;\n relationDirection: Directions;\n};\n\nconst ignoreSuggestedRelation = (\n entityUri: string,\n {relatedEntityUri, relationType, relationDirection}: RelationProps\n) => {\n const data: {uri: string; inRelations?: [string]; outRelations?: [string]} = {\n uri: relatedEntityUri\n };\n if (relationDirection === Directions.IN) {\n data.inRelations = [relationType];\n } else {\n data.outRelations = [relationType];\n }\n return rawRequest(`/${entityUri}/_ignoreSuggestedRelationship`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(data)\n });\n};\n\nexport {\n getRelation,\n removeRelation,\n createRelation,\n updateRelation,\n getRelationsForEntity,\n rateRelation,\n ignoreSuggestedRelation\n};\n","import {rawRequest} from '../index';\nimport {RecentSearch} from './../../types';\nimport {generateValuableQueryString} from './utils';\n\ntype GetRecentSearchesParameters = {\n tenant: string;\n environment: string;\n servicesPath?: string;\n application?: string;\n};\n\ntype GetRecentSearchesResponse = {\n result: RecentSearch[];\n success: boolean;\n};\n\nconst getRecentSearches = ({servicesPath = '', environment, tenant, application}: GetRecentSearchesParameters) => {\n const query = generateValuableQueryString({environment, tenant});\n const url = `${servicesPath}/recentSearches${query}`;\n return rawRequest<GetRecentSearchesResponse>(url, {\n method: 'GET',\n application,\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\ntype CreateRecentSearchResponse = {\n success: boolean;\n};\n\nconst createRecentSearch = (recentSearch: RecentSearch) =>\n rawRequest<CreateRecentSearchResponse>('/recentSearches', {\n method: 'POST',\n application: 'explorer',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(recentSearch)\n });\n\ntype DeleteRecentSearchParameters = {\n tenant: string;\n environment: string;\n createdDate: number;\n};\n\ntype DeleteRecentSearchResponse = {\n success: boolean;\n};\n\nconst deleteRecentSearch = ({environment, tenant, createdDate}: DeleteRecentSearchParameters) => {\n const query = generateValuableQueryString({environment, tenant, createdDate});\n const url = `/recentSearches${query}`;\n return rawRequest<DeleteRecentSearchResponse>(url, {\n method: 'DELETE',\n application: 'explorer',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\nexport {getRecentSearches, createRecentSearch, deleteRecentSearch};\n","import {rawRequest} from '../index';\n\nimport {isNil, pipe, reject} from 'ramda';\nimport {generateQueryString} from './utils';\n\nconst defaultQueryParams = {\n select: 'label,secondaryLabel,name,type,startDate,endDate'\n};\nconst removeEmptyValues = reject(isNil);\nconst getSearchQuery = pipe(removeEmptyValues, generateQueryString);\n\nexport const getTree = ({uri, graphTypes, activenessDate, isReversed, signal}) => {\n const graphTypesObject = graphTypes ? {graphTypeURIs: graphTypes} : {};\n const activenessDateObject = activenessDate ? {activeness_date: activenessDate} : {};\n const isReversedObject = isReversed ? {options: 'reverseRelations'} : {};\n const options = {\n ...defaultQueryParams,\n ...graphTypesObject,\n ...activenessDateObject,\n ...isReversedObject,\n limitCreditsConsumption: true\n };\n const query = getSearchQuery(options);\n return rawRequest(`/${uri}/_tree${query}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n },\n signal\n });\n};\n\nexport const getPathsTree = ({uri, graphUri}) => {\n const graphTypesObject = graphUri ? {graphTypeURIs: graphUri} : {};\n const options = {...defaultQueryParams, ...graphTypesObject, select: 'label,secondaryLabel,name,type'};\n const query = getSearchQuery(options);\n return rawRequest(`/${uri}/_parents${query}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\nexport const getHops = ({\n uri,\n graphTypes,\n activenessDate,\n filterLastLevel = false,\n deep = 1,\n limitCreditsConsumption,\n max,\n signal\n}) => {\n const graphTypesObject = graphTypes ? {graphTypeURIs: graphTypes} : {};\n const maxObject = max ? {max} : {};\n const activenessDateObject = activenessDate ? {activeness_date: activenessDate} : {};\n const limitCreditsConsumptionObject = limitCreditsConsumption ? {limitCreditsConsumption} : {};\n const options = {\n ...defaultQueryParams,\n ...graphTypesObject,\n ...activenessDateObject,\n ...limitCreditsConsumptionObject,\n ...maxObject,\n filterLastLevel,\n deep\n };\n const query = getSearchQuery(options);\n return rawRequest(`/${uri}/_hops${query}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n },\n signal\n });\n};\n","import {rawRequest} from '../index';\nimport {generateValuableQueryString} from './utils';\n\nconst generateId = (): string => {\n function id() {\n return (((1 + Math.random()) * 65536) | 0).toString(16).substring(1);\n }\n\n function guid() {\n return id() + '-' + id() + '-' + id() + id();\n }\n return guid();\n};\n\nconst ACTIVITIES_URL = '/activities';\n\ntype CreateActivityParams = {\n label: string;\n description: string;\n};\ntype CreateActivityResponse = {\n status: string;\n};\nconst createActivity = ({label, description}: CreateActivityParams): Promise<CreateActivityResponse> =>\n rawRequest<CreateActivityResponse>(ACTIVITIES_URL, {\n method: 'POST',\n body: {\n label: label,\n description: description\n },\n headers: {\n 'Content-Type': 'application/json',\n ActivityID: generateId()\n }\n });\n\nenum ACTIVITY_TYPES {\n userSearch = 'USER_SEARCH',\n profileView = 'USER_PROFILE_VIEW'\n}\n\ntype GetActivitiesParams = {\n filter: string;\n};\n\ntype PaginationParams = {\n max: number;\n offset: number;\n};\n\ntype TotalResponse = {\n total: number;\n};\nconst getActivities = (options: GetActivitiesParams & PaginationParams): Promise<unknown[]> => {\n const query = generateValuableQueryString(options);\n return rawRequest(ACTIVITIES_URL + query, {\n method: 'GET'\n });\n};\n\nconst getActivitiesTotal = (options: GetActivitiesParams): Promise<TotalResponse> => {\n const query = generateValuableQueryString(options);\n return rawRequest(`${ACTIVITIES_URL}/_total${query}`, {\n method: 'GET'\n });\n};\n\ntype GetProfileActivitiesParams = GetActivitiesParams & {\n entityUri: string;\n};\n\nconst getProfileActivities = (options: GetProfileActivitiesParams & PaginationParams): Promise<unknown[]> => {\n const {entityUri, ...otherOptions} = options;\n const query = generateValuableQueryString(otherOptions);\n return rawRequest(`/${entityUri}/_activities${query}`, {\n method: 'GET'\n });\n};\n\nconst getProfileActivitiesTotal = (options: GetProfileActivitiesParams): Promise<TotalResponse> => {\n const {entityUri, ...otherOptions} = options;\n const query = generateValuableQueryString(otherOptions);\n return rawRequest(`/${entityUri}/_activities/_total${query}`, {\n method: 'GET'\n });\n};\n\nexport {\n createActivity,\n getActivities,\n getActivitiesTotal,\n getProfileActivities,\n getProfileActivitiesTotal,\n ACTIVITY_TYPES\n};\n","import {andThen, curry, last, map, pipe, reject, isNil} from 'ramda';\nimport {\n AddCommentForTaskParams,\n AssigneeResponse,\n GetAssigneeForTaskParams,\n GroupTaskForTenant,\n ProcessDefintionsResponse,\n RunTaskActionParams,\n StartProcessFromQueryParams,\n StartProcessInstanceParams,\n StartProcessResponse,\n TasksByIdParams,\n TasksForEntityParams,\n TasksForTenantParams,\n UpdateAssigneeForTaskParams,\n UpdatedTaskResponse,\n UpdateDueDateForTaskParams,\n UpdatePriorityForTaskParams,\n UpdateTaskParams,\n UrlParams,\n WorkflowPathParams,\n WorkflowRequestParams\n} from '../../types/network/workflow';\nimport {rawRequest} from '../index';\nimport {WorkflowTaskData, WorkflowTasksResponse} from '../../types';\nimport {generateValuableQueryString} from './utils';\nimport {isEmptyValue} from '../../utils';\n\nconst createUrl = ({workflowPath, tenant, url}: UrlParams): string => {\n const requestUrl = tenant ? `${tenant}${url}` : url;\n return `${workflowPath}/workflow/${requestUrl}`;\n};\n\nexport const startProcessFromQuery = ({\n workflowPath,\n processType,\n searchString,\n tenant,\n environment\n}: StartProcessFromQueryParams): Promise<StartProcessResponse> => {\n const body = {processType, searchString};\n const url = createUrl({url: '/processInstances/_generateFromQuery?background=true', workflowPath, tenant});\n return rawRequest<StartProcessResponse>(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n EnvironmentURL: environment\n },\n body: JSON.stringify(body)\n });\n};\n\nexport const sendWorkflowRequest = ({\n workflowPath,\n url,\n tenant,\n method,\n data,\n headers\n}: WorkflowRequestParams): Promise<any> => {\n let newUrl = url;\n if (!url.includes('http:') && !url.includes('https:')) {\n newUrl = createUrl({url, workflowPath, tenant});\n }\n return rawRequest(newUrl, {\n method: method || 'GET',\n body: JSON.stringify(data),\n headers: {\n 'Content-Type': 'application/json',\n ...(headers ?? {})\n }\n });\n};\n\nexport const startProcessInstanceByPairs = ({\n workflowPath,\n processType,\n objectURIs,\n tenant,\n environment\n}: StartProcessInstanceParams): Promise<StartProcessResponse> => {\n const getPairs = (array) => array.map((item) => [array[0], item]).slice(1);\n const url = createUrl({url: '/processInstances', workflowPath, tenant});\n const sendStartProcessInstanceRequest = curry((url, processType, objectURIs) => {\n const body = {processType, objectURIs};\n return rawRequest<StartProcessResponse>(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n EnvironmentURL: environment\n },\n body: JSON.stringify(body)\n });\n });\n const sendRequests = pipe(\n getPairs,\n map(sendStartProcessInstanceRequest(url, processType)),\n (request) => Promise.all(request),\n andThen(last)\n );\n return sendRequests(objectURIs);\n};\n\nexport const startProcessInstance = ({\n workflowPath,\n processType,\n objectURIs,\n tenant,\n environment,\n comment\n}: StartProcessInstanceParams): Promise<StartProcessResponse> => {\n const url = createUrl({url: '/processInstances', workflowPath, tenant});\n const basicBody = {processType, objectURIs};\n const body = comment ? {...basicBody, comment} : basicBody;\n\n return rawRequest<StartProcessResponse>(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n EnvironmentURL: environment\n },\n body: JSON.stringify(body)\n });\n};\n\nexport const getTasksForEntity = ({\n workflowPath,\n environment,\n tenant,\n entityUri,\n filter = {},\n includeClosed\n}: TasksForEntityParams): Promise<WorkflowTasksResponse> => {\n const isGetRequest = includeClosed;\n if (includeClosed) {\n filter.objectURI = entityUri;\n }\n const url = createUrl({\n url: `/tasks${isGetRequest ? generateValuableQueryString(filter) : ''}`,\n workflowPath,\n tenant\n });\n const bodyPart = isGetRequest\n ? {}\n : {\n body: JSON.stringify({\n objectURIs: [entityUri],\n ...reject(isEmptyValue, filter)\n })\n };\n return rawRequest<WorkflowTasksResponse>(url, {\n method: isGetRequest ? 'GET' : 'POST',\n headers: {\n 'Content-Type': 'application/json',\n EnvironmentURL: environment\n },\n ...bodyPart\n });\n};\n\nexport const getTasksForTenant = ({\n workflowPath,\n environment,\n tenant,\n assignee,\n max,\n offset\n}: TasksForTenantParams): Promise<WorkflowTasksResponse> => {\n const url = createUrl({url: '/tasks', workflowPath, tenant});\n const body = pipe(reject(isNil), JSON.stringify)({assignee, max, offset});\n return rawRequest<WorkflowTasksResponse>(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n EnvironmentURL: environment\n },\n body\n });\n};\n\nexport const getGroupTasksForTenant = ({\n workflowPath,\n environment,\n tenant,\n filters,\n max,\n offset\n}: GroupTaskForTenant): Promise<WorkflowTasksResponse> => {\n const url = createUrl({url: '/groupTasks', workflowPath, tenant});\n const body = pipe(reject(isNil), JSON.stringify)({max, offset, ...filters});\n return rawRequest(url, {\n method: 'POST',\n headers: {\n EnvironmentURL: environment\n },\n body\n });\n};\n\nexport const getTaskById = ({\n workflowPath,\n environment,\n tenant,\n taskId\n}: TasksByIdParams): Promise<WorkflowTaskData> => {\n const url = createUrl({url: `/tasks/${taskId}`, workflowPath, tenant});\n return rawRequest(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n EnvironmentURL: environment\n }\n });\n};\n\nexport const updateTask = ({\n workflowPath,\n environment,\n tenant,\n taskId,\n body\n}: UpdateTaskParams): Promise<UpdatedTaskResponse> => {\n const url = createUrl({url: `/tasks/${taskId}`, workflowPath, tenant});\n return rawRequest<UpdatedTaskResponse>(url, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n EnvironmentURL: environment\n },\n body: JSON.stringify(body)\n });\n};\n\nexport const addCommentForTask = ({\n workflowPath,\n environment,\n tenant,\n taskId,\n comment\n}: AddCommentForTaskParams): Promise<UpdatedTaskResponse> => {\n const body = {processInstanceComment: comment};\n return updateTask({\n workflowPath,\n environment,\n tenant,\n taskId,\n body\n });\n};\n\nexport const getAssigneeForTask = ({\n workflowPath,\n environment,\n tenant,\n taskId\n}: GetAssigneeForTaskParams): Promise<AssigneeResponse> => {\n const url = createUrl({url: '/assignee', workflowPath, tenant});\n const body = {tasks: [taskId]};\n return rawRequest<AssigneeResponse>(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n EnvironmentURL: environment\n },\n body: JSON.stringify(body)\n });\n};\n\nexport const updateAssigneeForTask = ({\n workflowPath,\n environment,\n tenant,\n taskId,\n assignee\n}: UpdateAssigneeForTaskParams): Promise<UpdatedTaskResponse> => {\n const body = {assignee};\n return updateTask({\n workflowPath,\n environment,\n tenant,\n taskId,\n body\n });\n};\n\nexport const updateDueDateForTask = ({\n workflowPath,\n environment,\n tenant,\n taskId,\n dueDate\n}: UpdateDueDateForTaskParams): Promise<UpdatedTaskResponse> => {\n const body = {dueDate};\n return updateTask({\n workflowPath,\n environment,\n tenant,\n taskId,\n body\n });\n};\n\nexport const updatePriorityForTask = ({\n workflowPath,\n environment,\n tenant,\n taskId,\n priority\n}: UpdatePriorityForTaskParams): Promise<UpdatedTaskResponse> => {\n const body = {priority};\n return updateTask({\n workflowPath,\n environment,\n tenant,\n taskId,\n body\n });\n};\n\nexport const runTaskAction = ({\n workflowPath,\n environment,\n tenant,\n taskId,\n action,\n processInstanceComment\n}: RunTaskActionParams): Promise<UpdatedTaskResponse> => {\n const url = createUrl({url: `/tasks/${taskId}/_action`, workflowPath, tenant});\n const body = JSON.stringify({\n action,\n processInstanceComment\n });\n return rawRequest<UpdatedTaskResponse>(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n EnvironmentURL: environment\n },\n body\n });\n};\n\nexport const processDefinitions = ({\n workflowPath,\n tenant,\n environment\n}: WorkflowPathParams): Promise<ProcessDefintionsResponse> => {\n const url = createUrl({url: '/processDefinitions', workflowPath, tenant});\n\n return rawRequest(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n EnvironmentURL: environment\n }\n });\n};\n","import {map, pipe, prop, reject} from 'ramda';\nimport {Entity, Match} from '../../types';\nimport {isEmptyValue} from '../../utils';\nimport {rawRequest} from '../index';\nimport {generateQueryString} from './utils';\n\ntype GenericMatchResponse = {\n status: string;\n};\n\ntype MatchResponse = {\n updatedTime: number;\n updatedBy: string;\n uri: string;\n object: Record<string, Array<Entity>>;\n};\n\ntype GetTransitiveMatchesProps = {\n entityUri: string;\n max: number;\n sort: string;\n order: string;\n activeness: string;\n filter: string;\n deep: number;\n markMatchedValues: boolean;\n sources: string;\n rules: string;\n};\n\nexport const getTransitiveMatches = ({\n entityUri,\n max,\n deep,\n sort,\n order,\n activeness,\n filter,\n markMatchedValues,\n sources,\n rules\n}: GetTransitiveMatchesProps) => {\n const options = {max, deep, filter, markMatchedValues, sort, order, activeness, sources, rules};\n const getSearchQuery = pipe(reject(isEmptyValue), generateQueryString);\n const query = getSearchQuery(options);\n return rawRequest<Match[]>(`/${entityUri}/_transitiveMatches${query}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\ntype GetNotMatchProps = {\n entityUri: string;\n max: number;\n sort: string;\n order: string;\n activeness: string;\n filter: string;\n};\nexport const getNotMatch = ({entityUri, max, sort, order, activeness, filter}: GetNotMatchProps) => {\n const options = {max, filter, sort, order, activeness};\n const getSearchQuery = pipe(reject(isEmptyValue), generateQueryString);\n const query = getSearchQuery(options);\n return rawRequest<MatchResponse>(`/${entityUri}/_notMatch${query}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\nexport const mergeSameEntities = (currentEntityUri: string, entities: Entity[]) => {\n const getUris = map(prop('uri'));\n const customerTenantEntityUris = getUris(entities);\n return rawRequest<Entity>('/entities/_same', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(customerTenantEntityUris.concat(currentEntityUri))\n });\n};\n\nexport const markAs = (\n currentEntityUri: string,\n entities: Entity[],\n action: 'NOT' | 'MATCH'\n): Promise<GenericMatchResponse[]> => {\n return Promise.all(\n entities.map(async (entity) => {\n return await rawRequest<GenericMatchResponse>(`/${entity.uri}/_notMatch?uri=${currentEntityUri}`, {\n method: action === 'NOT' ? 'POST' : 'DELETE',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n })\n );\n};\n\nexport const markAsNotMatch = async (currentEntityUri: string, entities: Entity[]) => {\n return await markAs(currentEntityUri, entities, 'NOT');\n};\n\nexport const reinstateMatch = async (currentEntityUri: string, entities: Entity[]) => {\n return await markAs(currentEntityUri, entities, 'MATCH');\n};\n\nexport const setAsMatch = async (currentEntityUri: string, entities: Entity[]): Promise<GenericMatchResponse[]> => {\n return await Promise.all(\n entities.map(async (entity) => {\n return await rawRequest<GenericMatchResponse>(`/${entity.uri}/_setAMatch?uri=${currentEntityUri}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n })\n );\n};\n","import {rawRequest} from '../index';\nimport {\n adjust,\n append,\n assoc,\n assocPath,\n chain,\n evolve,\n find,\n flatten,\n map,\n partition,\n pipe,\n propEq,\n propOr,\n reduce,\n toPairs\n} from 'ramda';\nimport {isDataTenantEntity} from '../../entity';\nimport {markAs, mergeSameEntities} from './matches';\nimport {buildFilteredEntitiesUrl, getDtssEntityUrl} from './entities';\nimport {collectSearchParamsForTotal} from './search';\nimport {buildRelationsForEntityRequest, processRelationsForEntityResponse} from './helpers/relations';\nimport {DataTenant, Entity, TotalResponse} from '../../types';\nimport {InOutRelation} from '../../types';\nimport {generateValuableQueryString} from './utils';\n\ntype DTSSInfo = {\n dtssPath: string;\n customerTenant: string;\n};\ntype ImportEntityFromDataTenantParams = {\n entity: Entity;\n} & DTSSInfo;\n\ntype ImportRelationsFromDataTenantsParams = DTSSInfo & {\n entityUri: string;\n dataTenant: string;\n content: Array<{\n inRelations?: InOutRelation;\n outRelations?: InOutRelation;\n max: number;\n offset: number;\n }>;\n};\n\ntype ImportedEntitiesResponse = {\n errors: Array<unknown>;\n status: string;\n success?: boolean;\n uris: Array<string>;\n};\n\ntype hasNonImportedConnectionsResponse = {\n hasNonImportedConnections: boolean;\n};\n\nconst DTSS_TIMEOUT = 30000;\n\nexport const importEntityFromDataTenant = ({\n dtssPath,\n customerTenant,\n entity: {dataTenant, uri}\n}: ImportEntityFromDataTenantParams): Promise<ImportedEntitiesResponse> => {\n return rawRequest(`${dtssPath}entities/_import?dataEntityUri=${uri}`, {\n method: 'POST',\n headers: {\n DataTenant: dataTenant,\n CustomerTenant: customerTenant,\n 'Content-Type': 'application/json'\n }\n });\n};\n\nexport const hasNonImportedRelations = ({\n dtssPath,\n customerTenant,\n dataTenant,\n entityUri,\n content\n}: ImportRelationsFromDataTenantsParams): Promise<hasNonImportedConnectionsResponse> => {\n return requestForDataTenant<hasNonImportedConnectionsResponse>({\n url: `entities/_connections/_hasNonImported?customerEntityUri=${entityUri}`,\n dataTenant,\n customerTenant,\n dtssPath,\n options: {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(content)\n }\n });\n};\n\nexport const importDTConnections = ({\n dtssPath,\n customerTenant,\n dataTenant,\n entityUri,\n content\n}: ImportRelationsFromDataTenantsParams) => {\n return requestForDataTenant<hasNonImportedConnectionsResponse>({\n url: `entities/_connections/_import?customerEntityUri=${entityUri}`,\n dataTenant,\n customerTenant,\n dtssPath,\n options: {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(content)\n }\n });\n};\n\ntype MergeDataEntityWithCustomerEntityParams = {\n dataTenant: string;\n dataEntityUri: string;\n customerEntityUri: string;\n} & DTSSInfo;\n\ntype MergeDataEntityWithCustomerEntityResponse = {\n errors: Array<unknown>;\n status: string;\n success?: boolean;\n uris: Array<string>;\n};\n\nexport const mergeDataEntityWithCustomerEntity = ({\n dtssPath,\n customerTenant,\n dataTenant,\n dataEntityUri,\n customerEntityUri\n}: MergeDataEntityWithCustomerEntityParams): Promise<MergeDataEntityWithCustomerEntityResponse> => {\n return rawRequest(\n `${dtssPath}entities/_merge?dataEntityUri=${dataEntityUri}&customerEntityUri=${customerEntityUri}`,\n {\n method: 'POST',\n headers: {\n DataTenant: dataTenant,\n CustomerTenant: customerTenant,\n 'Content-Type': 'application/json'\n }\n }\n );\n};\n\nexport const mergeDataTenantEntity = ({dtssPath, customerTenant, entity, entities}) => {\n const {dataTenant, uri: dataEntityUri} = entity;\n return Promise.all(\n entities.map(({uri: customerEntityUri}) =>\n mergeDataEntityWithCustomerEntity({\n dtssPath,\n customerTenant,\n dataTenant,\n customerEntityUri,\n dataEntityUri\n })\n )\n );\n};\n\nexport const mergeCustomerTenantEntityWithMixedEntities = ({dtssPath, customerTenant, entity, entities}) => {\n const {uri: customerEntityUri} = entity;\n const [dtEntities, ctEntities] = partition(isDataTenantEntity, entities);\n return Promise.all([\n ctEntities.length ? mergeSameEntities(customerEntityUri, ctEntities) : Promise.resolve(),\n ...dtEntities.map(({uri: dataEntityUri, dataTenant}) =>\n mergeDataEntityWithCustomerEntity({\n dtssPath,\n customerTenant,\n dataTenant,\n customerEntityUri,\n dataEntityUri\n })\n )\n ]);\n};\n\nconst parseDataTenantEntityMatches = pipe(\n toPairs,\n chain(([matchRule, matches]) => matches.map(assoc('matchRule', matchRule))),\n reduce((acc, {matchRule, ...object}) => {\n const objectIndex = acc.findIndex(({object: {uri}}) => object.uri === uri);\n return objectIndex === -1\n ? acc.concat({object, matchRules: [matchRule]})\n : adjust(\n objectIndex,\n evolve({\n matchRules: append(matchRule)\n }),\n acc\n );\n }, [])\n);\n\nconst processDataTenantMatches = pipe(find(propEq('index', 0)), propOr({}, 'object'), parseDataTenantEntityMatches);\n\ntype GetMatchesForDataTenantEntityParams = {\n dtssPath: string;\n customerTenant: string;\n entity: Entity;\n};\n\nexport const getMatchesForDataTenantEntity = ({\n dtssPath,\n customerTenant,\n entity\n}: GetMatchesForDataTenantEntityParams) => {\n const {uri, dataTenant} = entity;\n return rawRequest(`${dtssPath}entities/_matchesForDtEntities?skipAllImportedEntities=true`, {\n method: 'POST',\n headers: {\n DataTenant: dataTenant,\n CustomerTenant: customerTenant,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify([uri])\n }).then(processDataTenantMatches);\n};\ntype GetPotentialItemsFromDataTenantsParams = {\n dataTenant: string;\n entity: Entity;\n} & DTSSInfo;\n\ntype MatchedResponse = {\n index: number;\n object: {\n [key: string]: Array<Entity>;\n };\n};\nexport const getMatchesFromDataTenant = ({\n dtssPath,\n dataTenant,\n customerTenant,\n entity\n}: GetPotentialItemsFromDataTenantsParams): Promise<MatchedResponse> => {\n const {uri, type} = entity;\n return rawRequest(`${dtssPath}entities/_matches?skipAllImportedEntities=true`, {\n method: 'POST',\n headers: {\n DataTenant: dataTenant,\n CustomerTenant: customerTenant,\n 'Content-Type': 'application/json',\n SearchMetadata: 'AUTO'\n },\n body: JSON.stringify([{uri, type}])\n }).then(processDataTenantMatches);\n};\n\ntype NotMatchEntityResponse = {\n object: Entity;\n updatedBy: string;\n updatedTime: number;\n uri: string;\n};\n\nexport const getNotMatchesFromDataTenant = ({\n dtssPath,\n dataTenant,\n customerTenant,\n entity\n}: GetPotentialItemsFromDataTenantsParams): Promise<NotMatchEntityResponse> => {\n const {uri} = entity;\n return rawRequest(`${dtssPath}entities/_notMatch?returnObjects=true&customerEntityUri=${uri}`, {\n method: 'GET',\n headers: {\n DataTenant: dataTenant,\n CustomerTenant: customerTenant,\n 'Content-Type': 'application/json'\n }\n });\n};\ntype RequestFn = (params: GetPotentialItemsFromDataTenantsParams) => Promise<NotMatchEntityResponse | MatchedResponse>;\n\ntype PotentialItemsFromDTParams = {\n entity: Entity;\n dataTenants: Array<DataTenant>;\n} & DTSSInfo;\nconst getPotentialItemsFromDataTenants =\n (request: RequestFn) =>\n ({dtssPath, dataTenants = [], customerTenant, entity}: PotentialItemsFromDTParams) => {\n return Promise.all(\n dataTenants.map(({id}) =>\n request({\n dtssPath,\n dataTenant: id,\n customerTenant,\n entity\n })\n .then(map(assocPath(['object', 'dataTenant'], id)))\n .catch((e) => {\n console.log(e); //eslint-disable-line no-console\n return [];\n })\n )\n ).then(flatten);\n };\n\nexport const getMatchesFromDataTenants = getPotentialItemsFromDataTenants(getMatchesFromDataTenant);\nexport const getNotMatchesFromDataTenants = getPotentialItemsFromDataTenants(getNotMatchesFromDataTenant);\n\nexport const withDtssPotentialItems =\n ({dtssPath, dataTenants = [], entity, customerTenant, dtssRequest}, request) =>\n (...args) => {\n if (dtssPath && dataTenants && dataTenants.length) {\n const dataTenantsRequest = dtssRequest({dtssPath, dataTenants, entity, customerTenant});\n return Promise.all([request(...args), dataTenantsRequest]).then(flatten);\n } else {\n return request(...args);\n }\n };\n\nconst markDataTenantEntityForCustomerEntityAs =\n (action) =>\n ({dtssPath, customerTenant, dataTenant, dataEntityUri, customerEntityUri}) => {\n return rawRequest(\n `${dtssPath}entities/_notMatch?dataEntityUri=${dataEntityUri}&customerEntityUri=${customerEntityUri}`,\n {\n method: action === 'NOT' ? 'POST' : 'DELETE',\n headers: {\n DataTenant: dataTenant,\n CustomerTenant: customerTenant,\n 'Content-Type': 'application/json'\n }\n }\n );\n };\n\nexport const markDataTenantEntityAs =\n (action) =>\n ({dtssPath, customerTenant, entity, entities}) => {\n const {dataTenant, uri: dataEntityUri} = entity;\n return Promise.all(\n entities.map(({uri: customerEntityUri}) => {\n return markDataTenantEntityForCustomerEntityAs(action)({\n dtssPath,\n customerTenant,\n dataTenant,\n customerEntityUri,\n dataEntityUri\n });\n })\n );\n };\n\nexport const markDataTenantEntityAsNotMatch = markDataTenantEntityAs('NOT');\nexport const reinstateDataTenantEntityMatch = markDataTenantEntityAs('MATCH');\n\nconst markMixedEntitiesAs =\n (action) =>\n ({dtssPath, customerTenant, entity, entities}) => {\n const {uri: customerEntityUri} = entity;\n const [dtEntities, ctEntities] = partition(isDataTenantEntity, entities);\n return Promise.all([\n markAs(customerEntityUri, ctEntities, action),\n ...dtEntities.map(({uri: dataEntityUri, dataTenant}) =>\n markDataTenantEntityForCustomerEntityAs(action)({\n dtssPath,\n customerTenant,\n dataTenant,\n customerEntityUri,\n dataEntityUri\n })\n )\n ]);\n };\n\nexport const markMixedEntitiesAsNotMatches = markMixedEntitiesAs('NOT');\nexport const reinstateMixedEntitiesMatches = markMixedEntitiesAs('MATCH');\n\ntype OptionsWithHeaders = {\n headers?: Record<string, string>;\n [key: string]: unknown;\n};\ntype DTRequestParams = {\n url: string;\n options?: OptionsWithHeaders;\n dataTenant: string;\n customerTenant: string;\n dtssPath: string;\n requestProvider?: typeof rawRequest;\n};\nexport function requestForDataTenant<T>({\n requestProvider = rawRequest,\n url,\n options,\n dataTenant,\n customerTenant,\n dtssPath\n}: DTRequestParams): Promise<T> {\n url = dtssPath.endsWith('/') && url.startsWith('/') ? url.slice(1) : url;\n const {headers, ...otherOptions} = options || {};\n return requestProvider(`${dtssPath}${url}`, {\n ...otherOptions,\n headers: {\n ...headers,\n SearchMetadata: 'AUTO',\n DataTenant: dataTenant,\n customerTenant: customerTenant\n }\n });\n}\ntype GetFilteredEntitiesParams = {\n filters: Array<unknown>;\n options: OptionsWithHeaders;\n value?: string;\n dataTenant: string;\n} & DTSSInfo;\nexport const getFilteredEntitiesFromDataTenant = ({\n filters,\n options,\n value = '',\n dataTenant,\n customerTenant,\n dtssPath\n}: GetFilteredEntitiesParams) => {\n const url = buildFilteredEntitiesUrl(filters, options, value);\n return requestForDataTenant<Array<Entity>>({url, dataTenant, customerTenant, dtssPath});\n};\n\nexport const getTotalFromDataTenant = ({\n filters,\n options,\n value = '',\n dataTenant,\n customerTenant,\n dtssPath\n}: GetFilteredEntitiesParams) => {\n return requestForDataTenant<TotalResponse>({\n url: '/entities/_total',\n dataTenant,\n customerTenant,\n dtssPath,\n options: {\n method: 'POST',\n body: JSON.stringify(collectSearchParamsForTotal(filters, options, value))\n }\n });\n};\n\nexport const getRelationsForDataTenantEntity = ({\n entityUri,\n configs,\n dataTenant,\n customerTenant,\n dtssPath,\n options: reqOptions\n}) => {\n const {searchByOv} = reqOptions;\n const {options} = buildRelationsForEntityRequest(entityUri, configs);\n const urlQueryParams = generateValuableQueryString({\n dataEntityUri: entityUri,\n options: searchByOv ? 'searchByOv' : undefined\n });\n return requestForDataTenant({\n url: `entities/_connections/_getConnections${urlQueryParams}`,\n options,\n dataTenant,\n customerTenant,\n dtssPath\n }).then(\n pipe(\n processRelationsForEntityResponse,\n map(\n evolve({\n connections: map(\n pipe(\n assocPath(['entity', 'dataTenant'], dataTenant),\n assocPath(['relation', 'dataTenant'], dataTenant)\n )\n )\n })\n )\n )\n );\n};\n\nexport const getDataTenantEntitySecondaryLabel = ({entityUri, dataTenant, customerTenant, dtssPath}) => {\n return requestForDataTenant({\n url: `${getDtssEntityUrl(entityUri)}&select=secondaryLabel`,\n dataTenant,\n customerTenant,\n dtssPath\n });\n};\n\nexport const unsubscribeEntityFromDataTenantEntity = ({\n dtssPath,\n dataTenant,\n customerTenant,\n value,\n type,\n sourceTable\n}) => {\n return rawRequest(`${dtssPath}entities/_unmerge`, {\n method: 'POST',\n headers: {\n DataTenant: dataTenant,\n CustomerTenant: customerTenant,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify([{value, type, sourceTable}])\n });\n};\n\ntype GetCustomerTenantInfoParams = {\n dtssPath: string;\n tenant: string;\n};\n\ntype GetCustomerTenantInfoResponse = {\n id: string;\n name: string;\n label: string;\n}[];\n\nexport const getCustomerTenantInfo = ({dtssPath, tenant}: GetCustomerTenantInfoParams) => {\n return rawRequest<GetCustomerTenantInfoResponse>(`${dtssPath}tenants/customerTenants?id=${tenant}&useCache=true`, {\n method: 'GET',\n timeout: DTSS_TIMEOUT\n });\n};\n\ntype GetDTSubscriptionsParams = {\n dtssPath: string;\n customerTenant: string;\n};\n\ntype GetDTSubscriptionsResponse = {\n dataTenantId: {\n id: string;\n };\n hiddenDt: boolean;\n security: {\n metadataAndDataSecurity: {\n enabled: boolean;\n permissionConfig: Array<{uri: string; permissions: Array<{role: string}>}>;\n };\n };\n}[];\n\nexport const getDTSubscriptions = ({dtssPath, customerTenant}: GetDTSubscriptionsParams) => {\n return rawRequest<GetDTSubscriptionsResponse>(`${dtssPath}subscriptions?useCache=true`, {\n method: 'GET',\n headers: {\n CustomerTenant: customerTenant\n },\n timeout: DTSS_TIMEOUT\n });\n};\n\ntype GetDataTenantsInfoParams = {\n dtssPath: string;\n tenants: string[];\n};\n\ntype GetDataTenantsInfoResponse = {\n id: string;\n name: string;\n label: string;\n}[];\n\nexport const getDataTenantsInfo = ({dtssPath, tenants}: GetDataTenantsInfoParams) => {\n return rawRequest<GetDataTenantsInfoResponse>(`${dtssPath}tenants/dataTenants?id=${tenants}&useCache=true`, {\n method: 'GET',\n timeout: DTSS_TIMEOUT\n });\n};\ntype GetDataTenantEntityParams = {\n entityUri: string;\n dataTenant: string;\n customerTenant: string;\n dtssPath: string;\n};\nexport const getDataTenantEntity = ({entityUri, dataTenant, customerTenant, dtssPath}: GetDataTenantEntityParams) => {\n return requestForDataTenant<Entity[]>({\n url: getDtssEntityUrl(entityUri),\n dataTenant,\n customerTenant,\n dtssPath\n });\n};\n","import {Metadata} from '../../types';\nimport {rawRequest} from '../index';\n\nexport const loadMetadata = (): Promise<Metadata> => {\n return rawRequest('/configuration?options=showAccess&showHiddenMatchRules=true', {\n method: 'GET'\n });\n};\n","import {rawRequest} from '../index';\nimport {generateValuableQueryString} from './utils';\n\nexport const getGraphSearchEntities = ({apiPath, tenant, searchBody, options}) => {\n const {select, ...restOptions} = options;\n const body = {\n ...searchBody,\n ordered: 'true',\n orderBy: 'LastName,FirstName',\n from: 0,\n max: 100,\n ...restOptions\n };\n const query = generateValuableQueryString({select});\n return rawRequest(`${apiPath}/api/${tenant}/graph/search${query}`, {\n method: 'POST',\n body,\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\nexport const getGraphSearchCount = ({apiPath, tenant, searchBody, options = {}}) => {\n const body = {...searchBody, ...options};\n return rawRequest(`${apiPath}/api/${tenant}/graph/search/count`, {\n method: 'POST',\n body,\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n","import {rawRequest} from '../index';\nimport {generateValuableQueryString} from './utils';\nimport {CommentSummary, Comment, Reply} from '../../types/collaboration';\n\nconst createBaseUrl = (collaborationPath: string, tenant: string) => `${collaborationPath}/${tenant}/comments`;\n\ntype CommentsCountParameters = {\n collaborationPath: string;\n tenant: string;\n uris: string[];\n};\n\ntype CommentsCountResponse = Array<{\n objectId: string;\n comments: CommentSummary[];\n}>;\n\nexport const getCommentsCount = ({\n collaborationPath,\n tenant,\n uris\n}: CommentsCountParameters): Promise<CommentsCountResponse> => {\n return rawRequest<CommentsCountResponse>(`${createBaseUrl(collaborationPath, tenant)}/count`, {\n method: 'POST',\n body: uris,\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\ntype GetCommentParameters = {\n collaborationPath: string;\n tenant: string;\n commentId: string;\n};\n\nexport const getComment = ({collaborationPath, tenant, commentId}: GetCommentParameters): Promise<Comment> => {\n const url = `${createBaseUrl(collaborationPath, tenant)}/${commentId}`;\n const options = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n };\n\n return rawRequest(url, options);\n};\n\ntype CreateCommentParameters = {\n collaborationPath: string;\n tenant: string;\n data: Pick<\n Comment,\n 'objectId' | 'objectType' | 'relatedObjectUris' | 'visibility' | 'content' | 'namedUsers' | 'permanentLink'\n >;\n};\n\nexport const createComment = ({collaborationPath, tenant, data}: CreateCommentParameters): Promise<Comment[]> => {\n const url = createBaseUrl(collaborationPath, tenant);\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify([data])\n };\n\n return rawRequest(url, options);\n};\n\ntype UpdateCommentParameters = {\n collaborationPath: string;\n tenant: string;\n data: Pick<\n Comment,\n 'objectId' | 'objectType' | 'relatedObjectUris' | 'visibility' | 'content' | 'namedUsers' | 'commentId'\n >;\n};\n\nexport const updateComment = ({collaborationPath, tenant, data}: UpdateCommentParameters): Promise<Comment> => {\n const url = `${createBaseUrl(collaborationPath, tenant)}/${data.commentId}`;\n const options = {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(data)\n };\n\n return rawRequest(url, options);\n};\n\ntype DeleteCommentResponse = {\n status: 'success' | 'failed';\n error?: unknown;\n};\n\ntype DeleteCommentParameters = {\n collaborationPath: string;\n tenant: string;\n commentId: string;\n};\n\nexport const deleteComment = ({\n collaborationPath,\n tenant,\n commentId\n}: DeleteCommentParameters): Promise<DeleteCommentResponse> => {\n const url = `${createBaseUrl(collaborationPath, tenant)}/${commentId}`;\n const options = {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json'\n }\n };\n\n return rawRequest(url, options);\n};\n\ntype DeleteReplyParameters = {\n collaborationPath: string;\n tenant: string;\n commentId: string;\n replyId: string;\n};\n\nexport const deleteReply = ({\n collaborationPath,\n tenant,\n commentId,\n replyId\n}: DeleteReplyParameters): Promise<DeleteCommentResponse> => {\n const url = `${createBaseUrl(collaborationPath, tenant)}/${commentId}/replies/${replyId}`;\n const options = {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json'\n }\n };\n\n return rawRequest(url, options);\n};\n\ntype UpdateReplyParameters = {\n collaborationPath: string;\n tenant: string;\n commentId: string;\n replyId: string;\n data: Pick<Reply, 'content' | 'namedUsers'>;\n};\n\nexport const updateReply = ({\n collaborationPath,\n tenant,\n commentId,\n replyId,\n data\n}: UpdateReplyParameters): Promise<Reply> => {\n const url = `${createBaseUrl(collaborationPath, tenant)}/${commentId}/replies/${replyId}`;\n const options = {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(data)\n };\n\n return rawRequest(url, options);\n};\n\ntype CreateReplyParameters = {\n collaborationPath: string;\n tenant: string;\n commentId: string;\n data: Pick<Reply, 'content' | 'action' | 'namedUsers'>;\n};\n\nexport const createReply = ({collaborationPath, tenant, commentId, data}: CreateReplyParameters): Promise<Reply[]> => {\n const url = `${createBaseUrl(collaborationPath, tenant)}/${commentId}/replies`;\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify([data])\n };\n\n return rawRequest(url, options);\n};\n\ntype GetCommentsParameters = {\n collaborationPath: string;\n tenant: string;\n relatedObjectUri: string;\n maxResults?: number;\n sort?: string;\n order?: string;\n pageToken?: string;\n};\n\ntype GetCommentsResponse = {\n items: Comment[];\n nextLink: string | null;\n nextPageToken: string | null;\n selfLink: string;\n};\n\nexport const getComments = ({\n collaborationPath,\n tenant,\n maxResults = 10,\n relatedObjectUri,\n sort = 'modifiedTime',\n order = 'desc',\n pageToken = null\n}: GetCommentsParameters): Promise<GetCommentsResponse> => {\n const queryString = generateValuableQueryString({maxResults, relatedObjectUri, sort, order, pageToken});\n const url = `${createBaseUrl(collaborationPath, tenant)}${queryString}`;\n\n const options = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n };\n\n return rawRequest(url, options);\n};\n","import {rawRequest} from '../index';\nimport {generateValuableQueryString} from './utils';\nimport {UserInfo} from '../../types/users';\nimport {ApiError} from '../../types/errors';\nimport {ConsoleApp} from '../../types/services';\nimport {UIPlugin} from '../../types/uiConfiguration';\nimport {SearchState} from '../../types';\n\ntype GetAllUsersForTenantParameters = {\n tenant: string;\n servicesPath: string;\n};\n\nexport const getAllUsersForTenant = ({tenant, servicesPath}: GetAllUsersForTenantParameters) => {\n const url = `${servicesPath}/users/${tenant}`;\n return rawRequest<UserInfo[]>(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\nconst GRAPH_EXPORT_NAMESPACE = 'graphExport';\nexport const postGraphExport = async (\n servicesPath: string,\n tenant: string,\n environment: string,\n exportId: string,\n exportData: Record<string, unknown>\n) => {\n let graphExports;\n try {\n const {data: graphExportsData = {}} = await configServiceRequest({\n servicesPath,\n tenant,\n environment,\n namespace: GRAPH_EXPORT_NAMESPACE,\n options: {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n });\n graphExports = graphExportsData;\n } catch (error) {\n graphExports = {};\n }\n\n const requestOptions = {\n body: JSON.stringify({\n ...graphExports,\n [exportId]: exportData\n }),\n headers: {\n 'Content-Type': 'application/json'\n }\n };\n let result;\n try {\n result = await configServiceRequest({\n servicesPath,\n tenant,\n environment,\n namespace: GRAPH_EXPORT_NAMESPACE,\n options: {\n method: 'PUT',\n ...requestOptions\n }\n });\n } catch (error) {\n result = null;\n }\n if (!result) {\n result = await configServiceRequest({\n servicesPath,\n tenant,\n environment,\n namespace: GRAPH_EXPORT_NAMESPACE,\n options: {\n method: 'POST',\n ...requestOptions\n }\n });\n }\n return result;\n};\n\ntype GetEnvironmentSettingsParameters = {\n key: string;\n servicesPath: string;\n};\n\ntype GetEnvironmentSettingsResponse = {\n result: Record<string, unknown>;\n};\n\nexport const getEnvironmentSettings = ({servicesPath, key}: GetEnvironmentSettingsParameters) => {\n const query = generateValuableQueryString({key});\n const url = `${servicesPath}/settings${query}`;\n return rawRequest<GetEnvironmentSettingsResponse>(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\ntype CollectVersionsParameters = {\n servicesPath: string;\n};\n\ntype CollectVersionsResponse = {\n result: {\n id: string;\n name: string;\n status: number;\n result: {\n version?: string;\n };\n }[];\n};\n\nexport const collectVersions = ({servicesPath}: CollectVersionsParameters) => {\n const url = `${servicesPath}/version/collect`;\n return rawRequest<CollectVersionsResponse>(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\ntype GetUIConfigurationParameters = {\n tenant: string;\n userName: string;\n servicesPath: string;\n};\n\ntype GetUIConfigurationResponse = {\n plugins: UIPlugin[];\n username: string;\n errors: ApiError[];\n};\n\nexport const getUIConfiguration = ({tenant, userName, servicesPath}: GetUIConfigurationParameters) => {\n const query = generateValuableQueryString({tenant, user: userName});\n const url = `${servicesPath}/plugins${query}`;\n return rawRequest<GetUIConfigurationResponse>(url, {\n method: 'GET'\n });\n};\n\ntype ConfigServiceRequestParameters = {\n tenant: string;\n environment: string;\n servicesPath: string;\n options: Record<string, unknown>;\n namespace?: string;\n projection?: string;\n};\n\ntype ConfigServiceRequestResponse = {\n createdAt: number;\n createdBy: string;\n data: {\n apps?: ConsoleApp[];\n darkLogo?: string;\n lightLogo?: string;\n headerColor?: string;\n whitelabelling?: boolean;\n };\n};\n\nexport const configServiceRequest = <Response = ConfigServiceRequestResponse>({\n tenant,\n environment,\n servicesPath,\n options,\n namespace,\n projection\n}: ConfigServiceRequestParameters) => {\n const query = generateValuableQueryString({tenant, environment, namespace, projection});\n const url = `${servicesPath}/configService${query}`;\n return rawRequest<Response>(url, options);\n};\n\nexport const getConsoleApps = ({tenant, environment, servicesPath}) => {\n return configServiceRequest({\n tenant,\n environment,\n servicesPath,\n options: {\n method: 'GET'\n }\n });\n};\n\ntype GetSearchLinkStateParams = {\n servicesPath: string;\n stateHash: string;\n};\n\nexport const getSearchLinkState = ({servicesPath, stateHash}: GetSearchLinkStateParams) => {\n return rawRequest<SearchState>(`${servicesPath}/searchLink?key=${stateHash}`, {\n method: 'GET'\n });\n};\n","import {ImageHostingItem} from '../../types/imageHosting';\nimport {rawRequest} from '../index';\n\ntype UploadImageParameters = {\n imageServicePath: string;\n tenant: string;\n environment: string;\n image: File | string;\n};\n\nexport const uploadImage = ({\n imageServicePath,\n environment,\n tenant,\n image\n}: UploadImageParameters): Promise<ImageHostingItem> => {\n const data = new FormData();\n\n if (typeof image === 'string') {\n data.append('sourceUrl', image);\n data.append('upload', 'false');\n } else {\n data.append('file', image);\n }\n\n const url = `${imageServicePath}/${environment}/${tenant}`;\n\n return rawRequest(url, {\n body: data,\n method: 'POST',\n application: 'common',\n headers: {\n 'Content-Type': null\n }\n });\n};\n","import {rawRequest} from '../index';\nimport {ChangeRequest} from '../../types';\n\nexport const getDataChangeRequest = (dcrUri: string): Promise<ChangeRequest> => {\n return rawRequest(`/${dcrUri}?showObjectsInfo=true`, {\n method: 'GET'\n });\n};\n","import {rawRequest} from '../index';\nimport {generateValuableQueryString} from './utils';\n\ntype ExportActivitiesRequest = {\n exportPath: string;\n tenant: string;\n options: {\n filter: string;\n fileFormat?: string;\n };\n};\n\nexport const exportActivities = ({exportPath, tenant, options}: ExportActivitiesRequest) => {\n const query = generateValuableQueryString(options);\n return rawRequest(`${exportPath}/${tenant}/activities${query}`, {\n method: 'POST'\n });\n};\n","import {rawRequest} from '../index';\nimport {ApiError, Crosswalk, CrosswalkTree, Entity, UnmergeOperation} from '../../types';\nimport {generateValuableQueryString} from './utils';\n\ntype GetCrosswalkTreeParams = {\n entityUri: string;\n};\n\nconst getCrosswalkTree = (options: GetCrosswalkTreeParams): Promise<CrosswalkTree> => {\n const {entityUri} = options;\n return rawRequest(`/${entityUri}/_crosswalkTree`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\ntype AddCrosswalkParams = {\n entityUri: string;\n crosswalk: Omit<Crosswalk, 'uri'>;\n};\n\ntype AddCrosswalkResponse = Array<{\n index: number;\n object?: Crosswalk;\n successful: boolean;\n errors?: ApiError;\n}>;\n\nconst addCrosswalk = ({entityUri, crosswalk}: AddCrosswalkParams): Promise<AddCrosswalkResponse> => {\n return rawRequest(`/${entityUri}/crosswalks`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify([crosswalk])\n });\n};\n\ntype AddCrosswalkInContributorParams = {\n entityTypeUri: string;\n contributorCrosswalkType: string;\n contributorCrosswalkValue: string;\n contributorCrosswalkSourceTable?: string;\n crosswalkType: string;\n crosswalkValue: string;\n crosswalkSourceTable?: string;\n crosswalkDeleteDate?: string;\n};\n\ntype AddCrosswalkInContributorResponse = Array<{\n index: number;\n object?: Entity;\n successful: boolean;\n errors?: ApiError;\n}>;\n\nconst addCrosswalkInContributor = ({\n entityTypeUri,\n contributorCrosswalkType,\n contributorCrosswalkValue,\n contributorCrosswalkSourceTable,\n crosswalkType,\n crosswalkValue,\n crosswalkSourceTable,\n crosswalkDeleteDate\n}: AddCrosswalkInContributorParams): Promise<AddCrosswalkInContributorResponse> => {\n return rawRequest('/entities?options=partialOverride', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n noReltioSourceSystem: true,\n body: JSON.stringify([\n {\n attributes: {},\n crosswalks: [\n {\n type: contributorCrosswalkType,\n value: contributorCrosswalkValue,\n dataProvider: false,\n contributorProvider: true,\n ...(contributorCrosswalkSourceTable && {sourceTable: contributorCrosswalkSourceTable})\n },\n {\n type: crosswalkType,\n value: crosswalkValue,\n dataProvider: true,\n ...(crosswalkSourceTable && {sourceTable: crosswalkSourceTable}),\n ...(crosswalkDeleteDate && {deleteDate: crosswalkDeleteDate})\n }\n ],\n type: entityTypeUri\n }\n ])\n });\n};\n\nexport type UnmergeContributorParams = {\n contributorUri: string;\n entityUri: string;\n operationType: UnmergeOperation;\n};\n\nconst unmergeContributor = (options: UnmergeContributorParams): Promise<Record<string, Entity>> => {\n const {contributorUri, entityUri, operationType} = options;\n const query = generateValuableQueryString({contributorURI: contributorUri});\n return rawRequest(`/${entityUri}/_${operationType}${query}`, {\n method: 'POST'\n });\n};\n\ntype EditCrosswalkAttributeParams = {\n entityUri: string;\n crosswalkId: string;\n attributeName: string;\n value: string;\n};\n\ntype EditCrosswalkAttributeResponse = Array<{\n index: number;\n object?: Entity;\n successful: boolean;\n errors?: ApiError;\n}>;\n\nconst editCrosswalkAttribute = ({\n entityUri,\n crosswalkId,\n attributeName,\n value\n}: EditCrosswalkAttributeParams): Promise<EditCrosswalkAttributeResponse> => {\n return rawRequest(`/${entityUri}/crosswalks/${crosswalkId}/${attributeName}`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({value})\n });\n};\n\ntype DeleteCrosswalkAttributeParams = {\n entityUri: string;\n crosswalkId: string;\n attributeName: string;\n};\n\ntype DeleteCrosswalkAttributeResponse = Array<{\n index: number;\n object?: {\n status: string;\n };\n successful: boolean;\n errors?: ApiError;\n}>;\n\nconst deleteCrosswalkAttribute = ({\n entityUri,\n crosswalkId,\n attributeName\n}: DeleteCrosswalkAttributeParams): Promise<DeleteCrosswalkAttributeResponse> => {\n return rawRequest(`/${entityUri}/crosswalks/${crosswalkId}/${attributeName}`, {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\ntype DeleteCrosswalkParams = {\n entityUri: string;\n crosswalkId: string;\n};\n\ntype DeleteCrosswalkResponse = {\n status: 'success' | 'failed';\n};\n\nconst deleteCrosswalk = ({entityUri, crosswalkId}: DeleteCrosswalkParams): Promise<DeleteCrosswalkResponse> => {\n return rawRequest(`/${entityUri}/crosswalks/${crosswalkId}`, {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n};\n\nexport {\n addCrosswalk,\n addCrosswalkInContributor,\n deleteCrosswalk,\n deleteCrosswalkAttribute,\n editCrosswalkAttribute,\n getCrosswalkTree,\n unmergeContributor\n};\n","import {rawRequest} from '../index';\nimport {DQChartsData, DQDataLevel, DQMetric} from '../../types/dq';\nimport {generateQueryString} from './utils';\nimport {getLastUriPart} from '../../uris';\n\nconst MAX_NUMBER_OF_THREADS = 10;\n\ntype GetDQChartsDataParams = {\n entityTypeUri: string;\n attributes?: string[];\n dataLevel?: DQDataLevel;\n metrics?: DQMetric[];\n searchByOv?: boolean;\n};\n\ntype GetDQChartsDataResponse =\n | DQChartsData\n | {\n statistic: Record<string, DQChartsData>;\n };\n\nconst getNumberOfThreads = ({attributes = [], metrics = []}) => {\n const numberOfMetrics = metrics.length;\n const numberOfAttributes = attributes.length;\n\n const numberOfThreads = numberOfAttributes * numberOfMetrics;\n return numberOfThreads > MAX_NUMBER_OF_THREADS ? MAX_NUMBER_OF_THREADS : numberOfThreads;\n};\n\nexport const getDQChartsData = ({\n entityTypeUri,\n attributes,\n dataLevel,\n metrics,\n searchByOv\n}: GetDQChartsDataParams): Promise<GetDQChartsDataResponse> => {\n const body = {\n ...(dataLevel === DQDataLevel.ATTRIBUTE_TYPE ? {attributes} : {}),\n ...(metrics ? {metrics} : {})\n };\n const query = generateQueryString({\n ...(dataLevel === DQDataLevel.ATTRIBUTE_TYPE\n ? {numberOfThreads: getNumberOfThreads({attributes, metrics}) || 1}\n : {}),\n ...(searchByOv ? {options: 'searchByOv'} : {})\n });\n return rawRequest<GetDQChartsDataResponse>(\n `/entityType/${getLastUriPart(entityTypeUri)}/dataQuality/${dataLevel}${query}`,\n {\n method: 'POST',\n body: JSON.stringify(body)\n }\n );\n};\n","import {rawRequest} from '../index';\nimport {DataValidationFunction} from '../../types/dvf';\nimport {getLastUriPart} from '../../uris';\n\ntype GetDVFParams = {\n dvfPath: string;\n tenant: string;\n entityTypeUri: string;\n env: string;\n};\n\ntype GetDVFResponse = {\n type: string;\n functions: DataValidationFunction[];\n};\n\nexport const getDVF = ({dvfPath, tenant, entityTypeUri, env}: GetDVFParams): Promise<GetDVFResponse> => {\n const entityTypeName = getLastUriPart(entityTypeUri);\n const url = `${dvfPath}/api/${tenant}/dataValidationFunctions/entityTypes/${entityTypeName}`;\n return rawRequest(url, {\n method: 'GET',\n headers: {\n env\n }\n });\n};\n","import {rawRequest} from '../index';\nimport {DQDataLevel} from '../../types/dq';\nimport {TimeSeriesMetric, TimeSeriesAnomalyData, TimeSeriesStatisticData} from '../../types/mlDq';\nimport {getLastUriPart} from '../../uris';\n\ntype GetMlDqDataParams = {\n mlDqPath: string;\n tenant: string;\n entityTypeUri: string;\n attribute?: string;\n viewMultiplier?: number;\n dataLevel?: DQDataLevel;\n metrics?: TimeSeriesMetric[];\n startDate?: string;\n endDate?: string;\n anomaly?: 'prophet';\n};\n\nexport type GetMlDqDataResponse = {\n success: boolean;\n data: {\n [attributeFieldName: string]: {\n timeSeries: TimeSeriesStatisticData[];\n };\n };\n dataAnomaly?: {\n [attributeFieldName: string]: {\n timeSeries: TimeSeriesAnomalyData[];\n };\n };\n};\n\nexport const getMlDqData = ({\n mlDqPath,\n tenant,\n entityTypeUri,\n attribute,\n viewMultiplier = 1,\n dataLevel = DQDataLevel.ATTRIBUTE_TYPE,\n metrics = [],\n startDate,\n endDate,\n anomaly\n}: GetMlDqDataParams): Promise<GetMlDqDataResponse> => {\n const entityTypeName = getLastUriPart(entityTypeUri);\n const url = `${mlDqPath}/${tenant}/entityType/${entityTypeName}/ml/dataQuality/v1/${dataLevel}/timeSeries/`;\n\n const body = {\n attribute,\n metrics,\n viewMultiplier,\n startDate,\n endDate,\n anomaly\n };\n\n return rawRequest<GetMlDqDataResponse>(url, {\n method: 'POST',\n body: JSON.stringify(body)\n });\n};\n","import {rawRequest} from '../index';\nimport {TenantPermission} from '../../types/tenantPermissions';\n\ntype GetPermissionParams = {\n tenant: string;\n apiPath?: string;\n};\n\nexport const getTenantPermissions = ({tenant, apiPath}: GetPermissionParams): Promise<TenantPermission[]> => {\n const url = `${apiPath}/permissions/${tenant}`;\n return rawRequest(url, {\n method: 'GET'\n });\n};\n","import {rawRequest} from '../index';\nimport {generateValuableQueryString} from './utils';\nimport {AttributeValue, SimpleAttributeValue} from '../../types';\nimport {cleanAttributes} from '../../attributes';\n\ntype DeleteAttributeParams = {\n attributeUri: string;\n sourceUri?: string;\n crosswalkValue?: string;\n crosswalkSourceTable?: string;\n};\n\ntype DeleteAttributeResponse = {\n status: 'success' | 'failed';\n error?: unknown;\n};\n\nexport const deleteAttribute = ({\n attributeUri,\n sourceUri,\n crosswalkValue,\n crosswalkSourceTable\n}: DeleteAttributeParams): Promise<DeleteAttributeResponse> => {\n const query = generateValuableQueryString({crosswalkValue, crosswalkSourceTable});\n return rawRequest(`/${attributeUri}${query}`, {\n method: 'DELETE',\n headers: sourceUri\n ? {\n 'Source-System': sourceUri\n }\n : {}\n });\n};\n\ntype PinAttributeParams = {\n attributeUri: string;\n value: boolean;\n};\n\ntype PinAttributeResponse = AttributeValue & {\n error?: unknown;\n};\n\nexport const pinAttribute = ({attributeUri, value}: PinAttributeParams): Promise<PinAttributeResponse> => {\n return rawRequest(`/${attributeUri}/pin`, {\n method: 'PUT',\n body: JSON.stringify({value})\n });\n};\n\ntype IgnoreAttributeParams = {\n attributeUri: string;\n value: boolean;\n};\n\ntype IgnoreAttributeResponse = AttributeValue & {\n error?: unknown;\n};\n\nexport const ignoreAttribute = ({attributeUri, value}: IgnoreAttributeParams): Promise<IgnoreAttributeResponse> => {\n return rawRequest(`/${attributeUri}/ignore`, {\n method: 'PUT',\n body: JSON.stringify({value})\n });\n};\n\ntype UpdateAttributeParams = {\n attributeUri: string;\n sourceUri?: string;\n crosswalkValue?: string;\n crosswalkSourceTable?: string;\n value: string;\n};\n\ntype UpdateAttributeResponse = SimpleAttributeValue & {\n error?: unknown;\n};\n\nexport const updateAttribute = ({\n attributeUri,\n sourceUri,\n crosswalkValue,\n crosswalkSourceTable,\n value\n}: UpdateAttributeParams): Promise<UpdateAttributeResponse> => {\n const query = generateValuableQueryString({crosswalkValue, crosswalkSourceTable});\n return rawRequest(`/${attributeUri}${query}`, {\n method: 'PUT',\n headers: sourceUri\n ? {\n 'Source-System': sourceUri\n }\n : {},\n body: JSON.stringify({value})\n });\n};\n\ntype CreateAttributeParams = {\n attributeUri: string;\n sourceUri?: string;\n crosswalkValue?: string;\n crosswalkSourceTable?: string;\n value: AttributeValue['value'];\n};\n\ntype CreateAttributeResponse = {\n index: number;\n object?: {\n uri: string;\n type: string;\n value: AttributeValue['value'];\n ov?: boolean;\n };\n errors: unknown;\n};\n\nexport const createAttribute = ({\n attributeUri,\n crosswalkValue,\n crosswalkSourceTable,\n sourceUri,\n value\n}: CreateAttributeParams): Promise<CreateAttributeResponse[]> => {\n const query = generateValuableQueryString({crosswalkValue, crosswalkSourceTable});\n const attributePrefix = attributeUri.split('/').slice(0, -1).join('/');\n const [cleanValue] = cleanAttributes()([[{value}]]);\n return rawRequest(`/${attributePrefix}${query}`, {\n method: 'POST',\n headers: sourceUri\n ? {\n 'Source-System': sourceUri\n }\n : {},\n body: JSON.stringify(cleanValue)\n });\n};\n\ntype UpdateActivenessAttributeParams = {\n entityUri: string;\n attributeName: string;\n value: unknown;\n};\n\ntype UpdateActivenessAttributeResponse = {\n [attributeName: string]: number;\n};\n\nexport const updateActivenessAttribute = ({\n entityUri,\n attributeName,\n value\n}: UpdateActivenessAttributeParams): Promise<UpdateActivenessAttributeResponse> => {\n return rawRequest(`/${entityUri}/activeness`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n [attributeName]: value\n })\n });\n};\n\ntype DeleteActivenessAttributeParams = {\n entityUri: string;\n attributeName: string;\n};\n\nexport const deleteActivenessAttribute = ({entityUri, attributeName}: DeleteActivenessAttributeParams) => {\n return rawRequest(`/${entityUri}/activeness/${attributeName}`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({})\n });\n};\n","import {Entity, HistoryWithTotal} from '../../types';\nimport {rawRequest} from '../index';\nimport {generateValuableQueryString} from './utils';\n\ntype GetHistoricUrisParams = {\n entityUri: string;\n};\n\ntype GetHistoryUrisResponse = string[];\n\nconst getHistoricUris = ({entityUri}: GetHistoricUrisParams): Promise<GetHistoryUrisResponse> => {\n return rawRequest(`/${entityUri}/_historicURIs`, {\n method: 'GET'\n });\n};\n\ntype GetHistoryWithTotalParams = {\n entityUri: string;\n filter?: string;\n max?: number;\n offset?: number;\n order?: string;\n historicUris?: string[];\n showAll?: boolean;\n};\n\nconst getHistoryWithTotal = ({\n entityUri,\n historicUris,\n ...options\n}: GetHistoryWithTotalParams): Promise<HistoryWithTotal> => {\n const query = generateValuableQueryString({...options, historicURIs: historicUris?.join(',')});\n return rawRequest(`/${entityUri}/_changesWithTotal${query}`, {\n method: 'GET'\n });\n};\n\nconst getEntityPreviousChange = (entityUri: string, timestamp: number): Promise<number> => {\n const query = generateValuableQueryString({timestamp});\n return rawRequest(`/${entityUri}/_previousChange${query}`, {method: 'GET'});\n};\n\nconst getEntityTimeSlice = (entityUri: string, time: number): Promise<Entity> => {\n const query = generateValuableQueryString({time});\n return rawRequest(`/${entityUri}${query}`, {method: 'GET'});\n};\n\nexport {getHistoricUris, getHistoryWithTotal, getEntityPreviousChange, getEntityTimeSlice};\n","import {rawRequest} from '../index';\nimport {SendCustomSandboxRequestParams} from '../../types/customSandbox';\nimport {isObject} from '../../utils';\n\nexport const sendRequestFromCustomSandbox = ({\n url,\n method,\n data,\n headers,\n noRequestProcessor\n}: SendCustomSandboxRequestParams) => {\n const requestMethod = method || 'GET';\n let body;\n if (requestMethod !== 'GET') {\n body = isObject(data) ? JSON.stringify(data) : data;\n }\n return rawRequest(url, {\n method: requestMethod,\n body,\n headers: {\n 'Content-Type': 'application/json',\n ...(headers ?? {})\n },\n noRequestProcessor\n });\n};\n","import {rawRequest} from '../index';\nimport {AttributesDiff, Entity, ErrorSeverity, ValidationServiceError, ValidationServiceOption} from '../../types';\nimport {getEntityId} from '../../entity';\nimport {generateValuableQueryString} from './utils';\n\ntype ValidateEntityChanges = {\n validationServicePath: string;\n uri: string;\n diff: AttributesDiff;\n tenant: string;\n options?: ValidationServiceOption[];\n severity: ErrorSeverity[];\n};\n\ntype ValidateEntity = {\n validationServicePath: string;\n entity: Entity;\n tenant: string;\n options?: ValidationServiceOption[];\n severity: ErrorSeverity[];\n};\n\ntype ValidationServiceResponse = ValidationServiceError[];\n\nexport const validateEntityChanges = ({\n validationServicePath,\n uri,\n diff,\n tenant,\n options = [],\n severity = []\n}: ValidateEntityChanges) => {\n const query = generateValuableQueryString({\n options: options.join(','),\n severity: severity.join(',')\n });\n const id = getEntityId({uri});\n return rawRequest<ValidationServiceResponse>(`${validationServicePath}/validate/${tenant}/entity/${id}${query}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: diff\n });\n};\n\nexport const validateEntity = ({\n validationServicePath,\n entity,\n tenant,\n options = [],\n severity = []\n}: ValidateEntity) => {\n const query = generateValuableQueryString({\n options: options.join(','),\n severity: severity.join(',')\n });\n return rawRequest<ValidationServiceResponse>(`${validationServicePath}/validate/${tenant}/entity${query}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: entity\n });\n};\n","import {rawRequest} from '../index';\nimport {RdmTenant} from './../../types/tenants';\n\ntype GetTenantNameParameters = {\n tenant: string;\n apiPath: string;\n};\n\ntype GetTenantNameResponse = {\n value: string;\n};\n\nexport const getTenantName = ({tenant, apiPath}: GetTenantNameParameters) => {\n const url = `${apiPath}/tenants/${tenant}/name`;\n return rawRequest<GetTenantNameResponse>(url, {method: 'GET'});\n};\n\ntype GetRdmTenantsParameters = {\n tenant: string;\n apiPath: string;\n};\n\ntype GetRdmTenantsResponse = RdmTenant[];\n\nexport const getRdmTenants = ({tenant, apiPath}: GetRdmTenantsParameters) => {\n const url = `${apiPath}/tenants/${tenant}/_rdmTenants`;\n return rawRequest<GetRdmTenantsResponse>(url, {method: 'GET'});\n};\n","import {rawRequest} from '../index';\nimport {generateValuableQueryString} from './utils';\n\ntype GetUserPreferenceParams = {\n name: string;\n tenant: string;\n environment: string;\n user: string;\n servicesPath: string;\n};\n\ntype UserPreferenceResult = {\n environment: string;\n name: string;\n tenant: string;\n user: string;\n values: string[];\n};\n\ntype GetUserPreferenceResponse = {\n result: UserPreferenceResult[];\n success: boolean;\n};\n\nconst getUserPreference = (options: GetUserPreferenceParams): Promise<GetUserPreferenceResponse> => {\n const {name, tenant, environment, user, servicesPath} = options;\n const query = generateValuableQueryString({name, tenant, environment, user});\n\n const url = `${servicesPath}/preferences${query}`;\n\n return rawRequest(url, {\n method: 'GET'\n });\n};\n\ntype SetUserPreferenceParams = {\n name: string;\n tenant: string;\n environment: string;\n user: string;\n servicesPath: string;\n value: any;\n};\n\ntype SetUserPreferenceResponse = {\n result: UserPreferenceResult;\n success: boolean;\n};\n\nconst setUserPreference = (options: SetUserPreferenceParams): Promise<SetUserPreferenceResponse> => {\n const {name, tenant, environment, user, servicesPath, value} = options;\n const data = {\n name,\n tenant,\n environment,\n user,\n values: [JSON.stringify(value)]\n };\n\n const url = `${servicesPath}/preferences`;\n\n return rawRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(data)\n });\n};\n\ntype ResetUserPreferenceParams = {\n name: string;\n tenant: string;\n environment: string;\n user: string;\n servicesPath: string;\n};\n\ntype ResetUserPreferenceResponse = {\n result: UserPreferenceResult[];\n success: boolean;\n};\n\nconst resetUserPreference = (options: ResetUserPreferenceParams): Promise<ResetUserPreferenceResponse> => {\n const {name, tenant, environment, user, servicesPath} = options;\n const data = {\n name,\n tenant,\n environment,\n user\n };\n\n const url = `${servicesPath}/preferences`;\n\n return rawRequest(url, {\n method: 'DELETE',\n body: JSON.stringify(data)\n });\n};\n\nexport {getUserPreference, setUserPreference, resetUserPreference};\n","import {AccessToken} from '../../types';\nimport {rawRequest} from '../index';\n\ntype GetAccessTokenProps = {\n servicesPath: string;\n};\n\nconst getAccessToken = (options: GetAccessTokenProps): Promise<AccessToken> => {\n const {servicesPath} = options;\n const url = `${servicesPath}/getTokenForWorker`;\n\n return rawRequest(url, {\n method: 'GET'\n });\n};\n\nexport {getAccessToken};\n","import {DQDataLevel, DataTypes} from '../../types';\nimport {rawRequest} from '../index';\n\ntype DQExportParams = {\n exportDQPath: string;\n entityType: string;\n attributeType: string;\n metrics: string[];\n dataLevel: DQDataLevel;\n isTimeseries: boolean;\n tenant: string;\n period?: string[];\n type?: string;\n dataType: DataTypes;\n};\n\nexport const exportDQ = ({\n entityType,\n attributeType,\n metrics,\n isTimeseries,\n period,\n dataLevel,\n type = 'text/csv',\n exportDQPath,\n tenant,\n dataType\n}: Partial<DQExportParams>): Promise<Response> => {\n const url = `${exportDQPath}`;\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: {\n entityType,\n attributeType,\n metrics,\n dataLevel,\n type,\n period,\n isTimeseries,\n tenant,\n dataType\n }\n };\n return rawRequest(url, options);\n};\n","import {path, pathOr} from 'ramda';\nimport {SaveResponse} from '../../../types/network/entities';\nimport {ApiError, Entity} from '../../../types';\n\nconst getEntityFromSaveResponse = (saveResponse: SaveResponse): Entity =>\n pathOr(saveResponse, [0, 'object'], saveResponse);\n\nconst getErrorFromSaveResponse = (saveResponse: SaveResponse): ApiError => path([0, 'errors'], saveResponse);\n\nexport {getEntityFromSaveResponse, getErrorFromSaveResponse};\n","import {\n __,\n chain,\n clone,\n curry,\n evolve,\n filter,\n find,\n flatten,\n has,\n isNil,\n lensPath,\n map,\n omit,\n path,\n pathSatisfies,\n pipe,\n prop,\n propOr,\n reject,\n set,\n toPairs,\n values,\n when,\n keys\n} from 'ramda';\nimport {generateTempEntityUri, isTempUri} from '../uris';\nimport {\n addAttribute,\n createDefaultValues,\n editAttribute,\n findAttributeValuesByTypeUri,\n getReferencedEntityUriFromAttrValue\n} from '../attributes';\nimport {getAllPaths} from '../utils';\nimport {saveEntity} from '../network/api';\nimport {cleanEntityAttributes} from './entity';\nimport {AttributeType, AttributeValue, EntitiesMap, Entity, Metadata, Mode} from '../types';\nimport {\n applyCrosswalks,\n collectCrosswalksFromAttributes,\n compareActivenessAttributes,\n compareAttributes,\n compareImages,\n compareRoles,\n compareTags\n} from './editMode/AttributesDiff';\nimport * as DependencyManager from '../utils/DependencyManager';\nimport {getEntityFromSaveResponse, getErrorFromSaveResponse} from '../network/api/helpers/entities';\nimport {DCRProcessor} from './dcrRequests';\nimport {SaveResponseWithDCR} from '../types/network/entities';\n\nconst addInitValue = (entity, initValue, metadata, attributeTypes = []) => {\n const attributeType = attributeTypes.find(\n (attrType) => !attrType.lookupCode && !attrType.dependentLookupCode && attrType.type === 'String'\n );\n if (attributeType) {\n const existedDefaultValue = findAttributeValuesByTypeUri(metadata, entity, attributeType.uri)[0];\n if (existedDefaultValue && existedDefaultValue.value) {\n return editAttribute({\n entity,\n attributeType,\n uri: existedDefaultValue.uri,\n value: initValue\n });\n } else {\n return addAttribute({\n entity,\n attributeType,\n parentUri: entity.uri,\n value: initValue,\n index: 0\n });\n }\n } else {\n return entity;\n }\n};\ntype CreateTemporaryEntity = {\n entityTypeUri: string;\n initValue?: AttributeValue;\n attributeTypes: AttributeType[];\n metadata: Metadata;\n mode: Mode;\n};\nexport const createTemporaryEntity = ({\n entityTypeUri,\n initValue,\n attributeTypes,\n metadata,\n mode\n}: CreateTemporaryEntity): Entity => {\n const tempUri = generateTempEntityUri();\n const defaultValues = createDefaultValues({attributeTypes, parentUri: tempUri, metadata, mode});\n const entity = {\n attributes: defaultValues,\n uri: tempUri,\n type: entityTypeUri,\n timestamp: Date.now()\n };\n return initValue ? addInitValue(entity, initValue, metadata, attributeTypes) : entity;\n};\n\nexport const findTemporaryRefEntities = (entitiesMap: EntitiesMap, parentEntity: Entity): Entity[] => {\n return pipe(\n values,\n flatten,\n filter(has('refEntity')),\n map(getReferencedEntityUriFromAttrValue),\n filter(isTempUri),\n map((entityUri) => entitiesMap[entityUri]),\n reject(isNil)\n )(parentEntity?.attributes || {});\n};\n\nexport const findRelatedTemporaryEntities = curry((entitiesMap: EntitiesMap, parentEntity: Entity) => {\n entitiesMap = entitiesMap || {};\n parentEntity = parentEntity || ({} as Entity);\n const relatedEntities = findTemporaryRefEntities(entitiesMap, parentEntity);\n return relatedEntities.concat(chain(findRelatedTemporaryEntities(entitiesMap), relatedEntities));\n});\n\nexport const getUrisForSaving = curry((rule, object) => pipe(getAllPaths, filter(rule))(object));\nconst isRefEntityPath = (path) => path[path.length - 1] === 'objectURI' && path.includes('refEntity');\nconst getRefEntityPaths = getUrisForSaving(isRefEntityPath);\nexport const getPathsWithTempUri = (object) => filter(pipe((pathL) => path(pathL, object), isTempUri));\nexport const findAllTemporaryRefEntityURI = (object) => {\n const getUrisFromObject = pipe(\n getRefEntityPaths,\n getPathsWithTempUri(object),\n map((pathL) => path(pathL, object))\n );\n return getUrisFromObject(object);\n};\n\nexport const replaceTemporaryRefEntityURI = curry((tempUri, newUri, object) => {\n const getPath = pipe(\n getRefEntityPaths,\n find((pathToObjectURI) => pathSatisfies((uri) => uri === tempUri, pathToObjectURI, object))\n );\n const path = getPath(object);\n return path ? set(lensPath(path), newUri, object) : object;\n});\n\nconst clearTemporaryUri = when(pipe(prop('uri'), isTempUri), omit(['uri', 'timestamp']));\n\nconst prepareTemporaryEntityForApi = pipe(clearTemporaryUri, cleanEntityAttributes);\n\nexport const getEntityUriFromDCRResponse = (\n entityResponse: SaveResponseWithDCR,\n uriMapping: Record<string, string>\n) => {\n return pipe(\n prop('changes'),\n keys,\n find((uri: string) => !values(uriMapping).includes(uri))\n )(entityResponse);\n};\n\nexport const saveTemporaryEntity = async (\n entity: Entity,\n uriMapping: Record<string, string>,\n dcrProcessor?: DCRProcessor\n): Promise<string> => {\n if (!entity) {\n return null;\n }\n\n const tempUris = findAllTemporaryRefEntityURI(entity);\n if (tempUris.length > 0) {\n for (const uri of tempUris) {\n entity = replaceTemporaryRefEntityURI(uri, uriMapping[uri], entity);\n }\n }\n\n const saveResponse = await saveEntity(prepareTemporaryEntityForApi(entity), dcrProcessor?.enhanceUriWithDCR);\n const error = getErrorFromSaveResponse(saveResponse);\n if (error) throw error;\n const isDCRResponse = has('changes', saveResponse);\n if (isDCRResponse) {\n dcrProcessor?.updateDCRUriFromResponse(saveResponse);\n return getEntityUriFromDCRResponse(saveResponse, uriMapping);\n }\n const savedEntity = getEntityFromSaveResponse(saveResponse);\n return savedEntity.uri;\n};\n\nexport const saveTemporaryEntities = async (\n allEntitiesMap: Record<string, Entity>,\n rootTemporaryEntityUris: string[],\n dcrProcessor?: DCRProcessor\n): Promise<Record<string, string>> => {\n const tempUris = getTemporaryEntitiesUrisOrderForSaving(allEntitiesMap, rootTemporaryEntityUris);\n const uriMapping: Record<string, string> = {};\n for (const uri of tempUris) {\n uriMapping[uri] = await saveTemporaryEntity(allEntitiesMap[uri], uriMapping, dcrProcessor);\n }\n return uriMapping;\n};\n\nconst buildTreeForUriRoot = curry((allEntitiesMap, rootUri) => {\n const rootNode = DependencyManager.Node(rootUri);\n const edgesUris = findAllTemporaryRefEntityURI(allEntitiesMap[rootUri]);\n edgesUris.forEach((edgeUri) => {\n const edgeRootNode = buildTreeForUriRoot(allEntitiesMap, edgeUri);\n rootNode.addEdge(edgeRootNode);\n });\n return rootNode;\n});\n\nconst getTemporaryEntitiesUrisOrderForSaving = (\n allEntitiesMap: Record<string, Entity>,\n rootTemporaryEntityUris: string[]\n) => {\n return pipe(\n map(buildTreeForUriRoot(allEntitiesMap)),\n map(DependencyManager.getDependencyOrder),\n flatten,\n map((node) => node.getInfo())\n )(rootTemporaryEntityUris);\n};\ntype ReplaceTemporaryRefEntityURIInAttrDifType = (\n entitiesMapping: Record<string, Entity>,\n diff: Record<string, unknown>[]\n) => Record<string, unknown>[];\nconst replaceTemporaryRefEntityURIInAttrDif: ReplaceTemporaryRefEntityURIInAttrDifType = (entitiesMapping, diff) => {\n const uriPairs = toPairs(entitiesMapping);\n return map(\n evolve({\n newValue: when(\n Array.isArray,\n map((value) =>\n uriPairs.reduce(\n (acc, [tempUri, newUri]) => replaceTemporaryRefEntityURI(tempUri, newUri, acc),\n value\n )\n )\n )\n }),\n diff\n );\n};\n\nconst removeTemporaryUriInAttrDiff = map(\n evolve({\n newValue: when(Array.isArray, map(clearTemporaryUri))\n })\n);\n\nexport const collectSpecialAttributesDiff = (entity: Entity, modifiedEntity: Entity) => {\n const tagsDiff = compareTags(entity.tags || [], modifiedEntity.tags || []);\n const rolesDiff = compareRoles(entity.roles || [], modifiedEntity.roles || []);\n const imageDiff = compareImages(entity, modifiedEntity);\n const activenessDiff = compareActivenessAttributes(entity, modifiedEntity);\n return [...tagsDiff, ...rolesDiff, ...imageDiff, ...activenessDiff];\n};\n\nexport const collectAllDiffs = (\n entity: Entity,\n modifiedEntity: Entity,\n forceOvForUiUpdates: boolean\n): Record<string, unknown>[] => {\n const attrDiff = compareAttributes(clone(entity.attributes), clone(modifiedEntity.attributes), false);\n const crosswalks = collectCrosswalksFromAttributes(\n clone(modifiedEntity.attributes),\n clone(modifiedEntity.crosswalks)\n );\n const attrDiffWithCrosswalks = applyCrosswalks(attrDiff, crosswalks, entity, forceOvForUiUpdates);\n return [...attrDiffWithCrosswalks, ...collectSpecialAttributesDiff(entity, modifiedEntity)];\n};\n\nexport const prepareAttrDiff: ReplaceTemporaryRefEntityURIInAttrDifType = pipe(\n replaceTemporaryRefEntityURIInAttrDif,\n removeTemporaryUriInAttrDiff\n);\n\nexport const replaceUriWhenTemporary: (tempUrisMap: Record<string, string>, uri?: string) => string = curry(\n (tempUrisMap, uri) => when(isTempUri, propOr(__, uri, tempUrisMap), uri)\n);\n","import {prop, path} from 'ramda';\nimport {Connection, EntitiesMap} from '../types';\nimport {findTemporaryRefEntities} from './temporary';\nimport {isRelationUri, isTempUri} from '../uris';\nimport {findConnectionByRelationUri, getConnectionEntityUriPath, getConnectionRelationUriPath} from '../relations';\n\ntype ObjectsHierarchyNode = {\n children: string[];\n parents: string[];\n};\n\nexport type ObjectsHierarchy = {[objectUri: string]: ObjectsHierarchyNode};\n\ntype AddObjectsHierarchyNode = {\n hierarchy: ObjectsHierarchy;\n uri: string;\n children?: string[];\n parents?: string[];\n};\n\nconst addObjectsHierarchyNode = ({\n hierarchy,\n uri,\n parents = [],\n children = []\n}: AddObjectsHierarchyNode): ObjectsHierarchy => {\n return {\n ...hierarchy,\n [uri]: {\n parents,\n children\n }\n };\n};\n\nconst updateObjectsHierarchyNode = ({\n hierarchy,\n uri,\n parents = [],\n children = []\n}: AddObjectsHierarchyNode): ObjectsHierarchy => {\n return {\n ...hierarchy,\n [uri]: {\n parents: hierarchy[uri].parents.concat(parents),\n children: hierarchy[uri].children.concat(children)\n }\n };\n};\n\nconst getEntitiesHierarchy = (\n entityUri: string,\n entitiesMap: EntitiesMap,\n parents: string[] = [],\n hierarchy: ObjectsHierarchy = {}\n): ObjectsHierarchy => {\n const parentEntity = entitiesMap[entityUri];\n const relatedEntities = findTemporaryRefEntities(entitiesMap, parentEntity);\n const updatedResult = addObjectsHierarchyNode({\n hierarchy,\n uri: entityUri,\n children: relatedEntities.map(prop('uri')),\n parents\n });\n return relatedEntities.reduce(\n (result, entity) => getEntitiesHierarchy(entity.uri, entitiesMap, [entityUri], result),\n updatedResult\n );\n};\n\nconst addConnectionsToHierarchy = (\n connections: Connection[],\n entityUri: string,\n entitiesMap: EntitiesMap,\n hierarchy: ObjectsHierarchy = {}\n): ObjectsHierarchy => {\n return connections.reduce((updatedHierarchy, connection) => {\n const uri: string = path(getConnectionRelationUriPath(), connection);\n const hierarchyWithUpdatedMainEntity = entityUri\n ? updateObjectsHierarchyNode({\n hierarchy: updatedHierarchy,\n uri: entityUri,\n children: [uri]\n })\n : updatedHierarchy;\n const connectedEntityUri: string = path(getConnectionEntityUriPath(), connection);\n const isConnectedEntityTemporary = isTempUri(connectedEntityUri);\n const children = isConnectedEntityTemporary ? [connectedEntityUri] : [];\n const hierarchyWithConnection = addObjectsHierarchyNode({\n hierarchy: hierarchyWithUpdatedMainEntity,\n uri,\n children,\n parents: entityUri ? [entityUri] : []\n });\n return children.reduce(\n (result, tempEntityUri) => getEntitiesHierarchy(tempEntityUri, entitiesMap, [uri], result),\n hierarchyWithConnection\n );\n }, hierarchy);\n};\n\nconst getFullObjectsHierarchy = (entityUri: string, entitiesMap: EntitiesMap, connections: Connection[] = []) =>\n addConnectionsToHierarchy(connections, entityUri, entitiesMap, getEntitiesHierarchy(entityUri, entitiesMap));\n\nconst getRestrictedObjectsHierarchy = (\n desiredRootUri: string,\n entityUri: string,\n entitiesMap: EntitiesMap,\n connections: Connection[] = []\n) => {\n if (desiredRootUri === entityUri) {\n return getFullObjectsHierarchy(entityUri, entitiesMap, connections);\n }\n if (isRelationUri(desiredRootUri)) {\n const connection: Connection = findConnectionByRelationUri(connections, desiredRootUri);\n return connection && addConnectionsToHierarchy([connection], null, entitiesMap);\n }\n if (entitiesMap[desiredRootUri]) {\n return getEntitiesHierarchy(desiredRootUri, entitiesMap);\n }\n};\n\nconst getHierarchyDescendants = (hierarchy: ObjectsHierarchy, uri: string) => {\n const children = hierarchy[uri]?.children || [];\n return children.concat(children.flatMap((childUri) => getHierarchyDescendants(hierarchy, childUri)));\n};\n\nconst getHierarchyAncestors = (hierarchy: ObjectsHierarchy, uri: string) => {\n const parents = hierarchy[uri]?.parents || [];\n return parents.concat(parents.flatMap((parentUri) => getHierarchyAncestors(hierarchy, parentUri)));\n};\n\nexport {\n getEntitiesHierarchy,\n getFullObjectsHierarchy,\n getRestrictedObjectsHierarchy,\n getHierarchyDescendants,\n getHierarchyAncestors\n};\n","import {path, propEq} from 'ramda';\nimport {getAttributeTypeUriByValueUri, getBaseUri, isRelationUri, isTempUri} from '../uris';\nimport {\n AttributeType,\n AttributeValue,\n AttributeValuePathItem,\n AttributeValuePathItemType,\n ComplexAttributeValue,\n Connection,\n EntitiesMap,\n Entity,\n Metadata,\n ReferenceAttributeValue,\n Relation,\n TEntityType,\n TRelationType\n} from '../types';\nimport {getFullObjectsHierarchy, getHierarchyAncestors} from '../entity/objectsHierarchy';\nimport {\n findConnectionByRelationUri,\n findConnectionRelationObjectByRelationUri,\n getConnectionRelationTypePath\n} from '../relations';\nimport {getEntityType, getRelationType} from '../metadata';\nimport {findAttributeTypeByUri, getAttributeTypeSubAttributes} from '../metadata/attributes';\nimport {getReferencedEntityUriFromAttrValue} from './referenceAttribute';\nimport {findReferenceAttributeByRefEntityUri} from './findValue';\n\ntype GetValuePathData = {\n entityUri: string;\n metadata: Metadata;\n entitiesMap: EntitiesMap;\n connections?: Connection[];\n};\n\nconst getAncestorsValuePath = (\n {entitiesMap = {}, connections = [], metadata}: Omit<GetValuePathData, 'entityUri'>,\n ancestorsBaseUris: string[],\n valueBaseUri: string\n): AttributeValuePathItem[] => {\n const result: AttributeValuePathItem[] = [];\n let connection: Connection;\n for (let i = 0; i < ancestorsBaseUris.length; i++) {\n const parentUri = ancestorsBaseUris[i];\n const childUri = ancestorsBaseUris[i + 1] || valueBaseUri;\n if (isRelationUri(childUri)) {\n connection = findConnectionByRelationUri(connections, childUri);\n if (!connection) {\n return null;\n }\n result.push({\n type: AttributeValuePathItemType.relationConnection,\n value: connection,\n valueType: getRelationType(metadata, path(getConnectionRelationTypePath(), connection))\n });\n continue;\n }\n if (isRelationUri(parentUri)) {\n const tempEntity = entitiesMap[childUri];\n if (!tempEntity) {\n return null;\n }\n result.push({\n type: AttributeValuePathItemType.tempEntity,\n value: tempEntity,\n valueType: getEntityType(metadata, tempEntity.type)\n });\n continue;\n }\n const parentEntity = entitiesMap[parentUri];\n const referenceAttribute: ReferenceAttributeValue = findReferenceAttributeByRefEntityUri(\n parentEntity,\n childUri\n );\n const childEntity = entitiesMap[childUri];\n if (!referenceAttribute || !childEntity) {\n return null;\n }\n result.push({\n type: AttributeValuePathItemType.attributeValue,\n value: referenceAttribute,\n valueType: findAttributeTypeByUri(\n metadata,\n getAttributeTypeUriByValueUri(referenceAttribute.uri, parentEntity.type)\n )\n });\n result.push({\n type: AttributeValuePathItemType.tempEntity,\n value: childEntity,\n valueType: getEntityType(metadata, childEntity.type)\n });\n }\n return result;\n};\n\nconst splitOnNamesAndIds = (valueUri: string): [string[], string[]] | [] => {\n const relativeUri = valueUri.split('/attributes/').slice(1).join('/attributes/');\n if (!relativeUri) {\n return [];\n }\n const [names, ids] = relativeUri.split('/').reduce(\n (partitions, elem, idx) => {\n partitions[idx % 2 === 0 ? 0 : 1].push(elem);\n return partitions;\n },\n [[], []]\n );\n if (names.length !== ids.length) {\n return [];\n }\n return [names, ids];\n};\n\nconst getAttributeValuePath = (\n {entityUri, entitiesMap = {}, connections = [], metadata}: GetValuePathData,\n valueUri: string\n): AttributeValuePathItem[] => {\n const result: AttributeValuePathItem[] = [];\n const baseUri: string = getBaseUri(valueUri);\n const objectsHierarchy = getFullObjectsHierarchy(entityUri, entitiesMap, connections);\n const ancestorsUris: string[] = getHierarchyAncestors(objectsHierarchy, baseUri).reverse();\n const ancestorsValuePath = getAncestorsValuePath({entitiesMap, connections, metadata}, ancestorsUris, baseUri);\n if (!ancestorsValuePath) {\n return null;\n }\n result.push(...ancestorsValuePath);\n const isRelation: boolean = isRelationUri(baseUri);\n const entity: Entity | Relation = isRelation\n ? findConnectionRelationObjectByRelationUri(connections, baseUri)\n : entitiesMap[baseUri];\n const [names, ids] = valueUri !== baseUri ? splitOnNamesAndIds(valueUri) : [[], []];\n if (!entity || !names || !ids) {\n return null;\n }\n let type: TEntityType | TRelationType | AttributeType = isRelation\n ? getRelationType(metadata, entity.type)\n : getEntityType(metadata, entity.type);\n let valuesRecord = entity.attributes;\n let tempEntity: Entity;\n for (let i = 0; i < names.length; i++) {\n const attributes: AttributeType[] =\n i === 0 ? type.attributes : getAttributeTypeSubAttributes(metadata, type as AttributeType);\n type = attributes?.find(propEq('name', names[i])) as AttributeType;\n if (type) {\n const findValue = ({uri}) => uri.endsWith(`/${ids[i]}`);\n const ownValue = (valuesRecord[type.name] as AttributeValue[])?.find(findValue);\n const tempEntityValue = (tempEntity?.attributes?.[type.name] as AttributeValue[])?.find(findValue);\n const value = tempEntityValue || ownValue;\n if (!value) {\n return null;\n }\n if (tempEntityValue) {\n result.push({\n type: AttributeValuePathItemType.tempEntity,\n value: tempEntity,\n valueType: getEntityType(metadata, tempEntity.type)\n });\n }\n result.push({\n type: AttributeValuePathItemType.attributeValue,\n value,\n valueType: type\n });\n valuesRecord = (value as ComplexAttributeValue).value;\n const referencedEntityUri = getReferencedEntityUriFromAttrValue(value);\n tempEntity =\n referencedEntityUri && isTempUri(referencedEntityUri) ? entitiesMap[referencedEntityUri] : null;\n } else {\n return null;\n }\n }\n return result;\n};\n\nconst getAbsoluteValueUriFromPath = (valuePath: AttributeValuePathItem[]) => {\n const canGet = valuePath.every(({type}) =>\n [AttributeValuePathItemType.attributeValue, AttributeValuePathItemType.tempEntity].includes(type)\n );\n return canGet\n ? valuePath\n .filter(({type}) => type === AttributeValuePathItemType.attributeValue)\n .reduce((result, pathItem) => {\n const valueUri = (pathItem.value as AttributeValue).uri;\n if (!result) {\n return valueUri;\n }\n const lastUriParts = valueUri.split('/').slice(-2).join('/');\n return `${result}/${lastUriParts}`;\n }, '')\n : null;\n};\n\nexport {getAttributeValuePath, getAbsoluteValueUriFromPath};\n","import {\n any,\n cond,\n curry,\n has,\n isNil,\n join,\n keys,\n lte,\n pipe,\n prop,\n propSatisfies,\n split,\n slice,\n startsWith\n} from 'ramda';\nimport {HistoryAppearanceActions, HistoryDiff} from '../types';\n\ntype historyColors = {\n backgroundColor?: string;\n color: string;\n};\n\nexport enum HistoryOperations {\n insertAttribute = 'insertAttribute',\n updateAttribute = 'updateAttribute',\n deleteAttribute = 'deleteAttribute'\n}\n\nexport const historyPalettes: {[key: string]: historyColors} = {\n [HistoryOperations.insertAttribute]: {\n color: '#599E0E'\n },\n [HistoryOperations.updateAttribute]: {\n backgroundColor: 'rgba(255, 187, 0, 0.12)',\n color: '#CC7500'\n },\n [HistoryOperations.deleteAttribute]: {\n backgroundColor: 'rgba(255, 50, 0, 0.2)',\n color: '#CF0E26'\n }\n};\n\nexport const getHistoryAttributeClassName = (type: HistoryAppearanceActions) => {\n switch (type) {\n case 'UPDATE_ATTRIBUTE':\n return HistoryOperations.updateAttribute;\n case 'UNDO_IGNORE_ATTRIBUTE':\n case 'INSERT_ATTRIBUTE':\n return HistoryOperations.insertAttribute;\n case 'IGNORE_ATTRIBUTE':\n case 'DELETE_ATTRIBUTE':\n return HistoryOperations.deleteAttribute;\n default:\n return '';\n }\n};\n\nconst ATTRIBUTE_DELIMITER = '/';\n\nconst hasParent = pipe(split(ATTRIBUTE_DELIMITER), propSatisfies(lte(2), 'length'));\n\nconst getParentUri = pipe(split(ATTRIBUTE_DELIMITER), slice(0, -2), join(ATTRIBUTE_DELIMITER));\n\nconst getParentHistoryAppearanceByUri = curry((uri: string, history: HistoryDiff['appearance']) => {\n return cond([\n [has(uri), prop(uri)],\n [() => hasParent(uri), getParentHistoryAppearanceByUri(getParentUri(uri))]\n ])(history);\n});\n\nconst hasModifiedChildren = (uri: string) => pipe(keys, any(startsWith(uri + ATTRIBUTE_DELIMITER)));\n\nexport const getHistoryAppearanceByUri = (uri = '', history: HistoryDiff['appearance'] = {}) => {\n const state = getParentHistoryAppearanceByUri(uri, history);\n if (isNil(state)) {\n return hasModifiedChildren(uri)(history) ? 'UPDATE_ATTRIBUTE' : '';\n }\n return state;\n};\n\nexport const getHistoryAppearanceBySpecialAttributeValue = (\n name: string,\n value: string,\n history: HistoryDiff['appearance'] = {}\n) => history?.[name]?.[value];\n","import {eqBy, find, propOr} from 'ramda';\nimport {Contributor, CrosswalkBase, CrosswalkTree} from '../types';\nimport {getCrosswalkId} from './index';\n\nexport const collectContributorsFromTree = (tree: CrosswalkTree) => {\n let contributors: Contributor[] = [];\n if (tree) {\n contributors.push({uri: tree.uri, crosswalks: tree.crosswalks, merges: tree.merges});\n\n tree.merges?.forEach((merge) => {\n merge.losers.forEach((loser) => {\n contributors = contributors.concat(collectContributorsFromTree(loser));\n });\n });\n }\n return contributors;\n};\n\nexport const findContributorForCrosswalk = (contributors: Contributor[], crosswalk: CrosswalkBase): Contributor =>\n find((contributor) => find(eqBy(getCrosswalkId, crosswalk), propOr([], 'crosswalks', contributor)), contributors);\n\nexport const collectCrosswalksFromContributor = (contributor: Contributor, includeMerges?: boolean) => {\n let crosswalks = contributor.crosswalks || [];\n if (!includeMerges) {\n contributor.merges?.forEach((merge) => {\n merge.losers?.forEach((looser) => {\n crosswalks = crosswalks.concat(collectCrosswalksFromContributor(looser));\n });\n });\n }\n return crosswalks;\n};\n\nexport const calculateCrosswalkTreeDeep = (tree: CrosswalkTree) => {\n let deep = 0;\n if (tree) {\n tree.merges?.forEach((merge) => {\n merge.losers?.forEach((loser) => {\n const childDeep = calculateCrosswalkTreeDeep(loser);\n if (childDeep > deep) deep = childDeep;\n });\n });\n return deep + 1;\n }\n return deep;\n};\n","import moment from 'moment';\nimport {\n assoc,\n chain,\n eqBy,\n filter,\n flatten,\n has,\n head,\n ifElse,\n isNil,\n map,\n pipe,\n prop,\n propOr,\n reject,\n uniq,\n values,\n when\n} from 'ramda';\nimport {\n AttributeValue,\n Crosswalk,\n CrosswalkBase,\n DataTenant,\n ReferenceAttributeValue,\n RelationCrosswalk\n} from '../types';\nimport {isTempUri} from '../uris';\nimport {getReferencedRelationFromAttrValue} from '../attributes';\nimport {isEmptyValue} from '../utils';\n\nconst RELTIO_XWALK_TYPE = 'configuration/sources/Reltio';\n\nexport const isReltioCrosswalk = (crosswalks: Array<Crosswalk>, attributeValue: AttributeValue): boolean => {\n if (isTempUri(attributeValue.uri)) {\n return true;\n }\n const crosswalk = (crosswalks || []).find((crosswalk) => {\n return crosswalk.attributes && crosswalk.attributes.includes(attributeValue.uri);\n });\n\n return crosswalk ? crosswalk.type === RELTIO_XWALK_TYPE : true;\n};\n\nexport const getCrosswalkId = ({sourceTable, type, value}: CrosswalkBase) => `${sourceTable || ''}/${type}/${value}`;\n\nexport const getCrosswalkAttributes = (crosswalk: Crosswalk | RelationCrosswalk): string[] => {\n const attributes = 'attributes' in crosswalk && crosswalk.attributes;\n const attributeURIs = 'attributeURIs' in crosswalk && crosswalk.attributeURIs;\n return attributes || attributeURIs || [];\n};\n\nexport const isCrosswalkDisabled = ({deleteDate}: CrosswalkBase) => {\n return !!deleteDate && moment.utc(deleteDate).valueOf() < Date.now();\n};\n\nexport const getDataTenantFromCrosswalks = (\n crosswalks: (Crosswalk | RelationCrosswalk)[],\n dataTenantSources: DataTenant[]\n): DataTenant => {\n const dataTenantsByType: Record<string, DataTenant> = dataTenantSources.reduce((acc, dataTenant) => {\n acc['configuration/sources/' + dataTenant.name] = dataTenant;\n return acc;\n }, {});\n\n const dataTenantsById: Record<string, DataTenant> = dataTenantSources.reduce((acc, dataTenant) => {\n acc[dataTenant.id] = dataTenant;\n return acc;\n }, {});\n\n const getDataTenantForCrosswalk = (crosswalk: Crosswalk | RelationCrosswalk) => {\n if (dataTenantsByType[crosswalk.type]) {\n return dataTenantsByType[crosswalk.type];\n }\n const dtId = (crosswalk as Crosswalk).crosswalkExternalInfo?.dtssInfo?.tenantId;\n if (dtId && dataTenantsById[dtId]) {\n return dataTenantsById[dtId];\n }\n };\n\n return pipe(\n map(getDataTenantForCrosswalk),\n reject(isNil),\n uniq,\n ifElse(\n ({length}) => length === 1,\n head,\n () => undefined\n )\n )(crosswalks);\n};\n\nexport const eqCrosswalks = eqBy(getCrosswalkId);\n\nexport const getRelationCrosswalks = pipe(\n propOr({}, 'attributes'),\n values,\n flatten,\n filter(has('refRelation')),\n chain((attributeValue: ReferenceAttributeValue) => {\n return pipe(\n getReferencedRelationFromAttrValue,\n propOr([], 'crosswalks'),\n map(when(pipe(prop('attributeURIs'), isEmptyValue), assoc('attributeURIs', [attributeValue.uri])))\n )(attributeValue);\n })\n);\n\nexport * from './crosswalksTree';\n","import {isObject} from '../../utils';\nimport {allPass, always, clone, defaultTo, equals, ifElse, isNil, pipe, prop, propEq, reject} from 'ramda';\nimport {findSiblingsAttributeValues, isOv} from '../../attributes';\nimport {isReltioCrosswalk} from '../../crosswalks';\nimport {\n AttributeValue,\n ComplexAttributeValue,\n PrimitiveValue,\n RecordAttributesType,\n ReferenceAttributeValue,\n SimpleAttributeValue,\n ImageAttributeValue,\n Entity,\n Crosswalk,\n RelationCrosswalk\n} from '../../types';\n\nfunction isAttribute(obj) {\n return obj && typeof obj.uri !== 'undefined';\n}\n\nfunction isProfilePicValueEqual(v1, v2) {\n if (v1 !== v2) {\n if (isAttribute(v1) && isAttribute(v2)) {\n return v1.uri === v2.uri;\n }\n return false;\n } else {\n return true;\n }\n}\n\n/**\n * Use this module to work with attribute differences.\n * For more information about difference types, see {@link https://help.reltio.com/reltio-manual/api-reference/data-api/entities#toc-57}\n *\n * Typically, to construct a request for a cumulative update endpoint, do the following:\n * <ol>\n * <li>Get the diff values for the original and modified entities (or relations).</li>\n * <li>Apply crosswalks to the diff array.</li>\n * </ol>\n *\n * @module entity/editMode/AttributesDiff\n */\nexport {\n compareAttributes,\n compareImages,\n compareActivenessAttributes,\n compareTags,\n compareRoles,\n applyCrosswalks,\n collectCrosswalksFromAttributes\n};\nexport enum EventType {\n UPDATE_PROFILE_PIC_BY_URI = 'UPDATE_PROFILE_PIC_BY_URI',\n UPDATE_PROFILE_PIC_BY_URL = 'UPDATE_PROFILE_PIC_BY_URL',\n UPDATE_START_DATE = 'UPDATE_START_DATE',\n UPDATE_END_DATE = 'UPDATE_END_DATE',\n INSERT_ATTRIBUTE = 'INSERT_ATTRIBUTE',\n UPDATE_ATTRIBUTE = 'UPDATE_ATTRIBUTE',\n DELETE_ATTRIBUTE = 'DELETE_ATTRIBUTE',\n UPDATE_ROLES = 'UPDATE_ROLES',\n UPDATE_TAGS = 'UPDATE_TAGS',\n IGNORE_ATTRIBUTE = 'IGNORE_ATTRIBUTE',\n _UPDATE_NON_OV_ATTRIBUTE = '_UPDATE_NON_OV_ATTRIBUTE'\n}\ntype Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;\n\ntype SimpleValue<T> = {value: T};\ntype BooleanValue = SimpleValue<boolean>;\ntype CrosswalkWithOptionalUri = Optional<Crosswalk, 'uri'>;\ntype AttributeValueWithOptionalUri = Optional<AttributeValue, 'uri'>;\n\ntype TagsUpdate = {\n type: EventType.UPDATE_TAGS;\n newValue: string[];\n};\ntype RolesUpdate = {\n type: EventType.UPDATE_ROLES;\n newValue: string[];\n};\n\ntype ProfilePicByUriUpdate = {\n type: EventType.UPDATE_PROFILE_PIC_BY_URI;\n newValue: SimpleValue<string>;\n};\n\ntype ProfilePicByUrlUpdate = {\n type: EventType.UPDATE_PROFILE_PIC_BY_URL;\n newValue: SimpleValue<ImageAttributeValue>;\n};\n\ntype StartDateUpdate = {\n type: EventType.UPDATE_START_DATE;\n newValue: SimpleValue<string>;\n};\n\ntype EndDateUpdate = {\n type: EventType.UPDATE_END_DATE;\n newValue: SimpleValue<string>;\n};\n\ntype AttributeInsert = {\n type: EventType.INSERT_ATTRIBUTE;\n newValue: AttributeValueWithOptionalUri[];\n uri: string;\n insteadOfUpdate?: boolean;\n};\n\ntype AttributeIgnore = {\n type: EventType.IGNORE_ATTRIBUTE;\n crosswalk?: CrosswalkWithOptionalUri;\n uri: string;\n newValue: BooleanValue;\n};\n\ntype AttributeUpdate = {\n type: EventType.UPDATE_ATTRIBUTE;\n crosswalk?: CrosswalkWithOptionalUri;\n uri: string;\n newValue: SimpleValue<PrimitiveValue | ComplexAttributeValue['value'] | ImageAttributeValue['value']>;\n};\n\ntype NonOvAttributeUpdate = {\n type: EventType._UPDATE_NON_OV_ATTRIBUTE;\n uri: string;\n crosswalk?: CrosswalkWithOptionalUri;\n typeUri: string;\n value: PrimitiveValue | ComplexAttributeValue['value'] | ImageAttributeValue['value'];\n};\n\ntype AttributeDelete = {\n type: EventType.DELETE_ATTRIBUTE;\n crosswalk?: CrosswalkWithOptionalUri;\n uri: string;\n};\nexport type EventWithCrosswalk = (AttributeDelete | NonOvAttributeUpdate | AttributeIgnore | AttributeUpdate) & {\n removeIt?: boolean;\n};\n\nexport type EventWithUri = EventWithCrosswalk | AttributeInsert;\n\nexport type SimpleEvent =\n | EventWithUri\n | EndDateUpdate\n | StartDateUpdate\n | ProfilePicByUrlUpdate\n | ProfilePicByUriUpdate\n | RolesUpdate\n | TagsUpdate;\n\nfunction compareArraysAndGenerateEvent<T extends TagsUpdate | RolesUpdate>(\n type: EventType.UPDATE_TAGS | EventType.UPDATE_ROLES\n) {\n return function checkEquality(a: string[], b: string[]) {\n const result: Array<T> = [];\n if (!arraysEquality(a, b)) {\n result.push({\n type: type,\n newValue: b\n } as T);\n }\n return result;\n };\n}\n\nfunction arraysEquality(array1: string[], array2: string[]) {\n if (!array1 && !array2) {\n return true;\n } else if (!array1 || !array2) {\n return false;\n }\n return (\n array1.length === array2.length &&\n array1.every(function (element, index) {\n return element === array2[index];\n })\n );\n}\nfunction isReference(value: AttributeValue): value is ReferenceAttributeValue {\n return (value as ReferenceAttributeValue).refEntity !== undefined;\n}\nfunction refEquality(ref1: ReferenceAttributeValue, ref2: ReferenceAttributeValue) {\n function equalsByField(field: string) {\n if (ref1[field] && ref2[field]) {\n if (Array.isArray(ref1[field]) && Array.isArray(ref2[field])) {\n if (ref1[field].length !== ref2[field].length) {\n return false;\n }\n if (ref1[field][0] && ref2[field][0] && ref1[field][0].objectURI !== ref2[field][0].objectURI) {\n return false;\n }\n } else if (ref1[field].objectURI !== ref2[field].objectURI) {\n return false;\n }\n }\n\n return true;\n }\n\n return equalsByField('refEntity') && equalsByField('refRelation');\n}\n\n/**\n * Use this function to compare the attributes of two entities (or relations).\n *\n * @param {Object} a - Original entity or relation attributes\n * @param {Object} b - Modified entity or relation attributes\n * @param {Boolean} keepUri - Do not delete temporary uris for INSERT_ATTRIBUTE operation\n * @return {Array} A diff array.\n * @static\n * @example\n * ```\n * var a = {\n * FirstName: [{\n * type: '/attributes/FirstName',\n * uri: '/attributes/FirstName/1',\n * value: 'Jon'\n * }],\n * LastName: [{\n * type: '/attributes/LastName',\n * uri: '/attributes/LastName/1',\n * value: 'Snow'\n * }]\n * };\n * var b = {\n * FirstName: [{\n * type: '/attributes/FirstName',\n * uri: '/attributes/FirstName/1',\n * value: 'Jon'\n * }],\n * LastName: [{\n * uri: '/attributes/LastName/1',\n * type: '/attributes/LastName',\n * value: 'Snow'\n * }, {\n * type: '/attributes/LastName',\n * uri: 'uri/attributes/LastName/$uri23',\n * value: 'Stark'\n * }, {\n * type: '/attributes/LastName',\n * uri: 'uri/attributes/LastName/$uri24',\n * value: 'Targaryen'\n * }]\n * };\n *\n * var result = AttributesDiff.compareAttributes(a, b);\n *\n * expect(result[0]).toEqual({\n * type: 'INSERT_ATTRIBUTE',\n * uri: 'uri/attributes/LastName',\n * newValue: [\n * {value: 'Stark'},\n * {value: 'Targaryen'}\n * ]\n * });\n * ```\n */\nfunction compareAttributes(a: RecordAttributesType, b: RecordAttributesType, keepUri?: boolean) {\n const result: SimpleEvent[] = [];\n\n for (const attrA in a) {\n if (a.hasOwnProperty(attrA)) {\n if (attrA === 'paging') {\n continue;\n }\n\n const currentAttribute = a[attrA];\n if (b[attrA] === undefined) {\n for (const currentVal in currentAttribute) {\n if (currentAttribute.hasOwnProperty(currentVal)) {\n result.push(...createEntryDeleteAttribute(currentAttribute[currentVal]));\n }\n }\n } else {\n for (const val in currentAttribute) {\n if (currentAttribute.hasOwnProperty(val)) {\n const valFromA = currentAttribute[val];\n const valFromB = findAttrValue(valFromA, b[attrA]);\n if (valFromB === undefined) {\n result.push(...createEntryDeleteAttribute(valFromA));\n } else {\n if (\n valFromA.value !== valFromB.value &&\n (!valFromA.lookupCode || valFromA.lookupCode !== valFromB.lookupCode)\n ) {\n if (valFromB.value == null || valFromB.value === '') {\n result.push(...createEntryDeleteAttribute(valFromA));\n } else if (getAttributeType(valFromA) === 'Nested') {\n if (\n valFromA.ignored !== valFromB.ignored &&\n equals(valFromA.value, valFromB.value)\n ) {\n result.push(...createIgnoreEvent(valFromB));\n } else {\n result.push(...compareAttributes(valFromA.value, valFromB.value, keepUri));\n }\n } else if (getAttributeType(valFromA) === 'Reference') {\n if (!refEquality(valFromA, valFromB)) {\n result.push(...createEntryDeleteAttribute(valFromA));\n result.push(createEntryInsertAttribute([valFromB]));\n } else {\n result.push(...compareAttributes(valFromA.value, valFromB.value, keepUri));\n }\n } else if (valFromB.value !== '') {\n if (valFromB.ov === false) {\n result.push(...createEntryUpdateNonOVAttribute(valFromB));\n } else {\n result.push(...createEntryUpdateAttribute(valFromB));\n }\n }\n } else if (valFromA.ignored !== valFromB.ignored) {\n result.push(...createIgnoreEvent(valFromB));\n }\n }\n }\n }\n }\n }\n }\n\n for (const attrB in b) {\n if (b.hasOwnProperty(attrB)) {\n if (attrB === 'paging') {\n continue;\n }\n const attrBValue = (b[attrB] || []) as AttributeValue[];\n let missedValues = attrBValue.filter(function (value) {\n return findAttrValue(value, a[attrB]) === undefined;\n });\n\n missedValues = removeEmptyValues(clone(missedValues)) as AttributeValue[];\n\n if (missedValues.length) {\n result.push(createEntryInsertAttribute(missedValues));\n }\n }\n }\n\n return result;\n\n /*\n * values = [{\n \"value\": {\n \"simpleLookup\": [{\n \"value\": \"\",\n \"uri\": \"entities/KcMEWnB/attributes/Identifiers/uri$$1487657773670/simpleLookup/uri$$1487657773826\",\n \"type\": \"configuration/entityTypes/HCP/attributes/Identifiers/attributes/simpleLookup\"\n }],\n \"simpleReqLookup\": [{\n \"value\": \"TheOne\",\n \"uri\": \"entities/KcMEWnB/attributes/Identifiers/uri$$1487657773670/simpleReqLookup/uri$$1487657773869\",\n \"type\": \"configuration/entityTypes/HCP/attributes/Identifiers/attributes/simpleReqLookup\"\n }]\n },\n \"uri\": \"entities/KcMEWnB/attributes/Identifiers/uri$$1487657773670\",\n \"type\": \"entities/KcMEWnB/attributes/Identifiers/uri$$1487657773670\"\n }]\n */\n function removeEmptyValues(values: AttributeValue[]) {\n if (values) {\n const mappedValues = values.map(function (valueObject) {\n let hasValue;\n if (valueObject) {\n const value = valueObject.value;\n\n if (value != null) {\n if (isObject(value)) {\n const keys = Object.keys(value);\n keys.forEach(function (key) {\n const simpleValue = removeEmptyValues(value[key]);\n\n if (simpleValue.length > 0) {\n value[key] = simpleValue;\n } else {\n delete value[key];\n }\n if (!hasValue) {\n hasValue = simpleValue.length !== 0;\n }\n });\n } else {\n hasValue = value != null && value !== '';\n }\n }\n\n return hasValue ||\n (valueObject as SimpleAttributeValue).lookupCode ||\n (valueObject as ReferenceAttributeValue).refEntity\n ? valueObject\n : null;\n }\n });\n\n return mappedValues.filter(function (value) {\n return value != null;\n });\n }\n return [];\n }\n\n function createEntryDeleteAttribute(attr: AttributeValue): AttributeDelete[] {\n return [\n {\n type: EventType.DELETE_ATTRIBUTE,\n uri: attr.uri\n }\n ];\n }\n\n function createEntryIgnoreAttribute(attr: AttributeValue): AttributeIgnore[] {\n return [\n {\n type: EventType.IGNORE_ATTRIBUTE,\n uri: attr.uri,\n newValue: {value: true}\n }\n ];\n }\n\n function createEntryUndoIgnoreAttribute(attr: AttributeValue): AttributeIgnore[] {\n return [\n {\n type: EventType.IGNORE_ATTRIBUTE,\n uri: attr.uri,\n newValue: {value: false}\n }\n ];\n }\n\n function createEntryUpdateAttribute(attr: AttributeValue): AttributeUpdate[] {\n return [\n {\n type: EventType.UPDATE_ATTRIBUTE,\n uri: attr.uri,\n newValue: {\n value: (attr as SimpleAttributeValue).lookupCode || attr.value\n }\n }\n ];\n }\n\n function createIgnoreEvent(value: AttributeValue): AttributeIgnore[] {\n return value && (value.ignored ? createEntryIgnoreAttribute(value) : createEntryUndoIgnoreAttribute(value));\n }\n\n //for internal use only\n function createEntryUpdateNonOVAttribute(attr: AttributeValue): NonOvAttributeUpdate[] {\n const index = attr.uri.lastIndexOf('/');\n const typeUri = attr.uri.substr(0, index);\n return [\n {\n type: EventType._UPDATE_NON_OV_ATTRIBUTE,\n uri: attr.uri,\n typeUri: typeUri,\n value: (attr as SimpleAttributeValue).lookupCode || attr.value\n }\n ];\n }\n\n function createEntryInsertAttribute(missedValues: AttributeValue[]) {\n let uri = missedValues[0].uri;\n const index = uri.lastIndexOf('/');\n uri = uri.substr(0, index);\n\n const entry: AttributeInsert = {\n type: EventType.INSERT_ATTRIBUTE,\n uri: uri,\n newValue: missedValues.map(function (val) {\n let res;\n const newVal: AttributeValueWithOptionalUri = {\n value: JSON.parse(JSON.stringify((val as SimpleAttributeValue).lookupCode || val.value))\n };\n\n if (keepUri) {\n newVal.uri = val.uri;\n }\n\n cleanAttrValue(newVal.value as Pick<AttributeValue, 'value'>);\n if (isReference(val)) {\n if (val.refEntity) {\n // test it\n res = val.refEntity;\n if (Array.isArray(res)) {\n res = res[0];\n }\n (newVal as ReferenceAttributeValue).refEntity = res;\n }\n\n if (val.refRelation) {\n res = val.refRelation;\n if (Array.isArray(res)) {\n res = res[0];\n }\n\n if (!keepUri) {\n delete res.objectURI;\n }\n (newVal as ReferenceAttributeValue).refRelation = res;\n }\n }\n\n return newVal;\n })\n };\n\n return entry;\n }\n\n function cleanAttrValue(value: Pick<AttributeValue, 'value'>) {\n if (value === null || value.toString() !== '[object Object]') {\n return;\n }\n\n for (const key in value) {\n if (value.hasOwnProperty(key) && key !== 'paging') {\n value[key].forEach(function (attrValue) {\n delete attrValue.crosswalks;\n delete attrValue.type;\n\n if (!keepUri) {\n delete attrValue.uri;\n }\n\n cleanAttrValue(attrValue.value);\n });\n }\n }\n }\n\n function getAttributeType(attrValue: AttributeValue) {\n const value = attrValue.value;\n if (isObject(value)) {\n return attrValue.hasOwnProperty('refEntity') ? 'Reference' : 'Nested';\n }\n }\n\n function findAttrValue(matchVal, attr) {\n if (attr === undefined) {\n return undefined;\n }\n\n return attr.filter(function (val) {\n return val.uri === matchVal.uri;\n })[0];\n }\n}\n\nfunction compareImages(a: Entity, b: Entity) {\n const result: (ProfilePicByUriUpdate | ProfilePicByUrlUpdate)[] = [];\n if (a.defaultProfilePic !== b.defaultProfilePic) {\n result.push({\n type: EventType.UPDATE_PROFILE_PIC_BY_URI,\n newValue: {\n value: b.defaultProfilePic\n }\n });\n } else if (!isProfilePicValueEqual(a.defaultProfilePicValue, b.defaultProfilePicValue)) {\n result.push({\n type: EventType.UPDATE_PROFILE_PIC_BY_URL,\n newValue: {\n value: b.defaultProfilePicValue\n }\n });\n }\n return result;\n}\n\n/**\n * Use this method to compare the activeness attributes (start and end date) of two relations.\n *\n * @param {Object} a - Original relation\n * @param {Object} b - Modified relation\n * @return {Array} A diff array.\n * @static\n * @example\n * ```\n * var a = {\n * attributes: {}\n * };\n * var b = {\n * attributes: {},\n * startDate: 518727600000,\n * endDate: 518727600000\n * };\n *\n * var result = AttributesDiff.compareActivenessAttributes(a, b);\n *\n * expect(result[0]).toEqual({\n * type: 'UPDATE_START_DATE',\n * newValue: {\n * value: '518727600000'\n * }\n * });\n * expect(result[1]).toEqual({\n * type: 'UPDATE_END_DATE',\n * newValue: {\n * value: '518727600000'\n * }\n * });\n * ```\n */\nfunction compareActivenessAttributes(a: Entity, b: Entity) {\n const result: (StartDateUpdate | EndDateUpdate)[] = [];\n\n const startDate = checkAttribute(a.startDate, b.startDate);\n if (startDate !== undefined) {\n result.push({\n type: EventType.UPDATE_START_DATE,\n newValue: {\n value: startDate\n }\n });\n }\n\n const endDate = checkAttribute(a.endDate, b.endDate);\n if (endDate !== undefined) {\n result.push({\n type: EventType.UPDATE_END_DATE,\n newValue: {\n value: endDate\n }\n });\n }\n\n return result;\n\n function checkAttribute(a1?: number, b1?: number) {\n let checkResult: string;\n if (a1 != b1) {\n if (isNil(b1)) {\n checkResult = '';\n } else {\n checkResult = b1 + '';\n }\n }\n return checkResult;\n }\n}\n\n/**\n * Use this function to add crosswalks information to a diff array.\n * You can add crosswalk information only to a diff object, or change some of the operations.\n * For example, you can transform <code>DELETE_ATTRIBUTE</code> to <code>IGNORE_ATTRIBUTE</code> for non-Reltio values.\n *\n * @param {Array} diff - Array of differences (result of compare functions)\n * @param {Array} crosswalks - Array of crosswalks\n * @param {Object|null|undefined} entity - Entity\n * @param {boolean} forceOvForUiUpdates - ov strategy\n * @return {Array} New differences array.\n * @static\n * @example\n * Apply crosswalk only.\n * ```\n * var diff = [{\n * type: 'UPDATE_ATTRIBUTE',\n * uri: '/attributes/LastName/1',\n * newValue: {\n * value: 'Snow'\n * }\n * }];\n *\n * var crosswalks = [{\n * type: 'configuration/sources/Reltio',\n * value: '123',\n * attributes: [\n * '/attributes/LastName/1'\n * ]\n * }];\n *\n * diff = AttributesDiff.applyCrosswalks(diff, crosswalks);\n *\n * expect(diff[0]).toEqual({\n * type: 'UPDATE_ATTRIBUTE',\n * uri: '/attributes/LastName/1',\n * newValue: {\n * value: 'Snow'\n * },\n * crosswalk: {\n * type: 'configuration/sources/Reltio',\n * value: '123'\n * }\n * });\n * ```\n * @example\n * DELETE_ATTRIBUTE becomes IGNORE_ATTRIBUTE.\n * ```\n * var diff = [{\n * type: 'DELETE_ATTRIBUTE',\n * uri: '/attributes/LastName/1'\n * }];\n *\n * var crosswalks = [{\n * type: 'configuration/sources/HMS',\n * value: '123',\n * attributes: [\n * '/attributes/LastName/1'\n * ]\n * }];\n *\n * diff = AttributesDiff.applyCrosswalks(diff, crosswalks, entity, forceOvForUiUpdates);\n *\n * expect(diff[0]).toEqual({\n * type: 'IGNORE_ATTRIBUTE',\n * uri: '/attributes/LastName/1',\n * newValue: {\n * value: true\n * }\n * });\n * ```\n */\nfunction applyCrosswalks(\n diff: SimpleEvent[],\n crosswalks: Crosswalk[],\n entity: Entity = null,\n forceOvForUiUpdates = true\n) {\n const reltioCrosswalkType = 'configuration/sources/Reltio';\n const reltioCleanserCrosswalkType = 'configuration/sources/ReltioCleanser';\n\n function setCrosswalk(change: AttributeUpdate | AttributeDelete | NonOvAttributeUpdate, cw: Crosswalk) {\n change.crosswalk = {\n type: cw.type,\n value: cw.value\n };\n\n return change;\n }\n\n function groupBy(xs: EventWithUri[], key: string): Record<string, EventWithUri[]> {\n return xs.reduce(function (rv, x) {\n (rv[x[key]] = rv[x[key]] || []).push(x);\n return rv;\n }, {});\n }\n\n function markToRemove(change) {\n return (change.removeIt = true);\n }\n\n const newChanges = diff.map(function (change): EventWithUri[] {\n if ((change as EventWithCrosswalk).crosswalk) {\n return [change as EventWithCrosswalk];\n }\n\n const crosswalksForMe = getCrosswalksForValueUri(crosswalks, (change as EventWithUri).uri);\n\n const reltioCrosswalksForMe = crosswalksForMe.filter(function (cw) {\n return cw.type === reltioCrosswalkType;\n });\n\n const nonReltioCrosswalksForMe = crosswalksForMe.filter(function (cw) {\n return cw.type !== reltioCrosswalkType;\n });\n\n let result: EventWithUri[] = [];\n\n switch (change.type) {\n case EventType.INSERT_ATTRIBUTE:\n result.push(change);\n break;\n case EventType._UPDATE_NON_OV_ATTRIBUTE:\n result = result.concat(\n crosswalksForMe.map(function (cw) {\n return setCrosswalk(change, cw);\n })\n );\n break;\n case EventType.DELETE_ATTRIBUTE:\n if (nonReltioCrosswalksForMe.length || reltioCrosswalksForMe.length == 0) {\n result.push({\n type: EventType.IGNORE_ATTRIBUTE,\n uri: change.uri,\n newValue: {value: true}\n });\n }\n\n result = result.concat(\n reltioCrosswalksForMe.map(function (cw) {\n return setCrosswalk(\n {\n type: EventType.DELETE_ATTRIBUTE,\n uri: change.uri\n },\n cw\n );\n })\n );\n break;\n case EventType.UPDATE_ATTRIBUTE: {\n const hasReltioCleanserCrosswalk = nonReltioCrosswalksForMe.some(\n ({type}) => type === reltioCleanserCrosswalkType\n );\n const singleReltioSiblingValueForCleanser =\n hasReltioCleanserCrosswalk && entity\n ? findSingleReltioNonOvSiblingValue(entity, crosswalks, change.uri)\n : null;\n if (!singleReltioSiblingValueForCleanser && !reltioCrosswalksForMe.length) {\n result.push({\n type: EventType.INSERT_ATTRIBUTE,\n uri: change.uri.substr(0, change.uri.lastIndexOf('/')),\n newValue: [change.newValue],\n insteadOfUpdate: true\n });\n } else if (reltioCrosswalksForMe.length) {\n result = result.concat(\n reltioCrosswalksForMe.map(function (cw) {\n return setCrosswalk(\n {\n type: EventType.UPDATE_ATTRIBUTE,\n uri: change.uri,\n newValue: change.newValue\n },\n cw\n );\n })\n );\n } else if (singleReltioSiblingValueForCleanser) {\n // It's an agreement with API that if there is value from ReltioCleanser crosswalk and\n // there is one more (only one) Reltio crosswalk attribute value,\n // we should update this single reltio value instead of sending INSERT\n const crosswalksForSiblingValue = getCrosswalksForValueUri(\n crosswalks,\n singleReltioSiblingValueForCleanser.uri\n );\n const reltioCrosswalksForSiblingValue = crosswalksForSiblingValue.filter(\n ({type}) => type === reltioCrosswalkType\n );\n result = result.concat(\n reltioCrosswalksForSiblingValue.map((cw) => {\n return setCrosswalk(\n {\n type: EventType.UPDATE_ATTRIBUTE,\n uri: singleReltioSiblingValueForCleanser.uri,\n newValue: change.newValue\n },\n cw\n );\n })\n );\n }\n\n if (nonReltioCrosswalksForMe.length && forceOvForUiUpdates) {\n result.push({\n type: EventType.IGNORE_ATTRIBUTE,\n uri: change.uri,\n newValue: {value: true}\n });\n }\n break;\n }\n }\n\n return result;\n });\n\n let flatResult = newChanges.flat();\n\n const groupsObject = groupBy(flatResult, 'typeUri');\n for (const key in groupsObject) {\n if (key === 'undefined') {\n continue;\n }\n\n const changes = groupsObject[key];\n\n const changesRelatedToThisGroup = flatResult\n .filter(function (change) {\n return change.type !== EventType._UPDATE_NON_OV_ATTRIBUTE;\n })\n .filter(function (change) {\n return (\n change.uri.substr(0, change.uri.lastIndexOf('/')) === key ||\n (change.type === 'INSERT_ATTRIBUTE' && change.uri === key)\n );\n });\n\n const firstReltioValue = changes.find(function (change): change is NonOvAttributeUpdate {\n const {crosswalk} = change as EventWithCrosswalk;\n return crosswalk && crosswalk.type === reltioCrosswalkType;\n });\n\n const simpleUpdateAttributeChange = changesRelatedToThisGroup.find(function (\n change\n ): change is AttributeUpdate {\n return change.type === 'UPDATE_ATTRIBUTE';\n });\n\n if (!simpleUpdateAttributeChange && firstReltioValue) {\n flatResult.push({\n type: EventType.UPDATE_ATTRIBUTE,\n uri: firstReltioValue.uri,\n newValue: {\n value: firstReltioValue.value\n },\n crosswalk: firstReltioValue.crosswalk\n });\n\n changesRelatedToThisGroup.forEach(markToRemove);\n }\n\n changes.forEach(markToRemove);\n }\n\n flatResult = flatResult.filter(function (change) {\n return !(change as EventWithCrosswalk).removeIt;\n });\n\n flatResult.forEach(function (change) {\n delete (change as AttributeInsert).insteadOfUpdate;\n });\n\n return flatResult;\n}\n\n/**\n * Filters crosswalks for specified valueUri\n *\n * @param {Array} crosswalks - Array of crosswalks\n * @param {string} valueUri - Attribute value uri from ReltioCleanser crosswalk\n * @return {Array} - Filtered array of crosswalks\n * @static\n */\nconst getCrosswalksForValueUri = (crosswalks: Crosswalk[], valueUri: string) => {\n return crosswalks.filter(function (cw) {\n return (\n (cw.attributes || (cw as RelationCrosswalk).attributeURIs || []).filter(function (attr) {\n return attr === valueUri;\n }).length === 1\n );\n });\n};\n\n/**\n * Tries to find single sibling attribute value for provided attribute value uri\n * Conditions: found value should be\n * - from Reltio crosswalk,\n * - it's single sibling,\n * - ov false\n * Return found value, otherwise - null\n *\n * @param {Object} entity - Entity\n * @param {Array} crosswalks - Array of crosswalks\n * @param {string} valueUri - Attribute value uri from ReltioCleanser crosswalk\n * @return {Object|null} - AttributeValue or null\n * @static\n */\nconst findSingleReltioNonOvSiblingValue = (entity: Entity, crosswalks: Crosswalk[], valueUri: string): AttributeValue =>\n pipe(\n findSiblingsAttributeValues,\n defaultTo([]),\n reject(propEq('uri', valueUri)),\n ifElse(\n allPass([\n (attributeValues) => attributeValues.length === 1,\n ([attributeValue]) => isReltioCrosswalk(crosswalks, attributeValue),\n ([attributeValue]) => !isOv(attributeValue)\n ]),\n prop(0),\n always(null)\n )\n )(entity, valueUri);\n\n/**\n * Relation attributes have their own crosswalks.\n * To get correct results when you use the <code>applyCrosswalks</code> function, all crosswalks are required.\n * This function returns all crosswalks from entities (or relations) and their reference attributes.\n *\n * @param {Object} a - attributes from entity or relation\n * @param {Array} crosswalks - Array of crosswalks\n * @return {Array} New array of crosswalks.\n * @static\n */\nfunction collectCrosswalksFromAttributes(a: RecordAttributesType, crosswalks: Crosswalk[]) {\n crosswalks = crosswalks || [];\n for (const attrName in a) {\n if (a.hasOwnProperty(attrName)) {\n const arrAttr = a[attrName] as AttributeValue[];\n for (let i = 0; i < arrAttr.length; i++) {\n const attr = arrAttr[i];\n if (isReference(attr) && attr.refRelation) {\n const refRelation = attr.refRelation[0] || attr.refRelation;\n if (refRelation.crosswalks) {\n const relCrosswalks = refRelation.crosswalks.filter(function (cw) {\n return cw.attributes || cw.attributeURIs;\n });\n for (let j = 0; j < relCrosswalks.length; j++) {\n let append = true;\n for (let k = 0; k < crosswalks.length; k++) {\n if (\n crosswalks[k].type === relCrosswalks[j].type &&\n crosswalks[k].value === relCrosswalks[j].value\n ) {\n crosswalks[k].attributes =\n crosswalks[k].attributes || (crosswalks[k] as RelationCrosswalk).attributeURIs;\n crosswalks[k].attributes = crosswalks[k].attributes.concat(\n relCrosswalks[j].attributes || relCrosswalks[j].attributeURIs\n );\n\n //Unique values in array\n crosswalks[k].attributes = Object.keys(\n crosswalks[k].attributes.reduce(function (result, item) {\n result[item] = true;\n return result;\n }, {})\n );\n\n delete (crosswalks[k] as RelationCrosswalk).attributeURIs;\n append = false;\n break;\n }\n }\n if (append) {\n crosswalks.push(relCrosswalks[j]);\n }\n }\n }\n }\n }\n }\n }\n\n return crosswalks;\n}\n\n/**\n * Use this function to compare the tags of two entities.\n *\n * @param {Object} a - Original entity\n * @param {Object} b - Modified entity\n * @return {Array} A diff array.\n * @static\n * @example\n * ```\n * var diff = AttributesDiff.compareTags(null, ['Lannisters', 'Baratheon']);\n *\n * expect(diff[0]).toEqual({\n * type: 'UPDATE_TAGS',\n * newValue: ['Lannisters', 'Baratheon']\n * });\n * ```\n */\nfunction compareTags(a, b) {\n return compareArraysAndGenerateEvent<TagsUpdate>(EventType.UPDATE_TAGS).call(this, a, b);\n}\n\n/**\n * Use this function to compare the roles of two entities.\n *\n * @param {Object} a - Original entity\n * @param {Object} b - Modified entity\n * @return {Array} A diff array.\n * @static\n * @example\n * ```\n * var diff = AttributesDiff.compareRoles(null, ['Lann', 'Azor Ahai']);\n *\n * expect(diff[0]).toEqual({\n * type: 'UPDATE_ROLES',\n * newValue: ['Lann', 'Azor Ahai']\n * });\n * ```\n */\nfunction compareRoles(a, b) {\n return compareArraysAndGenerateEvent<RolesUpdate>(EventType.UPDATE_ROLES).call(this, a, b);\n}\n","import {isObject} from '../../utils';\nimport {difference, fromPairs, map, pipe} from 'ramda';\nimport {EventType, EventWithUri, compareAttributes} from '../editMode/AttributesDiff';\nimport {AttributeValue, Entity, HistoryAppearanceActions, HistoryDiff, RecordAttributesType} from '../../types';\n\n/**\n * This module provides History Manager. Which allows to compare two objects and returns the diff as array of changes.\n */\n/**\n * Use this class to get object with computeHistoryDiff\n * @param {AttributesDiff} attributeDiff - module which provides compare function\n * @returns {{computeHistoryDiff: computeHistoryDiff, computeEntityHistoryDiff: computeEntityHistoryDiff}} object with computeHistoryDiff function\n * @example\n * ```\n * var historyManager = HistoryManager.createHistoryManager();\n * var oldState = {\n * FirstName: [\n * {\n * type: 'configuration/entityTypes/HCP/attributes/FirstName',\n * ov: true,\n * value: 'Jhon',\n * uri: 'entities/Cpk0VAs/attributes/FirstName/IbvtOvWg'\n * }]\n * };\n * var newState = {\n * FirstName: [\n * {\n * type: 'configuration/entityTypes/HCP/attributes/FirstName',\n * ov: true,\n * value: 'Jhon',\n * uri: 'entities/Cpk0VAs/attributes/FirstName/IbvtOvWg'\n * }],\n * LastName: [{\n * type: 'configuration/entityTypes/HCP/attributes/LastName',\n * ov: true,\n * value: 'Snow1',\n * uri: 'entities/Cpk0VAs/attributes/LastName/IbvtOzmw'\n * }]\n * };\n * var result = historyManager.computeHistoryDiff(oldState, newState);\n * ```\n */\nconst Manager = () => {\n const unIgnore = (attrA: AttributeValue, attrB: AttributeValue) => {\n if (attrA && attrB && attrA.ignored !== attrB.ignored) {\n delete attrA.ignored;\n delete attrB.ignored;\n attrA.ov = true;\n attrB.ov = true;\n }\n return {a: attrA, b: attrB};\n };\n const forEach = (o: Record<string, unknown>, func: (key: string | number, value: unknown) => void) => {\n if (!o || !func) {\n return;\n }\n\n if (Array.isArray(o)) {\n for (let i = 0; i < o.length; i++) {\n func(i, o[i]);\n forEach(o[i], func);\n }\n } else if (isObject(o)) {\n for (const key in o) {\n func(key, o[key]);\n forEach(o[key] as Record<string, unknown>, func);\n }\n }\n };\n\n const mergeWithUri = (oldState: AttributeValue[], newState: AttributeValue[]): AttributeValue[] => {\n const existingUris = oldState.map((item) => item.uri);\n const dst = oldState.map((oldStateItem) => {\n const newStateItem =\n newState.find(function (item) {\n return item.uri === oldStateItem.uri;\n }) || ({} as AttributeValue);\n const unIgnored = unIgnore(oldStateItem, newStateItem);\n return mergeAttributes(unIgnored.a, unIgnored.b) as AttributeValue;\n });\n const newItems = newState.filter((item) => !existingUris.includes(item.uri));\n return dst.concat(newItems);\n };\n const createUpdateAppearance =\n (\n attributeAppearance: Record<string, EventType[]>,\n valueAppearance: Record<string, EventType>,\n ignoredValues: string[]\n ) =>\n (item: EventWithUri) => {\n const attributeUri =\n item.uri.lastIndexOf('/') !== -1 ? item.uri.substring(0, item.uri.lastIndexOf('/')) : '';\n if (!attributeAppearance[attributeUri]) {\n attributeAppearance[attributeUri] = [];\n }\n attributeAppearance[attributeUri].push(item.type);\n valueAppearance[item.uri] = item.type;\n if (item.type === 'IGNORE_ATTRIBUTE') {\n ignoredValues.push(item.uri);\n }\n };\n const mergeEvents = function (\n attributeAppearance: Record<string, EventType[]>,\n valueAppearance: Record<string, EventType>,\n ignoredAttributes: string[]\n ) {\n const toIgnore: string[] = [];\n const updatedAttributes = Object.keys(attributeAppearance).filter(function (key) {\n return (\n attributeAppearance[key].indexOf(EventType.IGNORE_ATTRIBUTE) !== -1 &&\n attributeAppearance[key].indexOf(EventType.INSERT_ATTRIBUTE) !== -1\n );\n });\n Object.keys(valueAppearance)\n .filter(function (key) {\n const attributeUri = key.lastIndexOf('/') !== -1 ? key.substring(0, key.lastIndexOf('/')) : null;\n return updatedAttributes.indexOf(attributeUri) !== -1;\n })\n .forEach(function (key) {\n if (ignoredAttributes.indexOf(key) !== -1) {\n toIgnore.push(key);\n }\n valueAppearance[key] = EventType.UPDATE_ATTRIBUTE;\n });\n return {appearance: valueAppearance, ignored: toIgnore};\n };\n\n const mergeAttributes = function (\n oldState: RecordAttributesType | AttributeValue[] | AttributeValue,\n newState: RecordAttributesType | AttributeValue[] | AttributeValue\n ): RecordAttributesType | AttributeValue[] | AttributeValue {\n const array = Array.isArray(newState);\n\n if (array) {\n let dst = [];\n const oldStateArr = (oldState || []) as AttributeValue[];\n const hasUris = oldStateArr.some(function (item) {\n return item.uri;\n });\n if (hasUris) {\n dst = mergeWithUri(oldStateArr, newState);\n } else {\n dst = dst.concat(oldStateArr);\n newState.forEach(function (e, i) {\n if (typeof dst[i] === 'undefined') {\n dst[i] = e;\n } else if (isObject(e)) {\n dst[i] = mergeAttributes(oldState[i], e);\n } else {\n if (oldStateArr.indexOf(e) === -1) {\n dst.push(e);\n }\n }\n });\n }\n return dst;\n } else {\n const dst = {};\n if (isObject(oldState)) {\n Object.keys(oldState).forEach(function (key) {\n dst[key] = oldState[key];\n });\n }\n Object.keys(newState).forEach(function (key) {\n if (!isObject(newState[key])) {\n dst[key] = newState[key];\n } else {\n if (!oldState[key]) {\n dst[key] = newState[key];\n } else {\n dst[key] = mergeAttributes(oldState[key], newState[key]);\n }\n }\n });\n return dst;\n }\n };\n const computeHistoryDiff = function (oldState: RecordAttributesType = {}, newState: RecordAttributesType = {}) {\n const clonedOldState = JSON.parse(JSON.stringify(oldState));\n const clonedNewState = JSON.parse(JSON.stringify(newState));\n\n const attributes = mergeAttributes(oldState, newState) as RecordAttributesType;\n const valueAppearance = {};\n const attributeAppearance = {};\n const ignoredAttributes = [];\n const updateAppearance = createUpdateAppearance(attributeAppearance, valueAppearance, ignoredAttributes);\n compareAttributes(attributes, clonedNewState)\n .map(function (item) {\n if (item.type === 'IGNORE_ATTRIBUTE' && item.newValue.value === false) {\n return {...item, type: 'UNDO_IGNORE_ATTRIBUTE'};\n }\n return item;\n })\n .forEach(function (item: EventWithUri) {\n updateAppearance(item);\n });\n\n compareAttributes(attributes, clonedOldState)\n .map(function (item) {\n if (item.type === 'DELETE_ATTRIBUTE') {\n return {...item, type: 'INSERT_ATTRIBUTE'};\n }\n if (item.type === 'IGNORE_ATTRIBUTE') {\n return {...item, type: item.newValue.value ? 'UNDO_IGNORE_ATTRIBUTE' : 'IGNORE_ATTRIBUTE'};\n }\n return item;\n })\n .forEach(function (item: EventWithUri) {\n updateAppearance(item);\n });\n const result = mergeEvents(attributeAppearance, valueAppearance, ignoredAttributes);\n forEach(attributes, function (key, item: AttributeValue) {\n if (item && result.ignored.indexOf(item.uri) !== -1) {\n item.ignored = true;\n delete item.ov;\n }\n });\n return {attributes: attributes, appearance: result.appearance};\n };\n const computeArraysHistory = (\n oldState: string[] = [],\n newState: string[] = []\n ): [string[], Record<string, HistoryAppearanceActions>] => {\n const added = difference(newState, oldState);\n const deleted = difference(oldState, newState);\n const mergedArray = deleted.concat(newState);\n const createAppearance = (type, array) =>\n pipe(\n map((x) => [x, type]),\n fromPairs\n )(array);\n const appearance = {\n ...createAppearance('INSERT_ATTRIBUTE', added),\n ...createAppearance('DELETE_ATTRIBUTE', deleted)\n };\n return [mergedArray, appearance];\n };\n const computeEntityHistoryDiff = (oldEntity: Entity, newEntity: Entity): HistoryDiff => {\n const {attributes, appearance} = oldEntity\n ? computeHistoryDiff(oldEntity.attributes, newEntity.attributes)\n : {attributes: newEntity.attributes, appearance: {}};\n const [roles, rolesAppearance] = computeArraysHistory(oldEntity ? oldEntity.roles : [], newEntity.roles);\n const [tags, tagsAppearance] = computeArraysHistory(oldEntity ? oldEntity.tags : [], newEntity.tags);\n return {\n attributes,\n appearance: {\n ...appearance,\n roles: rolesAppearance,\n tags: tagsAppearance\n },\n roles,\n tags\n };\n };\n return {\n computeHistoryDiff: computeHistoryDiff,\n computeEntityHistoryDiff: computeEntityHistoryDiff\n };\n};\nexport {Manager as createHistoryManager};\n","import {flatten, is, pipe, reduce, values} from 'ramda';\nimport {AttributeValue, Connection, Entity} from '../types';\nimport {getEntityUriForLink} from '../entity';\nimport {getConnectionRelationUriForLink} from '../relations';\n\nexport const getAttributeValuesUris = pipe(\n values,\n flatten,\n reduce((result: string[], value: AttributeValue) => {\n const uris = [value.uri, ...(is(Object, value.value) ? getAttributeValuesUris(value.value) : [])];\n return result.concat(uris);\n }, [])\n);\n\nexport const createObjectIdForPM = (entityUri: string, matchUri: string) => {\n return matchUri > entityUri ? `${matchUri}-${entityUri}` : `${entityUri}-${matchUri}`;\n};\n\nexport const getProfileBandObjectIdsForCollaboration = (entity: Entity): string[] => {\n return entity ? [getEntityUriForLink(entity)] : [];\n};\n\nexport const getProfileObjectIdsForCollaboration = (entity: Entity): string[] => {\n const attributesUris = [\n ...getAttributeValuesUris(entity?.attributes || []),\n ...getAttributeValuesUris(entity?.analyticsAttributes || [])\n ];\n return entity ? [...getProfileBandObjectIdsForCollaboration(entity), ...attributesUris] : [];\n};\n\nexport const getPotentialMatchesObjectIdsForCollaboration = (entityUri: string, matchEntitiesUris: string[]) => {\n return [entityUri, ...matchEntitiesUris.map((uri) => createObjectIdForPM(entityUri, uri))];\n};\n\nexport const getRelationshipsObjectIdsForCollaboration = (connections: Connection[] = []) => {\n return connections.map(({relation}) => getConnectionRelationUriForLink(relation));\n};\n","import {CollaborationObjectTypes, Connection} from '../types';\nimport {getEntityUriFromAttributeUri} from '../uris';\nimport {getEntityUriForLink} from '../entity';\n\ntype EntityConfig = {\n entityUri: string;\n};\n\ntype AttributeConfig = {\n uri: string;\n};\n\ntype PotentialMatchConfig = {\n entityUri: string;\n matchEntityUri: string;\n};\n\ntype RelationConfig = {\n entityUri: string;\n connection: Connection;\n};\n\nconst createRelatedObjectUrisForEntity = ({entityUri}: EntityConfig) => {\n return [entityUri];\n};\n\nconst createRelatedObjectUrisForAttribute = ({uri}: AttributeConfig) => {\n return [getEntityUriFromAttributeUri(uri)];\n};\n\nconst createRelatedObjectUrisForPotentialMatch = ({entityUri, matchEntityUri}: PotentialMatchConfig) => {\n return [entityUri, matchEntityUri];\n};\n\nconst createRelatedObjectUrisForRelation = ({\n entityUri,\n connection: {\n relation: {relationType},\n entity: {entityUri: uri, dataTenant}\n }\n}: RelationConfig) => {\n return [entityUri, getEntityUriForLink({uri, dataTenant}), relationType];\n};\n\ntype CreateRelatedObjectUris = {\n (objectType: CollaborationObjectTypes.ENTITY, config: EntityConfig): string[];\n (\n objectType: CollaborationObjectTypes.ENTITY_ATTRIBUTE | CollaborationObjectTypes.RELATION_ATTRIBUTE,\n config: AttributeConfig\n ): string[];\n (objectType: CollaborationObjectTypes.POTENTIAL_MATCH, config: PotentialMatchConfig): string[];\n (objectType: CollaborationObjectTypes.RELATION, config: RelationConfig): string[];\n};\n\nexport const createRelatedObjectUris: CreateRelatedObjectUris = (objectType: CollaborationObjectTypes, config) => {\n switch (objectType) {\n case CollaborationObjectTypes.ENTITY:\n return createRelatedObjectUrisForEntity(config);\n case CollaborationObjectTypes.ENTITY_ATTRIBUTE:\n case CollaborationObjectTypes.RELATION_ATTRIBUTE:\n return createRelatedObjectUrisForAttribute(config);\n case CollaborationObjectTypes.POTENTIAL_MATCH:\n return createRelatedObjectUrisForPotentialMatch(config);\n case CollaborationObjectTypes.RELATION:\n return createRelatedObjectUrisForRelation(config);\n }\n};\n","import {inc, map, pipe, prop, sum, values} from 'ramda';\nimport {CommentsMap} from '../types/collaboration';\n\nconst calcTotalCommentItems = (commentsMap: CommentsMap): number =>\n pipe<CommentsMap, number>(values, map(map(pipe(prop('replies'), inc))), map(sum), sum)(commentsMap);\nexport {calcTotalCommentItems};\n","import {pipe, prop, chain, path, reduce, curry, assoc} from 'ramda';\nimport {getInteractionType} from '../metadata/interactionTypes';\nimport {Interaction, Member, Metadata} from '../types';\n\nconst getMembersNameForType = curry((metadata, interactionTypeUri) => {\n const interactionType = getInteractionType(metadata, interactionTypeUri);\n const names = pipe(prop('memberTypes'), chain(prop('name')))(interactionType);\n return interactionType.extendsTypeURI\n ? names.concat(getMembersNameForType(metadata, interactionType.extendsTypeURI))\n : names;\n});\nconst getMemberByName = (interaction, name) => path(['members', name], interaction);\nconst getMembersByNames = curry((interaction, names) =>\n reduce((acc, name) => assoc(name, getMemberByName(interaction, name), acc), {}, names)\n);\nconst getActorsForInteraction = (metadata: Metadata, interaction: Interaction): Member[] =>\n pipe(prop('type'), getMembersNameForType(metadata), getMembersByNames(interaction))(interaction);\n\nexport {getActorsForInteraction};\n","const ITEM_LEVEL_PADDING_WIDTH = 16;\nconst ITEM_APPROXIMATE_LETTER_WIDTH = 6.5;\nconst ITEM_OTHER_WIDTH = 106;\n\nexport const getMaxItemWidth = (titleProp) => {\n const getApproximateItemWidth = (item) =>\n ITEM_OTHER_WIDTH +\n (item.level || 0) * ITEM_LEVEL_PADDING_WIDTH +\n item.item[titleProp].length * ITEM_APPROXIMATE_LETTER_WIDTH;\n\n const _getMaxItemWidth = (items) =>\n items.reduce(\n (max, item) =>\n Math.max(\n max,\n getApproximateItemWidth(item),\n _getMaxItemWidth(item.items ? item.items.flat(Infinity) : [])\n ),\n 0\n );\n\n return _getMaxItemWidth;\n};\n","import {curry} from 'ramda';\nimport {getColor} from '../utils/Colors';\n\nenum Palettes {\n PotentialMatches = 'potentialMatches',\n Random0 = 'random0',\n Random1 = 'random1',\n SpectreYellowCyan = 'spectreYellowCyan',\n SpectreBlueBrown = 'spectreBlueBrown',\n Charts = 'charts',\n Crosswalks = 'crosswalks'\n}\n\ntype Template = {\n granularity?: number;\n colors: string[];\n};\n\ntype Palette = Template & {\n counter: number;\n granularityCounter: number;\n idToColor: {\n [key: string]: string;\n };\n};\n\nconst palettes: {[key: string]: Palette} = {};\nconst templates: {[key: string]: Template} = {\n random0: {\n granularity: 3,\n colors: [\n '#ffee91',\n '#ffdc0e',\n '#fec92f',\n '#eab710',\n '#f69785',\n '#f57f27',\n '#fccde5',\n '#f8b6b8',\n '#ff9acc',\n '#ee4272',\n '#b71137',\n '#c4c0e1',\n '#bd81be',\n '#5f3577',\n '#9fd6bf',\n '#8accca',\n '#12959f'\n ]\n },\n potentialMatches: {\n colors: ['#fec92f', '#ee4272', '#6d9a35', '#555962', '#2d9ecf']\n },\n random1: {\n colors: [\n '#fccde5',\n '#ff9acc',\n '#81b2d3',\n '#f8b6b8',\n '#bd81be',\n '#82c55c',\n '#c4e3f1',\n '#7f939e',\n '#ffee91',\n '#fec92f',\n '#ee4272',\n '#2d9ecf',\n '#c4c0e1',\n '#7accca',\n '#cdc393',\n '#f69785',\n '#f0ecc7',\n '#9fd6bf',\n '#6d9a35',\n '#afbc26',\n '#12959f',\n '#aacf99',\n '#056b97',\n '#eab710',\n '#b4d36a',\n '#70bede',\n '#f57f27',\n '#7a843b',\n '#cfd0d2',\n '#555962',\n '#b71137',\n '#ffdc0e',\n '#bea68c',\n '#5f3566'\n ]\n },\n\n spectreYellowCyan: {\n granularity: 3,\n colors: [\n '#ffee91',\n '#ffdc0e',\n '#fec92f',\n '#eab710',\n '#f69785',\n '#f57f27',\n '#fccde5',\n '#f8b6b8',\n '#ff9acc',\n '#ee4272',\n '#b71137',\n '#c4c0e1',\n '#bd81be',\n '#5f3577',\n '#9fd6bf',\n '#7accca',\n '#12959f'\n ]\n },\n\n spectreBlueBrown: {\n granularity: 3,\n colors: [\n '#c4e3f1',\n '#70bede',\n '#81b2d3',\n '#2d9ecf',\n '#056b97',\n '#aacf99',\n '#b4de6a',\n '#82c55c',\n '#6d9a35',\n '#afbc26',\n '#7a843b',\n '#cfd0d2',\n '#7f939e',\n '#555962',\n '#f0ecc7',\n '#cfc393',\n '#bea68c'\n ]\n },\n\n charts: {\n colors: [\n '#0072ce',\n '#c4ce00',\n '#ce5c00',\n '#4bafff',\n '#f97061',\n '#9e7ed3',\n '#c34980',\n '#c4ce00',\n '#669977',\n '#ffe16f',\n '#4896df',\n '#40cfbb',\n '#9bc66a',\n '#ce5c00',\n '#4bafff',\n '#f085f2',\n '#bea68c'\n ]\n },\n\n crosswalks: {\n colors: [\n '#86f2f9',\n '#cae815',\n '#f8a4a4',\n '#fd63c0',\n '#b6c5ec',\n '#8fe98e',\n '#ff9c72',\n '#84cbf3',\n '#a8f384',\n '#d9ffa8',\n '#ace1ff'\n ]\n }\n};\n\nconst getPalette = (name: string) => {\n if (!palettes[name]) {\n const template = templates[name] || templates.random0;\n palettes[name] = {\n counter: 0,\n granularityCounter: 0,\n idToColor: {},\n ...template\n };\n }\n return palettes[name];\n};\n\nconst generateNextColor = (activePalette: Palette) => {\n const colorId = activePalette.counter;\n const granularity = activePalette.granularity || 1;\n activePalette.counter += granularity;\n if (activePalette.counter >= activePalette.colors.length) {\n if (++activePalette.granularityCounter >= granularity) {\n activePalette.granularityCounter = 0;\n }\n activePalette.counter = activePalette.granularityCounter;\n }\n return activePalette.colors[colorId];\n};\nexport const getColorForId = curry((palette: string, id: string) => {\n const activePalette = getPalette(palette);\n if (!activePalette.idToColor[id]) {\n activePalette.idToColor[id] = generateNextColor(activePalette);\n }\n return activePalette.idToColor[id];\n});\n\nexport const getChartItemColor = (id: string) => getColorForId(Palettes.Charts, id);\n\nexport const getPotentialMatchesColor = () => getPalette(Palettes.PotentialMatches).colors;\n\nexport const getTenantIconColor = (id: string) => getColorForId(Palettes.Random1, id);\n\nexport const getFontColor = (bgHexColor: string) => (getColor(bgHexColor) ? '#FFFFFF' : '#212121');\n","import ColorHash from 'color-hash';\nimport {curry} from 'ramda';\n\nconst fractionsRange = Array.from({length: 100}, (v, k) => k / 100);\n\nconst getHashForString = (str: string) => {\n const seed = Number(str.replace(/\\D/g, '')) || 0;\n let h1 = 0xdeadbeef ^ seed,\n h2 = 0x41c6ce57 ^ seed;\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n};\n\ntype HSL = [number, number, number];\ntype Palette = {\n [id: string]: HSL;\n};\n\nconst palettes: {[name: string]: Palette} = {};\n\nconst colorHash = new ColorHash({\n hash: getHashForString,\n saturation: fractionsRange.slice(15, 71),\n lightness: fractionsRange.slice(50, 90)\n});\n\nconst entitiesColorHash = new ColorHash({\n hash: getHashForString,\n saturation: fractionsRange.slice(46, 89),\n lightness: fractionsRange.slice(44, 58)\n});\n\nconst generateUniqueColor = (colorHash, id: string): HSL => {\n const hash = String(getHashForString(id));\n return colorHash.hsl(hash);\n};\n\nconst getUniqueColorForId = curry((colorHash, paletteName: string, id: string) => {\n if (!(paletteName in palettes)) {\n palettes[paletteName] = {};\n }\n const palette = palettes[paletteName];\n if (!(id in palette)) {\n palette[id] = generateUniqueColor(colorHash, id);\n }\n const [h, s, l] = palette[id];\n return `hsl(${h}, ${s * 100}%, ${l * 100}%)`;\n});\n\nexport const getCrosswalkColor = getUniqueColorForId(colorHash, 'crosswalks');\nexport const getSourceColor = getUniqueColorForId(colorHash, 'sources');\nexport const getContributorColor = getUniqueColorForId(colorHash, 'contributors');\nexport const getDvfColor = getUniqueColorForId(colorHash, 'dataValidationFunctions');\nexport const getEntityColor = getUniqueColorForId(entitiesColorHash, 'entities');\n","import {\n both,\n equals,\n filter,\n has,\n identity,\n includes,\n is,\n isEmpty,\n last,\n length,\n map,\n partition,\n pipe,\n prop,\n propEq,\n propIs,\n propOr,\n reject,\n sum\n} from 'ramda';\nimport {DashboardViewTypes} from '../../types';\n\ntype GridOptions = {\n columns: number;\n};\ntype LayoutItem = {\n view: string;\n margin?: number[];\n padding?: number[];\n flex?: number;\n};\ntype Spacer = {\n spacer: boolean;\n};\ntype CenterFragment = Array<string | {left?: string; right?: string}>;\ntype Fragment = Array<string>;\nexport type Layout = {\n layout: 'hbox' | 'vbox' | 'scroll' | 'profile';\n items?: Array<LayoutItem | Spacer | Layout>;\n top?: Fragment;\n right?: Fragment;\n center?: CenterFragment;\n width?: string | number;\n height?: string | number;\n flex?: number;\n maxWidth?: number;\n edge?: string;\n};\ntype LayoutOptions = {\n x: number;\n y: number;\n width: number;\n};\ntype PositionProps = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\ntype ItemOptions = {\n id: string;\n minWidth?: number;\n minHeight?: number;\n maxWidth?: number;\n maxHeight?: number;\n isStatic?: boolean;\n height?: number;\n autosizing?: boolean;\n};\nexport type ReltioGridLayoutItem = PositionProps & ItemOptions;\ntype ReltioGridLayout = ReltioGridLayoutItem[];\ntype NestedReltioGridLayout = {\n x: number;\n y: number;\n width: number;\n height: number;\n items: Array<ReltioGridLayoutItem | NestedReltioGridLayout>;\n};\ntype GetViewOptions = (view: string) => ItemOptions;\n\nconst isLayout = has('items');\nconst isFirst = (index) => index === 0;\n\nconst getLimitedValue = (value: number, min = 0, max: number = Number.MAX_SAFE_INTEGER): number =>\n Math.min(Math.max(value, min), max);\n\nconst getHBoxWidth = (items: ReltioGridLayoutItem[]) => items.reduce((width, item) => width + item.width, 0);\nconst getHBoxHeight = (items: ReltioGridLayoutItem[]) =>\n items.reduce((height, item) => Math.max(height, item.height), 0);\nconst getVBoxWidth = (items: ReltioGridLayoutItem[]) => items.reduce((width, item) => Math.max(width, item.width), 0);\nconst getVBoxHeight = (items: ReltioGridLayoutItem[]) => items.reduce((height, item) => height + item.height, 0);\nconst isPercent = (value: string | number): boolean => is(String, value) && (value as string).includes('%');\nconst isSpacer: (item: LayoutItem | Spacer | Layout) => item is Spacer = has('spacer');\nconst getPercentValue = (source: number, percent: string): number =>\n Math.max(Math.round((parseFloat(percent) / 100) * source), 1);\n\nconst processNestedReltioGridLayout = (layout: NestedReltioGridLayout): ReltioGridLayout => {\n return (layout?.items || []).reduce(\n (gridLayout: ReltioGridLayout, item) =>\n gridLayout.concat(\n isLayout(item)\n ? processNestedReltioGridLayout(item as NestedReltioGridLayout)\n : (item as ReltioGridLayoutItem)\n ),\n []\n );\n};\nconst adjustToAvailableWidth = (availableWidth: number, itemsWidths: number[]): number[] => {\n const adjustedWidths = [...itemsWidths];\n while (sum(adjustedWidths) > availableWidth) {\n const maxWidth = Math.max(...adjustedWidths);\n if (maxWidth === 1) {\n break;\n }\n const index = adjustedWidths.indexOf(maxWidth);\n adjustedWidths[index]--;\n }\n return adjustedWidths;\n};\nconst defaultGetLayoutOptions = (layout: Layout) => ({id: layout.layout} as ItemOptions);\nconst convertOldLayoutToReltioGridLayout = (\n getViewOptions: GetViewOptions,\n rootLayout: Layout,\n gridOptions: GridOptions,\n getLayoutOptions: (Layout) => ItemOptions = defaultGetLayoutOptions\n): ReltioGridLayout => {\n const getItemWidth = (\n {width: layoutWidth}: LayoutOptions,\n layout: Layout,\n item: LayoutItem | Layout,\n itemOptions?: ItemOptions\n ): number => {\n const hasFlex = layout.items.some((item: LayoutItem | Layout) => item.flex);\n let itemWidth;\n if (hasFlex) {\n const [withFlex, otherItems]: Array<LayoutItem | Layout>[] = partition(\n propIs(Number, 'flex'),\n layout.items\n );\n const allFlexed = pipe(map(pipe(prop('flex'), parseInt)), sum)(withFlex);\n const freeWidth = Math.round(layoutWidth - layoutWidth * (allFlexed / (allFlexed + otherItems.length)));\n const otherItemWidth = Math.max(freeWidth / Math.max(length(otherItems), 1), 1);\n const getFlexValue = (source: number, flexValue: number, totalFlex: number): number =>\n Math.max(Math.round((flexValue / totalFlex) * source), 1);\n\n itemWidth = (item as Layout).flex\n ? getFlexValue(layoutWidth, (item as Layout).flex, allFlexed + otherItems.length)\n : otherItemWidth;\n } else {\n const [withWidthItems, otherItems]: Array<LayoutItem | Layout>[] = partition(\n both(propIs(String, 'width'), pipe(propOr('', 'width'), includes('%'))),\n layout.items\n );\n const percentOfDefinedWidth = pipe(map(pipe(prop('width'), parseInt)), sum)(withWidthItems);\n const freeWidth = Math.round(layoutWidth - layoutWidth * (percentOfDefinedWidth / 100));\n const otherItemWidth = Math.max(freeWidth / Math.max(length(otherItems), 1), 1);\n itemWidth = isPercent((item as Layout).width)\n ? getPercentValue(layoutWidth, (item as Layout).width as string)\n : otherItemWidth;\n }\n\n return getLimitedValue(itemWidth, prop('minWidth', itemOptions), prop('maxWidth', itemOptions));\n };\n const getItemHeight = ({minHeight, maxHeight, height = 1}: ItemOptions): number => {\n return getLimitedValue(height, minHeight, maxHeight);\n };\n const processScrollLayout = (options: LayoutOptions, layout: Layout): NestedReltioGridLayout => {\n if (isLayout(layout.items[0])) {\n return processOldLayout(options, layout.items[0] as Layout);\n }\n return null;\n };\n const processHBoxLayout = (options: LayoutOptions, layout: Layout): NestedReltioGridLayout => {\n const itemsWidths = layout.items.map((item: LayoutItem | Layout) =>\n getItemWidth(\n options,\n layout,\n item,\n isLayout(item) ? getLayoutOptions((item as Layout).layout) : getViewOptions((item as LayoutItem).view)\n )\n );\n const adjustedWidths = adjustToAvailableWidth(options.width, itemsWidths);\n const processedItems = layout.items.reduce((reltioGridItems, item, itemIndex) => {\n const itemWidth = adjustedWidths[itemIndex];\n const x: number = isFirst(itemIndex)\n ? options.x\n : last(reltioGridItems).x + propOr(itemWidth, 'width', last(reltioGridItems));\n if (isLayout(item)) {\n return reltioGridItems.concat(\n processOldLayout(\n {\n ...options,\n x,\n width: itemWidth\n },\n item as Layout\n )\n );\n } else {\n const viewOptions = getViewOptions((item as LayoutItem).view);\n reltioGridItems.push({\n y: options.y,\n x: x,\n height: getItemHeight(viewOptions),\n width: itemWidth,\n ...viewOptions\n });\n return reltioGridItems;\n }\n }, []);\n return {\n x: options.x,\n y: options.y,\n width: getHBoxWidth(processedItems),\n height: getHBoxHeight(processedItems),\n items: processedItems\n };\n };\n const processVBoxLayout = (options: LayoutOptions, layout: Layout): NestedReltioGridLayout => {\n const processedItems = layout.items.reduce((reltioGridItems, item, itemIndex) => {\n const itemOptions = isLayout(item)\n ? getLayoutOptions((item as Layout).layout)\n : getViewOptions((item as LayoutItem).view);\n const itemWidth = options.width;\n const itemHeight = getItemHeight(itemOptions);\n const y: number = isFirst(itemIndex)\n ? options.y\n : last(reltioGridItems).y + (last(reltioGridItems).height || itemHeight);\n if (isLayout(item)) {\n return reltioGridItems.concat(\n processOldLayout(\n {\n ...options,\n y,\n width: itemWidth\n },\n item as Layout\n )\n );\n } else {\n const viewOptions = getViewOptions((item as LayoutItem).view);\n reltioGridItems.push({\n ...viewOptions,\n y: y,\n x: options.x,\n height: itemHeight,\n width: itemWidth,\n minWidth: is(Number, viewOptions.minWidth)\n ? getLimitedValue(viewOptions.minWidth, viewOptions.minWidth, itemWidth)\n : undefined,\n maxWidth: is(Number, viewOptions.maxWidth)\n ? getLimitedValue(viewOptions.maxWidth, viewOptions.maxWidth, itemWidth)\n : undefined\n });\n return reltioGridItems;\n }\n }, []);\n return {\n x: options.x,\n y: options.y,\n width: getVBoxWidth(processedItems),\n height: getVBoxHeight(processedItems),\n items: processedItems\n };\n };\n const processProfileLayout = (options: LayoutOptions, layout: Layout): NestedReltioGridLayout => {\n const getItemY = (\n options: LayoutOptions,\n items: PositionProps[],\n itemIndex: number,\n itemHeight: number\n ): number => (isFirst(itemIndex) ? options.y : last(items).y + (last(items).height || itemHeight));\n const processFullWidthItem = (\n options: LayoutOptions,\n items: PositionProps[],\n item: string,\n itemIndex: number\n ): PositionProps => {\n const itemOptions = getViewOptions(item);\n const itemWidth = options.width;\n const itemHeight = getItemHeight(itemOptions);\n const y = getItemY(options, items, itemIndex, itemHeight);\n return {\n ...itemOptions,\n x: options.x,\n y,\n width: itemWidth,\n height: itemHeight\n };\n };\n const processColumnFragment = (options: LayoutOptions, fragment: CenterFragment): NestedReltioGridLayout => {\n const columnItems = fragment.reduce((items, item, itemIndex) => {\n if (typeof item === 'string') {\n items.push(processFullWidthItem(options, items, item, itemIndex));\n } else if (typeof item === 'object') {\n const fragmentWidth = Math.max(Math.round(options.width / 2), 1);\n const adjustedWidths = adjustToAvailableWidth(options.width, [fragmentWidth, fragmentWidth]);\n const leftOptions = {...options, width: adjustedWidths[0]};\n const rightOptions = {...options, x: options.x + adjustedWidths[0], width: adjustedWidths[1]};\n const leftItem =\n has('left', item) && processFullWidthItem(leftOptions, items, item.left, itemIndex);\n const rightItem =\n has('right', item) && processFullWidthItem(rightOptions, items, item.right, itemIndex);\n const getHeight = propOr(0, 'height');\n const height = Math.max(getHeight(leftItem), getHeight(rightItem));\n items.push({\n ...options,\n y: getItemY(options, items, itemIndex, height),\n height,\n items: filter(identity, [leftItem, rightItem])\n });\n }\n return items;\n }, []);\n return {\n ...options,\n height: getVBoxHeight(columnItems),\n items: columnItems\n };\n };\n\n const topFragment = processColumnFragment(options, propOr([], 'top', layout));\n const centerColumnWidth = Math.round(options.width * 0.66);\n const underTopPositionY = isEmpty(topFragment) ? options.y : options.y + topFragment.height;\n const centerOptions = {\n ...options,\n y: underTopPositionY,\n width: centerColumnWidth\n };\n const centerFragment = processColumnFragment(centerOptions, propOr([], 'center', layout));\n const rightOptions = {\n x: options.x + centerColumnWidth,\n y: underTopPositionY,\n width: options.width - centerColumnWidth\n };\n const rightFragment = processColumnFragment(rightOptions, propOr([], 'right', layout));\n const layoutHeight = topFragment.height + Math.max(centerFragment.height, rightFragment.height);\n const isEmptyFragment = pipe(prop('items'), length, equals(0));\n return {\n ...options,\n height: layoutHeight,\n items: reject(isEmptyFragment, [topFragment, centerFragment, rightFragment])\n };\n };\n const processOldLayout = (options: LayoutOptions, layout: Layout): NestedReltioGridLayout => {\n const processedItems = reject(isSpacer, layout.items);\n const preparedLayout = {...layout, items: processedItems};\n switch (preparedLayout.layout) {\n case 'scroll':\n return processScrollLayout(options, preparedLayout);\n case 'hbox':\n return processHBoxLayout(options, preparedLayout);\n case 'vbox':\n return processVBoxLayout(options, preparedLayout);\n default:\n return null;\n }\n };\n\n const isProfileLayout = propEq('layout', 'profile', rootLayout);\n const rootOptions = {\n x: 0,\n y: 0,\n width: gridOptions.columns\n };\n const layoutWithNestedGrid = isProfileLayout\n ? processProfileLayout(rootOptions, rootLayout)\n : processOldLayout(rootOptions, rootLayout);\n return processNestedReltioGridLayout(layoutWithNestedGrid);\n};\n\nconst removeUnsupportedLayoutItems = (layout, views) =>\n (layout || []).filter((item) => views.some((view) => view.id === item.id));\n\nconst bigWidgetClasses = [\n DashboardViewTypes.FilteredEntitiesViewFacet,\n DashboardViewTypes.ActivitiesViewFacet,\n DashboardViewTypes.ProfileStatsFacet,\n DashboardViewTypes.FilteredSavedSearchesFacet\n];\n\nconst setMinHeightForDashboardWidgets = (layout, views) =>\n layout.map(({height = 0, minHeight = 0, ...item}) => {\n const view = views.find((view) => view.id === item.id);\n const isBigWidget = bigWidgetClasses.includes(view.component);\n const viewMinHeight = isBigWidget ? 8 : 4;\n\n return {\n ...item,\n height: Math.max(height, viewMinHeight),\n minHeight: Math.max(minHeight, viewMinHeight)\n };\n });\n\nexport {convertOldLayoutToReltioGridLayout, removeUnsupportedLayoutItems, setMinHeightForDashboardWidgets};\n","import {isNil, map, pipe, reject} from 'ramda';\nimport i18n from 'ui-i18n';\n\nimport {DashboardFacetConfig, DashboardConfigFilter} from '../../types/dashboard/configs';\n\nimport {ChartTypes, DashboardViewTypes, PrimitiveValue, SavedSearchesOptions, UIPermissions} from '../../types';\nimport {wrapInArrayIfNeeded} from '../../utils/arrays';\nimport {isAttributeSearchUri, searchUriToAttrUri} from '../../uris';\nimport {convertOldLayoutToReltioGridLayout, removeUnsupportedLayoutItems} from '../utils/converter';\nimport {FilterOptions} from '../../constants';\nimport {convertOldFilterOption, OldFilterOptions} from '../../constants/filterOptions';\n\ntype OldFilter = {\n type: string;\n attribute: string;\n value?: PrimitiveValue | Record<string, unknown>;\n};\n\ntype OldOptions = {\n chartId?: string;\n showLegend?: boolean;\n geoIdName?: string;\n favoriteOnly?: boolean;\n sortBy?: string;\n sortOrder?: string;\n includes?: string[];\n startsWith?: string;\n containsWordStartingWith?: string;\n countResults?: boolean;\n findShared?: boolean;\n};\n\ntype OldConfig = {\n id: string;\n url?: string;\n entity?: string;\n attribute?: string;\n caption?: string;\n filter?: OldFilter | OldFilter[];\n count?: number;\n orderType?: string;\n options?: OldOptions | OldOptions[];\n firstDimension?: string;\n useEntityType?: string;\n mapType?: number;\n map?: string;\n max?: number;\n hideEmpty?: boolean;\n inheritChildren?: boolean;\n canRead?: UIPermissions;\n};\n\nconst oldToNewTypes = {\n BarChart: ChartTypes.BAR,\n BarChartGrouped: ChartTypes.BAR,\n BarChartHorizontal: ChartTypes.BAR,\n LineChart: ChartTypes.LINE,\n Map: ChartTypes.MAP,\n Pie: ChartTypes.PIE\n};\n\nconst convertAttributeUri = (attributeUri: string, entityTypeUri?: string) => {\n return isAttributeSearchUri(attributeUri) ? searchUriToAttrUri(attributeUri, entityTypeUri) : attributeUri;\n};\nconst createEntityTypeFilter = (entityTypeUri: string) => ({\n filter: FilterOptions.EQUALS,\n fieldName: 'type',\n values: [entityTypeUri]\n});\n\nconst convertOldFilters = (filter?: OldFilter | OldFilter[]): DashboardConfigFilter[] | undefined =>\n filter &&\n wrapInArrayIfNeeded(filter)\n .map((filter) => {\n const {type, value} = filter;\n const arrayLikeFilters = [OldFilterOptions.IN, OldFilterOptions.NOT_IN, FilterOptions.HAS_ALL];\n const filterValue = arrayLikeFilters.includes(type) && typeof value === 'string' ? value.split(',') : value;\n return {...filter, value: filterValue};\n })\n .map(\n ({type, attribute, value}) =>\n ({\n filter: convertOldFilterOption(type),\n fieldName: attribute,\n values: value ? wrapInArrayIfNeeded(value) : undefined\n } as DashboardConfigFilter)\n );\n\nexport const convertChartOptions = (options?: OldOptions | OldOptions[]) => {\n if (!options) return undefined;\n const currentOption = Array.isArray(options) ? options[0] : options;\n const {chartId, geoIdName, showLegend} = currentOption;\n\n const chartType = oldToNewTypes[chartId];\n const isHorizontal = chartId === 'BarChartHorizontal' || undefined;\n const chartTypePart = chartType ? {chartType} : {};\n\n return {\n ...chartTypePart,\n showLegend,\n isHorizontal,\n geoIdName\n };\n};\n\nexport const convertFilteredSavedSearchesOptions = (options?: OldOptions | OldOptions[]): SavedSearchesOptions => {\n if (!options) return undefined;\n const currentOption = Array.isArray(options) ? options[0] : options;\n const {findShared, ...otherOpt} = currentOption;\n\n return {\n findPublic: findShared,\n ...otherOpt\n };\n};\n\nconst convertOldFiltersWithSpecialAttributes = (\n filter?: OldFilter | OldFilter[],\n attribute?: string,\n entity?: string\n): DashboardConfigFilter[] | undefined => {\n const result = convertOldFilters(filter);\n const isSpecial = !attribute || !isAttributeSearchUri(attribute);\n if (isSpecial && entity) {\n return (result || []).concat(createEntityTypeFilter(entity));\n }\n return result;\n};\n\nexport const convertFilteredEntitiesView = ({id, caption, filter, max, entity, canRead}: OldConfig) => ({\n id,\n canRead,\n filters: convertOldFiltersWithSpecialAttributes(filter, null, entity),\n component: DashboardViewTypes.FilteredEntitiesViewFacet,\n title: caption,\n max\n});\n\nexport const convertFilteredSavedSearchesView = ({id, caption, max, options, canRead}: OldConfig) => ({\n id,\n canRead,\n options: convertFilteredSavedSearchesOptions(options),\n component: DashboardViewTypes.FilteredSavedSearchesFacet,\n title: caption,\n max\n});\n\nexport const convertEntitiesByTypeView = ({\n id,\n caption,\n orderType = 'reversedCount',\n inheritChildren,\n hideEmpty,\n canRead\n}: OldConfig) => ({\n id,\n canRead,\n component: DashboardViewTypes.EntitiesByTypeViewFacet,\n orderType,\n inheritChildren,\n hideEmpty,\n title: caption\n});\n\nexport const convertMatchedEntitiesView = ({id, caption, max, canRead}: OldConfig) => ({\n id,\n canRead,\n filters: [{filter: FilterOptions.GTE, fieldName: 'matches', values: ['1']}],\n component: DashboardViewTypes.FilteredEntitiesViewFacet,\n title: caption,\n max\n});\n\nexport const convertBarChartView = ({\n id,\n entity,\n attribute,\n caption,\n filter,\n count,\n orderType,\n canRead\n}: OldConfig): DashboardFacetConfig => ({\n id,\n count,\n canRead,\n orderType,\n attributeUri: convertAttributeUri(attribute, entity),\n filters: convertOldFiltersWithSpecialAttributes(filter, attribute, entity),\n chartType: ChartTypes.BAR,\n component: DashboardViewTypes.DashboardFacet,\n title: caption\n});\n\nexport const convertBubbleChartView = ({\n id,\n entity,\n attribute,\n caption,\n filter,\n count,\n orderType,\n canRead\n}: OldConfig): DashboardFacetConfig => ({\n id,\n count,\n canRead,\n orderType,\n attributeUri: convertAttributeUri(attribute, entity),\n filters: convertOldFiltersWithSpecialAttributes(filter, attribute, entity),\n chartType: ChartTypes.BUBBLE,\n component: DashboardViewTypes.DashboardFacet,\n title: caption\n});\n\nexport const convertFacetChartView = ({\n id,\n firstDimension,\n useEntityType,\n caption,\n filter,\n count,\n orderType,\n options,\n canRead\n}: OldConfig): DashboardFacetConfig => {\n const filterArr = wrapInArrayIfNeeded(filter);\n const typeFilter = filterArr.find((f) => f?.attribute === 'type');\n const entityType = (useEntityType || typeFilter?.value) as string;\n return {\n id,\n count,\n canRead,\n orderType,\n attributeUri: convertAttributeUri(firstDimension, entityType),\n filters: convertOldFiltersWithSpecialAttributes(filter, firstDimension, entityType),\n component: DashboardViewTypes.DashboardFacet,\n title: caption,\n showOthers: true,\n ...convertChartOptions(options)\n };\n};\n\nconst mapByType = [\n 'https://reltio-ui-files.s3.amazonaws.com/map_resources/new_dashboard/world.countries.json',\n 'https://reltio-ui-files.s3.amazonaws.com/map_resources/new_dashboard/usa_prefix_latlng.topo.json',\n 'https://reltio-ui-files.s3.amazonaws.com/map_resources/new_dashboard/us-10m.json',\n 'https://reltio-ui-files.s3.amazonaws.com/map_resources/new_dashboard/zips-us-topo.json'\n];\n\nexport const convertMapView = ({\n id,\n entity,\n attribute,\n caption,\n filter,\n count,\n orderType,\n mapType,\n canRead\n}: OldConfig): DashboardFacetConfig => ({\n id,\n count,\n canRead,\n orderType,\n attributeUri: convertAttributeUri(attribute, entity),\n filters: convertOldFiltersWithSpecialAttributes(filter, attribute, entity),\n chartType: ChartTypes.MAP,\n component: DashboardViewTypes.DashboardFacet,\n title: caption,\n geoUrl: mapByType[mapType || 0],\n projection: 'geoMercator'\n});\n\nexport const convertSimpleMapView = ({\n id,\n entity,\n attribute,\n caption,\n filter,\n count,\n map,\n canRead,\n options\n}: OldConfig): DashboardFacetConfig => ({\n id,\n count,\n canRead,\n attributeUri: convertAttributeUri(attribute, entity),\n filters: convertOldFiltersWithSpecialAttributes(filter, attribute, entity),\n component: DashboardViewTypes.DashboardFacet,\n title: caption,\n geoUrl: map,\n chartType: ChartTypes.MAP,\n projection: 'geoMercator',\n ...convertChartOptions(options)\n});\n\nexport const convertEntitiesByTagView = ({id, caption, orderType, canRead}: OldConfig) => ({\n id,\n canRead,\n orderType,\n title: caption,\n chartType: ChartTypes.CLOUD,\n component: DashboardViewTypes.DashboardFacet,\n attributeUri: 'tags'\n});\n\nexport const convertEntitiesByRoleView = ({id, caption, orderType, canRead}: OldConfig) => ({\n id,\n canRead,\n orderType,\n title: caption,\n chartType: ChartTypes.TREE,\n component: DashboardViewTypes.DashboardFacet,\n attributeUri: 'roles'\n});\n\nexport const convertCustomActionView = ({id, caption, canRead, url}: OldConfig) => ({\n id,\n url,\n canRead,\n title: caption,\n component: DashboardViewTypes.CustomActionViewFacet\n});\n\nconst convertProfileStatsView = ({id, canRead, caption}: OldConfig) => ({\n id,\n canRead,\n component: DashboardViewTypes.ProfileStatsFacet,\n title: caption\n});\n\nconst convertNotificationInboxView = ({id, canRead, caption}: OldConfig) => ({\n id,\n canRead,\n component: DashboardViewTypes.NotificationInboxFacet,\n title: caption || i18n.text('Notifications')\n});\n\nconst convertActivitiesView = ({id, canRead, caption}: OldConfig) => ({\n id,\n canRead,\n component: DashboardViewTypes.ActivitiesViewFacet,\n title: caption || i18n.text('Activity log')\n});\n\nconst converters = {\n 'com.reltio.plugins.dashboard.BarChartView': convertBarChartView,\n 'com.reltio.plugins.dashboard.BubbleChartView': convertBubbleChartView,\n 'com.reltio.plugins.ui.CustomActionView': convertCustomActionView,\n 'com.reltio.plugins.dashboard.FacetChartView': convertFacetChartView,\n 'com.reltio.plugins.dashboard.MapView': convertMapView,\n 'com.reltio.plugins.dashboard.SimpleMapView': convertSimpleMapView,\n 'com.reltio.plugins.dashboard.ProfileStatsView': convertProfileStatsView,\n 'com.reltio.plugins.dashboard.FilteredSavedSearchesView': convertFilteredSavedSearchesView,\n 'com.reltio.plugins.dashboard.FilteredEntitiesView': convertFilteredEntitiesView,\n 'com.reltio.plugins.dashboard.MatchedEntitiesView': convertMatchedEntitiesView,\n 'com.reltio.plugins.dashboard.EntitiesByTypeView': convertEntitiesByTypeView,\n 'com.reltio.plugins.dashboard.EntitiesByTagView': convertEntitiesByTagView,\n 'com.reltio.plugins.dashboard.EntitiesByRoleView': convertEntitiesByRoleView,\n 'com.reltio.plugins.inbox.NotificationInboxView': convertNotificationInboxView,\n 'com.reltio.plugins.activities.ActivitiesView': convertActivitiesView\n};\n\nconst convertOldDashboardViewToNewView = (config) => {\n const converter = converters[config?.class];\n return converter ? converter(config) : null;\n};\n\nconst getDashboardViewOptions = (id) => {\n return {id, height: 10};\n};\n\nexport const convertConfigViews = pipe(map(convertOldDashboardViewToNewView), reject(isNil));\n\nexport const convertOldDashboardConfig = (config) => {\n if (config.version === '0.1') {\n const views = convertConfigViews(config.views);\n const layout = convertOldLayoutToReltioGridLayout(getDashboardViewOptions, config.layout, {columns: 4});\n return {\n id: config.id,\n margin: 0,\n layout: removeUnsupportedLayoutItems(layout, views),\n views\n };\n }\n return config;\n};\n","import {always, cond, flatten, has, is, map, pick, pipe, prop, propEq, T, values, when} from 'ramda';\nimport {wrapInArrayIfNeeded} from '../../utils';\n\nconst collectPerspectiveViews = (layoutItem) =>\n cond([\n [\n propEq('layout', 'profile'),\n pipe(pick(['center', 'right', 'top']), values, flatten, map(when(is(Object), values)), flatten)\n ],\n [has('view'), pipe(prop('view'), wrapInArrayIfNeeded)],\n [\n prop('items'),\n pipe(\n prop('items'),\n map((item) => collectPerspectiveViews(item)),\n flatten\n )\n ],\n [T, always([])]\n ])(layoutItem);\n\nexport {collectPerspectiveViews};\n","import {curry, defaultTo, find, isNil, map, pipe, prop, propEq, reject, omit, pick} from 'ramda';\nimport {convertOldLayoutToReltioGridLayout, removeUnsupportedLayoutItems} from '../utils/converter';\nimport {ProfileViewTypes} from '../../types';\n\ntype ViewConfig = {\n point: string;\n id: string;\n class: string;\n};\n\nconst OldViewTypes = {\n ...ProfileViewTypes,\n OldMap: 'com.reltio.plugins.entity.EntityMapView',\n OldTree: 'com.reltio.plugins.entity.TreeView'\n};\n\nconst RecordClassValues = {\n ComplexRelationRecord: 'com.reltio.plugins.entity.relations.ComplexRelationRecord'\n};\n\nexport const convertDefaultView = (config: ViewConfig) => config;\n\nexport const convertMapView = (config: ViewConfig) => ({\n ...config,\n class: ProfileViewTypes.Map\n});\n\nexport const convertRelationsView = (config: ViewConfig & {recordClass?: string}) => ({\n ...omit(['recordClass'], config),\n isComplex: config.recordClass === RecordClassValues.ComplexRelationRecord\n});\n\nexport const convertTreeView = (config: ViewConfig) => ({\n ...config,\n class: ProfileViewTypes.HierarchyTree\n});\n\nconst converters = {\n [OldViewTypes.Attributes]: convertDefaultView,\n [OldViewTypes.HierarchyTree]: convertDefaultView,\n [OldViewTypes.HierarchyPaths]: convertDefaultView,\n [OldViewTypes.RelationsTable]: convertDefaultView,\n [OldViewTypes.Relations]: convertRelationsView,\n [OldViewTypes.SingleAttribute]: convertDefaultView,\n [OldViewTypes.Custom]: convertDefaultView,\n [OldViewTypes.AttributeTable]: convertDefaultView,\n [OldViewTypes.Map]: convertDefaultView,\n [OldViewTypes.OldTree]: convertTreeView,\n [OldViewTypes.OldMap]: convertMapView,\n [OldViewTypes.ImageAttribute]: convertDefaultView,\n [OldViewTypes.PotentialMatches]: convertDefaultView\n};\n\nconst convertOldProfileViewToNewView = (config: ViewConfig) => {\n const converter = converters[config?.class];\n return converter ? converter(config) : null;\n};\n\nconst convertConfigViews = pipe(map(convertOldProfileViewToNewView), reject(isNil));\n\nexport const getProfileViewOptions = curry((views: ViewConfig[], id: string) => {\n const getViewType = pipe(defaultTo([]), find(propEq('id', id)), prop('class'));\n const viewType = getViewType(views);\n switch (viewType) {\n case ProfileViewTypes.Map: {\n return {id, height: 5, minHeight: 5};\n }\n default: {\n return {id, autosizing: true};\n }\n }\n});\n\nexport const fixLayout = (views, layout) => {\n return (layout || []).map((layoutItem) => {\n const options = getProfileViewOptions(views, layoutItem.id);\n return {...layoutItem, ...options};\n });\n};\n\nexport const convertOldProfileConfig = (config) => {\n const basicConfig = pick(['id', 'workflow', 'maxWidth', 'sidePanelViews', 'profileBand', 'views'], config);\n\n if (config.version === '2.0') {\n return {...basicConfig, layout: fixLayout(basicConfig.views, config.newLayout)};\n }\n\n if (config.version === '0.1') {\n const views = convertConfigViews(config.views);\n const layout = convertOldLayoutToReltioGridLayout(getProfileViewOptions(views), config.layout, {columns: 3});\n return {...basicConfig, layout: removeUnsupportedLayoutItems(layout, views), views};\n }\n\n return config;\n};\n","import {intersection} from 'ramda';\nimport {areOneHierarchyUris} from '../../uris';\nimport {ProfileViewConfig, ProfileViewTypes} from '../../types/profile';\nimport {AttributeType} from '../../types';\n\nconst isViewType = (view: ProfileViewConfig, viewType) => view.class === viewType || view['react-class'] === viewType;\n\nconst getAvailableProfileAttributesConfig = (\n views: ProfileViewConfig[]\n): {\n includeUris: string[];\n excludeUris: string[];\n} =>\n views.reduce(\n (result, view) => {\n if (isViewType(view, ProfileViewTypes.Attributes)) {\n if (view.includeUris) {\n result.includeUris.push(...(view.includeUris as string[]));\n } else {\n const viewExcludedUris = view.excludeUris || [];\n result.excludeUris = result.excludeUris\n ? intersection(result.excludeUris, viewExcludedUris)\n : viewExcludedUris;\n }\n }\n if (\n isViewType(view, ProfileViewTypes.SingleAttribute) ||\n isViewType(view, ProfileViewTypes.AttributeTable)\n ) {\n result.includeUris.push(view.attributeUri);\n }\n return result;\n },\n {\n includeUris: [],\n excludeUris: null\n }\n );\n\nconst isAvailableAttributeTypeForProfile = (views: ProfileViewConfig[]) => {\n const {includeUris, excludeUris} = getAvailableProfileAttributesConfig(views);\n return (attributeType: AttributeType, parents: AttributeType[] = []) => {\n const uri = (parents[0] || attributeType).uri;\n return (\n (excludeUris && !excludeUris.some(areOneHierarchyUris(uri))) || includeUris.some(areOneHierarchyUris(uri))\n );\n };\n};\n\nconst getProfileViewsIdsByTypes = (views: ProfileViewConfig[], viewTypes: string[]): string[] =>\n views.filter((view) => viewTypes.some((viewType) => isViewType(view, viewType))).map(({id}) => id);\n\nexport {isAvailableAttributeTypeForProfile, getProfileViewsIdsByTypes};\n","import {head, isNil, map, pipe, reject} from 'ramda';\nimport {ProfileBandConfig, UIPlugin} from '../../types';\n\nexport const getExtensionById = ({extensions}: UIPlugin, id: string) => (extensions || []).find((ext) => ext.id === id);\n\nexport const getExtensionsByClass = ({extensions}: UIPlugin, className: string) =>\n (extensions || []).filter((ext) => ext['class'] === className);\n\nexport const getExtensionsByPointId = (configuration: UIPlugin[], pointId: string) => {\n return configuration.flatMap(({extensions = []}) => {\n return extensions.filter(({point}) => point === pointId);\n });\n};\n\nexport const getPluginByActivatorId = (configuration: UIPlugin[], activatorId: string) =>\n (configuration || []).find((ext) => ext.activator === activatorId);\n\nexport const getProfileBand = (configuration: UIPlugin[]): ProfileBandConfig =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.entity.ProfileBand')),\n reject(isNil),\n head\n )(configuration);\n\nexport const getAuthoring = (configuration: UIPlugin[]) =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.ui.configuration.Authoring')),\n reject(isNil),\n head\n )(configuration);\n","import {\n assoc,\n always,\n chain,\n cond,\n curry,\n defaultTo,\n either,\n filter,\n find,\n fromPairs,\n head,\n identity,\n indexBy,\n intersection,\n is,\n isNil,\n map,\n omit,\n partition,\n pick,\n pipe,\n pluck,\n prop,\n propEq,\n propOr,\n reject,\n T,\n mergeRight,\n unless,\n when,\n path\n} from 'ramda';\nimport {\n ActionExtension,\n ProfileScreenItem,\n Extension,\n PerspectiveClass,\n PerspectiveExtension,\n ScreenItem,\n SearchToolbarExtension,\n UIPlugin,\n ViewExtension,\n ScreenItemType,\n ProfileViewTypes,\n SidePanelViewConfig\n} from '../../../types';\nimport {Layout} from '../../utils/converter';\nimport {convertOldDashboardConfig} from '../../dashboard/configConverters';\nimport {collectPerspectiveViews} from '../../utils/perspective';\nimport {convertOldProfileConfig, fixLayout} from '../../profile/index';\nimport {\n getAuthoring,\n getExtensionById,\n getExtensionsByClass,\n getExtensionsByPointId,\n getProfileBand\n} from '../extensions';\nimport {\n dashboardClasses,\n DQDashboardClasses,\n graphClasses,\n interactionClasses,\n potentialMatchesClasses,\n profileActivitiesClasses,\n relationshipsClasses,\n relationshipSearchClasses,\n searchClasses,\n sourcesClasses\n} from './constants';\n\nconst getPerspectiveId = (extension: Extension) => {\n if ((extension as ActionExtension).perspective) {\n return (extension as ActionExtension).perspective;\n }\n};\n\nconst getViewExtensionsForPerspective = curry((configuration: UIPlugin[], layout: Layout): ViewExtension[] => {\n const perspectiveViewsIds = collectPerspectiveViews(layout);\n\n return perspectiveViewsIds\n .map((viewId) =>\n pipe(\n map((plugin) => getExtensionById(plugin, viewId)),\n reject(isNil),\n head\n )(configuration)\n )\n .filter(identity);\n});\n\nconst isDBConnectorItem = either(propEq('label', 'D&B Connector'), propEq('label', 'D\\u0026B Connector'));\n\nconst isCustomExtension = propEq('class', ProfileViewTypes.Custom);\n\nconst getSidePanelViewsForPerspective = (\n configuration: UIPlugin[],\n extension: PerspectiveExtension\n): SidePanelViewConfig[] => {\n if (extension.side) {\n const panelLayout: Layout = pipe(\n chain((plugin) => getExtensionById(plugin, extension.side)),\n reject(isNil),\n head,\n prop('layout')\n )(configuration);\n const [dBConnectorItems, items] = partition(isDBConnectorItem, panelLayout?.items ?? []);\n const dBConnectorExtensions: ViewExtension[] = pipe(\n getViewExtensionsForPerspective(configuration),\n filter(isCustomExtension)\n )({...panelLayout, items: dBConnectorItems});\n const extensions = getViewExtensionsForPerspective(configuration, {\n ...panelLayout,\n items\n }) as ViewExtension[];\n\n const sidePanelViews = [\n {\n id: 'common',\n views: extensions\n }\n ];\n if (dBConnectorExtensions.length > 0) {\n sidePanelViews.push({\n id: 'D&B',\n views: dBConnectorExtensions\n });\n }\n\n return sidePanelViews;\n }\n};\n\nconst getEntityPerspectives = ({extensions = []}: UIPlugin) =>\n extensions.filter((ext) => ext.point === 'com.reltio.plugins.ui.perspective' && ext['entity-type']);\n\nconst getWorkflowConfig = (configuration: UIPlugin[]) => {\n const configs = pipe(\n chain((plugin) => getExtensionsByClass(plugin, 'com.reltio.plugins.entity.side.WorkflowsView')),\n head,\n unless(isNil, pick(['showClosedTasks', 'assignee', 'processTypes']))\n )(configuration);\n return configs;\n};\n\nexport const getEntityPerspectiveScreenItem = (configuration: UIPlugin[], extension: PerspectiveExtension) => {\n const version = propOr('0.1', 'version', extension);\n const entityType = extension['entity-type'];\n let sidePanelViews: SidePanelViewConfig[];\n const authoringAttributes = pipe(getAuthoring, path(['entityTypes', entityType]))(configuration);\n\n if (version === '2.0' && extension.newLayout) {\n const {newLayout} = extension;\n const layout = fixLayout(extension.views, newLayout);\n sidePanelViews = when(\n pipe(head, is(String)),\n pipe(\n map((viewId: string) =>\n pipe(\n map((plugin: UIPlugin) => getExtensionById(plugin, viewId)),\n reject(isNil),\n head\n )(configuration)\n ),\n reject(isNil),\n (commonViews: ViewExtension[]) => [{id: 'common', views: commonViews}]\n )\n )(extension.sidePanelViews);\n\n return pipe(\n pick(['views', 'profileBand', 'workflow', 'frozen']),\n mergeRight({entityType, layout, sidePanelViews}),\n assoc('authoring', authoringAttributes),\n reject(isNil)\n )(extension);\n }\n\n const views = getViewExtensionsForPerspective(configuration, extension.layout);\n sidePanelViews = getSidePanelViewsForPerspective(configuration, extension);\n const workflow = getWorkflowConfig(configuration);\n const profileConfig = convertOldProfileConfig({...extension, views, version: '0.1'});\n const profileBand = pipe(getProfileBand, defaultTo({}), pick(['cloneAction', 'showEntityId']))(configuration);\n\n return reject(isNil, {\n entityType,\n views: profileConfig.views,\n layout: profileConfig.layout,\n sidePanelViews,\n profileBand,\n workflow,\n authoring: authoringAttributes\n });\n};\n\nconst getProfilePerspectiveScreenItem = (configuration: UIPlugin[], extension: Extension): ProfileScreenItem => {\n const entityTypes = pipe(\n chain(getEntityPerspectives),\n map((ext) => getEntityPerspectiveScreenItem(configuration, ext)),\n indexBy(prop('entityType')),\n map(pick(['layout', 'views', 'sidePanelViews', 'profileBand', 'workflow', 'frozen', 'authoring']))\n )(configuration);\n\n return {\n class: PerspectiveClass.Profile,\n id: extension.id,\n entityTypes\n };\n};\n\nconst getNestedProfilePerspectiveScreenItem = (\n configuration: UIPlugin[],\n extension: Extension,\n perspective: PerspectiveExtension\n) => {\n const screenItem = getEntityPerspectiveScreenItem(configuration, perspective);\n const entityTypes = pipe(\n propOr([], 'entity-types'),\n map((entityType) => [entityType, screenItem]),\n fromPairs\n )(extension);\n\n return {\n class: PerspectiveClass.NestedProfile,\n id: extension.id,\n entityTypes\n };\n};\n\nconst getDashboardPerspectiveScreenItem = (\n configuration: UIPlugin[],\n perspective: PerspectiveExtension\n): ScreenItem => {\n if (perspective.layout.layout === 'scroll') {\n const views = getViewExtensionsForPerspective(configuration, perspective.layout);\n const dashboardConfig = convertOldDashboardConfig({...perspective, views, version: '0.1'});\n return {\n class: PerspectiveClass.Dashboard,\n id: perspective.id,\n views: dashboardConfig.views,\n layout: dashboardConfig.layout\n };\n }\n return {\n class: PerspectiveClass.Dashboard,\n views: perspective.views,\n layout: perspective.layout,\n id: perspective.id\n };\n};\n\nconst getDQDashboardPerspectiveScreenItem = (\n configuration: UIPlugin[],\n perspective: PerspectiveExtension\n): ScreenItem => {\n const viewExtension = getViewExtensionsForPerspective(configuration, perspective.layout)[0];\n return {\n class: PerspectiveClass.DQDashboard,\n id: perspective.id,\n viewsByDataLevel: viewExtension.viewsByDataLevel,\n layoutsByDataLevel: viewExtension.layoutsByDataLevel,\n showTimeSeries: viewExtension.showTimeSeries,\n showOVSwitcher: viewExtension.showOVSwitcher,\n showErrorBands: viewExtension.showErrorBands,\n showExportButton: viewExtension.showExportButton\n };\n};\n\nconst getRelationshipSearchPerspectiveScreenItem = (\n configuration: UIPlugin[],\n perspective: PerspectiveExtension\n): ScreenItem => {\n const viewExtension = getViewExtensionsForPerspective(configuration, perspective.layout)[0];\n return {\n class: PerspectiveClass.RelationshipSearch,\n id: perspective.id,\n options: viewExtension.options,\n consoleExportApp: viewExtension.consoleExportApp\n };\n};\n\nconst getInteractionPerspectiveScreenItem = (\n configuration: UIPlugin[],\n perspective: PerspectiveExtension\n): ScreenItem => {\n const viewExtension = getViewExtensionsForPerspective(configuration, perspective.layout)[0];\n return {\n class: PerspectiveClass.Interactions,\n id: perspective.id,\n sortOrder: viewExtension.sortOrder,\n sortColumn: viewExtension.sortColumn,\n max: viewExtension.max,\n attributes: viewExtension.attributes,\n caption: viewExtension.caption\n };\n};\n\nconst getRelationshipsPerspectiveScreenItem = (\n configuration: UIPlugin[],\n perspective: PerspectiveExtension\n): ScreenItem => {\n const viewExtension = getViewExtensionsForPerspective(configuration, perspective.layout)[0];\n return {\n class: PerspectiveClass.Relationships,\n id: perspective.id,\n canCreate: viewExtension.canCreate,\n canUpdate: viewExtension.canUpdate,\n canRead: viewExtension.canRead,\n canDelete: viewExtension.canDelete,\n profileBand: viewExtension.profileBand\n };\n};\n\nconst getSourcesPerspectiveScreenItem = (configuration: UIPlugin[], perspective: PerspectiveExtension): ScreenItem => {\n const viewExtension = getViewExtensionsForPerspective(configuration, perspective.layout)[0];\n return {\n class: PerspectiveClass.Sources,\n id: perspective.id,\n canCreate: viewExtension.canCreate,\n canUpdate: viewExtension.canUpdate,\n canRead: viewExtension.canRead,\n canDelete: viewExtension.canDelete,\n profileBand: viewExtension.profileBand\n };\n};\n\nconst getPotentialMatchesPerspectiveScreenItem = (\n configuration: UIPlugin[],\n perspective: PerspectiveExtension\n): ScreenItem => {\n const viewExtension = getViewExtensionsForPerspective(configuration, perspective.layout)[0];\n return {\n class: PerspectiveClass.PotentialMatches,\n id: perspective.id,\n availableTabs: viewExtension.availableTabs,\n allowMergeAll: viewExtension.allowMergeAll,\n matchActions: viewExtension.matchActions\n };\n};\n\nconst getSearchPerspectiveScreenItem = (configuration: UIPlugin[], perspective: PerspectiveExtension): ScreenItem => {\n const viewExtension = getViewExtensionsForPerspective(configuration, perspective.layout)[0];\n const getProcessTypeForSearch = (configuration) => {\n const [searchExtWithProcessType] = getExtensionsByPointId(\n configuration,\n 'com.reltio.plugins.search.toolbar.component'\n ).filter((ext: SearchToolbarExtension) => {\n return ext.class === 'com.reltio.plugins.ui.CustomActionButtonView' && ext.processType;\n }) as SearchToolbarExtension[];\n return searchExtWithProcessType?.processType;\n };\n const potentialMatchesReview = viewExtension.potentialMatchesReview || {\n processType: getProcessTypeForSearch(configuration)\n };\n return {\n class: PerspectiveClass.Search,\n id: perspective.id,\n consoleExportApp: viewExtension.consoleExportApp,\n mapSearchEnabled: viewExtension.mapSearchEnabled,\n canRead: viewExtension.canRead,\n 'bulk-update': viewExtension['bulk-update'],\n potentialMatchesReview,\n options: viewExtension.options,\n 'entity-types': viewExtension['entity-types'],\n tabs: viewExtension.tabs\n };\n};\n\nconst getGraphPerspectiveScreenItem = (configuration: UIPlugin[], perspective: PerspectiveExtension): ScreenItem => ({\n class: PerspectiveClass.Graph,\n id: perspective.id\n});\n\nconst gerProfileActivityLogPerspectiveScreenItem = (\n configuration: UIPlugin[],\n perspective: PerspectiveExtension\n): ScreenItem => {\n const viewExtension = getViewExtensionsForPerspective(configuration, perspective.layout)[0];\n\n return {\n class: PerspectiveClass.ProfileActivityLog,\n id: perspective.id,\n exportTypes: viewExtension.exportTypes,\n caption: viewExtension.caption\n };\n};\n\nconst isIntersectionBetweenClasses = (perspectiveClasses: string[]) => (classes: string[]) =>\n !!intersection(perspectiveClasses, classes).length;\n\nconst getScreenItemConverterByClasses = cond([\n [isIntersectionBetweenClasses(dashboardClasses), () => getDashboardPerspectiveScreenItem],\n [isIntersectionBetweenClasses(DQDashboardClasses), () => getDQDashboardPerspectiveScreenItem],\n [isIntersectionBetweenClasses(graphClasses), () => getGraphPerspectiveScreenItem],\n [isIntersectionBetweenClasses(relationshipSearchClasses), () => getRelationshipSearchPerspectiveScreenItem],\n [isIntersectionBetweenClasses(interactionClasses), () => getInteractionPerspectiveScreenItem],\n [isIntersectionBetweenClasses(relationshipsClasses), () => getRelationshipsPerspectiveScreenItem],\n [isIntersectionBetweenClasses(sourcesClasses), () => getSourcesPerspectiveScreenItem],\n [isIntersectionBetweenClasses(potentialMatchesClasses), () => getPotentialMatchesPerspectiveScreenItem],\n [isIntersectionBetweenClasses(searchClasses), () => getSearchPerspectiveScreenItem],\n [isIntersectionBetweenClasses(profileActivitiesClasses), () => gerProfileActivityLogPerspectiveScreenItem],\n [T, () => always(undefined)]\n]);\n\nexport const getPerspectiveScreenItem = (extension: Extension, configuration: UIPlugin[]) => {\n const {class: extensionClass} = extension as ActionExtension;\n if (extensionClass === 'com.reltio.plugins.entity.ProfileAction') {\n return getProfilePerspectiveScreenItem(configuration, extension);\n }\n if (extensionClass === 'com.reltio.plugins.ui.actions.CustomAction') {\n return {\n id: extension.id,\n type: ScreenItemType.CustomAction,\n config: omit(['class', 'id', 'point', 'parent', 'type'], extension)\n };\n }\n if (extensionClass === 'com.reltio.plugins.ui.actions.ConsoleAppAction') {\n return {\n id: extension.id,\n type: ScreenItemType.ConsoleAppAction,\n config: omit(['class', 'id', 'point', 'parent', 'type'], extension)\n };\n }\n const perspectiveId = getPerspectiveId(extension);\n\n if (isNil(perspectiveId)) return;\n if (\n perspectiveId === 'com.reltio.plugins.dashboard.DashboardPerspective' ||\n perspectiveId === 'com.reltio.plugins.newDashboard.NewDashboardPerspective'\n ) {\n const newDashboardPlugin = find(propEq('id', 'com.reltio.plugins.newDashboard'))(configuration);\n if (newDashboardPlugin) {\n return pipe(\n (plugin) => getExtensionById(plugin, 'com.reltio.plugins.newDashboard.NewDashboardView'),\n pick(['id', 'views', 'layout']),\n assoc('class', PerspectiveClass.Dashboard)\n )(newDashboardPlugin);\n }\n }\n\n const perspective: PerspectiveExtension = pipe(\n map((plugin) => getExtensionById(plugin, perspectiveId)),\n reject(isNil),\n head\n )(configuration);\n\n if (isNil(perspective)) return;\n\n if (perspective.entityPerspectiveId) {\n return getNestedProfilePerspectiveScreenItem(configuration, extension, perspective);\n }\n\n const perspectiveLayoutViewIds: string[] = collectPerspectiveViews(perspective.layout);\n\n const perspectiveLayoutExtensionClasses: string[] = pipe(\n chain(({extensions}) => (extensions || []).filter((ext) => perspectiveLayoutViewIds.includes(ext.id))),\n pluck('class'),\n reject(isNil)\n )(configuration);\n\n const converter = getScreenItemConverterByClasses(perspectiveLayoutExtensionClasses);\n\n return converter(configuration, perspective);\n};\n","const dashboardClasses = [\n 'com.reltio.plugins.dashboard.BarChartView',\n 'com.reltio.plugins.dashboard.BubbleChartView',\n 'com.reltio.plugins.ui.CustomActionView',\n 'com.reltio.plugins.dashboard.FacetChartView',\n 'com.reltio.plugins.dashboard.MapView',\n 'com.reltio.plugins.dashboard.SimpleMapView',\n 'com.reltio.plugins.dashboard.ProfileStatsView',\n 'com.reltio.plugins.dashboard.FilteredSavedSearchesView',\n 'com.reltio.plugins.dashboard.FilteredEntitiesView',\n 'com.reltio.plugins.dashboard.EntitiesByTypeView',\n 'com.reltio.plugins.dashboard.EntitiesByTagView',\n 'com.reltio.plugins.dashboard.EntitiesByRoleView',\n 'com.reltio.plugins.inbox.NotificationInboxView',\n 'com.reltio.plugins.activities.ActivitiesView',\n 'com.reltio.plugins.react.ReactDashboardView'\n];\n\nconst interactionClasses = [\n 'com.reltio.plugins.react.ReactInteractionsView',\n 'com.reltio.plugins.interactions.InteractionsView'\n];\n\nconst relationshipsClasses = [\n 'com.reltio.plugins.react.ReactRelationshipsView',\n 'com.reltio.plugins.relationships.RelationshipsView'\n];\n\nconst sourcesClasses = ['com.reltio.plugins.sources.SourcesView', 'com.reltio.plugins.react.ReactSourcesView'];\n\nconst potentialMatchesClasses = [\n 'com.reltio.plugins.sameas.SameAsView',\n 'com.reltio.plugins.react.ReactPotentialMatchesView'\n];\n\nconst searchClasses = ['com.reltio.plugins.react.ReactSearchView', 'com.reltio.plugins.search.dev.SearchView'];\n\nconst profileActivitiesClasses = [\n 'com.reltio.plugins.activities.ProfileActivitiesView',\n 'com.reltio.plugins.react.ReactProfileActivityLog'\n];\n\nconst DQDashboardClasses = ['com.reltio.plugins.react.ReactDQDashboardView'];\n\nconst graphClasses = ['com.reltio.plugins.graph.GraphView'];\n\nconst relationshipSearchClasses = ['com.reltio.plugins.react.ReactRelationshipSearchView'];\n\nexport {\n dashboardClasses,\n interactionClasses,\n relationshipsClasses,\n sourcesClasses,\n potentialMatchesClasses,\n profileActivitiesClasses,\n searchClasses,\n DQDashboardClasses,\n graphClasses,\n relationshipSearchClasses\n};\n","import {\n always,\n anyPass,\n any,\n chain,\n cond,\n filter,\n map,\n pipe,\n prop,\n propOr,\n sortBy,\n T,\n propEq,\n groupBy,\n pluck\n} from 'ramda';\nimport {\n ActionExtension,\n Extension,\n LayoutConfigItem,\n LayoutConfigSubMenuItem,\n PerspectiveClass,\n ScreenItem,\n UIPlugin\n} from '../../../types';\nimport {getPerspectiveScreenItem} from './preparePerspectives';\n\nconst getFirstLevelActions = ({extensions}: UIPlugin) =>\n (extensions || []).filter(\n (ext) =>\n ext.point === 'com.reltio.plugins.ui.action' &&\n ext.type === 'com.reltio.plugins.ui.first_level_action' &&\n !ext.parent\n );\n\nconst getActionsByParentId = ({extensions}: UIPlugin, id: string) =>\n (extensions || []).filter(\n (extension) => extension.point === 'com.reltio.plugins.ui.action' && extension.parent === id\n );\nconst PREFIX = 'https://reltio-ui-files.s3.amazonaws.com/new-ui/';\nenum GroupIcons {\n DashboardGroup,\n ProfileGroup,\n SearchGroup\n}\nconst ICONS = {\n [PerspectiveClass.DQDashboard]: `${PREFIX}DqDashboard.svg`,\n [PerspectiveClass.Dashboard]: `${PREFIX}Dashboard.svg`,\n [PerspectiveClass.Graph]: `${PREFIX}Graph.svg`,\n [PerspectiveClass.RelationshipSearch]: `${PREFIX}GraphSearch.svg`,\n [PerspectiveClass.Interactions]: `${PREFIX}Interactions.svg`,\n [PerspectiveClass.PotentialMatches]: `${PREFIX}PotentialMatches.svg`,\n [PerspectiveClass.Profile]: `${PREFIX}Profile.svg`,\n [PerspectiveClass.NestedProfile]: `${PREFIX}Profile.svg`,\n [PerspectiveClass.ProfileActivityLog]: `${PREFIX}ActivityLog.svg`,\n [PerspectiveClass.Relationships]: `${PREFIX}Relationships.svg`,\n [PerspectiveClass.Sources]: `${PREFIX}Crosswalk.svg`,\n [PerspectiveClass.Search]: `${PREFIX}Search.svg`,\n [GroupIcons.DashboardGroup]: `${PREFIX}DashboardGroup.svg`,\n [GroupIcons.ProfileGroup]: `${PREFIX}ProfileGroup.svg`,\n [GroupIcons.SearchGroup]: `${PREFIX}SearchGroup.svg`,\n DEFAULT: `${PREFIX}Default.svg`\n};\n\nconst getIconByScreen = (screen: ScreenItem) => {\n return ICONS[screen?.class] || ICONS.DEFAULT;\n};\n\nconst getNestedScreenGroups = pipe(\n pluck('screen'),\n filter(anyPass([propEq('class', PerspectiveClass.NestedProfile)])),\n groupBy(prop('class')),\n map((child) => child.map((item, index) => ({...item, nestedRoute: `${index + 1}`})))\n);\n\nconst getSideMenuItemScreen = (nestedGroups, screen) =>\n nestedGroups[screen.class]?.find(propEq('id', screen.id)) || screen;\n\nconst getSideMenuItems = (extension: Extension, configuration: UIPlugin[]): LayoutConfigSubMenuItem[] => {\n const extensions = pipe(\n chain((plugin) => getActionsByParentId(plugin, extension.id)),\n sortBy(propOr(Infinity, 'position')),\n map((child) => ({\n ...child,\n entityTypes: child['entity-types'],\n screen: getPerspectiveScreenItem(child, configuration)\n })),\n filter((item) => item.screen)\n )(configuration);\n const nestedGroups = getNestedScreenGroups(extensions);\n\n return map(({label, screen, canRead, entityTypes}) => ({\n label,\n icon: getIconByScreen(screen),\n screen: getSideMenuItemScreen(nestedGroups, screen),\n canRead,\n entityTypes\n }))(extensions);\n};\n\nconst getSpecialIcon = (extension: ActionExtension) =>\n extension.class === 'com.reltio.plugins.entity.ProfileFirstAction' ? ICONS[GroupIcons.ProfileGroup] : null;\n\nconst getGroupIcon = (sideMenuItems) => {\n const isDashboardItem = ({icon}) =>\n icon === ICONS[PerspectiveClass.Dashboard] || icon === ICONS[PerspectiveClass.DQDashboard];\n const isSearchItem = ({icon}) =>\n icon === ICONS[PerspectiveClass.Search] || icon === ICONS[PerspectiveClass.RelationshipSearch];\n const getIcon = cond([\n [any(isDashboardItem), always(ICONS[GroupIcons.DashboardGroup])],\n [any(isSearchItem), always(ICONS[GroupIcons.SearchGroup])],\n [T, () => null]\n ]);\n return getIcon(sideMenuItems);\n};\nexport const convertOldUIConfigToLayout = (configuration: UIPlugin[]): LayoutConfigItem[] => {\n const extensions: ActionExtension[] = pipe(\n chain(getFirstLevelActions),\n sortBy(propOr(Infinity, 'position'))\n )(configuration);\n\n return extensions.map((extension) => {\n const sideMenuItems = getSideMenuItems(extension, configuration);\n const screen = getPerspectiveScreenItem(extension, configuration);\n return {\n label: extension.label,\n icon: getSpecialIcon(extension) || getGroupIcon(sideMenuItems) || getIconByScreen(screen),\n menu: sideMenuItems.length ? {type: 'side', items: sideMenuItems} : undefined,\n screen,\n canRead: extension.canRead\n };\n });\n};\n","import {chain, flatten, filter, uniqBy, propEq, map, pipe, pluck, prop, reduce, values} from 'ramda';\nimport {Extension, PerspectiveExtension, PivotingAttribute, PivotingItem, UIPlugin} from '../../../types';\nimport {convertOldLayoutToReltioGridLayout, Layout, removeUnsupportedLayoutItems} from '../../utils/converter';\nimport {convertConfigViews} from '../../dashboard/configConverters';\nimport {collectPerspectiveViews} from '../../utils/perspective';\n\nconst getPerspectivesWithAttributeTypes = (configuration: UIPlugin[]) =>\n chain(({extensions}) =>\n (extensions || []).filter((ext) => ext.point === 'com.reltio.plugins.ui.perspective' && ext['attribute-types'])\n )(configuration);\n\nconst getPivotingSettings = ({extensions}: UIPlugin) =>\n (extensions || []).filter(propEq('id', 'com.reltio.plugins.pivoting.PivotingSettings'));\n\nconst getPivotingAttributes = (configuration: UIPlugin[]) =>\n pipe(chain(getPivotingSettings), pluck('pivotingAttributes'), flatten)(configuration);\n\nconst getPivotingViewOptions = (id: string) => ({id, height: 10});\n\nconst findDefaultExtension = (extensions: Extension[]) => (extensions || []).find(propEq('attribute-types', '*'));\n\nconst findExtensionWithPivotingAttribute = (extensions: Extension[], pivotingAttribute: PivotingAttribute) =>\n extensions.find(\n (ext) => Array.isArray(ext['attribute-types']) && ext['attribute-types'].includes(pivotingAttribute.uri)\n );\n\nconst getExtensionsForPivoting = (pivotingAttributes: PivotingAttribute[], extensions: Extension[]) => {\n const defaultExtension = findDefaultExtension(extensions);\n\n return pipe(\n reduce((acc, attributeTypes) => {\n const extension = findExtensionWithPivotingAttribute(extensions, attributeTypes) || defaultExtension;\n if (extension?.id) {\n if (!acc[extension.id]) acc[extension.id] = {extension, attributeTypes: []};\n acc[extension.id].attributeTypes.push(attributeTypes);\n }\n return acc;\n }, {}),\n values\n )(pivotingAttributes);\n};\n\nconst getViewsForPerspective = (configuration: UIPlugin[], layout: Layout) => {\n const perspectiveViewsIds = collectPerspectiveViews(layout);\n const views: string[] = pipe(\n chain(({extensions}) => (extensions || []).filter((ext) => perspectiveViewsIds.includes(ext.id))),\n filter(({views}) => views),\n map(({views, id}) => ({id, ...views[0]})),\n uniqBy(prop('id'))\n )(configuration);\n return views;\n};\n\nconst processLayoutConfig = (configuration: UIPlugin[], extension: PerspectiveExtension) => {\n if (extension.layout.layout === 'scroll') {\n const views = convertConfigViews(getViewsForPerspective(configuration, extension.layout));\n const layout = convertOldLayoutToReltioGridLayout(getPivotingViewOptions, extension.layout, {\n columns: 4\n });\n\n return {\n views,\n layout: removeUnsupportedLayoutItems(layout, views)\n };\n } else {\n return extension;\n }\n};\n\nexport const convertOldUIConfigToPivotingItems = (configuration: UIPlugin[]): PivotingItem[] => {\n const extensions = getPerspectivesWithAttributeTypes(configuration);\n const pivotingAttributes: PivotingAttribute[] = getPivotingAttributes(configuration);\n\n const extensionsForPivoting = getExtensionsForPivoting(pivotingAttributes, extensions);\n\n return extensionsForPivoting.map(({extension, attributeTypes}) => {\n const layoutConfig = processLayoutConfig(configuration, extension);\n\n return {\n 'attribute-types': attributeTypes,\n views: layoutConfig.views,\n layout: layoutConfig.layout\n };\n });\n};\n","import {\n always,\n curry,\n defaultTo,\n filter,\n head,\n ifElse,\n isNil,\n map,\n not,\n omit,\n pick,\n pipe,\n path,\n prop,\n propSatisfies,\n either,\n equals,\n reject,\n unless\n} from 'ramda';\nimport {isAbsoluteUrl} from '../../../network/api/utils';\nimport {\n AttributePresentations,\n CustomScript,\n DateMasks,\n EntityRequestSettingsExtension,\n ImageAttributeFieldsOrder,\n LanguageExtension,\n LookupAutocompleteExtension,\n LookupCodeVisibilityExtension,\n Preview,\n ProfileCheckUpdate,\n PropertiesConfig,\n RequestProviderConfiguration,\n SortingStrategy,\n UIPlugin,\n WorkflowConfiguration\n} from '../../../types';\nimport {isEmptyValue, isObject} from '../../../utils';\nimport {getExtensionById, getExtensionsByPointId, getPluginByActivatorId, getProfileBand} from '../extensions';\n\nconst getEntityRequestSettings = (configuration: UIPlugin[]): EntityRequestSettingsExtension['defaultMaxValues'] =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.entity.EntityRequestSettings')),\n reject(isNil),\n head,\n prop('defaultMaxValues')\n )(configuration);\n\nconst getImageAttributeFieldsOrder = (configuration: UIPlugin[]): ImageAttributeFieldsOrder =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.imageattribute.fieldsorder')),\n reject(isNil),\n head,\n omit(['point', 'id'])\n )(configuration);\n\nconst getLookupAutocomplete = (\n configuration: UIPlugin[]\n): Pick<LookupAutocompleteExtension, 'includeAttributes' | 'excludeAttributes'> =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.ui.LookupAutocomplete')),\n reject(isNil),\n head,\n defaultTo({}),\n pick(['includeAttributes', 'excludeAttributes'])\n )(configuration);\n\nconst getLookupCodeStrategy = (configuration: UIPlugin[]): LookupCodeVisibilityExtension =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.ui.LookupCodeVisibility')),\n reject(isNil),\n head,\n defaultTo({})\n )(configuration);\n\nconst getValidationServiceLevels = (configuration: UIPlugin[]): string[] =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.entity.ValidationServiceLevels')),\n reject(isNil),\n head,\n prop('levels')\n )(configuration);\n\nconst getSwitchToClassic = (configuration: UIPlugin[]): boolean =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.ui.configuration.FeatureManagement')),\n reject(isNil),\n head,\n prop('preferNewUI'),\n not\n )(configuration);\n\nconst getValidationReadMode = (configuration: UIPlugin[]): boolean =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.entity.Validation')),\n reject(isNil),\n head,\n prop('validateReadMode')\n )(configuration);\n\nconst getLocalizationServers = (configuration: UIPlugin[]): LanguageExtension['configuration'] =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.ui.LocalizationServer')),\n reject(isNil),\n head,\n prop('configuration')\n )(configuration);\n\nconst getAttributePresentations = (configuration: UIPlugin[]): AttributePresentations =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.ui.AttributePresentation')),\n reject(isNil),\n head,\n prop('configuration'),\n defaultTo({}),\n filter(propSatisfies(either(isObject, equals('none')), 'format')),\n map(({format}) => {\n if (format === 'none') return {thousandSeparator: ''};\n const {groupSeparator, digitsAfterDecimalSeparator, ...otherSettings} = format;\n return {\n thousandSeparator: groupSeparator,\n decimalScale: digitsAfterDecimalSeparator,\n ...otherSettings\n };\n })\n )(configuration);\n\nconst getDateMasks = (configuration: UIPlugin[]): DateMasks =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.framework.util.DateMask')),\n reject(isNil),\n head,\n prop('configuration'),\n defaultTo({}),\n ({dateMask, dateTimeMask}) => ({dateMask, dateTimeMask}),\n reject(isNil)\n )(configuration);\n\nconst getRequestProviderConfiguration = (configuration: UIPlugin[]): RequestProviderConfiguration =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.network.configuration')),\n reject(isNil),\n head,\n omit(['id', 'point'])\n )(configuration);\n\nconst getProfileCheckUpdate = (configuration: UIPlugin[]): ProfileCheckUpdate =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.ui.ProfileCheckUpdate')),\n reject(isNil),\n head,\n defaultTo({}),\n omit(['id', 'point'])\n )(configuration);\n\nconst getWorkflowConfiguration = (configuration: UIPlugin[]): WorkflowConfiguration =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.workflow.configuration')),\n reject(isNil),\n head,\n defaultTo({}),\n ({workflowPath, enabled}) => ({enabled, path: workflowPath})\n )(configuration);\n\nconst getUIActivatorProp = curry((propName: string, configuration: UIPlugin[]) =>\n pipe(\n (configuration) => getPluginByActivatorId(configuration, 'com.reltio.plugins.ui.Activator'),\n prop(propName)\n )(configuration)\n);\n\nconst isDashboard = (id: string) => id === 'com.reltio.plugins.dashboard.DashboardPerspective';\nconst getDefaultRoute = (configuration: UIPlugin[]): string | undefined =>\n pipe(\n getUIActivatorProp('default-perspective'),\n ifElse(isDashboard, always('dashboard'), always('search'))\n )(configuration);\n\nconst getAttributesSortingStrategy = (configuration: UIPlugin[]): SortingStrategy | undefined =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.ui.AttributesSorting')),\n reject(isNil),\n head,\n prop('strategy')\n )(configuration);\n\nconst getShowSearchByOv = (configuration: UIPlugin[]): boolean | undefined =>\n pipe(\n map((plugin) => getExtensionById(plugin, 'com.reltio.plugins.search.dev.SearchView')),\n reject(isNil),\n head,\n path(['options', 'showSearchByOv'])\n )(configuration);\n\nconst getCustomScripts = (configuration: UIPlugin[]): CustomScript[] =>\n pipe(\n (configuration) => getExtensionsByPointId(configuration, 'com.reltio.plugins.ui.custom_script'),\n reject(isEmptyValue),\n map(({action, ...otherProps}) => ({...action, ...otherProps}))\n )(configuration);\n\nconst getCheckUser = (configuration: UIPlugin[]): boolean => getUIActivatorProp('checkUser', configuration);\n\nconst getCheckIdle = (configuration: UIPlugin[]): number => getUIActivatorProp('checkIdle', configuration);\n\nconst getPreview = (configuration: UIPlugin[]): Preview => getUIActivatorProp('preview', configuration);\n\nconst getUrlIfAbsolute = unless(isAbsoluteUrl, always(null));\n\ntype GetLogoFn = (configuration: UIPlugin[]) => string;\nconst getLogo: GetLogoFn = pipe(getUIActivatorProp('top-logo'), getUrlIfAbsolute);\n\nconst getShowAttributeDescription = (configuration: UIPlugin[]): boolean =>\n getUIActivatorProp('showAttributeDescription', configuration);\n\nconst getHeaderColor = (configuration: UIPlugin[]): string => getUIActivatorProp('topBackgroundColor', configuration);\n\nconst checkIfLookupCodeStrategyAndShowCodeExist = prop('showLookupCode');\n\nconst shouldShowLookupCode = (lookupCode) => (lookupCode === undefined ? true : lookupCode);\n\nexport const convertOldUIConfigToProperties = (configuration: UIPlugin[]): PropertiesConfig => {\n const defaultMaxValues = getEntityRequestSettings(configuration);\n const imageAttributeFieldsOrder = getImageAttributeFieldsOrder(configuration);\n const lookupAutocomplete = getLookupAutocomplete(configuration);\n const validationLevels = getValidationServiceLevels(configuration);\n const validationReadMode = getValidationReadMode(configuration);\n const localizationServers = getLocalizationServers(configuration);\n const attributePresentations = getAttributePresentations(configuration);\n const workflow = getWorkflowConfiguration(configuration);\n const defaultRoute = getDefaultRoute(configuration);\n const attributesSorting = getAttributesSortingStrategy(configuration);\n const customScripts = getCustomScripts(configuration);\n const checkUser = getCheckUser(configuration);\n const checkIdle = getCheckIdle(configuration);\n const showSwitchToClassic = getSwitchToClassic(configuration);\n const lookupCodeStrategy = getLookupCodeStrategy(configuration);\n const showLookupCode = shouldShowLookupCode(checkIfLookupCodeStrategyAndShowCodeExist(lookupCodeStrategy));\n const showEntityId = getProfileBand(configuration)?.showEntityId;\n const preview = getPreview(configuration);\n const logo = getLogo(configuration);\n const showAttributeDescription = getShowAttributeDescription(configuration);\n const headerColor = getHeaderColor(configuration);\n const dateMasks = getDateMasks(configuration);\n const requestProvider = getRequestProviderConfiguration(configuration);\n const showSearchByOv = getShowSearchByOv(configuration);\n const masks = Object.keys(dateMasks).length === 0 ? undefined : dateMasks;\n const profileCheckUpdate = getProfileCheckUpdate(configuration);\n return {\n i18n: localizationServers,\n entity: {\n requestSettings: {defaultMaxValues}\n },\n image: {\n attributeFieldsOrder: imageAttributeFieldsOrder\n },\n lookups: {\n autocomplete: lookupAutocomplete,\n showCode: showLookupCode\n },\n validate: {\n levels: validationLevels,\n validateReadMode: validationReadMode\n },\n masks,\n requestProvider,\n attributePresentations,\n attributesSorting,\n workflow,\n defaultRoute,\n customScripts,\n checkUser,\n checkIdle,\n showSearchByOv,\n showSwitchToClassic,\n showEntityId,\n preview,\n logo,\n showAttributeDescription,\n headerColor,\n profileCheckUpdate\n };\n};\n","import {UIPlugin} from '../../types';\nimport {convertOldUIConfigToLayout} from './layout/convertOldUIConfigToLayout';\nimport {convertOldUIConfigToPivotingItems} from './pivoting/convertOldUIConfigToPivotingItems';\nimport {convertOldUIConfigToProperties} from './properties/convertOldUIConfigToProperties';\n\nexport const convertOldUIConfigToNewConfig = (configuration: UIPlugin[]) => {\n const layout = convertOldUIConfigToLayout(configuration);\n const pivoting = convertOldUIConfigToPivotingItems(configuration);\n const properties = convertOldUIConfigToProperties(configuration);\n return {layout, pivoting, properties};\n};\n","import {nanoid} from 'nanoid';\n\ntype ObjectWithId = {id: string};\n\nconst fixNonUniqViewsIds = <ViewItem extends ObjectWithId, LayoutItem extends ObjectWithId>({\n views,\n layout\n}: {\n views: ViewItem[];\n layout?: LayoutItem[];\n}) => {\n const idToNewIdsMap = {};\n let hasNonUniqs = false;\n const newViews = views.map((view) => {\n if (!idToNewIdsMap[view.id]) {\n idToNewIdsMap[view.id] = [view.id];\n return view;\n } else {\n const newId = `${view.id}_${nanoid()}`;\n idToNewIdsMap[view.id].push(newId);\n hasNonUniqs = true;\n return {\n ...view,\n id: newId\n };\n }\n });\n const idsCountMap = {};\n const newLayout =\n layout && hasNonUniqs\n ? layout.map((item) => {\n if (idsCountMap[item.id] == null) {\n idsCountMap[item.id] = 0;\n return item;\n } else {\n idsCountMap[item.id]++;\n const newId = idToNewIdsMap[item.id][idsCountMap[item.id]];\n return {\n ...item,\n id: newId\n };\n }\n })\n : layout;\n return hasNonUniqs ? {views: newViews, layout: newLayout} : {views, layout};\n};\n\nexport {fixNonUniqViewsIds};\n","import {\n CustomAction,\n CustomActionTaskParams,\n CustomActionExtension,\n CustomActionViewConfig,\n CustomScriptExtension,\n ProcessParams\n} from '../types';\nimport {getHash, isEmptyValue} from '../utils';\n\ntype WorkerList = {\n [hash: string]: {\n worker?: Worker;\n innerText?: string;\n onWorkerMessage?: (event: MessageEvent<any>) => void;\n };\n};\n\nlet workerList: WorkerList = {};\n\nexport const initializeWebWorker = (\n workerUrl: string,\n process: (data: ProcessParams) => void,\n config?: CustomActionViewConfig | CustomScriptExtension | CustomActionExtension\n) => {\n const scriptText = `\n importScripts(\"${workerUrl}\");\n importScripts(\"${config.action.files.join('\",\"')}\");\n postMessage({action:'loaded'});`;\n let worker: Worker;\n\n const hash = getHash(`${config.id}: ${config.action.files.join('\",\"')}`);\n\n if (!isEmptyValue(workerList[hash])) {\n worker = workerList[hash].worker;\n if (workerList[hash].innerText) {\n process({\n task: {action: CustomAction.SET_HTML, params: {html: workerList[hash].innerText}},\n worker,\n config\n });\n }\n worker.removeEventListener('message', workerList[hash].onWorkerMessage);\n } else {\n try {\n // Firefox\n const url = window.webkitURL || window.URL;\n worker = new Worker(url.createObjectURL(new Blob([scriptText], {type: 'application/javascript'})));\n } catch (browserNotSupportWindowUrl) {\n // Chrome\n worker = new Worker('data:application/javascript,' + encodeURIComponent(scriptText));\n }\n workerList = {\n ...workerList,\n [hash]: {\n ...(workerList[hash] || {}),\n worker\n }\n };\n }\n if (worker) {\n workerList[hash].onWorkerMessage = (e) => {\n if (e.data.action !== 'loaded') {\n const task = JSON.parse(e.data);\n process({task, worker, config});\n if (task.action === 'setHtml' && !(task.params as CustomActionTaskParams).id) {\n workerList[hash].innerText = task.params.html;\n }\n }\n };\n worker.addEventListener('message', workerList[hash].onWorkerMessage);\n }\n return worker;\n};\n","import {curry, flip} from 'ramda';\nimport {DataTenant} from '../types';\n\nexport const isAvailableEntityTypeForDataTenant = curry<DataTenant, string, boolean>(\n (dataTenantObject, entityTypeUri) =>\n !dataTenantObject ||\n !dataTenantObject.availableEntityTypes ||\n !entityTypeUri ||\n dataTenantObject.availableEntityTypes.includes(entityTypeUri)\n);\n\nexport const isAvailableTenantForEntityType: curry<string, DataTenant, boolean> = flip(\n isAvailableEntityTypeForDataTenant\n);\n","import {Decimal} from 'decimal.js';\n\nconst convertPercentValue = (x: string | number, converter: (x) => Decimal) => {\n let decimal;\n try {\n decimal = converter(x);\n } catch (e) {\n return x;\n }\n return typeof x === 'number' ? decimal.toNumber() : decimal.toString();\n};\n\nconst getPercentValueConverters = () => ({\n in: (x: number | string) => convertPercentValue(x, (x) => new Decimal(x).mul(10000).floor().div(100)),\n out: (x: number | string) => convertPercentValue(x, (x) => new Decimal(x).mul(100).floor().div(10000))\n});\n\nexport {getPercentValueConverters};\n","import {curry, identity} from 'ramda';\nimport {AttributePresentations, DataTypeDefinition, NumberFormat, NumberPresentationStrategy} from '../types';\nimport {LOCALE_ATTRIBUTE_PRESENTATION, PotentialMatchesAttrTypes} from '../constants';\nimport {getPercentValueConverters} from './percentStrategy';\nimport {getNumberFormatForLocale} from '../intl';\nimport {isSpecialAttribute} from '../metadata';\n\nexport const attributePresentationStrategyCustomization = {\n [NumberPresentationStrategy.percent]: {\n valueConverters: getPercentValueConverters()\n }\n};\n\nconst applyPresentationStrategyToValue = curry((name: NumberPresentationStrategy, value: string | number) => {\n const converter = attributePresentationStrategyCustomization[name]?.valueConverters?.in || identity;\n return converter(value);\n});\n\nconst revertPresentationStrategyForValue = curry((name: NumberPresentationStrategy, value: string | number) => {\n const converter = attributePresentationStrategyCustomization[name]?.valueConverters?.out || identity;\n return converter(value);\n});\n\nconst getNumberFormat = (\n dataTypeDefinition: DataTypeDefinition,\n attributePresentations: AttributePresentations = {},\n locale?: string\n): NumberFormat => {\n const {uri, name} = dataTypeDefinition || {};\n const uriOrName = !uri || isSpecialAttribute(dataTypeDefinition) ? name : uri;\n return (\n attributePresentations[uriOrName] ||\n attributePresentations[LOCALE_ATTRIBUTE_PRESENTATION] ||\n getNumberFormatForLocale(locale)\n );\n};\n\nconst getSpecialAttributesPresentation = (\n attributePresentations: AttributePresentations = {},\n locale: string\n): AttributePresentations => ({\n [PotentialMatchesAttrTypes.relevanceScore.name]: {\n ...getNumberFormat(PotentialMatchesAttrTypes.relevanceScore, attributePresentations, locale),\n strategy: NumberPresentationStrategy.percent\n }\n});\n\nexport {\n getNumberFormat,\n getSpecialAttributesPresentation,\n applyPresentationStrategyToValue,\n revertPresentationStrategyForValue\n};\n","import {Decimal} from 'decimal.js';\nimport memoizeOne from 'memoize-one';\nimport {NumberFormat} from '../types/numberFormat';\nimport {applyPresentationStrategyToValue} from '../attributePresentation';\n\nconst getNumberFormatForLocale = memoizeOne((locale?: string) => {\n locale = locale?.replace(/_/g, '-');\n const parts = new Intl.NumberFormat(locale).formatToParts(1000000.1);\n const findPartValueByType = (typeToFind: string) => parts.find(({type}) => type === typeToFind)?.value;\n const getLongestValue = (typeToFind: string) =>\n parts\n .filter(({type}) => type === typeToFind)\n .map(({value}) => value)\n .sort((a, b) => b.length - a.length)?.[0];\n return {\n thousandSeparator: findPartValueByType('group'),\n decimalSeparator: findPartValueByType('decimal'),\n groupSize: (getLongestValue('integer') || '000').length\n };\n});\n\nconst applyFormatToNumber = (format: NumberFormat, value: string) => {\n const {\n thousandSeparator = '',\n decimalSeparator = '.',\n prefix = '',\n suffix = '',\n groupSize = 3,\n decimalScale,\n strategy\n } = format;\n value = applyPresentationStrategyToValue(strategy, value);\n const roundedNumber = decimalScale != null ? new Decimal(value).toFixed(decimalScale) : value;\n const [integer, decimal] = roundedNumber.split('.');\n\n const integerRegex = new RegExp(`\\\\B(?=(\\\\d{${groupSize}})+(?!\\\\d))`, 'g');\n const integerPart = integer.replace(integerRegex, thousandSeparator);\n\n const trimmedDecimal = decimal?.replace(/(0|\\.)+$/, '');\n const decimalPart = trimmedDecimal ? decimalSeparator + trimmedDecimal : '';\n\n return prefix + integerPart + decimalPart + suffix;\n};\n\nconst number = (locale: string | undefined, rawValue: unknown) => {\n const value = String(rawValue);\n try {\n const format = getNumberFormatForLocale(locale);\n return applyFormatToNumber(format, value);\n } catch (e) {\n console.warn('Number localization error');\n return value;\n }\n};\n\nexport {applyFormatToNumber, getNumberFormatForLocale, number};\n","import {applyFormatToNumber, getNumberFormatForLocale, number} from './number';\n\nlet locale: string | undefined;\n\nconst setLocale = (newLocale?: string) => {\n locale = newLocale;\n};\n\nconst getLocale = () => locale;\n\nconst numberWithLocale = (value: unknown) => number(getLocale(), value);\n\nconst intl = {\n setLocale,\n getLocale,\n number: numberWithLocale,\n applyFormatToNumber\n};\n\nexport {intl, getNumberFormatForLocale};\n","import {curry, is} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {intl} from '../intl';\n\nconst formatNumber = curry((format, value) => {\n if (value == null) {\n return '';\n }\n\n if (typeof value !== 'string') {\n value = String(value);\n }\n\n if (format && value) {\n return intl.applyFormatToNumber(format, value);\n } else if (!format && value) {\n value = intl.number(value);\n }\n\n return value;\n});\n\nconst formatNumberAsMetric = (value, limit = 1000) => {\n if (!is(Number, value)) {\n return '';\n }\n\n return value > limit ? i18n.number(value, '0,0.0a').toUpperCase() : i18n.number(value, '0,0');\n};\n\nexport {formatNumber, formatNumberAsMetric};\n","import {has, ifElse, last, pipe, prop, split} from 'ramda';\n\nconst getFileName = ifElse(has('filename'), prop('filename'), pipe(prop('link'), split('/'), last));\n\nexport {getFileName};\n","import {complement, curry, hasPath, map, path, pipe, propOr} from 'ramda';\n\nlet showLookupCode = true;\n\nexport const setLookupStrategy = (showCode) => (showLookupCode = showCode);\n\nexport const getLookupLabel = (lookupCode, displayName) => {\n if (lookupCode === displayName || !displayName) {\n return lookupCode;\n }\n return showLookupCode && lookupCode ? `${displayName} (${lookupCode})` : displayName;\n};\n\nexport const getResolvedLookupValue = (resolvedLookups, lookupTypeCode, lookupCode) =>\n path([lookupTypeCode, lookupCode, 'displayName'], resolvedLookups);\n\nexport const getResolvedLookupLabel = (resolvedLookups, lookupTypeCode, lookupCode) => {\n const lookupValue = getResolvedLookupValue(resolvedLookups, lookupTypeCode, lookupCode);\n return getLookupLabel(lookupCode, lookupValue);\n};\n\nexport const isResolvedLookupCode = curry((resolvedLookups, type, codeValue) =>\n hasPath([type, codeValue], resolvedLookups)\n);\nexport const isUnresolvedLookupCode = complement(isResolvedLookupCode);\n\nexport const buildLookupRecord = (lookupTypeCode) =>\n pipe(\n propOr({}, lookupTypeCode),\n Object.entries,\n map(([lookupCode, {displayName}]) => ({lookupCode, value: displayName}))\n );\n","import {pipe, reduce, values, uniq, pathOr, curry} from 'ramda';\nimport {isUnresolvedLookupCode} from './codes';\n\nconst mergeLookupsLists = (...lookupsLists) => {\n return pipe(\n reduce((merged, lookupsList) => {\n return lookupsList.reduce((mergedLookups, {type, codeValues}) => {\n mergedLookups[type] = {\n type,\n codeValues: uniq([...pathOr([], [type, 'codeValues'], mergedLookups), ...codeValues])\n };\n return mergedLookups;\n }, merged);\n }, {}),\n values\n )(lookupsLists);\n};\n\nconst getUnresolvedLookupsList = curry((resolvedLookups, lookupsList) =>\n lookupsList\n .map(({type, codeValues}) => ({\n type,\n codeValues: codeValues.filter(isUnresolvedLookupCode(resolvedLookups, type))\n }))\n .filter(({codeValues}) => codeValues.length > 0)\n);\n\nexport {mergeLookupsLists, getUnresolvedLookupsList};\n","import i18n from 'ui-i18n';\nimport {AttributePresentations, DataTypeDefinition, DataTypes, PrimitiveValue, SimpleAttributeValue} from '../types';\nimport {curry, is, isEmpty, isNil, propEq, propOr} from 'ramda';\nimport {formatNumber, formatNumberAsMetric} from './numbers';\nimport {getFileName} from './file';\nimport {getMomentFormatFromDateMask, getMomentFormatFromDateTimeMask, toLocalDate} from '../utils/dates';\nimport {getRangeOptionLabel, isDateRangeValue} from '../filters';\nimport {getLookupLabel} from '../lookups';\nimport {parseBoolean} from '../utils';\nimport {DateRangeValue} from '../constants';\nimport {getNumberFormat} from '../attributePresentation';\nimport {intl} from '../intl';\n\ntype FormatOptions = {\n dataTypeDefinition?: DataTypeDefinition;\n attributePresentations?: AttributePresentations;\n dateMask?: string;\n dateTimeMask: string;\n};\nconst formatDataTypeValue = curry(\n (\n {\n attributePresentations = {},\n dataTypeDefinition = {} as DataTypeDefinition,\n dateMask,\n dateTimeMask\n }: FormatOptions,\n value?: SimpleAttributeValue | PrimitiveValue\n ): string => {\n const dateFormat = dateMask ? getMomentFormatFromDateMask(dateMask) : 'L';\n const dateTimeFormat = dateTimeMask ? getMomentFormatFromDateTimeMask(dateTimeMask) : 'L LTS';\n switch (dataTypeDefinition.type) {\n case DataTypes.TYPE_NUMBER:\n case DataTypes.TYPE_FLOAT:\n case DataTypes.TYPE_DOUBLE:\n case DataTypes.TYPE_LONG:\n case DataTypes.TYPE_INT:\n case DataTypes.TYPE_COUNT: {\n const format = getNumberFormat(dataTypeDefinition, attributePresentations, intl.getLocale());\n return value && formatNumber(format, value);\n }\n case DataTypes.TYPE_BOOLEAN:\n case DataTypes.TYPE_BOOLEAN_RADIO:\n case DataTypes.TYPE_RDM_LOOKUPS_NOT_RESOLVED:\n if (isEmpty(value)) {\n return '';\n }\n value = value as string;\n return isNil(value) ? value : parseBoolean(value) ? i18n.text('Yes') : i18n.text('No');\n case DataTypes.TYPE_DATE: {\n if (is(Number, value)) {\n value = toLocalDate(Number(value)).getTime();\n }\n value = value as string;\n return value && (isDateRangeValue(value) ? getRangeOptionLabel(value) : i18n.date(value, dateFormat));\n }\n case DataTypes.TYPE_ACTIVENESS_DATE:\n case DataTypes.TYPE_LOCAL_DATE:\n value = value as DateRangeValue | number;\n return (\n value &&\n (isDateRangeValue(value as DateRangeValue)\n ? getRangeOptionLabel(value as DateRangeValue)\n : i18n.date(value, dateFormat))\n );\n case DataTypes.TYPE_TIMESTAMP:\n value = value as DateRangeValue | number;\n return (\n value &&\n (isDateRangeValue(value as DateRangeValue)\n ? getRangeOptionLabel(value as DateRangeValue)\n : i18n.date(isNaN(value as number) ? value : Number(value), dateTimeFormat))\n );\n case DataTypes.TYPE_FILE:\n return propOr(null, 'filename', value);\n case DataTypes.TYPE_SELECT: {\n const selectedOption = dataTypeDefinition.options.find(propEq('value', value));\n return propOr(null, 'label', selectedOption);\n }\n case DataTypes.TYPE_DOLLAR:\n value = value as number;\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 0\n }).format(value);\n default:\n return is(Object, value)\n ? getLookupLabel(propOr(null, 'lookupCode', value), propOr(null, 'value', value))\n : value;\n }\n }\n);\n\nexport {formatDataTypeValue, formatNumber, formatNumberAsMetric, getFileName};\n","import {Theme} from '@mui/material/styles';\nimport '@mui/styles';\n\nexport type ReltioTheme = Theme & {\n inactiveBackground: string;\n inactiveSelectedBackground: string;\n inactiveSelectedHoverBackground: string;\n inactiveHoverBackground: string;\n tooltip: Record<string, unknown>;\n inactive: Record<string, unknown>;\n basicView: Record<string, unknown>;\n suggested: string;\n};\n\ndeclare module '@mui/styles' {\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\n interface DefaultTheme extends ReltioTheme {}\n}\n\nexport const theme = {\n palette: {\n primary: {main: '#0072CE', light: '#0072CE', dark: '#0072CE'},\n secondary: {main: '#0072CE'},\n error: {main: '#FF1744'},\n success: {main: '#3B873E'},\n background: {\n paper: '#FFF',\n default: '#FAFAFA'\n },\n action: {\n hover: 'rgba(0,0,0,0.04)',\n hoverOpacity: 0.04\n },\n text: {\n primary: 'rgba(0,0,0,0.87)',\n secondary: 'rgba(0,0,0,0.54)',\n disabled: 'rgba(0,0,0,0.26)',\n hint: 'rgba(0,0,0,0.38)'\n },\n divider: 'rgba(0,0,0,0.38)'\n },\n components: {\n MuiButton: {\n defaultProps: {\n color: 'inherit' as const\n }\n },\n MuiTooltip: {\n defaultProps: {\n disableInteractive: true\n }\n },\n MuiTab: {\n styleOverrides: {\n root: {\n maxWidth: '264px'\n }\n }\n },\n MuiDialogTitle: {\n styleOverrides: {\n root: {\n '&&+.MuiDialogContent-root': {\n paddingTop: '13px'\n }\n }\n }\n },\n MuiFilledInput: {\n styleOverrides: {\n root: {\n lineHeight: '1.1876em',\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n },\n '&.focused': {\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n }\n },\n input: {\n '&.MuiSelect-select': {\n minHeight: '1.1876em'\n }\n }\n }\n },\n MuiTablePagination: {\n styleOverrides: {\n select: {\n '&.MuiInputBase-input': {\n minHeight: '1.1876em'\n }\n }\n }\n },\n MuiInputBase: {\n styleOverrides: {\n root: {\n '& .MuiInputAdornment-root': {\n color: 'rgba(0,0,0,0.87)'\n }\n },\n input: {\n '&::placeholder': {\n color: 'currentColor !important' // FF fix for QX overriding\n },\n '&::-ms-clear': {\n display: 'none'\n },\n '&.Mui-disabled': {\n WebkitTextFillColor: 'inherit'\n }\n }\n }\n },\n MuiMenuItem: {\n styleOverrides: {\n root: {\n '&.Mui-selected': {\n backgroundColor: 'rgba(0, 0, 0, 0.08)',\n '&.Mui-focusVisible': {backgroundColor: 'rgba(0, 0, 0, 0.08)'},\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.08)'\n }\n }\n }\n }\n }\n },\n breakpoints: {\n values: {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920\n }\n },\n transitions: {\n duration: {\n shortest: 150,\n shorter: 200,\n short: 250,\n standard: 300,\n complex: 375,\n enteringScreen: 225,\n leavingScreen: 195\n }\n },\n tooltip: {\n borderRadius: '4px',\n backgroundColor: 'rgba(0,0,0,0.54)'\n },\n inactiveBackground: 'repeating-linear-gradient(45deg, #f5f5f5, #f5f5f5 14px, #e9e9e9 15px, #e9e9e9 16px)',\n inactiveSelectedBackground: 'repeating-linear-gradient(45deg, #DBE9F4, #DBE9F4 14px, #CCDAE5 15px, #CCDAE5 16px)',\n inactiveSelectedHoverBackground:\n 'repeating-linear-gradient(45deg, #D4E2ED, #D4E2ED 14px, #C6D4DF 15px, #C6D4DF 16px)',\n inactiveHoverBackground: 'repeating-linear-gradient(45deg, #f2f2f2, #f2f2f2 14px, #e2e2e2 15px, #e2e2e2 16px)',\n inactive: {\n opacity: 0.7\n },\n basicView: {\n boxShadow: '0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2)',\n borderRadius: '3px',\n backgroundColor: '#FFFFFF'\n },\n suggested: 'rgb(237, 246, 251)'\n};\n","import {pipe} from 'ramda';\nimport {RequestHandler, RequestProviderConfiguration, ResponseHandler} from '../types';\nimport {getServiceName} from './api/utils';\nimport {STATUS_CODE_FIELD} from '../constants/network';\n\ntype Fetch = (url: string, options?: RequestInit) => Promise<Response>;\ntype RefreshToken = () => Promise<void>;\ntype ExtendedRequestInit = RequestInit & {\n timeout?: number;\n noRequestProcessor?: boolean;\n};\ntype ServicesTimeLog = {[key: string]: number[]};\ntype DisabledServicesMap = {[key: string]: boolean};\nconst withTimeout = (fetch: Fetch) => {\n return (url: string, extendedOptions: ExtendedRequestInit) => {\n const {timeout, ...options} = extendedOptions;\n if (AbortController && timeout) {\n const controller = new AbortController();\n const timerId = setTimeout(() => controller.abort(), timeout);\n return fetch(url, {\n ...options,\n signal: controller.signal\n }).finally(() => {\n clearTimeout(timerId);\n });\n } else {\n return fetch(url, options);\n }\n };\n};\n\nconst withDisablingUnauthorizedServices = (config: RequestProviderConfiguration) => {\n const disabledServicesMap: DisabledServicesMap = {};\n const servicesTimeLog: ServicesTimeLog = {};\n const DEFAULT_ATTEMPTS_THRESHOLD = 10;\n const DEFAULT_ATTEMPTS_TIME_WINDOW_SIZE = 5000;\n\n return (fetch: Fetch) => {\n const attemptsThreshold = config.attemptsThreshold ?? DEFAULT_ATTEMPTS_THRESHOLD;\n const attemptsTimeWindowSize = config.attemptsTimeWindowSize ?? DEFAULT_ATTEMPTS_TIME_WINDOW_SIZE;\n\n return (url: string, options: RequestInit) => {\n const urlId = getServiceName(url);\n const isDisabledService = disabledServicesMap[urlId];\n const rejectedRequest = () =>\n Promise.reject({errorMessage: `service ${urlId} was disabled (authorization issues)`});\n\n if (isDisabledService) {\n return rejectedRequest();\n }\n\n if (servicesTimeLog[urlId]) {\n const servicesTimeLogLength = servicesTimeLog[urlId].length;\n if (servicesTimeLogLength > attemptsThreshold) {\n const boundaryIndex = servicesTimeLogLength - attemptsThreshold - 1;\n const delta =\n servicesTimeLog[urlId][servicesTimeLogLength - 1] - servicesTimeLog[urlId][boundaryIndex];\n if (delta <= attemptsTimeWindowSize) {\n disabledServicesMap[urlId] = true;\n return rejectedRequest();\n } else {\n servicesTimeLog[urlId] = servicesTimeLog[urlId].slice(boundaryIndex);\n }\n }\n }\n\n return fetch(url, options).then((response) => {\n if (config.excludedServices && !config.excludedServices?.includes(urlId)) {\n if (response.status === 401) {\n if (!servicesTimeLog[urlId]) {\n servicesTimeLog[urlId] = [];\n }\n if (!isDisabledService) {\n servicesTimeLog[urlId].push(Date.now());\n }\n } else if (servicesTimeLog[urlId] && response.ok) {\n servicesTimeLog[urlId].length = 0;\n }\n }\n\n return response;\n });\n };\n };\n};\n\nconst withTokenRefresh = (refreshToken: RefreshToken) => {\n let refreshTokenRequest: Promise<void> | null = null;\n return (fetch: Fetch) => {\n return (url: string, options: RequestInit) => {\n const request = () => fetch(url, options);\n const requestAfterTokenRefresh = () => refreshTokenRequest?.then(request);\n return (\n requestAfterTokenRefresh() ||\n request().then((response) => {\n if (response.status === 401) {\n if (!refreshTokenRequest) {\n refreshTokenRequest = refreshToken().then(() => {\n refreshTokenRequest = null;\n });\n }\n return requestAfterTokenRefresh();\n } else {\n return response;\n }\n })\n );\n };\n };\n};\n\nconst withRetries = (fetch: Fetch) => {\n const getRetriesCount = (errorCode: number) => {\n switch (errorCode) {\n case 429:\n case 502:\n case 503:\n case 504:\n return 4;\n default:\n return 0;\n }\n };\n\n const retryDelay = (attempt: number) => {\n const minTimeout = 1000;\n const maxTimeout = 20 * 1000;\n const random = Math.random() + 1;\n return new Promise((resolve) => {\n const timeout = Math.min(Math.round(minTimeout * Math.exp(attempt) * random), maxTimeout);\n setTimeout(resolve, timeout);\n });\n };\n\n return (url: string, options: RequestInit) => {\n const request = (attempt = 0): Promise<Response> => {\n return fetch(url, options).then((response) => {\n const retriesCount = getRetriesCount(response.status);\n if (retriesCount > 0 && attempt < retriesCount) {\n return retryDelay(attempt).then(() => request(attempt + 1));\n } else {\n return response;\n }\n });\n };\n return request();\n };\n};\n\nconst withErrorParsing = (fetch: Fetch) => {\n return (url: string, options: RequestInit) => {\n return fetch(url, options).then((response) => {\n if (!response.ok) {\n const body = response.text();\n return body.then((message) => {\n let error;\n try {\n error = {\n ...JSON.parse(message),\n [STATUS_CODE_FIELD]: response.status\n };\n } catch (e) {\n error = {errorMessage: message, errorCode: response.status, originalResponse: response};\n }\n throw error;\n });\n } else {\n return response;\n }\n });\n };\n};\n\nconst createInterceptors = () => {\n const interceptors: {\n onRequest: RequestHandler[];\n onResponse: ResponseHandler[];\n } = {\n onRequest: [],\n onResponse: []\n };\n const addRequestInterceptor = (handler: RequestHandler) => {\n interceptors.onRequest.push(handler);\n };\n const addResponseInterceptor = (handler: ResponseHandler) => {\n interceptors.onResponse.push(handler);\n };\n const removeRequestInterceptor = (handler: RequestHandler) => {\n const index = interceptors.onRequest.indexOf(handler);\n interceptors.onRequest.splice(index, 1);\n };\n const removeResponseInterceptor = (handler: ResponseHandler) => {\n const index = interceptors.onResponse.indexOf(handler);\n interceptors.onResponse.splice(index, 1);\n };\n const onRequest = (ctx: {\n next: (url: string, options: RequestInit) => void;\n abort: (error: Error) => void;\n url: string;\n options: RequestInit;\n resolve: (data: unknown) => void;\n }) => {\n const {url, options, abort, resolve} = ctx;\n const next = interceptors.onRequest.reduce((next, onRequest) => {\n return (url, options) => onRequest({url, options, abort, next, resolve});\n }, ctx.next);\n next(url, options);\n };\n const onResponse = (ctx: {\n next: (response: unknown) => void;\n abort: (error: Error) => void;\n response: Response;\n url: string;\n options: RequestInit;\n }) => {\n const {response, abort, url, options} = ctx;\n const next = interceptors.onResponse.reduce((next: (response: unknown) => void, onResponse) => {\n return (response) =>\n response instanceof Response ? onResponse({response, abort, next, url, options}) : next(response);\n }, ctx.next);\n next(response);\n };\n\n return {\n onRequest,\n onResponse,\n addRequestInterceptor,\n addResponseInterceptor,\n removeRequestInterceptor,\n removeResponseInterceptor\n };\n};\n\nconst createDelayedRequest = (requestExecutor) => {\n let resolver;\n const delayedRequest = new Promise((resolve) => {\n resolver = () => {\n resolve(null);\n };\n }).then(() => requestExecutor());\n\n return {\n delayedRequest,\n resolver\n };\n};\n\nexport const createRequestProvider = (refreshToken: RefreshToken) => {\n const {\n onRequest,\n onResponse,\n addRequestInterceptor,\n addResponseInterceptor,\n removeRequestInterceptor,\n removeResponseInterceptor\n } = createInterceptors();\n const config: RequestProviderConfiguration = {};\n\n const wrapFetch = pipe(\n withTimeout,\n withDisablingUnauthorizedServices(config),\n withTokenRefresh(refreshToken),\n withRetries,\n withErrorParsing\n );\n\n const setRequestProviderConfiguration = (requestProviderConfiguration: RequestProviderConfiguration) => {\n Object.assign(config, requestProviderConfiguration);\n };\n\n let interceptorInitializationPending = 0;\n\n let delayedRequestResolvers = [];\n\n const request = (url: string, options?: ExtendedRequestInit): Promise<unknown> => {\n const safeFetch = wrapFetch(fetch);\n\n if (options?.noRequestProcessor) {\n return safeFetch(url, options);\n }\n\n const executeRequest = () => {\n const request = onResponse\n ? (url: string, options: RequestInit) => {\n return safeFetch(url, options).then((response) => {\n return new Promise((resolve, reject) => {\n onResponse({\n response,\n next: (response) => {\n resolve(response);\n },\n abort: reject,\n url,\n options\n });\n });\n });\n }\n : safeFetch;\n\n return onRequest\n ? new Promise((resolve, reject) => {\n onRequest({\n url,\n options,\n next: (url, options) => {\n resolve(request(url, options));\n },\n resolve: (data) => {\n resolve(data);\n },\n abort: reject\n });\n })\n : request(url, options);\n };\n\n if (!interceptorInitializationPending) {\n return executeRequest();\n } else {\n const {delayedRequest, resolver} = createDelayedRequest(executeRequest);\n delayedRequestResolvers.push(resolver);\n return delayedRequest;\n }\n };\n\n const runDelayedRequests = () => {\n delayedRequestResolvers.forEach((resolver) => resolver());\n delayedRequestResolvers = [];\n };\n\n const startInterceptorInit = () => {\n interceptorInitializationPending += 1;\n };\n\n const finishInterceptorInit = () => {\n interceptorInitializationPending = Math.max(interceptorInitializationPending - 1, 0);\n if (interceptorInitializationPending === 0) {\n runDelayedRequests();\n }\n };\n return {\n request,\n addRequestInterceptor,\n addResponseInterceptor,\n setRequestProviderConfiguration,\n startInterceptorInit,\n finishInterceptorInit,\n removeRequestInterceptor,\n removeResponseInterceptor\n };\n};\n","import {DraftMarks} from '../constants';\nimport {assocPath, complement, equals, isNil, lens, omit, pathOr, pipe, set, view} from 'ramda';\n\nconst METADATA_KEY = '__metadata';\n\nconst getMarkL = (fieldName) => {\n const path = [METADATA_KEY, fieldName];\n return lens(pathOr(null, path), assocPath(path));\n};\n\nconst draftMarkL = getMarkL('draft');\nconst setDraftMark = set(draftMarkL);\nconst getDraftMark = view(draftMarkL);\n\nconst markNew = setDraftMark(DraftMarks.NEW);\nconst markRemoved = setDraftMark(DraftMarks.REMOVED);\nconst markEdited = setDraftMark(DraftMarks.EDITED);\nconst markIgnored = setDraftMark(DraftMarks.IGNORED);\n\nconst checkRemoved = pipe(getDraftMark, equals(DraftMarks.REMOVED));\nconst checkNew = pipe(getDraftMark, equals(DraftMarks.NEW));\nconst checkEdited = pipe(getDraftMark, equals(DraftMarks.EDITED));\nconst checkDraftMarked = pipe(getDraftMark, complement(isNil));\nconst checkIgnored = pipe(getDraftMark, equals(DraftMarks.IGNORED));\n\nconst omitMarks = omit([METADATA_KEY]);\n\nconst marksJSONReplacer = (key, value) => (key === METADATA_KEY ? undefined : value);\n\nexport {\n omitMarks,\n marksJSONReplacer,\n markNew,\n markEdited,\n markRemoved,\n markIgnored,\n checkNew,\n checkEdited,\n checkRemoved,\n checkDraftMarked,\n checkIgnored\n};\n","import {path, pathEq, propEq, pipe, map, filter, curry, evolve} from 'ramda';\nimport {createRelationCreateCommand, createRelationRepointCommand, createRelationUpdateCommand} from '../relations';\nimport {Command, EditingConnection, Entity, NODE_EDITING_MODES, Relation, Tree, TreeNode} from '../types';\n\nconst getPathByCondition = (\n findCallback: (node: TreeNode) => boolean,\n node: TreeNode,\n pathList: TreeNode[] = []\n): TreeNode[] => {\n if (findCallback(node)) {\n return pathList.concat(node);\n }\n if (node && node.children) {\n for (const child of node.children) {\n const path = getPathByCondition(findCallback, child, pathList);\n if (path.length > 0) {\n return [node].concat(...path);\n }\n }\n }\n return [];\n};\n\nconst getPathById = (node: TreeNode, id: number) => getPathByCondition(propEq('nodeId', id), node);\n\nconst getPathByEntityUri = (node: TreeNode, uri: string) => getPathByCondition(pathEq(['entity', 'uri'], uri), node);\n\nconst findParentNodeById = (node: TreeNode, id: number) => {\n const path = getPathById(node, id);\n return path.length > 1 ? path[path.length - 2] : null;\n};\n\nconst findNodeById = (node: TreeNode, id: number) => {\n const path = getPathById(node, id);\n return path.length > 0 ? path[path.length - 1] : null;\n};\n\ntype MapTreeSecondArg = {\n parent?: TreeNode;\n childrenProcessing?: (args: TreeNode[]) => TreeNode[];\n nodeProcessing?: (node: TreeNode, parent: TreeNode) => TreeNode;\n};\n\nconst mapTree = (\n node: TreeNode,\n {parent, childrenProcessing = (i) => i, nodeProcessing = (i) => i}: MapTreeSecondArg\n) => {\n node = nodeProcessing(node, parent);\n if (node.children) {\n node.children = childrenProcessing(\n node.children.map((child) => mapTree(child, {parent: node, childrenProcessing, nodeProcessing}))\n );\n }\n return node;\n};\n\ntype WalkTreeSecondArg = {\n parent?: TreeNode;\n nodeProcessing?: (node: TreeNode, parent: TreeNode) => void;\n};\n\nconst noop = () => {};\n\nconst walkTree = (node: TreeNode, {parent, nodeProcessing = noop}: WalkTreeSecondArg) => {\n nodeProcessing(node, parent);\n\n if (node.children) {\n node.children.forEach((child) => walkTree(child, {parent: node, nodeProcessing}));\n }\n};\n\ntype GetPayloadForNodeApplyEditingArg = {\n node: TreeNode;\n connection: EditingConnection;\n isReversed: boolean;\n};\n\ntype PayloadForNodeApplyEditing = {\n relation?: Relation;\n parentEntityUri?: string;\n oldRelation?: Relation;\n newRelation?: Relation;\n entityUri?: string;\n newEntityUri?: string;\n};\n\nconst getPayloadForNodeApplyEditing = ({\n node,\n connection,\n isReversed\n}: GetPayloadForNodeApplyEditingArg): PayloadForNodeApplyEditing => {\n switch (node.editingMode) {\n case NODE_EDITING_MODES.addingParent: {\n return {\n entityUri: isReversed ? connection.entity?.uri : node.relatedEntity?.uri,\n relation: connection.relation,\n parentEntityUri: isReversed ? node.relatedEntity?.uri : connection.entity?.uri\n };\n }\n case NODE_EDITING_MODES.addingChild: {\n return {\n entityUri: isReversed ? node.relatedEntity?.uri : connection.entity?.uri,\n relation: connection.relation,\n parentEntityUri: isReversed ? connection.entity?.uri : node.relatedEntity?.uri\n };\n }\n case NODE_EDITING_MODES.editing: {\n const payload = {\n oldRelation: node.relation,\n newRelation: connection.relation,\n isReversed\n };\n const entityUri = connection.entity?.uri;\n const relatedEntityUri = node.relatedEntity?.uri;\n const additionalPayload =\n node.entity?.uri === connection.entity?.uri ? {} : {entityUri, newEntityUri: relatedEntityUri};\n return {...payload, ...additionalPayload};\n }\n }\n};\n\nconst getNotAppliedTreeCommands = (trees: Record<string, Tree> = {}) => {\n const commands: Command[] = [];\n\n Object.values(trees).forEach((tree) => {\n const treeRoot = tree.root;\n\n treeRoot &&\n walkTree(treeRoot, {\n nodeProcessing: (node) => {\n const connection = path(\n ['editingConnections', path(['relation', 'uri'], node)],\n tree\n ) as EditingConnection;\n const isReversed = Boolean(tree.isReversed);\n\n if (\n node.editingMode === NODE_EDITING_MODES.addingChild ||\n node.editingMode === NODE_EDITING_MODES.addingParent\n ) {\n const {\n entityUri,\n relation,\n parentEntityUri: parentUri\n } = getPayloadForNodeApplyEditing({\n node,\n connection,\n isReversed\n });\n\n const command = createRelationCreateCommand({parentUri, relation, entityUri});\n commands.push(command);\n }\n\n if (node.editingMode === NODE_EDITING_MODES.editing) {\n const {oldRelation, newRelation, entityUri, newEntityUri} = getPayloadForNodeApplyEditing({\n node,\n isReversed,\n connection\n });\n\n const command = newEntityUri\n ? createRelationRepointCommand({\n entityUri,\n newEntityUri,\n relation: newRelation,\n isReversed\n })\n : createRelationUpdateCommand({oldRelation, newRelation});\n\n commands.push(command);\n }\n }\n });\n });\n\n return commands;\n};\n\ntype UpdatedEntity = Pick<Entity, 'uri' | 'type' | 'label' | 'secondaryLabel'>;\n\nexport const hasEntityInTree = (node: TreeNode, uri: string) => {\n if (path(['entity', 'uri'], node) === uri) {\n return true;\n }\n if (node && node.children) {\n for (const child of node.children) {\n const result = hasEntityInTree(child, uri);\n if (result) {\n return result;\n }\n }\n }\n return false;\n};\n\nconst treeContainsEntity = (updatedEntity: UpdatedEntity, node: TreeNode) => hasEntityInTree(node, updatedEntity.uri);\n\nconst replaceEntityInTree = curry((updatedEntity: UpdatedEntity, node: TreeNode) => {\n const processChildren = map(replaceEntityInTree(updatedEntity));\n return evolve(\n {\n entity: (entity) => (entity.uri === updatedEntity.uri ? updatedEntity : entity),\n children: processChildren\n },\n node\n );\n});\n\nconst updateTreesWithNewEntity = (updatedEntity: UpdatedEntity, trees: {[key: string]: Tree}) => {\n const getIdsToUpdate = pipe(\n Object.entries,\n filter(([, tree]) => tree.root && treeContainsEntity(updatedEntity, tree.root))\n );\n const getReplacementTrees = map(([id, tree]) => ({\n id,\n root: replaceEntityInTree(updatedEntity, tree.root)\n }));\n\n return pipe(getIdsToUpdate, getReplacementTrees)(trees);\n};\n\nexport {\n findParentNodeById,\n findNodeById,\n getPathByEntityUri,\n mapTree,\n getNotAppliedTreeCommands,\n getPayloadForNodeApplyEditing,\n walkTree,\n updateTreesWithNewEntity\n};\n","import {__, always, defaultTo, identity, ifElse, includes, path, pipe, toLower} from 'ramda';\n\nimport {utils} from '..';\n\nexport const TREE_SORT_FIELD_VALUES = {\n relationTypeLabel: 'relationTypeLabel',\n entityLabel: 'entityLabel'\n};\n\nexport const TREE_SORT_ORDER_VALUES = {\n asc: 'asc',\n desc: 'desc'\n};\n\nexport const TREE_DEFAULT_SORT_FIELD = TREE_SORT_FIELD_VALUES.entityLabel;\nexport const TREE_DEFAULT_SORT_ORDER = TREE_SORT_ORDER_VALUES.asc;\n\nconst sortByLabel = (sortOrder) => (a, b) => {\n const getEntityLabel = path(['entity', 'label']);\n const labelA = getEntityLabel(a),\n labelB = getEntityLabel(b);\n return utils.strings.sort(sortOrder, labelA, labelB);\n};\n\nconst sortByRelationTypeLabel = (typesLabelsMap, sortOrder) => (a, b) => {\n const getType = path(['relation', 'type']);\n const labelA = typesLabelsMap[getType(a)],\n labelB = typesLabelsMap[getType(b)];\n return utils.strings.sort(sortOrder, labelA, labelB);\n};\n\nconst noSort = always(0);\n\nconst getSortFunction = ({sortField, sortOrder, typesLabelsMap}) => {\n switch (sortField) {\n case TREE_SORT_FIELD_VALUES.relationTypeLabel:\n return sortByRelationTypeLabel(typesLabelsMap, sortOrder);\n case TREE_SORT_FIELD_VALUES.entityLabel:\n return sortByLabel(sortOrder);\n default:\n return noSort;\n }\n};\n\nexport const sortTreeChildren = ({\n sortField = TREE_DEFAULT_SORT_FIELD,\n sortOrder = TREE_DEFAULT_SORT_ORDER,\n typesLabelsMap\n}) => (children) => children.slice().sort(getSortFunction({sortField, sortOrder, typesLabelsMap}));\n\nexport const getValidatedSortOrder = pipe(\n defaultTo(''),\n toLower,\n ifElse(includes(__, Object.values(TREE_SORT_ORDER_VALUES)), identity, always(TREE_DEFAULT_SORT_ORDER))\n);\n\nexport const getValidatedSortField = pipe(\n defaultTo(''),\n ifElse(includes(__, Object.values(TREE_SORT_FIELD_VALUES)), identity, always(TREE_DEFAULT_SORT_FIELD))\n);\n","import {pathOr} from 'ramda';\nimport Maps from '@google/maps';\nimport {Point} from '../types';\n\nlet client;\nexport const decodeAddress = (address: string, mapKey: string): Promise<Point[]> => {\n if (!client) {\n client = Maps.createClient({\n key: mapKey\n });\n }\n return new Promise((resolve) => {\n client.geocode({address: address}, (err, response) => {\n if (err) {\n console.warn(err);\n resolve(null);\n }\n const {results} = response.json;\n const position = pathOr(null, [0, 'geometry', 'location'], results);\n resolve(position ? position : null);\n });\n });\n};\n","import {identity, is, zipWith} from 'ramda';\nimport {isOv} from '../attributes/general';\nimport {AttributeValue, Entity, Point, PrimitiveValue, RecordAttributesType, ReferenceAttributeValue} from '../types';\n\nconst getAttributeValue = (attr: AttributeValue) => {\n let value = (attr as ReferenceAttributeValue).label || attr.value || '';\n if (Array.isArray(value)) {\n value = value.join(', ');\n } else if (is(Object, value)) {\n value = '';\n }\n return value as PrimitiveValue;\n};\n\nconst parseAttributeValues = (attributes: RecordAttributesType, attrTypeUri: string) =>\n Object.values(attributes)\n .filter(Array.isArray)\n .flat(Infinity)\n .filter(isOv)\n .flatMap((attribute) => {\n let result: PrimitiveValue[] | undefined;\n if (attribute.type == attrTypeUri) {\n result = [getAttributeValue(attribute)];\n }\n if (is(Object, attribute.value)) {\n result = (result || []).concat(parseAttributeValues(attribute.value, attrTypeUri));\n }\n return result;\n });\n\nexport const isSet = (variable: Array<unknown>) => variable && variable.length > 0;\n\nexport const getAttributeValuesByUri = (entityObj: Entity, attrTypeUri: string): PrimitiveValue[] =>\n []\n .concat(entityObj && entityObj.attributes ? parseAttributeValues(entityObj.attributes, attrTypeUri) : [])\n .filter(identity);\n\nexport const getPointFromAttributes = (lat: PrimitiveValue[], lon: PrimitiveValue[]): Point[] =>\n isSet(lat) && isSet(lon) && zipWith((lat, lon) => ({lat: Number(lat), lng: Number(lon)}), lat, lon);\n","import {flatten, identity} from 'ramda';\nimport {decodeAddress} from './googleGeocoder';\nimport {getAttributeValuesByUri, getPointFromAttributes, isSet} from './utils';\nimport {getEntityType} from '../metadata';\nimport {AttributeValue, Entity, GeoPoint, Metadata, RecordAttributesType, ReferenceAttributeValue} from '../types';\nimport {wrapInArrayIfNeeded} from '../utils';\n\nconst getGeoLocation = (\n entity: Entity,\n attributes: RecordAttributesType,\n metadata: Metadata,\n refAttribute: ReferenceAttributeValue,\n name: string,\n mapKey: string\n) => {\n if (entity && entity.type) {\n const entityType = getEntityType(metadata, entity.type);\n\n if (refAttribute) {\n entity = {...entity, attributes: {[name]: [refAttribute]}};\n }\n\n const results = (entityType.geoLocationAttributes || [])\n .map((item) => {\n const lat = getAttributeValuesByUri(entity, item.latitude);\n const lon = getAttributeValuesByUri(entity, item.longitude);\n return getPointFromAttributes(lat, lon);\n })\n .filter(identity);\n if (results.length > 0) {\n return Promise.resolve(results[0]);\n }\n }\n const geoLocation = attributes['GeoLocation'] as AttributeValue[];\n if (geoLocation) {\n const results = geoLocation\n .map((loc) => {\n const lat = loc.value['Latitude'],\n lon = loc.value['Longitude'];\n if (isSet(lat) && lat[0].value && isSet(lon) && lon[0].value) {\n return {id: loc.uri, lat: Number(lat[0].value), lng: Number(lon[0].value)};\n }\n })\n .filter(identity);\n if (results.length > 0) {\n return Promise.resolve(results);\n }\n }\n if (refAttribute && refAttribute.label) {\n return decodeAddress(refAttribute.label, mapKey).catch(() => null);\n }\n return Promise.resolve(null);\n};\n\nexport const resolve = (metadata: Metadata, json: Entity[] = [], mapKey: string): Promise<GeoPoint[]> => {\n const map = {};\n const data = flatten(\n json.map((entity) => {\n if (entity.type === 'configuration/entityTypes/Location') {\n return {id: entity.uri, label: entity.label, entity: entity, pointSource: entity.attributes};\n } else {\n map[entity.type] =\n map[entity.type] ||\n (getEntityType(metadata, entity.type)?.attributes || [])\n .filter(\n (attribute) => attribute.referencedEntityTypeURI === 'configuration/entityTypes/Location'\n )\n .map(({name}) => name);\n return map[entity.type]\n .map((attrName) => [attrName, entity.attributes[attrName]])\n .filter(([, value]) => value)\n .flatMap(([name, attributes]) =>\n attributes.map((attribute) => ({\n id: attribute.uri,\n label: attribute.label,\n entity: entity,\n pointSource: attribute.value,\n refAttribute: attribute,\n name\n }))\n );\n }\n })\n );\n return Promise.all(\n data.map(({id, label, entity, pointSource, refAttribute, name}) =>\n getGeoLocation(entity, pointSource, metadata, refAttribute, name, mapKey)\n .then((point) => {\n if (!point && entity.label && entity.label !== '') {\n return decodeAddress(entity.label, mapKey).catch(() => null);\n } else {\n return point;\n }\n })\n .then((point) =>\n wrapInArrayIfNeeded(point)\n .filter(identity)\n .map((point) => ({\n id: point.id || id,\n label,\n entity,\n point\n }))\n )\n .catch(() => null)\n )\n ).then((results) => results.flat(Infinity).filter(identity));\n};\n","import {chain, filter, identity, pipe, prop, uniqBy, zipWith} from 'ramda';\nimport {getAttributeValuesByUri} from './utils';\nimport {findAttributeTypeByUri, getEntityType} from '../metadata';\nimport {Entity, GeoPoint, Metadata} from '../types';\n\nexport const resolve = (metadata: Metadata, json: Entity[] = []): Promise<GeoPoint[]> => {\n return Promise.resolve(\n pipe(\n chain((entity) => {\n const entityType = getEntityType(metadata, entity.type);\n return (entityType?.geoLocationAttributes || []).flatMap((loc) => {\n if (\n findAttributeTypeByUri(metadata, loc.latitude, entity.type) &&\n findAttributeTypeByUri(metadata, loc.longitude, entity.type)\n ) {\n const lat = getAttributeValuesByUri(entity, loc.latitude);\n const lng = getAttributeValuesByUri(entity, loc.longitude);\n const toPoint = (x, y) => ({\n id: `${entity.uri}_nested_${x}_${y}`,\n entity: entity,\n label: entity.label,\n point: {\n lat: Number(x),\n lng: Number(y)\n }\n });\n return zipWith(toPoint, lat, lng);\n }\n });\n }),\n filter(identity),\n uniqBy(prop('id'))\n )(json)\n );\n};\n","import {resolve as refStrategy} from './fromReferenceStrategy';\nimport {resolve as nestedStrategy} from './fromNestedStrategy';\nimport {Entity, GeoPoint, Metadata} from '../types';\n\nexport const resolve = (md: Metadata, json: Entity[], mapKey: string): Promise<GeoPoint[]> =>\n Promise.all([nestedStrategy(md, json), refStrategy(md, json, mapKey)]).then((results) => {\n const [nestedRes, refRes] = results;\n return [\n ...nestedRes,\n ...refRes.filter(\n (refPoint) =>\n nestedRes.length === 0 ||\n !nestedRes.some(\n (nestPoint) =>\n nestPoint.entity === refPoint.entity &&\n nestPoint.point.lat === refPoint.point.lat &&\n nestPoint.point.lng === refPoint.point.lng\n )\n )\n ];\n });\n","import {findAttributeTypeByUri, getMatchRuleLabel, isBooleanType} from '../metadata';\nimport {allPass, always, cond, defaultTo, either, map, path, pipe, prop, propEq, propOr, reduce, T} from 'ramda';\nimport {getSpecialAttrTypeByFieldName} from '../attributes';\nimport {searchUriToAttrUri} from '../uris';\nimport {getLookupLabel} from '../lookups';\nimport {isEmptyValue, parseBoolean} from '../utils';\nimport {FilterOptions, SpecialAttrTypes} from '../constants';\n\nconst getMatchGroupLabelsForFacet = (metadata, facet) => {\n return facet.values.map(getMatchRuleLabel(metadata, facet.entityTypeUri));\n};\n\nconst getAttrTypeForFacet = (metadata, facet, dataTenants) =>\n getSpecialAttrTypeByFieldName(facet.fieldName, dataTenants) ||\n findAttributeTypeByUri(\n metadata,\n searchUriToAttrUri(facet.fieldName, propOr('', 'entityTypeUri', facet)),\n propOr('', 'entityTypeUri', facet)\n );\n\nconst getResolvedLookupsForFacet = (lookupsTree, facet) => {\n const values = propOr([], 'values', facet);\n const resolvedLookupCodes = path([facet.attrType.lookupCode], lookupsTree);\n return map((value) => {\n const displayName = prop(value, resolvedLookupCodes);\n return displayName ? getLookupLabel(value, displayName) : value;\n }, values);\n};\n\nconst getFacetTitle = path(['attrType', 'label']);\n\nconst getLookupCodesFromFacets = reduce((acc, facet) => {\n const lookupCode = path(['attrType', 'lookupCode'], facet);\n if (lookupCode) {\n const valuesObject = facet.values.reduce(\n (values, value) => ({\n ...values,\n [value]: true\n }),\n {}\n );\n acc[lookupCode] = acc[lookupCode] ? {...acc[lookupCode], ...valuesObject} : valuesObject;\n }\n return acc;\n}, {});\n\nconst isEmptyFacet = pipe(prop('values'), isEmptyValue);\nconst isTypeFacet = pipe(defaultTo({}), propEq('fieldName', SpecialAttrTypes.type.name));\nconst isNumericRangeFacet = (facet) => facet.type === FACET_TYPES.NUMERIC_RANGE_FACET;\nconst isDateRangeFacet = (facet) => facet.type === FACET_TYPES.DATE_RANGE_FACET;\nconst isRangeFacet = either(isNumericRangeFacet, isDateRangeFacet);\n\nconst FACET_TYPES = {\n NUMERIC_RANGE_FACET: 'numericRangeFacet',\n DATE_RANGE_FACET: 'dateRangeFacet',\n WITH_DROPDOWN_CHECKBOXES_FACET: 'facetWithDropdownCheckboxes',\n COMPLEX_FACET: 'complexFacet',\n ENTITY_TYPE_FACET: 'entityTypeFacet'\n};\n\nconst getFacetTypeByAttrType = (attrType) => {\n switch (attrType) {\n case 'Image':\n case 'Nested':\n case 'Reference':\n return FACET_TYPES.COMPLEX_FACET;\n case 'Int':\n case 'Float':\n case 'Double':\n case 'Long':\n case 'Number':\n case 'Count':\n return FACET_TYPES.NUMERIC_RANGE_FACET;\n case 'Date':\n case 'Timestamp':\n case 'ActivenessDate':\n return FACET_TYPES.DATE_RANGE_FACET;\n case 'String':\n case 'Boolean':\n default:\n return FACET_TYPES.WITH_DROPDOWN_CHECKBOXES_FACET;\n }\n};\n\nconst getFacetTypeForAttrType = (attrType) => {\n switch (attrType?.name) {\n case SpecialAttrTypes.type.name:\n return FACET_TYPES.ENTITY_TYPE_FACET;\n case SpecialAttrTypes.createdBy.name:\n case SpecialAttrTypes.updatedBy.name:\n case SpecialAttrTypes.sourceSystems.name:\n case SpecialAttrTypes.tags.name:\n case SpecialAttrTypes.roles.name:\n case SpecialAttrTypes.matchRules.name:\n case SpecialAttrTypes.MLRecommendedMatch.name:\n return FACET_TYPES.WITH_DROPDOWN_CHECKBOXES_FACET;\n case SpecialAttrTypes.createdTime.name:\n case SpecialAttrTypes.updatedTime.name:\n case SpecialAttrTypes.startDate.name:\n case SpecialAttrTypes.endDate.name:\n return FACET_TYPES.DATE_RANGE_FACET;\n case SpecialAttrTypes.matches.name:\n case SpecialAttrTypes.matchScore.name:\n return FACET_TYPES.NUMERIC_RANGE_FACET;\n default:\n return getFacetTypeByAttrType(attrType?.type);\n }\n};\n\nconst getTypeForFacet = pipe(getAttrTypeForFacet, getFacetTypeForAttrType);\n\nconst isBooleanFacet = pipe(path(['attrType', 'type']), isBooleanType);\n\nconst getFilterOptionForFacet = cond([\n [isNumericRangeFacet, always(FilterOptions.IN_RANGE)],\n [isDateRangeFacet, always(FilterOptions.WITHIN)],\n [allPass([isBooleanFacet, (facet) => facet.values.length >= 2]), always(FilterOptions.EXISTS)],\n [T, always(FilterOptions.EQUALS)]\n]);\n\nconst getFilterValueForFacet = cond([\n [isDateRangeFacet, prop('values')],\n [isNumericRangeFacet, prop('values')],\n [isBooleanFacet, (facet) => (facet.values.length === 1 ? facet.values.map(parseBoolean) : [])],\n [pipe(path(['values', 0]), Array.isArray), prop('values')],\n [T, (facet) => [facet.values]]\n]);\n\nexport {\n getMatchGroupLabelsForFacet,\n getAttrTypeForFacet,\n getResolvedLookupsForFacet,\n getFacetTitle,\n getLookupCodesFromFacets,\n isEmptyFacet,\n isTypeFacet,\n getTypeForFacet,\n getFacetTypeForAttrType,\n FACET_TYPES,\n getFilterOptionForFacet,\n getFilterValueForFacet,\n isBooleanFacet,\n isDateRangeFacet,\n isNumericRangeFacet,\n isRangeFacet\n};\n","import {AllDateRangeValues} from '../constants';\nimport {getDateRangeByValue} from '../filters';\nimport {omit, pipe, values} from 'ramda';\n\nconst DateRanges = pipe(omit(['PICK_DATE']), values)(AllDateRangeValues);\n\nconst resolveDateRangePlaceholders = (query) =>\n DateRanges.reduce((resultQuery, dateRange) => {\n const dateRangeRegExp = new RegExp(\n `'{0,1}${encodeURIComponent('${')}${dateRange}${encodeURIComponent('}')}'{0,1}`,\n 'g'\n );\n const nowTimeRegExp = new RegExp(`'{0,1}${encodeURIComponent('${')}now${encodeURIComponent('}')}'{0,1}`, 'g');\n const [dateRangeValue, nowValue] = getDateRangeByValue(dateRange);\n return resultQuery.replace(dateRangeRegExp, dateRangeValue).replace(nowTimeRegExp, nowValue);\n }, query);\n\nexport const replacePlaceholdersInQuery = (query) => {\n return resolveDateRangePlaceholders(query);\n};\n","import {curry} from 'ramda';\n\nexport const getSearchLink = curry((uiPath: string, stateHash: string) => {\n const urlObject = new URL(uiPath);\n const [, uiPrefix] = urlObject.pathname.split('/');\n return uiPrefix === 'nui'\n ? `${uiPath}search?state=${stateHash}`\n : `${uiPath}#p~com.reltio.plugins.search.SearchPerspective_s~${stateHash}`;\n});\n","import i18n from 'ui-i18n';\n\nexport const MAP_SEARCH_TYPES = {\n geoPolygon: 'geoPolygon',\n geoLocation: 'geoLocation',\n onMapMove: 'onMapMove'\n};\n\nconst isPolygonLikeMapSearch = (searchType) =>\n [MAP_SEARCH_TYPES.geoPolygon, MAP_SEARCH_TYPES.onMapMove].includes(searchType);\nconst formatPolygonSegment = ([lat, lng]) => `(${+lat.toFixed(6)}, ${+lng.toFixed(6)})`;\nconst formatCircle = ([lat, lng, radius]) => `(${+lat.toFixed(6)}, ${+lng.toFixed(6)}) ${+radius.toFixed(1)}`;\n\nexport const getMapSearchValues = (searchType, values) =>\n isPolygonLikeMapSearch(searchType) ? values.map(formatPolygonSegment) : [formatCircle(values)];\n\nexport const getMapSearchLabel = (searchType) =>\n isPolygonLikeMapSearch(searchType) ? i18n.text('Geo Polygon') : i18n.text('Geo Location');\n\nexport const mapSearchTypeToFieldName = (searchType) => {\n switch (searchType) {\n case MAP_SEARCH_TYPES.geoLocation:\n return 'geoLocation';\n case MAP_SEARCH_TYPES.geoPolygon:\n case MAP_SEARCH_TYPES.onMapMove:\n return 'geoPolygon';\n }\n};\n","import i18n from 'ui-i18n';\nimport FilterOptions, {AdditionalFilterOptionsValues} from '../../constants/filterOptions';\nimport {ReadableQueryPrimitive} from '../../types';\n\nexport const READABLE_QUERY_PRIMITIVE_TYPES = {\n operator: 'operator',\n attributeLabel: 'attributeLabel',\n specialAttributeLabel: 'specialAttributeLabel',\n attributeFilter: 'attributeFilter',\n attributeValue: 'attributeValue',\n entityTypeLabel: 'entityTypeLabel',\n space: 'space',\n bracket: 'bracket',\n punctuationMark: 'punctuationMark'\n};\n\nconst getDisplayedOperator = (operator: string): string => i18n.text(operator);\n\nconst getDisplayedFilter = (filter = ''): string =>\n ({\n [FilterOptions.EQUALS]: '=',\n [FilterOptions.NOT_EQUALS]: '≠',\n [FilterOptions.STARTS_WITH]: '*',\n [FilterOptions.MISSING_VALUE]: i18n.text('missing value'),\n [FilterOptions.HAS_ALL]: i18n.text('has all'),\n [FilterOptions.IN_RANGE]: i18n.text('in range'),\n [FilterOptions.FULL_TEXT]: i18n.text('full text'),\n [FilterOptions.EXISTS]: i18n.text('exists'),\n [FilterOptions.COUNT_EQUALS]: `${i18n.text('count')} =`,\n [FilterOptions.COUNT_NOT_EQUALS]: `${i18n.text('count')} ≠`,\n [FilterOptions.COUNT_LT]: `${i18n.text('count')} <`,\n [FilterOptions.COUNT_LTE]: `${i18n.text('count')} <=`,\n [FilterOptions.COUNT_GT]: `${i18n.text('count')} >`,\n [FilterOptions.COUNT_RANGE]: i18n.text('count range'),\n [FilterOptions.LT]: '<',\n [FilterOptions.LTE]: '<=',\n [FilterOptions.GT]: '>',\n [FilterOptions.GTE]: '>=',\n [FilterOptions.IN_FILE]: i18n.text('in file'),\n [FilterOptions.NOT_IN_FILE]: i18n.text('not in file'),\n [FilterOptions.CONTAINS]: '~',\n [AdditionalFilterOptionsValues.LIST_EQUALS]: '=',\n [AdditionalFilterOptionsValues.NOT_LIST_EQUALS]: '≠',\n [AdditionalFilterOptionsValues.LIST_EQUALS_CASE_SENSITIVE]: '=',\n [AdditionalFilterOptionsValues.NOT_LIST_EQUALS_CASE_SENSITIVE]: '≠'\n }[filter] || i18n.text(filter.toLowerCase()));\n\ntype PrimitiveBuilder = (text?: string) => ReadableQueryPrimitive;\nexport const buildOperator: PrimitiveBuilder = (operator) => ({\n type: READABLE_QUERY_PRIMITIVE_TYPES.operator,\n text: operator\n});\n\nexport const buildLocalizedOperator: PrimitiveBuilder = (operator) => ({\n type: READABLE_QUERY_PRIMITIVE_TYPES.operator,\n text: getDisplayedOperator(operator)\n});\n\nexport const buildAttributeLabel: PrimitiveBuilder = (label) => ({\n type: READABLE_QUERY_PRIMITIVE_TYPES.attributeLabel,\n text: label\n});\n\nexport const buildSpecialAttributeLabel: PrimitiveBuilder = (label) => ({\n type: READABLE_QUERY_PRIMITIVE_TYPES.specialAttributeLabel,\n text: label\n});\n\nexport const buildAttributeFilter: PrimitiveBuilder = (filter) => ({\n type: READABLE_QUERY_PRIMITIVE_TYPES.attributeFilter,\n text: getDisplayedFilter(filter)\n});\n\nexport const buildAttributeValue: PrimitiveBuilder = (value) => ({\n type: READABLE_QUERY_PRIMITIVE_TYPES.attributeValue,\n text: value\n});\n\nexport const buildEntityTypeLabel: PrimitiveBuilder = (label) => ({\n type: READABLE_QUERY_PRIMITIVE_TYPES.entityTypeLabel,\n text: label\n});\n\nexport const buildSpace: PrimitiveBuilder = () => ({\n type: READABLE_QUERY_PRIMITIVE_TYPES.space,\n text: ' '\n});\n\nexport const buildSpacedDash: PrimitiveBuilder = () => ({\n type: READABLE_QUERY_PRIMITIVE_TYPES.punctuationMark,\n text: ' — '\n});\n\nexport const buildSpacedComma: PrimitiveBuilder = () => ({\n type: READABLE_QUERY_PRIMITIVE_TYPES.punctuationMark,\n text: ', '\n});\n\nexport const buildOpenBracket: PrimitiveBuilder = () => ({\n type: READABLE_QUERY_PRIMITIVE_TYPES.bracket,\n text: '('\n});\n\nexport const buildCloseBracket: PrimitiveBuilder = () => ({\n type: READABLE_QUERY_PRIMITIVE_TYPES.bracket,\n text: ')'\n});\n","import {curry} from 'ramda';\n\nimport {buildCloseBracket, buildEntityTypeLabel, buildOpenBracket, buildSpace} from './primitives';\nimport {ReadableQueryPrimitive} from '../../types';\n\nconst isLastElement = <T>(index: number, array: T[]) => index === array.length - 1;\n\nconst addToNotLastElement: <WhatAdd, Elem>(\n whatAdd: WhatAdd\n) => (elem: Elem, index: number, array: Elem[]) => (WhatAdd | Elem)[] | Elem = curry((whatAdd, elem, index, array) =>\n !isLastElement(index, array) ? [elem, whatAdd] : elem\n);\nexport const joinWith: <Joiner, Item>(joiner: Joiner) => (items: Item[]) => (Joiner | Item)[] = curry((joiner, items) =>\n items.map(addToNotLastElement(joiner))\n);\n\nexport const wrapWith: <Prefix, Postfix, Item>(\n prefix: Prefix | ReadableQueryPrimitive,\n postfix: Postfix | ReadableQueryPrimitive\n) => (items?: Item[]) => (Prefix | Postfix | Item)[] = curry((prefix, postfix, items) => [prefix, ...items, postfix]);\nexport const wrapWithBrackets: <T>(arg: (T | ReadableQueryPrimitive)[]) => (T | ReadableQueryPrimitive)[] = wrapWith(\n buildOpenBracket(),\n buildCloseBracket()\n);\nexport const wrapWithSpaces: <T>(arg: (T | ReadableQueryPrimitive)[]) => (T | ReadableQueryPrimitive)[] = wrapWith(\n buildSpace(),\n buildSpace()\n);\n\nexport const prependWith: <Prefix, Item>(prefix: Prefix) => (items: Item[]) => (Prefix | Item)[] = curry(\n (prefix, items) => [prefix, ...items]\n);\nexport const prependWithEntityTypeLabel: <T>(title: string) => (items: T[]) => (T | ReadableQueryPrimitive)[] = (\n title\n) => prependWith(buildEntityTypeLabel(title));\nexport const prependWithEntityTypeLabelWithColon: <T>(\n title: string\n) => (items: T[]) => (T | ReadableQueryPrimitive)[] = (title) => prependWith(buildEntityTypeLabel(`${title}: `));\n","import {has, join, map, pipe, prop, when} from 'ramda';\nimport {wrapWithSpaces} from './builderHelpers';\nimport {buildCloseBracket, buildLocalizedOperator, buildOpenBracket, buildOperator} from './primitives';\nimport {hasOrInOperations, isAndOperator, isOrOperator} from '../operators';\nimport {ReadableQueryPrimitive, SearchOperator} from '../../types';\n\nexport const buildOperations = ({localizable = true} = {}) => <Operand>(\n operations: {operand: Operand; operator: SearchOperator}[]\n) => {\n let isBracketsOpen = false;\n const hasOr = hasOrInOperations(operations);\n const result: (Operand | ReadableQueryPrimitive)[] = [];\n for (let i = 0; i < operations.length; i++) {\n const {operand, operator} = operations[i];\n if (i !== operations.length - 1) {\n const isOperatorAnd = isAndOperator(operator);\n const isOperatorOr = isOrOperator(operator);\n if (!isBracketsOpen && isOperatorAnd && hasOr) {\n result.push(buildOpenBracket());\n isBracketsOpen = true;\n }\n result.push(operand);\n if (isBracketsOpen && isOperatorOr) {\n result.push(buildCloseBracket());\n isBracketsOpen = false;\n }\n const builtOperator = localizable ? buildLocalizedOperator(operator) : buildOperator(operator);\n result.push(...wrapWithSpaces([builtOperator]));\n } else {\n result.push(operand);\n if (isBracketsOpen) {\n result.push(buildCloseBracket());\n isBracketsOpen = false;\n }\n }\n }\n return result;\n};\n\nconst toString: (primitives: (ReadableQueryPrimitive | string)[]) => string = pipe(\n map(when(has('text'), prop('text'))),\n join('')\n);\n\nexport const buildOperationsToString: <Operand>(arg: {operand: Operand; operator: SearchOperator}[]) => string = pipe(\n buildOperations({localizable: false}),\n toString\n);\n","import {\n all,\n any,\n anyPass,\n chain,\n curry,\n evolve,\n filter,\n flatten,\n isEmpty,\n isNil,\n lt,\n map,\n path,\n pathEq,\n pipe,\n prop,\n propOr,\n props\n} from 'ramda';\nimport FilterOptions from '../constants/filterOptions';\nimport {\n findClosestCommonAncestor,\n getAttrTypeLookupCode,\n getEntityType,\n isAvailableEntityTypeUri,\n isLookupAttrType\n} from '../metadata';\nimport {validateFilter} from '../filters';\nimport {getUnresolvedLookupsList, mergeLookupsLists} from '../lookups';\nimport {SpecialAttrTypes} from '../constants';\n\nconst SUB_ATTRIBUTES_JOINER = ' / ';\n\nexport const getSearchGroupAttributeLabel = ({data: {title, pathToTitle}}, showPath = true) =>\n pathToTitle && showPath ? pathToTitle.slice(1).join(SUB_ATTRIBUTES_JOINER) : title;\n\nexport const isValidSearchGroupAttribute = ({data, values, filter}) =>\n data && validateFilter({filter, fieldName: prop('fieldName', data), values});\n\nexport const isValidSearchGroup = anyPass([\n pipe(prop('attributes'), any(isValidSearchGroupAttribute)),\n pipe(path(['entityTypes', 'length']), lt(0))\n]);\n\nconst isLookupAttribute = (attribute) => attribute.data?.attrType && isLookupAttrType(attribute.data.attrType);\n\nconst isAttributeWithLookupValues = (attribute) =>\n isLookupAttribute(attribute) &&\n [FilterOptions.HAS_ALL, FilterOptions.EQUALS, FilterOptions.NOT_EQUALS].includes(attribute.filter);\n\nexport const getLookupsListFromSearchGroups = pipe(\n chain(\n pipe(\n propOr([], 'attributes'),\n filter(isAttributeWithLookupValues),\n map((attribute) => ({\n type: getAttrTypeLookupCode(path(['data', 'attrType'], attribute)),\n codeValues: flatten(propOr([], 'values', attribute))\n })),\n filter(({codeValues}) => codeValues.length > 0)\n )\n ),\n mergeLookupsLists\n);\n\nexport const getUnresolvedLookupsListFromSearchGroups = (groups, resolvedLookups) =>\n pipe(getLookupsListFromSearchGroups, getUnresolvedLookupsList(resolvedLookups))(groups);\n\nexport const isTypeSearchGroupAttribute = pathEq(['data', 'fieldName'], SpecialAttrTypes.type.name);\n\nexport const getSearchGroupAttributeEntityTypeUri = path(['data', 'entityTypeUri']);\n\nexport const isEmptySearchGroup = pipe(props(['entityTypes', 'attributes']), all(isEmpty));\n\nexport const sanitizeTypesInSearchGroups = curry((metadata, groups) => {\n return groups.map((group) =>\n evolve({\n entityTypes: filter(isAvailableEntityTypeUri(metadata)),\n attributes: filter(\n pipe(\n getSearchGroupAttributeEntityTypeUri,\n anyPass([\n isNil,\n isAvailableEntityTypeUri(metadata),\n (entityTypeUri) => {\n const selectedAvailableEntityTypeUris = (group.entityTypes || []).filter(\n isAvailableEntityTypeUri(metadata)\n );\n const commonAncestorEntityTypeUri =\n selectedAvailableEntityTypeUris.length > 1\n ? findClosestCommonAncestor(metadata, selectedAvailableEntityTypeUris)\n : null;\n return (\n commonAncestorEntityTypeUri === entityTypeUri &&\n !!getEntityType(metadata, entityTypeUri)\n );\n }\n ])\n )\n )\n })(group)\n );\n});\n","import {equals, flatten, length, pipe, prop} from 'ramda';\nimport {getFilterOptionArity} from '../../filters';\n\nexport const isFilterOptionArity = (arity: number): boolean =>\n pipe(prop('filter'), getFilterOptionArity, equals(arity));\n\nexport const isValuesQuantity = (quantity: number): boolean => pipe(prop('values'), flatten, length, equals(quantity));\n","import {always, both, cond, curry, flatten, is, map, pipe, T, unless} from 'ramda';\nimport {\n buildAttributeFilter,\n buildAttributeLabel,\n buildAttributeValue,\n buildSpace,\n buildSpacedComma,\n buildSpacedDash,\n buildSpecialAttributeLabel\n} from './primitives';\nimport {\n getSpecialAttrTypeByFieldName,\n isMatchRuleAttrType,\n isRoleAttrType,\n isSourceSystemAttrType\n} from '../../attributes';\nimport {getSearchGroupAttributeLabel} from '../groups';\nimport {getDataTypeDefinitionForFilterValue, wrapInDoubleQuotes} from '../../filters';\nimport {formatDataTypeValue} from '../../formatting';\nimport {\n getAttrTypeLookupCode,\n getMatchRuleLabel,\n getRoleLabel,\n getSourceSystemLabel,\n isBooleanType,\n isLookupAttrType,\n isNumericType\n} from '../../metadata';\nimport {getLookupLabel, getResolvedLookupLabel} from '../../lookups';\nimport {isFilterOptionArity, isValuesQuantity} from './attributeHelpers';\nimport {joinWith} from './builderHelpers';\nimport {\n AdvancedSearchAttribute,\n AdvancedSearchAttributeData,\n AttributePresentations,\n Lookups,\n Metadata,\n ReadableQueryPrimitive\n} from '../../types';\n\nconst buildValue: (\n metadata: Metadata,\n attributePresentations: AttributePresentations,\n lookups: Lookups,\n attrData: AdvancedSearchAttributeData,\n filter: string\n) => (value: unknown) => ReadableQueryPrimitive = curry(\n (metadata, attributePresentations, lookups, attrData, filter, value) => {\n const attrType = getSpecialAttrTypeByFieldName(attrData.fieldName) || attrData.attrType;\n const dataType = getDataTypeDefinitionForFilterValue(attrType, filter);\n const formatFilterValue = formatDataTypeValue({attributePresentations, dataTypeDefinition: dataType});\n const {type} = dataType;\n return pipe(\n cond([\n [\n () => isLookupAttrType(dataType),\n () =>\n is(Object, value) && value.lookupCode\n ? getLookupLabel(value.lookupCode, value.value)\n : getResolvedLookupLabel(lookups, getAttrTypeLookupCode(attrType), value)\n ],\n [() => isMatchRuleAttrType(dataType), () => getMatchRuleLabel(metadata, attrData.entityTypeUri, value)],\n [() => isSourceSystemAttrType(dataType), () => getSourceSystemLabel(metadata, value)],\n [() => isRoleAttrType(dataType), () => getRoleLabel(metadata, value)],\n [() => attrData.fieldName === 'referenced_entity_id', () => value.entityLabel], //TODO: refactor\n [T, () => formatFilterValue(value)]\n ]),\n unless(() => isNumericType(type) || isBooleanType(type), wrapInDoubleQuotes),\n buildAttributeValue\n )();\n }\n);\n\nconst buildValues = (\n metadata: Metadata,\n attributePresentations: AttributePresentations,\n lookups: Lookups,\n attribute: AdvancedSearchAttribute\n): ReadableQueryPrimitive[] => {\n const buildAttrValue = buildValue(metadata, attributePresentations, lookups, attribute.data, attribute.filter);\n return cond([\n [isFilterOptionArity(0), always([])],\n [\n both(isFilterOptionArity(2), isValuesQuantity(2)),\n ({values}) => {\n const [rangeStart, rangeEnd] = flatten(values);\n return [buildSpace(), buildAttrValue(rangeStart), buildSpacedDash(), buildAttrValue(rangeEnd)];\n }\n ],\n [T, ({values}) => [buildSpace(), ...pipe(flatten, map(buildAttrValue), joinWith(buildSpacedComma()))(values)]]\n ])(attribute);\n};\n\nconst buildLabel = (attribute: AdvancedSearchAttribute, showPath: boolean): ReadableQueryPrimitive => {\n const isSpecial = !!getSpecialAttrTypeByFieldName(attribute.data.fieldName);\n return pipe(getSearchGroupAttributeLabel, isSpecial ? buildSpecialAttributeLabel : buildAttributeLabel)(\n attribute,\n showPath\n );\n};\n\nexport const buildAttribute = (\n metadata: Metadata,\n attributePresentations: AttributePresentations,\n lookups: Lookups,\n attribute: AdvancedSearchAttribute,\n showTitlePath: boolean\n): ReadableQueryPrimitive[] => {\n return [\n buildLabel(attribute, showTitlePath),\n buildSpace(),\n buildAttributeFilter(attribute.filter),\n ...buildValues(metadata, attributePresentations, lookups, attribute)\n ];\n};\n","import {\n addIndex,\n complement,\n filter,\n flatten,\n identity,\n ifElse,\n isEmpty,\n join,\n lt,\n map,\n pipe,\n prop,\n propEq,\n propSatisfies,\n reject,\n unless,\n when\n} from 'ramda';\nimport i18n from 'ui-i18n';\nimport FilterOptions from '../../constants/filterOptions';\nimport {getEntityTypeLabel} from '../../entity';\n\nimport {buildAttributeFilter, buildAttributeValue, buildSpace, buildSpecialAttributeLabel} from './primitives';\nimport {\n prependWithEntityTypeLabel,\n prependWithEntityTypeLabelWithColon,\n wrapWithBrackets,\n wrapWithSpaces\n} from './builderHelpers';\nimport {buildOperations} from './operationsBuilder';\nimport {isValidSearchGroup, isValidSearchGroupAttribute} from '../groups';\nimport {getMapSearchLabel, getMapSearchValues} from '../map';\nimport {buildAttribute} from './readableAttribute';\nimport {\n AdvancedSearchAttribute,\n AdvancedSearchAttributesGroup,\n AttributePresentations,\n Entity,\n Flatten,\n Keyword,\n Lookups,\n MapSearchData,\n Metadata,\n ReadableQueryPrimitive\n} from '../../types';\nimport {shiftDownOperators, shiftUpOperators} from '../operators';\n\nconst mapIndexed = addIndex(map);\nconst isSingle = propEq('length', 1);\nconst isMultiple = propSatisfies(lt(1), 'length');\nconst isNotEmpty = complement(isEmpty);\ntype AttributeBuilder = (\n metadata: Metadata,\n attributePresentations: AttributePresentations,\n lookups: Lookups,\n attributes: AdvancedSearchAttribute[],\n showTitlePath?: boolean\n) => ReadableQueryPrimitive[];\n\nconst buildAttributeOperations: AttributeBuilder = (\n metadata,\n attributePresentations,\n lookups,\n attributes,\n showTitlePath = true\n) => {\n return pipe(\n shiftDownOperators,\n filter(isValidSearchGroupAttribute),\n shiftUpOperators,\n map((attribute) => ({\n operand: buildAttribute(metadata, attributePresentations, lookups, attribute, showTitlePath),\n operator: attribute.operator\n })),\n unless(isEmpty, buildOperations())\n )(attributes);\n};\n\nexport const buildAttributesReadableQuery: AttributeBuilder = pipe(buildAttributeOperations, flatten);\n\nconst buildGroup = (\n metadata: Metadata,\n attributePresentations: AttributePresentations,\n lookups: Lookups,\n {attributes, entityTypes = []}: AdvancedSearchAttributesGroup,\n isSingleGroup: boolean\n): ReadableQueryPrimitive[] => {\n const addGroupTitle = (addTitleFn) => {\n const groupTitle = entityTypes\n .map((entityTypeUri) => getEntityTypeLabel(metadata, {type: entityTypeUri} as Entity))\n .join(', ');\n return groupTitle ? addTitleFn(groupTitle) : identity;\n };\n const operations = buildAttributeOperations(metadata, attributePresentations, lookups, attributes);\n return ifElse(\n isEmpty,\n addGroupTitle(prependWithEntityTypeLabel),\n pipe(\n addGroupTitle(prependWithEntityTypeLabelWithColon),\n unless(() => isSingle(operations) || isSingleGroup, wrapWithBrackets)\n )\n )(operations);\n};\n\nconst buildGroupsReadableQuery = (\n metadata: Metadata,\n attributePresentations: AttributePresentations,\n lookups: Lookups,\n groups: AdvancedSearchAttributesGroup[]\n): ReadableQueryPrimitive[] => {\n return pipe(\n shiftDownOperators,\n filter(isValidSearchGroup),\n shiftUpOperators,\n mapIndexed((group, index, groups) => ({\n operand: buildGroup(metadata, attributePresentations, lookups, group, isSingle(groups)),\n operator: group.operator\n })),\n buildOperations(),\n flatten\n )(groups);\n};\n\nconst composeFullQuery: <Operand>(operands: Operand[]) => (Flatten<Operand> | ReadableQueryPrimitive)[] = pipe(\n reject(isEmpty),\n map((operand) => ({\n operand,\n operator: 'and'\n })),\n buildOperations(),\n flatten\n);\n\nexport const buildKeywordReadableQuery = (keyword: Keyword): ReadableQueryPrimitive[] => {\n return keyword\n ? [\n buildSpecialAttributeLabel(keyword.isRawFilter ? i18n.text('Raw filter') : i18n.text('Search')),\n ...wrapWithSpaces([buildAttributeFilter(FilterOptions.EQUALS)]),\n buildAttributeValue(`\"${keyword.value}\"`)\n ]\n : [];\n};\n\nconst getReadableMapSearchValue = ({searchType, values: [values]}: MapSearchData): string =>\n getMapSearchValues(searchType, values).join(', ');\n\nexport const buildMapReadableQuery = (map: MapSearchData): ReadableQueryPrimitive[] => {\n return map\n ? [\n buildSpecialAttributeLabel(getMapSearchLabel(map.searchType)),\n buildSpace(),\n buildAttributeValue(getReadableMapSearchValue(map))\n ]\n : [];\n};\ntype ReadableQueryBuilder = (\n metadata: Metadata,\n attributePresentations: AttributePresentations,\n lookups: Lookups,\n groups: AdvancedSearchAttributesGroup[],\n keyword?: Keyword,\n map?: MapSearchData\n) => ReadableQueryPrimitive[];\n\nexport const buildReadableQuery: ReadableQueryBuilder = (\n metadata,\n attributePresentations,\n lookups,\n groups,\n keyword,\n map\n) => {\n const keywordQuery = buildKeywordReadableQuery(keyword);\n const mapQuery = buildMapReadableQuery(map);\n const groupsQuery: ReadableQueryPrimitive = pipe(\n buildGroupsReadableQuery,\n when(\n (groupsQuery) => isMultiple(groupsQuery) && (isNotEmpty(keywordQuery) || isNotEmpty(mapQuery)),\n wrapWithBrackets\n )\n )(metadata, attributePresentations, lookups, groups);\n\n return composeFullQuery([keywordQuery, mapQuery, groupsQuery]);\n};\n\nexport const readableQueryToString: (primitives: ReadableQueryPrimitive[]) => string = pipe(\n map(prop('text')),\n join('')\n);\n\nexport const buildReadableQueryToString: (\n ...args: Parameters<ReadableQueryBuilder>\n) => ReturnType<typeof readableQueryToString> = pipe(buildReadableQuery, readableQueryToString);\n","import {\n allPass,\n always,\n complement,\n concat,\n flatten,\n has,\n isNil,\n not,\n pathSatisfies,\n pipe,\n propEq,\n startsWith,\n when\n} from 'ramda';\nimport {wrapWithBrackets, wrapWithSpaces} from './builderHelpers';\nimport {buildOperator} from './primitives';\nimport {buildAttribute} from './readableAttribute';\nimport {\n AdvancedSearchAttribute,\n AttributePresentations,\n HierarchyAttributes,\n HierarchyGroupAttributes,\n Lookups,\n Metadata,\n ReadableQueryPrimitive\n} from '../../types';\n\ntype BuildHierarchyAttributes = (\n metadata: Metadata,\n attributePresentations: AttributePresentations,\n lookups: Lookups,\n attributes: HierarchyAttributes | HierarchyGroupAttributes | AdvancedSearchAttribute,\n showTitlePath?: boolean\n) => ReadableQueryPrimitive[];\nconst isAttributesGroup: (arg: unknown) => arg is HierarchyGroupAttributes = has('attributes');\nconst isHierarchyAttributes: (arg: unknown) => arg is HierarchyAttributes = Array.isArray;\nconst isGroupWithNotFilter: (attributes: HierarchyAttributes) => boolean = allPass([\n propEq('length', 1),\n pathSatisfies(startsWith('not'), [0, 'filter'])\n]);\n\nconst buildAttributesGroup = (\n metadata: Metadata,\n attributePresentations: AttributePresentations,\n lookups: Lookups,\n attributes: HierarchyGroupAttributes,\n showTitlePath: boolean\n): ReadableQueryPrimitive[] => {\n const {attributes: attributesGroup, operator} = attributes;\n const hierarchyAttributes = buildHierarchyAttributes(\n metadata,\n attributePresentations,\n lookups,\n attributesGroup,\n showTitlePath\n );\n return when(\n always(complement(isNil)(operator)),\n pipe(\n when(always(not(isGroupWithNotFilter(attributesGroup))), wrapWithBrackets),\n concat(wrapWithSpaces([buildOperator(operator)]))\n )\n )(hierarchyAttributes);\n};\nconst buildHierarchyAttributes: BuildHierarchyAttributes = (\n metadata,\n attributePresentations,\n lookups,\n attributes,\n showTitlePath = true\n): ReadableQueryPrimitive[] => {\n if (isAttributesGroup(attributes)) {\n return buildAttributesGroup(metadata, attributePresentations, lookups, attributes, showTitlePath);\n } else if (isHierarchyAttributes(attributes)) {\n return attributes.reduce((primitives: ReadableQueryPrimitive[], attribute): ReadableQueryPrimitive[] => {\n return primitives.concat(\n buildHierarchyAttributes(metadata, attributePresentations, lookups, attribute, showTitlePath)\n );\n }, []);\n } else {\n return when(\n always(has('operator', attributes)),\n concat(wrapWithSpaces([buildOperator(attributes.operator)]))\n )(buildAttribute(metadata, attributePresentations, lookups, attributes, showTitlePath));\n }\n};\n\nexport const buildHierarchyAttributesReadableQuery: BuildHierarchyAttributes = (\n metadata,\n attributePresentations,\n lookups,\n attributes,\n showTitlePath\n) => pipe(buildHierarchyAttributes, flatten)(metadata, attributePresentations, lookups, attributes, showTitlePath);\n","import {\n all,\n complement,\n concat,\n cond,\n curry,\n equals,\n evolve,\n filter,\n flatten,\n has,\n identity,\n ifElse,\n isNil,\n map,\n path,\n pipe,\n prop,\n propEq,\n reduce,\n reject,\n T,\n uniq,\n when\n} from 'ramda';\nimport {nanoid} from 'nanoid';\nimport moment from 'moment';\nimport FilterOptions from '../../constants/filterOptions';\nimport {isDateType} from '../../metadata';\nimport {areAllOperatorsAnd} from '../operators';\nimport {getSearchGroupAttributeEntityTypeUri, isTypeSearchGroupAttribute} from '../groups';\nimport {getDateRangeByValue, isOutdatedDateRangeValue} from '../../filters';\n\nconst isNotTypeAttribute = complement(isTypeSearchGroupAttribute);\n\nconst validateTransitionsAdvancedSearchGroups = (groups) => {\n const errors = [];\n const complexGroups = groups.filter(complement(canBeConvertedToOneGroup));\n const notEmptyGroups = groups.filter(({attributes = []}) => attributes.length > 0);\n const canConvertComplexGroups =\n complexGroups.length === 0 || (complexGroups.length === 1 && notEmptyGroups.length === 1);\n if (!canConvertComplexGroups) {\n errors.push(\"Can't convert more than one complex transition advanced search group\");\n // Why? Example:\n // Transition (old new) groups:\n // (complex) group 1 group2\n // (atr1 or attr2 and attr3) and attr4\n // after converting \"each attribute to separate group\" we have in request:\n // group1 group2 group3 group4\n // attr1 or (attr2 and attr3 and attr4)\n // So we can't put brackets as it was before\n }\n const hasTypeNotEquals = groups.some((group) =>\n (group.attributes || []).filter(isTypeSearchGroupAttribute).some(propEq('filter', FilterOptions.NOT_EQUALS))\n );\n if (hasTypeNotEquals) {\n errors.push(\"Can't convert advanced search group with 'Type' attribute and 'not equals' filter.\");\n }\n\n if (errors.length) {\n throw errors;\n }\n return groups;\n};\n\nconst createGroupFromAttribute = (groupOperator) => (attribute, index, array) => {\n const entityTypes = pipe(\n ifElse(\n isTypeSearchGroupAttribute,\n pipe(prop('values'), flatten),\n pipe(getSearchGroupAttributeEntityTypeUri, (x) => [x], reject(isNil))\n )\n )(attribute);\n const isLastAttribute = index === array.length - 1;\n\n return {\n attributes: [attribute].filter(isNotTypeAttribute),\n entityTypes,\n operator: isLastAttribute ? groupOperator : attribute.operator,\n id: nanoid()\n };\n};\n\nconst parseEntityTypes = (attributes = []) => {\n const entityTypesFromSpecialAttributes = pipe(\n filter(isTypeSearchGroupAttribute),\n map(prop('values')),\n flatten,\n uniq\n )(attributes);\n const entityTypesFromAttributes = pipe(map(getSearchGroupAttributeEntityTypeUri), reject(isNil), uniq)(attributes);\n const areOnlySpecialAttributes = entityTypesFromAttributes.length === 0;\n const areAttributesFromOneEntityType =\n entityTypesFromAttributes.length === 1 &&\n (entityTypesFromSpecialAttributes.length === 0 ||\n equals(entityTypesFromAttributes, entityTypesFromSpecialAttributes));\n return {\n entityTypesFromSpecialAttributes,\n entityTypesFromAttributes,\n areOnlySpecialAttributes,\n areAttributesFromOneEntityType\n };\n};\n\nconst canBeConvertedToOneGroup = (group) => {\n const attributes = group.attributes || [];\n const {areOnlySpecialAttributes, areAttributesFromOneEntityType} = parseEntityTypes(attributes);\n return (areOnlySpecialAttributes || areAttributesFromOneEntityType) && areAllOperatorsAnd(attributes);\n};\n\nconst parseTransitionAdvancedSearchGroup = (group) => {\n const groups = [];\n const attributes = group.attributes || [];\n const {entityTypesFromSpecialAttributes, entityTypesFromAttributes} = parseEntityTypes(attributes);\n if (canBeConvertedToOneGroup(group)) {\n groups.push({\n ...group,\n entityTypes: uniq(concat(entityTypesFromSpecialAttributes, entityTypesFromAttributes)),\n attributes: attributes.filter(isNotTypeAttribute)\n });\n } else {\n const groupsFromAttributes = attributes.map(createGroupFromAttribute(group.operator));\n groups.push(...groupsFromAttributes);\n }\n return groups;\n};\n\nconst convertTransitionAdvancedSearchGroups = ifElse(\n all(has('entityTypes')),\n identity,\n pipe(\n validateTransitionsAdvancedSearchGroups,\n reduce((result, group) => result.concat(parseTransitionAdvancedSearchGroup(group)), [])\n )\n);\n\nconst CONVERT_TRANSITION_DATE_FILTERS = {\n [FilterOptions.EQUALS]: FilterOptions.ON,\n [FilterOptions.IN_RANGE]: FilterOptions.WITHIN,\n [FilterOptions.GTE]: FilterOptions.AFTER,\n [FilterOptions.GT]: FilterOptions.AFTER,\n [FilterOptions.LTE]: FilterOptions.BEFORE,\n [FilterOptions.LT]: FilterOptions.BEFORE\n};\n\nconst convertOldDateFilter = curry((filter) => {\n return CONVERT_TRANSITION_DATE_FILTERS[filter] || filter;\n});\n\nconst convertOldDateValues = curry((filter, values) => {\n switch (filter) {\n case FilterOptions.LT:\n return [moment(values[0]).subtract(1, 'day').valueOf()];\n case FilterOptions.GT:\n return [moment(values[0]).add(1, 'day').valueOf()];\n default:\n return values;\n }\n});\n\nconst isDateAdvancedSearchAttribute = pipe(path(['data', 'attrType', 'type']), isDateType);\n\nconst convertTransitionAttributes = curry((groups = []) => {\n return groups.map((group) => {\n const attributes = (group.attributes || []).map((attribute) => {\n const {filter} = attribute;\n return isDateAdvancedSearchAttribute(attribute)\n ? evolve(\n {\n filter: convertOldDateFilter,\n values: convertOldDateValues(filter)\n },\n attribute\n )\n : attribute;\n });\n return {...group, attributes};\n });\n});\n\nconst convertOutdatedDateRangeValue = evolve({\n values: when(pipe(prop(0), isOutdatedDateRangeValue), map(getDateRangeByValue))\n});\n\nconst convertOutdatedAttributesValue = map(\n cond([\n [isDateAdvancedSearchAttribute, convertOutdatedDateRangeValue],\n [T, identity]\n ])\n);\n\nexport {convertTransitionAdvancedSearchGroups, convertTransitionAttributes, convertOutdatedAttributesValue};\n","import {curryN, defaultTo, evolve, isNil, map, pipe, propSatisfies, reject} from 'ramda';\nimport {\n convertOutdatedAttributesValue,\n convertTransitionAdvancedSearchGroups,\n convertTransitionAttributes\n} from './parseTransitionAdvancedSearch';\nimport {isEmptySearchGroup, sanitizeTypesInSearchGroups} from '../groups';\n\nconst parseAdvancedSearch = curryN(\n 3,\n (parseAttributeData, metadata, advancedSearch, dataTenants, canUserReadWorkflowDataTask) => {\n return pipe(\n defaultTo([]),\n convertTransitionAdvancedSearchGroups,\n sanitizeTypesInSearchGroups(metadata),\n map(\n evolve({\n attributes: pipe(\n map(\n evolve({\n data: parseAttributeData(metadata, dataTenants, canUserReadWorkflowDataTask)\n })\n ),\n reject(propSatisfies(isNil, 'data')),\n convertOutdatedAttributesValue\n )\n })\n ),\n convertTransitionAttributes,\n reject(isEmptySearchGroup)\n )(advancedSearch);\n }\n);\n\nexport {parseAdvancedSearch as default};\n","import {Metadata} from '../../types/metadata';\nimport parseAdvancedSearch from './parseAdvancedSearch';\nimport {findAttributeTypeByUri, getAttributeTypesHierarchyByUri, isSpecialAttribute} from '../../metadata';\nimport {isAttributeSearchUri, searchUriToAttrUri} from '../../uris';\nimport {chain, curry, partition, pick, pipe, prop, reject, values} from 'ramda';\nimport {getEntityTypeLabel} from '../../entity';\nimport {getSpecialAttrTypeByFieldName} from '../../attributes';\nimport {getFilterOptionForFacet, getFilterValueForFacet, getTypeForFacet, isEmptyFacet, isTypeFacet} from '../facets';\nimport {nanoid} from 'nanoid';\nimport {Entity} from '../../types';\n\nexport const facetToAdvancedAttribute = (facet, filter?) => {\n return {\n data: {\n uri: isAttributeSearchUri(facet.fieldName)\n ? searchUriToAttrUri(facet.fieldName, facet.entityTypeUri)\n : undefined,\n fieldName: facet.fieldName,\n entityTypeUri: facet.entityTypeUri\n },\n operator: 'and',\n filter: filter || getFilterOptionForFacet(facet),\n id: nanoid(),\n values: getFilterValueForFacet(facet)\n };\n};\n\nconst facetsToAdvanced = (metadata, facets) => {\n const [[typeFacet = {}], restFacets] = pipe(values, reject(isEmptyFacet), partition(isTypeFacet))(facets);\n const groupAttributes = restFacets\n .map((facet) => ({\n ...facet,\n type: getTypeForFacet(metadata, facet)\n }))\n .map((facet) => facetToAdvancedAttribute(facet));\n const entityTypes = typeFacet.values || [];\n return [\n {\n attributes: groupAttributes,\n operator: 'or',\n id: nanoid(),\n entityTypes\n }\n ];\n};\n\nconst parseAttributeData = curry((metadata: Metadata, dataTenants, canUserReadWorkflowDataTask, attrData) => {\n const {uri, fieldName, entityTypeUri} = attrData;\n const attrType =\n getSpecialAttrTypeByFieldName(fieldName, dataTenants, canUserReadWorkflowDataTask) ||\n findAttributeTypeByUri(metadata, uri);\n if (!attrType) {\n return null;\n }\n if (isSpecialAttribute(attrType)) {\n return {\n ...attrData,\n attrType,\n title: attrType.label\n };\n } else {\n const title = attrType.label || attrType.name;\n const entityTypeLabel = getEntityTypeLabel(metadata, {type: entityTypeUri} as Entity);\n const parents = (\n getAttributeTypesHierarchyByUri(metadata, searchUriToAttrUri(fieldName, entityTypeUri), entityTypeUri) || []\n )\n .map(pick(['label', 'name']))\n .slice(0, -1);\n return {\n ...attrData,\n attrType,\n title,\n pathToTitle: Array.isArray(parents)\n ? [entityTypeLabel, ...chain(prop('label'), parents), title]\n : [entityTypeLabel, title]\n };\n }\n});\n\nexport const newAdvancedSearchToGroups = curry(\n (metadata: Metadata, dataTenants, canUserReadWorkflowDataTask, advanced) => {\n return parseAdvancedSearch(parseAttributeData, metadata, advanced, dataTenants, canUserReadWorkflowDataTask);\n }\n);\n\nexport const getGroupsFromNewSearchState = (\n metadata: Metadata,\n dataTenants,\n canUserReadWorkflowDataTask,\n searchState\n) => {\n const {advanced = [], facets = {}} = searchState;\n const hasActiveAdvancedSearch = advanced.some(\n ({attributes, entityTypes = []}) => attributes.length || entityTypes.length\n );\n const advancedSearch = hasActiveAdvancedSearch ? advanced : facetsToAdvanced(metadata, facets);\n return newAdvancedSearchToGroups(metadata, dataTenants, canUserReadWorkflowDataTask, advancedSearch);\n};\n","import {Metadata} from '../../types';\nimport {nanoid} from 'nanoid';\nimport {SpecialAttrTypes} from '../../constants';\nimport {getDataTenantSpecialAttributeFieldName, getSpecialAttrTypeByFieldName} from '../../attributes';\nimport {findAttributeTypeByUri, findClosestCommonAncestor, isBooleanType, isDateType} from '../../metadata';\nimport {isFileFilterOption, isMultiValueOption} from '../../filters';\nimport {getFileName} from '../../formatting';\nimport {isEmptyValue, parseBoolean, wrapInArray} from '../../utils';\nimport {\n allPass,\n both,\n chain,\n complement,\n cond,\n curry,\n flatten,\n has,\n identity,\n is,\n keys,\n map,\n mergeAll,\n not,\n partition,\n pick,\n pipe,\n prop,\n propOr,\n reject,\n T,\n uniq,\n values,\n when\n} from 'ramda';\nimport {facetToAdvancedAttribute, newAdvancedSearchToGroups} from './newSearchState';\nimport {getTypeForFacet, isRangeFacet} from '../facets';\nimport FilterOptionsValues, {OldFilterOptions, convertOldFilterOption} from '../../constants/filterOptions';\n\nexport const getKeywordFromOldSearchState = (state) => {\n const {keyword, isRawFilter = false} = state;\n return keyword ? {value: keyword, isRawFilter} : null;\n};\n\nconst convertOldFieldName = (fieldName: string) => {\n if (fieldName === 'rdmLookups.not.resolved') {\n return SpecialAttrTypes.notResolved.name;\n }\n return fieldName;\n};\n\nconst convertOldModel = (model = {}) =>\n pipe(\n keys,\n map((key) => ({[convertOldFieldName(key)]: model[key]})),\n mergeAll\n )(model);\n\nexport const convertOldAdvancedAttribute = curry((metadata, entityTypeUri, {fieldName, uri, filter, values = []}) => {\n const convertedFilter =\n filter === OldFilterOptions.NOT_IN_RANGE ? FilterOptionsValues.IN_RANGE : convertOldFilterOption(filter);\n const convertedFieldName = convertOldFieldName(fieldName);\n const attrType = getSpecialAttrTypeByFieldName(convertedFieldName) || findAttributeTypeByUri(metadata, uri);\n const convertedValues = cond([\n [\n () => isFileFilterOption(convertedFilter),\n map(\n when(both(has('link'), complement(has('filename'))), (value) => ({\n ...value,\n filename: getFileName(value)\n }))\n )\n ],\n [() => isBooleanType(attrType?.type), map(parseBoolean)],\n [\n (values) => isMultiValueOption(convertedFilter) && !Array.isArray(values[0]) && !isDateType(attrType?.type),\n wrapInArray\n ],\n [T, identity]\n ])(values);\n return {\n id: nanoid(),\n data: {\n uri,\n fieldName: convertedFieldName,\n entityTypeUri\n },\n operator: filter === OldFilterOptions.NOT_IN_RANGE ? 'and not' : 'and',\n filter: convertedFilter,\n values: convertedValues\n };\n});\n\nconst convertOldAdvancedSearch = curry((metadata: Metadata, oldAdvanced) => {\n const {searchParams = [], fastSearchParams = [], entityTypes = []} = oldAdvanced;\n const newAdvancedAttributes = [...searchParams, ...fastSearchParams].map(\n convertOldAdvancedAttribute(metadata, findClosestCommonAncestor(metadata, entityTypes))\n );\n return [\n {\n id: nanoid(),\n operator: 'or',\n attributes: newAdvancedAttributes,\n entityTypes\n }\n ];\n});\n\nconst hasNumberProp = (propName) => pipe(prop(propName), is(Number));\n\nexport const convertOldFacetValues = cond([\n [has('values'), prop('values')],\n [allPass([hasNumberProp('from'), hasNumberProp('to')]), pipe(pick(['from', 'to']), values)],\n [pipe(prop('rangeSelection'), isEmptyValue, not), pipe(prop('rangeSelection'), pick(['start', 'end']), values)],\n [T, () => []]\n]);\n\nexport const getFacetParams = (facet, entityType?) => {\n const commonParams = pick(['fieldName', 'entityType', 'attrType', 'filter'])(facet);\n const dataTenantId = facet.potentialMatchesDataTenant;\n const values = convertOldFacetValues(facet);\n return {\n ...commonParams,\n values,\n entityType: propOr(entityType, 'entityType', commonParams),\n fieldName: dataTenantId\n ? getDataTenantSpecialAttributeFieldName(facet.fieldName, dataTenantId)\n : facet.fieldName\n };\n};\n\nexport const getSearchParam = (facet) => {\n const configs = [];\n has('values', facet) && configs.push(getFacetParams(facet));\n propOr([], 'searchParameters', facet).forEach((param) =>\n configs.push({\n fieldName: facet.fieldName,\n ...getFacetParams(param, facet.entityType)\n })\n );\n return configs;\n};\n\nexport const getFacetWithChild = (facet, parentEntityType?) => {\n if (has('children')(facet)) {\n const facetParams = getFacetParams(facet, parentEntityType);\n return facet.children.reduce((facets, childFacet) => {\n facets.push(getFacetWithChild(childFacet, propOr(parentEntityType, 'entityType', facetParams)));\n return facets;\n }, []);\n }\n return getFacetParams(facet, parentEntityType);\n};\n\nconst convertOldFacet = cond([\n [has('searchParameters'), getSearchParam],\n [has('children'), pipe(getFacetWithChild, flatten)],\n [T, getFacetParams]\n]);\n\nexport const convertOldFacets = pipe(map(convertOldFacet), flatten);\n\nexport const getOldRangeFacetValues = (values) => {\n if (values.every((elem) => Array.isArray(elem))) {\n return values;\n }\n if (values.length === 2) {\n return [values.map((value) => Number(value))];\n }\n if (values.length === 1) {\n const newValue = Number(values[0]);\n return [[newValue, newValue]];\n }\n return values;\n};\n\nconst oldFacetsToNewAdvanced = (metadata: Metadata, oldFacets) => {\n if (!oldFacets) {\n return [];\n }\n\n const [typeFacets, restFacets] = pipe(\n reject((facet) => facet.fieldName === 'tenants'),\n partition((facet) => facet.fieldName === 'type')\n )(oldFacets);\n const entityTypes = chain(propOr([], 'values'), typeFacets);\n const groupAttributes = convertOldFacets(restFacets)\n .map(({fieldName, entityType: entityTypeUri, values, filter}) => {\n return {\n fieldName,\n entityTypeUri,\n values,\n filter\n };\n })\n .map((facet) => ({\n ...facet,\n type: getTypeForFacet(metadata, facet)\n }))\n .map((facet) => ({\n ...facet,\n values: isRangeFacet(facet) ? getOldRangeFacetValues(facet.values) : facet.values\n }))\n .map(({filter, ...facet}) => {\n return facetToAdvancedAttribute(facet, filter);\n });\n\n return [\n {\n attributes: groupAttributes,\n operator: 'or',\n id: nanoid(),\n entityTypes\n }\n ];\n};\n\nexport const getGroupsFromOldSearchState = (metadata: Metadata, dataTenants, canUserReadWorkflowDataTask, oldState) => {\n const {facets = [], advanced = {}, model} = oldState;\n const [advancedGroup] = convertOldAdvancedSearch(metadata, advanced);\n const [facetsGroup] = oldFacetsToNewAdvanced(metadata, facets);\n const convertedModel = convertOldModel(model);\n const entityTypes = convertedModel?.type ? uniq([...facetsGroup.entityTypes, ...advancedGroup.entityTypes]) : [];\n const attributes = [...facetsGroup.attributes, ...advancedGroup.attributes].filter(({data: {fieldName}}) => {\n return convertedModel[fieldName];\n });\n const advancedSearch = [\n {\n ...facetsGroup,\n entityTypes,\n attributes\n }\n ];\n return newAdvancedSearchToGroups(metadata, dataTenants, canUserReadWorkflowDataTask, advancedSearch);\n};\n","import {Metadata} from '../../types';\nimport {getGroupsFromNewSearchState} from './newSearchState';\nimport {getKeywordFromOldSearchState, getGroupsFromOldSearchState} from './oldSearchState';\n\nexport const getGroupsFromSearchState = (metadata: Metadata, dataTenants, canUserReadWorkflowDataTask, searchState) => {\n try {\n if (searchState.version == '2.0') {\n return getGroupsFromNewSearchState(metadata, dataTenants, canUserReadWorkflowDataTask, searchState);\n } else {\n return getGroupsFromOldSearchState(metadata, dataTenants, canUserReadWorkflowDataTask, searchState);\n }\n } catch (e) {\n console.error('Failed to convert search state to groups', e);\n return [];\n }\n};\n\nexport const getKeywordFromSearchState = (state) => {\n return state.version === '2.0' ? state.keyword : getKeywordFromOldSearchState(state);\n};\n","import {\n allPass,\n complement,\n defaultTo,\n filter,\n find,\n flatten,\n has,\n identity,\n isEmpty,\n map,\n not,\n path,\n pathEq,\n pick,\n pipe,\n prop,\n propOr,\n uniq,\n when,\n reject,\n isNil\n} from 'ramda';\nimport {getLabel} from '../entity';\nimport {getMatchRule} from '../metadata/matchGroups';\n\nconst equalMatchEntityUri = (entityUri) => pathEq(['object', 'uri'], entityUri);\n\nconst getMatchEntity = (entityUri, transitiveMatches) =>\n pipe(find(equalMatchEntityUri(entityUri)), prop('object'))(transitiveMatches);\n\nexport const getTransitiveMatchesForEntity = (metadata, transitiveMatches = [], entity, entitiesMap = {}) => {\n const transitiveMatch = pipe(\n find(\n allPass([\n has('shortestTransitiveMatchPath'),\n equalMatchEntityUri(entity.uri),\n pipe(propOr(false, 'direct'), not)\n ])\n ),\n propOr([], 'shortestTransitiveMatchPath')\n )(transitiveMatches);\n const prepareMatchRule = (match) => {\n const matchEntity = getMatchEntity(match.match, transitiveMatches) || entitiesMap[match.match];\n if (!matchEntity) {\n return null;\n }\n return {\n label: getLabel(prop('label', matchEntity)),\n matchRules: propOr([], 'matchRules', match).map(function (matchRuleUri) {\n return (\n getMatchRule(metadata, matchEntity.type, matchRuleUri) || {\n label: matchRuleUri,\n uri: matchRuleUri\n }\n );\n })\n };\n };\n return pipe(defaultTo([]), when(complement(isEmpty), map(prepareMatchRule)), reject(isNil))(transitiveMatch);\n};\n\nexport const getEntitiesMapForTransitiveMatches = (transitiveMatches) => {\n return transitiveMatches.reduce((entitiesMap, {object}) => {\n entitiesMap[object.uri] = pick(['uri', 'type', 'label'], object);\n return entitiesMap;\n }, {});\n};\n\nexport const isTransitiveMatch = allPass([has('shortestTransitiveMatchPath'), pipe(propOr(false, 'direct'), not)]);\n\nexport const getTransitiveMatchRules = (metadata, match, entitiesMap) =>\n pipe(\n propOr([], 'shortestTransitiveMatchPath'),\n map(({match: matchEntityUri, matchRules = [], negativeRules = []}) => {\n const matchEntity = propOr({}, matchEntityUri, entitiesMap);\n return {\n label: getLabel(prop('label', matchEntity)),\n matchRules: matchRules.concat(negativeRules).map(function (matchRuleUri) {\n return (\n getMatchRule(metadata, matchEntity.type, matchRuleUri) || {\n label: matchRuleUri,\n uri: matchRuleUri\n }\n );\n })\n };\n })\n )(match);\nexport const collectAllTransitiveEntitiesUris = (transitiveMatches = []) => {\n const getMatchUris = pipe(\n map(prop('shortestTransitiveMatchPath')),\n flatten,\n filter(identity),\n map(prop('match')),\n uniq\n );\n return getMatchUris(transitiveMatches);\n};\n\nexport const getEntityUriFromMatchObject = path(['object', 'uri']);\n","import {MatchRuleSummary} from '../types';\n\nconst getMatchRuleSummary = (matchRuleSummaries: MatchRuleSummary[] = [], matchRuleUri: string): MatchRuleSummary =>\n matchRuleSummaries.find(({uri}) => uri === matchRuleUri);\n\nconst checkMatchRuleSummaryRelevance = (matchRuleSummary: MatchRuleSummary) =>\n matchRuleSummary?.relevance !== undefined;\n\nconst formatRelevanceScore = (matchRuleSummary: MatchRuleSummary) =>\n checkMatchRuleSummaryRelevance(matchRuleSummary) ? `${matchRuleSummary.relevance * 100}%` : '';\n\nexport {getMatchRuleSummary, formatRelevanceScore, checkMatchRuleSummaryRelevance};\n","import {both, either, filter, identity, map, pipe, prop, uniqBy, is} from 'ramda';\nimport {\n DependentLookupsStructure,\n DependentLookupsStructureNode,\n DependentLookupsStructureNodeValue\n} from '../types/dependentLookups';\nimport {\n AttributeType,\n AttributeValue,\n SimpleAttributeValue,\n ComplexAttributeValue,\n Entity,\n Metadata,\n Relation\n} from '../types';\nimport {flatAttributeTreeNodeWithSimplesOnly, getAttributeTypesTree, getEntityType, getRelationType} from '../metadata';\nimport {findAttributeTypeByUri} from '../metadata/attributes';\nimport {findAttributeValuesByTypeUri} from '../attributes';\nimport {isOv} from '../attributes/general';\nimport {isEntityTypeUri, isTempUri} from '../uris';\n\nconst isAttributeTypeInDependentLookups = (structure: DependentLookupsStructure, attrTypeUri: string) =>\n !!structure[attrTypeUri];\n\nconst convertAttributeValueToDependentLookupNodeValue = ({\n uri,\n lookupCode,\n value\n}: SimpleAttributeValue): DependentLookupsStructureNodeValue => ({\n uri,\n value: lookupCode || (value as string)\n});\n\nconst addUniqValue = <T extends unknown[]>(oldValues: T | undefined, newValues: T, uniqByFn = identity): T => {\n return newValues.length === 0 && oldValues ? oldValues : uniqBy(uniqByFn, [...newValues, ...(oldValues || [])]);\n};\n\ntype AddOrUpdateStructureNode = {\n structure: DependentLookupsStructure;\n attrType: AttributeType | Pick<AttributeType, 'uri'>;\n parents?: DependentLookupsStructureNode['parents'];\n children?: DependentLookupsStructureNode['children'];\n values?: DependentLookupsStructureNode['values'];\n};\n\nconst addOrUpdateStructureNode = ({\n structure,\n attrType,\n parents = [],\n children = [],\n values = []\n}: AddOrUpdateStructureNode): DependentLookupsStructure => {\n const existingNode = structure[attrType.uri];\n return {\n ...structure,\n [attrType.uri]: {\n ...existingNode,\n attrType: existingNode?.attrType || attrType,\n parents: addUniqValue(existingNode?.parents, parents),\n children: addUniqValue(existingNode?.children, children),\n values: addUniqValue(existingNode?.values, values, prop('uri'))\n } as DependentLookupsStructureNode\n };\n};\n\ntype AddToStructure = {\n structure: DependentLookupsStructure;\n parentAttrType: AttributeType;\n childrenAttrTypes: AttributeType[];\n};\n\nconst addToStructure = ({structure, parentAttrType, childrenAttrTypes}: AddToStructure): DependentLookupsStructure => {\n const childrenAttrTypesUris: string[] = childrenAttrTypes.map(prop('uri'));\n const structureWithParent = addOrUpdateStructureNode({\n structure,\n attrType: parentAttrType,\n children: childrenAttrTypesUris\n });\n return childrenAttrTypes.reduce((structure, childAttrType) => {\n return addOrUpdateStructureNode({structure, attrType: childAttrType, parents: [parentAttrType.uri]});\n }, structureWithParent);\n};\n\ntype InitDependentLookups = {\n structure?: DependentLookupsStructure;\n metadata: Metadata;\n typeUris: string[];\n alreadyAddedTypeUris?: string[];\n};\n\nconst initDependentLookups = ({\n structure = {},\n metadata,\n typeUris,\n alreadyAddedTypeUris = []\n}: InitDependentLookups): DependentLookupsStructure => {\n const newTypeUris = typeUris.filter((uri) => !alreadyAddedTypeUris.includes(uri));\n return newTypeUris.reduce((structure, typeUri) => {\n const type = getEntityType(metadata, typeUri) || getRelationType(metadata, typeUri);\n const isAcceptableAttributeTreeNode = either(\n both(prop('dependentLookupAttributes'), prop('dependentLookupCode')),\n prop('children')\n );\n const parentDependentLookupsAttrTypes: AttributeType[] = getAttributeTypesTree(\n metadata,\n type,\n isAcceptableAttributeTreeNode\n ).flatMap(flatAttributeTreeNodeWithSimplesOnly);\n return parentDependentLookupsAttrTypes.reduce((structure, parentAttrType) => {\n const childrenAttrTypes = parentAttrType.dependentLookupAttributes\n .map((attrTypeUri) => findAttributeTypeByUri(metadata, attrTypeUri))\n .filter(identity)\n .filter(prop('dependentLookupCode'));\n return addToStructure({structure, parentAttrType, childrenAttrTypes});\n }, structure);\n }, structure);\n};\n\nconst isReferencedEntityAttributeOfExistingEntity = (entityOrRelation: Entity | Relation, attrTypeUri: string) => {\n return (\n !isTempUri(entityOrRelation.uri) &&\n isEntityTypeUri(entityOrRelation.type) &&\n isEntityTypeUri(attrTypeUri) &&\n !attrTypeUri.startsWith(entityOrRelation.type)\n );\n};\n\ntype PopulateDependentLookupsFromEntity = {\n structure: DependentLookupsStructure;\n entityOrRelation: Entity | Relation;\n metadata: Metadata;\n};\n\nconst populateDependentLookupsFromEntity = ({\n structure,\n metadata,\n entityOrRelation\n}: PopulateDependentLookupsFromEntity) => {\n return Object.keys(structure).reduce((structure, attrTypeUri) => {\n if (isReferencedEntityAttributeOfExistingEntity(entityOrRelation, attrTypeUri)) {\n return structure;\n }\n const values = findAttributeValuesByTypeUri(metadata, entityOrRelation, attrTypeUri) || [];\n const dlValues: DependentLookupsStructureNode['values'] = pipe(\n filter(isOv),\n map(convertAttributeValueToDependentLookupNodeValue)\n )(values);\n return addOrUpdateStructureNode({\n structure,\n attrType: structure[attrTypeUri].attrType,\n values: dlValues\n });\n }, structure);\n};\n\ntype AddValueToDependentLookups = {\n structure: DependentLookupsStructure;\n attributeValue: AttributeValue;\n};\n\nconst addValueToDependentLookups = ({structure, attributeValue}: AddValueToDependentLookups) => {\n if (is(Object, attributeValue.value)) {\n return Object.values(attributeValue.value).reduce(\n (structure: DependentLookupsStructure, values: AttributeValue[]) => {\n const isComplex = (values as ComplexAttributeValue[]).some(({value}) => is(Object, value));\n const isDL = (values as SimpleAttributeValue[]).some(({type}) =>\n isAttributeTypeInDependentLookups(structure, type)\n );\n return isComplex || isDL\n ? values.filter(isOv).reduce((structure, attributeValue) => {\n return addValueToDependentLookups({\n structure,\n attributeValue\n });\n }, structure)\n : structure;\n },\n structure\n );\n } else {\n const attrValue = attributeValue as SimpleAttributeValue;\n return isAttributeTypeInDependentLookups(structure, attrValue.type)\n ? addOrUpdateStructureNode({\n structure,\n attrType: structure[attrValue.type].attrType,\n values: [convertAttributeValueToDependentLookupNodeValue(attrValue)]\n })\n : structure;\n }\n};\n\ntype RemoveValuesFromDependentLookups = {\n structure: DependentLookupsStructure;\n uri: string;\n};\n\nconst removeValuesFromDependentLookups = ({\n structure,\n uri\n}: RemoveValuesFromDependentLookups): DependentLookupsStructure => {\n return map((node: DependentLookupsStructureNode): DependentLookupsStructureNode => {\n const hasRelatedValues = node.values.some(({uri: valueUri}) => valueUri.startsWith(uri));\n return hasRelatedValues\n ? {\n ...node,\n values: node.values.filter(({uri: valueUri}) => !valueUri.startsWith(uri))\n }\n : node;\n })(structure);\n};\n\ntype SyncAttributeTypeWithDependentLookups = {\n structure: DependentLookupsStructure;\n attrTypeUri: string;\n entityOrRelation: Entity | Relation;\n metadata: Metadata;\n};\n\n//currently only adding new values/updating existing, not checking for removed\nconst syncAttributeTypeWithDependentLookups = ({\n structure,\n attrTypeUri,\n entityOrRelation,\n metadata\n}: SyncAttributeTypeWithDependentLookups) => {\n const values = findAttributeValuesByTypeUri(metadata, entityOrRelation, attrTypeUri) || [];\n return values.length\n ? addOrUpdateStructureNode({\n structure,\n attrType: structure[attrTypeUri].attrType,\n values: values.filter(isOv).map(convertAttributeValueToDependentLookupNodeValue)\n })\n : structure;\n};\n\nexport {\n isAttributeTypeInDependentLookups,\n initDependentLookups,\n populateDependentLookupsFromEntity,\n addValueToDependentLookups,\n removeValuesFromDependentLookups,\n syncAttributeTypeWithDependentLookups\n};\n","import {areOneHierarchyUris, getBaseUri, getParentUri, isTopLevelUri, isFirstLevelAttributeUri} from '../uris';\nimport {getHierarchyDescendants, ObjectsHierarchy} from '../entity/objectsHierarchy';\n\nconst isAllowedReversedDependency = (childUri: string, parentUri: string) =>\n isTopLevelUri(childUri) && !isTopLevelUri(parentUri) && areOneHierarchyUris(parentUri, childUri);\n\nconst areOneObjectDLValuesInOneHierarchy = (childUri: string, parentUri: string) => {\n const nearestParentOfParentValueUri = getParentUri(parentUri);\n const nearestParentOfValueUri = getParentUri(childUri);\n return (\n areOneHierarchyUris(nearestParentOfValueUri, nearestParentOfParentValueUri) ||\n isAllowedReversedDependency(nearestParentOfValueUri, nearestParentOfParentValueUri)\n );\n};\n\nexport const areDLValuesInOneHierarchy = (childUri: string, parentUri: string, objectsHierarchy?: ObjectsHierarchy) => {\n const childBaseUri = getBaseUri(childUri);\n const parentBaseUri = getBaseUri(parentUri);\n if (childBaseUri === parentBaseUri) {\n return areOneObjectDLValuesInOneHierarchy(childUri, parentUri);\n } else if (objectsHierarchy && isFirstLevelAttributeUri(parentUri)) {\n const descendants = getHierarchyDescendants(objectsHierarchy, parentBaseUri);\n return descendants.includes(childBaseUri);\n }\n return false;\n};\n","import {DependentLookupsConfig} from '../types';\n\nconst isAutopopulationEnabled = (config: DependentLookupsConfig, typeUri) => {\n if (config) {\n if (config.includeAttributes) {\n return config.includeAttributes.includes(typeUri);\n }\n if (config.excludeAttributes) {\n return !config.excludeAttributes.includes(typeUri);\n }\n }\n return false;\n};\n\nexport {isAutopopulationEnabled};\n","import {uniq} from 'ramda';\nimport {\n AttributeType,\n CascadeUpdateStateValue,\n Connection,\n DependentLookupsConfig,\n DependentLookupsEditorsState,\n DependentLookupsStructure,\n DependentLookupsStructureNode,\n DependentLookupsStructureNodeValue,\n EntitiesMap\n} from '../types';\nimport {areDLValuesInOneHierarchy} from './valuesHierarchy';\nimport {getBaseUri} from '../uris';\nimport {isAutopopulationEnabled} from './config';\nimport {getFullObjectsHierarchy, getRestrictedObjectsHierarchy} from '../entity/objectsHierarchy';\n\ntype FilterRelatedParentValuesForDependentLookupValueUri<T extends DependentLookupsStructureNodeValue> = {\n parentValues: T[];\n valueUri: string;\n entityUri?: string;\n modifiedEntities?: EntitiesMap;\n connections?: Connection[];\n};\n\nconst filterRelatedParentValuesForDependentLookupValueUri = <T extends DependentLookupsStructureNodeValue>({\n parentValues,\n valueUri,\n entityUri,\n modifiedEntities,\n connections\n}: FilterRelatedParentValuesForDependentLookupValueUri<T>) => {\n const objectsHierarchy = entityUri ? getFullObjectsHierarchy(entityUri, modifiedEntities, connections) : null;\n return parentValues.filter(({uri}) => areDLValuesInOneHierarchy(valueUri, uri, objectsHierarchy));\n};\n\nconst getRelatedStructureNodes = (\n relationName: 'children' | 'parents',\n structure: DependentLookupsStructure,\n node: DependentLookupsStructureNode\n): DependentLookupsStructureNode[] => {\n const relatedNodes = node[relationName].map((uri) => structure[uri]);\n return uniq(\n relatedNodes.concat(relatedNodes.flatMap((node) => getRelatedStructureNodes(relationName, structure, node)))\n );\n};\n\nconst isTouchedEditor = (editorsState: DependentLookupsEditorsState | undefined, uri: string) =>\n editorsState?.[uri]?.isTouched;\n\nconst buildCascadeUpdateStateValue = (\n type: AttributeType,\n valueUri: string,\n {uri, value}: DependentLookupsStructureNodeValue,\n config: DependentLookupsConfig,\n editorsState: DependentLookupsEditorsState | undefined\n): CascadeUpdateStateValue => {\n const {uri: typeUri, defaultValue} = type;\n const isTouched = isTouchedEditor(editorsState, uri);\n const shouldAutopopulate = isAutopopulationEnabled(config, typeUri) || (!!defaultValue && !isTouched);\n const autopopulate = uri !== valueUri && shouldAutopopulate;\n return {\n type: typeUri,\n uri,\n lookupValue: value,\n autopopulate,\n useDefaultValue: autopopulate && !isTouched\n };\n};\n\ntype GetDependentLookupStateForValueUri = {\n structure: DependentLookupsStructure;\n typeUri: string;\n valueUri: string;\n modifiedEntities: EntitiesMap;\n connections?: Connection[];\n entityUri?: string;\n config: DependentLookupsConfig;\n editorsState?: DependentLookupsEditorsState;\n};\n\nconst getDependentLookupStateForValueUri = ({\n structure,\n typeUri,\n valueUri,\n modifiedEntities,\n connections,\n entityUri,\n config,\n editorsState\n}: GetDependentLookupStateForValueUri): CascadeUpdateStateValue[] => {\n const node = structure[typeUri];\n const baseUri = getBaseUri(valueUri);\n const objectsHierarchy = getRestrictedObjectsHierarchy(baseUri, entityUri, modifiedEntities, connections);\n const descendantsNodes = getRelatedStructureNodes('children', structure, node);\n const ancestorsNodes = getRelatedStructureNodes('parents', structure, node);\n const ancestorsOfDescendantsNodes = descendantsNodes // Use-Case 2 (separate parents) from sanityLookups\n .flatMap((descendantNode) => getRelatedStructureNodes('parents', structure, descendantNode))\n .filter(\n (ancestorOfDescendantNode) =>\n ![...ancestorsNodes, node, ...descendantsNodes].includes(ancestorOfDescendantNode)\n );\n const descendants = descendantsNodes.flatMap((node) =>\n node.values\n .filter(({uri}) => areDLValuesInOneHierarchy(uri, valueUri, objectsHierarchy))\n .map((nodeValue) => buildCascadeUpdateStateValue(node.attrType, valueUri, nodeValue, config, editorsState))\n );\n if (!descendants.length) {\n return [];\n }\n const ancestors = ancestorsNodes.flatMap((node) =>\n node.values\n .filter(\n ({uri}) =>\n areDLValuesInOneHierarchy(valueUri, uri, objectsHierarchy) ||\n (getBaseUri(uri) !== baseUri && areDLValuesInOneHierarchy(uri, valueUri, objectsHierarchy))\n )\n .map((nodeValue) => buildCascadeUpdateStateValue(node.attrType, valueUri, nodeValue, config, editorsState))\n );\n const ancestorsOfDescendants = ancestorsOfDescendantsNodes.flatMap((node) => {\n const acceptableDescendantsTypeUris = getRelatedStructureNodes('children', structure, node).map(\n ({attrType}) => attrType.uri\n );\n return node.values\n .filter(({uri}) =>\n descendants.some(\n ({uri: descendantUri, type: descendantType}) =>\n acceptableDescendantsTypeUris.includes(descendantType) &&\n areDLValuesInOneHierarchy(descendantUri, uri, objectsHierarchy)\n )\n )\n .map((nodeValue) => buildCascadeUpdateStateValue(node.attrType, valueUri, nodeValue, config, editorsState));\n });\n const siblings = node.values\n .filter(({uri}) => areDLValuesInOneHierarchy(uri, valueUri, objectsHierarchy))\n .map((nodeValue) => buildCascadeUpdateStateValue(node.attrType, valueUri, nodeValue, config, editorsState));\n return [...siblings, ...ancestors, ...ancestorsOfDescendants, ...descendants];\n};\n\nexport {filterRelatedParentValuesForDependentLookupValueUri, getDependentLookupStateForValueUri};\n","import {cond, isNil, T, pipe} from 'ramda';\nimport {DataTypes} from '../types';\nimport {FilterOptions} from '../constants';\nimport {evaluateDeepEntityLabel} from '../entity';\nimport {formatDataTypeValue} from '../formatting';\nimport {getResolvedLookupLabel} from '../lookups';\nimport {\n attributeUriToSearchUri,\n getAttributeSource,\n getAttrTypeLookupCode,\n isLookupAttrType,\n isNested\n} from '../metadata';\nimport {resolveLookupsList} from '../network/api';\nimport {AttributePresentations, AttributeType, PivotingValue, PrimitiveValue, SearchFilter} from '../types';\n\ntype Props = {\n attributePresentations: AttributePresentations;\n attributeType: AttributeType;\n value: PivotingValue[];\n};\nexport const getPivotingLabel = async ({attributeType, attributePresentations, value}: Props) => {\n const formatValue = formatDataTypeValue({\n attributePresentations,\n dataTypeDefinition: attributeType\n });\n const convertPivotingToValue = (pivotingValue: PivotingValue[]) => {\n const value = {};\n for (const item of pivotingValue) {\n const [key, v] = Object.entries(item)[0];\n value[key] = Array.isArray(v) ? v.map((v) => ({value: v, ov: true})) : [{value: v, ov: true}];\n }\n return {value};\n };\n const getNestedAttributeLabel = pipe(convertPivotingToValue, (entity) =>\n evaluateDeepEntityLabel(entity, attributeType.dataLabelPattern)\n );\n const getFirstValue = (value) => Object.values(value[0])[0];\n const getLookupLabel = (value: PivotingValue[]) => {\n const codeValue = getFirstValue(value);\n const lookupCode = getAttrTypeLookupCode(attributeType);\n return resolveLookupsList([\n {\n codeValue: codeValue as string,\n type: lookupCode\n }\n ]).then((response) => {\n if (Array.isArray(response)) {\n return getResolvedLookupLabel(response[0], lookupCode, codeValue);\n }\n });\n };\n const getSimpleLabel = pipe(getFirstValue, formatValue);\n\n const getLabel = cond([\n [isNested, () => getNestedAttributeLabel(value)],\n [isLookupAttrType, () => getLookupLabel(value)],\n [T, () => getSimpleLabel(value)]\n ]);\n return await getLabel(attributeType);\n};\n\ntype PivotingProps = {\n value: PrimitiveValue | PivotingValue[];\n attributeType: AttributeType;\n entityType?: string;\n};\nexport const convertPivotingValueToSearchFilters = ({\n value,\n attributeType,\n entityType = ''\n}: PivotingProps): SearchFilter[] => {\n let params: SearchFilter[] = [\n {\n fieldName: 'type',\n filter: FilterOptions.EQUALS,\n values: [entityType]\n }\n ];\n if (Array.isArray(value)) {\n params = params.concat(getParamsFilteringNested(attributeType, value));\n } else {\n params.push(createSearchParameter([value], attributeType));\n }\n return params;\n};\n\nconst getParamsFilteringNested = (attributeType: AttributeType, values: PivotingValue[]): SearchFilter[] => {\n const attributeSource = getAttributeSource(attributeType);\n const findAttributeTypeByUri = (uri: string) =>\n (attributeType[attributeSource] || []).find(\n (attribute) => attribute.uri === uri || attribute.uri.endsWith(`/${uri}`)\n );\n return values.reduce((acc: SearchFilter[], value) => {\n for (const uri in value) {\n const attrType = findAttributeTypeByUri(uri);\n const parameters = isNested(attrType)\n ? getParamsFilteringNested(attrType, value[uri] as PivotingValue[])\n : [createSearchParameter(value[uri], attrType)];\n acc.push(...parameters);\n return acc;\n }\n }, []);\n};\n\nconst createSearchParameter = (value, attributeType: AttributeType): SearchFilter => {\n if (value && value.length && !isNil(value[0]) && value[0] !== '') {\n return {\n fieldName: attributeUriToSearchUri(attributeType.uri),\n filter: attributeType.type === DataTypes.TYPE_BLOB ? FilterOptions.FULL_TEXT : FilterOptions.EQUALS,\n values: value\n };\n } else {\n return {\n fieldName: attributeUriToSearchUri(attributeType.uri),\n filter: FilterOptions.MISSING_VALUE\n };\n }\n};\n","import {equals} from 'ramda';\n\nexport const looseEquals = (a, b) => equals(JSON.parse(JSON.stringify(a)), JSON.parse(JSON.stringify(b)));\n\ntype Comparator = (a: Record<string, unknown>, b: Record<string, unknown>) => boolean;\n\nclass UserPreferencesComparator {\n private comparators: Record<string, Comparator>;\n\n constructor() {\n this.comparators = {};\n }\n\n register(name: string, fn: Comparator) {\n this.comparators[name] = fn;\n }\n\n get(name: string) {\n return this.comparators[name] ?? looseEquals;\n }\n}\n\nexport const userPreferencesComparator = new UserPreferencesComparator();\n","import * as strings from './utils/strings';\nimport * as dates from './utils/dates';\nimport * as AttributesDiff from './entity/editMode/AttributesDiff';\nimport * as AttributesEditor from './entity/editMode/AttributesEditor';\nimport * as HistoryManager from './entity/history/HistoryManager';\n\nexport * from './attributes';\nexport * from './entity';\nexport * from './filters';\nexport * from './constants';\nexport * from './collaboration';\nexport * from './types';\nexport * from './interactions';\nexport * from './validation';\nexport * from './ui';\nexport * from './uiConfiguration';\nexport * from './crosswalks';\nexport * from './metadata';\nexport * from './worker';\nexport * from './tenant';\nexport {formatDataTypeValue, formatNumber, formatNumberAsMetric, getFileName} from './formatting';\nexport * from './theme';\nexport {setRequestProvider, rawRequest, promisifyProvider} from './network';\nexport * from './network/api';\nexport {createRequestProvider} from './network/requestProvider';\n\nexport {ModeTypes, isSuggestMode, isEditMode, isViewMode, isEditableMode} from './mode';\nexport * from './permissions';\nexport {\n omitMarks,\n marksJSONReplacer,\n markNew,\n markEdited,\n markRemoved,\n markIgnored,\n checkNew,\n checkEdited,\n checkRemoved,\n checkDraftMarked,\n checkIgnored\n} from './marks';\nexport {\n applyRelationTypeObject,\n updateConnectionEntityLabel,\n getConnectionRelationUriPath,\n getConnectionRelationObjectPath,\n getConnectionRelationAttributesPath,\n getConnectionRelationDirectionPath,\n getConnectionEntityUriPath,\n getConnectionRelationTypePath,\n getStartObjectUri,\n getEndObjectUri,\n getStartObjectTypeUri,\n getEndObjectTypeUri,\n getRelationAttributesList,\n getConnectionRelationStartDatePath,\n getConnectionRelationEndDatePath,\n createRelationUpdateCommand,\n createRelationDeleteCommand,\n createRelationCreateCommand,\n createRelationRepointCommand,\n createRelationIgnoreCommand,\n createCommandExecutor,\n isValidRelationToAdd,\n isAvailableRelationBetweenEntities,\n createRelationsCommandsFromConnections,\n replaceTempUriInCommands,\n createNewConnectionWithDefaultRelationType,\n getSuitableEntityTypeUrisForRelationTypes,\n getInOutRelations,\n getDefaultRelationTypeObject,\n getEntitiesMapForConnections,\n getInOutRelationTypesForEntityTypeUri,\n optimizeCommands,\n isRelationCommandForUri,\n getConnectionRelationUriForLink,\n parseRelationsConfig\n} from './relations';\nexport {\n generateNewRelationUri,\n generateTempDCRUri,\n generateUri,\n generateTempUri,\n isTempUri,\n isRelationUri,\n getBaseUri,\n isEntityUri,\n areOneHierarchyUris,\n getLastUriPart,\n searchUriToAttrUri,\n isEntityTypeUri,\n isRelationTypeUri,\n makeAttrTypeUri,\n getAttributeTypeUriByValueUri,\n getEntityUriFromAttributeUri,\n isAttributeSearchUri,\n isFirstLevelAttributeUri,\n getParentUri,\n isDCRUri,\n isChangeRequestUri,\n getEntityUriFromDCRUri,\n getFirstLevelSearchUri\n} from './uris';\nexport * from './utils';\nexport * from './lookups';\nexport * from './trees';\nexport * from './map';\n\nconst entity = {\n AttributesDiff,\n AttributesEditor,\n HistoryManager\n};\n\nconst utils = {\n Colors: require('./utils/Colors'),\n DependencyManager: require('./utils/DependencyManager'),\n strings,\n dates\n};\n\nexport {entity, utils};\n\nexport * from './search';\nexport * from './matches';\nexport * from './dependentLookups';\nexport * from './pivoting';\nexport * from './globalContextValue';\nexport * from './preferences';\nexport * from './intl';\nexport * from './attributePresentation';\n","/**\n * This module provides font color based on background color\n * @module utils/Color\n * @type {{getColor: getColor}}\n */\nexport {getColor};\n/*\n colors from material design: first 3 digits are RGB colors of background, the last 1 or 0 - white or black color of font\n */\nvar colors = [\n [255, 235, 238, 0],\n [255, 205, 210, 0],\n [239, 154, 154, 0],\n [229, 115, 115, 0],\n [239, 83, 80, 1],\n [244, 67, 54, 1],\n [229, 57, 53, 1],\n [211, 47, 47, 1],\n [198, 40, 40, 1],\n [183, 28, 28, 1],\n [255, 138, 128, 0],\n [255, 82, 82, 1],\n [255, 23, 68, 1],\n [213, 0, 0, 1],\n [252, 228, 236, 0],\n [248, 187, 208, 0],\n [244, 143, 177, 0],\n [240, 98, 146, 1],\n [236, 64, 122, 1],\n [233, 30, 99, 1],\n [216, 27, 96, 1],\n [194, 24, 91, 1],\n [173, 20, 87, 1],\n [136, 14, 79, 1],\n [255, 128, 171, 0],\n [255, 64, 129, 1],\n [245, 0, 87, 1],\n [197, 17, 98, 1],\n [243, 229, 245, 0],\n [225, 190, 231, 0],\n [206, 147, 216, 0],\n [186, 104, 200, 1],\n [171, 71, 188, 1],\n [156, 39, 176, 1],\n [142, 36, 170, 1],\n [123, 31, 162, 1],\n [106, 27, 154, 1],\n [74, 20, 140, 1],\n [234, 128, 252, 0],\n [224, 64, 251, 1],\n [213, 0, 249, 1],\n [170, 0, 255, 1],\n [237, 231, 246, 0],\n [209, 196, 233, 0],\n [179, 157, 219, 0],\n [149, 117, 205, 1],\n [126, 87, 194, 1],\n [103, 58, 183, 1],\n [94, 53, 177, 1],\n [81, 45, 168, 1],\n [69, 39, 160, 1],\n [49, 27, 146, 1],\n [179, 136, 255, 0],\n [124, 77, 255, 1],\n [101, 31, 255, 1],\n [98, 0, 234, 1],\n [232, 234, 246, 0],\n [197, 202, 233, 0],\n [159, 168, 218, 0],\n [121, 134, 203, 1],\n [92, 107, 192, 1],\n [63, 81, 181, 1],\n [57, 73, 171, 1],\n [48, 63, 159, 1],\n [40, 53, 147, 1],\n [26, 35, 126, 1],\n [140, 158, 255, 0],\n [83, 109, 254, 1],\n [61, 90, 254, 1],\n [48, 79, 254, 1],\n [227, 242, 253, 0],\n [187, 222, 251, 0],\n [144, 202, 249, 0],\n [100, 181, 246, 0],\n [66, 165, 245, 0],\n [33, 150, 243, 1],\n [30, 136, 229, 1],\n [25, 118, 210, 1],\n [21, 101, 192, 1],\n [13, 71, 161, 1],\n [130, 177, 255, 0],\n [68, 138, 255, 1],\n [41, 121, 255, 1],\n [41, 98, 255, 1],\n [225, 245, 254, 0],\n [179, 229, 252, 0],\n [129, 212, 250, 0],\n [79, 195, 247, 0],\n [41, 182, 246, 0],\n [3, 169, 244, 0],\n [3, 155, 229, 1],\n [2, 136, 209, 1],\n [2, 119, 189, 1],\n [1, 87, 155, 1],\n [128, 216, 255, 0],\n [64, 196, 255, 0],\n [0, 176, 255, 0],\n [0, 145, 234, 1],\n [224, 247, 250, 0],\n [178, 235, 242, 0],\n [128, 222, 234, 0],\n [77, 208, 225, 0],\n [38, 198, 218, 0],\n [0, 188, 212, 0],\n [0, 172, 193, 0],\n [0, 151, 167, 1],\n [0, 131, 143, 1],\n [0, 96, 100, 1],\n [132, 255, 255, 0],\n [24, 255, 255, 0],\n [0, 229, 255, 0],\n [0, 184, 212, 0],\n [224, 242, 241, 0],\n [178, 223, 219, 0],\n [128, 203, 196, 0],\n [77, 182, 172, 0],\n [38, 166, 154, 0],\n [0, 150, 136, 1],\n [0, 137, 123, 1],\n [0, 121, 107, 1],\n [0, 105, 92, 1],\n [0, 77, 64, 1],\n [167, 255, 235, 0],\n [100, 255, 218, 0],\n [29, 233, 182, 0],\n [0, 191, 165, 0],\n [232, 245, 233, 0],\n [200, 230, 201, 0],\n [165, 214, 167, 0],\n [129, 199, 132, 0],\n [102, 187, 106, 0],\n [76, 175, 80, 0],\n [67, 160, 71, 1],\n [56, 142, 60, 1],\n [46, 125, 50, 1],\n [27, 94, 32, 1],\n [185, 246, 202, 0],\n [105, 240, 174, 0],\n [0, 230, 118, 0],\n [0, 200, 83, 0],\n [241, 248, 233, 0],\n [220, 237, 200, 0],\n [197, 225, 165, 0],\n [174, 213, 129, 0],\n [156, 204, 101, 0],\n [139, 195, 74, 0],\n [124, 179, 66, 0],\n [104, 159, 56, 1],\n [85, 139, 47, 1],\n [51, 105, 30, 1],\n [204, 255, 144, 0],\n [178, 255, 89, 0],\n [118, 255, 3, 0],\n [100, 221, 23, 0],\n [249, 251, 231, 0],\n [240, 244, 195, 0],\n [230, 238, 156, 0],\n [220, 231, 117, 0],\n [212, 225, 87, 0],\n [205, 220, 57, 0],\n [192, 202, 51, 0],\n [175, 180, 43, 0],\n [158, 157, 36, 0],\n [130, 119, 23, 1],\n [244, 255, 129, 0],\n [238, 255, 65, 0],\n [198, 255, 0, 0],\n [174, 234, 0, 0],\n [255, 253, 231, 0],\n [255, 249, 196, 0],\n [255, 245, 157, 0],\n [255, 241, 118, 0],\n [255, 238, 88, 0],\n [255, 235, 59, 0],\n [253, 216, 53, 0],\n [251, 192, 45, 0],\n [249, 168, 37, 0],\n [245, 127, 23, 0],\n [255, 255, 141, 0],\n [255, 255, 0, 0],\n [255, 234, 0, 0],\n [255, 214, 0, 0],\n [255, 248, 225, 0],\n [255, 236, 179, 0],\n [255, 224, 130, 0],\n [255, 213, 79, 0],\n [255, 202, 40, 0],\n [255, 193, 7, 0],\n [255, 179, 0, 0],\n [255, 160, 0, 0],\n [255, 143, 0, 0],\n [255, 111, 0, 0],\n [255, 229, 127, 0],\n [255, 215, 64, 0],\n [255, 196, 0, 0],\n [255, 171, 0, 0],\n [255, 243, 224, 0],\n [255, 224, 178, 0],\n [255, 204, 128, 0],\n [255, 183, 77, 0],\n [255, 167, 38, 0],\n [255, 152, 0, 0],\n [251, 140, 0, 0],\n [245, 124, 0, 0],\n [239, 108, 0, 1],\n [230, 81, 0, 1],\n [255, 209, 128, 0],\n [255, 171, 64, 0],\n [255, 145, 0, 0],\n [255, 109, 0, 0],\n [251, 233, 231, 0],\n [255, 204, 188, 0],\n [255, 171, 145, 0],\n [255, 138, 101, 0],\n [255, 112, 67, 0],\n [255, 87, 34, 1],\n [244, 81, 30, 1],\n [230, 74, 25, 1],\n [216, 67, 21, 1],\n [191, 54, 12, 1],\n [255, 158, 128, 0],\n [255, 110, 64, 0],\n [255, 61, 0, 1],\n [221, 44, 0, 1],\n [239, 235, 233, 0],\n [215, 204, 200, 0],\n [188, 170, 164, 0],\n [161, 136, 127, 1],\n [141, 110, 99, 1],\n [121, 85, 72, 1],\n [109, 76, 65, 1],\n [93, 64, 55, 1],\n [78, 52, 46, 1],\n [62, 39, 35, 1],\n [250, 250, 250, 0],\n [245, 245, 245, 0],\n [238, 238, 238, 0],\n [224, 224, 224, 0],\n [189, 189, 189, 0],\n [158, 158, 158, 0],\n [117, 117, 117, 1],\n [97, 97, 97, 1],\n [66, 66, 66, 1],\n [33, 33, 33, 1],\n [236, 239, 241, 0],\n [207, 216, 220, 0],\n [176, 190, 197, 0],\n [144, 164, 174, 0],\n [120, 144, 156, 1],\n [96, 125, 139, 1],\n [84, 110, 122, 1],\n [69, 90, 100, 1],\n [55, 71, 79, 1],\n [38, 50, 56, 1],\n [0, 0, 0, 1],\n [255, 255, 255, 0]\n];\n\n/**\n * Use this method to get the font color. Returns 1 for white, or 0 for all other colors.\n * @param {string} color - Background color in hex format, for example <code>#ffffff</code>\n * @static\n */\nfunction getColor(color) {\n var minMetric = null;\n var fontColor;\n var rgbColor = [\n parseInt(color.substring(1, 3), 16),\n parseInt(color.substring(3, 5), 16),\n parseInt(color.substring(5, 7), 16)\n ];\n colors.forEach(function (mdColor) {\n // metric is the sum of abs differences\n var metric =\n Math.abs(rgbColor[0] - mdColor[0]) +\n Math.abs(rgbColor[1] - mdColor[1]) +\n Math.abs(rgbColor[2] - mdColor[2]);\n if (minMetric === null || metric < minMetric) {\n minMetric = metric;\n fontColor = mdColor;\n }\n });\n return fontColor ? fontColor[3] : 0;\n}\n","export {Node, resolve, findNode, findParentNode, getDependencyOrder};\n\nfunction Node(info) {\n var edges = [];\n return {\n getInfo: function () {\n return info;\n },\n getEdges: function () {\n return edges;\n },\n removeEdge: function (edge) {\n var index = edges.indexOf(edge);\n edges.splice(index, 1);\n },\n addEdge: function (edge) {\n edges.push(edge);\n }\n };\n}\nfunction resolve(node, action) {\n action(node);\n node.getEdges().forEach(function (edge) {\n resolve(edge, action);\n });\n}\n\nfunction getDependencyOrder(node) {\n var results = [];\n node.getEdges().forEach(function (edge) {\n results.push.apply(results, getDependencyOrder(edge));\n });\n results.push(node);\n return results;\n}\n\nfunction findNode(startNode, find) {\n var res = null;\n if (startNode.getInfo() === find) {\n return startNode;\n }\n var edges = startNode.getEdges();\n for (var i = 0; i < edges.length; i++) {\n res = findNode(edges[i], find);\n if (res) {\n break;\n }\n }\n return res;\n}\nfunction findParentNode(startNode, find) {\n var res = null;\n var hasNode = startNode.getEdges().some(function (item) {\n return item.getInfo() === find;\n });\n if (hasNode) {\n return startNode;\n }\n var edges = startNode.getEdges();\n for (var i = 0; i < edges.length; i++) {\n res = findParentNode(edges[i], find);\n if (res) {\n break;\n }\n }\n return res;\n}\n"],"names":["normalize","str","replace","search","whereStr","whatStr","toLowerCase","includes","sort","curry","sortOrder","strA","strB","isAsc","removeLineBreaks","isActiveObject","object","startDate","endDate","now","Date","isEmptyValue","anyPass","isEmpty","isNil","promisifyCallback","fn","Promise","promiseAllSettled","promises","all","map","promise","then","value","status","catch","reason","isValidMomentDate","moment","isValid","isValidMomentDateOrNull","either","isDateInRange","min","max","date","isBetween","momentToDate","toDate","clearDateTime","setHours","getLocaleFormat","longDateFormat","isToday","momentable","isSame","toLocalDate","timestamp","localDate","setFullYear","getUTCFullYear","setMonth","getUTCMonth","setDate","getUTCDate","getUTCHours","setMinutes","getUTCMinutes","setSeconds","getUTCSeconds","setMilliseconds","getUTCMilliseconds","toUtcDate","utcTimestamp","UTC","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getBoundOfDay","bound","inUtc","valueOf","getStartOfDay","getEndOfDay","formatDate","format","formatTime","formatDateTime","isOneDigitMask","equals","isTwoDigitMask","isFourDigitMask","isThreeCharsMask","test","isFourCharsMask","isDigitOnlyMask","isDigitWithCharsMask","getMomentFormatFromMonthMask","cond","always","T","getMomentFormatFromDayMask","getMomentFormatFromYearMask","getMomentFormatFromHourMask","mask","is12HourClock","both","getMomentFormatFromMinuteMask","getMomentFormatFromSecondsMask","dateMaskRegExp","getMomentFormatFromDateMask","maskMatchGroups","matchAll","length","monthMask","monthDelimiter","propOr","dayMask","dayDelimiter","yearMask","yearDelimiter","join","timeMaskRegExp","getMomentFormatFromTimeMask","hourMask","hourDelimiter","minuteMask","minuteDelimiter","secondsMask","secondsDelimiter","pipe","last","formatArray","reject","period","appendPeriodFormat","init","append","when","getMomentFormatFromDateTimeMask","dateMask","timeMask","indexOf","inc","splitAt","__","trim","parseTimestamp","Number","isNaN","durationToTimestamp","amount","unit","subtract","getHash","split","val","charCodeAt","reduce","hash","chr","Maybe","constructor","this","isNone","extract","orSome","defaultValue","transformer","None","Some","undefined","debounce","f","ms","timer","args","onComplete","apply","clearTimeout","setTimeout","orderByArrayComparator","arrayWithReferenceOrder","property","a","b","getter","prop","identity","getFirstElementIfArray","is","Array","wrapInArrayIfNeeded","x","isArray","wrapInArray","isUrl","some","scheme","String","startsWith","isEmail","email","addProtocolToLink","link","parseBoolean","isObject","getAllPaths","tree","leaves","walk","obj","path","n","Object","prototype","hasOwnProperty","call","parseInt","concat","push","FilterOptionsValues","EQUALS","NOT_EQUALS","EXISTS","FULL_TEXT","HAS_ALL","MISSING_VALUE","IN_RANGE","LT","LTE","GT","GTE","STARTS_WITH","COUNT_EQUALS","COUNT_NOT_EQUALS","COUNT_LT","COUNT_LTE","COUNT_GT","COUNT_GTE","COUNT_RANGE","IN_FILE","NOT_IN_FILE","CONTAINS","ON","BEFORE","AFTER","WITHIN","AdditionalFilterOptionsValues","LIST_EQUALS","NOT_LIST_EQUALS","LIST_EQUALS_CASE_SENSITIVE","NOT_LIST_EQUALS_CASE_SENSITIVE","FilterOptionsLabels","OldFilterOptions","convertOldFilterOption","filter","IN","NOT_IN","DateRangeValue","SearchDrivenDateRangeValues","AllDateRangeValues","acc","rangeKey","DateRangeLabels","LAST_DAY","LAST_3DAYS","LAST_WEEK","LAST_MONTH","LAST_6MONTHS","LAST_YEAR","PICK_DATE","DraftMarks","NEW","REMOVED","EDITED","IGNORED","ACTIVE_ONLY","INACTIVE_ONLY","ALL","NO_LABEL","LOCALE_ATTRIBUTE_PRESENTATION","Directions","ErrorType","ErrorSource","ErrorSeverity","ApiErrorCode","DateRangeTypes","AttributeValuePathItemType","CollaborationObjectTypes","RelationTypeDirection","Order","ActivityFilter","SearchOperator","MapSearch","SearchResultMode","PreviewPanelMode","UnmergeOperation","NODE_EDITING_MODES","PredefinedWorkflowProcessType","WorkflowPriority","FillRateState","UniquenessAnalysisState","DQMetric","DQDataLevel","Operations","RelationDirections","StatusVF","ChartTypes","DashboardViewTypes","ProfileViewTypes","HistoryMode","ValidationServiceOption","PerspectiveClass","ScreenItemType","CustomScriptPlatform","SortingStrategy","GraphLayout","CustomAction","RequestAction","DCRTypes","DCRChangeRequestState","DCROperationTypes","NumberPresentationStrategy","DataTypes","Mode","Operation","ActivenessAttrTypes","type","label","i18n","uri","name","singleValue","faceted","EntityAttrTypes","id","roles","tags","WorkflowAttrTypes","workflow","assignee","step","dueDate","CollaborationAttrTypes","commenter","RdmAttrTypes","notResolved","AuditAttrTypes","createdBy","updatedBy","createdTime","updatedTime","PotentialMatchesAttrTypes","matches","hideForDataTenant","matchScore","relevanceScore","matchAction","CrosswalksAttrTypes","sourceSystems","count","reltioLoadDate","createDate","updateDate","deleteDate","publishDate","sourceTable","MatchRulesAttrNames","MatchRulesAttrTypes","matchRules","MLRecommendedMatch","NOT_MATCH","ModeTypes","EDITING","SUGGESTING","VIEWING","isSuggestMode","isEditMode","isViewMode","isEditableMode","DeviceType","PropTypes","UIPermissions","deviceTypes","LookupValueType","lookupCode","SimpleLookupType","displayName","parent","FilterValueTypeType","FilterValueType","FilterType","fieldName","values","CardinalityType","minValue","maxValue","AttributeTypeType","description","hidden","searchable","access","cardinality","RelationTypeType","typeColor","direction","startObject","endObject","EntityTypeType","typeIcon","typeImage","attributes","InteractionTypeType","memberTypes","extendsTypeUri","GraphTypeType","relationshipTypeURIs","MetadataType","schemaVersion","entityTypes","groupTypes","relationTypes","graphTypes","interactionTypes","sources","EntityType","RelationType","NestedAttributeValueType","ov","ReferenceAttributeValueType","refEntity","refRelation","ModeType","AttributeErrorType","isRequired","attributeTypeUri","parentUri","message","ComplexAttributeType","attributeType","showEmptyEditors","lazy","mode","metadata","ownError","errors","crosswalks","onAddAttributes","onAddOneMore","onDeleteAttribute","onChangeAttribute","additionalControlsRenderer","hideDeleteButton","showNonOv","state","expanded","NestedAttributeType","attributeValue","ReferenceAttributeType","SimpleAttributeValueType","lookupRawValue","RelationsConfigContentType","inRelations","outRelations","groups","nextEntry","SortOrderType","RelationsConfigType","content","allowOnlyCreateNew","sortColumn","icon","caption","canCreate","canRead","canUpdate","canDelete","editingEnabled","ConnectionEntityType","entityUri","entityType","entityLabel","ConnectionRelationType","relationUri","relationType","relationLabel","ConnectionType","entity","relation","KeywordSearchType","isRawFilter","DataTenantType","availableEntityTypes","operatorOptions","STATUS_CODE_FIELD","stringifyIfObject","JSON","stringify","getRequestErrorStatusCode","error","originalResponse","getRequestErrorMessage","defaultError","preferredErrorFieldName","fieldsByPriority","statusCode","getStatusTextByStatusCode","isAbortError","e","countPercents","numbers","fractionDigits","total","sum","toPrecision","num","toFixed","percentsData","index","percent","fixedPercent","diff","percentsTotal","delta","pluck","deltaSign","Math","sign","sortedPercentsData","deltaFix","pow","i","sortBy","symbols","svg2Url","encodeURIComponent","gif2Url","gif","getIntervalUnitLabel","getPartInfo","fullUri","attrType","errorMessage","console","result","valueUri","substr","hasChildren","getInfoByUri","parts","info","addAttribute","nestingLevel","find","complexAttributeValue","referenceAttributeValue","lookupVal","lookupValue","refVal","splice","editAttribute","valueToEdit","toString","updateAttrValue","forEach","bind","isReference","refValueToEdit","attrValue","isSimpleAttributeValue","removeAttribute","complexAttribute","attr","editRoles","editTags","editStartDate","entityOrRelation","editEndDate","TEMP_URI_FOR_API","TEMP_URI_FOR_API_RELATIONS","makeBaseUri","nanoid","customAlphabet","generateUniqPart","generateTempDCRUri","generateTempUri","uriPrefix","createTempUriGenerator","generateUri","attributeTypeName","baseUri","isTempUri","generateTempEntityUri","generateNewRelationUri","getBaseUri","isRelationUri","isEntityUri","isEntityTypeUri","defaultTo","isRelationTypeUri","areOneHierarchyUris","childUri","getFirstUriPart","head","getLastUriPart","getFirstLevelSearchUri","searchUri","slice","searchUriToAttrUri","entityTypeUri","collectionName","attributesPart","makeAttrTypeUri","parentTypeUri","attrTypeName","getAttributeTypeUriByValueUri","typeUri","valueUriArr","entityTypeUriArr","idx","flat","getEntityUriFromAttributeUri","attributeUri","match","isAttributeSearchUri","isTopLevelUri","valueOrTypeUri","numberOfRootParts","isFirstLevelAttributeUri","getParentUri","sliceTo","tempUriToApiFormat","isChangeRequestUri","isDCRUri","getEntityUriFromDCRUri","getReferencedEntityTypeUriFromAttrType","getRelationTypeUriFromAttrType","getReferencedAttrTypeUrisFromAttrType","getReferencedAttrTypesUrisStartingWith","getReferencedRelationAttrTypesUris","getReferencedEntityAttrTypesUris","isRelationAttrType","getReferencedRelationAttrTypes","isAllowedReferencedSubAttribute","referencedUris","isTypeaheadAttrType","allPass","propSatisfies","isSpecialAttribute","propEq","isEnumAttrType","has","getAttrDataType","getAttrDataTypeDefinition","pick","isAutoGeneratedAttribute","autoGenerated","parentAutoGenerated","isAnalyticAttribute","not","getAttributeSource","isHiddenAttribute","isSpecificAttributeType","typeName","isNested","isImage","isComplexAttribute","attributeUriToSearchUri","attrUri","parents","uriParts","chain","getAttrTypeLookupCode","isLookupAttrType","Boolean","isDependentLookupAttrType","isRDMLookupAttrType","getAttributeTypesHierarchyByUri","rootUri","sourceProp","getLevel","allTypes","rootType","rootLevel","getHierarchyForType","parentType","level","currentLevelUri","currentLevelName","currentLevelType","getAttributeTypeSubAttributes","isResultValid","findAttributeTypeByUri","hierarchy","attrTypeUri","getEditableAttributeTypeSubAttributes","allSubAttributes","DATE_TYPES","TIMESTAMP_BASED_TYPES","isDateType","isTimestampBasedType","NUMERIC_TYPES","isNumericType","isFloatingType","BOOLEAN_TYPES","isBooleanType","URL_TYPES","isUrlType","isEmailType","isSSNType","ConfigPermissions","checkConfigPermission","permission","config","hardcodedRoles","READ","configRoles","role","getEntityType","getExtendsTypeUri","isInHierarchy","uriOrParent","isAncestorUri","getInheritancePath","currentTypeUri","getPropWithInheritance","extendsTypeURI","findClosestCommonAncestor","entityTypeUris","inheritancePaths","intersection","getEntityTypeImage","getDescendantEntityTypes","getRelationType","relationTypeUri","getRelationTypeLabelFromMetadata","getRelationEntityTypesUris","isRelationWithEntityType","startUri","endUri","createRelationTypesLabelsMap","inOutRelationsDeduplicator","reversedContextLabels","labelsMap","filterRelations","targetDirection","objectId","OUT","directionalContext","labelPattern","isNotDuplicatedInRelation","isNotDuplicatedOutRelation","getDirectionalLabelFromObject","pathOr","getRelationTypePropWithInheritance","MetadataPermissions","checkMetadataPermissions","permissions","metadataType","every","checkMetadataPermission","isReadOnly","checkBasicMetadataPermission","checkMetadataPermissionForCurrentMode","INITIATE_CHANGE_REQUEST","checkMetadataForCreate","CREATE","checkMetadataForDelete","DELETE","checkMetadataForUpdate","UPDATE","checkCanImportEntityOfType","MERGE","checkCanCreateCrosswalk","checkCanEditCrosswalk","checkCanDeleteCrosswalk","findMatchActionConfig","matchActionConfig","matchRuleUri","getMatchType","getRulesConfig","checkMergePermission","rulesConfig","allowMerge","canCreateRelationBetweenEntities","startEntity","endEntity","checkCreateRelationPermission","mainEntity","createRelationConfigs","createRelation","getActionPermissionForMatch","uiConfig","canMerge","canAddRelation","canMark","getActionPermissionForMatches","mergeWith","and","checkCanNotOperate","checkCanOperate","complement","checkCanReadAttribute","checkCanCreateAttribute","checkCanEditAttribute","isReltioCrosswalk","isNew","checkUpdate","checkCreate","F","checkCanDeleteAttribute","checkDelete","checkUpdateForSubAttributes","checkSubAttributesPermissionsForCurrentMode","checkDeleteForSubAttributes","checkSubAttributesPermissions","subAttributesTypes","unless","of","subAttrType","isReadableAttribute","SUPER_USER_SERVICE_ID","ALL_TENANTS_ID","SUPER_USER_RESOURCES","getRules","allowedPermissionsNames","permissionsNames","permissionsConfig","superUserEnvironments","NON_SECURED","SECURED","userInfo","userPermissions","ADMIN","containsRole","params","tenantId","permissionToCheck","keys","permissionPath","serviceAndResources","serviceId","allowedResourcePathStr","allowedResourcePath","endsWith","resourcePath","superUserResources","env","usersAllowedResourcePath","pathArray","superUserCheck","userPrivileges","privileges","privilege","allowedTenants","privilegeExists","entry","checkTenantOrSuperAdmin","checkResourcePermission","tenant","UserPermissions","CAN_EXPORT","CAN_EXPORT_ACTIVITIES","CAN_IMPORT_ENTITIES_FROM_DT","CAN_READ_ENTITIES_FROM_DT","CAN_START_PROCESS_INSTANCE_SEARCH_QUERY","CAN_VIEW_PROCESS_INSTANCE_SEARCH_QUERY","CAN_CREATE_ENVIRONMENT_CONFIG_JAR","CAN_CREATE_CONFIG_JAR","CAN_VIEW_ENVIRONMENT_CONFIG_JAR","CAN_VIEW_CONFIG_JAR","CAN_MANAGE_WORKFLOW_DEFINITION","CAN_VIEW_WORKFLOW_DEFINITION","CAN_MANAGE_WORKFLOW_ENVIRONMENT_DEFINITION","CAN_UPDATE_WORKFLOW_DATA_TASK","CAN_READ_WORKFLOW_DATA_TASK","CAN_CONFIG_ENVIRONMENT_REGISTER","CAN_UPDATE_PROCESS_INSTANCE","CAN_EXECUTE_WORKFLOW_JOBS","CAN_EXECUTE_WORKFLOW_JOBS_TERMINATE_PROCESS_INSTANCE","CAN_EXECUTE_WORKFLOW_JOBS_UPDATE_TASKS","CAN_EXECUTE_WORKFLOW_JOBS_VALIDATE_TASKS","CAN_EXECUTE_WORKFLOW_JOBS_SYNC_BUSINESS_PROCESS_DATA","CAN_VIEW_WORKFLOW_JOBS","CAN_MAKE_BULK_UPDATE","CAN_OPEN_DATA_LOADER_EXECUTE","CAN_OPEN_DATA_LOADER_READ","CAN_BULK_DELETE_PROFILES","CAN_READ_MDM_DATA_ENTITIES","IS_FREEMIUM_ADMIN","CAN_READ_DVF","CAN_READ_PREFERENCES","CAN_UPDATE_PREFERENCES","CAN_CREATE_PREFERENCES","CAN_DELETE_PREFERENCES","resourcePermissionsConfig","checkUserPermissions","rule","canUserMakeExport","canUserMakeActivitiesExport","canUserImportEntitiesFromDT","canUserReadEntitiesFromDT","canUserStartProcessInstanceFromQuery","canUserUpdateProcessInstance","canUserViewWorkflowDefinition","canUserRegisterConfigEnvironments","canUserUpdateWorkflowDataTask","canUserReadWorkflowDataTask","canUserManageWorkflowDefinition","canUserManageWorkflowEnvironmentDefinition","canUserExecuteWorkflowJobsSyncBusinessProcessData","canUserExecuteWorkflowJobsValidateTasks","canUserExecuteWorkflowJobsUpdateTasks","canUserExecuteWorkflowJobsTerminateProcessInstance","canUserExecuteWorkflowJobs","canUserCreateWorkflowEnvironmentConfigJar","canUserCreateWorkflowConfigJar","canUserViewWorkflowEnvironmentConfigJar","canUserViewWorkflowConfigJar","canUserViewProcessInstanceSearchQuery","canUserViewWorkflowJobs","canUserMakeBulkUpdate","canUserOpenDataLoader","canUserDeleteProfiles","canUserGetDQStatistic","canUserReadDVF","isFreemiumAdmin","filterOutHiddenAttributes","getFilteredAttributeTypes","isAcceptableFn","attrTypes","getCreatableAttributeTypes","getCreatableOrReadableAttributeTypes","getReadableAttributeTypes","getAttributesList","data","getReadableAttributesList","getAnalyticsAttributesList","getEntityAttributesFromMetadata","converge","mapAttributes","clb","evolve","concatMatchGroupsWithHiddenGroups","matchGroups","uniq","hasValuesAndLookups","removeValuesFromLookup","dissoc","renameLookupCodeToDependentLookupCode","dependentLookupCode","hasDependentLookupAttribute","dependentLookupAttributes","hasDependentLookupAttributes","memoizeOne","processAttributesCardinality","forceValidate","updatedEntityType","required","useDependentLookups","parseLookups","parseLookupAttribute","processHiddenMatchGroups","processCardinality","forEachAttributeType","callback","validateAttributeName","validateMetadata","getGraphType","graphTypeUri","getRelationshipTypeUrisFromGraphType","getGraphTypesForEntityType","hasRelationsWithEntityType","getAllEntityTypesForGraphType","isMLMatchRule","checkMatchGroups","checkFunction","any","hasMatchRulesWithoutML","hasMlMatchRule","getMatchGroups","getMatchRule","getMatchRuleLabel","getMatchRules","matchRuleUris","metadataRules","otherRules","without","matchName","partitionByMlMatch","partition","isMatchRuleLogicOperator","isMatchRuleComparisonOperator","EXACT","EXACT_OR_NULL","EXACT_OR_ALL_NULL","NOT_EXACT_SAME","FUZZY","isMatchRuleOperatorWithValues","getEntityAttributesFromMatchRule","toPairs","key","getEntityAttributesFromMatchRules","getEntityTypeMatchAttributes","getAttributesForMatchRules","getInteractionType","interactionTypeUri","getInteractionAttributesFromMetadata","getInteractionTypesForEntityType","objectTypeURI","hasEntityType","hasMembersWithEntityType","getRequiredAttributeTypesByTypeUri","deep","attrTypesFilter","parentAttrTypes","getRequiredAttributeTypes","isEntityType","flatMap","attrs","referencedAttrTypeUris","relationAttrType","relationEditorAttributeTypesSelectionStrategy","patterns","complexPattern","pattern","businessCardAttributeURIs","referencedEntityAttributeTypesSelectionStrategy","referenceAttrType","allowedUris","order","item1","item2","localizeDataFields","fieldSet","localizeFieldValue","field","item","LOCALIZABLE_METADATA_KEYS","normalizeMetadata","mergeRight","attributeTypes","categoryTypes","changeRequestTypes","survivorshipStrategies","findSourceSystemByUri","getSourceSystemLabel","lastUriPart","getCrosswalksTypes","abbreviation","getCrosswalkType","substring","lastIndexOf","getRoleLabel","getRolesForEntityType","entityTypeRoleURIs","getAttributesTree","entityOrAttrType","isAcceptableAttributeFn","collectionNames","getAttributesTreeFromAttributes","fromNull","attribute","children","getAllAttributeTypesTree","getAttributeTypesTree","getAnalyticsAttributeTypesTree","flatAttributeTreeNodeWithSimplesOnly","node","flatAttributeTreeNode","getGroupLabelByTypeUri","getSurvivorshipStrategyWithName","getDefaultSurvivorshipStrategy","firstStrategy","getSurvivorshipStrategy","isAvailableRelationType","isAvailableEntityType","isCreatableEntityType","isAvailableEntityTypeUri","curryN","isAvailableRelationTypeUri","isOv","isAttributeValueLink","isAttributeValueUrl","isAttributeValueEmail","getReferencedPropFromAttrValue","propName","getReferencedEntityFromAttrValue","getReferencedRelationFromAttrValue","convertReferencedEntityForAttrValue","objectURI","createReferencedRelationForAttrValue","getReferencedEntityUri","getReferencedRelationUri","getReferencedEntityTypeUri","getReferencedEntityUriFromAttrValue","getReferencedRelationUriFromAttrValue","getReferencedEntityTypeUriFromAttrValue","addReferencedRelationCrosswalks","referencedRelation","refCrosswalks","crosswalk","attributeURIs","prepareReferencedPropsForAPI","findAttributeValuesByTypeUri","group","attrTypeChain","entityOrRelationType","attrCollectionName","parentObjects","startIndex","currentAttrType","newParentObjects","parentObject","objValue","uris","referencedAttributeURIs","parentAttrType","attrValues","typePath","findValueInAttributesByUriSuffix","uriSuffix","rest","currentLevelValue","restUri","findAttributeValueByUri","getAttributeValue","getAttributeValueWithOvFlag","getAttributeValueWithUri","getFilteredAttributeValuesByPath","filterFn","attrPath","attrName","nextPath","arr","getValueByFn","getAttributeValueFn","ifElse","getFilteredPickedAttributeValuesByPath","pickFn","getAttributeValuesByPath","getOvAttributeValuesByPath","getAttributeValuesByPathWithOvFlag","getOvAttributeValuesByPathWithOvFlag","getOvAttributeValuesByPathWithUri","findAttributeValues","attributeName","findReferenceAttributeByRefEntityUri","refEntityUri","flatten","findSiblingsAttributeValues","dropLast","ACTIVENESS_ATTR_TYPES","isActivenessAttrType","getActivenessAttributes","assoc","getDataTenantSpecialAttributeFieldName","fieldNameForRequest","dataTenantId","SPECIAL_ATTRIBUTES_NAMES_WITH_DATA_TENANTS","SpecialAttrTypes","SPECIAL_ATTRIBUTES_NAMES_WORKFLOW","t","filterWorkflowAttrTypes","addSpecialDataTenantsAttrTypes","dataTenants","attrTypesToAdd","dataTenant","getSpecialAttrTypeByFieldName","isTypeAttrType","isMatchRuleAttrType","isSourceSystemAttrType","ENTITY_SPECIAL_ATTR_TYPES","isEntitySpecialAttrType","addEntitySpecialAttribute","removeEntitySpecialAttribute","editEntitySpecialAttribute","isRoleAttrType","isTagAttrType","createNewAttribute","createNewAttributeValue","createDefaultValues","attributeTypesWithDefaultValues","defaultValues","subAttributes","addToEntityRequiredAttributes","attrTypeFilter","updatedEntity","addDefaultValuesToComplexAttribute","addDefaultValuesToAttributes","attrTypesWithoutValues","checkExistedValues","mapObjIndexed","newAttribute","produce","draftEntity","AttributesEditor","addNewAttribute","isEmptyString","rejectEmptyValues","cleanAttributesWith","deleteEmptyComplex","valueTransformer","prepareStructureForApi","omit","cleanAttributes","addEntityAttributes","changeEntityAttribute","removeEntityAttribute","getPinnedAttributesForUser","pinnedAttributes","userRoles","IMAGES_SUB_ATTRIBUTES","getImageAttributeFirstUrl","ovOnly","subAttribute","imageValue","subAttributeValue","firstValue","getImageSubAttributeValue","getImageAttributeOvUrl","getImageAttributeOvPreviewUrl","getImageAttributeOvThumbnailUrl","getImageAttributeThumbnailUrl","getFilteredAttributesList","checkValues","analyticsAttributes","source","nameProp","getAttributesListForReadMode","readableAttrTypes","getAttributesListForEditMode","provider","setRequestProvider","_provider","rawRequest","url","options","promisifyProvider","resolve","res","err","errorCode","MAX_DEPENDENT_LOOKUP_VALUES","getDependentLookups","displayNamePrefix","offset","sortByDisplayName","asc","method","body","headers","getLookups","once","resolveLookupsList","lookupsList","cascadeUpdate","updatedValue","generateQuery","compose","generateQueryString","s","generateValuableQueryString","getFilterOptionLabel","option","makeCompositeFilterOption","prefix","parseCompositeFilterOption","isCompositeFilterOption","isEquivalentToBasicOption","basicOption","isEquivalentToOneOfOptions","basicOptions","isRangeFilterOption","FilterOptions","isFilterOptionWithoutValues","getFilterOptionArity","checkIfOptionHasValues","isMultiValueOption","isCountFilterOption","isFileFilterOption","countOptionToRegularOption","countOption","isDateFilterOption","isDateRangeFilterOption","CompatibleFilterGroups","isCompatibleFilters","filter1","filter2","filterGroup","propsExcept","FilterOptionsGroups","OPTIONS_FOR_STRING","OPTIONS_FOR_DATE","OPTIONS_FOR_BOOLEAN","OPTIONS_FOR_BLOB","OPTIONS_FOR_NUMBER","OPTIONS_FOR_LOOKUP","OPTIONS_FOR_ENUM","OPTIONS_FOR_ID","OPTIONS_FOR_COUNT","OPTIONS_FOR_COMPLEX","OPTIONS_FOR_UNKNOWN_TYPE","dataTypeDefinition","filterOptions","dataType","dataTypeToFilterOptions","isAndOperator","operator","andNot","isOrOperator","or","orNot","hasOrInOperations","operations","areAllOperatorsAnd","validOperators","items","shiftDownOperators","itemsWithOperators","contentIndex","currentContentsWithOperator","isFirst","shiftUpOperators","isLast","wrapInBrackets","areBracketsBalanced","stack","openToClosedMap","closedToOpenMap","invertObj","char","pop","wrapQueryWithBrackets","query","wrapAnyOperator","orOperators","operators","hasOperator","startsWithNot","alreadyWrapped","DEFAULT_OPERATOR","clauses","addClause","clause","build","orBuild","buildWithOperators","clauseIndex","isFirstClause","newClause","isNegationOperator","mapFilterValue","mapFn","mapValue","filterValueToString","escapeQueryValue","c","wrapInQuotes","wrapInDoubleQuotes","multiValueFilter","filterClauseFn","filterValueToQueryString","filterValueToQueryStringWithQuotes","getFilterValueLabel","getDataTypeDefinitionForFilterValue","valueDataTypeDefinition","DATE_RANGE_VALUES","isOutdatedDateRangeValue","isDateRangeValue","getRangeOptionLabel","dateRangeLabels","getDateRangeOptions","dateRangeValues","getDateRangeByValue","currentDate","startOf","getDateInterval","start","end","endOf","getDateRangeByDatePeriod","getDateRange","GlobalContextValue","globalContextValues","setGlobalContextValue","getGlobalContextValue","replaceCurrentUserVariableToUsername","CurrentUser","joinFilterStrings","joinString","filterStrings","buildFilterClause","valuesString","getFilterValuesByArity","arity","buildBasicFilterString","filterArity","buildComplexFilterString","wrapInWildCards","addURLPrefix","isMultiValue","getFileFilterString","filterString","transformTimestampValue","isUTC","buildDateFilterString","filterOption","isFilterForTimestampBasedAttribute","BASIC_FILTER_BUILD_RULES","filterBuilder","FilterBuilder","buildTypeNotEqualsFilterString","buildTimestampNotEqualsFilterString","preparedValue","lng","ltd","radius","validateFilter","rawFilter","validateFilterValues","validateFilterValue","isInteger","specialAttributesRoots","getRootFieldName","fieldNamePath","attrsIndex","getParentFieldName","mergeChildren","left","right","mergeFilterHierarchyToList","mergeValues","filterHierarchyList","filterHierarchy","isChildList","filterHierarchyIndex","findIndex","existingFilterHierarchy","adjust","mergeDeepWithKey","buildFilterHierarchyList","rootFieldName","addParent","buildFilterHierarchy","canWrapInSameAttribute","getFirstOperatorFromHierarchy","buildQueryStringByRules","buildRules","disableInSameAttributeValue","buildQueryStringForInSameAttributeValue","firstFilter","otherFilters","needFixNotOperator","firstFilterClause","buildQueryString","fixedFirstClause","otherFiltersClause","isRootLevel","isCompositeFilter","parseCompositeFilters","buildFilterQueryString","extraBuildRules","addGlobalFilterToQuery","globalFilter","dateOptions","stringOptions","numberOptions","getFilterOptionsForQueryBuilder","fieldNameToFilterOptions","getFilterOptionsForDataTypeDefinition","availableRelationshipFilters","getFilterOptionsForRelationshipQueryBuilder","processLabel","attributesValues","names","shift","evaluateDeepEntityLabel","re","RegExp","temp","exec","m","removeCommaRegExp","getLabel","noLabelLocalized","labelWithoutComma","findLabelPattern","dataLabelPattern","evaluateAttributeLabel","referencedEntityTypeURI","generateEntityUrlForOldMode","uiPath","generatePivotingUrlForOldMode","generateTagUrlForOldMode","tag","getAbsoluteImageUrl","storagePath","imagePath","getImageAttrValue","getEntityImage","entityImage","getDefaultProfilePicValue","getDefaultProfilePic","imagesAttrTypeUris","getAttributeTypeUriByName","imageAttributeURIs","getPossibleImagesAttributeTypeUris","getEntityTypeImagesAttributes","DTSS_PREFIX","getDataTenantEntityUri","removeDtssPrefixFromEntityUri","isDataTenantEntity","isDataTenantEntityUri","getDataTenantFromEntityUri","nth","getEntityUriForLink","getEntityId","getEntityTypeProperty","getEntityTypeLabel","getEntityTypeGraphIcon","getBusinessCardAttributes","firstOV","referenceValue","simpleValue","valueOrLabel","relationshipLabel","text","getBusinessCardAttributesText","isEntityImportedToCT","ctSubscribedUris","getEntityMatchRules","getProfileEntityWithHistoryDiff","historySlice","aEntity","getProfileEntityWithoutHistoryDiff","cleanEntityAttributes","isEmptyEntity","props","enrichEntityWithDataTenant","createDCRProcessor","alwaysCreateDCR","dcrUri","dcrInfoContainer","dcrObjectUris","hasChangeRequest","isChangeRequest","getDCRUris","getDCRUriFromResponse","applySpec","updateDCRUri","updateDCRUriFromResponse","resolveDcrUriAwait","getDcr","parameter","enhanceUriWithDCR","changeRequestId","getDCRObjectUris","getDCRUri","dcrUriAwait","getDcrUriAwait","enhanceDCREntitiesFromResponse","response","enhanceValue","isSimpleValue","nestedUri","objectInfo","objectsInfo","isExist","fromPairs","enhanceAttribute","parentAttributeType","changes","CREATE_ENTITY","newValue","createRelationUriProcessor","infoContainer","newUriMap","getUri","addUriFromCreateRequest","oldUri","successful","newUri","setNewUri","hasNewUri","createRelationCreateCommand","CREATE_RELATION","parameters","createRelationDeleteCommand","DELETE_RELATION","createRelationIgnoreCommand","relationDirection","IGNORE_RELATION","createRelationUpdateCommand","oldRelation","newRelation","UPDATE_RELATION","createRelationRepointCommand","newEntityUri","isReversed","REPOINT_RELATION","isRelationCommandForUri","command","pathEq","isRelationDeleteCommand","isRelationCreateCommand","isRelationRepointCommand","isRelationUpdateCommand","runPromisesSequentially","async","responses","fns","errorResponse","createExecutableCommand","dcrProcessor","relationUriProcessor","uriPreprocessor","responseHandler","startEntityUri","endEntityUri","removeRelation","ignoreSuggestedRelation","relatedEntityUri","updateRelation","actions","injectAdditionalProps","execute","prependExecutableCommandWith","prepend","executableCommand","createCommandExecutor","commandExecutor","commands","replaceTempUriInCommands","tempUrisMap","replaceUriWhenTemporary","updateCommandByCondition","condition","updater","keepOnlyCreateCommandForUri","createCommandForUri","updatedRelation","updatedParentUri","updatedEntityUri","filteredCommands","keepOnlyLastRepointCommandForUri","repointCommandsForSameUri","keepOnlyLastDeleteCommandForUri","deleteCommandsForSameUri","mergeSeveralUpdateCommandsForUri","updateCommandsForSameUri","firstOldRelation","optimizeDeleteCommands","deletedRelationUris","optimizeCreateCommands","createdRelationUris","optimizeRepointCommands","repointedRelationUris","optimizeUpdateCommands","updatedRelationUris","optimizeCommands","getRelationObjectFromConnection","connection","getConnectionRelationObjectPath","getConnectionRelationStartDatePath","getConnectionRelationEndDatePath","prepareEntityUriFromConnection","getConnectionEntityUriPath","createRelationsCommandsFromConnections","connections","removedUris","addedConnections","editedConnections","ignoredRelationData","isInDirection","getConnectionRelationDirectionPath","parentEntityUri","newPointUri","isRepointRelation","getStartObjectUri","getEndObjectUri","oldConnection","findConnectionByRelationUri","getConnectionRelationUriPath","getEntitiesMapForConnections","isDataTenantRelation","getConnectionRelationUriForLink","getRelationAttributesList","isComplexItem","containsUri","parseUris","parseUri","shouldSkipDescendantUris","hasValidMetadata","nextAcc","descUri","deriveEntityTypesFromRelations","deriveEntitiesFromRelationsMetadata","objectType","relations","indexByUri","indexBy","parseRelationsConfigContent","parseEntryUris","parseRelationsConfig","applyRelationTypeObject","updateConnectionEntityLabel","newLabel","entityLens","lensProp","over","RELATION","getConnectionRelationTypePath","getConnectionRelationAttributesPath","getStartObjectTypeUri","getEndObjectTypeUri","found","findConnectionRelationObjectByRelationUri","isValidRelationToAdd","createNewConnectionWithDefaultRelationType","newConnection","getInOutRelations","contentSecondLevel","defaultRelationTypeObject","getDefaultRelationTypeObject","inRelationTypes","outRelationTypes","getRelUri","rel","relationTypeMetadata","canCreateRelation","isCurrentRelationType","setObjectTypes","assocPath","getRelationTypeMetadata","getInOutRelationTypesForEntityTypeUri","isAcceptableRelationType","canHaveRelationBetweenEntityTypes","startEntityTypeUri","endEntityTypeUri","availableRelationTypes","isAvailableRelationBetweenEntities","isOutRelationForRelatedEntity","relatedEntity","isEntityInstanceOf","getEntityObjectUri","isRelatedEntityInstanceOf","getRelatedEntityObjectUri","getSuitableEntityTypeUrisForRelationTypes","entityTypeUrisFromRelations","buildError","isActiveError","deactivated","getErrorId","getErrorUniqKey","getErrorMessage","getErrorType","isPartOfErrorParentUri","isErrorParentUri","isPartOfErrorAttributeTypeUri","isErrorAttributeTypeUri","isErrorForSubattributeWithSameParentUri","getAttributePagerActiveErrors","isCriticalError","getAttributePagerActiveTypeErrorMessage","missed","getAttributeOwnError","getRelationEditorActiveError","missedRefEntity","getReferencedEntityActiveError","hasAttributeDescendantsWithErrors","getHierarchyNodeEditorActiveError","evaluateErrorPath","entitiesMap","valuePath","getAttributeValuePath","pathItem","valuePathItem","valueType","referenceAttrValue","referencedEntityTypeUri","refEntityType","tempEntity","relationConnection","getErrorPathItemLabel","severity","ERROR","isAttributeTypeError","hasAttributeSomeValue","subType","areAttributeValuesEmpty","validateRequiredAttributes","requiredAttrTypes","outputRecords","attrValuesGroups","ignored","local","findAttributeValuesByTypeUriC","validateIfReferencedEntitiesExists","getRefAttributeValues","validateTempReferencedEntities","tempEntitiesMap","validateTempReferencedEntity","allowedReferenceAttributes","validateEntityLocally","requiredAttributesErrors","emptyReferencedEntityErrors","tempReferencedEntityErrors","getSingleAttributeEntity","validateComplexAttribute","fakeEntity","validateConnectionRelation","relationObject","validateConnection","connectionTempEntity","relationRequiredAttributesErrors","connectionEntityExistsErrors","validateIfConnectionEntityExists","tempEntitiesErrors","validateConnectionTempEntities","validateHierarchyConnection","shouldUseValidationService","lifecycleActions","validate","transformValueUris","transformFunction","createTransformUriFunction","transform","fixReferenceAttrValueForValidation","operation","relationUriLastPart","tempEntityUri","preparedTempEntity","prepareEntityForValidation","collectDiffForValidation","modifiedEntity","forceOvForUiUpdates","applyCrosswalks","compareAttributes","clone","collectCrosswalksFromAttributes","collectSpecialAttributesDiff","validationUriToRegularUri","validationServiceErrorToAttributeError","rawError","objectUri","objectParentUri","errorType","toUpperCase","invalid","objectTypeUri","validationService","convertValidationServiceErrors","errorPath","errorParentPath","lastPathItem","findErrorAttributeType","parentPathItem","referencedEntityUri","referenceAttributeErrorsPostProcessing","isDateRangeValid","AGO","BETWEEN","buildUserFilterClause","user","buildSourceFilterClause","buildEntityTypeFilterClause","buildDateRangeFilterClause","dateRange","buildEntityUriFilterClause","addQuestionSignIfNeeded","getFacets","collectSearchParamsForTotal","filters","entityFilters","searchParams","activeness","activityFilter","ActivityFilters","searchOptions","getTotals","getTotalsForQuery","fromEntries","URLSearchParams","entries","typeAheadSearch","searchValue","entitiesForRequest","entityFilter","searchFilter","typeAheadFilter","select","scoreEnabled","searchByOv","getSearchQuery","getFacetedAttributeDataWithSearchParams","pageNo","pageSize","orderType","getFacetedAttributeData","SELECT_DEFAULT","collectSearchParamsForFilteredEntities","getFilteredEntities","getEntitySecondaryLabel","getEntity","getEntitiesByUris","defaultMaxValues","getTmpValues","getPagedEntity","apiPath","searchQuery","sorting","valuesCount","tmpValuesCount","attributesPaging","attributeSearchUri","filtersWithSearch","getDtssEntityUrl","defaultGetEntityOptions","getEntityBySurvivorshipGroupUri","survivorshipGroupUri","explicitSurvivorshipGroup","saveEntity","removeEntity","cloneEntity","valuesToCopy","executeLCA","getEntitiesStats","facet","startTime","endTime","types","insertDefaultImageByAttrUri","entityCumulativeUpdate","getEntityUpdatedTime","getInteractions","uploadFileForSearch","file","FormData","getSavedSearches","containsWordStartingWith","favoriteOnly","countResults","findPublic","getSavedSearch","createSavedSearch","savedSearch","updateSavedSearch","getSavedSearchBody","deleteSavedSearch","markSavedSearchAsPublic","isPublic","markSavedSearchAsFavorite","isFavorite","ENTRY_FIELDS","processNextEntry","getActivenessEnabledValue","configs","removeActivenessFromConfig","buildRelationsForEntityRequest","reqOptions","activenessEnabled","urlSearch","limitCreditsConsumption","activeness_enabled","processRelationsForEntityResponse","responseItem","removeEmptyValues","addSlashIfNeeded","getRelation","prepareBody","getAttributes","compareActivenessAttributes","getRelationsForEntity","rateRelation","getRecentSearches","servicesPath","environment","application","createRecentSearch","recentSearch","deleteRecentSearch","createdDate","defaultQueryParams","getTree","activenessDate","signal","graphTypeURIs","activeness_date","getPathsTree","graphUri","getHops","filterLastLevel","generateId","random","ACTIVITIES_URL","createActivity","ActivityID","ACTIVITY_TYPES","getActivities","getActivitiesTotal","getProfileActivities","otherOptions","getProfileActivitiesTotal","createUrl","workflowPath","startProcessFromQuery","processType","searchString","EnvironmentURL","sendWorkflowRequest","newUrl","startProcessInstanceByPairs","objectURIs","sendStartProcessInstanceRequest","array","request","andThen","sendRequests","startProcessInstance","comment","basicBody","getTasksForEntity","includeClosed","isGetRequest","bodyPart","getTasksForTenant","getGroupTasksForTenant","getTaskById","taskId","updateTask","addCommentForTask","processInstanceComment","getAssigneeForTask","tasks","updateAssigneeForTask","updateDueDateForTask","updatePriorityForTask","priority","runTaskAction","action","processDefinitions","getTransitiveMatches","markMatchedValues","rules","getNotMatch","mergeSameEntities","currentEntityUri","entities","customerTenantEntityUris","getUris","markAs","markAsNotMatch","reinstateMatch","setAsMatch","DTSS_TIMEOUT","importEntityFromDataTenant","dtssPath","customerTenant","DataTenant","CustomerTenant","hasNonImportedRelations","requestForDataTenant","importDTConnections","mergeDataEntityWithCustomerEntity","dataEntityUri","customerEntityUri","mergeDataTenantEntity","mergeCustomerTenantEntityWithMixedEntities","dtEntities","ctEntities","parseDataTenantEntityMatches","matchRule","objectIndex","processDataTenantMatches","getMatchesForDataTenantEntity","getPotentialItemsFromDataTenants","log","getMatchesFromDataTenants","SearchMetadata","getNotMatchesFromDataTenants","withDtssPotentialItems","dtssRequest","dataTenantsRequest","markDataTenantEntityForCustomerEntityAs","markDataTenantEntityAs","markDataTenantEntityAsNotMatch","reinstateDataTenantEntityMatch","markMixedEntitiesAs","markMixedEntitiesAsNotMatches","reinstateMixedEntitiesMatches","requestProvider","getFilteredEntitiesFromDataTenant","buildFilteredEntitiesUrl","getTotalFromDataTenant","getRelationsForDataTenantEntity","getDataTenantEntitySecondaryLabel","unsubscribeEntityFromDataTenantEntity","getCustomerTenantInfo","timeout","getDTSubscriptions","getDataTenantsInfo","tenants","getDataTenantEntity","loadMetadata","getGraphSearchEntities","searchBody","ordered","orderBy","from","getGraphSearchCount","createBaseUrl","collaborationPath","getCommentsCount","getComment","commentId","createComment","updateComment","deleteComment","deleteReply","replyId","updateReply","createReply","getComments","maxResults","relatedObjectUri","pageToken","queryString","getAllUsersForTenant","GRAPH_EXPORT_NAMESPACE","postGraphExport","exportId","exportData","graphExports","graphExportsData","configServiceRequest","namespace","requestOptions","getEnvironmentSettings","collectVersions","getUIConfiguration","userName","projection","getConsoleApps","getSearchLinkState","stateHash","uploadImage","imageServicePath","image","getDataChangeRequest","exportActivities","exportPath","getCrosswalkTree","addCrosswalk","addCrosswalkInContributor","contributorCrosswalkType","contributorCrosswalkValue","contributorCrosswalkSourceTable","crosswalkType","crosswalkValue","crosswalkSourceTable","crosswalkDeleteDate","noReltioSourceSystem","dataProvider","contributorProvider","unmergeContributor","contributorUri","operationType","contributorURI","editCrosswalkAttribute","crosswalkId","deleteCrosswalkAttribute","deleteCrosswalk","getNumberOfThreads","metrics","numberOfMetrics","numberOfThreads","getDQChartsData","dataLevel","ATTRIBUTE_TYPE","getDVF","dvfPath","getMlDqData","mlDqPath","viewMultiplier","anomaly","getTenantPermissions","deleteAttribute","sourceUri","pinAttribute","ignoreAttribute","updateAttribute","createAttribute","attributePrefix","cleanValue","updateActivenessAttribute","deleteActivenessAttribute","getHistoricUris","getHistoryWithTotal","historicUris","historicURIs","getEntityPreviousChange","getEntityTimeSlice","time","sendRequestFromCustomSandbox","noRequestProcessor","requestMethod","validateEntityChanges","validationServicePath","validateEntity","getTenantName","getRdmTenants","getUserPreference","setUserPreference","resetUserPreference","getAccessToken","exportDQ","isTimeseries","exportDQPath","createTemporaryEntity","initValue","tempUri","existedDefaultValue","addInitValue","findTemporaryRefEntities","parentEntity","findRelatedTemporaryEntities","relatedEntities","getUrisForSaving","getRefEntityPaths","getPathsWithTempUri","pathL","findAllTemporaryRefEntityURI","getUrisFromObject","replaceTemporaryRefEntityURI","pathToObjectURI","pathSatisfies","getPath","set","lensPath","clearTemporaryUri","prepareTemporaryEntityForApi","saveTemporaryEntity","uriMapping","tempUris","saveResponse","getErrorFromSaveResponse","entityResponse","getEntityUriFromDCRResponse","savedEntity","getEntityFromSaveResponse","saveTemporaryEntities","allEntitiesMap","rootTemporaryEntityUris","getTemporaryEntitiesUrisOrderForSaving","buildTreeForUriRoot","rootNode","DependencyManager","Node","edgeUri","edgeRootNode","addEdge","getDependencyOrder","getInfo","removeTemporaryUriInAttrDiff","compareTags","compareRoles","compareImages","collectAllDiffs","prepareAttrDiff","entitiesMapping","uriPairs","addObjectsHierarchyNode","updateObjectsHierarchyNode","getEntitiesHierarchy","updatedResult","addConnectionsToHierarchy","updatedHierarchy","hierarchyWithUpdatedMainEntity","connectedEntityUri","hierarchyWithConnection","getFullObjectsHierarchy","getRestrictedObjectsHierarchy","desiredRootUri","getHierarchyDescendants","getHierarchyAncestors","objectsHierarchy","ancestorsValuePath","ancestorsBaseUris","valueBaseUri","referenceAttribute","childEntity","getAncestorsValuePath","reverse","isRelation","ids","relativeUri","partitions","elem","splitOnNamesAndIds","valuesRecord","findValue","ownValue","tempEntityValue","getAbsoluteValueUriFromPath","HistoryOperations","historyPalettes","insertAttribute","color","backgroundColor","getHistoryAttributeClassName","ATTRIBUTE_DELIMITER","hasParent","lte","getParentHistoryAppearanceByUri","history","hasModifiedChildren","getHistoryAppearanceByUri","getHistoryAppearanceBySpecialAttributeValue","collectContributorsFromTree","contributors","merges","merge","losers","loser","findContributorForCrosswalk","contributor","eqBy","getCrosswalkId","collectCrosswalksFromContributor","includeMerges","looser","calculateCrosswalkTreeDeep","childDeep","getCrosswalkAttributes","isCrosswalkDisabled","getDataTenantFromCrosswalks","dataTenantSources","dataTenantsByType","dataTenantsById","dtId","crosswalkExternalInfo","dtssInfo","eqCrosswalks","getRelationCrosswalks","isAttribute","EventType","compareArraysAndGenerateEvent","array2","array1","element","refEquality","ref1","ref2","equalsByField","keepUri","attrA","currentAttribute","currentVal","createEntryDeleteAttribute","valFromA","valFromB","findAttrValue","createIgnoreEvent","getAttributeType","createEntryInsertAttribute","createEntryUpdateNonOVAttribute","UPDATE_ATTRIBUTE","attrB","missedValues","valueObject","hasValue","DELETE_ATTRIBUTE","IGNORE_ATTRIBUTE","createEntryIgnoreAttribute","createEntryUndoIgnoreAttribute","_UPDATE_NON_OV_ATTRIBUTE","INSERT_ATTRIBUTE","newVal","parse","cleanAttrValue","matchVal","v1","v2","defaultProfilePic","UPDATE_PROFILE_PIC_BY_URI","defaultProfilePicValue","UPDATE_PROFILE_PIC_BY_URL","checkAttribute","UPDATE_START_DATE","UPDATE_END_DATE","a1","b1","checkResult","reltioCrosswalkType","reltioCleanserCrosswalkType","setCrosswalk","change","cw","groupBy","xs","rv","markToRemove","removeIt","newChanges","crosswalksForMe","getCrosswalksForValueUri","reltioCrosswalksForMe","nonReltioCrosswalksForMe","singleReltioSiblingValueForCleanser","findSingleReltioNonOvSiblingValue","reltioCrosswalksForSiblingValue","insteadOfUpdate","flatResult","groupsObject","changesRelatedToThisGroup","firstReltioValue","attributeValues","arrAttr","relCrosswalks","j","k","UPDATE_TAGS","UPDATE_ROLES","Manager","o","func","createUpdateAppearance","attributeAppearance","valueAppearance","ignoredValues","mergeEvents","ignoredAttributes","toIgnore","updatedAttributes","appearance","mergeAttributes","oldState","newState","dst","oldStateArr","existingUris","oldStateItem","unIgnored","newItems","mergeWithUri","computeHistoryDiff","clonedOldState","clonedNewState","updateAppearance","computeArraysHistory","added","difference","deleted","mergedArray","createAppearance","computeEntityHistoryDiff","oldEntity","newEntity","rolesAppearance","tagsAppearance","getAttributeValuesUris","createObjectIdForPM","matchUri","getProfileBandObjectIdsForCollaboration","getProfileObjectIdsForCollaboration","attributesUris","getPotentialMatchesObjectIdsForCollaboration","matchEntitiesUris","getRelationshipsObjectIdsForCollaboration","createRelatedObjectUris","ENTITY","createRelatedObjectUrisForEntity","ENTITY_ATTRIBUTE","RELATION_ATTRIBUTE","createRelatedObjectUrisForAttribute","POTENTIAL_MATCH","matchEntityUri","createRelatedObjectUrisForPotentialMatch","createRelatedObjectUrisForRelation","calcTotalCommentItems","commentsMap","getMembersNameForType","interactionType","getMembersByNames","interaction","getMemberByName","getActorsForInteraction","getMaxItemWidth","titleProp","_getMaxItemWidth","getApproximateItemWidth","Infinity","Palettes","palettes","templates","random0","granularity","colors","potentialMatches","random1","spectreYellowCyan","spectreBlueBrown","charts","getPalette","template","counter","granularityCounter","idToColor","getColorForId","palette","activePalette","colorId","generateNextColor","getChartItemColor","Charts","getPotentialMatchesColor","PotentialMatches","getTenantIconColor","Random1","getFontColor","bgHexColor","getColor","fractionsRange","v","getHashForString","seed","h1","h2","ch","imul","colorHash","ColorHash","saturation","lightness","entitiesColorHash","getUniqueColorForId","paletteName","hsl","generateUniqueColor","h","l","getCrosswalkColor","getSourceColor","getContributorColor","getDvfColor","getEntityColor","isLayout","getLimitedValue","MAX_SAFE_INTEGER","getHBoxWidth","width","getHBoxHeight","height","getVBoxWidth","getVBoxHeight","isPercent","isSpacer","getPercentValue","round","parseFloat","processNestedReltioGridLayout","layout","gridLayout","adjustToAvailableWidth","availableWidth","itemsWidths","adjustedWidths","maxWidth","defaultGetLayoutOptions","convertOldLayoutToReltioGridLayout","getViewOptions","rootLayout","gridOptions","getLayoutOptions","getItemWidth","itemOptions","layoutWidth","hasFlex","flex","itemWidth","withFlex","otherItems","propIs","allFlexed","freeWidth","otherItemWidth","getFlexValue","flexValue","totalFlex","withWidthItems","percentOfDefinedWidth","getItemHeight","minHeight","maxHeight","processScrollLayout","processOldLayout","processHBoxLayout","view","processedItems","reltioGridItems","itemIndex","viewOptions","y","processVBoxLayout","itemHeight","minWidth","processProfileLayout","getItemY","processFullWidthItem","processColumnFragment","fragment","columnItems","fragmentWidth","leftOptions","rightOptions","leftItem","rightItem","getHeight","topFragment","centerColumnWidth","underTopPositionY","centerFragment","rightFragment","layoutHeight","isEmptyFragment","preparedLayout","isProfileLayout","rootOptions","columns","layoutWithNestedGrid","removeUnsupportedLayoutItems","views","bigWidgetClasses","FilteredEntitiesViewFacet","ActivitiesViewFacet","ProfileStatsFacet","FilteredSavedSearchesFacet","setMinHeightForDashboardWidgets","viewMinHeight","component","oldToNewTypes","BarChart","BAR","BarChartGrouped","BarChartHorizontal","LineChart","LINE","Map","MAP","Pie","PIE","convertAttributeUri","convertChartOptions","currentOption","chartId","geoIdName","showLegend","chartType","isHorizontal","convertFilteredSavedSearchesOptions","findShared","convertOldFiltersWithSpecialAttributes","convertOldFilters","mapByType","converters","DashboardFacet","title","BUBBLE","CustomActionViewFacet","firstDimension","useEntityType","typeFilter","showOthers","mapType","geoUrl","inheritChildren","hideEmpty","EntitiesByTypeViewFacet","CLOUD","TREE","NotificationInboxFacet","getDashboardViewOptions","convertConfigViews","converter","class","convertOldDashboardConfig","version","margin","collectPerspectiveViews","layoutItem","OldViewTypes","OldMap","OldTree","convertDefaultView","Attributes","HierarchyTree","HierarchyPaths","RelationsTable","Relations","isComplex","recordClass","SingleAttribute","Custom","AttributeTable","ImageAttribute","getProfileViewOptions","getViewType","autosizing","fixLayout","convertOldProfileConfig","basicConfig","newLayout","isViewType","viewType","isAvailableAttributeTypeForProfile","includeUris","excludeUris","viewExcludedUris","getAvailableProfileAttributesConfig","getProfileViewsIdsByTypes","viewTypes","getExtensionById","extensions","ext","getExtensionsByPointId","configuration","pointId","point","getProfileBand","plugin","getAuthoring","getViewExtensionsForPerspective","viewId","isDBConnectorItem","isCustomExtension","getEntityPerspectives","getEntityPerspectiveScreenItem","extension","sidePanelViews","authoringAttributes","commonViews","side","panelLayout","dBConnectorItems","dBConnectorExtensions","getSidePanelViewsForPerspective","className","getExtensionsByClass","getWorkflowConfig","profileConfig","profileBand","authoring","getDashboardPerspectiveScreenItem","perspective","dashboardConfig","Dashboard","getDQDashboardPerspectiveScreenItem","viewExtension","DQDashboard","viewsByDataLevel","layoutsByDataLevel","showTimeSeries","showOVSwitcher","showErrorBands","showExportButton","getRelationshipSearchPerspectiveScreenItem","RelationshipSearch","consoleExportApp","getInteractionPerspectiveScreenItem","Interactions","getRelationshipsPerspectiveScreenItem","Relationships","getSourcesPerspectiveScreenItem","Sources","getPotentialMatchesPerspectiveScreenItem","availableTabs","allowMergeAll","matchActions","getSearchPerspectiveScreenItem","potentialMatchesReview","searchExtWithProcessType","getProcessTypeForSearch","Search","mapSearchEnabled","tabs","getGraphPerspectiveScreenItem","Graph","gerProfileActivityLogPerspectiveScreenItem","ProfileActivityLog","exportTypes","isIntersectionBetweenClasses","perspectiveClasses","classes","getScreenItemConverterByClasses","getPerspectiveScreenItem","extensionClass","Profile","getProfilePerspectiveScreenItem","ConsoleAppAction","perspectiveId","getPerspectiveId","newDashboardPlugin","entityPerspectiveId","screenItem","NestedProfile","getNestedProfilePerspectiveScreenItem","perspectiveLayoutViewIds","perspectiveLayoutExtensionClasses","getFirstLevelActions","PREFIX","GroupIcons","ICONS","DashboardGroup","ProfileGroup","SearchGroup","DEFAULT","getIconByScreen","screen","getNestedScreenGroups","child","nestedRoute","getSideMenuItemScreen","nestedGroups","getSpecialIcon","getGroupIcon","sideMenuItems","getIcon","convertOldUIConfigToLayout","getActionsByParentId","getSideMenuItems","menu","getPivotingSettings","getPivotingViewOptions","convertOldUIConfigToPivotingItems","getPerspectivesWithAttributeTypes","pivotingAttributes","getPivotingAttributes","defaultExtension","findDefaultExtension","pivotingAttribute","findExtensionWithPivotingAttribute","getExtensionsForPivoting","layoutConfig","perspectiveViewsIds","uniqBy","getViewsForPerspective","processLayoutConfig","getUIActivatorProp","activatorId","activator","getPluginByActivatorId","isDashboard","getUrlIfAbsolute","getLogo","checkIfLookupCodeStrategyAndShowCodeExist","convertOldUIConfigToProperties","getEntityRequestSettings","imageAttributeFieldsOrder","getImageAttributeFieldsOrder","lookupAutocomplete","getLookupAutocomplete","validationLevels","getValidationServiceLevels","validationReadMode","getValidationReadMode","localizationServers","getLocalizationServers","attributePresentations","thousandSeparator","groupSeparator","digitsAfterDecimalSeparator","decimalScale","getAttributePresentations","enabled","getWorkflowConfiguration","defaultRoute","getDefaultRoute","attributesSorting","getAttributesSortingStrategy","customScripts","getCustomScripts","checkUser","getCheckUser","checkIdle","getCheckIdle","showSwitchToClassic","getSwitchToClassic","lookupCodeStrategy","getLookupCodeStrategy","showLookupCode","showEntityId","preview","getPreview","logo","showAttributeDescription","getShowAttributeDescription","headerColor","getHeaderColor","dateMasks","dateTimeMask","getDateMasks","getRequestProviderConfiguration","showSearchByOv","getShowSearchByOv","masks","profileCheckUpdate","getProfileCheckUpdate","requestSettings","attributeFieldsOrder","lookups","autocomplete","showCode","levels","validateReadMode","convertOldUIConfigToNewConfig","pivoting","properties","fixNonUniqViewsIds","idToNewIdsMap","hasNonUniqs","newViews","newId","idsCountMap","workerList","initializeWebWorker","workerUrl","process","scriptText","files","worker","window","webkitURL","URL","Worker","createObjectURL","Blob","browserNotSupportWindowUrl","innerText","task","SET_HTML","html","removeEventListener","onWorkerMessage","addEventListener","isAvailableEntityTypeForDataTenant","dataTenantObject","isAvailableTenantForEntityType","flip","convertPercentValue","decimal","toNumber","attributePresentationStrategyCustomization","valueConverters","in","Decimal","mul","floor","div","out","applyPresentationStrategyToValue","revertPresentationStrategyForValue","getNumberFormat","locale","uriOrName","getNumberFormatForLocale","getSpecialAttributesPresentation","strategy","Intl","NumberFormat","formatToParts","findPartValueByType","typeToFind","decimalSeparator","groupSize","applyFormatToNumber","suffix","roundedNumber","integer","integerRegex","integerPart","trimmedDecimal","getLocale","intl","setLocale","newLocale","number","rawValue","warn","formatNumber","formatNumberAsMetric","limit","getFileName","setLookupStrategy","getLookupLabel","getResolvedLookupValue","resolvedLookups","lookupTypeCode","getResolvedLookupLabel","isResolvedLookupCode","codeValue","hasPath","isUnresolvedLookupCode","buildLookupRecord","mergeLookupsLists","lookupsLists","merged","mergedLookups","codeValues","getUnresolvedLookupsList","formatDataTypeValue","dateFormat","dateTimeFormat","getTime","selectedOption","style","currency","minimumFractionDigits","theme","primary","main","light","dark","secondary","success","background","paper","default","hover","hoverOpacity","disabled","hint","divider","components","MuiButton","defaultProps","MuiTooltip","disableInteractive","MuiTab","styleOverrides","root","MuiDialogTitle","paddingTop","MuiFilledInput","lineHeight","input","MuiTablePagination","MuiInputBase","display","WebkitTextFillColor","MuiMenuItem","breakpoints","sm","md","lg","xl","transitions","duration","shortest","shorter","short","standard","complex","enteringScreen","leavingScreen","tooltip","borderRadius","inactiveBackground","inactiveSelectedBackground","inactiveSelectedHoverBackground","inactiveHoverBackground","inactive","opacity","basicView","boxShadow","suggested","withTimeout","fetch","extendedOptions","AbortController","controller","timerId","abort","finally","withRetries","getRetriesCount","retryDelay","attempt","exp","retriesCount","withErrorParsing","ok","createRequestProvider","refreshToken","onRequest","onResponse","addRequestInterceptor","addResponseInterceptor","removeRequestInterceptor","removeResponseInterceptor","interceptors","ctx","next","Response","handler","createInterceptors","wrapFetch","disabledServicesMap","servicesTimeLog","attemptsThreshold","attemptsTimeWindowSize","urlId","getServiceName","isDisabledService","rejectedRequest","servicesTimeLogLength","boundaryIndex","excludedServices","withDisablingUnauthorizedServices","refreshTokenRequest","requestAfterTokenRefresh","withTokenRefresh","interceptorInitializationPending","delayedRequestResolvers","safeFetch","executeRequest","delayedRequest","resolver","requestExecutor","createDelayedRequest","setRequestProviderConfiguration","requestProviderConfiguration","assign","startInterceptorInit","finishInterceptorInit","METADATA_KEY","draftMarkL","lens","getMarkL","setDraftMark","getDraftMark","markNew","markRemoved","markEdited","markIgnored","checkRemoved","checkNew","checkEdited","checkDraftMarked","checkIgnored","omitMarks","marksJSONReplacer","getPathByCondition","findCallback","pathList","getPathById","getPathByEntityUri","findParentNodeById","findNodeById","mapTree","childrenProcessing","nodeProcessing","noop","walkTree","getPayloadForNodeApplyEditing","editingMode","addingParent","addingChild","editing","payload","getNotAppliedTreeCommands","trees","treeRoot","hasEntityInTree","replaceEntityInTree","processChildren","updateTreesWithNewEntity","getIdsToUpdate","treeContainsEntity","getReplacementTrees","TREE_SORT_FIELD_VALUES","relationTypeLabel","TREE_SORT_ORDER_VALUES","desc","TREE_DEFAULT_SORT_FIELD","TREE_DEFAULT_SORT_ORDER","noSort","sortTreeChildren","sortField","typesLabelsMap","getType","labelA","labelB","utils","strings","sortByRelationTypeLabel","getEntityLabel","sortByLabel","getSortFunction","getValidatedSortOrder","toLower","getValidatedSortField","client","decodeAddress","address","mapKey","Maps","geocode","results","json","position","parseAttributeValues","isSet","variable","getAttributeValuesByUri","entityObj","getGeoLocation","refAttribute","geoLocationAttributes","lat","latitude","lon","longitude","zipWith","geoLocation","loc","pointSource","toPoint","nestedStrategy","refStrategy","nestedRes","refRes","refPoint","nestPoint","getMatchGroupLabelsForFacet","getAttrTypeForFacet","getResolvedLookupsForFacet","lookupsTree","resolvedLookupCodes","getFacetTitle","getLookupCodesFromFacets","valuesObject","isEmptyFacet","isTypeFacet","isNumericRangeFacet","FACET_TYPES","NUMERIC_RANGE_FACET","isDateRangeFacet","DATE_RANGE_FACET","isRangeFacet","WITH_DROPDOWN_CHECKBOXES_FACET","COMPLEX_FACET","ENTITY_TYPE_FACET","getFacetTypeForAttrType","getFacetTypeByAttrType","getTypeForFacet","isBooleanFacet","getFilterOptionForFacet","getFilterValueForFacet","DateRanges","replacePlaceholdersInQuery","resultQuery","dateRangeRegExp","nowTimeRegExp","dateRangeValue","nowValue","resolveDateRangePlaceholders","getSearchLink","urlObject","uiPrefix","pathname","MAP_SEARCH_TYPES","geoPolygon","onMapMove","isPolygonLikeMapSearch","searchType","formatPolygonSegment","formatCircle","getMapSearchValues","getMapSearchLabel","mapSearchTypeToFieldName","READABLE_QUERY_PRIMITIVE_TYPES","attributeLabel","specialAttributeLabel","attributeFilter","entityTypeLabel","space","bracket","punctuationMark","getDisplayedOperator","getDisplayedFilter","buildOperator","buildLocalizedOperator","buildAttributeLabel","buildSpecialAttributeLabel","buildAttributeFilter","buildAttributeValue","buildEntityTypeLabel","buildSpace","buildOpenBracket","buildCloseBracket","addToNotLastElement","whatAdd","isLastElement","joinWith","joiner","wrapWith","postfix","wrapWithBrackets","wrapWithSpaces","prependWith","prependWithEntityTypeLabel","prependWithEntityTypeLabelWithColon","buildOperations","localizable","isBracketsOpen","hasOr","operand","isOperatorAnd","isOperatorOr","builtOperator","buildOperationsToString","getSearchGroupAttributeLabel","pathToTitle","showPath","isValidSearchGroupAttribute","isValidSearchGroup","lt","getLookupsListFromSearchGroups","isLookupAttribute","getUnresolvedLookupsListFromSearchGroups","isTypeSearchGroupAttribute","getSearchGroupAttributeEntityTypeUri","isEmptySearchGroup","sanitizeTypesInSearchGroups","selectedAvailableEntityTypeUris","isFilterOptionArity","buildValue","attrData","formatFilterValue","buildValues","buildAttrValue","rangeStart","rangeEnd","buildLabel","isSpecial","buildAttribute","showTitlePath","mapIndexed","addIndex","isSingle","isMultiple","isNotEmpty","buildAttributeOperations","buildAttributesReadableQuery","buildGroup","isSingleGroup","addGroupTitle","addTitleFn","groupTitle","buildGroupsReadableQuery","composeFullQuery","getReadableMapSearchValue","buildReadableQuery","keyword","keywordQuery","buildKeywordReadableQuery","mapQuery","buildMapReadableQuery","groupsQuery","readableQueryToString","buildReadableQueryToString","isAttributesGroup","isHierarchyAttributes","isGroupWithNotFilter","buildAttributesGroup","attributesGroup","hierarchyAttributes","buildHierarchyAttributes","primitives","buildHierarchyAttributesReadableQuery","isNotTypeAttribute","parseEntityTypes","entityTypesFromSpecialAttributes","entityTypesFromAttributes","areOnlySpecialAttributes","areAttributesFromOneEntityType","canBeConvertedToOneGroup","convertTransitionAdvancedSearchGroups","complexGroups","notEmptyGroups","groupsFromAttributes","groupOperator","isLastAttribute","parseTransitionAdvancedSearchGroup","CONVERT_TRANSITION_DATE_FILTERS","convertOldDateFilter","convertOldDateValues","add","isDateAdvancedSearchAttribute","convertTransitionAttributes","convertOutdatedDateRangeValue","convertOutdatedAttributesValue","parseAdvancedSearch","parseAttributeData","advancedSearch","facetToAdvancedAttribute","newAdvancedSearchToGroups","advanced","getKeywordFromOldSearchState","convertOldFieldName","convertOldAdvancedAttribute","convertedFilter","NOT_IN_RANGE","convertedFieldName","convertedValues","filename","convertOldAdvancedSearch","oldAdvanced","fastSearchParams","newAdvancedAttributes","hasNumberProp","convertOldFacetValues","getFacetParams","commonParams","potentialMatchesDataTenant","getFacetWithChild","parentEntityType","facetParams","facets","childFacet","convertOldFacet","param","convertOldFacets","getOldRangeFacetValues","getGroupsFromOldSearchState","model","advancedGroup","facetsGroup","oldFacets","typeFacets","restFacets","oldFacetsToNewAdvanced","convertedModel","mergeAll","convertOldModel","getGroupsFromSearchState","searchState","typeFacet","groupAttributes","facetsToAdvanced","getGroupsFromNewSearchState","getKeywordFromSearchState","equalMatchEntityUri","getMatchEntity","transitiveMatches","getTransitiveMatchesForEntity","transitiveMatch","prepareMatchRule","matchEntity","getEntitiesMapForTransitiveMatches","isTransitiveMatch","getTransitiveMatchRules","negativeRules","collectAllTransitiveEntitiesUris","getMatchUris","getEntityUriFromMatchObject","getMatchRuleSummary","matchRuleSummaries","checkMatchRuleSummaryRelevance","matchRuleSummary","relevance","formatRelevanceScore","isAttributeTypeInDependentLookups","structure","convertAttributeValueToDependentLookupNodeValue","addUniqValue","oldValues","newValues","uniqByFn","addOrUpdateStructureNode","existingNode","initDependentLookups","typeUris","alreadyAddedTypeUris","isAcceptableAttributeTreeNode","childrenAttrTypes","childrenAttrTypesUris","structureWithParent","childAttrType","addToStructure","populateDependentLookupsFromEntity","isReferencedEntityAttributeOfExistingEntity","dlValues","addValueToDependentLookups","isDL","removeValuesFromDependentLookups","syncAttributeTypeWithDependentLookups","areDLValuesInOneHierarchy","childBaseUri","parentBaseUri","nearestParentOfParentValueUri","nearestParentOfValueUri","isAllowedReversedDependency","areOneObjectDLValuesInOneHierarchy","isAutopopulationEnabled","includeAttributes","excludeAttributes","filterRelatedParentValuesForDependentLookupValueUri","parentValues","modifiedEntities","getRelatedStructureNodes","relationName","relatedNodes","buildCascadeUpdateStateValue","editorsState","isTouched","isTouchedEditor","shouldAutopopulate","autopopulate","useDefaultValue","getDependentLookupStateForValueUri","descendantsNodes","ancestorsNodes","ancestorsOfDescendantsNodes","descendantNode","ancestorOfDescendantNode","descendants","nodeValue","ancestors","ancestorsOfDescendants","acceptableDescendantsTypeUris","descendantUri","descendantType","getPivotingLabel","formatValue","getNestedAttributeLabel","pivotingValue","getFirstValue","getSimpleLabel","convertPivotingValueToSearchFilters","getParamsFilteringNested","createSearchParameter","attributeSource","looseEquals","userPreferencesComparator","comparators","register","get","AttributesDiff","HistoryManager","Colors","require","dates","fontColor","minMetric","rgbColor","mdColor","metric","abs","edges","getEdges","removeEdge","edge","findNode","startNode","findParentNode"],"sourceRoot":""}